fujunling
2023-06-05 70fb56a9fb61f70ccc55fcbc085b470e9423858a
解决冲突
已修改31个文件
已删除31个文件
已重命名1个文件
已添加11个文件
15972 ■■■■ 文件已修改
Source/UBCS-WEB/src/api/code/referBtmType.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue 1503 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/advanced-query/advanced-query.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/advanced-query/advancedQuery.vue 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/code-dialog-page/referBtmTypeCrudDialog.vue 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/code-dialog-page/referConfigCrudDialog.vue 1248 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/code-dialog-page/referConfigFormDialog.vue 606 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/code-dialog-page/referSelectBtmAttrDialog.vue 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebRefer.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/classifyTreeOptionDialog.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/classifytreeoption.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/referBtmDialog.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/selectAttrOptionDialog.js 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/main.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/code/code.vue 717 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/vue.config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/service-start.sh 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/service-stop.sh 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOsattributeDTO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOsbtmtypeDTO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOsbtmtypeattributeDTO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateAttr.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsattributeEntity.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsbtmtypeEntity.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsbtmtypeattributeEntity.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/ICodeOsbtmtypeClient.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeOsattributeVO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeOsbtmtypeVO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeOsbtmtypeattributeVO.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTypeAttributeVO.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/GroupBaseModel.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateAttrController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeOsattributeController.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeOsbtmtypeController.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeOsbtmtypeattributeController.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeReferBtmTypeController.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeOsbtmtypeClient.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeOsattributeMapper.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeOsbtmtypeMapper.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeOsbtmtypeattributeMapper.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyTemplateAttrService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeOsattributeService.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeOsbtmtypeService.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeOsbtmtypeattributeService.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeReferBtmTypeService.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeOsattributeServiceImpl.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeOsbtmtypeServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeOsbtmtypeattributeServiceImpl.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeReferBtmTypeServiceImpl.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeOsattributeWrapper.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeOsbtmtypeWrapper.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeOsbtmtypeattributeWrapper.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeRuleWrapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeOsattributeMapper.xml 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeOsbtmtypeMapper.xml 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeOsbtmtypeattributeMapper.xml 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/BtmTypeController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-webservice/Dockerfile 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-webservice/pom.xml 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-webservice/src/main/java/com/vci/ubcs/code/webservice/GroupCodeApplyApplication.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/data/applogs/xxl-job/xxl-job-admin.log 8407 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/data/applogs/xxl-job/xxl-job-admin.log.2023-05-30.zip 补丁 | 查看 | 原始文档 | blame | 历史
Source/data/applogs/xxl-job/xxl-job-executor-sample-springboot.log 521 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/data/applogs/xxl-job/xxl-job-executor-sample-springboot.log.2023-05-30.zip 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/code/referBtmType.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
import request from '@/router/axios';
export const referDataGrid = (page, limit, params) => {
  return request({
    url: '/api/ubcs-code/referBtmTypeController/referDataGrid',
    method: 'get',
    params: {
      ...params,
      page,
      limit,
    }
  })
}
export const gridAttributesByBtmId = (page, limit, params) => {
  return request({
    url: '/api/ubcs-code/referBtmTypeController/gridAttributesByBtmId',
    method: 'get',
    params: {
      ...params,
      page,
      limit,
    }
  })
}
Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue
@@ -1,751 +1,752 @@
<!-- eslint-disable vue/valid-v-for -->
<!-- eslint-disable vue/require-v-for-key -->
<template>
  <div>
    <avue-form
      v-model="form"
      :option="option"
      v-loading="loading"
      ref="form"
      :style="{ minHeight: loading ? '300px' : '' }"
    >
      <template :slot="item.prop + 'Label'" v-for="item in slotColumnList">
        <span>
          <span>{{ item.label }} </span>
          <el-tooltip
            v-if="item.keyAttr"
            class="item"
            effect="dark"
            content="该属性为关键属性"
            placement="top-start"
          >
            <i class="el-icon-star-on key_attr_icon"></i>
          </el-tooltip>
        </span>
      </template>
      <template :slot="item.prop + ''" v-for="item in slotColumnList">
        <vciWebRefer
          v-if="item.type == 'refer'"
          :value="item.value"
          :options="item.referConfig || {}"
        ></vciWebRefer>
      </template>
    </avue-form>
  </div>
</template>
<script>
import { getFormTemplate, getFormDetail } from "@/api/formTemplate";
import { getDictionary } from "../../api/system/dict";
import vciWebRefer from "../refer/vciWebRefer.vue";
export default {
  name: "FormTemplate",
  components: { vciWebRefer },
  props: {
    // é»˜è®¤ç¦ç”¨å…ƒç´ 
    disabledProp: {
      type: Array,
      default: () => ["id"],
    },
    templateOid: {
      type: String,
      default: "",
    },
    codeClassifyOid: {
      type: String,
      default: "",
    },
    // åˆ—表数据oid
    rowOid: {
      type: String,
      default: "",
    },
    // è¡¨å•类型(add, edit, detail)
    type: {
      type: String,
      default: "add",
    },
    // è‡ªå®šä¹‰è¡¨å•类型
    selfColumnType: {
      type: Object,
      default: () => ({}),
    },
    // è‡ªå®šä¹‰è¡¨å•属性
    selfColumnConfig: {
      type: Object,
      default: () => ({}),
    },
  },
  data() {
    return {
      formIndex: 0,
      form: {},
      option: {
        emptyBtn: false,
        submitBtn: false,
        labelWidth: "140",
        column: [],
        group: [],
      },
      loading: true,
      columnType: {
        text: "input",
        combox: "select",
        truefalse: "switch",
        number: "number",
        textarea: "textarea",
        datetime: "datetime",
        date: "date",
        refer: "refer",
      },
      // å‡æ•°æ®
      testItems: [
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "id",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "传值禁用功能",
          tooltips: "",
          type: "combox",
          unique: false,
          verify: "",
        },
        {
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "state",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: true,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "接口禁用功能",
          tooltips: "",
          type: "combox",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "oldcode",
          hidden: false,
          keyAttr: false,
          prefix: "el-icon-search",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "文本后缀测试",
          text: "前后缀功能",
          tooltips: "",
          type: "text",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "materialname",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: true,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "正则校验功能",
          tooltips: "请输入数字",
          type: "text",
          unique: false,
          verify: "/[0-9]/",
        },
        {
          comboxKey: null,
          customClass: null,
          data: [
            {
              attributes: {},
              key: "model_type",
              value: "模型",
            },
            {
              attributes: {},
              key: "part_type",
              value: "零件",
            },
          ],
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "dataSelect",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "直接返回下拉",
          tooltips: "",
          type: "combox",
          unique: false,
          verify: "",
        },
        {
          comboxKey: "formTemplateTest",
          customClass: null,
          data: [],
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "dictSelect",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "字典返回下拉",
          tooltips: "",
          type: "combox",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "firstfl",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "数字输入框",
          tooltips: "",
          type: "number",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "yyyy-MM-dd HH:mm:ss",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "datetime",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "日期时间选择器",
          tooltips: "",
          type: "datetime",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "time",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "时间选择器",
          tooltips: "",
          type: "date",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "false",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "xiaoshouwl",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "开关",
          tooltips: "",
          type: "truefalse",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "我是默认值",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "tuhao",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "默认值功能",
          tooltips: "提示",
          type: "text",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "xinghaoguige",
          hidden: false,
          keyAttr: true,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "属性关键值",
          tooltips: "",
          type: "text",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "jiliangdw",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          tip: "我是提示功能",
          required: false,
          selectLibFlag: "",
          showField: "jiliangdwname",
          suffix: "",
          text: "提示功能",
          tooltips: "",
          type: "text",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "textarea",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "文本域",
          tooltips: "",
          type: "textarea",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "cz",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: true,
          referConfig: {},
          required: false,
          selectLibFlag: "",
          showField: "depId",
          suffix: "",
          text: "参照",
          tooltips: "",
          type: "refer",
          unique: false,
          verify: "",
        },
      ],
      trendsSpan: 8,
      defaultValue: {},
      // è¡¨å•属性
      attributes: [],
      slotColumnList: [],
    };
  },
  mounted() {
    this.handleResize();
  },
  methods: {
    // åˆå§‹åŒ–
    init(columnList) {
      if (Array.isArray(columnList)) {
        this.templateRender(columnList);
      } else {
        this.getFormTemplate();
      }
    },
    // æŽ¥å£èŽ·å–è¡¨å•æ•°æ®
    getFormTemplate() {
      getFormTemplate({
        templateOid: this.templateOid,
        codeClassifyOid: this.codeClassifyOid,
      })
        .then((res) => {
          if (res.status === 200) {
            this.templateRender(res.data.formDefineVO.items);
            this.$emit("getFormTemplateEnd", res.data);
          }
        })
        .catch((err) => {
          this.loading = false;
          console.log(err);
        });
    },
    // æ¸²æŸ“表单模板
    templateRender(formItemList) {
      // æ— éœ€åˆ†ç»„数据
      let column = [];
      let group = [];
      let dictKeys = [];
      let slotColumnList = [];
      formItemList.forEach((formItem) => {
        formItem = this.resetFormConfig(formItem);
        if (formItem.type === "line") {
          group.push({
            label: formItem.text,
            prop: formItem.text,
            collapse: true,
            column: [],
          });
        }
        if (
          formItem.type === "combox" &&
          formItem.comboxKey &&
          (!Array.isArray(formItem.dicData) || formItem.dicData.length === 0)
        ) {
          dictKeys.push({ dictKey: formItem.comboxKey, field: formItem.field });
        }
        // ç¦ç”¨éƒ¨åˆ†å±žæ€§ï¼ˆå¤–部传值禁用和参照禁用)
        if (this.disabledProp.includes(formItem.field)) {
          formItem.readOnly = true;
        }
        // è®¾ç½®è¡¨å•校验的规则,文本
        let message = "请选择";
        let trigger = "change";
        if (formItem.type === "text") {
          message = "请输入";
          trigger = "blur";
        }
        let columnItem = {
          label: formItem.text,
          labelslot: true,
          prop: this.$utilFunc.isValuableObj(formItem.referConfig)
            ? formItem.showField || formItem.field
            : formItem.field,
          field: formItem.field,
          type: this.columnType[formItem.type],
          dicData: this.getDataList(formItem.type, formItem.data),
          disabled: this.type === "detail" ? true : formItem.readOnly,
          prepend: this.preOrSufFixShow("text", formItem.prefix),
          append: this.preOrSufFixShow("text", formItem.suffix),
          prefixIcon: this.preOrSufFixShow("icon", formItem.prefix),
          suffixIcon: this.preOrSufFixShow("icon", formItem.suffix),
          valueFormat: formItem.dateFormate,
          format: formItem.dateFormate,
          keyAttr: formItem.keyAttr,
          value: formItem.defaultValue,
          // tip: formItem.tooltips,
          // tipPlacement: "right",
          placeholder: formItem.inputTip,
          comboxKey: formItem.comboxKey,
          display: !formItem.hidden,
          maxlength: formItem.maxlength,
          filterable: true,
          change: () => {
            this.changeFun(formItem.displayExtension, formItem.prop);
          },
          span: formItem.type === "textarea" ? 24 : this.trendsSpan,
          rules: [
            {
              required: formItem.required,
              message: `请${message}${formItem.text}`,
              trigger,
            },
            {
              // å¦‚果没有正则则匹配任何字符
              pattern: formItem.verify ? formItem.verify : /[\s\S.]*/g,
              message: formItem.tooltips,
              trigger,
            },
          ],
          props: {
            label: "value",
            value: "key",
          },
        };
        slotColumnList.push(columnItem);
        if (group.length === 0) {
          column.push(columnItem);
        } else {
          group[group.length - 1]["column"].push(columnItem);
        }
      });
      this.slotColumnList = slotColumnList;
      this.$set(this.option, "column", column);
      this.$set(this.option, "group", group);
      this.formIndex++;
      this.loading = false;
      this.geDictData(dictKeys);
      this.getFormDetail()
    },
    // ä½¿ç”¨ä¼ å…¥çš„表单数据配置
    resetFormConfig(formItem) {
      for (const configType in this.selfColumnConfig) {
        if (Object.hasOwnProperty.call(this.selfColumnConfig, configType)) {
          const element = this.selfColumnConfig[configType];
          if (configType === "function") {
            for (const attr in element) {
              if (Object.hasOwnProperty.call(element, attr)) {
                const fun = element[attr];
                formItem[attr] = fun(formItem);
              }
            }
          } else if (configType === "exchange") {
            for (const newAttr in element) {
              if (Object.hasOwnProperty.call(element, newAttr)) {
                const oldAttr = element[newAttr];
                formItem[newAttr] = formItem[oldAttr];
              }
            }
          } else if (configType === "directVoluation") {
            for (const attr in element) {
              if (Object.hasOwnProperty.call(element, attr)) {
                const value = element[attr];
                formItem[attr] = value;
              }
            }
          }
        }
      }
      return formItem;
    },
    // æ ¹æ®å±å¹•动态配置表单布局
    handleResize() {
      let windowWidth = document.body.clientWidth;
      this.trendsSpan = 24 / Math.floor(windowWidth / 500);
      this.formIndex++;
    },
    // å‰åŽç¼€
    preOrSufFixShow(type, val) {
      if (this.$utilFunc.isEmpty(val) && typeof val !== "string") return;
      const isIcon = val.slice(0, 8) === "el-icon-";
      if ((type === "text" && !isIcon) || (type === "icon" && isIcon)) {
        return val;
      }
    },
    changeFun(displayExtension, prop) {
      // executeCode({displayExtension, data: this.form}).then(res => {
      //   this.form[prop] = res.data.data
      // })
    },
    // èŽ·å–swich和已拿到的下拉数据
    getDataList(type, dicData) {
      if (type === "truefalse") {
        return [
          {
            key: false,
            value: "否",
          },
          {
            key: true,
            value: "是",
          },
        ];
      } else if (type === "combox") {
        return dicData;
      }
      return [];
    },
    // å¼‚步获取字典数据
    geDictData(dictKeys) {
      dictKeys.forEach((dictObj) => {
        getDictionary({ code: dictObj.dictKey }).then((res) => {
          if (res.data && res.data.code === 200) {
            this.option.column = this.option.column.map((item) => {
              if (item.field === dictObj.field) {
                let dictData = (res.data.data || []).map((itm) => {
                  itm.value = itm.dictValue;
                  itm.key = itm.dictKey;
                  return itm;
                });
                item.dicData = dictData;
              }
              return item;
            });
          }
        });
      });
    },
    // è¡¨å•校验
     validate() {
      return new Promise((resolve) => {
        this.$refs.form.validate((valid, done, msg) => {
          console.error(msg, valid)
        if (valid) {
          resolve(true)
        } else {
          resolve(false);
        }
      });
      })
    },
    // èŽ·å–è¡¨å•æ•°æ®
    getFormDetail() {
      if (this.type === 'add') return
      getFormDetail({templateOid: this.templateOid, oid: this.rowOid}).then(res => {
        console.log(res, 'res');
      })
    }
  },
  watch: {
    // è¡¨å•数据修改反馈到父组件
    form: {
      deep: true,
      immediate: true,
      handler(newV) {
        this.$emit("getFormData", newV);
      },
    },
  },
};
</script>
<style lang="scss" scoped>
.key_attr_icon {
  font-size: 20px !important;
  vertical-align: baseline;
  color: red;
}
</style>
<!-- eslint-disable vue/valid-v-for -->
<!-- eslint-disable vue/require-v-for-key -->
<template>
  <div>
    <avue-form
      v-model="form"
      :option="option"
      v-loading="loading"
      ref="form"
      :style="{ minHeight: loading ? '300px' : '' }"
    >
      <template :slot="item.prop + 'Label'" v-for="item in slotColumnList">
        <span>
          <span>{{ item.label }} </span>
          <el-tooltip
            v-if="item.keyAttr"
            class="item"
            effect="dark"
            content="该属性为关键属性"
            placement="top-start"
          >
            <i class="el-icon-star-on key_attr_icon"></i>
          </el-tooltip>
        </span>
      </template>
      <template :slot="item.prop + ''" v-for="item in slotColumnList">
        <vciWebRefer
          v-if="item.type == 'refer'"
          :value="item.value"
          :options="item.referConfig || {}"
        ></vciWebRefer>
      </template>
    </avue-form>
  </div>
</template>
<script>
import { getFormTemplate, getFormDetail } from "@/api/formTemplate";
import { getDictionary } from "../../api/system/dict";
import vciWebRefer from "../refer/vciWebRefer.vue";
export default {
  name: "FormTemplate",
  components: { vciWebRefer },
  props: {
    // é»˜è®¤ç¦ç”¨å…ƒç´ 
    disabledProp: {
      type: Array,
      default: () => ["id"],
    },
    templateOid: {
      type: String,
      default: "",
    },
    codeClassifyOid: {
      type: String,
      default: "",
    },
    // åˆ—表数据oid
    rowOid: {
      type: String,
      default: "",
    },
    // è¡¨å•类型(add, edit, detail)
    type: {
      type: String,
      default: "add",
    },
    // è‡ªå®šä¹‰è¡¨å•类型
    selfColumnType: {
      type: Object,
      default: () => ({}),
    },
    // è‡ªå®šä¹‰è¡¨å•属性
    selfColumnConfig: {
      type: Object,
      default: () => ({}),
    },
  },
  data() {
    return {
      formIndex: 0,
      form: {},
      option: {
        emptyBtn: false,
        submitBtn: false,
        labelWidth: "140",
        column: [],
        group: [],
      },
      loading: true,
      columnType: {
        text: "input",
        combox: "select",
        truefalse: "switch",
        number: "number",
        textarea: "textarea",
        datetime: "datetime",
        date: "date",
        refer: "refer",
      },
      // å‡æ•°æ®
      testItems: [
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "id",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "传值禁用功能",
          tooltips: "",
          type: "combox",
          unique: false,
          verify: "",
        },
        {
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "state",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: true,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "接口禁用功能",
          tooltips: "",
          type: "combox",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "oldcode",
          hidden: false,
          keyAttr: false,
          prefix: "el-icon-search",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "文本后缀测试",
          text: "前后缀功能",
          tooltips: "",
          type: "text",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "materialname",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: true,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "正则校验功能",
          tooltips: "请输入数字",
          type: "text",
          unique: false,
          verify: "/[0-9]/",
        },
        {
          comboxKey: null,
          customClass: null,
          data: [
            {
              attributes: {},
              key: "model_type",
              value: "模型",
            },
            {
              attributes: {},
              key: "part_type",
              value: "零件",
            },
          ],
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "dataSelect",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "直接返回下拉",
          tooltips: "",
          type: "combox",
          unique: false,
          verify: "",
        },
        {
          comboxKey: "formTemplateTest",
          customClass: null,
          data: [],
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "dictSelect",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "字典返回下拉",
          tooltips: "",
          type: "combox",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "firstfl",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "数字输入框",
          tooltips: "",
          type: "number",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "yyyy-MM-dd HH:mm:ss",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "datetime",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "日期时间选择器",
          tooltips: "",
          type: "datetime",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "time",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "时间选择器",
          tooltips: "",
          type: "date",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "false",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "xiaoshouwl",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "开关",
          tooltips: "",
          type: "truefalse",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "我是默认值",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "tuhao",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "默认值功能",
          tooltips: "提示",
          type: "text",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "xinghaoguige",
          hidden: false,
          keyAttr: true,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "属性关键值",
          tooltips: "",
          type: "text",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "jiliangdw",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          tip: "我是提示功能",
          required: false,
          selectLibFlag: "",
          showField: "jiliangdwname",
          suffix: "",
          text: "提示功能",
          tooltips: "",
          type: "text",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "textarea",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "文本域",
          tooltips: "",
          type: "textarea",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "cz",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: true,
          referConfig: {},
          required: false,
          selectLibFlag: "",
          showField: "depId",
          suffix: "",
          text: "参照",
          tooltips: "",
          type: "refer",
          unique: false,
          verify: "",
        },
      ],
      trendsSpan: 8,
      defaultValue: {},
      // è¡¨å•属性
      attributes: [],
      slotColumnList: [],
    };
  },
  mounted() {
    this.handleResize();
  },
  methods: {
    // åˆå§‹åŒ–
    init(columnList) {
      if (Array.isArray(columnList)) {
        this.templateRender(columnList);
      } else {
        this.getFormTemplate();
      }
    },
    // æŽ¥å£èŽ·å–è¡¨å•æ•°æ®
    getFormTemplate() {
      getFormTemplate({
        templateOid: this.templateOid,
        codeClassifyOid: this.codeClassifyOid,
      })
        .then((res) => {
          if (res.status === 200) {
            this.templateRender(res.data.formDefineVO.items);
            this.$emit("getFormTemplateEnd", res.data);
          }
        })
        .catch((err) => {
          this.loading = false;
          console.log(err);
        });
    },
    // æ¸²æŸ“表单模板
    templateRender(formItemList) {
      // æ— éœ€åˆ†ç»„数据
      let column = [];
      let group = [];
      let dictKeys = [];
      let slotColumnList = [];
      formItemList.forEach((formItem) => {
        formItem = this.resetFormConfig(formItem);
        if (formItem.type === "line") {
          group.push({
            label: formItem.text,
            prop: formItem.text,
            collapse: true,
            column: [],
          });
        }
        if (
          formItem.type === "combox" &&
          formItem.comboxKey &&
          (!Array.isArray(formItem.dicData) || formItem.dicData.length === 0)
        ) {
          dictKeys.push({ dictKey: formItem.comboxKey, field: formItem.field });
        }
        // ç¦ç”¨éƒ¨åˆ†å±žæ€§ï¼ˆå¤–部传值禁用和参照禁用)
        if (this.disabledProp.includes(formItem.field)) {
          formItem.readOnly = true;
        }
        // è®¾ç½®è¡¨å•校验的规则,文本
        let message = "请选择";
        let trigger = "change";
        if (formItem.type === "text") {
          message = "请输入";
          trigger = "blur";
        }
        let columnItem = {
          label: formItem.text,
          labelslot: true,
          prop: this.$utilFunc.isValuableObj(formItem.referConfig)
            ? formItem.showField || formItem.field
            : formItem.field,
          field: formItem.field,
          type: this.columnType[formItem.type],
          dicData: this.getDataList(formItem.type, formItem.data),
          disabled: this.type === "detail" ? true : formItem.readOnly,
          prepend: this.preOrSufFixShow("text", formItem.prefix),
          append: this.preOrSufFixShow("text", formItem.suffix),
          prefixIcon: this.preOrSufFixShow("icon", formItem.prefix),
          suffixIcon: this.preOrSufFixShow("icon", formItem.suffix),
          valueFormat: formItem.dateFormate,
          format: formItem.dateFormate,
          keyAttr: formItem.keyAttr,
          value: formItem.defaultValue,
          // tip: formItem.tooltips,
          // tipPlacement: "right",
          placeholder: formItem.inputTip,
          comboxKey: formItem.comboxKey,
          display: !formItem.hidden,
          maxlength: formItem.maxlength,
          filterable: true,
          referConfig:formItem.referConfig,
          change: () => {
            this.changeFun(formItem.displayExtension, formItem.prop);
          },
          span: formItem.type === "textarea" ? 24 : this.trendsSpan,
          rules: [
            {
              required: formItem.required,
              message: `请${message}${formItem.text}`,
              trigger,
            },
            {
              // å¦‚果没有正则则匹配任何字符
              pattern: formItem.verify ? formItem.verify : /[\s\S.]*/g,
              message: formItem.tooltips,
              trigger,
            },
          ],
          props: {
            label: "value",
            value: "key",
          },
        };
        slotColumnList.push(columnItem);
        if (group.length === 0) {
          column.push(columnItem);
        } else {
          group[group.length - 1]["column"].push(columnItem);
        }
      });
      this.slotColumnList = slotColumnList;
      this.$set(this.option, "column", column);
      this.$set(this.option, "group", group);
      this.formIndex++;
      this.loading = false;
      this.geDictData(dictKeys);
      this.getFormDetail()
    },
    // ä½¿ç”¨ä¼ å…¥çš„表单数据配置
    resetFormConfig(formItem) {
      for (const configType in this.selfColumnConfig) {
        if (Object.hasOwnProperty.call(this.selfColumnConfig, configType)) {
          const element = this.selfColumnConfig[configType];
          if (configType === "function") {
            for (const attr in element) {
              if (Object.hasOwnProperty.call(element, attr)) {
                const fun = element[attr];
                formItem[attr] = fun(formItem);
              }
            }
          } else if (configType === "exchange") {
            for (const newAttr in element) {
              if (Object.hasOwnProperty.call(element, newAttr)) {
                const oldAttr = element[newAttr];
                formItem[newAttr] = formItem[oldAttr];
              }
            }
          } else if (configType === "directVoluation") {
            for (const attr in element) {
              if (Object.hasOwnProperty.call(element, attr)) {
                const value = element[attr];
                formItem[attr] = value;
              }
            }
          }
        }
      }
      return formItem;
    },
    // æ ¹æ®å±å¹•动态配置表单布局
    handleResize() {
      let windowWidth = document.body.clientWidth;
      this.trendsSpan = 24 / Math.floor(windowWidth / 500);
      this.formIndex++;
    },
    // å‰åŽç¼€
    preOrSufFixShow(type, val) {
      if (this.$utilFunc.isEmpty(val) && typeof val !== "string") return;
      const isIcon = val.slice(0, 8) === "el-icon-";
      if ((type === "text" && !isIcon) || (type === "icon" && isIcon)) {
        return val;
      }
    },
    changeFun(displayExtension, prop) {
      // executeCode({displayExtension, data: this.form}).then(res => {
      //   this.form[prop] = res.data.data
      // })
    },
    // èŽ·å–swich和已拿到的下拉数据
    getDataList(type, dicData) {
      if (type === "truefalse") {
        return [
          {
            key: false,
            value: "否",
          },
          {
            key: true,
            value: "是",
          },
        ];
      } else if (type === "combox") {
        return dicData;
      }
      return [];
    },
    // å¼‚步获取字典数据
    geDictData(dictKeys) {
      dictKeys.forEach((dictObj) => {
        getDictionary({ code: dictObj.dictKey }).then((res) => {
          if (res.data && res.data.code === 200) {
            this.option.column = this.option.column.map((item) => {
              if (item.field === dictObj.field) {
                let dictData = (res.data.data || []).map((itm) => {
                  itm.value = itm.dictValue;
                  itm.key = itm.dictKey;
                  return itm;
                });
                item.dicData = dictData;
              }
              return item;
            });
          }
        });
      });
    },
    // è¡¨å•校验
     validate() {
      return new Promise((resolve) => {
        this.$refs.form.validate((valid, done, msg) => {
          console.error(msg, valid)
        if (valid) {
          resolve(true)
        } else {
          resolve(false);
        }
      });
      })
    },
    // èŽ·å–è¡¨å•æ•°æ®
    getFormDetail() {
      if (this.type === 'add') return
      getFormDetail({templateOid: this.templateOid, oid: this.rowOid}).then(res => {
        console.log(res, 'res');
      })
    }
  },
  watch: {
    // è¡¨å•数据修改反馈到父组件
    form: {
      deep: true,
      immediate: true,
      handler(newV) {
        this.$emit("getFormData", newV);
      },
    },
  },
};
</script>
<style lang="scss" scoped>
.key_attr_icon {
  font-size: 20px !important;
  vertical-align: baseline;
  color: red;
}
</style>
Source/UBCS-WEB/src/components/advanced-query/advanced-query.vue
ÎļþÒÑɾ³ý
Source/UBCS-WEB/src/components/advanced-query/advancedQuery.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,180 @@
<template>
    <el-dialog
        title="高级查询"
        append-to-body
        width="55vw"
        style="height: 115vh; overflow: hidden"
        :visible.sync="isShowDialog"
        @close="recoverPage"
        destroy-on-close>
        <div class="search-total">
            <el-row>
                <div class="grid-content">
                    <el-button
                        type="primary"
                        size="small"
                        icon="el-icon-search"
                        @click="searchSubmit">
                        æŸ¥è¯¢
                    </el-button>
                    <el-button
                        type="warning"
                        size="small"
                        icon="el-icon-refresh"
                        @click="resetInput">
                        é‡ç½®
                    </el-button>
                </div>
            </el-row>
            <el-row
                v-for="(item,index) in initOptions.column"
                :key="item.value"
                class="search-content"
                :span="24">
                <el-col :span="4">
                    <div class="grid-content">
                        <el-select placeholder="请选择">
                            <el-option
                                v-for="feildName in item.searchfeildName"
                                :key="feildName.value"
                                :label="feildName.label"
                                :value="feildName.value">
                                </el-option>
                        </el-select>
                    </div>
                </el-col>
                <el-col :span="4">
                    <div class="grid-content">
                        <el-select placeholder="请选择">
                            <el-option
                            v-for="condition in item.searchCondition"
                            :key="condition.value"
                            :label="condition.label"
                            :value="condition.value">
                            </el-option>
                        </el-select>
                    </div>
                </el-col>
                <el-col :span="13">
                    <div class="grid-content">
                        <div class="el-input">
                            <input type="text" placeholder="请输入" autocomplete="off" class="el-input__inner" :value="value">
                        </div>
                    </div>
                </el-col>
                <el-col :span="2">
                    <div class="grid-content">
                        <i class="el-icon-close" @click="removeInput(index)"></i>
                    </div>
                </el-col>
            </el-row>
        </div>
    </el-dialog>
</template>
<script>
export default {
    name: "advancedQuery",
    props: {
        // å¯¹è¯æ¡†æ˜¾ç¤ºéšè—æŽ§åˆ¶
        visible: {
            type: "Boolean",
            default: false,
        },
        // é¡µé¢æ˜¾ç¤ºé…ç½®
        options: {
            type: "Object",
            default: {},
        },
        // é¡µé¢æ•°æ®æ¸²æŸ“配置
        searchForm: {
            type: "Object",
            default: {},
        },
        value:{
            type: "String",
        }
    },
    data() {
        return {
            // å¯¹è¯æ¡†æ˜¾ç¤ºæŽ§åˆ¶
            isShowDialog: this.visible,
            initOptions: {},
            searchForm: {},
        }
    },
    watch: {
        // ç›‘听父组件传的窗口显示隐藏的值
        visible (){
            this.isShowDialog = this.visible;
        }
    },
    created () {
        // å°†options配置赋值到data中的option中,避免深浅拷贝的问题所以需要转json之后再赋值
        const data = JSON.stringify(this.options);
        this.initOptions = JSON.parse(data);
        console.log(this.searchForm);
    },
    methods: {
        // ç§»é™¤æœç´¢æ¡†
        removeInput(index){
            //console.log(this.options.column);
            this.$delete(this.initOptions.column,index);
        },
        // é‡ç½®å½“前界面的输入框
        resetInput(){
            const data = JSON.stringify(this.options);
            this.initOptions = JSON.parse(data);
        },
        // æ¢å¤é¡µé¢
        recoverPage(){
            this.resetInput();
            this.$emit('update:visible', false);
        },
        // æäº¤å½“前页面的输入
        searchSubmit(){
            console.log(11);
        },
    }
}
</script>
<style lang="scss">
    .search-total {
        border-radius: 4px;
        min-height: 36px;
        // margin-left: 35px;
        margin-top: -20px;
    }
    .search-total > .el-row{
        margin-bottom: 10px;
        &:last-child {
            margin-bottom: 0;
        }
    }
    .search-total > .el-col {
        border-radius: 4px;
    }
    .search-total > .el-col > .grid-content {
        border-radius: 4px;
        min-height: 36px;
    }
    .search-content > .el-col {
        margin-right: 6px;
        &:last-child {
            margin-right: 0;
        }
    }
    .grid-content > .el-icon-close {
        font-size: 35px;
        cursor: pointer;
        color: rgb(222, 130, 105);
    }
    .grid-content > .el-icon-close:hover{
        font-size: 38px;
        color: rgb(219, 52, 6);
    }
</style>
Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue
@@ -343,6 +343,11 @@
export default {
  name: "formulaEditor",
  props: {
     // å¯¹è¯æ¡†æ˜¾ç¤ºéšè—æŽ§åˆ¶
    visible: {
        type: "Boolean",
        default: false,
    },
    //本场景变量
    thisSceneTableData: {
      type: Array,
@@ -354,7 +359,7 @@
  },
  data() {
    return {
      isShowformulaEdit: false, //公式编辑框对话框显示控制
      isShowformulaEdit: this.visible, //公式编辑框对话框显示控制
      formulaContent: '', //公式编辑框内容,方便值的回传
      activeName: 'first', //当前活动的tab
      activeNameAttr: 'first', //变量中的当前活动tab
@@ -639,6 +644,12 @@
      ],
    };
  },
  watch: {
      // ç›‘听父组件传的窗口显示隐藏的值
      visible (){
          this.isShowformulaEdit = this.visible;
      }
  },
  methods: {
    //双击添加公式内容
@@ -653,6 +664,7 @@
    //关闭时清空上次公式内容
    closeFormulaEdit(){
      this.resetFormulaContent();
      this.$emit('update:visible',false);
    },
    //编辑完成公式内容回显并关闭对话框
    saveFormulaContent(){
@@ -662,7 +674,8 @@
          return;
      }
      //公式内容回显
      this.$emit('updateFormulaContent', this.formulaContent) // è§¦å‘update:data将子组件值传递给父组件
      // è§¦å‘update:data将子组件值传递给父组件
      this.$emit('updateFormulaContent', this.formulaContent)
      this.isShowformulaEdit = false;  
    },
Source/UBCS-WEB/src/components/code-dialog-page/referBtmTypeCrudDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,162 @@
<template>
    <el-dialog
        title="为【参照引用的业务类型】选取值"
        append-to-body
        :visible.sync="referBtmDialogParams.isShowDialog"
        @close="recoverPage"
        width="65%"
        style="height: 150vh; margin-top: -13vh;">
        <avue-crud
            :page.sync="referBtmDialogParams.referBtmDataPage"
            :ref="referBtmDialogParams.ref"
            :option="referBtmDialogParams.referBtmOption"
            :table-loading="referBtmDialogParams.referBtmDialogLoading"
            :data="referBtmDialogParams.referBtmData"
            @refresh-change="referBtmDataChange"
            @search-change="referBtmSearchChange"
            @search-reset="referBtmSearchReset"
            @selection-change="referBtmSelectionChange"
            @current-change="referBtmCurrentChange"
            @size-change="referBtmSizeChange"
            @on-load="referBtmOnLoad"
            @row-click="referBtmRowClick">
        </avue-crud>
        <div slot="footer" class="dialog-footer">
            <el-button type="primary" @click="saveSelectedReferBtm">保 å­˜</el-button>
            <el-button @click="referBtmDialogParams.isShowDialog = false">取 æ¶ˆ</el-button>
        </div>
    </el-dialog>
</template>
<script>
import referBtmOption from "@/const/code/referBtmDialog";
import {referDataGrid} from "@/api/code/referBtmType";
export default {
    name: "referBtmTypeCrudDialog",
    props: {
        // å¯¹è¯æ¡†æ˜¾ç¤ºéšè—æŽ§åˆ¶
        visible: {
            type: "Boolean",
            default: false,
        },
    },
    watch: {
        // ç›‘听父组件传的窗口显示隐藏的值
        visible (){
            this.referBtmDialogParams.isShowDialog = this.visible;
        }
    },
    data() {
        return{
            /** å‚照引用的业务类型对话框相关数据 */
            referBtmDialogParams: {
                ref: 'crudReferBtm',
                isShowDialog: this.visible,   //对话框显示控制
                referBtmDialogLoading: true,   //表格数据加载提示
                referBtmDataPage: {
                    pageSize: 10,
                    currentPage: 1,
                    total: 0
                },
                referBtmOption: referBtmOption, //表格配置
                referBtmData: [], //表格数据
                referBtmQuery: {}, //查询条件
                referBtmSelectionList: [], //当前选中行
            },
        }
    },
    methods: {
        // æ¢å¤é¡µé¢
        recoverPage(){
            this.referBtmSelectionClear();
            this.$emit('update:visible', false);
        },
        /** ä¸ºå‚照引用的业务类型选取值,第二层嵌套对话框,及其相关方法  */
        // è¡¨æ ¼æ•°æ®åˆ·æ–°æŒ‰é’®
        referBtmDataChange() {
            this.referBtmOnLoad(this.referBtmDialogParams.referBtmDataPage, this.referBtmDialogParams.referBtmQuery);
        },
        saveSelectedReferBtm() {
            if(this.referBtmDialogParams.referBtmSelectionList.length != 1){
                this.$message.warning("请选择一条数据!");
                return false;
            }
            // è°ƒç”¨çˆ¶ç»„件的方法并传递当前选中的参数值,实现回显
            this.$emit('echoReferBtmType', this.referBtmDialogParams.referBtmSelectionList[0])
            //清空当前选中的行
            this.referBtmSelectionClear();
            this.referBtmDialogParams.isShowDialog = false;
        },
        referBtmSearchReset() {
            this.referBtmDialogParams.referBtmQuery = {};
            this.referBtmOnLoad();
        },
        referBtmSearchChange(params, done) {
            this.referBtmDialogParams.referBtmQuery = params;
            this.referBtmDialogParams.referBtmDataPage.currentPage = 1;
            this.referBtmOnLoad();
            done();
        },
         // å•击选中表格行时触发
        referBtmRowClick(row){
            this.$refs[this.referBtmDialogParams.ref].toggleSelection();
            this.referBtmDialogParams.referBtmSelectionList = row;
            this.$refs[this.referBtmDialogParams.ref].setCurrentRow(row);
            this.$refs[this.referBtmDialogParams.ref].toggleRowSelection(row); //选中当前行
        },
        referBtmSelectionChange(list) {
            this.referBtmDialogParams.referBtmSelectionList = list;
            this.$refs[this.referBtmDialogParams.ref].setCurrentRow(this.referBtmDialogParams.referBtmSelectionList[list.length-1]);
        },
        referBtmSelectionClear() {
            this.referBtmDialogParams.referBtmSelectionList = [];
            this.$nextTick(() => {
                this.$refs[this.referBtmDialogParams.ref].toggleSelection();
            });
        },
        referBtmCurrentChange(currentPage){
            this.referBtmDialogParams.referBtmDataPage.currentPage = currentPage;
        },
        referBtmSizeChange(pageSize){
            this.referBtmDialogParams.referBtmDataPage.pageSize = pageSize;
        },
        refreshReferBtmDataChange() {
             this.referBtmOnLoad(this.referBtmDialogParams.referBtmDataPage, this.referBtmDialogParams.referBtmQuery);
        },
        //加载中参照引用的业务类型的数据
        referBtmOnLoad() {
            let referBtmParams = this.referBtmDialogParams;
            this.referBtmDialogParams.referBtmDialogLoading = true;
            let param = {};
            // å¤šä¸ªconditionMap这样传参
            if(referBtmParams.referBtmQuery){
                Object.keys(referBtmParams.referBtmQuery).forEach(key=>{
                    param['conditionMap['+key+']'] = referBtmParams.referBtmQuery[key];
                });
            }
            referDataGrid(
                referBtmParams.referBtmDataPage.currentPage,
                referBtmParams.referBtmDataPage.pageSize,
                param
            ).then(res => {
                //console.log(res.data);
                const data = res.data.data;
                this.referBtmDialogParams.referBtmDataPage.total = data.total;
                this.referBtmDialogParams.referBtmData = data.records;
                this.referBtmDialogParams.referBtmDialogLoading = false;
                //this.referBtmSelectionClear();
                //表格行错位问题
                this.$nextTick(() => {
                    this.$refs[this.referBtmDialogParams.ref].doLayout();
                })
            });
        },
    },
}
</script>
<style>
</style>
Source/UBCS-WEB/src/components/code-dialog-page/referConfigCrudDialog.vue
@@ -78,645 +78,645 @@
import { getReferConfigPage } from "@/api/code/codeReferConfig";
export default {
    name: "referConfigDialog",
        props: {
        },
        data() {
            return{
                isShowReferConfigCrud:false,
                referConfigCrudOption: {
                    border: true,
                    height: '45vh',
                    tip: false,
                    searchShow: true,
                    searchMenuSpan: 6,
                    index: true,
                    selection: false,
                    menu: false,
                    addBtn: false,
                    refreshBtn: false,
                    searchShowBtn: false,
                    columnBtn: false,
                    dialogClickModal: false,
                    highlightCurrentRow: true,
                    align: 'center',
                    menuAlign: 'center',
                    column: [
                        {
                            label: '-',
                            prop: 'radio',
                            width: 60,
                            hide: false
                        },{
                            label: '参照配置编号',
                            width: 120,
                            search: true,
                            searchSpan: 9,
                            searchLabelWidth: 100,
                            prop: 'id'
                        },{
                            label: '参照配置名称',
                            search: true,
                            searchSpan: 9,
                            searchLabelWidth: 100,
                            prop: 'name'
                        },{
                            label: '参照的业务类型',
                            search: false,
                            prop: 'referTypeName'
                        },{
                            label: '显示的属性',
                            search: false,
                            prop: 'textField'
                        },{
                            label: '存储值的属性',
                            search: false,
                            prop: 'valueField'
                        },{
                            label: '参照窗口类型',
                            search: false,
                            prop: 'typeText',
                        }
                    ],
                },
                referConfigParams: {
                    ref: "referConfigCrud",
                    referConfigLoading: false,
                    referConfigData: [],
                    referConfigPage: {
                        pageSize: 10,
                        currentPage: 1,
                        total: 0
                    },
                    referConfigQuery: {},
                    referConfigSelectedRowData: '',
                    // å½“前选中行
                    referConfigSelectedRow: '',
                },
                formOption: {
                    submitBtn: false,
                    emptyBtn: false,
                    labelWidth: '150', //默认标签宽度
                    // é»˜è®¤é…ç½®å°±ä¸ºæ ‘形类型,改了会出现问题
                    column: [
                        {
                            label: '树形的上级属性',
                            prop: 'parentFieldName',
                            span: 24,
                            disabled: true,
                            row: true,
                            placeholder: ' ',
                        },{
                            label: '上级属性值对应属性',
                            prop: 'parentUsedField',
                            span: 24,
                            disabled: true,
                            row: true,
                            placeholder: ' ',
                        },{
                            label: '根节点的值',
                            prop: 'parentValue',
                            span: 24,
                            disabled: true,
                            row: true,
                            placeholder: ' ',
                        },{
                            label: '树加载方式',
                            prop: 'loadType',
                            span: 24,
                            disabled: true,
                            row: true,
                            placeholder: ' ',
                            dicData: [{
                                label: '全部', value: 'all'
                            }, {
                                label: '逐级加载', value: 'node'
                            }],
                        },{
                            label: '是否只能选择叶子节点',
                            prop: 'onlyLeaf',
                            span: 24,
                            disabled: true,
                            row: true,
                            placeholder: ' ',
                        },{
                            label: '排序字段',
                            prop: 'sortField',
                            span: 24,
                            disabled: true,
                            row: true,
                            placeholder: ' ',
                        },{
                            label: '排序类型',
                            prop: 'sortType',
                            span: 24,
                            disabled: true,
                            row: true,
                            placeholder: ' ',
                            dicData: [{
                                label: '升序', value: 'asc'
                            }, {
                                label: '降序', value: 'desc'
                            }],
                        },
                    ],
                },
                referConfigForm:{},
                // æŽ’序类型的表单配置
                sortColumn:[{
                    label: '每页显示条数',
                    prop: 'limit',
                    span: 24,
                    disabled: true,
                    row: true,
                    placeholder: ' ',
                },{
                    label: '排序字段',
                    prop: 'sortField',
                    span: 24,
                    disabled: true,
                    row: true,
                    placeholder: ' ',
                },{
                    label: '排序类型',
                    prop: 'sortType',
                    span: 24,
                    disabled: true,
                    row: true,
                    placeholder: ' ',
                    dicData: [{
                        label: '升序', value: 'asc'
                    }, {
                        label: '降序', value: 'desc'
                    }],
                }],
                // æ ‘形类型的表单配置
                treeColumn:[{
                    label: '树形的上级属性',
                    prop: 'parentFieldName',
                    span: 24,
                    disabled: true,
                    row: true,
                    placeholder: ' ',
                },{
                    label: '上级属性值对应属性',
                    prop: 'parentUsedField',
                    span: 24,
                    disabled: true,
                    row: true,
                    placeholder: ' ',
                },{
                    label: '根节点的值',
                    prop: 'parentValue',
                    span: 24,
                    disabled: true,
                    row: true,
                    placeholder: ' ',
                },
                {
                    label: '树加载方式',
                    prop: 'loadType',
                    span: 24,
                    disabled: true,
                    row: true,
                    placeholder: ' ',
                    dicData: [{
                        label: '全部', value: 'all'
                    }, {
                        label: '逐级加载', value: 'node'
                    }],
                },{
                    label: '是否只能选择叶子节点',
                    prop: 'onlyLeaf',
                    span: 24,
                    disabled: true,
                    row: true,
                    placeholder: ' ',
                },{
                    label: '排序字段',
                    prop: 'sortField',
                    span: 24,
                    disabled: true,
                    row: true,
                    placeholder: ' ',
                },{
                    label: '排序类型',
                    prop: 'sortType',
                    span: 24,
                    disabled: true,
                    row: true,
                    placeholder: ' ',
                    dicData: [{
                        label: '升序', value: 'asc'
                    }, {
                        label: '降序', value: 'desc'
                    }],
                },
    props: {
    },
    data() {
        return{
            isShowReferConfigCrud:false,
            referConfigCrudOption: {
                border: true,
                height: '45vh',
                tip: false,
                searchShow: true,
                searchMenuSpan: 6,
                index: true,
                selection: false,
                menu: false,
                addBtn: false,
                refreshBtn: false,
                searchShowBtn: false,
                columnBtn: false,
                dialogClickModal: false,
                highlightCurrentRow: true,
                align: 'center',
                menuAlign: 'center',
                column: [
                    {
                        label: '-',
                        prop: 'radio',
                        width: 60,
                        hide: false
                    },{
                        label: '参照配置编号',
                        width: 120,
                        search: true,
                        searchSpan: 9,
                        searchLabelWidth: 100,
                        prop: 'id'
                    },{
                        label: '参照配置名称',
                        search: true,
                        searchSpan: 9,
                        searchLabelWidth: 100,
                        prop: 'name'
                    },{
                        label: '参照的业务类型',
                        search: false,
                        prop: 'referTypeName'
                    },{
                        label: '显示的属性',
                        search: false,
                        prop: 'textField'
                    },{
                        label: '存储值的属性',
                        search: false,
                        prop: 'valueField'
                    },{
                        label: '参照窗口类型',
                        search: false,
                        prop: 'typeText',
                    }
                ],
                // å¹³å°ç±»åž‹çš„表单配置
                standColumn:[{
                    label: '参考的UI上下文',
                    prop: 'referContent',
                    span: 24,
                    disabled: true,
                    row: true,
                    placeholder: ' ',
            },
            referConfigParams: {
                ref: "referConfigCrud",
                referConfigLoading: false,
                referConfigData: [],
                referConfigPage: {
                    pageSize: 10,
                    currentPage: 1,
                    total: 0
                },
                {
                    label: '平台的表格编号',
                    prop: 'displayTable',
                    span: 24,
                    disabled: true,
                    row: true,
                    placeholder: ' ',
                referConfigQuery: {},
                referConfigSelectedRowData: '',
                // å½“前选中行
                referConfigSelectedRow: '',
            },
            formOption: {
                submitBtn: false,
                emptyBtn: false,
                labelWidth: '150', //默认标签宽度
                // é»˜è®¤é…ç½®å°±ä¸ºæ ‘形类型,改了会出现问题
                column: [
                    {
                        label: '树形的上级属性',
                        prop: 'parentFieldName',
                        span: 24,
                        disabled: true,
                        row: true,
                        placeholder: ' ',
                    },{
                        label: '上级属性值对应属性',
                        prop: 'parentUsedField',
                        span: 24,
                        disabled: true,
                        row: true,
                        placeholder: ' ',
                    },{
                        label: '根节点的值',
                        prop: 'parentValue',
                        span: 24,
                        disabled: true,
                        row: true,
                        placeholder: ' ',
                    },{
                        label: '树加载方式',
                        prop: 'loadType',
                        span: 24,
                        disabled: true,
                        row: true,
                        placeholder: ' ',
                        dicData: [{
                            label: '全部', value: 'all'
                        }, {
                            label: '逐级加载', value: 'node'
                        }],
                    },{
                        label: '是否只能选择叶子节点',
                        prop: 'onlyLeaf',
                        span: 24,
                        disabled: true,
                        row: true,
                        placeholder: ' ',
                    },{
                        label: '排序字段',
                        prop: 'sortField',
                        span: 24,
                        disabled: true,
                        row: true,
                        placeholder: ' ',
                    },{
                        label: '排序类型',
                        prop: 'sortType',
                        span: 24,
                        disabled: true,
                        row: true,
                        placeholder: ' ',
                        dicData: [{
                            label: '升序', value: 'asc'
                        }, {
                            label: '降序', value: 'desc'
                        }],
                    },
                ],
            },
            referConfigForm:{},
            // æŽ’序类型的表单配置
            sortColumn:[{
                label: '每页显示条数',
                prop: 'limit',
                span: 24,
                disabled: true,
                row: true,
                placeholder: ' ',
            },{
                label: '排序字段',
                prop: 'sortField',
                span: 24,
                disabled: true,
                row: true,
                placeholder: ' ',
            },{
                label: '排序类型',
                prop: 'sortType',
                span: 24,
                disabled: true,
                row: true,
                placeholder: ' ',
                dicData: [{
                    label: '升序', value: 'asc'
                }, {
                    label: '降序', value: 'desc'
                }],
            }],
            // æ ‘形类型的表单配置
            treeColumn:[{
                label: '树形的上级属性',
                prop: 'parentFieldName',
                span: 24,
                disabled: true,
                row: true,
                placeholder: ' ',
            },{
                label: '上级属性值对应属性',
                prop: 'parentUsedField',
                span: 24,
                disabled: true,
                row: true,
                placeholder: ' ',
            },{
                label: '根节点的值',
                prop: 'parentValue',
                span: 24,
                disabled: true,
                row: true,
                placeholder: ' ',
            },
            {
                label: '树加载方式',
                prop: 'loadType',
                span: 24,
                disabled: true,
                row: true,
                placeholder: ' ',
                dicData: [{
                    label: '全部', value: 'all'
                }, {
                    label: '逐级加载', value: 'node'
                }],
            },{
                label: '是否只能选择叶子节点',
                prop: 'onlyLeaf',
                span: 24,
                disabled: true,
                row: true,
                placeholder: ' ',
            },{
                label: '排序字段',
                prop: 'sortField',
                span: 24,
                disabled: true,
                row: true,
                placeholder: ' ',
            },{
                label: '排序类型',
                prop: 'sortType',
                span: 24,
                disabled: true,
                row: true,
                placeholder: ' ',
                dicData: [{
                    label: '升序', value: 'asc'
                }, {
                    label: '降序', value: 'desc'
                }],
            },
            ],
            // å¹³å°ç±»åž‹çš„表单配置
            standColumn:[{
                label: '参考的UI上下文',
                prop: 'referContent',
                span: 24,
                disabled: true,
                row: true,
                placeholder: ' ',
            },
            {
                label: '平台的表格编号',
                prop: 'displayTable',
                span: 24,
                disabled: true,
                row: true,
                placeholder: ' ',
            }],
                // æŸ¥è¯¢æ¡ä»¶è¡¨æ ¼åŒºåŸŸ
                srchCondOption: {
                    border: true,
                    height: '40vh',
                    tip: false,
                    searchShow: false,
                    searchMenuSpan: 6,
                    index: true,
                    selection: false,
                    menu: false,
                    addBtn: false,
                    refreshBtn: false,
                    searchShowBtn: false,
                    columnBtn: false,
                    dialogClickModal: false,
                    highlightCurrentRow: true,
                    align: 'center',
                    menuAlign: 'center',
                    column: [
                        {
                            label: '查询条件',
                            children: [
                                {
                                    label: '筛选字段',
                                    prop: 'filterField',
                                },{
                                    label: '筛选类型',
                                    prop: 'filterType',
                                },{
                                    label: '筛选的值',
                                    prop: 'filterValue',
                                }
                            ],
                        },
                    ],
                },
                srchCondParams: {
                    ref: "srchCondCrud",
                    srchCondLoading: false,
                    srchCondData: [],
                    isShow: true,
                },
                toggleSrchCrudWidth: {
                    width: '40%',
                    height: '100%',
                },
            // æŸ¥è¯¢æ¡ä»¶è¡¨æ ¼åŒºåŸŸ
            srchCondOption: {
                border: true,
                height: '40vh',
                tip: false,
                searchShow: false,
                searchMenuSpan: 6,
                index: true,
                selection: false,
                menu: false,
                addBtn: false,
                refreshBtn: false,
                searchShowBtn: false,
                columnBtn: false,
                dialogClickModal: false,
                highlightCurrentRow: true,
                align: 'center',
                menuAlign: 'center',
                column: [
                    {
                        label: '查询条件',
                        children: [
                            {
                                label: '筛选字段',
                                prop: 'filterField',
                            },{
                                label: '筛选类型',
                                prop: 'filterType',
                            },{
                                label: '筛选的值',
                                prop: 'filterValue',
                            }
                        ],
                    },
                ],
            },
            srchCondParams: {
                ref: "srchCondCrud",
                srchCondLoading: false,
                srchCondData: [],
                isShow: true,
            },
            toggleSrchCrudWidth: {
                width: '40%',
                height: '100%',
            },
                //显示的属性表格配置区域
                showAttrOption: {
                    border: true,
                    height: '40vh',
                    tip: false,
                    searchShow: false,
                    searchMenuSpan: 6,
                    index: true,
                    selection: false,
                    menu: false,
                    addBtn: false,
                    refreshBtn: false,
                    searchShowBtn: false,
                    columnBtn: false,
                    dialogClickModal: false,
                    highlightCurrentRow: true,
                    align: 'center',
                    menuAlign: 'center',
                    column: [
                        {
                            label: '显示的属性',
                            children: [
                                {
                                    label: '列字段',
                                    // width: 120,
                                    prop: 'field',
                                     //type: 'select',
                                    // props: {
                                    //     label: 'name',
                                    //     value: 'code'
                                    // },
                                    // dicUrl: 'https://cli.avuejs.com/api/area/getProvince'
                                },{
                                    label: '列名',
                                    prop: 'title'
                                },{
                                    label: '字段类型',
                                    prop: 'fieldTypeText'
                                },{
                                    label: '列表可排序',
                                    prop: 'sort'
                                },{
                                    label: '排序字段',
                                    prop: 'attrSortField'
                                },{
                                    label: '字段宽度',
                                    prop: 'width'
                                },{
                                    label: '列固定位置',
                                    prop: 'fixedPositionText'
                                },{
                                    label: 'js显示代码',
                                    prop: 'templet'
                                },{
                                    label: '是否快速查询',
                                    prop: 'isQuery'
                                }
                            ]
                        },
                    ],
                },
                showAttrParams: {
                    ref: "showAttrCrud",
                    showAttrLoading: false,
                    showAttrData: [],
                    isShow: true,
                },
            //显示的属性表格配置区域
            showAttrOption: {
                border: true,
                height: '40vh',
                tip: false,
                searchShow: false,
                searchMenuSpan: 6,
                index: true,
                selection: false,
                menu: false,
                addBtn: false,
                refreshBtn: false,
                searchShowBtn: false,
                columnBtn: false,
                dialogClickModal: false,
                highlightCurrentRow: true,
                align: 'center',
                menuAlign: 'center',
                column: [
                    {
                        label: '显示的属性',
                        children: [
                            {
                                label: '列字段',
                                // width: 120,
                                prop: 'field',
                                    //type: 'select',
                                // props: {
                                //     label: 'name',
                                //     value: 'code'
                                // },
                                // dicUrl: 'https://cli.avuejs.com/api/area/getProvince'
                            },{
                                label: '列名',
                                prop: 'title'
                            },{
                                label: '字段类型',
                                prop: 'fieldTypeText'
                            },{
                                label: '列表可排序',
                                prop: 'sort'
                            },{
                                label: '排序字段',
                                prop: 'attrSortField'
                            },{
                                label: '字段宽度',
                                prop: 'width'
                            },{
                                label: '列固定位置',
                                prop: 'fixedPositionText'
                            },{
                                label: 'js显示代码',
                                prop: 'templet'
                            },{
                                label: '是否快速查询',
                                prop: 'isQuery'
                            }
                        ]
                    },
                ],
            },
            showAttrParams: {
                ref: "showAttrCrud",
                showAttrLoading: false,
                showAttrData: [],
                isShow: true,
            },
                // æ˜¯å¦æ˜¾ç¤ºå˜åŠ¨çš„è¡¨å•åŒºåŸŸ
                isShowForm: true,
                toggleBasicCrudWidth: {
                    height: '100%',
                    width: '70%',
                },
                // æ˜¯å¦æ˜¾ç¤ºå±žæ€§è¡¨æ ¼
                isShowAttrCrud: true,
                defaultOrGridForm: ['limit','sortField','sortType'],
                standForm: ['referContent','displayTable'],
                treeForm: [
                    'parentFieldName',
            // æ˜¯å¦æ˜¾ç¤ºå˜åŠ¨çš„è¡¨å•åŒºåŸŸ
            isShowForm: true,
            toggleBasicCrudWidth: {
                height: '100%',
                width: '70%',
            },
            // æ˜¯å¦æ˜¾ç¤ºå±žæ€§è¡¨æ ¼
            isShowAttrCrud: true,
            defaultOrGridForm: ['limit','sortField','sortType'],
            standForm: ['referContent','displayTable'],
            treeForm: [
                'parentFieldName',
                'parentUsedField',
                'parentValue',
                'loadType',
                'onlyLeaf',
                'sortField',
                'sortType'
            ],
        }
    },
    methods: {
        // ä¸‹ä¸€æ­¥è¦è¿›è¡Œçš„æ“ä½œé€‰æ‹©å¹¶ä¿å­˜æˆ–选择并修改
        selectedreferConfig(condition) {
            // å½“前选中的参照配置行
            let currentSeletedRow = this.referConfigParams.referConfigSelectedRowData;
            if(!currentSeletedRow){
                this.$message.warning("请选择一条数据!");
                return;
            }
            let filterForm = this.filterForm(currentSeletedRow);
            if(condition == "selectedSave"){
                // ç›´æŽ¥ä¿å­˜,所以直接调用code界面的界面回显
                this.$emit('echoReferConfig',filterForm);
                // console.log(filterForm);
            }else {
                // é€‰æ‹©å¹¶ä¿®æ”¹,执行code服务中的打开界面,所以要先构造出所需的数据
                let submitForm = {
                    referBtmName: filterForm.referType,
                    referBtmId: filterForm.referTypeName,
                    referConfig:  JSON.stringify(filterForm),
                }
                this.$emit('openReconfigInterFace',submitForm);
            }
            this.isShowReferConfigCrud = false;
        },
        // è¿‡æ»¤å‡ºå½“前类型所需要的属性
        filterForm(currentRow){
            // éœ€è¦ä¿ç•™çš„基础属性
            let submittDefaultForm = [
                'referTypeName',
                'referType',
                'textField',
                'valueField',
                'type', //参照窗口类型
                'url',
                'backPath',
                'method',
                'height',
                'useFormKey',
                'paramForFormKey',
                'isMuti',
                'mapFields',
                'isOpenGlobal', //是否开启全局
                'isPersistence',
                'id',
                'name',
            ];
            // éœ€è¦æ ¹æ®ç±»åž‹æ·»åŠ çš„å±žæ€§
            let addArray = [];
            let newForm ={};
            // æ ¹æ®ä¸åŒç±»åž‹è¿‡æ»¤å‡ºä¸åŒçš„的表单属性
            if(currentRow.type == 'stand'){
                addArray = ['referContent', 'displayTable'];
            } else if(currentRow.type == 'default' || currentRow.type == 'grid'){
                addArray = ['limit', 'sortField', 'sortType'];
            } else if(currentRow.type == 'tree'){
                addArray = [
                    "parentFieldName",
                    'parentUsedField',
                    'parentValue',
                    'parentValue',
                    'loadType',
                    'onlyLeaf',
                    'sortField',
                    'sortType'
                ],
            }
        },
        methods: {
            // ä¸‹ä¸€æ­¥è¦è¿›è¡Œçš„æ“ä½œé€‰æ‹©å¹¶ä¿å­˜æˆ–选择并修改
            selectedreferConfig(condition) {
                // å½“前选中的参照配置行
                let currentSeletedRow = this.referConfigParams.referConfigSelectedRowData;
                if(!currentSeletedRow){
                    this.$message.warning("请选择一条数据!");
                    return;
                }
                let filterForm = this.filterForm(currentSeletedRow);
                if(condition == "selectedSave"){
                    // ç›´æŽ¥ä¿å­˜,所以直接调用code界面的界面回显
                    this.$emit('echoReferConfig',filterForm);
                    // console.log(filterForm);
                }else {
                    // é€‰æ‹©å¹¶ä¿®æ”¹,执行code服务中的打开界面,所以要先构造出所需的数据
                    let submitForm = {
                        referBtmName: filterForm.referType,
                        referBtmId: filterForm.referTypeName,
                        referConfig:  JSON.stringify(filterForm),
                    }
                    this.$emit('openReconfigInterFace',submitForm);
                }
                this.isShowReferConfigCrud = false;
            },
            // è¿‡æ»¤å‡ºå½“前类型所需要的属性
            filterForm(currentRow){
                // éœ€è¦ä¿ç•™çš„基础属性
                let submittDefaultForm = [
                    'referTypeName',
                    'referType',
                    'textField',
                    'valueField',
                    'type', //参照窗口类型
                    'url',
                    'backPath',
                    'method',
                    'height',
                    'useFormKey',
                    'paramForFormKey',
                    'isMuti',
                    'mapFields',
                    'isOpenGlobal', //是否开启全局
                    'isPersistence',
                    'id',
                    'name',
                ];
                // éœ€è¦æ ¹æ®ç±»åž‹æ·»åŠ çš„å±žæ€§
                let addArray = [];
                let newForm ={};
                // æ ¹æ®ä¸åŒç±»åž‹è¿‡æ»¤å‡ºä¸åŒçš„的表单属性
                if(currentRow.type == 'stand'){
                    addArray = ['referContent', 'displayTable'];
                } else if(currentRow.type == 'default' || currentRow.type == 'grid'){
                    addArray = ['limit', 'sortField', 'sortType'];
                } else if(currentRow.type == 'tree'){
                    addArray = [
                        "parentFieldName",
                        'parentUsedField',
                        'parentValue',
                        'loadType',
                        'onlyLeaf',
                        'sortField',
                        'sortType'
                    ];
            }
            // æ‹¼æŽ¥ä¸¤ä¸ªæ•°ç»„
            submittDefaultForm = submittDefaultForm.concat(addArray);
            if(currentRow.codeSrchCondConfigVOS.length > 0){
                //console.log(currentRow.codeSrchCondConfigVOS);
                newForm = {
                    codeSrchCondConfigVOS: currentRow.codeSrchCondConfigVOS,
                }
                // æ‹¼æŽ¥ä¸¤ä¸ªæ•°ç»„
                submittDefaultForm = submittDefaultForm.concat(addArray);
                if(currentRow.codeSrchCondConfigVOS.length > 0){
                    //console.log(currentRow.codeSrchCondConfigVOS);
                    newForm = {
                        codeSrchCondConfigVOS: currentRow.codeSrchCondConfigVOS,
                    }
            }
            if((currentRow.type == 'default' || currentRow.type  == 'grid') && currentRow.codeShowFieldConfigVOS.length >= 0){
                newForm = Object.assign(newForm,{codeShowFieldConfigVOS: currentRow.codeShowFieldConfigVOS});
            }
            // è¿‡æ»¤å‡ºç©ºå€¼å±žæ€§å’Œä¸éœ€è¦çš„属性
            submittDefaultForm.forEach(item=>{
                // console.log(!this.checkStringIsEmpty(currentRow[item]) || !this.checkArrayIsUndefined(currentRow[item]));
                if((item == 'isMuti' || item == 'onlyLeaf') || (!this.checkStringIsEmpty(currentRow[item]) || !this.checkArrayIsUndefined(currentRow[item]))){
                    //console.log(item,currentRow[item]);
                    newForm = Object.assign(newForm,{[item]:currentRow[item]});
                }
                if((currentRow.type == 'default' || currentRow.type  == 'grid') && currentRow.codeShowFieldConfigVOS.length >= 0){
                    newForm = Object.assign(newForm,{codeShowFieldConfigVOS: currentRow.codeShowFieldConfigVOS});
                }
                // è¿‡æ»¤å‡ºç©ºå€¼å±žæ€§å’Œä¸éœ€è¦çš„属性
                submittDefaultForm.forEach(item=>{
                    // console.log(!this.checkStringIsEmpty(currentRow[item]) || !this.checkArrayIsUndefined(currentRow[item]));
                    if((item == 'isMuti' || item == 'onlyLeaf') || (!this.checkStringIsEmpty(currentRow[item]) || !this.checkArrayIsUndefined(currentRow[item]))){
                        //console.log(item,currentRow[item]);
                        newForm = Object.assign(newForm,{[item]:currentRow[item]});
                    }
                });
                // console.log(newForm);
                return newForm;
            },
             /**
             * ä¸ºç©º
             * @param val
             * @returns {boolean}
            */
            checkStringIsEmpty(val){
                if (
                    val === null ||
                    typeof val === 'undefined' ||
                    (typeof val === 'string' && val === "" && val !== 'undefined')
                ) {
                    return true;
                }
                    return false;
            },
             /**
             * æ˜¯å¦ä¸ºå®šä¹‰
             * @param val
             * @returns {boolean}
             */
            checkArrayIsUndefined(val){
                return typeof val === 'array' && (val.length === 0 || val === null || typeof val === 'undefined' || val === []);
            },
            referConfigOnload(){
                let refer = this.referConfigParams;
                refer.referConfigLoading = true;
                let param = {};
                // å¤šä¸ªconditionMap这样传参
                if(refer.referConfigQuery){
                    Object.keys(refer.referConfigQuery).forEach(key=>{
                        param['conditionMap['+key+']'] = refer.referConfigQuery[key];
                    });
                }
                getReferConfigPage(
                    refer.referConfigPage.currentPage,
                    refer.referConfigPage.pageSize,
                    param
                ).then(res=>{
                    const data = res.data.data;
                    this.referConfigParams.referConfigPage.total = data.total;
                    this.referConfigParams.referConfigData = data.records;
                    this.referConfigParams.referConfigLoading = false;
                    //console.log(this.referConfigParams.referConfigData.length > 0);
                    // æ¸²æŸ“其他区域数据
                    if(this.referConfigParams.referConfigData.length > 0) {
                        this.$nextTick(() => {
                            // è¡¨æ ¼é”™è¡Œé—®é¢˜
                            this.$refs[this.referConfigParams.ref].doLayout()
                            // é»˜è®¤é€‰ä¸­ç¬¬ä¸€è¡Œ
                            this.referConfigParams.referConfigSelectedRow = 0;
                            this.$refs[this.referConfigParams.ref].setCurrentRow(this.referConfigParams.referConfigData[0]);
                            this.referConfigParams.referConfigSelectedRowData = this.referConfigParams.referConfigData[0];
                            this.attrAndSrchCondOnload(this.referConfigParams.referConfigData[0]);
                            this.loadDefaultOrGridOrStandOrTreeForm(this.referConfigParams.referConfigData[0]);
                        })
                    }
                });
            },
            referBtmTypeSizeChange(pageSize){
                this.referConfigParams.referConfigPage.pageSize = pageSize;
            },
            referBtmTypeCurrentChange(currentPage){
                this.referConfigParams.referConfigPage.currentPage = currentPage;
            },
            referConfigRowClick(row){
                // å¯¹å½“前选中行进行记录
                this.referConfigParams.referConfigSelectedRowData = row;
                // å•选框选中
                this.referConfigParams.referConfigSelectedRow = row.$index
                this.attrAndSrchCondOnload(row);
                this.loadDefaultOrGridOrStandOrTreeForm(row);
            },
            referConfigSearchChange(params, done){
                this.referConfigParams.referConfigQuery = params;
                this.referConfigParams.referConfigPage.currentPage = 1;
                this.referConfigOnload();
                done();
            },
            referConfigSearchReset(){
                this.referConfigParams.referConfigQuery = {};
                this.referConfigOnload(this.referConfigParams.referConfigPage);
            },
            referConfigCurrentChange(currentPage){
                this.referConfigParams.referConfigPage.currentPage = currentPage;
            },
            referConfigSizeChange(pageSize){
                this.referConfigParams.referConfigPage.pageSize = pageSize;
            },
            // åŠ è½½è¡¨å•æ˜¾ç¤ºå†…å®¹
            loadDefaultOrGridOrStandOrTreeForm(currentFormData){
                if(currentFormData.type != 'tree' &
                   currentFormData.type != 'stand' &
                   currentFormData.type != 'default'&
                   currentFormData.type != 'grid') {
                    //控制参照配置表格和表单显示比例
                    this.isShowForm = false;
                    this.toggleBasicCrudWidth.width = '100%';
                }else {
                    this.isShowForm = true;
                    this.toggleBasicCrudWidth.width = '70%';
                    this.toggleFormOption(currentFormData);
                }
                this.toggleCurdWidth(currentFormData);
                //console.log(this.isShowForm);
                //console.log(this.toggleBasicCrudWidth.width);
            },
            // æ ¹æ®type的变动切换表单的配置option
            toggleFormOption(data){
                //console.log(data);
                let currentForm = '';
                if(data.type=='default' || data.type=='grid'){
                    this.formOption.column = this.sortColumn;
                    currentForm = 'defaultOrGridForm';
                }else if(data.type == 'stand'){
                    this.formOption.column = this.standColumn;
                    currentForm = 'standForm';
                }else if(data.type == 'tree'){
                    this.formOption.column = this.treeColumn;
                    currentForm = 'treeForm'
                }
                this.referConfigForm = {},
                //console.log( this.formOption);
                this[currentForm].forEach(item=>{
                    Vue.set(this.referConfigForm, item, data[item])
                    //this.referConfigForm = Object.assign(this.referConfigForm,{[item]:data[item]})
                })
                // console.log(this.referConfigForm);
            },
            // æ ¹æ®type的变动切换attr表格的显示隐藏,调整查询条件表格的宽度
            toggleCurdWidth(data) {
                if(data.type=='default' || data.type=='grid'){
                    this.showAttrParams.isShow = true;
                    // ä¸éœ€è¦æ˜¾ç¤ºå±žæ€§è¡¨æ ¼æ‰€æœ‰éœ€è¦å°†æŸ¥è¯¢è°ƒä»·è¡¨æ ¼ç¼©å°ä¸º100%
                    this.toggleSrchCrudWidth.width = '40%';
                }else {
                    this.showAttrParams.isShow = false;
                    // ä¸éœ€è¦æ˜¾ç¤ºå±žæ€§è¡¨æ ¼æ‰€æœ‰éœ€è¦å°†æŸ¥è¯¢è°ƒä»·è¡¨æ ¼ç¼©å°ä¸º100%
                    this.toggleSrchCrudWidth.width = '100%';
                }
                // console.log(this.toggleSrchCrudWidth);
                // console.log(this.showAttrParams.isShow);
            },
            // æ˜¾ç¤ºçš„属性和查询条件相关方法
            attrAndSrchCondOnload(row){
                this.srchCondParams.srchCondLoading = true;
                this.showAttrParams.showAttrLoading = true;
                this.$nextTick(() => {
                    this.$refs[this.srchCondParams.ref].doLayout()
                    this.$refs[this.showAttrParams.ref].doLayout()
                });
                this.srchCondParams.srchCondData = row.codeSrchCondConfigVOS
                this.showAttrParams.showAttrData = row.codeShowFieldConfigVOS
                //console.log(this.showAttrParams.showAttrData);
                this.srchCondParams.srchCondLoading = false;
                this.showAttrParams.showAttrLoading = false;
            },
            });
            // console.log(newForm);
            return newForm;
        },
            /**
         * ä¸ºç©º
         * @param val
         * @returns {boolean}
        */
        checkStringIsEmpty(val){
            if (
                val === null ||
                typeof val === 'undefined' ||
                (typeof val === 'string' && val === "" && val !== 'undefined')
            ) {
                return true;
            }
                return false;
        },
            /**
         * æ˜¯å¦ä¸ºå®šä¹‰
         * @param val
         * @returns {boolean}
         */
        checkArrayIsUndefined(val){
            return typeof val === 'array' && (val.length === 0 || val === null || typeof val === 'undefined' || val === []);
        },
        referConfigOnload(){
            let refer = this.referConfigParams;
            refer.referConfigLoading = true;
            let param = {};
            // å¤šä¸ªconditionMap这样传参
            if(refer.referConfigQuery){
                Object.keys(refer.referConfigQuery).forEach(key=>{
                    param['conditionMap['+key+']'] = refer.referConfigQuery[key];
                });
            }
            getReferConfigPage(
                refer.referConfigPage.currentPage,
                refer.referConfigPage.pageSize,
                param
            ).then(res=>{
                const data = res.data.data;
                this.referConfigParams.referConfigPage.total = data.total;
                this.referConfigParams.referConfigData = data.records;
                this.referConfigParams.referConfigLoading = false;
                //console.log(this.referConfigParams.referConfigData.length > 0);
                // æ¸²æŸ“其他区域数据
                if(this.referConfigParams.referConfigData.length > 0) {
                    this.$nextTick(() => {
                        // è¡¨æ ¼é”™è¡Œé—®é¢˜
                        this.$refs[this.referConfigParams.ref].doLayout()
                        // é»˜è®¤é€‰ä¸­ç¬¬ä¸€è¡Œ
                        this.referConfigParams.referConfigSelectedRow = 0;
                        this.$refs[this.referConfigParams.ref].setCurrentRow(this.referConfigParams.referConfigData[0]);
                        this.referConfigParams.referConfigSelectedRowData = this.referConfigParams.referConfigData[0];
                        this.attrAndSrchCondOnload(this.referConfigParams.referConfigData[0]);
                        this.loadDefaultOrGridOrStandOrTreeForm(this.referConfigParams.referConfigData[0]);
                    })
                }
            });
        },
        referBtmTypeSizeChange(pageSize){
            this.referConfigParams.referConfigPage.pageSize = pageSize;
        },
        referBtmTypeCurrentChange(currentPage){
            this.referConfigParams.referConfigPage.currentPage = currentPage;
        },
        referConfigRowClick(row){
            // å¯¹å½“前选中行进行记录
            this.referConfigParams.referConfigSelectedRowData = row;
            // å•选框选中
            this.referConfigParams.referConfigSelectedRow = row.$index
            this.attrAndSrchCondOnload(row);
            this.loadDefaultOrGridOrStandOrTreeForm(row);
        },
        referConfigSearchChange(params, done){
            this.referConfigParams.referConfigQuery = params;
            this.referConfigParams.referConfigPage.currentPage = 1;
            this.referConfigOnload();
            done();
        },
        referConfigSearchReset(){
            this.referConfigParams.referConfigQuery = {};
            this.referConfigOnload(this.referConfigParams.referConfigPage);
        },
        referConfigCurrentChange(currentPage){
            this.referConfigParams.referConfigPage.currentPage = currentPage;
        },
        referConfigSizeChange(pageSize){
            this.referConfigParams.referConfigPage.pageSize = pageSize;
        },
        // åŠ è½½è¡¨å•æ˜¾ç¤ºå†…å®¹
        loadDefaultOrGridOrStandOrTreeForm(currentFormData){
            if(currentFormData.type != 'tree' &
                currentFormData.type != 'stand' &
                currentFormData.type != 'default'&
                currentFormData.type != 'grid') {
                //控制参照配置表格和表单显示比例
                this.isShowForm = false;
                this.toggleBasicCrudWidth.width = '100%';
            }else {
                this.isShowForm = true;
                this.toggleBasicCrudWidth.width = '70%';
                this.toggleFormOption(currentFormData);
            }
            this.toggleCurdWidth(currentFormData);
            //console.log(this.isShowForm);
            //console.log(this.toggleBasicCrudWidth.width);
        },
        // æ ¹æ®type的变动切换表单的配置option
        toggleFormOption(data){
            //console.log(data);
            let currentForm = '';
            if(data.type=='default' || data.type=='grid'){
                this.formOption.column = this.sortColumn;
                currentForm = 'defaultOrGridForm';
            }else if(data.type == 'stand'){
                this.formOption.column = this.standColumn;
                currentForm = 'standForm';
            }else if(data.type == 'tree'){
                this.formOption.column = this.treeColumn;
                currentForm = 'treeForm'
            }
            this.referConfigForm = {},
            //console.log( this.formOption);
            this[currentForm].forEach(item=>{
                Vue.set(this.referConfigForm, item, data[item])
                //this.referConfigForm = Object.assign(this.referConfigForm,{[item]:data[item]})
            })
            // console.log(this.referConfigForm);
        },
        // æ ¹æ®type的变动切换attr表格的显示隐藏,调整查询条件表格的宽度
        toggleCurdWidth(data) {
            if(data.type=='default' || data.type=='grid'){
                this.showAttrParams.isShow = true;
                // ä¸éœ€è¦æ˜¾ç¤ºå±žæ€§è¡¨æ ¼æ‰€æœ‰éœ€è¦å°†æŸ¥è¯¢è°ƒä»·è¡¨æ ¼ç¼©å°ä¸º100%
                this.toggleSrchCrudWidth.width = '40%';
            }else {
                this.showAttrParams.isShow = false;
                // ä¸éœ€è¦æ˜¾ç¤ºå±žæ€§è¡¨æ ¼æ‰€æœ‰éœ€è¦å°†æŸ¥è¯¢è°ƒä»·è¡¨æ ¼ç¼©å°ä¸º100%
                this.toggleSrchCrudWidth.width = '100%';
            }
            // console.log(this.toggleSrchCrudWidth);
            // console.log(this.showAttrParams.isShow);
        },
        // æ˜¾ç¤ºçš„属性和查询条件相关方法
        attrAndSrchCondOnload(row){
            this.srchCondParams.srchCondLoading = true;
            this.showAttrParams.showAttrLoading = true;
            this.$nextTick(() => {
                this.$refs[this.srchCondParams.ref].doLayout()
                this.$refs[this.showAttrParams.ref].doLayout()
            });
            this.srchCondParams.srchCondData = row.codeSrchCondConfigVOS
            this.showAttrParams.showAttrData = row.codeShowFieldConfigVOS
            //console.log(this.showAttrParams.showAttrData);
            this.srchCondParams.srchCondLoading = false;
            this.showAttrParams.showAttrLoading = false;
        },
    },
}
</script>
Source/UBCS-WEB/src/components/code-dialog-page/referConfigFormDialog.vue
@@ -141,38 +141,14 @@
            <el-button @click="isShowReferConfigForm = false">取 æ¶ˆ</el-button>
        </div>
        <el-dialog title="为【参照的业务类型】选取值"
            append-to-body
            :visible.sync="isShowReferBtmType"
            width="70%"
            destroy-on-close
            @close="clearTableRowSelection('referType')"
            style="height: 110vh; margin-top: -12vh; overflow-y: hidden">
            <avue-crud :option="selectionReferBtmTypeOption"
                :table-loading="selectReferBtmTypeLoading"
                :data="selectReferBtmTypeData"
                :page.sync="selectReferBtmTypePage"
                ref="selectReferBtmTypeCrud"
                class="referBtmType-crud"
                @row-click="referBtmTypeRowClick"
                @search-change="referBtmTypeSearchChange"
                @search-reset="referBtmTypeSearchReset"
                @current-change="referBtmTypeCurrentChange"
                @size-change="referBtmTypeSizeChange">
                <template #radio="{row}">
                    <el-radio v-model="referBtmTypeSelectRow"
                        :label="row.$index">
                        &nbsp;
                    </el-radio>
                </template>
            </avue-crud>
            <div slot="footer" class="dialog-footer">
                <el-button type="primary" @click="selectedReferBtmType">ç¡® å®š</el-button>
                <el-button @click="isShowReferBtmType = false">取 æ¶ˆ</el-button>
            </div>
        </el-dialog>
        <!-- å¯¹è¯æ¡†,为【参照引用的业务类型】选取值对话框 -->
        <refer-btm-type-crud-dialog
            :visible.sync="referBtmDialogParams.selectReferBtmSettingBox"
            :ref="referBtmDialogParams.ref"
            @echoReferBtmType="echoReferBtmType">
        </refer-btm-type-crud-dialog>
        <el-dialog title="为【排序字段】选取值"
        <!-- <el-dialog title="为【排序字段】选取值"
            append-to-body
            :visible.sync="isShowSortField"
            width="70%"
@@ -200,7 +176,14 @@
                <el-button type="primary" @click="selectedSortField">ç¡® å®š</el-button>
                <el-button @click="isShowSortField = false">取 æ¶ˆ</el-button>
            </div>
        </el-dialog>
        </el-dialog> -->
        <refer-select-btm-attr-dialog
            title="为【排序字段】选取值"
            :visible.sync="selectedBtmTypeAttrParams.selectedBtmTypeAttrSettingBox"
            :ref="selectedBtmTypeAttrParams.ref"
            @echoSelectedAttr="echoSelectedAttr">
        </refer-select-btm-attr-dialog>
        <el-dialog title="选择显示字段"
            append-to-body
@@ -461,212 +444,21 @@
                activeName: 'first', //当前活动的tabs
                //为【参照的业务类型】选取值对话框
                selectionReferBtmTypeOption: {
                    border: true,
                    height: '260',
                    tip: false,
                    //searchShow: false,
                    index: true,
                    selection: false,
                    menu: false,
                    addBtn: false,
                    refreshBtn: false,
                    searchShowBtn: false,
                    columnBtn: false,
                    dialogClickModal: false,
                    highlightCurrentRow: true,
                    align: 'center',
                    menuAlign: 'center',
                    column: [{
                        label: '-',
                        prop: 'radio',
                        width: 60,
                        hide: false
                    },{
                        label: '业务类型编号',
                        width: 120,
                        search: true,
                        searchSpan: 8,
                        searchLabelWidth: 100,
                        prop: 'id'
                    },{
                        label: '业务类型名称',
                        search: true,
                        searchSpan: 8,
                        searchLabelWidth: 100,
                        prop: 'name'
                    },{
                        label: '描述',
                        search: false,
                        prop: 'description'
                    }],
                /** å‚照引用的业务类型对话框相关参数 */
                referBtmDialogParams: {
                    ref: 'crudReferBtm',
                    selectReferBtmSettingBox: false,
                },
                selectReferBtmTypeLoading: false,
                selectReferBtmTypeData: [],
                selectReferBtmTypePage: {
                    pageSize: 10,
                    currentPage: 1,
                    total: 0
                /** é€‰æ‹©å…³è”的业务类型属性相关的对话框相关参数 */
                selectedBtmTypeAttrParams: {
                    ref: 'selectedBtmTypeAttrCrud',
                    selectedBtmTypeAttrSettingBox: false,
                },
                referBtmTypeQuery: {},
                isShowReferBtmType: false,
                referBtmTypeSelectRowData: '',
                referBtmTypeSelectRow: '',
                // ä¸ºã€æŽ’序字段】选取值对话框
                isShowSortField: false,
                selectionSortFieldOption: {
                    border: true,
                    height: '220px',
                    tip: false,
                    //searchShow: false,
                    index: true,
                    selection: false,
                    addBtn: false,
                    menu: false,
                    refreshBtn: false,
                    searchShowBtn: false,
                    columnBtn: false,
                    dialogClickModal: false,
                    highlightCurrentRow: true,
                    align: 'center',
                    menuAlign: 'center',
                    border: true,
                    column: [{
                        label: '-',
                        prop: 'radio',
                        width: 60,
                        hide: false
                    },{
                        label: '属性英文编号',
                        width: 120,
                        search: true,
                        searchSpan: 8,
                        searchLabelWidth: 100,
                        prop: 'id'
                    },{
                        label: '属性中文名称',
                        search: true,
                        searchSpan: 8,
                        searchLabelWidth: 100,
                        prop: 'name'
                    },{
                        label: '属性长度',
                        search: false,
                        prop: 'attrLength'
                    },{
                        label: '属性类型',
                        search: false,
                        prop: 'attrType'
                    }],
                seletedBtmTypeAttrOptions: {
                    title: '', //对话框显示的标题
                    condition: '',  //当前打开对话框的类型
                    btmTypeId: '', //查询条件,业务类型id
                },
                selectSortFieldLoading: false,
                selectSortFieldData: [],
                selectSortFieldPage: {
                    pageSize: 10,
                    currentPage: 1,
                    total: 0
                },
                sortFieldQuery: {},
                sortFieldSelectRow: '',
                sortFieldSelectRowData: '',
                //选择显示字段
                isShowShowField: false,
                selectionShowFieldOption:  {
                    border: true,
                    height: '220px',
                    tip: false,
                    //searchShow: false,
                    index: true,
                    selection: true,
                    addBtn: false,
                    menu: false,
                    refreshBtn: false,
                    searchShowBtn: false,
                    columnBtn: false,
                    dialogClickModal: false,
                    highlightCurrentRow: true,
                    align: 'center',
                    menuAlign: 'center',
                    border: true,
                    column: [{
                        label: '属性英文编号',
                        width: 120,
                        search: true,
                        searchSpan: 8,
                        searchLabelWidth: 100,
                        prop: 'id'
                    },{
                        label: '属性中文名称',
                        search: true,
                        searchSpan: 8,
                        searchLabelWidth: 100,
                        prop: 'name'
                    },{
                        label: '属性长度',
                        search: false,
                        prop: 'attrLength'
                    },{
                        label: '属性类型',
                        search: false,
                        prop: 'attrType'
                    }],
                },
                showFieldQuery: {},
                selectShowFieldLoading: false,
                selectShowFieldData: [],
                showFieldSelectList: [],
                //添加查询条件
                isShowSearchCondition: false,
                selectionSearchConditionOption: {
                    border: true,
                    height: '220px',
                    tip: false,
                    //searchShow: false,
                    index: true,
                    selection: true,
                    addBtn: false,
                    menu: false,
                    refreshBtn: false,
                    searchShowBtn: false,
                    columnBtn: false,
                    dialogClickModal: false,
                    highlightCurrentRow: true,
                    align: 'center',
                    menuAlign: 'center',
                    border: true,
                    column: [{
                        label: '属性英文编号',
                        width: 120,
                        search: true,
                        searchSpan: 8,
                        searchLabelWidth: 100,
                        prop: 'id'
                    },{
                        label: '属性中文名称',
                        search: true,
                        searchSpan: 8,
                        searchLabelWidth: 100,
                        prop: 'name'
                    },{
                        label: '属性长度',
                        search: false,
                        prop: 'attrLength'
                    },{
                        label: '属性类型',
                        search: false,
                        prop: 'attrType'
                    }],
                },
                selectSearchConditionLoading: false,
                selectSearchConditionData: [],
                searchConditionQuery: {},
                searchConditionSelectList: [],
                //上一次点击的行编辑数据
                preClickAttrRow: '',
@@ -1340,28 +1132,7 @@
            checkArrayIsUndefined(val){
                return typeof val === 'array' && (val.length === 0 ||val === null || typeof val === 'undefined');
            },
            // æ‰“开表格选择框
            openSelectionTable(condition){
                if (condition == 'referType'){
                    this.isShowReferBtmType = true;
                    this.referBtmTypeOnLoad();
                }else if (condition == 'sortField'){
                    this.isShowSortField = true;
                    this.sortFieldOnLoad();
                }else {
                    if(this.form.referType == '' || this.form.referType == null){
                        this.$message.warning("请输入参照的业务类型")
                        return;
                    }
                    if(condition == 'addSearchCondition'){
                        this.isShowSearchCondition = true;
                        this.selectSearchConditionDataOnload();
                    }else {
                        this.isShowShowField = true;
                        this.selectShowFieldDataOnload();
                    }
                }
            },
            // æ¸…空表格选择框
            clearSelectionTable(condition){
                if(condition == 'referType'){
@@ -1371,257 +1142,84 @@
                    this.form.sortField = '';
                }
            },
            // å…³é—­å¯¹è¯æ¡†æ—¶å¯¹é€‰ä¸­å†…容进行清空,并解绑全局监听事件
            clearTableRowSelection(condition){
            // æ‰“开表格选择框
            openSelectionTable(condition){
                // æ‰“开选择参照引用对话框
                if (condition == 'referType'){
                    this.referBtmDialogParams.selectReferBtmSettingBox = true;
                    // console.log(this.referBtmDialogParams.ref);
                    // è°ƒç”¨å­ç»„件刷新表格数据
                    this.$refs[this.referBtmDialogParams.ref].referBtmOnLoad();
                    return;
                }
                // æç¤º
                if(this.form.referType == '' || this.form.referType == null){
                    this.$message.warning("请输入参照的业务类型")
                    return;
                }
                let params = this.seletedBtmTypeAttrOptions;
                params.btmTypeId = this.form.referType
                // é€‰æ‹©æŽ’序字段
                if(condition == 'sortField'){
                    this.sortFieldSelectRow = '';
                    this.sortFieldSelectRowData = '';
                }else if(condition == 'referType'){
                    this.referBtmTypeSelectRow='';
                    this.referBtmTypeSelectRowData = '';
                    params.title = '为【排序字段】选取值对话框';
                    params.condition = 'sortField';
                }else if(condition == 'addSearchCondition'){
                    // é€‰æ‹©æŸ¥è¯¢æ¡ä»¶
                    params.title = '选择查询条件';
                    params.condition = 'addSearchCondition';
                }else{
                    // é€‰æ‹©å±žæ€§
                    params.title = '选择显示字段';
                    params.condition = 'selectAttr';
                }
                this.$refs[this.selectedBtmTypeAttrParams.ref].selectedBtmTypeAttrOnLoad(params);
                this.selectedBtmTypeAttrParams.selectedBtmTypeAttrSettingBox = true;
            },
            /** ä¸ºã€å‚照引用的业务类型】选取值之后的内容回显时调用 */
            echoReferBtmType(content){
                // å®žçŽ°å›žæ˜¾
                this.form.referTypeName = content.name;
                this.form.referType = content.id;
            },
            /** æŽ’序字段、显示的属性、查询条件的表格行选择之后回显 */
            echoSelectedAttr(data){
                console.log(data);
                // ä¸ºã€æŽ’序字段】选取值
                if(data.condition === 'sortField'){
                    this.form.sortField = data.selectedArrary[0].id;
                }else if(data.condition === 'addSearchCondition') {
                    data.selectedArrary.forEach(item => {
                        this.form.codeSrchCondConfigVOS.push(
                            {
                                filterField: item.id,
                                filterType: '=',
                                filterTypeText: item.name,
                                filterValue: '',
                                $cellEdit: false
                            }
                        )
                    })
                }else{
                    // é€‰æ‹©æ˜¾ç¤ºå­—段
                    data.selectedArrary.forEach(item => {
                        this.codeShowFieldConfigVOS.push(
                            {
                                field: item.id,
                                title: item.id,
                                fieldType: item.attrType,
                                fieldTypeText: item.attrTypeText,
                                sort: false,
                                attrSortField: item.id,
                                width: item.attrLength,
                                isquery: false,
                                $cellEdit: false
                            }
                        )
                    })
                }
            },
            // ä¸ºã€å‚照的业务类型】选取值
            referBtmTypeOnLoad(page, params = {}){
                this.selectReferBtmTypeLoading = true;
                // è°ƒç”¨api请求
                const data = {
                    total: 2,
                    data: [{
                        id: 't2',
                        name: 'test2',
                        description: 'test2',
                    }, {
                        id: 't3',
                        name: 'test3',
                        description: 'test3',
                    }]
                }
                this.selectReferBtmTypeData = data.data;
                this.selectReferBtmTypePage.total = data.total;
                this.selectReferBtmTypeLoading = false;
            },
            referBtmTypeSizeChange(pageSize){
                this.selectReferBtmTypePage.pageSize = pageSize;
            },
            referBtmTypeSearchChange(params, done){
                this.referBtmTypeQuery = params;
                this.selectReferBtmTypePage.currentPage = 1;
                this.referBtmTypeOnLoad(this.page, params);
                done();
            },
            referBtmTypeSearchReset(){
                this.referBtmTypeQuery = {};
                this.referBtmTypeOnLoad(this.selectReferBtmTypePage);
            },
            referBtmTypeRowClick(row){
                this.referBtmTypeSelectRowData = row;
                this.referBtmTypeSelectRow = row.$index
                //console.log( this.referBtmTypeSelectRowData);
            },
            referBtmTypeCurrentChange(currentPage){
                this.selectReferBtmTypePage.currentPage = currentPage;
            },
            selectedReferBtmType(){
                if(!this.referBtmTypeSelectRowData) {
                    this.$message.warning("请选择一条数据");
                    return;
                }
                this.form.referTypeName = this.referBtmTypeSelectRowData.name;
                this.form.referType = this.referBtmTypeSelectRowData.id;
                this.isShowReferBtmType = false;
            },
            // ä¸ºã€æŽ’序字段】选取值
            sortFieldOnLoad(page, params = {}){
                this.selectSortFieldLoading = true;
                // è°ƒç”¨api请求
                const data = {
                    total: 2,
                    data: [{
                        id: 'test',
                        name: '测试',
                        attrLength: 11,
                        attrType: '字符串'
                    }, {
                        id: 'test1',
                        name: '测试1',
                        attrLength: 12,
                        attrType: '数字'
                    }]
                }
                this.selectSortFieldData = data.data;
                this.selectSortFieldPage.total = data.total;
                this.selectSortFieldLoading = false;
            },
            sortFieldSizeChange(pageSize){
                this.selectSortFieldPage.pageSize = pageSize;
            },
            sortFieldSearchChange(params, done){
                this.sortFieldQuery = params;
                this.selectSortFieldPage.currentPage = 1;
                this.sortFieldOnLoad(this.page, params);
                done();
            },
            sortFieldSearchReset(){
                this.sortFieldQuery = {};
                this.sortFieldOnLoad(this.selectSortFieldPage);
            },
            sortFieldRowClick(row){
                this.sortFieldSelectRowData = row;
                this.sortFieldSelectRow = row.$index
                //console.log( this.sortFieldSelectRowData);
            },
            sortFieldCurrentChange(currentPage){
                this.selectReferBtmTypePage.currentPage = currentPage;
            },
            selectedSortField(){
                if(!this.sortFieldSelectRowData) {
                    this.$message.warning("请选择一条数据");
                    return;
                }
                this.form.sortField = this.sortFieldSelectRowData.id;
                this.isShowSortField = false;
            },
            // é€‰æ‹©æ˜¾ç¤ºå­—段
            selectShowFieldDataOnload(params = {}){
                this.selectShowFieldLoading = true;
                // è°ƒç”¨api请求
                const data = {
                    total: 2,
                    data: [{
                        id: 'test',
                        name: '测试',
                        attrLength: 11,
                        attrType: 'text',
                        attrTypeText: '文本框'
                    }, {
                        id: 'test1',
                        name: '测试1',
                        attrLength: 12,
                        attrType: 'number',
                        attrTypeText: '数字'
                    }, {
                        id: 'test2',
                        name: '测试2',
                        attrLength: 13,
                        attrType: 'date',
                        attrTypeText: '日期'
                    }]
                }
                this.selectShowFieldData = data.data;
                this.selectShowFieldLoading = false;
            },
            selectionShowFieldDataChange(list){
                this.showFieldSelectList = list;
                this.$refs.selectShowFieldCrud.setCurrentRow(this.showFieldSelectList[list.length-1]);
            },
            showFieldRowClick(row){
                //this.showFieldSelectList.push(row);
                this.$refs.selectShowFieldCrud.setCurrentRow(row);
                this.$refs.selectShowFieldCrud.toggleRowSelection(row); //选中当前行
            },
            showFieldSearchChange(params, done){
                this.showFieldQuery = params;
                this.selectShowFieldDataOnload(params);
                done();
            },
            showFieldSearchReset(){
                this.showFieldQuery = {};
                this.sortFieldOnLoad();
            },
            selectedShowField(){
                //console.log(this.showFieldSelectList);
                if(this.showFieldSelectList.length <= 0) {
                    this.$message.warning("请至少选择一条数据");
                    return;
                }
                //this.showFieldSelectList;
                this.showFieldSelectList.forEach(item => {
                    this.codeShowFieldConfigVOS.push(
                        {
                            field: item.id,
                            title: item.id,
                            fieldType: item.attrType,
                            fieldTypeText: item.attrTypeText,
                            sort: false,
                            attrSortField: item.id,
                            width: item.attrLength,
                            isquery: false,
                            $cellEdit: false
                        }
                    )
                })
                this.isShowShowField = false;
            },
            // é€‰æ‹©æŸ¥è¯¢æ¡ä»¶
            selectSearchConditionDataOnload(params = {}){
                this.selectSearchConditionLoading = true;
                // è°ƒç”¨api请求
                this.selectSearchConditionData = [{
                        id: 'test',
                        name: '测试',
                        attrLength: 11,
                        attrType: '字符串',
                        $cellEdit: false,
                    }, {
                        id: 'test1',
                        name: '测试1',
                        attrLength: 12,
                        attrType: '数字',
                        $cellEdit: false,
                    }, {
                        id: 'test2',
                        name: '测试2',
                        attrLength: 13,
                        attrType: '日期',
                        $cellEdit: false,
                }];
                this.selectSearchConditionLoading = false;
            },
            searchConditionRowClick(row){
                this.$refs.selectSearchConditionCrud.setCurrentRow(row);
                this.$refs.selectSearchConditionCrud.toggleRowSelection(row); //选中当前行
            },
            searchConditionDataChange(list){
                this.searchConditionSelectList = list;
                this.$refs.selectSearchConditionCrud.setCurrentRow(this.searchConditionSelectList[list.length-1]);
            },
            searchConditionSearchChange(params, done){
                this.searchConditionQuery = params;
                this.selectSearchConditionDataOnload(params);
                done();
            },
            searchConditionSearchReset(){
                this.searchConditionQuery = {};
                this.sortFieldOnLoad();
            },
            selectedSearchCondition(){
                // console.log(this.searchConditionSelectList);
                if(this.searchConditionSelectList.length <= 0) {
                    this.$message.warning("请至少选择一条数据");
                    return;
                }
                this.searchConditionSelectList.forEach(item => {
                    this.form.codeSrchCondConfigVOS.push(
                        {
                            filterField: item.id,
                            filterType: '=',
                            filterTypeText: item.name,
                            filterValue: '',
                            $cellEdit: false
                        }
                    )
                })
                this.isShowSearchCondition = false;
            },
        }
    };
Source/UBCS-WEB/src/components/code-dialog-page/referSelectBtmAttrDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,186 @@
<template>
     <el-dialog
        :title="options.title"
        append-to-body
        :visible.sync="crudParams.isShowDialog"
        width="65%"
        destroy-on-close
        @close="clearTableRowSelection"
        style="height: 110vh; margin-top: -12vh; overflow-y: hidden">
        <avue-crud :option="crudParams.crudOption"
            :table-loading="crudParams.crudLoading"
            :data="crudParams.crudData"
            :ref="crudParams.ref"
            @row-click="selectedBtmTypeAttrRowClick"
            @selection-change="selectionBtmTypeAttrChange"
            @search-change="selectedBtmTypeAttrSrchChange"
            @search-reset="selectedBtmTypeAttrSrchReset">
        </avue-crud>
        <div slot="footer" class="dialog-footer">
            <el-button type="primary" @click="selectedBtmTypeAttr">ç¡® å®š</el-button>
            <el-button @click="crudParams.isShowDialog = false">取 æ¶ˆ</el-button>
        </div>
    </el-dialog>
</template>
<script>
import { gridAttributesByBtmId } from "@/api/code/referBtmType";
export default {
    name: "referSelectBtmAttrDialog",
    props: {
        // å¯¹è¯æ¡†æ˜¾ç¤ºéšè—æŽ§åˆ¶
        visible: {
            type: "Boolean",
            default: false,
        },
    },
    watch: {
        // ç›‘听父组件传的窗口显示隐藏的值
        visible (){
            this.crudParams.isShowDialog = this.visible;
        }
    },
    data() {
        return {
            // è¡¨æ ¼ç›¸å…³å‚æ•°
            crudParams: {
                ref: "selectedAttrCrud",
                isShowDialog: this.visible,   //对话框显示控制
                crudLoading: false,
                crudOption: {
                    border: true,
                    height: '250px',
                    tip: false,
                    //searchShow: false,
                    index: true,
                    selection: true,
                    addBtn: false,
                    menu: false,
                    // refreshBtn: false,
                    searchShowBtn: false,
                    columnBtn: false,
                    dialogClickModal: false,
                    highlightCurrentRow: true,
                    searchMenuSpan: 5,
                    align: 'center',
                    menuAlign: 'center',
                    border: true,
                    column: [{
                        label: '属性英文编号',
                        width: 120,
                        search: true,
                        searchSpan: 8,
                        searchLabelWidth: 100,
                        prop: 'id'
                    },{
                        label: '属性中文名称',
                        search: true,
                        searchSpan: 8,
                        searchLabelWidth: 100,
                        prop: 'name'
                    },{
                        label: '属性长度',
                        search: false,
                        prop: 'attrLength'
                    },{
                        label: '属性类型',
                        search: false,
                        prop: 'attrType'
                    }],
                },
                crudData: [],
                crudQuery: {},
                crudSelectedRowData: [],
            },
            // è°ƒç”¨æ–¹ä¼ è¿‡æ¥çš„相关参数
            options: {},
        }
    },
    methods: {
        // æ¸…空选中
        clearTableRowSelection(){
            this.crudParams.crudSelectedRow='';
            this.crudParams.crudSelectedRowData = '';
            this.$emit('update:visible', false);
        },
        // crud相关方法
        selectedBtmTypeAttrOnLoad(params){
            this.options = params;
            this.crudParams.crudLoading = true;
            // è°ƒç”¨api请求
            const data = {
                total: 2,
                data: [{
                    id: 'test',
                    name: '测试',
                    attrLength: 11,
                    attrType: '字符串'
                }, {
                    id: 'test1',
                    name: '测试1',
                    attrLength: 12,
                    attrType: '数字'
                }]
            }
            let param = {};
            // å¤šä¸ªconditionMap这样传参
            if(this.crudParams.crudQuery){
                Object.keys(crudParams.crudQuery).forEach(key=>{
                    param['conditionMap['+key+']'] = crudParams.crudQuery[key];
                });
            }
            gridAttributesByBtmId(1,-1,param).then(res=>{
                console.log(res);
            })
            this.crudParams.crudData = data.data;
            this.crudParams.crudLoading = false;
        },
        selectedBtmTypeAttrSrchChange(params, done){
            this.crudParams.crudQuery = params;
            this.selectedBtmTypeAttrOnLoad(this.options);
            done();
        },
        selectedBtmTypeAttrSrchReset(){
            this.crudParams.crudQuery = {};
            this.selectedBtmTypeAttrOnLoad(this.options);
        },
        selectedBtmTypeAttrRowClick(row){
            this.crudParams.crudSelectedRowData = row;
            this.$refs[this.crudParams.ref].toggleSelection();
            this.$refs[this.crudParams.ref].setCurrentRow(row);
            this.$refs[this.crudParams.ref].toggleRowSelection(row); //选中当前行
        },
        selectionBtmTypeAttrChange(list){
            this.crudParams.crudSelectedRowData = list;
            this.$refs[this.crudParams.ref].setCurrentRow(this.crudParams.crudSelectedRowData[list.length-1]);
            //当前选中行为空的时候就将码段管理表格数据置空
        },
        // é€‰ä¸­å±žæ€§ä¹‹åŽ
        selectedBtmTypeAttr(){
            if(this.crudParams.crudSelectedRowData.length<=0 || (this.options.condition == 'sortField' && this.crudParams.crudSelectedRowData.length!=1)) {
                this.$message.warning("请选择一条数据");
                return;
            }
            // æž„造回显父组件需要传递的相关参数
            let data = {
                selectedArrary: this.crudParams.crudSelectedRowData,
                condition: this.options.condition
            };
            this.$emit('echoSelectedAttr',data);
            this.crudParams.isShowDialog = false;
        },
    },
}
</script>
<style>
</style>
Source/UBCS-WEB/src/components/refer/vciWebRefer.vue
@@ -18,7 +18,6 @@
    };
  },
  created() {
    console.log(this.refertype)
    if(this.refertype=='tree'){
      console.log('referConfig:')
      console.log(this.options)
Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue
@@ -1,10 +1,9 @@
<template>
  <avue-input-tree :props="props" :lazy="lazy" :multiple="isMuti" v-model="value" :placeholder="placeholder" :dic="treeData"></avue-input-tree>
  <avue-input-tree :props="props" :lazy="lazy" :tree-load="treeLoad" :leaf-only="!options.onlyLeaf" :multiple="isMuti" v-model="value" :placeholder="placeholder" :dic="treeData"></avue-input-tree>
</template>
<script>
import {getTree,getLazyTree} from "@/api/refer/tree";
import {getDeptLazyTree} from "@/api/system/dept";
export default {
  name: "vciWebReferTree",
@@ -12,57 +11,45 @@
  data() {
    return {
      lazy:this.options.loadType == 'node',
      isMuti:true,//options.muti,
      isMuti:this.options.muti,
      placeholder:'请选择内容',
      props: {
        value:this.options.valueField,
        label:this.options.textField
        value:this.options.valueField || 'oid',
        label:this.options.textField || "name"
        //value:"value",
        //label:"title"
      },
      treeData:[{
        title:'选项1',
        value:0,
        children:[{
          title:'选项3',
          value:2
        },{
          title:'选项4',
          value:3
        }]
      },{
        title:'选项2',
        value:1
      }]
      treeData:[],
      params:{}
    };
  },
  created() {
    this.getParams();
  },
  mounted() {
    this.getTree();
    if(!this.lazy){
      this.getTree()
    }
  },
  methods: {
    getTree(){
      getTree({parentId:0},this.options.url).then(res => {
          this.treeData=res.data
    getParams:function (){
          console.log(this.treeData)
    },
    getTree(){
      getTree(this.params,this.options.url).then(res => {
          this.treeData=res.data
        })
    },
    getLazyTree(){
      getLazyTree({parentId:0},this.options.url).then(res => {
        this.treeData=res.data.data
        console.log(this.treeData)
      })
    },
    treeLoad: function (tree,treeNode, resolve) {
      debugger;
    treeLoad: function (treeNode, resolve) {
      const parentId = (treeNode.level === 0) ? 0 : treeNode.data.id;
      /*getDeptLazyTree({parentId:parentId}).then(res => {
        resolve(res.data.data)
      });*/
      getLazyTree({...this.params,parentId:parentId}).then(res => {
        resolve(res.data.data.map(item => {
          return {
            ...item,
            leaf: !item.hasChildren
          }
        }))
      });
    }
  }
Source/UBCS-WEB/src/const/code/classifyTreeOptionDialog.js
@@ -15,6 +15,7 @@
            "parentId": 0,
            "title": classifyitem.text,
            "value": classifyitem.oid,
            "btmTypeOid": classifyitem.attributes.btmTypeOid,
          }
          return {
            ...item,
Source/UBCS-WEB/src/const/code/classifytreeoption.js
ÎļþÒÑɾ³ý
Source/UBCS-WEB/src/const/code/referBtmDialog.js
@@ -12,6 +12,8 @@
    viewBtn: false,
    selection: true,
    menu: false,
    columnBtn: false,
    searchShowBtn: false, //    è¡¨æ ¼æœç´¢æ˜¾éšæŒ‰é’®
    dialogClickModal: false,
    highlightCurrentRow: true,
    column: [
@@ -20,14 +22,14 @@
        prop: "id",
        search: true,
        searchLabelWidth: 100,
        searchSpan: 7,
        searchSpan: 8,
      },
      {
        label: "业务类型名称",
        prop: "name",
        search: true,
        searchLabelWidth: 100,
        searchSpan: 7,
        searchSpan: 8,
      },
      {
        label: "描述",
Source/UBCS-WEB/src/const/code/selectAttrOptionDialog.js
@@ -1,10 +1,11 @@
export default {
    height: '41vh',
    calcHeight: 30,
    tip: false,
    editBtn: false,
    addBtn: false,
    searchShow: true,
    searchMenuSpan: 5,
    searchMenuSpan: 6,
    disablePage: false,
    border: true,
    index: true,
@@ -21,23 +22,23 @@
        prop: "id",
        search: true,
        searchLabelWidth: 100,
        searchSpan: 7,
        searchSpan: 9,
      },
      {
        label: "属性中文名称",
        prop: "name",
        search: true,
        searchLabelWidth: 100,
        searchSpan: 7,
        searchSpan: 9,
      },
      {
        label: "属性长度",
        prop: "attrlength",
        prop: "attributeLength",
        search: false,
      },
      {
        label: "属性类型",
        prop: "attributedatatypetext",
        prop: "attrDataTypeText",
        search: false,
      }
    ]
Source/UBCS-WEB/src/main.js
@@ -39,6 +39,9 @@
import formulaEditor from "@/components/code-dialog-page/formulaEditor"
import referConfigCrudDialog from "@/components/code-dialog-page/referConfigCrudDialog"
import referConfigFormDialog from "@/components/code-dialog-page/referConfigFormDialog"
import referBtmTypeCrudDialog from "@/components/code-dialog-page/referBtmTypeCrudDialog"
import referSelectBtmAttrDialog from "@/components/code-dialog-page/referSelectBtmAttrDialog"
import advancedQuery from "@/components/advanced-query/advancedQuery"
import businessAdd from "@/views/modeling/BusinessAdd"
import TableCrud from "@/components/Crud/Crud"
import originalAdd from "@/views/modeling/originalAdd"
@@ -82,10 +85,13 @@
Vue.component('formulaEditor',formulaEditor)
Vue.component('referConfigCrudDialog',referConfigCrudDialog)
Vue.component('referConfigFormDialog',referConfigFormDialog)
Vue.component('advancedQuery',advancedQuery)
Vue.component('businessAdd',businessAdd)
Vue.component('attrCrud',attrCrud)
Vue.component('TableCrud',TableCrud)
Vue.component('originalAdd',originalAdd)
Vue.component('referBtmTypeCrudDialog',referBtmTypeCrudDialog)
Vue.component('referSelectBtmAttrDialog',referSelectBtmAttrDialog)
Vue.component('FormTemplateDialog',FormTemplateDialog)
// åŠ è½½ç›¸å…³url地址
Source/UBCS-WEB/src/views/code/code.vue
@@ -54,45 +54,62 @@
            @click="enableOrDeactivatse(scope.row.oid,'enable')">启 ç”¨
          </el-button>
        </template>
        <!-- è¡¨æ ¼å·¦ä¸Šæ–¹æŒ‰é’®åŒºåŸŸ -->
        <!-- è¡¨æ ¼ä¸Šæ–¹æŒ‰é’®åŒºåŸŸ -->
        <template slot="menuLeft" slot-scope="scope">
          <el-button type="danger"
                    size="small"
                    icon="el-icon-delete"
                    plain
                    @click="handleDelete">删 é™¤
            size="small"
            icon="el-icon-delete"
            plain
            @click="handleDelete">
            åˆ  é™¤
          </el-button>
          <el-button size="small"
                    icon="icon-kelong"
                    plain
                    @click="openCodeRuleDialog">克 éš†
            icon="icon-kelong"
            plain
            @click="openCodeRuleDialog">
            å…‹ éš†
          </el-button>
          <el-button size="small"
                    icon="icon-lianjiekelong"
                    style="font-size: 12px;"
                    plain
                    @click="openOtherCodeRuleDialog">从其他规则中克隆码段
            icon="icon-lianjiekelong"
            style="font-size: 12px;"
            plain
            @click="openOtherCodeRuleDialog">
            ä»Žå…¶ä»–规则中克隆码段
          </el-button>
          <el-button size="small"
                    icon="el-icon-s-help"
                    plain
                    @click="handleRange">使用范围
            icon="el-icon-s-help"
            plain
            @click="handleRange">
            ä½¿ç”¨èŒƒå›´
          </el-button>
          <el-button size="small"
                    icon="icon-qingkong"
                    plain
                    @click="clearAllCodeSec">清空码值
              icon="icon-qingkong"
              plain
              @click="clearAllCodeSec">
              æ¸…空码值
          </el-button>
          <el-button size="small"
            icon="el-icon-search"
            plain
            @click="openAdvancedQuery">
            é«˜çº§æŸ¥è¯¢
        </el-button>
        </template>
      </avue-crud>
    </basic-container>
    <!-- é«˜çº§æŸ¥è¯¢å¯¹è¯æ¡† -->
    <advanced-query
      ref="advancedQuery"
      :options="advancedQueryParam.options"
      :visible.sync="advancedQueryParam.advancedQuerySettingBox"
      v-model="value">
    </advanced-query>
    <!-- ç¼–码规则相关对话框 -->
    <el-dialog title="编码规则使用范围"
      append-to-body
      :visible.sync="codeRangeSettingBox"
      width="800px"
        style="height: 116vh; margin-top: -10vh;">
      style="height: 116vh; margin-top: -10vh;">
      <avue-crud
        :option="dialogeOption" 
        :table-loading="dialogLoading"
@@ -401,7 +418,7 @@
            <el-form-item label="码段类型" :label-width="leftFormLabelWidth" required>
              <el-select v-model="form.secType" placeholder="请选择" @change="changeSectypeFormItems(null)" :disabled="basicSecOnlyRead">
                <el-option
                  v-for="item in sectypeList"
                  v-for="item in enumParam.secTypeList"
                  :key="item.itemValue"
                  :label="item.itemName"
                  :value="item.itemValue">
@@ -429,7 +446,7 @@
              <el-form-item label="码段长度类型:" :label-width="rightFormLabelWidth" required>
                <el-select v-model="form.codeSecLengthType" placeholder="请选择" :disabled="basicSecOnlyRead">
                  <el-option
                  v-for="item in codeSecLengthType"
                  v-for="item in enumParam.codeSecLengthType"
                  :key="item.itemValue"
                  :label="item.itemName"
                  :value="item.itemValue">
@@ -486,7 +503,7 @@
              <el-form-item label="编码补位方式:" :label-width="rightFormLabelWidth" required>
                <el-select v-model="form.codeFillType" placeholder="请选择" :disabled="basicSecOnlyRead">
                  <el-option label="左补位" value="codeattrsec"
                    v-for="item in codeFillType"
                    v-for="item in enumParam.codeFillType"
                    :key="item.itemValue"
                    :label="item.itemName"
                    :value="item.itemValue">
@@ -496,7 +513,7 @@
              <el-form-item label="补位时的字符:" :label-width="rightFormLabelWidth">
                <el-select v-model="form.codeFillSeparatorSelect" @blur="inputSelectBlur" filterable placeholder="请选择" :disabled="basicSecOnlyRead">
                  <el-option
                    v-for="item in codeFillSeparator"
                    v-for="item in enumParam.codeFillSeparator"
                    :key="item.itemValue"
                    :label="item.itemName"
                    :value="item.itemValue">
@@ -521,7 +538,7 @@
              <el-form-item label="层级类型:" :label-width="rightFormLabelWidth" required>
                <el-select v-model="form.codeLevelType" placeholder="请选择" :disabled="basicSecOnlyRead">
                  <el-option
                    v-for="item in codeLevelType"
                    v-for="item in enumParam.codeLevelType"
                    :key="item.itemValue"
                    :label="item.itemName"
                    :value="item.itemValue">
@@ -534,7 +551,7 @@
              <el-form-item label="字符截取类型:" :label-width="rightFormLabelWidth" required>
                <el-select v-model="form.valueCutType" placeholder="请选择" :disabled="basicSecOnlyRead">
                  <el-option
                    v-for="item in codeCutType"
                    v-for="item in enumParam.codeCutType"
                    :key="item.itemValue"
                    :label="item.itemName"
                    :value="item.itemValue">
@@ -544,7 +561,7 @@
              <el-form-item label="取值类型:" :label-width="rightFormLabelWidth">
                <el-select v-model="form.codeGetValueType" placeholder="请选择" :disabled="basicSecOnlyRead">
                  <el-option
                    v-for="item in codeGetValueType"
                    v-for="item in enumParam.codeGetValueType"
                    :key="item.itemValue"
                    :label="item.itemName"
                    :value="item.itemValue">
@@ -560,7 +577,7 @@
                  placeholder="请选择"
                  prefix-icon="el-icon-search"
                  readonly="true"
                  v-model="form.referBtmId"
                  v-model="form.referBtmName"
                  @focus="openAttrSelectOrGetValue('referBtmId')"
                  :disabled="basicSecOnlyRead">
                  <i slot="suffix" class="el-icon-circle-close" @click="clearAttrDataByIcon('referBtmId')" style="margin-right: 5px;cursor: pointer;"></i>
@@ -590,7 +607,7 @@
              <el-form-item label="码段长度类型:" :label-width="rightFormLabelWidth" required>
                <el-select v-model="form.codeSecLengthType" placeholder="请选择" :disabled="basicSecOnlyRead">
                  <el-option
                    v-for="item in codeSecLengthType"
                    v-for="item in enumParam.codeSecLengthType"
                    :key="item.itemValue"
                    :label="item.itemName"
                    :value="item.itemValue">
@@ -623,7 +640,7 @@
              <el-form-item label="编码补位方式:" :label-width="rightFormLabelWidth" required>
                <el-select v-model="form.codeFillType" placeholder="请选择" :disabled="basicSecOnlyRead">
                  <el-option
                      v-for="item in codeFillType"
                      v-for="item in enumParam.codeFillType"
                      :key="item.itemValue"
                      :label="item.itemName"
                      :value="item.itemValue">
@@ -633,7 +650,7 @@
              <el-form-item label="补位时的字符:" :label-width="rightFormLabelWidth">
                <el-select v-model="form.codeFillSeparatorSelect" filterable @blur="inputSelectBlur" placeholder="请选择" :disabled="basicSecOnlyRead">
                  <el-option
                    v-for="item in codeFillSeparator"
                    v-for="item in enumParam.codeFillSeparator"
                    :key="item.itemValue"
                    :label="item.itemName"
                    :value="item.itemValue">
@@ -676,10 +693,10 @@
              <basic-container>
                <div class="bbox">
                <avue-crud
                  :data="selectattrData"
                  :option="attrOption"
                  :table-loading="selectAttrOptionLoading"
                  ref="selectionAttrCrud"
                  :data="selectAttrParams.selectAttrData"
                  :option="selectAttrParams.attrOption"
                  :table-loading="selectAttrParams.selectAttrOptionLoading"
                  :ref="selectAttrParams.ref"
                  @search-change="selectAttrSearchChange"
                  @search-reset="searchAttrReset"
                  @row-click="selectionAttrRowClick"
@@ -697,25 +714,27 @@
      </el-dialog>
      <!-- ç¬¬äºŒå±‚对话框,属性码段,公式编辑框对话框组件 -->
      <formula-editor ref="formulaEditor"
      <formula-editor
        ref="formulaEditor"
        @updateFormulaContent="updateFormulaContent" 
        :thisSceneTableData="thisSceneTableData"
        :systemVariableTableData="systemVariableTableData">
        :thisSceneTableData="formulaEditorParams.thisSceneTableData"
        :visible.sync="formulaEditorParams.formulaEditorSettingBox"
        :systemVariableTableData="formulaEditorParams.systemVariableTableData">
      </formula-editor>
      <!-- ç¬¬äºŒå±‚对话框,为【父分类码段】选取值对话框 -->
      <el-dialog title="为【父分类码段】选取值"
        append-to-body
        :visible.sync="isShowParentClassifyOption"
        :visible.sync="parentClsfyParams.isShowParentClassifySettingBox"
        width="65%"
        style="height: 150vh; margin-top: -13vh;"
        destroy-on-close>
        <avue-crud
          :page.sync="parentClassifyDataPage"
          ref="crudParentClassify"
          :option="parentClassifyParentOption"
          :table-loading="classifyDialogLoading"
          :data="parentClassifyData"
          :page.sync="parentClsfyParams.parentClassifyDataPage"
          :ref="parentClsfyParams.ref"
          :option="parentClsfyParams.parentClassifyParentOption"
          :table-loading="parentClsfyParams.classifyDialogLoading"
          :data="parentClsfyParams.parentClassifyData"
          @refresh-change="refreshParentClassifyDataChange"
          @search-change="parentClassifySearchChange"
          @search-reset="parentClassifySearchReset"
@@ -727,35 +746,16 @@
        </avue-crud>
        <div slot="footer" class="dialog-footer">
          <el-button type="primary" @click="saveSelectedParentClassify">保 å­˜</el-button>
          <el-button @click="isShowParentClassifyOption = false">取 æ¶ˆ</el-button>
          <el-button @click="parentClsfyParams.isShowParentClassifySettingBox = false">取 æ¶ˆ</el-button>
        </div>
      </el-dialog>
      <!-- ç¬¬äºŒå±‚对话框,为【参照引用的业务类型】选取值弹对话框 -->
      <el-dialog title="为【参照引用的业务类型】选取值"
        append-to-body
        :visible.sync="isShowSelectReferBtmOption"
        width="65%"
        style="height: 150vh; margin-top: -13vh;">
        <avue-crud
          :page.sync="referBtmDataPage"
          ref="crudReferBtm"
          :option="referBtmOption"
          :table-loading="referBtmDialogLoading"
          :data="referBtmData"
          @refresh-change="referBtmDataChange"
          @search-change="referBtmSearchChange"
          @search-reset="referBtmSearchReset"
          @selection-change="referBtmSelectionChange"
          @current-change="referBtmCurrentChange"
          @size-change="referBtmSizeChange"
          @row-click="referBtmRowClick">
        </avue-crud>
        <div slot="footer" class="dialog-footer">
          <el-button type="primary" @click="saveSelectedreferBtm">保 å­˜</el-button>
          <el-button @click="isShowSelectReferBtmOption = false">取 æ¶ˆ</el-button>
        </div>
      </el-dialog>
      <!-- ç¬¬äºŒå±‚对话框,为【参照引用的业务类型】选取值对话框 -->
      <refer-btm-type-crud-dialog
        :visible.sync="referBtmDialogParams.selectReferBtmSettingBox"
        :ref="referBtmDialogParams.ref"
        @echoReferBtmType="echoReferBtmType">
      </refer-btm-type-crud-dialog>
      <!-- ç¬¬äºŒå±‚对话框,自定义参照配置Form组件 -->
      <refer-config-form-dialog
@@ -793,7 +793,7 @@
  import optionBasic from "@/const/code/codebasic";
  import cloneOption from "@/const/code/cloneOption";
  import cloneBasicOption from "@/const/code/cloneBasicDialogOption";
  import cloneCodeRuleOption from "@/const/code/cloneCodeRuleDialogOption.js";
  import cloneCodeRuleOption from "@/const/code/cloneCodeRuleDialogOption";
  import optionRule from "@/const/code/mdmrule";
  import attrOption from "@/const/code/selectAttrOptionDialog";
  import treeOption from "@/const/code/classifyTreeOptionDialog";
@@ -803,9 +803,14 @@
  import fixedValueOption from "@/const/code/fixedValueMgrDialog";
  import {mapGetters} from "vuex";
  import func from "@/util/func";
  import {MasterTable} from "@/api/GetItem";
import referBtmTypeCrudDialog from '../../components/code-dialog-page/referBtmTypeCrudDialog.vue';
  export default {
  components: { referBtmTypeCrudDialog },
      data() {
        return {
          value:"1",
          ruleForm: {},
          query: {},
          loading: true,
@@ -916,103 +921,107 @@
          treeOption: treeOption,
          currentSelectTreeData: '', //当前选中的树节点
          /* ä¸ºå±žæ€§é€‰å€¼å³ä¾§è¡¨æ ¼ç›¸å…³æ•°æ® */
          attrOption: attrOption,
          selectattrData: [],
          selectAttrOptionLoading: false,
          selectionChangeAttrList: [],
          // å±žæ€§ç æ®µï¼Œå…¬å¼ç¼–辑框组件的本场景显示变量、与系统变量
          thisSceneTableData: [
            {
                formula: "${}",
                desc: "",
            }
          ],
          systemVariableTableData: [
            {
                formula: "#CURRENTUSER.OID#",
                desc: "当前用户的主键",
            },
            {
                formula: "#CURRENTUSER.ID#",
                desc: "当前用户的账户",
            },
            {
                formula: "#CURRENTTIME#",
                desc: "当前时间",
            },
            {
                formula: "#CURRENTDATE#",
                desc: "当前日期",
            },
            {
                formula: "#CURRENTDATETIME#",
                desc: "当前日期时间",
            },
            {
                formula: "#CURRENTUSER_NAME#",
                desc: "当前用户的姓名",
            },
            {
                formula: "#CURRENTUSER.SECRETGRADE#",
                desc: "当前用户密级",
            },
            {
                formula: "#CURRENTUSER.IPSECRET#",
                desc: "当前用户的IP密级",
            },
            {
                formula: "#CURRENTUSER.BUSINESSUNIT#",
                desc: "当前用户所属业务单元",
            },
            {
                formula: "#CURRENTUSER.BUSINESSUNITNAME#",
                desc: "当前用户所属业务单元名称",
            },
            {
                formula: "#CURRENTUSER.GROUPOID#",
                desc: "当前用户的部门主键",
            },
            {
                formula: "#CURRENTUSER.GROUPNAME#",
                desc: "当前用户所属部门名称",
            },
            {
                formula: "#CURRENTUSER.EMAIL#",
                desc: "当前用户邮件地址",
            },
            {
                formula: "#CURRENTUSER.ROLENAME#",
                desc: "当前用户所属角色名称",
            },
          ],
          /* çˆ¶åˆ†ç±»ç æ®µå¯¹è¯æ¡† */
          isShowParentClassifyOption: false, //父分类码段对话框显示控制
          classifyDialogLoading: true, //表格数据加载提示
          parentClassifyParentOption: parentClassifyParentOption,  //表格配置
          parentClassifyData: [], //表格数据
          //分页参数配置
          parentClassifyDataPage: {
            pageSize: 10,
            currentPage: 1,
            total: 0
          selectAttrParams: {
            ref: "selectionAttrCrud",
            attrOption: attrOption,
            selectAttrData: [],
            selectAttrOptionLoading: false,
            selectionChangeAttrList: [],
            selectAttrQeury: {},
          },
          parentClassifyQuery: {}, //查询条件
          parentClassifySelectionList: [], //当前选中行
          // å±žæ€§ç æ®µï¼Œå…¬å¼ç¼–辑框组件的本场景显示变量、与系统变量
          formulaEditorParams: {
            thisSceneTableData: [
              {
                  formula: "${}",
                  desc: "",
              }
            ],
            systemVariableTableData: [
              {
                  formula: "#CURRENTUSER.OID#",
                  desc: "当前用户的主键",
              },
              {
                  formula: "#CURRENTUSER.ID#",
                  desc: "当前用户的账户",
              },
              {
                  formula: "#CURRENTTIME#",
                  desc: "当前时间",
              },
              {
                  formula: "#CURRENTDATE#",
                  desc: "当前日期",
              },
              {
                  formula: "#CURRENTDATETIME#",
                  desc: "当前日期时间",
              },
              {
                  formula: "#CURRENTUSER_NAME#",
                  desc: "当前用户的姓名",
              },
              {
                  formula: "#CURRENTUSER.SECRETGRADE#",
                  desc: "当前用户密级",
              },
              {
                  formula: "#CURRENTUSER.IPSECRET#",
                  desc: "当前用户的IP密级",
              },
              {
                  formula: "#CURRENTUSER.BUSINESSUNIT#",
                  desc: "当前用户所属业务单元",
              },
              {
                  formula: "#CURRENTUSER.BUSINESSUNITNAME#",
                  desc: "当前用户所属业务单元名称",
              },
              {
                  formula: "#CURRENTUSER.GROUPOID#",
                  desc: "当前用户的部门主键",
              },
              {
                  formula: "#CURRENTUSER.GROUPNAME#",
                  desc: "当前用户所属部门名称",
              },
              {
                  formula: "#CURRENTUSER.EMAIL#",
                  desc: "当前用户邮件地址",
              },
              {
                  formula: "#CURRENTUSER.ROLENAME#",
                  desc: "当前用户所属角色名称",
              },
            ],
            formulaEditorSettingBox: false,
          },
          /* çˆ¶åˆ†ç±»ç æ®µå¯¹è¯æ¡† */
          parentClsfyParams: {
            ref: 'crudParentClassify',
            isShowParentClassifySettingBox: false, //父分类码段对话框显示控制
            classifyDialogLoading: true, //表格数据加载提示
            parentClassifyParentOption: parentClassifyParentOption,  //表格配置
            parentClassifyData: [], //表格数据
            //分页参数配置
            parentClassifyDataPage: {
              pageSize: 10,
              currentPage: 1,
              total: 0
            },
            parentClassifyQuery: {}, //查询条件
            parentClassifySelectionList: [], //当前选中行
          },
          
          /** å‚照引用的业务类型对话框相关数据 */
          isShowSelectReferBtmOption: false,   //对话框显示控制
          referBtmDialogLoading: true,   //表格数据加载提示
          referBtmDataPage: {
            pageSize: 10,
            currentPage: 1,
            total: 0
          referBtmDialogParams: {
            ref: 'crudReferBtm',
            selectReferBtmSettingBox: false,
          },
          referBtmOption: referBtmOption, //表格配置
          referBtmData: [], //表格数据
          referBtmQuery: {}, //查询条件
          referBtmSelectionList: [], //当前选中行
          /** åŸºç¡€ç æ®µæ–°å¢žè¡¨å• */
          form: {
@@ -1027,79 +1036,85 @@
            componentCodeFlag: false, //是否参与编码
            pkCodeRule: '', //所属编码规则
          },
          // formRules: {
          //   id: [
          //     { required: true, message: '请输入码段编号', trigger: 'blur' },
          //   ],
          //   name: [
          //     { required: true, message: '请输入码段名称', trigger: 'blur' },
          //   ],
          //   secType: [
          //     { required: true, message: '请选中码段类型', trigger: 'change' },
          //   ],
          //   codeSecLengthType: [
          //     { required: true, message: '请选择码段长度类型', trigger: 'change' },
          //   ],
          //   codeSecLength: [
          //     { required: true, message: '请输入码段的长度', trigger: ['blur', 'change']},
          //     { type: 'number', message: '码段的长度必须为数字值',trigger: ['blur', 'change']}
          //   ],
          //   referAttributeName: [
          //     { required: true, message: '请选择属性', trigger: 'change' },
          //   ],
          //   serialStart: [
          //     { type: 'number', message: '流水号的起始值必须为数字值',trigger: ['blur', 'change']}
          //   ],
          //   serialStep: [
          //     { type: 'number', message: '流水的步长必须为数字值',trigger: ['blur', 'change']}
          //   ],
          //   codeFillType: [
          //     { required: true, message: '请选择编码补位方式', trigger: ['blur', 'change']},
          //   ],
          //   // è®¾ç½®è¡¥ä½æ—¶çš„字符,需要自定义来做判断
          //   codeFillSeparatorSelect: [
          //     { validator: validateCodeFill, trigger: ['blur', 'change'] },
          //   ],
          //   codeFillLength: [
          //     { required: true, message: '请输入填充长度', trigger: ['blur', 'change'] },
          //     { type: 'number', message: '填充长度必须为数字值',trigger: ['blur', 'change']}
          //   ],
          //   codeFillLimit: [
          //     { required: true, message: '请输入流水上限', trigger: ['blur', 'change'] },
          //     { type: 'number', message: '流水上限必须为数字值',trigger: ['blur', 'change']}
          //   ],
          //   codeLevelType: [
          //     { required: true, message: '请选择层级类型', trigger: 'change' },
          //   ],
          //   codeLevelValue: [
          //     { required: false, type: 'number', message: '层级的值必须为数字值', trigger: 'change'}
          //   ],
          //   valueCutType: [
          //     { required: true, message: '请选择字符截取类型', trigger: 'change' },
          //   ],
          //   referBtmId: [
          //     { required: true, message: '请选择参照应用的业务类型', trigger: 'change' },
          //   ],
          //   referConfig: [
          //     { required: true, message: '请选择参照配置', trigger: 'change' },
          //   ],
          //   codeDateFormatStr: [
          //     { required: true, message: '请输入日期格式', trigger: ['blur', 'change'] },
          //   ],
          // },
          //枚举和可输可选查询
          sectypeList:[],    //码段类型
          codeSecLengthType:[],  //码段长度类型
          codeFillType:[],   //编码补位方式
          codeFillSeparator:[], //补位时的字符,可输可选内容
          codeLevelType:[],     //层级类型
          codeCutType:[],       //字符截取类型
          codeGetValueType:[],  //取值类型
          enumParam: {
            secTypeList:[],    //码段类型
            codeSecLengthType:[],  //码段长度类型
            codeFillType:[],   //编码补位方式
            codeFillSeparator:[], //补位时的字符,可输可选内容
            codeLevelType:[],     //层级类型
            codeCutType:[],       //字符截取类型
            codeGetValueType:[],  //取值类型
          },
          //表单元素标签宽度
          leftFormLabelWidth: '110px',
          rightFormLabelWidth: '150px',
          // é«˜çº§æŸ¥è¯¢å¯¹è¯æ¡†ç›¸å…³å‚æ•°
          advancedQueryParam: {
            advancedQuerySettingBox: false,
            searchForm: {
              name: 'advanced',
            },
            options: {
              labelWidth: '110px',
              // æŸ¥è¯¢å­—段
              searchfeildName: [
                    {
                      label: '编号',
                      value: 'id',
                    },
                    {
                      label: '名称',
                      value: 'name',
                    },
                    {
                      label: '状态',
                      value: 'status',
                    },
              ],
              // æŸ¥è¯¢æ¡ä»¶ ç­‰äºŽã€åŒ…含、不等于、介于……
              searchCondition: [
                {
                  label: '等于',
                  value: '=',
                },
                {
                  label: '包含',
                  value: 'like',
                },
                {
                  label: '大于等于',
                  value: '>=',
                },
                {
                  label: '小于等于',
                  value: '<=',
                },
                {
                  label: '不等于',
                  value: '!=',
                },
                {
                  label: '介于',
                  value: 'between',
                },
              ],
              column: [
                {
                  type: 'text',
                },
                {
                },
              ],
            },
          },
        };
      },
@@ -1114,13 +1129,20 @@
          };
        },
      },
      created() {
          MasterTable({
            codeClassifyOid: "D9CF223F-317D-71EB-BD11-433A94CAD9F3",
            functionId: 5,
          }).then(res=>{
            console.log(res.data.tableDefineVO.seniorQueryColumns);
          })
      },
      methods: {
        /* å…¬å¼ç¼–辑框内容改变,子组件编辑完公式之后内容回显时调用 */
        updateFormulaContent(content){
          this.form.getValueClass = content;
        },
        /* å¼•用码段参照配置,子组件填完参照配置之后内容回显时调用 */
        echoReferConfig(content){
          // console.log(content.referTypeName);
@@ -1130,137 +1152,72 @@
          let submitFormJson = JSON.stringify(content);
          this.form.referConfig = submitFormJson;
        },
        /** å¼•用码段为【参照引用的业务类型】选取值之后的内容回显时调用 */
        echoReferBtmType(content){
            // å®žçŽ°å›žæ˜¾
            this.form.referBtmId = content.id;
            this.form.referBtmName = content.name;
        },
        
        /** ä¸ºå‚照引用的业务类型选取值,第二层嵌套对话框,及其相关方法  */
        // è¡¨æ ¼æ•°æ®åˆ·æ–°æŒ‰é’®
        referBtmDataChange(){
          this.referBtmOnLoad(this.referBtmDataPage, this.referBtmQuery);
        },
        saveSelectedreferBtm(){
          if(this.referBtmSelectionList.length != 1){
            this.$message.warning("只能选择一条数据!");
            return false;
          }
          //调用子组件并传递当前选中的参数值,实现回显
          this.form.referBtmId = this.referBtmSelectionList[0].id;
          this.form.referBtmName = this.referBtmSelectionList[0].name;
          //清空当前选中的行
          this.referBtmSelectionClear();
          this.isShowSelectReferBtmOption = false;
        },
        referBtmSearchReset() {
          this.referBtmQuery = {};
          this.referBtmOnLoad(this.referBtmDataPage);
        },
        referBtmSearchChange(params, done) {
          this.referBtmQuery = params;
          this.referBtmDataPage.currentPage = 1;
          this.referBtmOnLoad(this.page, params);
          done();
        },
         // å•击选中表格行时触发
        referBtmRowClick(row){
          this.$refs.crudReferBtm.toggleSelection();
          this.referBtmSelectionList = row;
          this.$refs.crudReferBtm.setCurrentRow(row);
          this.$refs.crudReferBtm.toggleRowSelection(row); //选中当前行
        },
        referBtmSelectionChange(list) {
          this.referBtmSelectionList = list;
          this.$refs.crudReferBtm.setCurrentRow(this.referBtmSelectionList[list.length-1]);
        },
        referBtmSelectionClear() {
          this.referBtmSelectionList = [];
          this.$refs.crudReferBtm.toggleSelection();
        },
        referBtmCurrentChange(currentPage){
          this.referBtmDataPage.currentPage = currentPage;
        },
        referBtmSizeChange(pageSize){
          this.referBtmDataPage.pageSize = pageSize;
        },
        refreshReferBtmDataChange() {
          this.referBtmOnLoad(this.referBtmDataPage, this.referBtmQuery);
        },
        //加载中参照引用的业务类型的数据
        referBtmOnLoad(page, params = {}) {
          //表格行错位问题
          this.$nextTick(() => {
            this.$refs.crudReferBtm.doLayout();
          })
          this.referBtmDialogLoading = true;
          let oid = this.selectionList.length==0 ?  this.form.pkCodeRule:this.selectionList[0].oid;
          Object.assign(params,{pkCodeRule:oid})
          //接口还未提供,待更改
          refDataGridClassifySec(page.currentPage, page.pageSize, Object.assign(params, this.parentClassifyQuery)).then(res => {
            //console.log(res.data);
            const data = res.data.data;
            this.referBtmDataPage.total = data.total;
            this.referBtmData = data.records;
            this.referBtmDialogLoading = false;
            this.referBtmSelectionClear();
          });
        },
        /** çˆ¶åˆ†ç±»é€‰æ‹©å¯¹è¯æ¡†ï¼Œç¬¬äºŒå±‚嵌套对话框,及其相关方法 */ 
        // ä¿å­˜å½“前父分类码段的选中行,并进行回显
        saveSelectedParentClassify(){
          //console.log(this.parentClassifySelectionList.length);
          if(this.parentClassifySelectionList.length != 1){
          //console.log(this.parentClsfyParams.parentClassifySelectionList.length);
          if(this.parentClsfyParams.parentClassifySelectionList.length != 1){
            this.$message.warning("请选择一条数据!");
            return false;
          }
          //参数值,实现回显
          this.form.parentClassifySecOid = this.parentClassifySelectionList[0].oid;
          this.form.parentClassifySecText = this.parentClassifySelectionList[0].name;
          this.form.parentClassifySecOid = this.parentClsfyParams.parentClassifySelectionList[0].oid;
          this.form.parentClassifySecText = this.parentClsfyParams.parentClassifySelectionList[0].name;
          //清空当前选中的行
          this.parentClassifySelectionClear();
          this.isShowParentClassifyOption = false;
          this.parentClsfyParams.isShowParentClassifySettingBox = false;
        },
        parentClassifySearchReset() {
          this.parentClassifyQuery = {};
          this.parentClassifyOnLoad(this.parentClassifyDataPage);
          this.parentClsfyParams.parentClassifyQuery = {};
          this.parentClassifyOnLoad(this.parentClsfyParams.parentClassifyDataPage);
        },
        parentClassifySearchChange(params, done) {
          this.parentClassifyQuery = params;
          this.parentClassifyDataPage.currentPage = 1;
          this.parentClsfyParams.parentClassifyQuery = params;
          this.parentClsfyParams.parentClassifyDataPage.currentPage = 1;
          this.parentClassifyOnLoad(this.page, params);
          done();
        },
        parentClassifyRowClick(row){
          this.$refs.crudParentClassify.toggleSelection();
          this.parentClassifySelectionList = row;
          this.$refs.crudParentClassify.setCurrentRow(row);
          this.$refs.crudParentClassify.toggleRowSelection(row); //选中当前行
          this.$refs[this.parentClsfyParams.ref].toggleSelection();
          this.parentClsfyParams.parentClassifySelectionList = row;
          this.$refs[this.parentClsfyParams.ref].setCurrentRow(row);
          this.$refs[this.parentClsfyParams.ref].toggleRowSelection(row); //选中当前行
        },
        parentClassifySelectionChange(list) {
          this.parentClassifySelectionList = list;
          this.$refs.crudParentClassify.setCurrentRow(this.parentClassifySelectionList[list.length-1]);
          this.parentClsfyParams.parentClassifySelectionList = list;
          this.$refs[this.parentClsfyParams.ref].setCurrentRow(this.parentClsfyParams.parentClassifySelectionList[list.length-1]);
        },
        parentClassifySelectionClear() {
          this.parentClassifySelectionList = [];
          this.$refs.crudParentClassify.toggleSelection();
          this.parentClsfyParams.parentClassifySelectionList = [];
          this.$refs[this.parentClsfyParams.ref].toggleSelection();
        },
        parentClassifyCurrentChange(currentPage){
          this.parentClassifyDataPage.currentPage = currentPage;
          this.parentClsfyParams.parentClassifyDataPage.currentPage = currentPage;
        },
        parentClassifySizeChange(pageSize){
          this.parentClassifyDataPage.pageSize = pageSize;
          this.parentClsfyParams.parentClassifyDataPage.pageSize = pageSize;
        },
        refreshParentClassifyDataChange() {
          this.parentClassifyOnLoad(this.parentClassifyDataPage, this.parentClassifyQuery);
          this.parentClassifyOnLoad(this.parentClsfyParams.parentClassifyDataPage, this.parentClsfyParams.parentClassifyQuery);
        },
        parentClassifyOnLoad(page, params = {}) {
          this.classifyDialogLoading = true;
          let parentClsParam = this.parentClsfyParams;
          parentClsParam.classifyDialogLoading = true;
          let oid = this.selectionList.length==0 ? this.form.pkCodeRule:this.selectionList[0].oid;
          Object.assign(params,{pkCodeRule:oid})
          refDataGridClassifySec(page.currentPage, page.pageSize, Object.assign(params, this.parentClassifyQuery)).then(res => {
          refDataGridClassifySec(page.currentPage, page.pageSize, Object.assign(params, parentClsParam.parentClassifyQuery)).then(res => {
            //console.log(res.data);
            const data = res.data.data;
            this.parentClassifyDataPage.total = data.total;
            this.parentClassifyData = data.records;
            this.classifyDialogLoading = false;
            parentClsParam.parentClassifyDataPage.total = data.total;
            parentClsParam.parentClassifyData = data.records;
            parentClsParam.classifyDialogLoading = false;
            this.parentClassifySelectionClear();
          });
        },
@@ -1273,48 +1230,62 @@
          this.loadlistClassifyLinkAttr()
        },
        // åŠ è½½åˆ†ç±»è¿žæŽ¥å±žæ€§è¡¨æ ¼æ•°æ®
        loadlistClassifyLinkAttr(condition) {
          //这儿还需要完善
          this.selectAttrOptionLoading = true;
          listClassifyLinkAttr({"page": 1,"limit": -1,'conditionMap[codeClassifyOid]':this.currentSelectTreeData.oid}).then(res=>{
            console.log(res.data.data);
            this.selectattrData = res.data.data;
            this.selectAttrOptionLoading = false;
        loadlistClassifyLinkAttr() {
          let attrParam = this.selectAttrParams;
          //console.log(this.currentSelectTreeData);
          attrParam.selectAttrOptionLoading = true;
          let param = {};
          // å¤šä¸ªconditionMap这样传参
          if(attrParam.selectAttrQeury){
              Object.keys(attrParam.selectAttrQeury).forEach(key=>{
                  param['conditionMap['+key+']'] = attrParam.selectAttrQeury[key];
              });
          }
          param['conditionMap[codeClassifyOid]'] = this.currentSelectTreeData.oid;
          param['conditionMap[btmTypeOid]'] = this.currentSelectTreeData.btmTypeOid;
          listClassifyLinkAttr(param).then(res=>{
            //console.log(res.data.data);
            attrParam.selectAttrData = res.data.data;
            attrParam.selectAttrOptionLoading = false;
            this.$nextTick(() => {
                this.$refs[attrParam.ref].doLayout()
            });
          })
        },
        // ç‚¹å‡»æœç´¢åŽè§¦å‘该事件
        selectAttrSearchChange(params, done) {
          this.query = params;
          this.selectAttrParams.selectAttrQeury = params;
          //console.log(params);  //这儿需要改
          this.loadlistClassifyLinkAttr(Object.assign(params,{'conditionMap[codeClassifyOid]':this.currentSelectTreeData.oid}));
          this.loadlistClassifyLinkAttr();
          done();
        },
        // ä¸ºå±žæ€§é€‰å€¼ç•Œé¢ï¼Œå•击表格行时触发该事件
        selectionAttrRowClick(row){
          this.$refs.selectionAttrCrud.toggleSelection();
          this.selectionChangeAttrList = row;
          this.$refs.selectionAttrCrud.setCurrentRow(row);
          this.$refs.selectionAttrCrud.toggleRowSelection(row); //选中当前行
          this.$refs[this.selectAttrParams.ref].toggleSelection();
          this.selectAttrParams.selectionChangeAttrList = row;
          this.$refs[this.selectAttrParams.ref].setCurrentRow(row);
          this.$refs[this.selectAttrParams.ref].toggleRowSelection(row); //选中当前行
        },
        // å±žæ€§å–值当前选中行发生变化时触发
        selectionChangeAttr(list){
          this.selectionChangeAttrList = list;
          this.$refs.selectionAttrCrud.setCurrentRow(this.selectionChangeAttrList[list.length-1]);
          this.selectAttrParams.selectionChangeAttrList = list;
          this.$refs[this.selectAttrParams.ref].setCurrentRow(this.selectAttrParams.selectionChangeAttrList[list.length-1]);
        },
        // é‡ç½®ä½å±žæ€§é€‰å–值表格的搜索框之后的回调
        searchAttrReset() {
          this.selectAttrParams.selectAttrQeury = {};
          this.loadlistClassifyLinkAttr()
        },
        // ä¸ºå±žæ€§é€‰å–值之后的回显
        selectedListClassifyLinkAttr(){
          if(this.selectionChangeAttrList.length != 1){
          if(this.selectAttrParams.selectionChangeAttrList.length != 1){
            this.$message.warning("请选择一条数据!");
            return false;
          }
          //调用子组件并传递当前选中的参数值,实现回显
          this.form = Object.assign({}, this.form, {
            referAttributeId:this.selectionChangeAttrList[0].id,
            referAttributeName:this.selectionChangeAttrList[0].name,
            referAttributeId:this.selectAttrParams.selectionChangeAttrList[0].id,
            referAttributeName:this.selectAttrParams.selectionChangeAttrList[0].name,
            referCodeClassifyOid: this.currentSelectTreeData.key,
            referCodeClassifyOidName: this.currentSelectTreeData.title,
          })
@@ -1377,8 +1348,16 @@
              window.console.log(error);
            });
          }else {
            if(this.codeClassifyForm.id.trim() == ''){
              this.$message.warning("码值不能为空!");
              return;
            }
            if(this.codeClassifyForm.id.trim().length > 4 ){
              this.$message.warning("码值长度不能大于4!");
              return;
            }
            this.codeClassifyForm.codeClassifySecOid = this.codefixedsecOrCodeclassifysecOid;
            console.log(this.codeClassifyForm);
            // console.log(this.codeClassifyForm);
            addSaveCodeClassifyValue(this.codeClassifyForm).then(() => {
              this.loadClassifyValueData({"oid":this.codefixedsecOrCodeclassifysecOid});
              this.clearFixedOrClassifyForm('codeclassifyvaluesec');
@@ -2052,6 +2031,12 @@
        /** ç¼–码规则相关方法 */
        // æ‰“开高级查询窗口
        openAdvancedQuery(){
          //this.$refs.advancedQuery.visible = true;
          //this.advancedQueryParam.timer = new Date().getTime()
          this.advancedQueryParam.advancedQuerySettingBox = !this.advancedQueryParam.advancedQuerySettingBox;
        },
        // æŸ¥è¯¢ä½¿ç”¨èŒƒå›´
        handleRange(){
          if(!this.tipsMessage(this.selectionList)){
@@ -2377,23 +2362,24 @@
            this.isShowSelectAttrOption = true;
          }else if(condition === 'value'){
            //打开公式编辑框,第二层嵌套对话框
            this.$refs.formulaEditor.isShowformulaEdit = true;
            //this.$refs.formulaEditor.isShowformulaEdit = true;
            this.formulaEditorParams.formulaEditorSettingBox = true;
          }else if(condition === 'parentClassifySecOid'){
            this.isShowParentClassifyOption = true;
            this.parentClsfyParams.isShowParentClassifySettingBox = true;
          }else if(condition === 'referBtmId'){
            this.isShowSelectReferBtmOption = true;
            this.refreshReferBtmDataChange();
            this.referBtmDialogParams.selectReferBtmSettingBox = true;
            // è°ƒç”¨å­ç»„件刷新表格数据
            this.$refs[this.referBtmDialogParams.ref].referBtmOnLoad();
          }else if(condition === 'referConfig'){
            if(func.notEmpty(this.form.referConfig) || func.notEmpty(this.form.referBtmName)){
              this.openReconfigInterFace(this.form);
            }else{
              this.openTipsChooseOrCust();
            }
             //this.$refs.referConfigFormDialog.onloadAttrData();
          }
        },
        // å½“前已存在编辑过的参展配置,所以直接打开参照配置界面
        // å½“前已存在编辑过的参照配置,所以直接打开参照配置界面
        openReconfigInterFace(preReferConfigForm){
          // console.log(preReferConfigForm);
          this.$refs.referConfigFormDialog.isShowReferConfigForm = true;
@@ -2458,7 +2444,7 @@
        // ç æ®µç±»åž‹æ”¹å˜æ—¶ï¼Œå¢žåŠ å¯¹åº”çš„form表单中的属性
        changeSectypeFormItems(row){     
          //console.log(row);   
          if(this.sectypeList.length==0){
          if(this.enumParam.secTypeList.length==0){
            this.loadCodeSecType();
          }
          if(row != null){
@@ -2512,7 +2498,7 @@
              codeSecLength: row!=null&&row.codeSecLength != '' ? row.codeSecLength:'', //码段的长度
              serialStart: row!=null&&row.serialStart != '' ? row.serialStart:1,  //流水号起始值
              serialStep: row!=null&&row.serialStep != '' ? row.serialStep:1,   //流水的步长
              codeFillType: row!=null&&row.codeFillType != '' ? row.codeFillType:'code_fill_right', //编码补位方式
              codeFillType: row!=null&&row.codeFillType != '' ? row.codeFillType:'code_fill_left', //编码补位方式
              codeFillSeparatorSelect: row!=null&&row.codeFillSeparator != '' ? row.codeFillSeparatorSelect:0,    //补位时的字符,选中的下拉框的下标
              codeFillSeparator: row!=null&&row.codeFillSeparator != '' ? row.codeFillSeparator:0,          //补位时的字符
              codeFillLength: row!=null&&row.codeFillLength != '' ? row.codeFillLength:'',              //填充长度
@@ -2573,38 +2559,38 @@
        //枚举和可输可选内容查询
        loadCodeSecType(){
          getDictionary({code: "codeSecType"}).then(res=>{
            this.sectypeList = res.data.data;
            this.enumParam.secTypeList = res.data.data;
          })
          this.loadCodeSecLength();
        },
        loadCodeSecLength(){
          getDictionary({code: "codeSecLength"}).then(res=>{
            this.codeSecLengthType = res.data.data;
            this.enumParam.codeSecLengthType = res.data.data;
          })
        },
        loadCodeFillType(){
          getDictionary({code: "codeFillType"}).then(res=>{
            this.codeFillType = res.data.data;
            this.enumParam.codeFillType = res.data.data;
          })
        },
        loadCodeFillSeparator(){
          getDictionary({code: "codeFillSeparator"}).then(res=>{
            this.codeFillSeparator = res.data.data;
            this.enumParam.codeFillSeparator = res.data.data;
          })
        },
        loadCodeLevelType(){
          getDictionary({code: "codeLevelType"}).then(res=>{
            this.codeLevelType = res.data.data;
            this.enumParam.codeLevelType = res.data.data;
          })
        },
        loadCodeCutType(){
          getDictionary({code: "codeCutType"}).then(res=>{
            this.codeCutType = res.data.data;
            this.enumParam.codeCutType = res.data.data;
          })
        },
        loadCodeGetValueType(){
          getDictionary({code: "codeGetValueType"}).then(res=>{
            this.codeGetValueType = res.data.data;
            this.enumParam.codeGetValueType = res.data.data;
          })
        },
        
@@ -2667,11 +2653,11 @@
  }
  .el-card__body > .treeBox {
    height: 50vh;
    height: 56vh;
  }
  .el-col-5 > .box {
    height: 55vh;
    height: 56vh;
  }
  .operator_,filter, .layui-btn{
@@ -2694,6 +2680,7 @@
  /** æ–°å¢žç æ®µ */
  .add-basicsec-total {
    width: 100%;
    padding: 20px 0 0 0;
  }
  .add-basicsec-total .el-input__inner,.add-basicsec-total .el-textarea__inner {
Source/UBCS-WEB/vue.config.js
@@ -26,10 +26,10 @@
    proxy: {
      '/api': {
        //本地服务接口地址
          // target: 'http://localhost:37000',
         target: 'http://localhost:37000',
        // target: 'http://192.168.1.63:37000',
        //target: 'http://192.168.3.7:37000',
        target: 'http://dev.vci-tech.com:37000',
        // target: 'http://dev.vci-tech.com:37000',
        //target: 'http://192.168.1.51:37000/',
        //远程演示服务地址,可用于直接启动项目
        // target: 'https://saber.bladex.vip/api',
Source/UBCS/service-start.sh
@@ -65,13 +65,15 @@
 docker build -f ./ubcs-service/ubcs-code/Dockerfile -t vci-ubcs/ubcs-code .
 docker run -d -p 36014:36014 --name ubcs-code vci-ubcs/ubcs-code:latest
 #启动omdy服务
 #启动omd服务
 docker build -f ./ubcs-service/ubcs-omd/Dockerfile -t vci-ubcs/ubcs-omd .
 docker run -d -p 36015:36015 --name ubcs-omd vci-ubcs/ubcs-omd:latest
 #启动applyjtcodeservice服务
 docker build -f ./ubcs-service/ubcs-webservice/Dockerfile -t vci-ubcs/ubcs-applyjtcodeservice .
 docker run -d -p 36016:36016 --name ubcs-applyjtcodeservice vci-ubcs/ubcs-applyjtcodeservice:latest
 #其他服务请自行添加
}
Source/UBCS/service-stop.sh
@@ -191,8 +191,18 @@
             echo $containerName" is not up!!!"
    fi
    #其他服务需要,请自行添加
    imagesName=vci-ubcs/ubcs-applyjtcodeservice
    containerName=ubcs-applyjtcodeservice
    if [[ -n $(docker ps -q -f "name=$containerName") ]];then
             echo $containerName"is up,we will stop and remove it !!!"
             docker stop $containerName
             docker rm $containerName
             docker rmi $imagesName
        else
             echo $containerName" is not up!!!"
    fi
    #其他服务需要,请自行添加
}
stop
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOsattributeDTO.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOsbtmtypeDTO.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOsbtmtypeattributeDTO.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyTemplateAttr.java
@@ -218,7 +218,7 @@
     * å±žæ€§æŽ§åˆ¶è¾“入的长度
     */
    //@Column(columnDefinition = "属性控制输入的长度",defaultValue = "254")
    private Integer controlLength = 254;
    private Integer controlLength;
    /**
     * è¡¨å•上显示的样式
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsattributeEntity.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsbtmtypeEntity.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeOsbtmtypeattributeEntity.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/ICodeOsbtmtypeClient.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeOsattributeVO.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeOsbtmtypeVO.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeOsbtmtypeattributeVO.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTypeAttributeVO.java
@@ -63,6 +63,11 @@
     */
    private String attrDataType;
    /**
     * æ•°æ®ç±»åž‹æ˜¾ç¤ºå¯¹è±¡
     */
    private String  attrDataTypeText;
    /**
     * æ˜¯å¦å¯ä»¥ä¸ºç©º
     */
@@ -72,7 +77,6 @@
     * é»˜è®¤å€¼
     */
    private String defaultValue;
    /**
     * å°æ•°ç²¾åº¦ä½æ•°
@@ -120,7 +124,7 @@
    private boolean enumFlag;
    /**
z     * åŒ…含枚举的值
     * åŒ…含枚举的值
     */
    private Map<String,String> enumItemMap;
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java
@@ -26,8 +26,6 @@
    private String id;
    private String name;
    //集团码
    //private String groupcode;
    private String description;
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/GroupBaseModel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.vci.ubcs.starter.revision.model;
/**
 * åŒ…含集团码的基础model
 * @author ludc
 * @date 2023/6/2 19:19
 */
public class GroupBaseModel extends BaseModel{
    //集团码
    private String groupCode;
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyController.java
@@ -22,11 +22,10 @@
import com.vci.ubcs.code.entity.CodeClassify;
import com.vci.ubcs.code.mapper.CodeClassifyMapper;
import com.vci.ubcs.code.service.ICodeClassifyService;
import com.vci.ubcs.code.vo.CodeOsattributeVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
import com.vci.ubcs.code.wrapper.CodeClassifyWrapper;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.starter.revision.model.TreeQueryObject;
import com.vci.ubcs.starter.util.BladeTreeQueryObject;
import com.vci.ubcs.starter.util.LocalFileUtil;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
@@ -47,7 +46,6 @@
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.File;
@@ -309,7 +307,7 @@
     * @return å±žæ€§çš„信息,包含默认的属性
     */
    @GetMapping("/listClassifyLinkAttr")
    public DataGrid<CodeOsattributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject){
    public DataGrid<BtmTypeAttributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject){
        return codeClassifyService.listClassifyLinkAttr(baseQueryObject);
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyTemplateAttrController.java
@@ -21,9 +21,9 @@
import com.vci.ubcs.code.dto.CodeClassifyTemplateAttrDTO;
import com.vci.ubcs.code.entity.CodeClassifyTemplateAttr;
import com.vci.ubcs.code.service.ICodeClassifyTemplateAttrService;
import com.vci.ubcs.code.vo.CodeOsbtmtypeattributeVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
import com.vci.ubcs.code.wrapper.CodeClassifyTemplateAttrWrapper;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
@@ -232,7 +232,7 @@
     * @return
     */
    @GetMapping("/codeClassifyTemplateAttrByBtm")
    public DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject){
    public DataGrid<BtmTypeAttributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject){
        return CodeClstempattrService.codeClassifyTemplateAttrByBtm(baseQueryObject);
    }
@@ -242,7 +242,7 @@
     * @return
     */
    @GetMapping("/codeClassifyTemplateAttrByBtmHave")
    public DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject){
    public DataGrid<BtmTypeAttributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject){
        return CodeClstempattrService.codeClassifyTemplateAttrByBtmHave(baseQueryObject);
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java
@@ -72,7 +72,7 @@
    * @return æ‰§è¡Œç»“æžœ success为true为可以删除,false表示有数据引用,obj为true表示有下级
    */
    @PostMapping( "/checkIsCanDelete")
    public R checkIsCanDelete( CodeClassifyValueDTO codeClassifyValueDTO)  {
    public R checkIsCanDelete(CodeClassifyValueDTO codeClassifyValueDTO)  {
        return codeClassifyValueService.checkIsCanDelete(codeClassifyValueDTO);
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeOsattributeController.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeOsbtmtypeController.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeOsbtmtypeattributeController.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeReferBtmTypeController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.vci.ubcs.code.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
import com.vci.ubcs.code.service.ICodeReferBtmTypeService;
import com.vci.ubcs.omd.feign.IBtmTypeClient;
import com.vci.ubcs.omd.vo.AttributeVO;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springblade.core.launch.constant.AppConstant;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Map;
/**
 * @author ludc
 * @date 2023/6/1 18:36
 */
@RestController
@RequestMapping("/referBtmTypeController")
@Api(value = "编码规则管理-引用码段&&属性码段-业务类型查询", tags = "编码规则管理-引用码段-业务类型查询")
public class CodeReferBtmTypeController {
    @Resource
    private ICodeReferBtmTypeService codeReferBtmTypeService;
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹åˆ—è¡¨
     * @param baseQueryObject æŸ¥è¯¢æ¡ä»¶
     * @return åˆ—表的内容
     */
    @GetMapping("/referDataGrid")
    @ApiOperationSupport(order = 1)
    @ApiOperation(value = "获取业务类型列表", notes = "baseQueryObject")
    public R<Page<BtmTypeVO>> referDataGrid(BaseQueryObject baseQueryObject){
        return R.data(codeReferBtmTypeService.referDataGrid(baseQueryObject));
    }
    @GetMapping(value = "/gridAttributesByBtmId")
    @ApiOperationSupport(order = 1)
    @ApiOperation(value = "获取业务类型包含的属性,不分页", notes = "baseQueryObject")
    public R<Page<AttributeVO>> gridAttributesByBtmId(BaseQueryObject baseQueryObject){
        return R.data(codeReferBtmTypeService.gridAttributesByBtmId(baseQueryObject));
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodeOsbtmtypeClient.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeOsattributeMapper.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeOsbtmtypeMapper.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeOsbtmtypeattributeMapper.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java
@@ -5,16 +5,13 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.entity.CodeClassify;
import com.vci.ubcs.code.vo.CodeOsattributeVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.revision.model.TreeQueryObject;
import com.vci.ubcs.starter.util.BladeTreeQueryObject;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.starter.web.pagemodel.Tree;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;import com.vci.ubcs.starter.web.pagemodel.Tree;
import org.springblade.core.tool.api.R;
import java.io.File;
import java.util.Collection;
import java.util.List;
@@ -170,7 +167,7 @@
     * @param baseQueryObject æŸ¥è¯¢å¯¹è±¡ï¼Œå¿…须有codeClassifyOid,支持id和name两种查询条件
     * @return å±žæ€§çš„信息,包含默认的属性
     */
    DataGrid<CodeOsattributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject);
    DataGrid<BtmTypeAttributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject);
    /**
     * èŽ·å–å½“å‰åˆ†ç±»çš„é¡¶å±‚åˆ†ç±»
@@ -193,7 +190,6 @@
     * @return åˆ†ç±»çš„æ˜¾ç¤ºå¯¹è±¡
     */
    CodeClassifyVO getObjectByIdPath(String idPath);
    /**
     * ä¸»é¢˜åº“的树
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyTemplateAttrService.java
@@ -5,8 +5,8 @@
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.vci.ubcs.code.dto.CodeClassifyTemplateAttrDTO;
import com.vci.ubcs.code.entity.CodeClassifyTemplateAttr;
import com.vci.ubcs.code.vo.CodeOsbtmtypeattributeVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
@@ -130,14 +130,14 @@
     * @param baseQueryObject
     * @return
     */
    DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject);
    DataGrid<BtmTypeAttributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject);
    /**
     * æŸ¥è¯¢è¿™ä¸ªæ¨¡æ¿ï¼Œä¸šåŠ¡ç±»åž‹ä¸‹å·²é€‰æ‹©çš„å±žæ€§
     * @param baseQueryObject
     * @return
     */
    DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject);
    DataGrid<BtmTypeAttributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject);
    /**
     * åŒæ­¥åˆ°å…¶ä»–模板
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeOsattributeService.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeOsbtmtypeService.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeOsbtmtypeattributeService.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeReferBtmTypeService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
package com.vci.ubcs.code.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vci.ubcs.omd.vo.AttributeVO;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.starter.web.util.BeanUtil;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
 * å¯¹omd中提供的feign接口进行调用,以及处理相关逻辑
 * @author ludc
 * @date 2023/6/1 18:39
 */
public interface ICodeReferBtmTypeService {
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹åˆ—è¡¨
     * @param baseQueryObject æŸ¥è¯¢æ¡ä»¶
     * @return åˆ—表的内容
     */
    Page<BtmTypeVO> referDataGrid(BaseQueryObject baseQueryObject);
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹åŒ…å«çš„å±žæ€§ï¼Œä¸åˆ†é¡µ
     * @param baseQueryObject æŸ¥è¯¢å¯¹è±¡
     * @return å±žæ€§çš„信息
     */
    Page<AttributeVO> gridAttributesByBtmId(BaseQueryObject baseQueryObject);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
@@ -9,24 +9,20 @@
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.entity.CodeClassify;
import com.vci.ubcs.code.entity.CodeClassifyTemplate;
import com.vci.ubcs.code.entity.CodeOsbtmtypeEntity;
import com.vci.ubcs.code.entity.CodeOsbtmtypeattributeEntity;
import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
import com.vci.ubcs.code.mapper.CodeClassifyMapper;
import com.vci.ubcs.code.mapper.CodeClassifyTemplateMapper;
import com.vci.ubcs.code.mapper.CodeOsbtmtypeMapper;
import com.vci.ubcs.code.mapper.CodeOsbtmtypeattributeMapper;
import com.vci.ubcs.code.po.CodeClassifyPO;
import com.vci.ubcs.code.service.ICodeClassifyService;
import com.vci.ubcs.code.service.ICodeKeyAttrRepeatService;
import com.vci.ubcs.code.service.ICodeOsattributeService;
import com.vci.ubcs.code.service.ICodeRuleService;
import com.vci.ubcs.code.vo.CodeOsattributeVO;
import com.vci.ubcs.code.vo.CodeOsbtmtypeVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
import com.vci.ubcs.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.omd.cache.EnumCache;
import com.vci.ubcs.omd.enums.EnumEnum;
import com.vci.ubcs.omd.feign.IBtmTypeClient;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.starter.bo.WriteExcelData;
import com.vci.ubcs.starter.exception.VciBaseException;
@@ -41,6 +37,7 @@
import com.vci.ubcs.starter.util.LocalFileUtil;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.starter.web.pagemodel.PageHelper;
import com.vci.ubcs.starter.web.pagemodel.Tree;
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.LangBaseUtil;
@@ -80,19 +77,7 @@
    private ICodeRuleService codeRuleService;
    @Resource
    private CodeOsbtmtypeMapper codeOsbtmtypeMapper;
    @Resource
    private CodeOsbtmtypeattributeMapper codeOsbtmtypeattributeMapper;
    @Resource
    private IBtmTypeClient btmTypeClient;
    /**
     * å±žæ€§æœåŠ¡
     */
//    @Autowired
//    private OsAttributeServiceI attributeService;
    /**
     * æ—¥å¿—
@@ -680,7 +665,6 @@
        return excelName;
    }
    /**
     * å¯¼å…¥åˆ†ç±»
     *
@@ -745,9 +729,10 @@
        List<String> btmOids = poList.stream().filter(s -> StringUtils.isNotBlank(s.getKeyRepeatRuleId()))
            .map(CodeClassifyPO::getBtmTypeId).collect(Collectors.toList());
        Map<String, CodeOsbtmtypeEntity> btmVOMap = Optional.ofNullable(btmOids.size()==0 ? null: codeOsbtmtypeMapper.selectBatchIds(btmOids)
        ).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t,(o1,o2)->o2));
//        Map<String, CodeOsbtmtypeVO> btmVOMap = null;
        Map<String, BtmTypeVO> btmVOMap = Optional
            .ofNullable(btmOids.size()==0 ? null: btmTypeClient.selectByIdCollection(btmOids).getData())
            .orElse(new ArrayList<BtmTypeVO>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t,(o1,o2)->o2));
        //        Map<String, CodeOsbtmtypeVO> btmVOMap = null;
        Map<String/**路径**/,String/**主键**/> oidPathMap = new HashMap<>();
        //我们需要查询所有已经存在的分类,主要是路径,用来判断分类的数据
@@ -777,7 +762,7 @@
            classify.setDescription(po.getDescription());
            oidPathMap.put(po.getPath(),classify.getOid());
            if(StringUtils.isNotBlank(po.getBtmTypeId())){
                CodeOsbtmtypeVO typeVO = (CodeOsbtmtypeVO)btmVOMap.get(po.getBtmTypeId().toLowerCase(Locale.ROOT));
                BtmTypeVO typeVO = (BtmTypeVO)btmVOMap.get(po.getBtmTypeId().toLowerCase(Locale.ROOT));
                classify.setBtmTypeId(typeVO.getId());
                classify.setBtmTypeName(typeVO.getName());
            }
@@ -888,7 +873,7 @@
     * @return å±žæ€§çš„信息,包含默认的属性
     */
    @Override
    public DataGrid<CodeOsattributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject) {
    public DataGrid<BtmTypeAttributeVO> listClassifyLinkAttr(BaseQueryObject baseQueryObject) {
        if(baseQueryObject == null){
            baseQueryObject = new BaseQueryObject();
        }
@@ -896,9 +881,13 @@
            baseQueryObject.setConditionMap(new HashMap<>());
        }
        String classifyOid = baseQueryObject.getConditionMap().getOrDefault("codeClassifyOid","");
        String btmTypeOid = baseQueryObject.getConditionMap().getOrDefault("btmTypeOid","");
        String id = baseQueryObject.getConditionMap().getOrDefault("id","");
        String name = baseQueryObject.getConditionMap().getOrDefault("name","");
        if(StringUtils.isBlank(classifyOid)){
            return new DataGrid<>();
        }
        if(StringUtils.isBlank(btmTypeOid)){
            return new DataGrid<>();
        }
        CodeClassifyVO topClassifyVO = getTopClassifyVO(classifyOid);
@@ -908,19 +897,20 @@
        Map<String,Object> condition = new HashMap<>(1);
        condition.put("pkbtmtype",topClassifyVO.getBtmtypeid());
        List<CodeOsbtmtypeattributeEntity> unDefaultAttributes = codeOsbtmtypeattributeMapper.selectByMap(condition);
        BtmTypeVO data = btmTypeClient.getDetail(btmTypeOid).getData();
        List<BtmTypeAttributeVO> unDefaultAttributes = data.getAttributes();
        // List<CodeOsbtmtypeattributeEntity> unDefaultAttributes = codeOsbtmtypeattributeMapper.selectByMap(condition);
        // List<OsBtmTypeAttributeVO> unDefaultAttributes = btmService. (topClassifyVO.getBtmtypeid());
        List<CodeOsattributeVO> attributeVOS = new ArrayList<>();
        List<BtmTypeAttributeVO> attributeVOS = new ArrayList<>();
        if(!CollectionUtils.isEmpty(unDefaultAttributes)){
            unDefaultAttributes.stream().forEach(attr->{
                CodeOsattributeVO attributeVO = new CodeOsattributeVO();
                BtmTypeAttributeVO attributeVO = new BtmTypeAttributeVO();
                BeanUtils.copyProperties(attr,attributeVO);
                attributeVO.setAttributedatatype(attr.getAttrdatatype());
                attributeVO.setAttrlength(Short.valueOf(attr.getAttributelength()));
                attributeVO.setBtmtypeid(attr.getReferbtmtypeid());
                attributeVO.setBtmtypename(attr.getReferbtmtypename());
                attributeVO.setAttributedatatypetext(attr.getReferbtmtypename());
                attributeVO.setAttrDataType(attr.getAttrDataType());
                attributeVO.setAttributeLength(attr.getAttributeLength());
                attributeVO.setBtmTypeId(data.getId());
                attributeVO.setBtmname(data.getName());
                attributeVO.setAttrDataTypeText(EnumCache.getValue(EnumEnum.VCO_FIELD_TYPE,attr.getAttrDataType()));
                boolean add = true;
                if(StringUtils.isNotBlank(id) && !attributeVO.getId().contains(id.replace("*",""))){
                    add = false;
@@ -933,21 +923,7 @@
                }
            });
        }
//        if(!CollectionUtils.isEmpty(codeOsattributeService.getDefaultAttributeVOs())){
//            codeOsattributeService.getDefaultAttributeVOs().stream().forEach(attr->{
//                boolean add = true;
//                if(StringUtils.isNotBlank(id) && !attr.getId().contains(id.replace("*",""))){
//                    add = false;
//                }
//                if(StringUtils.isNotBlank(name) && !attr.getId().contains(name.replace("*",""))){
//                    add = false;
//                }
//                if(add){
//                    attributeVOS.add(attr);
//                }
//            });
//        }
        DataGrid<CodeOsattributeVO> dataGrid = new DataGrid<>();
        DataGrid<BtmTypeAttributeVO> dataGrid = new DataGrid<>();
        dataGrid.setData(attributeVOS);
        dataGrid.setTotal(attributeVOS.size());
        return dataGrid;
@@ -1033,7 +1009,7 @@
    }
    /**
     * ä¸»é¢˜åº“的树,已经联调业务类型查询
     * ä¸»é¢˜åº“的树,已联调业务类型查询feign
     *
     * @param treeQueryObject æ ‘形查询对象
     * @return ä¸»é¢˜åº“显示树
@@ -1055,8 +1031,14 @@
        if(Func.isEmpty(btmTypeVOS) || Func.isEmpty(trees)){
            return null;
        }
        List<Tree> treeList = trees.stream().filter(tree -> btmTypeVOS.stream().
            anyMatch(btmType -> Objects.equals(tree.getAttributes().get("id"), btmType.getId()))).collect(Collectors.toList());
        List<Tree> treeList = trees.stream().filter(tree -> !CollectionUtils.isEmpty(btmTypeVOS.stream().filter(btmType -> {
                    if(Objects.equals(tree.getAttributes().get("id"), btmType.getId())){
                        tree.getAttributes().put("btmTypeOid",btmType.getOid());
                        return true;
                    }
                    return false;
                }).collect(Collectors.toList())))
            .collect(Collectors.toList());
        return treeList;
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
@@ -14,12 +14,12 @@
import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum;
import com.vci.ubcs.code.mapper.CodeClassifyTemplateAttrMapper;
import com.vci.ubcs.code.mapper.CodeClassifyTemplateMapper;
import com.vci.ubcs.code.mapper.CodeOsbtmtypeattributeMapper;
import com.vci.ubcs.code.service.ICodeClassifyTemplateAttrService;
import com.vci.ubcs.code.service.ICodeTempphaseService;
import com.vci.ubcs.code.vo.CodeOsbtmtypeattributeVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
import com.vci.ubcs.code.wrapper.CodeClassifyTemplateAttrWrapper;
import com.vci.ubcs.omd.feign.IAttributeClient;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
@@ -71,18 +71,25 @@
    @Resource
    IDictBizClient iDictBizClient;
    @Resource
    CodeClassifyTemplateMapper codeClassifyTemplateMapper;
    @Resource
    CodeOsbtmtypeattributeMapper codeOsbtmtypeattributeMapper;
    @Resource
    @Lazy
    ICodeTempphaseService codeTempphaseService;
    /**
     * å¯¹è±¡çš„æ“ä½œ
     */
    @Autowired(required = false)
    private RevisionModelUtil revisionModelUtil;
    /**
     * å±žæ€§æœåŠ¡å¯¹è±¡
     */
    @Resource
    private IAttributeClient attributeClient;
    /**
     * æŸ¥è¯¢æ‰€æœ‰çš„主题库分类的模板属性
@@ -511,6 +518,7 @@
        }
        return isKV;
    }
    public boolean checkKVObj(String kvString){
        boolean isKV = true;
        try {
@@ -709,11 +717,11 @@
     * @return
     */
    @Override
    public DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject){
    public DataGrid<BtmTypeAttributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject){
        if(baseQueryObject.getConditionMap() == null){
            baseQueryObject.setConditionMap(new HashMap<>());
        }
        DataGrid<CodeOsbtmtypeattributeVO> dataGrid=new DataGrid<CodeOsbtmtypeattributeVO>();
        DataGrid<BtmTypeAttributeVO> dataGrid=new DataGrid<BtmTypeAttributeVO>();
        //模板oid
        String templateAttrOid = baseQueryObject.getConditionMap().get("oid");
        String name = baseQueryObject.getConditionMap().getOrDefault("name","");
@@ -730,9 +738,10 @@
        CodeClassifyTemplate codeClassifyTemplateDO = codeClassifyTemplateMapper.selectById(templateAttrOid);
        //这个业务类型下的所有属性
        List<CodeOsbtmtypeattributeVO> boAttrs = (List<CodeOsbtmtypeattributeVO>) codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());// this.btmService.listAttributeByBtmId(codeClassifyTemplateDO.getBtmTypeId());
//        codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());
//        BeanUtils.copyProperties(codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId()),boAttrs);
        // å¾…完善
        List<BtmTypeAttributeVO> boAttrs = null;  //(List<BtmTypeAttributeVO>)attributeClient.selectById(codeClassifyTemplateDO.getBtmTypeId());// this.btmService.listAttributeByBtmId(codeClassifyTemplateDO.getBtmTypeId());
        // codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());
        // BeanUtils.copyProperties(codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId()),boAttrs);
        //把默认的属性也添加到boAttrs
        if(boAttrs == null){
            boAttrs = new ArrayList<>();
@@ -771,9 +780,9 @@
        }
        //过滤掉已经存在的属性
        List<CodeOsbtmtypeattributeVO> boAttrss = new ArrayList<CodeOsbtmtypeattributeVO>();
        List<BtmTypeAttributeVO> boAttrss = new ArrayList<BtmTypeAttributeVO>();
        for (CodeOsbtmtypeattributeVO osBtmTypeAttributeVO:boAttrs){
        for (BtmTypeAttributeVO osBtmTypeAttributeVO:boAttrs){
            if(!btmOids.contains(osBtmTypeAttributeVO.getId())){
                //看看是不是有模糊查询
                boolean inSearch = true;
@@ -799,8 +808,8 @@
     * @return
     */
    @Override
    public DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject){
        DataGrid<CodeOsbtmtypeattributeVO> dataGrid=new DataGrid<CodeOsbtmtypeattributeVO>();
    public DataGrid<BtmTypeAttributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject){
        DataGrid<BtmTypeAttributeVO> dataGrid=new DataGrid<BtmTypeAttributeVO>();
        //模板oid
        String templateAttrOid = baseQueryObject.getConditionMap().get("oid");
@@ -815,7 +824,8 @@
        CodeClassifyTemplate codeClassifyTemplateDO = codeClassifyTemplateMapper.selectById(templateAttrOid);
        //这个业务类型下的所有属性
        List<CodeOsbtmtypeattributeVO> boAttrs = (List<CodeOsbtmtypeattributeVO>) codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());//this.btmService.listAttributeByBtmIdHasDefault(codeClassifyTemplateDO.getBtmTypeId());
        // å¾…完善
        List<BtmTypeAttributeVO> boAttrs =  null; // (List<BtmTypeAttributeVO>) attributeClient.selectById(codeClassifyTemplateDO.getBtmTypeId());//this.btmService.listAttributeByBtmIdHasDefault(codeClassifyTemplateDO.getBtmTypeId());
//        codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());
//        BeanUtils.copyProperties(codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId()),boAttrs);
        //这个模板下已经有的属性
@@ -839,9 +849,9 @@
        }
        //过滤掉除了自身的别的属性
        List<CodeOsbtmtypeattributeVO> boAttrss = new ArrayList<CodeOsbtmtypeattributeVO>();
        List<BtmTypeAttributeVO> boAttrss = new ArrayList<BtmTypeAttributeVO>();
        for (CodeOsbtmtypeattributeVO osBtmTypeAttributeVO:boAttrs){
        for (BtmTypeAttributeVO osBtmTypeAttributeVO:boAttrs){
            if(btmOids.contains(osBtmTypeAttributeVO.getId())){
                boAttrss.add(osBtmTypeAttributeVO);
            }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeOsattributeServiceImpl.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeOsbtmtypeServiceImpl.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeOsbtmtypeattributeServiceImpl.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeReferBtmTypeServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,116 @@
package com.vci.ubcs.code.service.impl;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vci.ubcs.code.service.ICodeReferBtmTypeService;
import com.vci.ubcs.omd.feign.IAttributeClient;
import com.vci.ubcs.omd.feign.IBtmTypeClient;
import com.vci.ubcs.omd.vo.AttributeVO;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.starter.web.util.BeanUtil;
import org.springblade.core.launch.constant.AppConstant;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.tool.api.R;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.rmi.ServerException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * å¯¹omd中提供的feign接口进行调用,以及处理相关逻辑
 * @author ludc
 * @date 2023/6/1 18:39
 */
@Service
public class CodeReferBtmTypeServiceImpl implements ICodeReferBtmTypeService {
    /**
     * ä¸šåŠ¡ç±»åž‹æœåŠ¡
     */
    @Resource
    private IBtmTypeClient btmTypeClient;
    /**
     * ä¸šåŠ¡ç±»åž‹å±žæ€§æœåŠ¡
     */
    @Resource
    private IAttributeClient attributeClient;
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹åˆ—è¡¨
     * @param baseQueryObject æŸ¥è¯¢æ¡ä»¶
     * @return åˆ—表的内容
     */
    @Override
    public Page<BtmTypeVO> referDataGrid(BaseQueryObject baseQueryObject) throws ServiceException {
        Map<String, String> conditionMap = baseQueryObject.getConditionMap();
        conditionMap.put("domain", AppConstant.APPLICATION_NAME_CODE);
        baseQueryObject.setConditionMap(conditionMap);
        Page<BtmTypeVO> refPage = null;
        try {
            refPage = btmTypeClient.getRefPage(baseQueryObject).getData();
        }catch (Exception e){
            throw new ServiceException("业务类型feign接口调用错误");
        }
        return refPage;
    }
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹åŒ…å«çš„å±žæ€§ï¼Œä¸åˆ†é¡µ
     * @param baseQueryObject æŸ¥è¯¢å¯¹è±¡
     * @return å±žæ€§çš„信息
     */
    @Override
    public Page<AttributeVO> gridAttributesByBtmId(BaseQueryObject baseQueryObject) {
        String btmTypeId = baseQueryObject.getConditionMap().containsKey("btmTypeId")?baseQueryObject.getConditionMap().get("btmTypeId"):"";
        if(StringUtils.isBlank(btmTypeId)){
            return new Page<AttributeVO>();
        }
        String hasDefaultAttr = baseQueryObject.getConditionMap().getOrDefault("hasDefaultAttr","false");
        String attrId = baseQueryObject.getConditionMap().containsKey("name")?baseQueryObject.getConditionMap().get("name").replace("*",""):"";
        String attrName = baseQueryObject.getConditionMap().containsKey("label") ? baseQueryObject.getConditionMap().get("label").replace("*","") : "";
        // TODO æ ¹æ®ä¸šåŠ¡ç±»åž‹id获取关联的属性
        List<BtmTypeAttributeVO> boAttrs = null; //attributeClient.get();
        if(boAttrs == null){
            boAttrs = new ArrayList<>();
        }
        if(BooleanEnum.TRUE.getValue().equalsIgnoreCase(hasDefaultAttr)){
            // TODO èŽ·å–é»˜è®¤çš„å±žæ€§
            List<BtmTypeAttributeVO> finalBoAttrs = boAttrs;
            List<BtmTypeAttributeVO> btmTypeAttributeVOS = new ArrayList<>(); //attributeClient.getDefaultAttributeVOs();
            btmTypeAttributeVOS.stream().forEach(attr->{
                BtmTypeAttributeVO attributeVO = new BtmTypeAttributeVO();
                BeanUtil.convert(attr,attributeVO);
                attributeVO.setAttributeLength(attr.getAttributeLength());
                attributeVO.setAttrDataType(attr.getAttrDataType());
                attributeVO.setReferBtmTypeId(attr.getBtmTypeId());
                attributeVO.setReferBtmTypeName(attr.getReferBtmTypeName());
                finalBoAttrs.add(attributeVO);
            });
            boAttrs = finalBoAttrs;
        }
        List<BtmTypeAttributeVO> attrList = boAttrs.stream().filter(s->{
            boolean usedFlag = true;
            if(StringUtils.isNotBlank(attrId) && !s.getId().contains(attrId.replace("*",""))){
                usedFlag = false;
            }
            if(StringUtils.isNotBlank(attrName) && !s.getName().contains(attrName.replace("*",""))){
                usedFlag = false;
            }
            return usedFlag;
        }).collect(Collectors.toList());
        return new Page<>();
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -13,7 +13,6 @@
import com.vci.ubcs.code.dto.datapush.BaseModelDTO;
import com.vci.ubcs.code.entity.*;
import com.vci.ubcs.code.enumpack.*;
import com.vci.ubcs.code.mapper.CodeOsbtmtypeMapper;
import com.vci.ubcs.code.mapper.CodeWupinMapper;
import com.vci.ubcs.code.mapper.CommonsMapper;
import com.vci.ubcs.code.service.*;
@@ -21,6 +20,7 @@
import com.vci.ubcs.code.vo.pagemodel.UITableFieldVO;
import com.vci.ubcs.code.vo.pagemodel.UITablePageVO;
import com.vci.ubcs.code.vo.pagemodel.*;
import com.vci.ubcs.omd.feign.IAttributeClient;
import com.vci.ubcs.omd.feign.IBtmTypeClient;
import com.vci.ubcs.omd.feign.IEnumClient;
import com.vci.ubcs.omd.feign.IRevisionRuleClient;
@@ -90,28 +90,28 @@
     */
    @Resource
    private CodeClstemplateServiceImpl templateService;
    /**
     * æ¨¡æ¿çš„æœåŠ¡
     */
    @Resource
    private CodeOsbtmtypeMapper codeOsbtmtypeMapper;
    @Resource
    private CodeOsattributeServiceImpl attributeService;
    private IAttributeClient attributeClient;
    /**
     * ç”Ÿæˆç¼–码的服务
     */
    @Resource
    private MdmProductCodeService productCodeService;
    /**
     * å¯è¾“可选的服务
     */
    @Resource
    IDictBizClient iDictBizClient;
    /**
     * å­—典的服务
     */
    @Resource
    IEnumClient enumClient;
    /**
     * å…¬å¼çš„æœåŠ¡
     */
@@ -316,10 +316,11 @@
        List<String> oids = VciBaseUtil.str2List(baseModelDTO.getOid());
//        List<ClientBusinessObject> cboList = boService.selectCBOByOidCollection(oids, baseModelDTO.getBtmname());
        //插个点 ä¸šåŠ¡ç±»åž‹å®ŒæˆåŽéœ€è¦ä¿®æ”¹
        QueryWrapper<CodeOsbtmtypeEntity> wrapper = new QueryWrapper<>();
        QueryWrapper<BtmTypeVO> wrapper = new QueryWrapper<>();
        wrapper.eq("BTMNAME",baseModelDTO.getBtmname());
        wrapper.in("OID",oids);
        List<CodeOsbtmtypeEntity> cboList = codeOsbtmtypeMapper.selectList(wrapper);
        // å¾…完善
        List<BtmTypeVO> cboList =  null;  // btmTypeClient.selectList(wrapper);
        //还需要修改allCode的生命周期
//        Map<String, String> conditionMap = new HashMap<>();
        QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>();
@@ -331,16 +332,18 @@
//        List<ClientBusinessObject> codeCbos = boService.queryCBO(MdmBtmTypeConstant.CODE_ALL_CODE, conditionMap);
        // å›žæ”¶éœ€è¦ä¸šåŠ¡æ•°æ®åˆ é™¤
        if (CodeDefaultLC.TASK_BACK.getValue().equals(baseModelDTO.getLcStatus())) {
//            BatchCBO batchCBO = new BatchCBO();
//            batchCBO.getDeleteCbos().addAll(cboList);
            codeOsbtmtypeMapper.deleteBatchIds(cboList);
//            boService.persistenceBatch(batchCBO);
        } else {
//            lifeCycleService.transCboStatus(cboList, baseModelDTO.getLcStatus());
        }
//        lifeCycleService.transCboStatus(codeCbos, baseModelDTO.getLcStatus());
    }
            // BatchCBO batchCBO = new BatchCBO();
            // batchCBO.getDeleteCbos().addAll(cboList);
            // å¾…完善
            //btmTypeClient.deleteBatchIds(cboList);
            //boService.persistenceBatch(batchCBO);
        } else {
            // lifeCycleService.transCboStatus(cboList, baseModelDTO.getLcStatus());
        }
        // lifeCycleService.transCboStatus(codeCbos, baseModelDTO.getLcStatus());
    }
    /**
     * ç”³è¯·å•一编码
@@ -1575,11 +1578,12 @@
                selectFieldList.add(referTableNick + "." + showFieldInSource + " as " + referShowField);
            });
        }
        Optional.ofNullable(attributeService.getDefaultAttributeVOMap()).orElseGet(() -> new HashMap<>()).keySet().stream().forEach(attrId -> {
            if (!selectFieldList.contains(attrId) && !"secretgrade".equalsIgnoreCase(attrId)) {
                selectFieldList.add(attrId);
            }
        });
        // å¾…完善
//        Optional.ofNullable(attributeService.getDefaultAttributeVOMap()).orElseGet(() -> new HashMap<>()).keySet().stream().forEach(attrId -> {
//            if (!selectFieldList.contains(attrId) && !"secretgrade".equalsIgnoreCase(attrId)) {
//                selectFieldList.add(attrId);
//            }
//        });
        if (!selectFieldList.contains(CODE_FIELD)) {
            selectFieldList.add(CODE_FIELD);
        }
@@ -1782,9 +1786,10 @@
     */
    private String getSqlByValue(String selectKey, String value, Map<String, CodeClassifyTemplateAttrVO> attrVOMap) {
        StringBuilder sql = new StringBuilder();
        if (!selectKey.contains(".") && (attrVOMap.containsKey(selectKey.toLowerCase(Locale.ROOT)) || attributeService.isDefaultAttr(selectKey) || selectKey.matches(RegExpConstant.LETTER))) {
            sql.append("t.");
        }
        // å¾…完善
//        if (!selectKey.contains(".") && (attrVOMap.containsKey(selectKey.toLowerCase(Locale.ROOT)) || attributeService.isDefaultAttr(selectKey) || selectKey.matches(RegExpConstant.LETTER))) {
//            sql.append("t.");
//        }
        if (value.startsWith(QueryOptionConstant.IN)) {
            sql.append(selectKey)
                .append(SPACE)
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeOsattributeWrapper.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeOsbtmtypeWrapper.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeOsbtmtypeattributeWrapper.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeRuleWrapper.java
@@ -44,8 +44,8 @@
    @Override
    public CodeRuleVO entityVO(CodeRule codeRule) {
        CodeRuleVO codeRuleVO = Objects.requireNonNull(BeanUtil.copy(codeRule, CodeRuleVO.class));
        if(StringUtils.isNotBlank(codeRuleVO.getLcStatus())){
            codeRuleVO.setLcStatusText(EnumCache.getValue(EnumEnum.CODE_RULE_LC,codeRuleVO.getLcStatus()));
        if(StringUtils.isNotBlank(codeRule.getLcStatus())){
            codeRuleVO.setLcStatusText(EnumCache.getValue(EnumEnum.CODE_RULE_LC,codeRule.getLcStatus()));
        }
        return codeRuleVO;
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml
@@ -47,7 +47,7 @@
    <select id="selectAllLevelChildOid" resultType="java.util.HashMap">
        select oid, level
        from PL_CODE_CLASSIFY
                 START WITH parentCodeClassifyOid = #{oid}CONNECT BY
                 START WITH parentCodeClassifyOid = #{oid} CONNECT BY
            PRIOR OID = parentCodeClassifyOid
    </select>
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeOsattributeMapper.xml
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeOsbtmtypeMapper.xml
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeOsbtmtypeattributeMapper.xml
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/BtmTypeController.java
@@ -51,7 +51,6 @@
     */
    private final IBtmTypeService btmTypeService;
    /**
     * æŸ¥çœ‹è¯¦æƒ…
     *
Source/UBCS/ubcs-service/ubcs-webservice/Dockerfile
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
FROM bladex/alpine-java:openjdk8-openj9_cn_slim
#=作者
MAINTAINER ubcsjava@qq.com
RUN mkdir -p /ubcs/applyjtcodeservice
WORKDIR /ubcs/applyjtcodeservice
#在容器中以多少端口运行
EXPOSE 36016
ADD ./target/ubcs-webservice.jar ./app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
CMD ["--spring.profiles.active=dev"]
Source/UBCS/ubcs-service/ubcs-webservice/pom.xml
@@ -46,16 +46,28 @@
            <scope>compile</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                    <finalName>${project.name}</finalName>
                    <username>${docker.username}</username>
                    <password>${docker.password}</password>
                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
                    <tag>${project.version}</tag>
                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                    <skip>false</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
Source/UBCS/ubcs-service/ubcs-webservice/src/main/java/com/vci/ubcs/code/webservice/GroupCodeApplyApplication.java
ÎļþÃû´Ó Source/UBCS/ubcs-service/ubcs-webservice/src/main/java/GroupCodeApplyApplication.java ÐÞ¸Ä
@@ -1,7 +1,8 @@
package com.vci.ubcs.code.webservice;
import org.springblade.core.cloud.client.UbcsCloudApplication;
import org.springblade.core.launch.UbcsApplication;
import org.springblade.core.launch.constant.AppConstant;
import org.springframework.context.annotation.ComponentScan;
/**
 * é›†å›¢ç ç”³è¯·æŽ¥å£å¯åЍ噍
Source/data/applogs/xxl-job/xxl-job-admin.log
ÎļþÌ«´ó
Source/data/applogs/xxl-job/xxl-job-admin.log.2023-05-30.zip
Binary files differ
Source/data/applogs/xxl-job/xxl-job-executor-sample-springboot.log
@@ -1,93 +1,96 @@
2023-05-30 18:40:10,251 INFO [background-preinit] o.h.validator.internal.util.Version [Version.java : 21] HV000001: Hibernate Validator 6.2.3.Final
2023-05-30 18:40:11,223 INFO [main] c.a.n.p.a.s.c.ClientAuthPluginManager [ClientAuthPluginManager.java : 56] [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success.
2023-05-30 18:40:11,224 INFO [main] c.a.n.p.a.s.c.ClientAuthPluginManager [ClientAuthPluginManager.java : 56] [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success.
2023-05-30 18:40:16,558 WARN [main] c.a.c.n.c.NacosPropertySourceBuilder [NacosPropertySourceBuilder.java : 87] Ignore the empty nacos configuration and get it based on dataId[ubcs-xxljob] & group[DEFAULT_GROUP]
2023-05-30 18:40:16,568 WARN [main] c.a.c.n.c.NacosPropertySourceBuilder [NacosPropertySourceBuilder.java : 87] Ignore the empty nacos configuration and get it based on dataId[ubcs-xxljob.yaml] & group[DEFAULT_GROUP]
2023-05-30 18:40:16,576 WARN [main] c.a.c.n.c.NacosPropertySourceBuilder [NacosPropertySourceBuilder.java : 87] Ignore the empty nacos configuration and get it based on dataId[ubcs-xxljob-dev.yaml] & group[DEFAULT_GROUP]
2023-05-30 18:40:16,579 INFO [main] o.s.c.b.c.PropertySourceBootstrapConfiguration [PropertySourceBootstrapConfiguration.java : 109] Located property source: [BootstrapPropertySource {name='bootstrapProperties-ubcs-xxljob-dev.yaml,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-ubcs-xxljob.yaml,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-ubcs-xxljob,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-ubcs-dev.yaml,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-ubcs.yaml,DEFAULT_GROUP'}]
2023-05-30 18:40:16,616 INFO [main] c.v.ubcs.job.executor.JobApplication [SpringApplication.java : 640] The following 1 profile is active: "dev"
2023-05-30 18:40:18,929 INFO [main] o.s.d.r.c.RepositoryConfigurationDelegate [RepositoryConfigurationDelegate.java : 262] Multiple Spring Data modules found, entering strict repository configuration mode
2023-05-30 18:40:18,932 INFO [main] o.s.d.r.c.RepositoryConfigurationDelegate [RepositoryConfigurationDelegate.java : 132] Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2023-05-30 18:40:18,971 INFO [main] o.s.d.r.c.RepositoryConfigurationDelegate [RepositoryConfigurationDelegate.java : 201] Finished Spring Data repository scanning in 11 ms. Found 0 Redis repository interfaces.
2023-05-30 18:40:19,425 INFO [main] o.s.cloud.context.scope.GenericScope [GenericScope.java : 283] BeanFactory id=8a87525c-4e09-336f-9e65-667cebc7cd92
2023-05-30 18:40:19,434 INFO [main] o.s.c.l.p.BladePropertySourcePostProcessor [BladePropertySourcePostProcessor.java : 150] BladePropertySourcePostProcessor init.
2023-05-30 18:40:19,459 INFO [main] o.s.c.l.p.BladePropertySourcePostProcessor [BladePropertySourcePostProcessor.java : 62] BladePropertySourcePostProcessor process @BladePropertySource bean.
2023-05-30 18:40:19,520 WARN [main] o.s.c.l.p.BladePropertySourcePostProcessor [BladePropertySourcePostProcessor.java : 67] Not found @BladePropertySource on spring bean class.
2023-05-30 18:40:19,888 INFO [main] o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker [PostProcessorRegistrationDelegate.java : 376] Bean 'org.springframework.cloud.commons.config.CommonsConfigAutoConfiguration' of type [org.springframework.cloud.commons.config.CommonsConfigAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-05-30 18:40:19,893 INFO [main] o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker [PostProcessorRegistrationDelegate.java : 376] Bean 'org.springframework.cloud.client.loadbalancer.LoadBalancerDefaultMappingsProviderAutoConfiguration' of type [org.springframework.cloud.client.loadbalancer.LoadBalancerDefaultMappingsProviderAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-05-30 18:40:19,895 INFO [main] o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker [PostProcessorRegistrationDelegate.java : 376] Bean 'loadBalancerClientsDefaultsMappingsProvider' of type [org.springframework.cloud.client.loadbalancer.LoadBalancerDefaultMappingsProviderAutoConfiguration$$Lambda$490/425842522] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-05-30 18:40:19,899 INFO [main] o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker [PostProcessorRegistrationDelegate.java : 376] Bean 'defaultsBindHandlerAdvisor' of type [org.springframework.cloud.commons.config.DefaultsBindHandlerAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-05-30 18:40:19,962 INFO [main] o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker [PostProcessorRegistrationDelegate.java : 376] Bean 'spring.cloud.sentinel-com.alibaba.cloud.sentinel.SentinelProperties' of type [com.alibaba.cloud.sentinel.SentinelProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-05-30 18:40:19,970 INFO [main] o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker [PostProcessorRegistrationDelegate.java : 376] Bean 'com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration' of type [com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-05-30 18:40:20,334 WARN [main] io.undertow.websockets.jsr [Bootstrap.java : 68] UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used
2023-05-30 18:40:20,380 INFO [main] io.undertow.servlet [ServletContextImpl.java : 382] Initializing Spring embedded WebApplicationContext
2023-05-30 18:40:20,381 INFO [main] o.s.b.w.s.c.ServletWebServerApplicationContext [ServletWebServerApplicationContext.java : 292] Root WebApplicationContext: initialization completed in 3723 ms
2023-05-30 18:40:20,880 INFO [main] c.v.u.j.executor.config.XxlJobConfig [XxlJobConfig.java : 43] >>>>>>>>>>> xxl-job config init.
2023-05-30 18:40:20,902 INFO [main] c.x.job.core.executor.XxlJobExecutor [XxlJobExecutor.java : 211] >>>>>>>>>>> xxl-job register jobhandler success, name:demoJobHandler, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@111a7973[class com.vci.ubcs.job.executor.jobhandler.SampleXxlJob#demoJobHandler]
2023-05-30 18:40:20,903 INFO [main] c.x.job.core.executor.XxlJobExecutor [XxlJobExecutor.java : 211] >>>>>>>>>>> xxl-job register jobhandler success, name:httpJobHandler, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@1a2773a8[class com.vci.ubcs.job.executor.jobhandler.SampleXxlJob#httpJobHandler]
2023-05-30 18:40:20,903 INFO [main] c.x.job.core.executor.XxlJobExecutor [XxlJobExecutor.java : 211] >>>>>>>>>>> xxl-job register jobhandler success, name:demoJobHandler2, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@78b0ec3a[class com.vci.ubcs.job.executor.jobhandler.SampleXxlJob#demoJobHandler2]
2023-05-30 18:40:20,903 INFO [main] c.x.job.core.executor.XxlJobExecutor [XxlJobExecutor.java : 211] >>>>>>>>>>> xxl-job register jobhandler success, name:shardingJobHandler, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@46612bfc[class com.vci.ubcs.job.executor.jobhandler.SampleXxlJob#shardingJobHandler]
2023-05-30 18:40:20,903 INFO [main] c.x.job.core.executor.XxlJobExecutor [XxlJobExecutor.java : 211] >>>>>>>>>>> xxl-job register jobhandler success, name:commandJobHandler, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@4f213a2[class com.vci.ubcs.job.executor.jobhandler.SampleXxlJob#commandJobHandler]
2023-05-30 18:40:21,573 INFO [main] c.a.c.s.SentinelWebMvcConfigurer [SentinelWebMvcConfigurer.java : 52] [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**].
2023-05-30 18:40:21,682 INFO [main] o.s.c.c.v.BladeRequestMappingHandlerMapping [BladeRequestMappingHandlerMapping.java : 99] Mapped "{ [/error], produces [text/html]}" onto org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#errorHtml(HttpServletRequest, HttpServletResponse)
2023-05-30 18:40:21,683 INFO [main] o.s.c.c.v.BladeRequestMappingHandlerMapping [BladeRequestMappingHandlerMapping.java : 99] Mapped "{ [/error]}" onto org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#error(HttpServletRequest)
2023-05-30 18:40:21,684 INFO [main] o.s.c.c.v.BladeRequestMappingHandlerMapping [BladeRequestMappingHandlerMapping.java : 99] Mapped "{GET [/test/testRequest]}" onto com.vci.ubcs.job.executor.controller.TestController#testRequest(String)
2023-05-30 18:40:24,382 INFO [main] com.alibaba.nacos.client.naming [InitUtils.java : 62] initializer namespace from System Property : null
2023-05-30 18:40:24,385 INFO [main] com.alibaba.nacos.client.naming [InitUtils.java : 66] initializer namespace from System Environment :null
2023-05-30 18:40:24,388 INFO [main] com.alibaba.nacos.client.naming [InitUtils.java : 73] initializer namespace from System Property :null
2023-05-30 18:40:24,418 INFO [main] c.a.n.p.a.s.c.ClientAuthPluginManager [ClientAuthPluginManager.java : 56] [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success.
2023-05-30 18:40:24,420 INFO [main] c.a.n.p.a.s.c.ClientAuthPluginManager [ClientAuthPluginManager.java : 56] [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success.
2023-05-30 18:40:24,440 INFO [main] c.alibaba.nacos.common.remote.client [RpcClientFactory.java : 95] [RpcClientFactory] create a new rpc client of 8db2c736-5dfa-4c32-b8c9-fa6c3ddacbb9
2023-05-30 18:40:24,441 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [8db2c736-5dfa-4c32-b8c9-fa6c3ddacbb9] RpcClient init label, labels = {module=naming, source=sdk}
2023-05-30 18:40:24,448 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [8db2c736-5dfa-4c32-b8c9-fa6c3ddacbb9] RpcClient init, ServerListFactory = com.alibaba.nacos.client.naming.core.ServerListManager
2023-05-30 18:40:24,449 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [8db2c736-5dfa-4c32-b8c9-fa6c3ddacbb9] Registry connection listener to current client:com.alibaba.nacos.client.naming.remote.gprc.redo.NamingGrpcRedoService
2023-05-30 18:40:24,451 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [8db2c736-5dfa-4c32-b8c9-fa6c3ddacbb9] Register server push request handler:com.alibaba.nacos.client.naming.remote.gprc.NamingPushRequestHandler
2023-05-30 18:40:24,452 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [8db2c736-5dfa-4c32-b8c9-fa6c3ddacbb9] Try to connect to server on start up, server: {serverIp = '127.0.0.1', server main port = 8848}
2023-05-30 18:40:24,593 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [8db2c736-5dfa-4c32-b8c9-fa6c3ddacbb9] Success to connect to server [127.0.0.1:8848] on start up, connectionId = 1685443224475_127.0.0.1_63184
2023-05-30 18:40:24,596 INFO [com.alibaba.nacos.client.remote.worker] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [8db2c736-5dfa-4c32-b8c9-fa6c3ddacbb9] Notify connected event to listeners.
2023-05-30 18:40:24,596 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [8db2c736-5dfa-4c32-b8c9-fa6c3ddacbb9] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$ConnectResetRequestHandler
2023-05-30 18:40:24,601 INFO [com.alibaba.nacos.client.remote.worker] com.alibaba.nacos.client.naming [NamingGrpcRedoService.java : 76] Grpc connection connect
2023-05-30 18:40:24,602 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [8db2c736-5dfa-4c32-b8c9-fa6c3ddacbb9] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$$Lambda$376/700837405
2023-05-30 18:40:25,034 INFO [main] o.s.b.a.e.web.EndpointLinksResolver [EndpointLinksResolver.java : 58] Exposing 20 endpoint(s) beneath base path '/actuator'
2023-05-30 18:40:27,551 INFO [main] o.s.b.f.a.AutowiredAnnotationBeanPostProcessor [AutowiredAnnotationBeanPostProcessor.java : 367] Inconsistent constructor declaration on bean with name 'org.springblade.core.launch.server.ServerInfo': single autowire-marked constructor flagged as optional - this constructor is effectively required since there is no default constructor to fall back to: public org.springblade.core.launch.server.ServerInfo(org.springframework.boot.autoconfigure.web.ServerProperties)
2023-05-30 18:40:29,465 WARN [main] o.s.c.l.c.LoadBalancerCacheAutoConfiguration$LoadBalancerCaffeineWarnLogger [LoadBalancerCacheAutoConfiguration.java : 82] Spring Cloud LoadBalancer is currently working with the default cache. While this cache implementation is useful for development and tests, it's recommended to use Caffeine cache in production.You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath.
2023-05-30 18:40:29,562 INFO [main] c.x.r.r.p.XxlRpcProviderFactory [XxlRpcProviderFactory.java : 197] >>>>>>>>>>> xxl-rpc, provider factory add service success. serviceKey = com.xxl.job.core.biz.ExecutorBiz, serviceBean = class com.xxl.job.core.biz.impl.ExecutorBizImpl
2023-05-30 18:40:30,731 INFO [main] com.alibaba.nacos.client.naming [NamingClientProxyDelegate.java : 141] [SUBSCRIBE-SERVICE] service:ubcs-xxljob, group:DEFAULT_GROUP, clusters:DEFAULT
2023-05-30 18:40:30,761 INFO [main] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 181] init new ips(0) service: DEFAULT_GROUP@@ubcs-xxljob@@DEFAULT -> []
2023-05-30 18:40:30,784 INFO [main] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 166] current ips:(0) service: DEFAULT_GROUP@@ubcs-xxljob@@DEFAULT -> []
2023-05-30 18:40:30,794 INFO [Thread-51] com.xxl.rpc.remoting.net.Server [NettyHttpServer.java : 66] >>>>>>>>>>> xxl-rpc remoting server start success, nettype = com.xxl.rpc.remoting.net.impl.netty_http.server.NettyHttpServer, port = 7018
2023-05-30 18:40:30,822 INFO [main] io.undertow [Undertow.java : 120] starting server: Undertow - 2.2.18.Final
2023-05-30 18:40:30,844 INFO [main] org.xnio [Xnio.java : 95] XNIO version 3.8.7.Final
2023-05-30 18:40:30,881 INFO [main] org.xnio.nio [NioXnio.java : 58] XNIO NIO Implementation Version 3.8.7.Final
2023-05-30 18:40:31,028 INFO [main] org.jboss.threads [Version.java : 52] JBoss Threads version 3.1.0.Final
2023-05-30 18:40:31,159 INFO [main] o.s.b.w.e.undertow.UndertowWebServer [UndertowWebServer.java : 119] Undertow started on port(s) 36009 (http)
2023-05-30 18:40:31,170 INFO [main] com.alibaba.nacos.client.naming [NamingGrpcClientProxy.java : 111] [REGISTER-SERVICE] public registering service ubcs-xxljob with instance Instance{instanceId='null', ip='192.168.237.1', port=36009, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName='DEFAULT', serviceName='null', metadata={preserved.register.source=SPRING_CLOUD}}
2023-05-30 18:40:31,187 INFO [main] c.a.c.n.r.NacosServiceRegistry [NacosServiceRegistry.java : 75] nacos registry, DEFAULT_GROUP ubcs-xxljob 192.168.237.1:36009 register finished
2023-05-30 18:40:31,336 INFO [nacos-grpc-client-executor-127.0.0.1-10] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [8db2c736-5dfa-4c32-b8c9-fa6c3ddacbb9] Receive server push request, request = NotifySubscriberRequest, requestId = 1587
2023-05-30 18:40:31,343 INFO [nacos-grpc-client-executor-127.0.0.1-10] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 181] init new ips(1) service: DEFAULT_GROUP@@ubcs-xxljob -> [{"ip":"192.168.237.1","port":36009,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@ubcs-xxljob","metadata":{"preserved.register.source":"SPRING_CLOUD"},"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000,"ipDeleteTimeout":30000}]
2023-05-30 18:40:31,344 INFO [nacos-grpc-client-executor-127.0.0.1-10] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 166] current ips:(1) service: DEFAULT_GROUP@@ubcs-xxljob -> [{"ip":"192.168.237.1","port":36009,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@ubcs-xxljob","metadata":{"preserved.register.source":"SPRING_CLOUD"},"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000,"ipDeleteTimeout":30000}]
2023-05-30 18:40:31,346 INFO [nacos-grpc-client-executor-127.0.0.1-10] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [8db2c736-5dfa-4c32-b8c9-fa6c3ddacbb9] Ack server push request, request = NotifySubscriberRequest, requestId = 1587
2023-05-30 18:40:31,760 INFO [com.alibaba.nacos.client.naming.updater.0] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 234] new ips(1) service: DEFAULT_GROUP@@ubcs-xxljob@@DEFAULT -> [{"ip":"192.168.237.1","port":36009,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@ubcs-xxljob","metadata":{"preserved.register.source":"SPRING_CLOUD"},"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000,"ipDeleteTimeout":30000}]
2023-05-30 18:40:31,762 INFO [com.alibaba.nacos.client.naming.updater.0] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 166] current ips:(1) service: DEFAULT_GROUP@@ubcs-xxljob@@DEFAULT -> [{"ip":"192.168.237.1","port":36009,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@ubcs-xxljob","metadata":{"preserved.register.source":"SPRING_CLOUD"},"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000,"ipDeleteTimeout":30000}]
2023-05-30 18:40:32,070 INFO [main] o.s.core.launch.StartEventListener [StartEventListener.java : 45] ---[UBCS-XXLJOB]---启动完成,当前使用的端口:[36009],环境变量:[dev]---
2023-05-30 18:40:32,098 INFO [main] c.v.ubcs.job.executor.JobApplication [StartupInfoLogger.java : 61] Started JobApplication in 23.74 seconds (JVM running for 26.324)
2023-05-30 18:40:32,110 INFO [main] c.a.n.client.config.impl.CacheData [CacheData.java : 65] nacos.cache.data.init.snapshot = true
2023-05-30 18:40:32,113 INFO [main] c.a.n.c.config.impl.ClientWorker [ClientWorker.java : 373] [fixed-127.0.0.1_8848] [subscribe] ubcs-dev.yaml+DEFAULT_GROUP
2023-05-30 18:40:32,115 INFO [main] c.a.n.client.config.impl.CacheData [CacheData.java : 180] [fixed-127.0.0.1_8848] [add-listener] ok, tenant=, dataId=ubcs-dev.yaml, group=DEFAULT_GROUP, cnt=1
2023-05-30 18:40:32,116 INFO [main] c.a.c.n.r.NacosContextRefresher [NacosContextRefresher.java : 105] listening config: dataId=ubcs-dev.yaml, group=DEFAULT_GROUP
2023-05-30 18:40:32,117 INFO [main] c.a.n.c.config.impl.ClientWorker [ClientWorker.java : 373] [fixed-127.0.0.1_8848] [subscribe] ubcs-xxljob+DEFAULT_GROUP
2023-05-30 18:40:32,117 INFO [main] c.a.n.client.config.impl.CacheData [CacheData.java : 180] [fixed-127.0.0.1_8848] [add-listener] ok, tenant=, dataId=ubcs-xxljob, group=DEFAULT_GROUP, cnt=1
2023-05-30 18:40:32,118 INFO [main] c.a.c.n.r.NacosContextRefresher [NacosContextRefresher.java : 105] listening config: dataId=ubcs-xxljob, group=DEFAULT_GROUP
2023-05-30 18:40:32,120 INFO [main] c.a.n.c.config.impl.ClientWorker [ClientWorker.java : 373] [fixed-127.0.0.1_8848] [subscribe] ubcs.yaml+DEFAULT_GROUP
2023-05-30 18:40:32,120 INFO [main] c.a.n.client.config.impl.CacheData [CacheData.java : 180] [fixed-127.0.0.1_8848] [add-listener] ok, tenant=, dataId=ubcs.yaml, group=DEFAULT_GROUP, cnt=1
2023-05-30 18:40:32,121 INFO [main] c.a.c.n.r.NacosContextRefresher [NacosContextRefresher.java : 105] listening config: dataId=ubcs.yaml, group=DEFAULT_GROUP
2023-05-30 18:40:32,122 INFO [main] c.a.n.c.config.impl.ClientWorker [ClientWorker.java : 373] [fixed-127.0.0.1_8848] [subscribe] ubcs-xxljob.yaml+DEFAULT_GROUP
2023-05-30 18:40:32,122 INFO [main] c.a.n.client.config.impl.CacheData [CacheData.java : 180] [fixed-127.0.0.1_8848] [add-listener] ok, tenant=, dataId=ubcs-xxljob.yaml, group=DEFAULT_GROUP, cnt=1
2023-05-30 18:40:32,122 INFO [main] c.a.c.n.r.NacosContextRefresher [NacosContextRefresher.java : 105] listening config: dataId=ubcs-xxljob.yaml, group=DEFAULT_GROUP
2023-05-30 18:40:32,123 INFO [main] c.a.n.c.config.impl.ClientWorker [ClientWorker.java : 373] [fixed-127.0.0.1_8848] [subscribe] ubcs-xxljob-dev.yaml+DEFAULT_GROUP
2023-05-30 18:40:32,124 INFO [main] c.a.n.client.config.impl.CacheData [CacheData.java : 180] [fixed-127.0.0.1_8848] [add-listener] ok, tenant=, dataId=ubcs-xxljob-dev.yaml, group=DEFAULT_GROUP, cnt=1
2023-05-30 18:40:32,124 INFO [main] c.a.c.n.r.NacosContextRefresher [NacosContextRefresher.java : 105] listening config: dataId=ubcs-xxljob-dev.yaml, group=DEFAULT_GROUP
2023-05-30 18:40:32,857 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
2023-06-02 20:59:58,404 INFO [background-preinit] o.h.validator.internal.util.Version [Version.java : 21] HV000001: Hibernate Validator 6.2.3.Final
2023-06-02 20:59:59,739 INFO [main] c.a.n.p.a.s.c.ClientAuthPluginManager [ClientAuthPluginManager.java : 56] [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success.
2023-06-02 20:59:59,740 INFO [main] c.a.n.p.a.s.c.ClientAuthPluginManager [ClientAuthPluginManager.java : 56] [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success.
2023-06-02 21:00:03,747 WARN [main] c.a.c.n.c.NacosPropertySourceBuilder [NacosPropertySourceBuilder.java : 87] Ignore the empty nacos configuration and get it based on dataId[ubcs-xxljob] & group[DEFAULT_GROUP]
2023-06-02 21:00:03,755 WARN [main] c.a.c.n.c.NacosPropertySourceBuilder [NacosPropertySourceBuilder.java : 87] Ignore the empty nacos configuration and get it based on dataId[ubcs-xxljob.yaml] & group[DEFAULT_GROUP]
2023-06-02 21:00:03,761 WARN [main] c.a.c.n.c.NacosPropertySourceBuilder [NacosPropertySourceBuilder.java : 87] Ignore the empty nacos configuration and get it based on dataId[ubcs-xxljob-dev.yaml] & group[DEFAULT_GROUP]
2023-06-02 21:00:03,763 INFO [main] o.s.c.b.c.PropertySourceBootstrapConfiguration [PropertySourceBootstrapConfiguration.java : 109] Located property source: [BootstrapPropertySource {name='bootstrapProperties-ubcs-xxljob-dev.yaml,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-ubcs-xxljob.yaml,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-ubcs-xxljob,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-ubcs-dev.yaml,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-ubcs.yaml,DEFAULT_GROUP'}]
2023-06-02 21:00:03,793 INFO [main] c.v.ubcs.job.executor.JobApplication [SpringApplication.java : 640] The following 1 profile is active: "dev"
2023-06-02 21:00:05,925 INFO [main] o.s.d.r.c.RepositoryConfigurationDelegate [RepositoryConfigurationDelegate.java : 262] Multiple Spring Data modules found, entering strict repository configuration mode
2023-06-02 21:00:05,931 INFO [main] o.s.d.r.c.RepositoryConfigurationDelegate [RepositoryConfigurationDelegate.java : 132] Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2023-06-02 21:00:05,985 INFO [main] o.s.d.r.c.RepositoryConfigurationDelegate [RepositoryConfigurationDelegate.java : 201] Finished Spring Data repository scanning in 15 ms. Found 0 Redis repository interfaces.
2023-06-02 21:00:06,274 INFO [main] o.s.cloud.context.scope.GenericScope [GenericScope.java : 283] BeanFactory id=8a87525c-4e09-336f-9e65-667cebc7cd92
2023-06-02 21:00:06,278 INFO [main] o.s.c.l.p.BladePropertySourcePostProcessor [BladePropertySourcePostProcessor.java : 150] BladePropertySourcePostProcessor init.
2023-06-02 21:00:06,290 INFO [main] o.s.c.l.p.BladePropertySourcePostProcessor [BladePropertySourcePostProcessor.java : 62] BladePropertySourcePostProcessor process @BladePropertySource bean.
2023-06-02 21:00:06,319 WARN [main] o.s.c.l.p.BladePropertySourcePostProcessor [BladePropertySourcePostProcessor.java : 67] Not found @BladePropertySource on spring bean class.
2023-06-02 21:00:06,755 INFO [main] o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker [PostProcessorRegistrationDelegate.java : 376] Bean 'org.springframework.cloud.commons.config.CommonsConfigAutoConfiguration' of type [org.springframework.cloud.commons.config.CommonsConfigAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-06-02 21:00:06,761 INFO [main] o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker [PostProcessorRegistrationDelegate.java : 376] Bean 'org.springframework.cloud.client.loadbalancer.LoadBalancerDefaultMappingsProviderAutoConfiguration' of type [org.springframework.cloud.client.loadbalancer.LoadBalancerDefaultMappingsProviderAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-06-02 21:00:06,763 INFO [main] o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker [PostProcessorRegistrationDelegate.java : 376] Bean 'loadBalancerClientsDefaultsMappingsProvider' of type [org.springframework.cloud.client.loadbalancer.LoadBalancerDefaultMappingsProviderAutoConfiguration$$Lambda$490/1366572224] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-06-02 21:00:06,768 INFO [main] o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker [PostProcessorRegistrationDelegate.java : 376] Bean 'defaultsBindHandlerAdvisor' of type [org.springframework.cloud.commons.config.DefaultsBindHandlerAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-06-02 21:00:06,866 INFO [main] o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker [PostProcessorRegistrationDelegate.java : 376] Bean 'spring.cloud.sentinel-com.alibaba.cloud.sentinel.SentinelProperties' of type [com.alibaba.cloud.sentinel.SentinelProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-06-02 21:00:06,878 INFO [main] o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker [PostProcessorRegistrationDelegate.java : 376] Bean 'com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration' of type [com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-06-02 21:00:07,251 WARN [main] io.undertow.websockets.jsr [Bootstrap.java : 68] UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used
2023-06-02 21:00:07,316 INFO [main] io.undertow.servlet [ServletContextImpl.java : 382] Initializing Spring embedded WebApplicationContext
2023-06-02 21:00:07,317 INFO [main] o.s.b.w.s.c.ServletWebServerApplicationContext [ServletWebServerApplicationContext.java : 292] Root WebApplicationContext: initialization completed in 3484 ms
2023-06-02 21:00:07,844 INFO [main] c.v.u.j.executor.config.XxlJobConfig [XxlJobConfig.java : 43] >>>>>>>>>>> xxl-job config init.
2023-06-02 21:00:07,875 INFO [main] c.x.job.core.executor.XxlJobExecutor [XxlJobExecutor.java : 211] >>>>>>>>>>> xxl-job register jobhandler success, name:httpJobHandler, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@35555145[class com.vci.ubcs.job.executor.jobhandler.SampleXxlJob#httpJobHandler]
2023-06-02 21:00:07,876 INFO [main] c.x.job.core.executor.XxlJobExecutor [XxlJobExecutor.java : 211] >>>>>>>>>>> xxl-job register jobhandler success, name:demoJobHandler2, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@70bc3a9c[class com.vci.ubcs.job.executor.jobhandler.SampleXxlJob#demoJobHandler2]
2023-06-02 21:00:07,876 INFO [main] c.x.job.core.executor.XxlJobExecutor [XxlJobExecutor.java : 211] >>>>>>>>>>> xxl-job register jobhandler success, name:demoJobHandler, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@771cbd13[class com.vci.ubcs.job.executor.jobhandler.SampleXxlJob#demoJobHandler]
2023-06-02 21:00:07,877 INFO [main] c.x.job.core.executor.XxlJobExecutor [XxlJobExecutor.java : 211] >>>>>>>>>>> xxl-job register jobhandler success, name:shardingJobHandler, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@229749f0[class com.vci.ubcs.job.executor.jobhandler.SampleXxlJob#shardingJobHandler]
2023-06-02 21:00:07,877 INFO [main] c.x.job.core.executor.XxlJobExecutor [XxlJobExecutor.java : 211] >>>>>>>>>>> xxl-job register jobhandler success, name:commandJobHandler, jobHandler:com.xxl.job.core.handler.impl.MethodJobHandler@3d57fb9e[class com.vci.ubcs.job.executor.jobhandler.SampleXxlJob#commandJobHandler]
2023-06-02 21:00:08,289 INFO [main] c.a.c.s.SentinelWebMvcConfigurer [SentinelWebMvcConfigurer.java : 52] [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**].
2023-06-02 21:00:08,375 INFO [main] o.s.c.c.v.BladeRequestMappingHandlerMapping [BladeRequestMappingHandlerMapping.java : 99] Mapped "{ [/error], produces [text/html]}" onto org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#errorHtml(HttpServletRequest, HttpServletResponse)
2023-06-02 21:00:08,376 INFO [main] o.s.c.c.v.BladeRequestMappingHandlerMapping [BladeRequestMappingHandlerMapping.java : 99] Mapped "{ [/error]}" onto org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#error(HttpServletRequest)
2023-06-02 21:00:08,377 INFO [main] o.s.c.c.v.BladeRequestMappingHandlerMapping [BladeRequestMappingHandlerMapping.java : 99] Mapped "{GET [/test/testRequest]}" onto com.vci.ubcs.job.executor.controller.TestController#testRequest(String)
2023-06-02 21:00:10,025 INFO [main] com.alibaba.nacos.client.naming [InitUtils.java : 62] initializer namespace from System Property : null
2023-06-02 21:00:10,025 INFO [main] com.alibaba.nacos.client.naming [InitUtils.java : 66] initializer namespace from System Environment :null
2023-06-02 21:00:10,026 INFO [main] com.alibaba.nacos.client.naming [InitUtils.java : 73] initializer namespace from System Property :null
2023-06-02 21:00:10,046 INFO [main] c.a.n.p.a.s.c.ClientAuthPluginManager [ClientAuthPluginManager.java : 56] [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success.
2023-06-02 21:00:10,047 INFO [main] c.a.n.p.a.s.c.ClientAuthPluginManager [ClientAuthPluginManager.java : 56] [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success.
2023-06-02 21:00:10,060 INFO [main] c.alibaba.nacos.common.remote.client [RpcClientFactory.java : 95] [RpcClientFactory] create a new rpc client of 971c8549-b6d1-463d-9f97-5c9c802a5776
2023-06-02 21:00:10,061 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [971c8549-b6d1-463d-9f97-5c9c802a5776] RpcClient init label, labels = {module=naming, source=sdk}
2023-06-02 21:00:10,064 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [971c8549-b6d1-463d-9f97-5c9c802a5776] RpcClient init, ServerListFactory = com.alibaba.nacos.client.naming.core.ServerListManager
2023-06-02 21:00:10,065 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [971c8549-b6d1-463d-9f97-5c9c802a5776] Registry connection listener to current client:com.alibaba.nacos.client.naming.remote.gprc.redo.NamingGrpcRedoService
2023-06-02 21:00:10,066 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [971c8549-b6d1-463d-9f97-5c9c802a5776] Register server push request handler:com.alibaba.nacos.client.naming.remote.gprc.NamingPushRequestHandler
2023-06-02 21:00:10,067 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [971c8549-b6d1-463d-9f97-5c9c802a5776] Try to connect to server on start up, server: {serverIp = '127.0.0.1', server main port = 8848}
2023-06-02 21:00:10,187 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [971c8549-b6d1-463d-9f97-5c9c802a5776] Success to connect to server [127.0.0.1:8848] on start up, connectionId = 1685710810072_127.0.0.1_63146
2023-06-02 21:00:10,188 INFO [com.alibaba.nacos.client.remote.worker] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [971c8549-b6d1-463d-9f97-5c9c802a5776] Notify connected event to listeners.
2023-06-02 21:00:10,192 INFO [com.alibaba.nacos.client.remote.worker] com.alibaba.nacos.client.naming [NamingGrpcRedoService.java : 76] Grpc connection connect
2023-06-02 21:00:10,189 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [971c8549-b6d1-463d-9f97-5c9c802a5776] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$ConnectResetRequestHandler
2023-06-02 21:00:10,192 INFO [main] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [971c8549-b6d1-463d-9f97-5c9c802a5776] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$$Lambda$376/1387556178
2023-06-02 21:00:10,977 INFO [main] o.s.b.a.e.web.EndpointLinksResolver [EndpointLinksResolver.java : 58] Exposing 20 endpoint(s) beneath base path '/actuator'
2023-06-02 21:00:13,347 INFO [main] o.s.b.f.a.AutowiredAnnotationBeanPostProcessor [AutowiredAnnotationBeanPostProcessor.java : 367] Inconsistent constructor declaration on bean with name 'org.springblade.core.launch.server.ServerInfo': single autowire-marked constructor flagged as optional - this constructor is effectively required since there is no default constructor to fall back to: public org.springblade.core.launch.server.ServerInfo(org.springframework.boot.autoconfigure.web.ServerProperties)
2023-06-02 21:00:14,604 WARN [main] o.s.c.l.c.LoadBalancerCacheAutoConfiguration$LoadBalancerCaffeineWarnLogger [LoadBalancerCacheAutoConfiguration.java : 82] Spring Cloud LoadBalancer is currently working with the default cache. While this cache implementation is useful for development and tests, it's recommended to use Caffeine cache in production.You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath.
2023-06-02 21:00:14,653 INFO [main] c.x.r.r.p.XxlRpcProviderFactory [XxlRpcProviderFactory.java : 197] >>>>>>>>>>> xxl-rpc, provider factory add service success. serviceKey = com.xxl.job.core.biz.ExecutorBiz, serviceBean = class com.xxl.job.core.biz.impl.ExecutorBizImpl
2023-06-02 21:00:15,148 INFO [main] com.alibaba.nacos.client.naming [NamingClientProxyDelegate.java : 141] [SUBSCRIBE-SERVICE] service:ubcs-xxljob, group:DEFAULT_GROUP, clusters:DEFAULT
2023-06-02 21:00:15,166 INFO [main] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 181] init new ips(0) service: DEFAULT_GROUP@@ubcs-xxljob@@DEFAULT -> []
2023-06-02 21:00:15,179 INFO [main] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 166] current ips:(0) service: DEFAULT_GROUP@@ubcs-xxljob@@DEFAULT -> []
2023-06-02 21:00:15,183 INFO [Thread-47] com.xxl.rpc.remoting.net.Server [NettyHttpServer.java : 66] >>>>>>>>>>> xxl-rpc remoting server start success, nettype = com.xxl.rpc.remoting.net.impl.netty_http.server.NettyHttpServer, port = 7018
2023-06-02 21:00:15,202 INFO [main] io.undertow [Undertow.java : 120] starting server: Undertow - 2.2.18.Final
2023-06-02 21:00:15,213 INFO [main] org.xnio [Xnio.java : 95] XNIO version 3.8.7.Final
2023-06-02 21:00:15,227 INFO [main] org.xnio.nio [NioXnio.java : 58] XNIO NIO Implementation Version 3.8.7.Final
2023-06-02 21:00:15,273 INFO [main] org.jboss.threads [Version.java : 52] JBoss Threads version 3.1.0.Final
2023-06-02 21:00:15,339 INFO [main] o.s.b.w.e.undertow.UndertowWebServer [UndertowWebServer.java : 119] Undertow started on port(s) 36009 (http)
2023-06-02 21:00:15,344 INFO [main] com.alibaba.nacos.client.naming [NamingGrpcClientProxy.java : 111] [REGISTER-SERVICE] public registering service ubcs-xxljob with instance Instance{instanceId='null', ip='192.168.237.1', port=36009, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName='DEFAULT', serviceName='null', metadata={preserved.register.source=SPRING_CLOUD}}
2023-06-02 21:00:15,353 INFO [main] c.a.c.n.r.NacosServiceRegistry [NacosServiceRegistry.java : 75] nacos registry, DEFAULT_GROUP ubcs-xxljob 192.168.237.1:36009 register finished
2023-06-02 21:00:15,706 INFO [nacos-grpc-client-executor-127.0.0.1-10] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [971c8549-b6d1-463d-9f97-5c9c802a5776] Receive server push request, request = NotifySubscriberRequest, requestId = 2169
2023-06-02 21:00:15,709 INFO [nacos-grpc-client-executor-127.0.0.1-10] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 181] init new ips(1) service: DEFAULT_GROUP@@ubcs-xxljob -> [{"ip":"192.168.237.1","port":36009,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@ubcs-xxljob","metadata":{"preserved.register.source":"SPRING_CLOUD"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]
2023-06-02 21:00:15,710 INFO [nacos-grpc-client-executor-127.0.0.1-10] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 166] current ips:(1) service: DEFAULT_GROUP@@ubcs-xxljob -> [{"ip":"192.168.237.1","port":36009,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@ubcs-xxljob","metadata":{"preserved.register.source":"SPRING_CLOUD"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]
2023-06-02 21:00:15,711 INFO [nacos-grpc-client-executor-127.0.0.1-10] c.alibaba.nacos.common.remote.client [LoggerUtils.java : 60] [971c8549-b6d1-463d-9f97-5c9c802a5776] Ack server push request, request = NotifySubscriberRequest, requestId = 2169
2023-06-02 21:00:15,737 INFO [main] o.s.core.launch.StartEventListener [StartEventListener.java : 45] ---[UBCS-XXLJOB]---启动完成,当前使用的端口:[36009],环境变量:[dev]---
2023-06-02 21:00:15,754 INFO [main] c.v.ubcs.job.executor.JobApplication [StartupInfoLogger.java : 61] Started JobApplication in 19.761 seconds (JVM running for 21.938)
2023-06-02 21:00:15,761 INFO [main] c.a.n.client.config.impl.CacheData [CacheData.java : 65] nacos.cache.data.init.snapshot = true
2023-06-02 21:00:15,762 INFO [main] c.a.n.c.config.impl.ClientWorker [ClientWorker.java : 373] [fixed-127.0.0.1_8848] [subscribe] ubcs-dev.yaml+DEFAULT_GROUP
2023-06-02 21:00:15,764 INFO [main] c.a.n.client.config.impl.CacheData [CacheData.java : 180] [fixed-127.0.0.1_8848] [add-listener] ok, tenant=, dataId=ubcs-dev.yaml, group=DEFAULT_GROUP, cnt=1
2023-06-02 21:00:15,764 INFO [main] c.a.c.n.r.NacosContextRefresher [NacosContextRefresher.java : 105] listening config: dataId=ubcs-dev.yaml, group=DEFAULT_GROUP
2023-06-02 21:00:15,765 INFO [main] c.a.n.c.config.impl.ClientWorker [ClientWorker.java : 373] [fixed-127.0.0.1_8848] [subscribe] ubcs-xxljob+DEFAULT_GROUP
2023-06-02 21:00:15,765 INFO [main] c.a.n.client.config.impl.CacheData [CacheData.java : 180] [fixed-127.0.0.1_8848] [add-listener] ok, tenant=, dataId=ubcs-xxljob, group=DEFAULT_GROUP, cnt=1
2023-06-02 21:00:15,765 INFO [main] c.a.c.n.r.NacosContextRefresher [NacosContextRefresher.java : 105] listening config: dataId=ubcs-xxljob, group=DEFAULT_GROUP
2023-06-02 21:00:15,766 INFO [main] c.a.n.c.config.impl.ClientWorker [ClientWorker.java : 373] [fixed-127.0.0.1_8848] [subscribe] ubcs.yaml+DEFAULT_GROUP
2023-06-02 21:00:15,766 INFO [main] c.a.n.client.config.impl.CacheData [CacheData.java : 180] [fixed-127.0.0.1_8848] [add-listener] ok, tenant=, dataId=ubcs.yaml, group=DEFAULT_GROUP, cnt=1
2023-06-02 21:00:15,766 INFO [main] c.a.c.n.r.NacosContextRefresher [NacosContextRefresher.java : 105] listening config: dataId=ubcs.yaml, group=DEFAULT_GROUP
2023-06-02 21:00:15,767 INFO [main] c.a.n.c.config.impl.ClientWorker [ClientWorker.java : 373] [fixed-127.0.0.1_8848] [subscribe] ubcs-xxljob.yaml+DEFAULT_GROUP
2023-06-02 21:00:15,767 INFO [main] c.a.n.client.config.impl.CacheData [CacheData.java : 180] [fixed-127.0.0.1_8848] [add-listener] ok, tenant=, dataId=ubcs-xxljob.yaml, group=DEFAULT_GROUP, cnt=1
2023-06-02 21:00:15,767 INFO [main] c.a.c.n.r.NacosContextRefresher [NacosContextRefresher.java : 105] listening config: dataId=ubcs-xxljob.yaml, group=DEFAULT_GROUP
2023-06-02 21:00:15,768 INFO [main] c.a.n.c.config.impl.ClientWorker [ClientWorker.java : 373] [fixed-127.0.0.1_8848] [subscribe] ubcs-xxljob-dev.yaml+DEFAULT_GROUP
2023-06-02 21:00:15,768 INFO [main] c.a.n.client.config.impl.CacheData [CacheData.java : 180] [fixed-127.0.0.1_8848] [add-listener] ok, tenant=, dataId=ubcs-xxljob-dev.yaml, group=DEFAULT_GROUP, cnt=1
2023-06-02 21:00:15,768 INFO [main] c.a.c.n.r.NacosContextRefresher [NacosContextRefresher.java : 105] listening config: dataId=ubcs-xxljob-dev.yaml, group=DEFAULT_GROUP
2023-06-02 21:00:16,173 INFO [com.alibaba.nacos.client.naming.updater.0] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 234] new ips(1) service: DEFAULT_GROUP@@ubcs-xxljob@@DEFAULT -> [{"ip":"192.168.237.1","port":36009,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@ubcs-xxljob","metadata":{"preserved.register.source":"SPRING_CLOUD"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]
2023-06-02 21:00:16,174 INFO [com.alibaba.nacos.client.naming.updater.0] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 166] current ips:(1) service: DEFAULT_GROUP@@ubcs-xxljob@@DEFAULT -> [{"ip":"192.168.237.1","port":36009,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@ubcs-xxljob","metadata":{"preserved.register.source":"SPRING_CLOUD"},"ipDeleteTimeout":30000,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000}]
2023-06-02 21:00:16,350 INFO [RMI TCP Connection(13)-192.168.3.7] io.undertow.servlet [ServletContextImpl.java : 382] Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-06-02 21:00:16,350 INFO [RMI TCP Connection(13)-192.168.3.7] o.s.web.servlet.DispatcherServlet [FrameworkServlet.java : 525] Initializing Servlet 'dispatcherServlet'
2023-06-02 21:00:16,354 INFO [RMI TCP Connection(13)-192.168.3.7] o.s.web.servlet.DispatcherServlet [FrameworkServlet.java : 547] Completed initialization in 3 ms
2023-06-02 21:00:17,232 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
@@ -111,11 +114,8 @@
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:40:32,858 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:40:32,936 INFO [RMI TCP Connection(5)-192.168.1.46] io.undertow.servlet [ServletContextImpl.java : 382] Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-05-30 18:40:32,936 INFO [RMI TCP Connection(5)-192.168.1.46] o.s.web.servlet.DispatcherServlet [FrameworkServlet.java : 525] Initializing Servlet 'dispatcherServlet'
2023-05-30 18:40:32,940 INFO [RMI TCP Connection(5)-192.168.1.46] o.s.web.servlet.DispatcherServlet [FrameworkServlet.java : 547] Completed initialization in 4 ms
2023-05-30 18:41:04,927 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
2023-06-02 21:00:17,234 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-06-02 21:00:49,283 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
@@ -139,8 +139,8 @@
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:41:04,928 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:41:36,978 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
2023-06-02 21:00:49,283 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-06-02 21:01:21,322 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
@@ -164,8 +164,8 @@
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:41:36,979 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:42:09,008 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
2023-06-02 21:01:21,323 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-06-02 21:01:53,372 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
@@ -189,8 +189,8 @@
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:42:09,008 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:42:41,038 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
2023-06-02 21:01:53,372 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-06-02 21:02:25,393 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
@@ -214,8 +214,8 @@
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:42:41,038 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:43:13,081 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
2023-06-02 21:02:25,394 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-06-02 21:02:57,429 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
@@ -239,8 +239,8 @@
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:43:13,179 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:43:45,242 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
2023-06-02 21:02:57,430 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-06-02 21:03:29,473 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
@@ -264,239 +264,14 @@
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:43:45,243 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:44:17,289 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:162)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
    at java.net.Socket.connect(Socket.java:606)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
    at sun.net.www.http.HttpClient.New(HttpClient.java:339)
    at sun.net.www.http.HttpClient.New(HttpClient.java:357)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1226)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:990)
    at com.xxl.job.core.util.XxlJobRemotingUtil.postBody(XxlJobRemotingUtil.java:94)
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:44:17,290 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:44:49,322 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:162)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
    at java.net.Socket.connect(Socket.java:606)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
    at sun.net.www.http.HttpClient.New(HttpClient.java:339)
    at sun.net.www.http.HttpClient.New(HttpClient.java:357)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1226)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:990)
    at com.xxl.job.core.util.XxlJobRemotingUtil.postBody(XxlJobRemotingUtil.java:94)
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:44:49,323 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:45:21,341 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:162)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
    at java.net.Socket.connect(Socket.java:606)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
    at sun.net.www.http.HttpClient.New(HttpClient.java:339)
    at sun.net.www.http.HttpClient.New(HttpClient.java:357)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1226)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:990)
    at com.xxl.job.core.util.XxlJobRemotingUtil.postBody(XxlJobRemotingUtil.java:94)
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:45:21,341 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:45:53,370 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:162)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
    at java.net.Socket.connect(Socket.java:606)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
    at sun.net.www.http.HttpClient.New(HttpClient.java:339)
    at sun.net.www.http.HttpClient.New(HttpClient.java:357)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1226)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:990)
    at com.xxl.job.core.util.XxlJobRemotingUtil.postBody(XxlJobRemotingUtil.java:94)
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:45:53,371 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:46:25,389 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:162)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
    at java.net.Socket.connect(Socket.java:606)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
    at sun.net.www.http.HttpClient.New(HttpClient.java:339)
    at sun.net.www.http.HttpClient.New(HttpClient.java:357)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1226)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:990)
    at com.xxl.job.core.util.XxlJobRemotingUtil.postBody(XxlJobRemotingUtil.java:94)
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:46:25,389 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:46:57,414 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:162)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
    at java.net.Socket.connect(Socket.java:606)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
    at sun.net.www.http.HttpClient.New(HttpClient.java:339)
    at sun.net.www.http.HttpClient.New(HttpClient.java:357)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1226)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:990)
    at com.xxl.job.core.util.XxlJobRemotingUtil.postBody(XxlJobRemotingUtil.java:94)
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:46:57,415 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:47:29,468 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:162)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
    at java.net.Socket.connect(Socket.java:606)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
    at sun.net.www.http.HttpClient.New(HttpClient.java:339)
    at sun.net.www.http.HttpClient.New(HttpClient.java:357)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1226)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:990)
    at com.xxl.job.core.util.XxlJobRemotingUtil.postBody(XxlJobRemotingUtil.java:94)
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:47:29,469 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:48:01,505 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:162)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
    at java.net.Socket.connect(Socket.java:606)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
    at sun.net.www.http.HttpClient.New(HttpClient.java:339)
    at sun.net.www.http.HttpClient.New(HttpClient.java:357)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1226)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:990)
    at com.xxl.job.core.util.XxlJobRemotingUtil.postBody(XxlJobRemotingUtil.java:94)
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:48:01,508 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:48:33,522 WARN [Thread-2] c.a.n.c.http.HttpClientBeanHolder [HttpClientBeanHolder.java : 108] [HttpClientBeanHolder] Start destroying common HttpClient
2023-05-30 18:48:33,523 WARN [Thread-8] c.a.nacos.common.notify.NotifyCenter [NotifyCenter.java : 136] [NotifyCenter] Start destroying Publisher
2023-05-30 18:48:33,524 WARN [Thread-8] c.a.nacos.common.notify.NotifyCenter [NotifyCenter.java : 153] [NotifyCenter] Destruction of the end
2023-05-30 18:48:33,549 WARN [Thread-2] c.a.n.c.http.HttpClientBeanHolder [HttpClientBeanHolder.java : 114] [HttpClientBeanHolder] Destruction of the end
2023-05-30 18:48:33,546 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:162)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
    at java.net.Socket.connect(Socket.java:606)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
    at sun.net.www.http.HttpClient.New(HttpClient.java:339)
    at sun.net.www.http.HttpClient.New(HttpClient.java:357)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1226)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:990)
    at com.xxl.job.core.util.XxlJobRemotingUtil.postBody(XxlJobRemotingUtil.java:94)
    at com.xxl.job.core.biz.client.AdminBizClient.registry(AdminBizClient.java:41)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:48)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:48:33,549 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-05-30 18:48:33,720 INFO [SpringApplicationShutdownHook] io.undertow [Undertow.java : 259] stopping server: Undertow - 2.2.18.Final
2023-05-30 18:48:33,775 INFO [SpringApplicationShutdownHook] io.undertow.servlet [ServletContextImpl.java : 382] Destroying Spring FrameworkServlet 'dispatcherServlet'
2023-05-30 18:48:33,788 ERROR [SpringApplicationShutdownHook] c.a.cloud.nacos.discovery.NacosWatch [NacosWatch.java : 180] namingService unsubscribe failed, properties:NacosDiscoveryProperties{serverAddr='127.0.0.1:8848', username='', password='', endpoint='', namespace='', watchDelay=30000, logName='', service='ubcs-xxljob', weight=1.0, clusterName='DEFAULT', group='DEFAULT_GROUP', namingLoadCacheAtStart='false', metadata={preserved.register.source=SPRING_CLOUD}, registerEnabled=true, ip='192.168.237.1', networkInterface='', port=36009, secure=false, accessKey='', secretKey='', heartBeatInterval=null, heartBeatTimeout=null, ipDeleteTimeout=null, instanceEnabled=true, ephemeral=true, failureToleranceEnabled=false}, ipDeleteTimeout=null, failFast=true}
2023-06-02 21:03:29,474 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 54] >>>>>>>>>>> xxl-job registry fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registry, content=null]
2023-06-02 21:03:45,054 WARN [Thread-12] c.a.nacos.common.notify.NotifyCenter [NotifyCenter.java : 136] [NotifyCenter] Start destroying Publisher
2023-06-02 21:03:45,055 WARN [Thread-5] c.a.n.c.http.HttpClientBeanHolder [HttpClientBeanHolder.java : 108] [HttpClientBeanHolder] Start destroying common HttpClient
2023-06-02 21:03:45,056 WARN [Thread-12] c.a.nacos.common.notify.NotifyCenter [NotifyCenter.java : 153] [NotifyCenter] Destruction of the end
2023-06-02 21:03:45,057 WARN [Thread-5] c.a.n.c.http.HttpClientBeanHolder [HttpClientBeanHolder.java : 114] [HttpClientBeanHolder] Destruction of the end
2023-06-02 21:03:45,094 INFO [SpringApplicationShutdownHook] io.undertow [Undertow.java : 259] stopping server: Undertow - 2.2.18.Final
2023-06-02 21:03:45,109 INFO [SpringApplicationShutdownHook] io.undertow.servlet [ServletContextImpl.java : 382] Destroying Spring FrameworkServlet 'dispatcherServlet'
2023-06-02 21:03:45,115 ERROR [SpringApplicationShutdownHook] c.a.cloud.nacos.discovery.NacosWatch [NacosWatch.java : 180] namingService unsubscribe failed, properties:NacosDiscoveryProperties{serverAddr='127.0.0.1:8848', username='', password='', endpoint='', namespace='', watchDelay=30000, logName='', service='ubcs-xxljob', weight=1.0, clusterName='DEFAULT', group='DEFAULT_GROUP', namingLoadCacheAtStart='false', metadata={preserved.register.source=SPRING_CLOUD}, registerEnabled=true, ip='192.168.237.1', networkInterface='', port=36009, secure=false, accessKey='', secretKey='', heartBeatInterval=null, heartBeatTimeout=null, ipDeleteTimeout=null, instanceEnabled=true, ephemeral=true, failureToleranceEnabled=false}, ipDeleteTimeout=null, failFast=true}
java.lang.IllegalStateException: UT015023: This Context has been already destroyed
    at io.undertow.servlet.spec.ServletContextImpl.getDeploymentInfo(ServletContextImpl.java:211)
    at io.undertow.servlet.spec.ServletContextImpl.getInitParameterNames(ServletContextImpl.java:449)
@@ -520,8 +295,8 @@
    at java.lang.Iterable.forEach(Iterable.java:75)
    at org.springframework.boot.SpringApplicationShutdownHook.run(SpringApplicationShutdownHook.java:114)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:48:33,796 INFO [Thread-51] com.xxl.rpc.remoting.net.Server [NettyHttpServer.java : 74] >>>>>>>>>>> xxl-rpc remoting server stop.
2023-05-30 18:48:35,829 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
2023-06-02 21:03:45,118 INFO [Thread-47] com.xxl.rpc.remoting.net.Server [NettyHttpServer.java : 74] >>>>>>>>>>> xxl-rpc remoting server stop.
2023-06-02 21:03:47,157 ERROR [xxl-job, executor ExecutorRegistryThread] c.x.job.core.util.XxlJobRemotingUtil [XxlJobRemotingUtil.java : 146] Connection refused: connect
java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81)
@@ -545,36 +320,36 @@
    at com.xxl.job.core.biz.client.AdminBizClient.registryRemove(AdminBizClient.java:46)
    at com.xxl.job.core.thread.ExecutorRegistryThread$1.run(ExecutorRegistryThread.java:84)
    at java.lang.Thread.run(Thread.java:748)
2023-05-30 18:48:35,831 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 90] >>>>>>>>>>> xxl-job registry-remove fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registryRemove, content=null]
2023-05-30 18:48:35,831 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 105] >>>>>>>>>>> xxl-job, executor registry thread destory.
2023-05-30 18:48:35,831 INFO [SpringApplicationShutdownHook] com.xxl.rpc.remoting.net.Server [NettyHttpServer.java : 110] >>>>>>>>>>> xxl-rpc remoting server destroy success.
2023-05-30 18:48:35,832 INFO [xxl-job, executor TriggerCallbackThread] c.x.j.c.thread.TriggerCallbackThread [TriggerCallbackThread.java : 96] >>>>>>>>>>> xxl-job, executor callback thread destory.
2023-05-30 18:48:35,832 INFO [Thread-50] c.x.j.c.thread.TriggerCallbackThread [TriggerCallbackThread.java : 126] >>>>>>>>>>> xxl-job, executor retry callback thread destory.
2023-05-30 18:48:35,846 INFO [SpringApplicationShutdownHook] c.a.c.n.r.NacosServiceRegistry [NacosServiceRegistry.java : 94] De-registering from Nacos Server now...
2023-05-30 18:48:35,848 WARN [SpringApplicationShutdownHook] o.s.c.a.CommonAnnotationBeanPostProcessor [InitDestroyAnnotationBeanPostProcessor.java : 185] Destroy method on bean with name 'nacosAutoServiceRegistration' threw an exception: java.lang.IllegalStateException: UT015023: This Context has been already destroyed
2023-05-30 18:48:35,849 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 255] com.alibaba.nacos.client.naming.cache.ServiceInfoHolder do shutdown begin
2023-05-30 18:48:35,849 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [FailoverReactor.java : 140] com.alibaba.nacos.client.naming.backups.FailoverReactor do shutdown begin
2023-05-30 18:48:35,850 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [FailoverReactor.java : 142] com.alibaba.nacos.client.naming.backups.FailoverReactor do shutdown stop
2023-05-30 18:48:35,850 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 257] com.alibaba.nacos.client.naming.cache.ServiceInfoHolder do shutdown stop
2023-05-30 18:48:35,850 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingClientProxyDelegate.java : 182] com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate do shutdown begin
2023-05-30 18:48:35,850 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [ServiceInfoUpdateService.java : 130] com.alibaba.nacos.client.naming.core.ServiceInfoUpdateService do shutdown begin
2023-05-30 18:48:36,172 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [ServiceInfoUpdateService.java : 132] com.alibaba.nacos.client.naming.core.ServiceInfoUpdateService do shutdown stop
2023-05-30 18:48:36,172 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [ServerListManager.java : 192] com.alibaba.nacos.client.naming.core.ServerListManager do shutdown begin
2023-05-30 18:48:36,173 WARN [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingHttpClientManager.java : 74] [NamingHttpClientManager] Start destroying NacosRestTemplate
2023-05-30 18:48:36,173 WARN [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingHttpClientManager.java : 81] [NamingHttpClientManager] Destruction of the end
2023-05-30 18:48:36,173 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [ServerListManager.java : 197] com.alibaba.nacos.client.naming.core.ServerListManager do shutdown stop
2023-05-30 18:48:36,173 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingHttpClientProxy.java : 527] com.alibaba.nacos.client.naming.remote.http.NamingHttpClientProxy do shutdown begin
2023-05-30 18:48:36,173 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [BeatReactor.java : 162] com.alibaba.nacos.client.naming.beat.BeatReactor do shutdown begin
2023-05-30 18:48:36,173 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [BeatReactor.java : 164] com.alibaba.nacos.client.naming.beat.BeatReactor do shutdown stop
2023-05-30 18:48:36,173 WARN [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingHttpClientManager.java : 74] [NamingHttpClientManager] Start destroying NacosRestTemplate
2023-05-30 18:48:36,173 WARN [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingHttpClientManager.java : 81] [NamingHttpClientManager] Destruction of the end
2023-05-30 18:48:36,174 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingHttpClientProxy.java : 530] com.alibaba.nacos.client.naming.remote.http.NamingHttpClientProxy do shutdown stop
2023-05-30 18:48:36,174 INFO [SpringApplicationShutdownHook] c.alibaba.nacos.common.remote.client [RpcClient.java : 453] Shutdown rpc client, set status to shutdown
2023-05-30 18:48:36,175 INFO [SpringApplicationShutdownHook] c.alibaba.nacos.common.remote.client [RpcClient.java : 455] Shutdown client event executor java.util.concurrent.ScheduledThreadPoolExecutor@65207516[Running, pool size = 2, active threads = 2, queued tasks = 0, completed tasks = 0]
2023-05-30 18:48:36,175 INFO [SpringApplicationShutdownHook] c.alibaba.nacos.common.remote.client [RpcClient.java : 592] Close current connection 1685443224475_127.0.0.1_63184
2023-05-30 18:48:36,176 INFO [nacos-grpc-client-executor-127.0.0.1-129] c.a.n.c.r.client.grpc.GrpcClient [LoggerUtils.java : 60] [1685443224475_127.0.0.1_63184]Ignore complete event,isRunning:false,isAbandon=false
2023-05-30 18:48:36,183 INFO [SpringApplicationShutdownHook] c.a.n.c.r.client.grpc.GrpcClient [GrpcClient.java : 129] Shutdown grpc executor java.util.concurrent.ThreadPoolExecutor@16633451[Running, pool size = 3, active threads = 0, queued tasks = 0, completed tasks = 130]
2023-05-30 18:48:36,183 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingGrpcRedoService.java : 267] Shutdown grpc redo service executor java.util.concurrent.ScheduledThreadPoolExecutor@427b75af[Running, pool size = 1, active threads = 0, queued tasks = 1, completed tasks = 163]
2023-05-30 18:48:36,184 INFO [SpringApplicationShutdownHook] c.a.n.c.a.r.i.CredentialWatcher [CredentialWatcher.java : 105] [null] CredentialWatcher is stopped
2023-05-30 18:48:36,184 INFO [SpringApplicationShutdownHook] c.a.n.c.a.r.i.CredentialService [CredentialService.java : 99] [null] CredentialService is freed
2023-05-30 18:48:36,184 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingClientProxyDelegate.java : 189] com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate do shutdown stop
2023-06-02 21:03:47,157 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 90] >>>>>>>>>>> xxl-job registry-remove fail, registryParam:RegistryParam{registryGroup='EXECUTOR', registryKey='blade-xxljob', registryValue='127.0.0.1:7018'}, registryResult:ReturnT [code=500, msg=xxl-rpc remoting error(Connection refused: connect), for url : http://127.0.0.1:37012/xxl-job-admin/api/registryRemove, content=null]
2023-06-02 21:03:47,158 INFO [xxl-job, executor ExecutorRegistryThread] c.x.j.c.t.ExecutorRegistryThread [ExecutorRegistryThread.java : 105] >>>>>>>>>>> xxl-job, executor registry thread destory.
2023-06-02 21:03:47,159 INFO [SpringApplicationShutdownHook] com.xxl.rpc.remoting.net.Server [NettyHttpServer.java : 110] >>>>>>>>>>> xxl-rpc remoting server destroy success.
2023-06-02 21:03:47,160 INFO [xxl-job, executor TriggerCallbackThread] c.x.j.c.thread.TriggerCallbackThread [TriggerCallbackThread.java : 96] >>>>>>>>>>> xxl-job, executor callback thread destory.
2023-06-02 21:03:47,161 INFO [Thread-46] c.x.j.c.thread.TriggerCallbackThread [TriggerCallbackThread.java : 126] >>>>>>>>>>> xxl-job, executor retry callback thread destory.
2023-06-02 21:03:47,176 INFO [SpringApplicationShutdownHook] c.a.c.n.r.NacosServiceRegistry [NacosServiceRegistry.java : 94] De-registering from Nacos Server now...
2023-06-02 21:03:47,179 WARN [SpringApplicationShutdownHook] o.s.c.a.CommonAnnotationBeanPostProcessor [InitDestroyAnnotationBeanPostProcessor.java : 185] Destroy method on bean with name 'nacosAutoServiceRegistration' threw an exception: java.lang.IllegalStateException: UT015023: This Context has been already destroyed
2023-06-02 21:03:47,181 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 255] com.alibaba.nacos.client.naming.cache.ServiceInfoHolder do shutdown begin
2023-06-02 21:03:47,181 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [FailoverReactor.java : 140] com.alibaba.nacos.client.naming.backups.FailoverReactor do shutdown begin
2023-06-02 21:03:47,182 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [FailoverReactor.java : 142] com.alibaba.nacos.client.naming.backups.FailoverReactor do shutdown stop
2023-06-02 21:03:47,182 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [ServiceInfoHolder.java : 257] com.alibaba.nacos.client.naming.cache.ServiceInfoHolder do shutdown stop
2023-06-02 21:03:47,183 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingClientProxyDelegate.java : 182] com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate do shutdown begin
2023-06-02 21:03:47,183 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [ServiceInfoUpdateService.java : 130] com.alibaba.nacos.client.naming.core.ServiceInfoUpdateService do shutdown begin
2023-06-02 21:03:47,513 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [ServiceInfoUpdateService.java : 132] com.alibaba.nacos.client.naming.core.ServiceInfoUpdateService do shutdown stop
2023-06-02 21:03:47,514 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [ServerListManager.java : 192] com.alibaba.nacos.client.naming.core.ServerListManager do shutdown begin
2023-06-02 21:03:47,514 WARN [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingHttpClientManager.java : 74] [NamingHttpClientManager] Start destroying NacosRestTemplate
2023-06-02 21:03:47,514 WARN [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingHttpClientManager.java : 81] [NamingHttpClientManager] Destruction of the end
2023-06-02 21:03:47,515 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [ServerListManager.java : 197] com.alibaba.nacos.client.naming.core.ServerListManager do shutdown stop
2023-06-02 21:03:47,515 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingHttpClientProxy.java : 527] com.alibaba.nacos.client.naming.remote.http.NamingHttpClientProxy do shutdown begin
2023-06-02 21:03:47,515 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [BeatReactor.java : 162] com.alibaba.nacos.client.naming.beat.BeatReactor do shutdown begin
2023-06-02 21:03:47,515 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [BeatReactor.java : 164] com.alibaba.nacos.client.naming.beat.BeatReactor do shutdown stop
2023-06-02 21:03:47,516 WARN [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingHttpClientManager.java : 74] [NamingHttpClientManager] Start destroying NacosRestTemplate
2023-06-02 21:03:47,516 WARN [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingHttpClientManager.java : 81] [NamingHttpClientManager] Destruction of the end
2023-06-02 21:03:47,516 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingHttpClientProxy.java : 530] com.alibaba.nacos.client.naming.remote.http.NamingHttpClientProxy do shutdown stop
2023-06-02 21:03:47,516 INFO [SpringApplicationShutdownHook] c.alibaba.nacos.common.remote.client [RpcClient.java : 453] Shutdown rpc client, set status to shutdown
2023-06-02 21:03:47,516 INFO [SpringApplicationShutdownHook] c.alibaba.nacos.common.remote.client [RpcClient.java : 455] Shutdown client event executor java.util.concurrent.ScheduledThreadPoolExecutor@63592bec[Running, pool size = 2, active threads = 2, queued tasks = 0, completed tasks = 0]
2023-06-02 21:03:47,517 INFO [SpringApplicationShutdownHook] c.alibaba.nacos.common.remote.client [RpcClient.java : 592] Close current connection 1685710810072_127.0.0.1_63146
2023-06-02 21:03:47,518 INFO [nacos-grpc-client-executor-127.0.0.1-60] c.a.n.c.r.client.grpc.GrpcClient [LoggerUtils.java : 60] [1685710810072_127.0.0.1_63146]Ignore complete event,isRunning:false,isAbandon=false
2023-06-02 21:03:47,526 INFO [SpringApplicationShutdownHook] c.a.n.c.r.client.grpc.GrpcClient [GrpcClient.java : 129] Shutdown grpc executor java.util.concurrent.ThreadPoolExecutor@f3db5ef[Running, pool size = 3, active threads = 0, queued tasks = 0, completed tasks = 61]
2023-06-02 21:03:47,526 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingGrpcRedoService.java : 267] Shutdown grpc redo service executor java.util.concurrent.ScheduledThreadPoolExecutor@60545287[Running, pool size = 1, active threads = 0, queued tasks = 1, completed tasks = 72]
2023-06-02 21:03:47,526 INFO [SpringApplicationShutdownHook] c.a.n.c.a.r.i.CredentialWatcher [CredentialWatcher.java : 105] [null] CredentialWatcher is stopped
2023-06-02 21:03:47,527 INFO [SpringApplicationShutdownHook] c.a.n.c.a.r.i.CredentialService [CredentialService.java : 99] [null] CredentialService is freed
2023-06-02 21:03:47,527 INFO [SpringApplicationShutdownHook] com.alibaba.nacos.client.naming [NamingClientProxyDelegate.java : 189] com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate do shutdown stop
Source/data/applogs/xxl-job/xxl-job-executor-sample-springboot.log.2023-05-30.zip
Binary files differ