xiejun
2023-09-11 8c2bc4c9cfac26210dd9018482586112469c44c8
Merge remote-tracking branch 'origin/master'
已修改28个文件
已添加5个文件
1385 ■■■■ 文件已修改
Source/UBCS-WEB/src/components/Master/MasterTree.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/code-dialog-page/cloneOtherBasicSecDialog.vue 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/code-dialog-page/cloneRuleDialog.vue 222 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/dockingSearch/VciDockingSearch.vue 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebRefer.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/classisyValueTreeDialog.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/cloneCodeRuleDialogOption.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/main.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/MasterData/items.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/code/code.vue 325 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/docking/loge.vue 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeFixedValue.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | 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/util/DefaultAttrAssimtUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeFixedValueService.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeRuleService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IPasswordFreeLoginService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java 111 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java 81 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Master/MasterTree.vue
@@ -15,7 +15,7 @@
  props: {
    pageSize: {
      type: String,
      default: "10"
      default: "100"
    },
    currentPage: {
      type: String,
Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue
@@ -93,7 +93,7 @@
          <ResembleQueryDialog :codeClassifyOid="codeClassifyOid" :codeRuleOid="this.codeRuleOid" :rowOid="rowOid"
                               :templateOid="templateOid" :visible.sync="similarVisible"></ResembleQueryDialog>
          <div class="block" style="display: flex; justify-content: flex-end">
            <el-pagination :current-page="page.currentPage" :page-size="page.pageSizes" :page-sizes="page.pageSizes"
            <el-pagination :current-page="page.currentPage" :page-size="page.pageSize" :page-sizes="page.pageSizes"
                           :total="page.total" layout="total, sizes, prev, pager, next, jumper"
                           @size-change="handleSizeChange"
                           @current-change="handleCurrentChange">
Source/UBCS-WEB/src/components/code-dialog-page/cloneOtherBasicSecDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,247 @@
<template>
  <el-dialog
    :visible.sync="cloneOtherCodeRuleSettingBox"
    append-to-body
    class="avue-dialog avue-dialog--top"
    style="height: 100vh"
    @close="closeCloneOtherBasicSecDialog"
    title="克隆编码规则的基础信息"
    top="-3%"
    width="800px">
    <div>
      <el-row>
        <p
          style="margin-top: -20px;
            margin-bottom: 4px;
            font-weight: 570;
            font-size: 19px;
            color: #0e2d5f;">
          ç¼–码规则
        </p>
        <avue-crud
          ref="crudCloneCodeRuleOther"
          :data="codeRuleData"
          :option="cloneCodeRuleOption"
          :page.sync="codeRulePage"
          :table-loading="codeRuleloading"
          class="other-clone-coderule-crud"
          @row-click="codeOtherCloneRuleRowClick"
          @selection-change="selectionOtherCloneCodeRuleChange"
          @search-change="searchOtherCloneChange"
          @search-reset="searchOtherCloneReset"
          @on-load="onLoad">
          <template #radio="{row}">
            <el-radio v-model="selectOtherCodeRuleRowIndex"
                :label="row.$index">&nbsp;</el-radio>
          </template>
        </avue-crud>
      </el-row>
      <el-row style="margin-top: 10px; border-top: 1px solid #ebeef5">
        <p
          style="
            margin-top: 10px;
            margin-bottom: 4px;
            font-weight: 570;
            font-size: 19px;
            color: #0e2d5f;
          "
        >
          ç æ®µä¿¡æ¯
        </p>
        <avue-crud
          ref="crudCloneCodeBasicOther"
          :data="cloneBasicData"
          :option="cloneBasicOption"
          :table-loading="codeBasicloading"
          class="other-clone-codebasic-crud"
          @row-click="codeOtherCloneBasicRowClick"
          @selection-change="selectionOtherCloneCodeBasicChange">
        </avue-crud>
      </el-row>
    </div>
    <div slot="footer" class="dialog-footer" style="height: 50px">
      <el-button type="primary" @click="saveOtherCodeBasic" :loading="cloneSaveLoding">保 å­˜</el-button>
      <el-button @click="cloneOtherCodeRuleSettingBox = false">取 æ¶ˆ</el-button>
    </div>
  </el-dialog>
</template>
<script>
import cloneBasicOption from "@/const/code/cloneBasicDialogOption";
import cloneCodeRuleOption from "@/const/code/cloneCodeRuleDialogOption";
import {gridCodeRule} from "@/api/code/mdmrule";
import {gridCodeBasicSec,cloneCodeBasic} from "@/api/code/codebasic";
export default {
    name: "cloneRuleDialog",
    props: {
        // å¯¹è¯æ¡†æ˜¾ç¤ºéšè—æŽ§åˆ¶
        visible: {
            type: "Boolean",
            default: false,
        },
        // è¢«å…‹éš†çš„规则oid
        quiltCloneCodeRule:{
            type: "Object",
        }
    },
    data() {
        return {
            cloneOtherCodeRuleSettingBox: this.visible,
            /*克隆编码规则对话框控制变量*/
            cloneBasicOption: cloneBasicOption,
            cloneCodeRuleOption: cloneCodeRuleOption,
            selectionOtherCloneCodeBasicList: [], // æ­¤ç•Œé¢å†…当前选中的基础码段
            selectionOtherCloneCodeRuleList: {}, // æ­¤ç•Œé¢å†…当前选中的编码规则
            selectOtherCodeRuleRowIndex: '',
            cloneOtherQuery: {}, // æŸ¥è¯¢æ¡ä»¶å¯¹è±¡
            codeRulePage: {
                pageSize: 10,
                currentPage: 1,
                total: 0,
            },
            codeRuleloading: false,
            codeRuleData: [],
            codeBasicloading: false,
            cloneBasicData: [],
            cloneSaveLoding: false,
        };
    },
    watch: {
        // ç›‘听父组件传的窗口显示隐藏的值,以及值的回填
        visible() {
            //console.log(this.visible);
            if(this.visible){
                //console.log(this.quiltCloneCodeRule);
                let conditionMap = {};
                conditionMap["conditionMap[oid_notequal]"] = this.quiltCloneCodeRule.oid.trim();
                this.cloneOtherQuery = conditionMap;
                this.onLoad(this.codeRulePage);
            }else{
                this.codeRuleData = [];
                this.cloneBasicData = [];
            }
            this.cloneOtherCodeRuleSettingBox = this.visible;
        },
        selectionOtherCloneCodeRuleList(){
            this.loadBasic(this.selectionOtherCloneCodeRuleList);
        },
    },
    methods: {
        //关闭窗口时触发
        closeCloneOtherBasicSecDialog(){
            this.$emit('update:visible',false);
        },
        /** ä»Žå…¶ä»–编码规则中克隆码段对话框-单击编码规则实现行选择*/
        codeOtherCloneRuleRowClick(row) {
            this.selectOtherCodeRuleRowIndex = row.$index
            this.selectionOtherCloneCodeRuleList = row;
            this.loadBasic(row);
        },
        /** ä»Žå…¶ä»–编码规则中克隆码段对话框-单击基础码段实现行选择*/
        codeOtherCloneBasicRowClick(row) {
            this.$refs.crudCloneCodeBasicOther.toggleSelection();
            this.selectionOtherCloneCodeBasicList = row;
            this.$refs.crudCloneCodeBasicOther.setCurrentRow(row);
            this.$refs.crudCloneCodeBasicOther.toggleRowSelection(row); //选中当前行
        },
        selectionOtherCloneCodeBasicChange(list) {
            this.selectionOtherCloneCodeBasicList = list;
            this.$refs.crudCloneCodeBasicOther.setCurrentRow(
                this.selectionOtherCloneCodeBasicList.slice(-1)[0]
            );
        },
        /** ä»Žå…¶ä»–规则克隆码段界面重置搜索功能 */
        searchOtherCloneReset() {
            let conditionMap = {};
            conditionMap["conditionMap[oid_notequal]"] = this.quiltCloneCodeRule.oid.trim();
            this.cloneOtherQuery = conditionMap;
            this.onLoad(this.codeRulePage);
        },
        /** ä»Žå…¶ä»–规则克隆码段界面搜索功能*/
        searchOtherCloneChange(params, done) {
            this.codeRulePage.currentPage = 1;
            // å¤šä¸ªconditionMap这样传参,快速查询默认采用模糊查询
            if (params) {
                Object.keys(params).forEach((key) => {
                    this.cloneOtherQuery["conditionMap" + "[" + key + "_like]"] =
                    params[key].trim();
                });
            }
            this.onLoad(this.codeRulePage,this.cloneOtherQuery);
            done();
        },
        /** ä¿å­˜ä»Žå…¶ä»–编码规则中克隆码段信息*/
        async saveOtherCodeBasic() {
            this.cloneSaveLoding = true;
            let oid = this.quiltCloneCodeRule.oid;
            let fromDialogPkCodebasic = this.selectionOtherCloneCodeBasicList;
            if (fromDialogPkCodebasic.length <= 0) {
                this.$message.warning("请选择码段数据!");
                return;
            }
            let oidArr = [];
            fromDialogPkCodebasic.forEach((ele) => {
                oidArr.push(ele.oid);
            });
            let data = {
                pkCodeRule: oid,
                oidArr: oidArr.join(","),
            };
            //console.log(data);
            await cloneCodeBasic(data).then( () => {
                this.cloneOtherCodeRuleSettingBox = false;
                this.$message({
                    type: "success",
                    message: "操作成功!",
                });
                // è°ƒç”¨çˆ¶ç»„件方法重新加载码段表
                this.$emit('refreshRuleTable',{"currentPage":1,"pageSize":10});
            },(error) => {
                window.console.log(error);
            });
            this.cloneSaveLoding = false;
        },
        /** ç‚¹å‡»è§¦å‘加载基础码段信息*/
        loadBasic(row) {
            this.codeBasicloading = true;
            // console.log(row)
            if (row != "" && row != null && row !="undefined") {
                let conditionMap = {};
                conditionMap["conditionMap[pkCodeRule]"] = row.oid.trim();
                gridCodeBasicSec(1, -1, conditionMap).then((res) => {
                    const data = res.data.data;
                    this.cloneBasicData = data.records;
                    this.codeBasicloading = false;
                });
            }else {
                this.cloneBasicData = [];
                this.codeBasicloading = false;
            }
        },
        // è§„则表格相关方法
        onLoad(page, params = {}) {
            this.codeRuleloading = true;
            gridCodeRule(page.currentPage, page.pageSize, Object.assign({},this.cloneOtherQuery, params)).then((res) => {
                // console.log(res.data);
                const data = res.data.data;
                this.codeRulePage.total = data.total;
                this.codeRuleData = data.records;
                this.codeRuleloading = false;
                if(this.codeRuleData.length > 0) {
                    this.$nextTick(() => {
                        this.selectOtherCodeRuleRowIndex = this.codeRuleData[0].$index
                        this.selectionOtherCloneCodeRuleList = this.codeRuleData[0];
                    });
                }else{
                    this.cloneBasicData = [];
                }
            });
        },
    }
};
</script>
<style>
</style>
Source/UBCS-WEB/src/components/code-dialog-page/cloneRuleDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,222 @@
<template>
  <el-dialog
      :visible.sync="cloneSettingBox"
      append-to-body
      class="avue-dialog avue-dialog--top"
      style="height: 100vh"
      title="克隆编码规则"
      top="-3%"
      @close="closeCloneDialog"
      width="800px">
      <div>
        <el-row>
          <el-form ref="form" :inline="true" :model="form" label-width="80px">
            <el-form-item label="编号" required>
              <el-input v-model="cloneCodeRuleForm.id"></el-input>
            </el-form-item>
            <el-form-item label="名称" required>
              <el-input v-model="cloneCodeRuleForm.name"></el-input>
            </el-form-item>
            <el-form-item label="依据" required>
              <el-input v-model="cloneCodeRuleForm.accordingTo"></el-input>
            </el-form-item>
            <el-form-item class="clone-input-textarea" label="描述">
              <el-input
                v-model="cloneCodeRuleForm.description"
                :autosize="{ minRows: 3, maxRows: 5 }"
                type="textarea"
              ></el-input>
            </el-form-item>
          </el-form>
        </el-row>
        <el-row>
          <p
            style="
              margin: 0 0px 16px 50%;
              font-weight: 500;
              font-size: 20px;
              color: #000;">
            ç æ®µç®¡ç†
          </p>
          <avue-crud
            :data="cloneData"
            :option="cloneOption"
            :table-loading="cloneTableLoading"
            class="clone-avue-crud">
            <template slot="menu" slot-scope="scope">
              <el-button
                v-show="scope.row.orderNum > 1"
                icon="el-icon-arrow-up"
                plain
                size="small"
                type="text"
                @click="upOrderNum(scope.row)"
                >上移
              </el-button>
              <el-button
                icon="el-icon-arrow-down"
                plain
                size="small"
                type="text"
                @click="downOrderNum(scope.row)"
                >下移
              </el-button>
            </template>
          </avue-crud>
        </el-row>
      </div>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="saveCloneCodeRule" :loading="cloneCodeRuleLoading">保 å­˜</el-button>
        <el-button @click="cloneSettingBox = false">取 æ¶ˆ</el-button>
      </div>
  </el-dialog>
</template>
<script>
import cloneOption from "@/const/code/cloneOption";
import {clone} from "@/api/code/mdmrule";
import {downOrderNum, upOrderNum, gridCodeBasicSec} from "@/api/code/codebasic";
export default {
    name: "cloneRuleDialog",
    props: {
        // å¯¹è¯æ¡†æ˜¾ç¤ºéšè—æŽ§åˆ¶
        visible: {
            type: "Boolean",
            default: false,
        },
        ruleData:{
            type: "Object",
        }
    },
    data() {
        return {
            cloneSettingBox: this.visible,
            /*克隆编码规则对话框控制变量*/
            cloneTableLoading: false,
            cloneCodeRuleLoading: false,
            cloneOption: cloneOption,
            cloneData: [],
            cloneCodeRuleForm: {
                id: "",
                name: "",
                accordingTo: "",
                description: "",
            },
        };
    },
    watch: {
        // ç›‘听父组件传的窗口显示隐藏的值,以及值的回填
        visible() {
            //console.log(this.visible);
            if(this.visible){
                this.loadBasic(this.ruleData);
                this.cloneCodeRuleForm.id = this.ruleData.id;
                this.cloneCodeRuleForm.name = this.ruleData.name;
                this.cloneCodeRuleForm.accordingTo = this.ruleData.accordingTo;
                this.cloneCodeRuleForm.description = this.ruleData.description;
            }
            this.cloneSettingBox = this.visible;
        },
    },
    methods: {
        //关闭对话框
        closeCloneDialog(){
            this.$emit('update:visible',false);
            this.cloneData = [];
        },
        /** ä¸Šç§»ä¸‹ç§»åŸºç¡€ç æ®µ*/
        async upOrderNum(row) {
            if (this.ruleData.lcStatus != "Editing") {
                this.$message.warning(
                "只有编码规则的状态是 [编辑中] çš„æ—¶å€™ï¼Œæ‰èƒ½è°ƒæ•´ç æ®µé¡ºåº!"
                );
                return;
            }
            if (row.oid == null || row.oid == "") {
                this.$message.warning("未获取到必填参数!");
                return;
            }
            await upOrderNum(row.oid).then(() => {
                this.loadBasic(this.ruleData);
                this.$message({
                type: "success",
                message: "操作成功!",
                });
            });
        },
        downOrderNum(row) {
            let codeRuleOid = this.ruleData.oid;
            if (this.ruleData.lcStatus != "Editing") {
                this.$message.warning(
                "只有编码规则的状态是 [编辑中] çš„æ—¶å€™ï¼Œæ‰èƒ½è°ƒæ•´ç æ®µé¡ºåº!"
                );
                return;
            }
            if (row.oid == null || row.oid == "") {
                this.$message.warning("未获取到必填参数!");
                return;
            }
            downOrderNum(row.oid).then(() => {
                this.loadBasic({ oid: codeRuleOid });
                this.$message({
                type: "success",
                message: "操作成功!",
                });
            });
        },
        /** ç‚¹å‡»è§¦å‘加载基础码段信息*/
        loadBasic(row) {
            this.cloneTableLoading = true;
            if (row != "" || row != null) {
                let conditionMap = {};
                conditionMap["conditionMap[pkCodeRule]"] = row.oid.trim();
                gridCodeBasicSec(1, -1, conditionMap).then((res) => {
                    const data = res.data.data;
                    this.cloneData = data.records;
                    this.cloneTableLoading = false;
                });
            }
        },
         /** å…‹éš†ç¼–码规则保存功能*/
        saveCloneCodeRule() {
            this.cloneCodeRuleLoading = true;
            let form = this.cloneCodeRuleForm;
            if (form.id.trim() == "") {
                this.$message.warning("编号不能为空!");
                return;
            }
            if (form.name.trim() == "") {
                this.$message.warning("码值不能为空!");
                return;
            }
            let data = Object.assign({}, form, {
                oid: "",
                createTime: new Date().getTime(),
                ts: new Date(this.ruleData.ts).getTime(),
                lcStatus: "Editing",
                elements: this.cloneData,
            });
            // console.log(data);
            this.cloneCodeRuleLoading = true;
            clone(data).then(() => {
                this.cloneSettingBox = false;
                // è°ƒç”¨çˆ¶ç»„件方法重新加载码段表
                this.$emit('refreshRuleTable',{"currentPage":1,"pageSize":10});
                this.$message({
                    type: "success",
                    message: "操作成功!",
                });
            },
            (error) => {
                window.console.log(error);
            });
        },
    }
}
</script>
<style>
</style>
Source/UBCS-WEB/src/components/dockingSearch/VciDockingSearch.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
<template>
  <div style="display: flex" >
    <el-form :inline="true" :model="formInline" class="demo-form-inline">
      <el-form-item label="类型:" size="small">
        <el-select v-model="formInline.type" placeholder="请输入类型" @change="SelectChange">
          <el-option :label="item.label" :value="item.value" v-for="item in SearchObject.searchData" ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item v-if="typeFlag" size="small">
        <el-select v-model="formInline.check" placeholder="请选择分类">
          <el-option label="1" value="0"></el-option>
          <el-option label="2" value="1"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item size="small" v-if="dateFlag">
        <el-date-picker
          v-model="formInline.Date"
          type="date"
          placeholder="选择日期时间">
        </el-date-picker>
      </el-form-item>
      <el-form-item size="small" >
        <el-input v-model="formInline.text" placeholder="请输入内容" @keyup.enter.native="SaveHandler"></el-input>
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
import {getList} from "@/api/docking/loge";
export default {
  name: "VciDockingSearch",
  props:['SearchObject','page'],
  data() {
    return {
      typeFlag:false,
      dateFlag:false,
      formInline:{
        type:'',
        check:'',
        text:'',
        Date:''
      },
    }
  },
  methods:{
    SelectChange(val){
      if(this.SearchObject.type === 'loge'){
        if(val === 5){
          this.typeFlag=true;
        }else {
          this.typeFlag=false;
        }
        if(val === 6){
          this.dateFlag=true;
        }else {
          this.dateFlag=false;
        }
      }
    },
    SaveHandler(){
      let name = this.SearchObject.searchData[this.formInline.type].prop;
      getList(this.page.currentPage, this.page.pageSize, {[name]: this.formInline.text}).then(res => {
        console.log(res);
      });
    }
  }
}
</script>
<style scoped>
</style>
Source/UBCS-WEB/src/components/refer/vciWebRefer.vue
@@ -25,12 +25,12 @@
    };
  },
  created() {
    console.log('referer')
    if (!this.referConfig.options) {
      this.referConfig.options = {
        isMuti: false
      }
    }
    console.log('referConfig',this.referConfig)
  },
  mounted() {
    var title = this.referConfig.title || '';
Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue
@@ -158,22 +158,34 @@
          label: '英文名称',
          sortable: true,
          width: 150,
          search: true
          search: true,
          formatter:function (d){
            return d.id || d.data.id
          }
        }, {
          prop: 'name',
          label: '中文名称',
          sortable: true,
          width: 150,
          search: true
          search: true,
          formatter:function (d){
            return d.name || d.data.name
          }
        }, {
          prop: 'description',
          label: '描述',
          width: 250
          width: 250,
          formatter:function (d){
            return d.description || d.data.description
          }
        }, {
          prop: 'secretGradeText',
          label: '密级',
          width: 60,
          hidden: (!this.controllerSecret)
          hidden: (!this.controllerSecret),
          formatter:function (d){
            return d.secretGradeText || d.data.secretGradeText
          }
        }];
      } else {
        this.option.column = this.options.tableConfig.cols.map(item => {
@@ -181,6 +193,16 @@
            let formatter=item.template || item.templet;
            if(typeof formatter == "string" && formatter !=''){
              formatter=eval("(" + formatter + ")")
            }else{
              formatter=function (d){
                if(d[item.field]!=undefined){
                  return d[item.field]
                }else if(d.data[item.field] !=undefined){
                  return d.data[item.field]
                }else {
                  return ''
                }
              }
            }
            return {
              ...item,
@@ -295,6 +317,12 @@
            this.data = res.data.data.records;
            this.page.total=res.data.data.total;
          }
          this.data=this.data.map(item => {
            item.data=item.data || {}
            return {
              ...item
            }
          })
          this.loading = false;
          this.selectionClear();
        }).catch(error=>{
Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue
@@ -87,10 +87,12 @@
  },
  created() {
    this.getParams();
    // console.log('referConfig:')
    // console.log(this.referConfig)
  },
  mounted() {
    console.log('referrTable')
    if(this.referConfig.options.page){
      this.page.pageSize=this.referConfig.options.page.limit || this.referConfig.options.page.pageSize;
      this.page.currentPage=this.referConfig.options.page.page || this.referConfig.options.page.currentPage;
@@ -200,10 +202,9 @@
                    message: "请输入" + item.field,
                    trigger: "blur"
                  }];
                  /*item.formatter=function(d,thisItem){
                    var vciWebComboxStore = layui.vciWebComboxStore;
                    return vciWebComboxStore.getComboxText(thisItem.enumCode,d[thisItem.field]);
                  };*/
                  item.formatter=function(d){
                    return d.field || d.data.field
                  };
                }
                return {
                  ...item,
@@ -250,6 +251,16 @@
              let formatter=item.template || item.templet;
              if(typeof formatter == "string" && formatter !=''){
                formatter=eval("(" + formatter + ")")
              }else{
                formatter=function (d){
                  if(d[item.field]!=undefined){
                    return d[item.field]
                  }else if(d.data[item.field] !=undefined){
                    return d.data[item.field]
                  }else {
                    return ''
                  }
                }
              }
              return {
                ...item,
@@ -270,6 +281,7 @@
      this.params=paramsData;
    },
    setValue(){
      console.log('确定')
      if(this.selectionList.length==0){
        this.$message.warning( '没有选择数据');
        return false;
@@ -359,6 +371,12 @@
            this.data = res.data.data.records;
            this.page.total=res.data.data.total;
          }
          this.data=this.data.map(item => {
            item.data=item.data || {}
            return {
              ...item
            }
          })
          this.loading = false;
          this.selectionClear();
        }).catch(error=>{
Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue
@@ -123,10 +123,23 @@
      this.params=queryParams;
    },
    getTree(){
      getTree(this.params,this.treeUrl).then(res => {
          this.treeData=res.data
    getTree() {
      getTree(this.params, this.treeUrl).then(res => {
        res.data.map(item => {
          if (!item.attribute) {
            item.attribute = {
              data: {}
            }
          } else {
            item.attribute.data = item.attribute.data || {}
          }
          return {
            ...item,
            leaf: !item.hasChildren
          }
        })
        this.treeData = res.data
      })
    },
    treeLoad: function (treeNode, resolve) {
      const parentOid = (treeNode.level === 0) ? 0 : treeNode.data.oid;
@@ -142,6 +155,13 @@
      }
      getLazyTree(this.params,this.treeUrl).then(res => {
        resolve(res.data.data.map(item => {
          if(!item.attribute){
            item.attribute={
              data:{}
            }
          }else{
            item.attribute.data=item.attribute.data || {}
          }
          return {
            ...item,
            leaf: !item.hasChildren
Source/UBCS-WEB/src/const/code/classisyValueTreeDialog.js
@@ -1,8 +1,8 @@
export default {
    nodeKey: 'oid',
    // nodeKey: 'oid',
    border: true,
    lazy: false,
    defaultExpandAll: true,
    defaultExpandAll: false,
    treeLoad: function (node, resolve) {
      // const parentId = (node.level === 0) ? 0 : node.data.id;
Source/UBCS-WEB/src/const/code/cloneCodeRuleDialogOption.js
@@ -11,15 +11,23 @@
    border: true,
    index: true,
    viewBtn: false,
    selection: true,
    selection: false,
    menu: false,
    refreshBtn: false,
    columnBtn: false,
    dialogClickModal: false,
    highlightCurrentRow: true, //行选中时高亮
    rowKey: "oid", //行数据的 Key,用来优化 Table çš„æ¸²æŸ“
    align: 'center',
    menuAlign: 'center',
    column: [
      {
        label: '',
        prop: 'radio',
        width: 60,
        hide: false
      },
      {
        label: "编号",
        prop: "id",
        search: true,
Source/UBCS-WEB/src/main.js
@@ -41,6 +41,8 @@
import referConfigDialog from "@/components/code-dialog-page/referConfigDialog"
import referBtmTypeCrudDialog from "@/components/code-dialog-page/referBtmTypeCrudDialog"
import referSelectBtmAttrDialog from "@/components/code-dialog-page/referSelectBtmAttrDialog"
import cloneRuleDialog from "@/components/code-dialog-page/cloneRuleDialog"
import cloneOtherBasicSecDialog from "@/components/code-dialog-page/cloneOtherBasicSecDialog"
import advancedQuery from "@/components/advanced-query/advancedQuery"
import businessAdd from "@/views/modeling/BusinessAdd"
import VciMasterCrud from "@/components/MasterCrud/VciMasterCrud"
@@ -54,6 +56,7 @@
import MasterTransfer from "@/components/Master/MasterTransfer";
import ThemeImport from "@/components/Theme/ThemeImport";
import maxSerialnumDialog from '@/components/code-dialog-page/maxSerialnumDialog'
import VciDockingSearch from '@/components/dockingSearch/VciDockingSearch'
// å°†å·¥å…·å‡½æ•°æ·»åŠ åˆ°å…¨å±€
import utilFunc from './util/func'
Vue.prototype.$utilFunc = utilFunc
@@ -98,6 +101,8 @@
Vue.component('originalAdd',originalAdd)
Vue.component('referBtmTypeCrudDialog',referBtmTypeCrudDialog)
Vue.component('referSelectBtmAttrDialog',referSelectBtmAttrDialog)
Vue.component('cloneOtherBasicSecDialog',cloneOtherBasicSecDialog)
Vue.component('cloneRuleDialog',cloneRuleDialog)
Vue.component('FormTemplateDialog',FormTemplateDialog)
Vue.component('LinkTypeAdd',linkTypeAdd)
Vue.component('MasterTree',MasterTree)
@@ -108,6 +113,7 @@
Vue.component('MasterTransfer', MasterTransfer)
Vue.component('ThemeImport', ThemeImport)
Vue.component('maxSerialnumDialog', maxSerialnumDialog)
Vue.component('VciDockingSearch', VciDockingSearch)
// åŠ è½½ç›¸å…³url地址
Object.keys(urls).forEach(key => {
Source/UBCS-WEB/src/views/MasterData/items.vue
@@ -28,10 +28,10 @@
      page: {
        total: 0,
        currentPage: 1,
        pageSize: 10,
        pageSize: 100,
        pageSizes: [10, 30, 50, 100, 200],
      },
      pageSize: "10",
      pageSize: "100",
      currentPage: "1",
      codeClassifyOid: "",
      coderuleoid: "",
Source/UBCS-WEB/src/views/code/code.vue
@@ -156,7 +156,7 @@
    >
    </advanced-query>
    <!-- ç¼–码规则相关对话框 -->
    <!-- ä»¥ä¸‹æ˜¯ç¼–码规则相关对话框 -->
    <el-dialog
      :visible.sync="codeRangeSettingBox"
      append-to-body
@@ -177,150 +177,18 @@
    </el-dialog>
    <!-- ç¼–码规则,克隆对话框 -->
    <el-dialog
    <clone-rule-dialog
      :visible.sync="cloneSettingBox"
      append-to-body
      class="avue-dialog avue-dialog--top"
      style="height: 100vh"
      title="克隆编码规则"
      top="-3%"
      width="800px"
    >
      <div>
        <el-row>
          <el-form ref="form" :inline="true" :model="form" label-width="80px">
            <el-form-item label="编号" required>
              <el-input v-model="cloneCodeRuleForm.id"></el-input>
            </el-form-item>
            <el-form-item label="名称" required>
              <el-input v-model="cloneCodeRuleForm.name"></el-input>
            </el-form-item>
            <el-form-item class="clone-input-textarea" label="描述">
              <el-input
                v-model="cloneCodeRuleForm.description"
                :autosize="{ minRows: 3, maxRows: 5 }"
                type="textarea"
              ></el-input>
            </el-form-item>
          </el-form>
        </el-row>
        <el-row>
          <p
            style="
              margin: 0 0px 16px 50%;
              font-weight: 500;
              font-size: 20px;
              color: #000;
            "
          >
            ç æ®µç®¡ç†
          </p>
          <avue-crud
            :data="cloneData"
            :option="cloneOption"
            :table-loading="cloneTableLoading"
            class="clone-avue-crud"
            @on-load="cloneDataOnLoad"
          >
            <template slot="menu" slot-scope="scope">
              <el-button
                v-show="scope.row.orderNum > 1"
                icon="el-icon-arrow-up"
                plain
                size="small"
                type="text"
                @click="upOrderNum(scope.row)"
                >上移
              </el-button>
              <el-button
                icon="el-icon-arrow-down"
                plain
                size="small"
                type="text"
                @click="downOrderNum(scope.row)"
                >下移
              </el-button>
            </template>
          </avue-crud>
        </el-row>
      </div>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="saveCloneCodeRule">保 å­˜</el-button>
        <el-button @click="cloneSettingBox = false">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
      :ruleData="selectionList[0]"
      @refreshRuleTable="onLoad">
    </clone-rule-dialog>
    <!-- ç¼–码规则,从其他规则克隆对话框 -->
    <el-dialog
    <clone-other-basic-sec-dialog
      :visible.sync="cloneOtherCodeRuleSettingBox"
      append-to-body
      class="avue-dialog avue-dialog--top"
      destroy-on-close
      style="height: 100vh"
      title="克隆编码规则的基础信息"
      top="-3%"
      width="800px"
    >
      <div>
        <el-row>
          <p
            style="
              margin-top: -20px;
              margin-bottom: 4px;
              font-weight: 570;
              font-size: 19px;
              color: #0e2d5f;
            "
          >
            ç¼–码规则
          </p>
          <avue-crud
            ref="crudCloneCodeRuleOther"
            :data="data"
            :option="cloneCodeRuleOption"
            :page.sync="page"
            :table-loading="loading"
            class="other-clone-coderule-crud"
            @row-click="codeOtherCloneRuleRowClick"
            @size-change="sizeChange"
            @selection-change="selectionOtherCloneCodeRuleChange"
            @search-change="searchOtherCloneChange"
            @search-reset="searchOtherCloneReset"
            @on-load="onLoad"
          >
          </avue-crud>
        </el-row>
        <el-row style="margin-top: 10px; border-top: 1px solid #ebeef5">
          <p
            style="
              margin-top: 10px;
              margin-bottom: 4px;
              font-weight: 570;
              font-size: 19px;
              color: #0e2d5f;
            "
          >
            ç æ®µä¿¡æ¯
          </p>
          <avue-crud
            ref="crudCloneCodeBasicOther"
            :data="basicData"
            :option="cloneBasicOption"
            :table-loading="loadingBasic"
            class="other-clone-codebasic-crud"
            @row-click="codeOtherCloneBasicRowClick"
            @selection-change="selectionOtherCloneCodeBasicChange"
          >
          </avue-crud>
        </el-row>
      </div>
      <div slot="footer" class="dialog-footer" style="height: 50px">
        <el-button type="primary" @click="saveOtherCodeBasic">保 å­˜</el-button>
        <el-button @click="cloneOtherCodeRuleSettingBox = false"
          >取 æ¶ˆ</el-button
        >
      </div>
    </el-dialog>
      :quiltCloneCodeRule="selectionList[0]"
      @refreshRuleTable="onLoad">
    </clone-other-basic-sec-dialog>
    <!-- ç¼–码规则,转移所有者对话框 -->
    <el-dialog
@@ -1414,7 +1282,6 @@
  remove,
  listUseRange,
  updateStatus,
  clone,
  clearAllCode,
  checkLikeCodeRule,
} from "@/api/code/mdmrule";
@@ -1424,7 +1291,6 @@
  upOrderNum,
  deleteData,
  editSave,
  cloneCodeBasic,
  addSave,
  refDataGridClassifySec,
} from "@/api/code/codebasic";
@@ -1445,9 +1311,6 @@
} from "@/api/code/codeClassifyValue";
import { getDictionary } from "@/api/omd/enum";
import optionBasic from "@/const/code/codebasic";
import cloneOption from "@/const/code/cloneOption";
import cloneBasicOption from "@/const/code/cloneBasicDialogOption";
import cloneCodeRuleOption from "@/const/code/cloneCodeRuleDialogOption";
import optionRule from "@/const/code/mdmrule";
import attrOption from "@/const/code/selectAttrOptionDialog";
import treeOption from "@/const/code/classifyTreeOptionDialog";
@@ -1476,24 +1339,11 @@
      data: [],
      currentRuleLcStatus: "",
      /*克隆对话框控制变量*/
      /*克隆编码规则对话框控制变量*/
      cloneSettingBox: false,
      cloneTableLoading: false,
      cloneOption: cloneOption,
      cloneData: [],
      cloneCodeRuleForm: {
        id: "",
        name: "",
        description: "",
      },
      /*从其他规则克隆码段*/
      cloneOtherCodeRuleSettingBox: false,
      cloneBasicOption: cloneBasicOption,
      cloneCodeRuleOption: cloneCodeRuleOption,
      selectionOtherCloneCodeBasicList: [], // æ­¤ç•Œé¢å†…当前选中的基础码段
      selectionOtherCloneCodeRuleList: [], // æ­¤ç•Œé¢å†…当前选中的编码规则
      otherCloneQuery: {}, // æŸ¥è¯¢æ¡ä»¶å¯¹è±¡
      /** è½¬ç§»æ‰€æœ‰è€…对话框 */
      escapeOwnerVisible: false,
@@ -1549,7 +1399,7 @@
      loadingBasic: false,
      selectionBasicList: [],
      addBasicCodeSettingBox: false,
      showbtn: false, //基础码段新增是否显示基础码段
      showbtn: false, //基础码段新增按钮是否禁用
      isLoadingSecCodeAddBtn: false,
      basicSecDialogTitle: "", //基础码段第一层对话框标题
      basicSecOnlyRead: false, //新增基础码段表单是否只读
@@ -2568,53 +2418,13 @@
        this.updateStatus(oid, update);
      }
    },
    /** æ‰“开编码规则克隆对话框*/
    openCodeRuleDialog() {
      if (!this.tipsMessage(this.selectionList)) {
        return;
      }
      this.cloneSettingBox = true;
      this.cloneCodeRuleForm.id = this.selectionList[0].id;
      this.cloneCodeRuleForm.name = this.selectionList[0].name;
      this.cloneCodeRuleForm.description = this.selectionList[0].description;
      this.loadBasic({ oid: this.selectionList[0].oid });
    },
    /** å…‹éš†ç¼–码规则保存功能*/
    saveCloneCodeRule() {
      let form = this.cloneCodeRuleForm;
      if (form.id.trim() == "") {
        this.$message.warning("编号不能为空!");
        return;
      }
      if (form.name.trim() == "") {
        this.$message.warning("码值不能为空!");
        return;
      }
      this.selectionList[0].oid = "";
      this.selectionList[0].id = form.id;
      this.selectionList[0].name = form.name;
      this.selectionList[0].description = form.description;
      this.selectionList[0].createTime = new Date().getTime();
      this.selectionList[0].ts = new Date(this.selectionList[0].ts).getTime();
      this.selectionList[0].lcStatus = "Editing";
      let data = Object.assign({}, this.selectionList[0], {
        elements: this.cloneData,
      });
      clone(data).then(
        () => {
          this.cloneSettingBox = false;
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!",
          });
        },
        (error) => {
          window.console.log(error);
        }
      );
      //console.log(data);
    },
    /** æ‰“开从其他编码规则中克隆码段对话框*/
@@ -2627,99 +2437,6 @@
        return;
      }
      this.cloneOtherCodeRuleSettingBox = true;
    },
    /** ä»Žå…¶ä»–编码规则中克隆码段对话框-单击编码规则实现行选择*/
    codeOtherCloneRuleRowClick(row) {
      this.$refs.crudCloneCodeRuleOther.toggleSelection();
      this.selectionOtherCloneCodeRuleList = row;
      this.$refs.crudCloneCodeRuleOther.setCurrentRow(row);
      this.$refs.crudCloneCodeRuleOther.toggleRowSelection(row); //选中当前行
      this.loadBasic(row);
    },
    /** ä»Žå…¶ä»–编码规则中克隆码段对话框-单击基础码段实现行选择*/
    codeOtherCloneBasicRowClick(row) {
      this.$refs.crudCloneCodeBasicOther.toggleSelection();
      this.selectionOtherCloneCodeBasicList = row;
      this.$refs.crudCloneCodeBasicOther.setCurrentRow(row);
      this.$refs.crudCloneCodeBasicOther.toggleRowSelection(row); //选中当前行
    },
    /** ä»Žå…¶ä»–规则克隆码段界面中编码规则当前选中行变化的时候触发*/
    selectionOtherCloneCodeRuleChange(list) {
      //console.log(list);
      this.selectionOtherCloneCodeRuleList = list;
      this.$refs.crudBasic.setCurrentRow(
        this.selectionBasicList[list.length - 1]
      );
      if (list == "") {
        this.basicData = [];
      }
      if (this.selectionOtherCloneCodeRuleList.length > 0) {
        this.loadBasic(this.selectionOtherCloneCodeRuleList[list.length - 1]);
      }
    },
    selectionOtherCloneCodeBasicChange(list) {
      this.selectionOtherCloneCodeBasicList = list;
      this.$refs.crudCloneCodeBasicOther.setCurrentRow(
        this.selectionOtherCloneCodeBasicList[list.length - 1]
      );
    },
    /** ä»Žå…¶ä»–规则克隆码段界面重置搜索功能 */
    searchOtherCloneReset() {
      this.otherCloneQuery = {};
      this.onLoad(this.page);
    },
    /** ä»Žå…¶ä»–规则克隆码段界面搜索功能*/
    searchOtherCloneChange(params, done) {
      this.page.currentPage = 1;
      // å¤šä¸ªconditionMap这样传参,快速查询默认采用模糊查询
      let requestData = {};
      if (params) {
        Object.keys(params).forEach((key) => {
          requestData["conditionMap" + "[" + key + "_like]"] =
            params[key].trim();
        });
      }
      this.otherCloneQuery = requestData;
      this.onLoad(this.page,requestData);
      done();
    },
    /** ä¿å­˜ä»Žå…¶ä»–编码规则中克隆码段信息*/
    saveOtherCodeBasic() {
      let oid = this.selectionList[0].oid;
      let fromDialogPkCodebasic = this.selectionOtherCloneCodeBasicList;
      if (fromDialogPkCodebasic.length <= 0) {
        this.$message.warning("请选择码段数据!");
        return;
      }
      let res = fromDialogPkCodebasic.filter((item) => {
        return item.pkCodeRule == oid;
      });
      if (res != "") {
        this.$message.warning("需要克隆的编码规则与被克隆的编码规则相同!");
        return;
      }
      let oidArr = [];
      fromDialogPkCodebasic.forEach((ele) => {
        oidArr.push(ele.oid);
      });
      let data = {
        pkCodeRule: oid,
        oidArr: oidArr.join(","),
      };
      //console.log(data);
      cloneCodeBasic(data).then(
        () => {
          this.cloneOtherCodeRuleSettingBox = false;
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!",
          });
        },
        (error) => {
          window.console.log(error);
        }
      );
    },
    /** æ¸…空码值*/
@@ -3235,11 +2952,7 @@
    },
    /** ç‚¹å‡»è§¦å‘加载基础码段信息*/
    loadBasic(row) {
      if (this.cloneSettingBox) {
        this.cloneTableLoading = true;
      } else {
        this.loadingBasic = true;
      }
      this.loadingBasic = true;
      // console.log(row.oid);
      if (row != "" || row != null) {
        //存储当前关联的编码规则相关信息
@@ -3272,14 +2985,8 @@
      gridCodeBasicSec(1, -1, isAdancedQuery ? condition : conditionMaps).then(
        (res) => {
          const data = res.data.data;
          if (this.cloneSettingBox) {
            this.cloneData = data.records;
            this.cloneTableLoading = false;
          } else {
            this.basicData = data.records;
            // console.log(this.basicData);
            this.loadingBasic = false;
          }
          this.basicData = data.records;
          this.loadingBasic = false;
        }
      );
    },
Source/UBCS-WEB/src/views/docking/loge.vue
@@ -14,6 +14,9 @@
               @size-change="sizeChange"
               @refresh-change="refreshChange"
               @on-load="onLoad">
      <template slot-scope="scope" slot="menuLeft">
        <vci-docking-search :SearchObject="SearchObject" :page="page"></vci-docking-search>
      </template>
    </avue-crud>
  </basic-container>
</template>
@@ -27,6 +30,51 @@
  name: "loge",
  data(){
    return {
      SearchObject:{
        type:'loge',
        searchData:[
          {
            label:'数据编码',
            prop: "id",
            value:0
          },
          {
            label:'分类代号',
            prop: 'classifyId',
            value:1
          },
          {
            label:'分类名称',
            prop: 'classifyName',
            value:2
          },
          {
            label:'集成系统编号',
            prop: 'systemCode',
            value:3
          },
          {
            label:'集成系统名称',
            prop: 'systemName',
            value:4
          },
          {
            label:'类型',
            prop: 'typeText',
            value:5
          },
          {
            label:'记录时间',
            value:6,
            prop: 'createTime',
          },
          {
            label:'是否成功',
            prop: 'interfaceStatus',
            value:7
          },
        ],
      },
      loading: false,
      query: {},
      selectionList: [],
@@ -41,7 +89,7 @@
        calcHeight: 0,
        tip: false,
        searchShow: false,
        searchMenuSpan: 6,
        // searchMenuSpan: 12,
        border: true,
        index: true,
        viewBtn: true,
@@ -52,14 +100,12 @@
          {
            label: "数据编码",
            prop: "id",
            search: true,
            sortable:true,
            width:130
          },
          {
            label: "图号",
            prop: "uniqueCode",
            search: true,
            hide:true,
            sortable:true,
            width:150
@@ -67,7 +113,6 @@
          {
            label: '分类代号',
            prop: 'classifyId',
            search: true,
            sortable:true,
            overHidden:true,
            width: 150
@@ -75,7 +120,6 @@
          {
            label: '分类名称',
            prop: 'classifyName',
            search: true,
            sortable:true,
            overHidden: true,
            width: 140
@@ -83,21 +127,18 @@
          {
            label: '集成系统编号',
            prop: 'systemCode',
            search: true,
            sortable:true,
            width: 130
          },
          {
            label: '集成系统名称',
            prop: 'systemName',
            search: true,
            sortable:true,
            width: 150
          },
          {
            label: '类型',
            prop: 'typeText',
            search: true,
            sortable:true,
            width: 150
          },
@@ -105,7 +146,6 @@
            label:'接口参数',
            prop:'paramString',
            overHidden:true,
            search: true,
            sortable:true,
            width: 150
          },
@@ -113,7 +153,6 @@
            label:'返回参数',
            prop:'returnString',
            overHidden:true,
            search: true,
            sortable:true,
            width: 150
          },
@@ -131,7 +170,6 @@
          {
            label: '是否成功',
            prop: 'interfaceStatus',
            search: true,
            sortable:true,
            width: 120,
            html:true,
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java
@@ -82,7 +82,6 @@
     */
    private String codeSecLength;
    /**
     * å±‚级类型
     */
@@ -148,7 +147,6 @@
     */
    private String filterSql ;
    /**
     * æµæ°´å·èµ·å§‹å€¼
     */
@@ -158,7 +156,6 @@
     * æµæ°´çš„æ­¥é•¿
     */
    private Integer serialStep;
    /**
     * ç¼–码补位方式
@@ -210,7 +207,6 @@
     */
    private String parentClassifySecText;
    /**
     * æ˜¯å¦å¯ä»¥ä¸ºç©º
     */
@@ -240,6 +236,7 @@
     * é€‰æ‹©ç æ®µä¿¡æ¯çš„主键集合
     */
    private String oidArr;
    /**
     * èŽ·å– ç æ®µç±»åž‹
     */
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java
@@ -19,11 +19,11 @@
@EqualsAndHashCode(callSuper = true)
public class CodeClassifyValue extends BaseModel {
    /**
     * åºåˆ—化
     */
    private static final long serialVersionUID = 5238387322464830032L;
    /**
     * åˆ†ç±»ç æ®µä¸»é”®
     */
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeFixedValue.java
@@ -23,6 +23,7 @@
     * åºåˆ—化
     */
    private static final long serialVersionUID = 3392365440606832597L;
    /**
     * å›ºå®šç æ®µä¸»é”®
     */
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java
@@ -30,8 +30,6 @@
    */
    private Integer orderNum;
    /**
     * èŽ·å– å›ºå®šç æ®µä¸»é”®
     */
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java
@@ -21,7 +21,7 @@
        using = ToStringSerializer.class
    )
    @ApiModelProperty("主键id")
    @TableId(value = "OID",type = IdType.ASSIGN_UUID)
    @TableId(value = "OID",type = IdType.ASSIGN_ID)
    private String oid;
    @TableField(value = "id")
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java
@@ -36,7 +36,7 @@
    public static <T extends BaseModel> T addDefaultAttrAssimt(T object,String btmName) throws VciBaseException {
        BaseModel baseModel = object;
        try {
            baseModel.setOid(VciBaseUtil.getPk().toUpperCase());
            baseModel.setOid(VciBaseUtil.getPk());
            baseModel.setCreateTime(new Date());
            baseModel.setNameOid(VciBaseUtil.getPk());
            baseModel.setLastModifyTime(new Date());
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java
@@ -23,6 +23,7 @@
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.rmi.ServerException;
import java.util.Collection;
import java.util.List;
@@ -162,7 +163,7 @@
    @PostMapping("/clone")
    @ApiOperationSupport(order = 10)
    @ApiOperation(value = "克隆码段信息", notes = "codeBasicSecDTO")
    public R cloneCodeBasicSec(@RequestBody CodeBasicSecDTO codeBasicSecDTO){
    public R cloneCodeBasicSec(@RequestBody CodeBasicSecDTO codeBasicSecDTO) throws ServerException {
        VciBaseUtil.alertNotNull(codeBasicSecDTO.getOidArr(),"选择码段主键");
        List<String> oidArr = VciBaseUtil.str2List(codeBasicSecDTO.getOidArr());
        if (CollectionUtils.isEmpty(oidArr)){
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java
@@ -48,6 +48,7 @@
import javax.validation.Valid;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.rmi.ServerException;
import java.util.Collection;
import java.util.Map;
@@ -200,7 +201,7 @@
    @PostMapping("/clone")
    @ApiOperationSupport(order = 13)
    @ApiOperation(value = "克隆编码规则", notes = "传入codeRuleDTO")
    public R cloneCodeRule(@RequestBody CodeRuleDTO codeRuleDTO){
    public R cloneCodeRule(@RequestBody CodeRuleDTO codeRuleDTO) throws ServerException {
        return codeRuleService.cloneCodeRule(codeRuleDTO);
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java
@@ -17,6 +17,7 @@
import org.springblade.core.tool.utils.BeanUtil;
import org.springframework.util.CollectionUtils;
import java.rmi.ServerException;
import java.util.*;
/**
@@ -41,7 +42,7 @@
     * @param codeRuleOid ç¼–码规则主键
     * @return æ‰§è¡Œç»“æžœ
     */
    boolean batchDeleteSecByCodeRuleOid(String codeRuleOid);
    boolean batchDeleteSecByCodeRuleOid(String codeRuleOid)throws VciBaseException;
    /**
     * æ ¹æ®ç æ®µåˆ†ç±»çš„类型判断属性是否是空的
@@ -122,7 +123,15 @@
     * @param pkCodeRule ç›®æ ‡ç¼–码规则
     * @return å…‹éš†ç»“果反馈::success:成功,fail:失败
     */
    R cloneCodeBasicSec(List<String> oidList, String pkCodeRule);
    R cloneCodeBasicSec(List<String> oidList, String pkCodeRule) throws ServerException;
    /**
     * æ”¹å˜ç æ®µä¸­çˆ¶åˆ†ç±»ç æ®µå’Œå­åˆ†ç±»ç æ®µä¹‹é—´çš„关联oid为新的oid,并且不破坏分类码值的关联关系
     * @param basicSecs
     * @return
     * @throws ServerException
     */
    boolean changeParentOidAssnOid(List<CodeBasicSec> basicSecs) throws ServerException;
    /**
     * æŸ¥è¯¢ç›®æ ‡åˆ†ç±»ç æ®µæ‰€åœ¨çš„æ ‘结构
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java
@@ -25,6 +25,13 @@
public interface ICodeClassifyValueService extends IService<CodeClassifyValue> {
    /**
     * å…‹éš†åˆ†ç±»ç å€¼
     * @param codeClassifyValues
     * @return
     */
    boolean cloneCodeClassifyVaue(List<CodeClassifyValue> codeClassifyValues);
    /**
     * æŸ¥è¯¢åˆ†ç±»ç æ®µçš„码值 æ ‘
     * @param treeQueryObject æ ‘查询对象
     * @return åˆ†ç±»ç æ®µçš„码值 æ˜¾ç¤ºæ ‘
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeFixedValueService.java
@@ -7,8 +7,6 @@
import com.vci.ubcs.code.vo.pagemodel.CodeFixedValueVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import org.springblade.core.tool.api.R;
import org.springframework.data.domain.Page;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -102,4 +100,11 @@
     */
    boolean batchDeleteBySecOid(String codefixedsecoid);
    /**
     * æ ¹æ®codeFixedSecOid查询码值
     * @param codeFixedSecOids
     * @return
     */
    List<CodeFixedValue> listFixedValueByCodeFixedSecOid(List<String> codeFixedSecOids);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeRuleService.java
@@ -27,6 +27,7 @@
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import java.rmi.ServerException;
import java.util.Collection;
import java.util.Map;
@@ -144,7 +145,7 @@
     * @param codeRuleDTO ä¸»æ•°æ®ç¼–码规则数据传输对象,oid和ts需要传输
     * @return ä¸»æ•°æ®ç¼–码规则显示对象
     */
    R cloneCodeRule(CodeRuleDTO codeRuleDTO) throws VciBaseException;
    R cloneCodeRule(CodeRuleDTO codeRuleDTO) throws VciBaseException, ServerException;
    /**
     * ç¼–码规则清空所有已生成的编码
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IPasswordFreeLoginService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.vci.ubcs.code.service;
/**
 * å…å¯†ç™»å½•服务
 * @author ludc
 * @date 2023/9/11 15:46
 */
public interface IPasswordFreeLoginService {
    /**
     * å…å¯†ç™»å½•方法
     * @param account è´¦å·
     * @return
     */
    boolean passwordFreeLogin(String account);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
@@ -52,6 +52,7 @@
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.rmi.ServerException;
import java.util.*;
import java.util.stream.Collectors;
@@ -114,7 +115,7 @@
    /**
     * ä¸Šå±‚分类码段的属性名称
     */
    private static  final String PARENT_FIELD_NAME = "parentclassifysecoid";
    private static  final String PARENT_FIELD_NAME = "parentClassifySecOid";
    /**
     * ä¸Šçº§åˆ†ç±»ç å€¼çš„属性名称
@@ -170,10 +171,10 @@
            // å°†è¦ä½œä¸ºåˆ é™¤æ¡ä»¶çš„值放在一个集合里面
            Set<String> fixedSecOidSet = fixedSecList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet());
            // é€šè¿‡å¤–键进行查询
            List<CodeFixedValue> fixedValueS = fixedValueMapper.selectList(Wrappers.<CodeFixedValue>query().lambda().in(CodeFixedValue::getCodeFixedSecOid,fixedSecOidSet));
            if(!fixedValueS.isEmpty()){
            List<CodeFixedValue> fixedValues = fixedValueMapper.selectList(Wrappers.<CodeFixedValue>query().lambda().in(CodeFixedValue::getCodeFixedSecOid,fixedSecOidSet));
            if(!fixedValues.isEmpty()){
                // æ ¹æ®æŸ¥è¯¢å‡ºæ¥çš„id执行固定码段执行删除
                deletFlag = fixedValueMapper.deleteBatchIds(fixedValueS.stream().map(CodeFixedValue::getOid).collect(Collectors.toSet()))>0;
                deletFlag = fixedValueMapper.deleteBatchIds(fixedValues.stream().map(CodeFixedValue::getOid).collect(Collectors.toSet()))>0;
            }
        }
        // 4、再删除分类码段
@@ -184,10 +185,10 @@
            // å°†è¦ä½œä¸ºåˆ é™¤æ¡ä»¶çš„值放在一个集合里面
            Set<String> classifySecOidSet = classifySecList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet());
            // é€šè¿‡å¤–键进行查询
            List<CodeClassifyValue> fixedValueS = codeClassifyValueMapper.selectList(Wrappers.<CodeClassifyValue>query().lambda().in(CodeClassifyValue::getCodeClassifySecOid,classifySecOidSet));
            if(!fixedValueS.isEmpty()){
            List<CodeClassifyValue> codeClassifyValues = codeClassifyValueMapper.selectList(Wrappers.<CodeClassifyValue>query().lambda().in(CodeClassifyValue::getCodeClassifySecOid,classifySecOidSet));
            if(!codeClassifyValues.isEmpty()){
                // æ ¹æ®æŸ¥è¯¢å‡ºæ¥çš„主键id执行固定码段执行删除
                deletFlag = fixedValueMapper.deleteBatchIds(fixedValueS.stream().map(CodeClassifyValue::getOid).collect(Collectors.toSet()))>0;
                deletFlag = codeClassifyValueMapper.deleteBatchIds(codeClassifyValues.stream().map(CodeClassifyValue::getOid).collect(Collectors.toSet()))>0;
            }
        }
        return deletFlag;
@@ -574,7 +575,7 @@
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R cloneCodeBasicSec(List<String> oidList, String pkCodeRule) throws ServiceException {
    public R cloneCodeBasicSec(List<String> oidList, String pkCodeRule) throws ServiceException, ServerException {
        boolean isLinked = checkIsLinked(pkCodeRule,null);
        if (isLinked) {
            return R.fail("编码规则已被引用,不允许编辑或删除");
@@ -584,20 +585,96 @@
        if(basicSecDOS.isEmpty()){
            return R.fail("克隆的码段信息不存在!");
        }
        basicSecDOS.forEach(sec -> {
        List<CodeBasicSec> codeClassifySec = new ArrayList<>();
        Map<String,List<CodeFixedValue>> codeFixedValueMaps = new HashMap<>();
        for (CodeBasicSec sec : basicSecDOS) {
            CodeBasicSec newSecDO = new CodeBasicSec();
            BeanUtilForVCI.copyPropertiesIgnoreCase(sec,newSecDO);
            newSecDO.setOid(VciBaseUtil.getPk());
            newSecDO.setNameOid(VciBaseUtil.getPk());
            newSecDO.setRevisionOid(VciBaseUtil.getPk());
            newSecDO.setId(newSecDO.getId() + "_copy");
            newSecDO.setName(newSecDO.getName() + "_copy");
            String oldBasicOid = newSecDO.getOid();
            newSecDO.setId(newSecDO.getId());
            newSecDO.setName(newSecDO.getName());
            newSecDO.setPkCodeRule(pkCodeRule);
            // åˆ¤æ–­æ˜¯å¦æ˜¯åˆ†ç±»ç æ®µ,业务逻辑稍微复杂一点所以需要先提出来单独处理
            if(newSecDO.getSecType().equals(CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue())){
                // å­˜å‚¨æ—§çš„码段oid和新的码段的oid的关联关系
                codeClassifySec.add(newSecDO);
                continue;
            }
            // æ›´æ”¹åˆ›å»ºæ—¶é—´ï¼Œä¿®æ”¹æ—¶é—´ç­‰é»˜è®¤å€¼
            DefaultAttrAssimtUtil.addDefaultAttrAssimt(newSecDO,MdmBtmTypeConstant.CODE_BASIC_SEC);
            //固定码段
            if(newSecDO.getSecType().equals(CodeSecTypeEnum.CODE_FIXED_SEC.getValue())){
                // å›ºå®šç æ®µå­˜å‚¨å¥½oid和码值的关联关系
                codeFixedValueMaps.put(newSecDO.getOid(),fixedValueService.list(Wrappers.<CodeFixedValue>query()
                    .lambda().eq(CodeFixedValue::getCodeFixedSecOid, oldBasicOid)
                ));
            }
            createList.add(newSecDO);
        });
        }
        // å¤„理分类码段的oid,因为oid关联parentClassifyOid,与码值codeClassifyOid,码值又需要通过旧的码段oid来查询,所以不能直接改变oid
        boolean resChangeAssn = changeParentOidAssnOid(codeClassifySec);
        // å°†å¤„理过的分类码段也添加进要做新增处理的码段集合中
        createList.addAll(codeClassifySec);
        boolean resBoolean = saveBatch(createList);
        //codeBasicSecMapper.insertBatch(createList);
        return resBoolean ? R.data(resBoolean,"克隆码段信息成功"):R.fail("克隆码段信息失败!");
        // æœ€ç»ˆè¦å­˜å…¥ç å€¼è¡¨ä¸­çš„,码值对象
        List<CodeFixedValue> codeFixedDOValues = new ArrayList<>();
        // æž„造码值对象,与码段主键关联关系,以及改变固定码值的oid
        codeFixedValueMaps.forEach((key, value) -> {
            value.stream().forEach(item -> {
                item.setOid("");
                item.setCodeFixedSecOid(key);
                DefaultAttrAssimtUtil.updateDefaultAttrAssimt(item);
                codeFixedDOValues.add(item);
            });
        });
        // å…‹éš†å›ºå®šç å€¼
        boolean resFixed = fixedValueService.saveBatch(codeFixedDOValues);
        return (resBoolean&&resFixed&&resChangeAssn) ? R.data(resBoolean,"克隆码段信息成功"):R.fail("克隆码段信息失败!");
    }
    /**
     * æ”¹å˜ç æ®µä¸­çˆ¶åˆ†ç±»ç æ®µå’Œå­åˆ†ç±»ç æ®µä¹‹é—´çš„关联oid为新的oid,并且不破坏分类码值的关联关系
     * @param basicSecs
     * @return
     * @throws ServerException
     */
    @Override
    public boolean changeParentOidAssnOid(List<CodeBasicSec> basicSecs) throws ServerException {
        Map<String, List<CodeClassifyValue>> codeClassValues = new HashMap<>();
        List<CodeClassifyValue> codeClassifyDOValues = new ArrayList<>();
        HashMap<String, String> oidMap = new HashMap<>();
        boolean resClone = false;
        try {
            // éåŽ†å¯¹è±¡æ•°ç»„ï¼Œä¸ºæ¯ä¸ªå¯¹è±¡ç”Ÿæˆæ–°çš„oid,并将原始oid和新oid的映射关系存储到Map中
            for (CodeBasicSec obj : basicSecs) {
                String originalOid = obj.getOid();
                String newOid = VciBaseUtil.getPk();
                oidMap.put(originalOid, newOid);
            }
            // éåŽ†å¯¹è±¡æ•°ç»„ï¼Œæ›´æ–°æ¯ä¸ªå¯¹è±¡çš„oid和codeClassifySecOid属性值
            for (CodeBasicSec obj : basicSecs) {
                String originalOid = obj.getOid();
                String newOid = oidMap.get(originalOid);
                // æ–°çš„oid关联要克隆码值
                codeClassValues.put(newOid,codeClassifyValueService.list(Wrappers.<CodeClassifyValue>query()
                    .lambda().eq(CodeClassifyValue::getCodeClassifySecOid, originalOid)));
                obj.setOid(newOid);
                String originalParentClassifyValueOid = obj.getParentClassifySecOid();
                String newParentClassifyValueOid = oidMap.get(originalParentClassifyValueOid);
                obj.setParentClassifySecOid(newParentClassifyValueOid);
            }
            codeClassValues.forEach((key, value) -> {
                value.stream().forEach(item -> {
                    DefaultAttrAssimtUtil.updateDefaultAttrAssimt(item);
                    item.setCodeClassifySecOid(key);
                    codeClassifyDOValues.add(item);
                });
            });
            resClone = codeClassifyValueService.cloneCodeClassifyVaue(codeClassifyDOValues);
        }catch (Exception e){
            throw new ServerException("父分类码段和子分类码段clone转换oid时出错:"+e.getCause());
        }
        return resClone;
    }
    /**
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java
@@ -61,6 +61,33 @@
    private static final String PARENT_FIELD_NAME = "parentClassifyValueOid";
    /**
     * å…‹éš†åˆ†ç±»ç å€¼
     * @param codeClassifyValues
     * @return
     */
    @Override
    public boolean cloneCodeClassifyVaue(List<CodeClassifyValue> codeClassifyValues) {
        // åˆ›å»ºMap对象,用于存储原始oid和新oid的映射关系
        Map<String, String> oidMap = new HashMap<>();
        // éåŽ†å¯¹è±¡æ•°ç»„ï¼Œä¸ºæ¯ä¸ªå¯¹è±¡ç”Ÿæˆæ–°çš„oid,并将原始oid和新oid的映射关系存储到Map中
        for (CodeClassifyValue obj : codeClassifyValues) {
            String originalOid = obj.getOid();
            String newOid = VciBaseUtil.getPk();
            oidMap.put(originalOid, newOid);
        }
        // éåŽ†å¯¹è±¡æ•°ç»„ï¼Œæ›´æ–°æ¯ä¸ªå¯¹è±¡çš„oid和codeClassifySecOid属性值
        for (CodeClassifyValue obj : codeClassifyValues) {
            String originalOid = obj.getOid();
            String newOid = oidMap.get(originalOid);
            obj.setOid(newOid);
            String originalParentClassifyValueOid = obj.getParentClassifyValueOid();
            String newParentClassifyValueOid = oidMap.get(originalParentClassifyValueOid);
            obj.setParentClassifyValueOid(newParentClassifyValueOid);
        }
        return this.saveBatch(codeClassifyValues);
    }
    /**
     * æŸ¥è¯¢åˆ†ç±»ç æ®µçš„码值 æ ‘
     * @param treeQueryObject æ ‘查询对象
     * @return åˆ†ç±»ç æ®µçš„码值 æ˜¾ç¤ºæ ‘
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.code.dto.CodeFixedValueDTO;
@@ -24,7 +25,6 @@
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -74,6 +74,24 @@
    }
    /**
     * æ ¹æ®codeFixedSecOid查询码值
     * @param codeFixedSecOids
     * @return
     */
    @Override
    public List<CodeFixedValue> listFixedValueByCodeFixedSecOid(List<String> codeFixedSecOids){
        if(codeFixedSecOids.isEmpty()){
            return new ArrayList<CodeFixedValue>();
        }
        /*List<CodeFixedValue> codeFixedValues = codeFixedValueMapper.selectList(
            Wrappers.<CodeFixedValue>query().lambda()
                .in(CodeFixedValue::getCodeFixedSecOid, codeFixedSecOids)
        );*/
        List<CodeFixedValue> codeFixedValues = codeFixedValueMapper.selectByPageByCodeFixedSecOid(codeFixedSecOids, new Page<>(1, -1));
        return codeFixedValues;
    }
    /**
     * å¢žåŠ å›ºå®šç æ®µçš„ç å€¼
     * @param codeFixedValueDTO å›ºå®šç æ®µçš„码值数据传输对象
     * @return æ‰§è¡Œç»“æžœ
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java
@@ -17,6 +17,7 @@
package com.vci.ubcs.code.service.impl;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -48,6 +49,7 @@
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.starter.web.util.WebUtil;
import com.vci.ubcs.system.cache.NacosConfigCache;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.utils.AuthUtil;
@@ -64,6 +66,7 @@
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.rmi.ServerException;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -110,10 +113,14 @@
    @Resource
    private RevisionModelUtil revisionModelUtil;
    @Value("${user-info.tenant-id}")
    private String tenantId;
    @Value("${user-info.id}")
    private String userId;
    @Resource
    private NacosConfigCache nacosConfigCache;
    @Resource
    private ICodeFixedValueService codeFixedValueService;
    @Resource
    private ICodeClassifyValueService codeClassifyValueService;
    /**
     * åˆ†é¡µæŸ¥è¯¢
@@ -124,7 +131,9 @@
    @Override
    public IPage<CodeRuleVO> gridCodeRule(Query query, Map<String,Object> conidtionMap) {
        //如果等于自己配置的管理组租户id和管理组超管账号,就不需要按照规则所有者来进行查询
        if(!(AuthUtil.getTenantId().equals(this.tenantId) && AuthUtil.getUserId().toString().equals(this.userId))){
        if(!(AuthUtil.getTenantId().equals(nacosConfigCache.getAdminUserInfo().getTenantId())
            && AuthUtil.getUserId().toString().equals(nacosConfigCache.getAdminUserInfo().getUserId().toString()))
        ){
            // æŒ‰ç…§è§„则所有者来查询
            conidtionMap.put("owner",AuthUtil.getUserId());
        }
@@ -162,14 +171,17 @@
     */
    @Override
    public boolean checkCodeRuleRepeat(CodeRuleDTO codeRuleDTO){
        LambdaQueryWrapper<CodeRule> wrapper = Wrappers.<CodeRule>query()
            .lambda().eq(CodeRule::getId, codeRuleDTO.getId());
        if(AuthUtil.getTenantId().equals(nacosConfigCache.getAdminUserInfo().getTenantId())){
            wrapper.eq(CodeRule::getTenantId,codeRuleDTO.getTenantId());
        }
        // æ ¹æ®è§„则id查询编号
        List<CodeRule> codeRulesList = this.codeRuleMapper.selectList(Wrappers.<CodeRule>query()
            .lambda().eq(CodeRule::getId, codeRuleDTO.getId())
            .eq(CodeRule::getTenantId,AuthUtil.getTenantId().equals(this.tenantId) ? "":codeRuleDTO.getTenantId()));
        List<CodeRule> codeRulesList = this.codeRuleMapper.selectList(wrapper);
        if(!codeRulesList.isEmpty()){
            return codeRulesList.parallelStream().anyMatch(codeRule -> {
                if(StringUtils.isNotBlank(codeRuleDTO.getOid())){
                    // ä»£è¡¨æ˜¯ä¿®æ”¹ï¼Œä¸æ˜¯å°†ç¼–号修改相同的编号
                    // ä»£è¡¨æ˜¯ä¿®æ”¹è§„则,不是将编号修改为已存在的的编号
                    return !codeRule.getOid().equals(codeRuleDTO.getOid());
                }else {
                    return true;
@@ -465,14 +477,21 @@
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R cloneCodeRule(CodeRuleDTO codeRuleDTO) {
    public R cloneCodeRule(CodeRuleDTO codeRuleDTO) throws ServerException {
        if(checkCodeRuleRepeat(codeRuleDTO)){
            return R.fail("规则编号已存在!");
        }
        VciBaseUtil.alertNotNull(codeRuleDTO, "需要添加的数据对象");
        CodeRule codeRuleDO = new CodeRule();
        DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeRuleDO,MdmBtmTypeConstant.CODE_RULE);
        BeanUtilForVCI.copyPropertiesIgnoreCase(codeRuleDTO, codeRuleDO);
        boolean exFlag = codeRuleMapper.insert(codeRuleDO)>0;
        List<CodeBasicSecDTO> secList = codeRuleDTO.getElements();
        List<CodeBasicSec> codeBasicSecs = new ArrayList<>();
        secList.forEach(codeBasicSecDTO -> {
        List<CodeBasicSec> codeClassifySec = new ArrayList<>();
        // å›ºå®šç å€¼æ˜ å°„关系
        Map<String,List<CodeFixedValue>> codeFixedValueMaps = new HashMap<>();
        for (CodeBasicSecDTO codeBasicSecDTO : secList) {
            codeBasicSecDTO.setPkCodeRule(codeRuleDO.getOid());
            KeyValue attrKv = codeBasicSecService.checkAttrNullableBySecType(codeBasicSecDTO);
            if (!"success".equals(attrKv.getKey())) {
@@ -480,13 +499,43 @@
            }
            CodeBasicSec codeBasicSecDO = new CodeBasicSec();
            BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDTO, codeBasicSecDO);
            codeBasicSecDO.setOid("");
            codeBasicSecDO.setRevisionOid("");
            codeBasicSecDO.setNameOid("");
            String oldBasicOid = codeBasicSecDO.getOid(); //被克隆的码段的oid
            // åˆ¤æ–­æ˜¯å¦æ˜¯åˆ†ç±»ç æ®µ
            if(codeBasicSecDO.getSecType().equals(CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue())){
                // å­˜å‚¨æ—§çš„码段oid和新的码段的oid的关联关系
                codeClassifySec.add(codeBasicSecDO);
                continue;
            }
            // æ›´æ”¹åˆ›å»ºæ—¶é—´ï¼Œä¿®æ”¹æ—¶é—´ç­‰é»˜è®¤å€¼
            DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeBasicSecDO,MdmBtmTypeConstant.CODE_BASIC_SEC);
            // å›ºå®šç æ®µ
            if(codeBasicSecDO.getSecType().equals(CodeSecTypeEnum.CODE_FIXED_SEC.getValue())){
                // å›ºå®šç æ®µå­˜å‚¨å¥½oid和码值的关联关系
                codeFixedValueMaps.put(codeBasicSecDO.getOid(),codeFixedValueService.list(Wrappers.<CodeFixedValue>query()
                    .lambda().eq(CodeFixedValue::getCodeFixedSecOid, oldBasicOid)
                ));
            }
            codeBasicSecs.add(codeBasicSecDO);
        });
        }
        // å¤„理分类码段的oid,因为oid关联parentClassifyOid,与码值codeClassifyOid,码值又需要通过旧的码段oid来查询,所以不能直接改变oid
        boolean resChangeAssn = codeBasicSecService.changeParentOidAssnOid(codeClassifySec);
        // å°†å¤„理过的分类码段也添加进要做新增处理的码段集合中
        codeBasicSecs.addAll(codeClassifySec);
        // æ–°å¢žç æ®µ
        boolean exFlag1 = this.codeBasicSecService.saveBatch(codeBasicSecs);
        return R.data(exFlag&&exFlag1);
        // æœ€ç»ˆè¦å­˜å…¥ç å€¼è¡¨ä¸­çš„,码值对象
        List<CodeFixedValue> codeFixedDOValues = new ArrayList<>();
        // æž„造码值对象,与码段主键关联关系,以及改变码值的oid
        codeFixedValueMaps.forEach((key, value) -> {
            value.stream().forEach(item -> {
                item.setOid("");
                item.setCodeFixedSecOid(key);
                DefaultAttrAssimtUtil.updateDefaultAttrAssimt(item);
                codeFixedDOValues.add(item);
            });
        });
        boolean exFlag2 = codeFixedValueService.saveBatch(codeFixedDOValues) && resChangeAssn;
        return R.data(exFlag&&exFlag1&&exFlag2);
    }
    /**
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.vci.ubcs.code.service.impl;
import com.vci.ubcs.code.service.IPasswordFreeLoginService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
 * å…å¯†ç™»å½•服务
 * @author ludc
 * @date 2023/9/11 15:45
 */
@Service
public class PasswordFreeLoginServiceImpl implements IPasswordFreeLoginService {
    /**
     * å…å¯†ç™»å½•方法
     * @param account è´¦å·
     * @return
     */
    @Override
    public boolean passwordFreeLogin(String account) {
        return false;
    }
}