xiejun
2023-07-27 5f545a51231ab4955763fd812a0d914b1d8bc561
PDM集成swing界面相关功能开发
已修改6个文件
已添加32个文件
4329 ■■■■■ 文件已修改
Source/UBCS/pom.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/pom.xml 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410Dialog.java 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410DialogActionListener.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410MainPanel.java 1207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410TreePanel.java 304 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyPanelFor410.java 388 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyPanelFor410ActionListener.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeDataMainPanelDataProvider.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeLibTreeCellRenderer.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CommonActionListener.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/DescViewDialog.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/HttpClient.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/HttpClient3.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/HttpUtil.java 239 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/RMDataReferTempDialog.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/RMDataReferTempDialogActionListener.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/SectionObject.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/TestIntegrateFrame.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/TransmitTreeObject.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/httpClient4.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/AttrRangObjectWarper.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/ClassifyLevel.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/CodeClassify.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/R.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/RMDataTransmitObject.java 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/swing/IntegerTextField.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/swing/RealTextField.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/swing/VCIJComboxBox.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/utils/ConfigUtils.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/resources/properties/conf.properties 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/resources/properties/tt.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/pom.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySwingController.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/pom.xml
@@ -41,6 +41,7 @@
        <module>ubcs-plugin-api</module>
        <module>ubcs-service</module>
        <module>ubcs-service-api</module>
        <module>ubcs-codeApply</module>
    </modules>
    <dependencyManagement>
Source/UBCS/ubcs-codeApply/pom.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>UBCS</artifactId>
        <groupId>com.vci.ubcs</groupId>
        <version>3.0.1.RELEASE</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <properties>
        <vciplt.version>2022.RELEASE</vciplt.version>
        <old.spring.version>3.2.0.RELEASE</old.spring.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>
    <artifactId>ubcs-codeApply</artifactId>
    <dependencies>
        <dependency><!--VciBase基础包-->
            <groupId>com.vci.platform</groupId>
            <artifactId>VCIBase-client</artifactId>
            <version>${vciplt.version}</version>
        </dependency>
        <dependency>
            <groupId>com.vci.platform</groupId>
            <artifactId>VCIBase-common</artifactId>
            <version>${vciplt.version}</version>
        </dependency>
        <dependency>
            <groupId>com.vci.ubcs</groupId>
            <artifactId>ubcs-user-api</artifactId>
            <version>3.0.1.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.vci.ubcs</groupId>
            <artifactId>ubcs-code-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>
        <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>4.1</version>
        </dependency>
    </dependencies>
    <distributionManagement>
        <repository>
            <id>rdc-releases</id>
            <url>http://nexus.vci-tech.com:9000/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>rdc-snapshots</id>
            <url>http://nexus.vci-tech.com:9000/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>
</project>
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410Dialog.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,164 @@
package com.vci.ubcs.codeapply;
import com.vci.base.common.resource.CommonProperties;
import com.vci.base.ui.swing.VCIOptionPane;
import com.vci.base.ui.swing.VCISwingUtil;
import com.vci.base.ui.swing.components.VCIJButton;
import com.vci.base.ui.swing.components.VCIJDialog;
import com.vci.base.ui.swing.components.VCIJPanel;
import com.vci.ubcs.codeapply.utils.ConfigUtils;
import com.vci.ubcs.system.user.entity.User;
import javax.swing.*;
import java.awt.*;
import java.util.LinkedHashMap;
import java.util.Map;
public class CodeApplyFor410Dialog extends VCIJDialog {
    private static final long serialVersionUID = -3286164100581857853L;
    private static User userOb = new User();
    private String userName = null;
    private String codeValue = null;
    private CodeApplyFor410DialogActionListener actionListener = new CodeApplyFor410DialogActionListener(this);
    private VCIJButton okBtn = VCISwingUtil.createVCIJButton("ok", "确认", "确认", "ok.gif", actionListener);
    private VCIJButton cancelBtn = VCISwingUtil.createVCIJButton("cancel", "取消", "取消", "cancel.gif", actionListener);
    private CodeApplyPanelFor410 mainPal = null;
    private Component parentComponet = null;
    private Map<String, String> attrNameAndValMap = new LinkedHashMap();//存储属性名称(包含内部名称和外部名称)和对应的值
    /**
     * å­˜å‚¨åˆ†ç±»çš„Map,key:分类名称,value:分类值
     */
    private String clsfName = null;
    /**
     * å­˜å‚¨å±žæ€§å’Œå€¼çš„Map,key:属性名称,value:属性值
     */
    private String deptName = null;
    private String[] libName = ConfigUtils.getConfigValue("410.PDM.LibCodeName").split("#");//ConfigUtils.getConfigValue("410.PDM.LibCodeName").split("#");//代码项名称
    public CodeApplyFor410Dialog(Frame frame, String clsfName, String deptName) {
        this(frame, "pdmUser", clsfName, deptName,new String[]{});
    }
    public CodeApplyFor410Dialog(JDialog dialog, String clsfName, String deptName) {
        this(dialog, "pdmUser", clsfName, deptName,new String[]{});
    }
    public CodeApplyFor410Dialog(Frame frame, String userName, String clsfName, String deptName, String[] libName){
        super(frame, true);
        try {
            this.setModal(true);
            parentComponet = frame;
            this.userName = userName;
            this.clsfName = clsfName;
            this.deptName = deptName;
            //this.libName = libName;
            init();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public CodeApplyFor410Dialog(JDialog dialog, String userName, String clsfName, String deptName, String[] libName) {
        super(dialog, true);
        try {
            this.setModal(true);
            parentComponet = dialog;
            this.userName = userName;
            this.clsfName = clsfName;
            this.deptName = deptName;
            //    this.libName = libName;
            init();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void initUserInfo() {
//        userOb.set("127.0.0.1");
//        userOb.setModules("TC集成代码申请");
//        userOb.setUserName(userName);
    }
    public void buildDialog() {
        Dimension dime = Toolkit.getDefaultToolkit().getScreenSize();
        int x = dime.width/2 - 400;
        int y = dime.height/2-400;
        this.setLocation(x, y);
        this.setSize(new Dimension(900, 800));
        this.setResizable(true);
        this.setVisible(true);
    }
    private void init() {
        boolean isConnect = verifyConnect();
        if (isConnect) {
            try {
                initUserInfo();
                bulidPal();
            }catch (Exception e){
                showMessageBox( "服务出现异常:->"+e.getMessage());
            }
        } else {
            showMessageBox("无法连接代码服务器!");
        }
    }
    private void bulidPal() throws Exception {
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.setTitle("代码申请");
        mainPal = new CodeApplyPanelFor410(this,userOb, true, clsfName, deptName,libName);
        VCIJPanel btnPal = new VCIJPanel();
        btnPal.add(okBtn);
        btnPal.add(cancelBtn);
        this.setLayout(new BorderLayout());
        this.add(mainPal,BorderLayout.CENTER);
        this.add(btnPal,BorderLayout.SOUTH);
        buildDialog();
    }
    public boolean verifyConnect() {
        try {
//            if (ClientSession.getFrameworkService() != null) {
//                return true;
//            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    public String getApplyCode() {
        return mainPal.getApplyCode();
    }
    public String getCodeValue() {
        return codeValue;
    }
    public void setCodeValue(String codeValue) {
        this.codeValue = codeValue;
    }
    public String getAttributeValue(String attribute) {
        if(attrNameAndValMap.containsKey(attribute)) {
            return attrNameAndValMap.get(attribute);
        }
        return "";
    }
    public void setAttrNameAndValMap() {
        this.attrNameAndValMap = mainPal.getAttrNameAndValMap();
    }
    private void showMessageBox(String message) {
        VCIOptionPane.showMessage(parentComponet, message);
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410DialogActionListener.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package com.vci.ubcs.codeapply;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedHashMap;
public class CodeApplyFor410DialogActionListener implements ActionListener {
    private CodeApplyFor410Dialog owner = null;
    public CodeApplyFor410DialogActionListener(CodeApplyFor410Dialog owner){
        this.owner = owner;
        this.initActionMap();
    }
    private LinkedHashMap<String, Runnable> actionMaps = new LinkedHashMap();
    private void initActionMap(){
        actionMaps.put("ok", new Runnable() { public void run() {
            ok();
        }});
        actionMaps.put("cancel", new Runnable() { public void run() {
            cancel();
        }});
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        String key = e.getActionCommand();
        if(actionMaps.containsKey(key)){
            actionMaps.get(key).run();
        }
    }
    private void ok() {
        this.owner.setCodeValue(this.owner.getApplyCode());
        this.owner.setAttrNameAndValMap();
        this.owner.dispose();
    }
    private void cancel(){
        this.owner.setCodeValue("");
        this.owner.dispose();
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410MainPanel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1207 @@
package com.vci.ubcs.codeapply;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.vci.base.ui.swing.VCIOptionPane;
import com.vci.base.ui.swing.components.*;
import com.vci.base.ui.tree.VCIBaseTreeNode;
import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.codeapply.object.*;
import com.vci.ubcs.codeapply.swing.IntegerTextField;
import com.vci.ubcs.codeapply.swing.RealTextField;
import com.vci.ubcs.codeapply.swing.VCIJComboxBox;
import com.vci.ubcs.codeapply.utils.ConfigUtils;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import com.vci.ubcs.starter.web.pagemodel.KeyValue;
import com.vci.ubcs.system.user.entity.User;
import net.bytebuddy.implementation.bytecode.Throw;
import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
import org.apache.commons.collections4.CollectionUtils;
import javax.swing.*;
import javax.swing.text.JTextComponent;
import javax.swing.tree.TreeNode;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.*;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class CodeApplyFor410MainPanel  extends VCIJPanel {
    //410新需求
    private final String SPECIAL_RULE_NAME="Special.rule.name";
    private final String SPECIAL_SECTION_NAME = "Special.section.name";
    private final String SPECIAL_CONTROL_SECTION_NAME = "Special.control.other.section.name";
    private final String SPECIAL_SECTION_VALUE = "Special.section.val";
    private final String MAX_ATTR_IN_LINE_KEY = "RMData.MaxAttrInLine";
    private final String TEXTAREA_ENABLE_KEY = "RMData.TextArea.Enable";
    private final String MAX_STRING_LENGTH_KEY = "RMData.MaxStringLength";
    private final String TEXTAREA_PRE_SIZE_WIDTH = "RMData.TextArea.PreferredSize.Width";
    private final String TEXTAREA_PRE_SIZE_HEIGHT = "RMData.TextArea.PreferredSize.Height";
    private final String TEXTAREA_MIN_SIZE_WIDTH = "RMData.TextArea.MinimumSize.Width";
    private final String TEXTAREA_MIN_SIZE_HEIGHT = "RMData.TextArea.MinimumSize.Height";
    private final String TEXTAREA_MAX_SIZE_WIDTH = "RMData.TextArea.MaximumSize.Width";
    private final String TEXTAREA_MAX_SIZE_HEIGHT = "RMData.TextArea.MaximumSize.Height";
    // æ˜¯å¦å¯ç”¨å±žæ€§é•¿åº¦è¿‡é•¿æ—¶ï¼Œç”¨TextArea显示,true:启用 false:不启用,默认值true
    private boolean isEnableTextArea = false;
    // å¯ç”¨äº†TextArea后,此TextArea的PreferredSize、MinimumSize、MaximumSize的Width、Height
    private int textAreaPreSizeWidth = 100;
    private int textAreaPreSizeHeight = 50;
    private int textAreaMinSizeWidth = 100;
    private int textAreaMinSizeHeight = 30;
    private int textAreaMaxSizeWidth = 100;
    private int textAreaMaxSizeHeight = 80;
    // åŒä¸€è¡Œå†…,最多加载的属性个数,一行为一组,即一组内最多加载的属性个数,默认值2
    private int maxAttrInLine = 2;
    // å½“String类型的属性值的长度大于此值时,该属性就需要用TextArea显示,并占用整行,默认值100
    private int maxStringLength = 100;
    private int levelPositon = -1;
    private TransmitTreeObject transTreeObject = new TransmitTreeObject();
    private  User userObj;
    private String deptName;
    //存储每个实际 ç æ®µåˆ—对应的码段对象
    protected Map<Integer,CodeBasicSecVO> columnSecMap = new LinkedHashMap<Integer,CodeBasicSecVO>();
    private LinkedHashMap<Integer, JComponent> compMaps = new LinkedHashMap<Integer, JComponent>();
    private Map<String, JComponent> secAndComMap = new LinkedHashMap<String, JComponent>();
    private Map<JComponent, JComponent> comtMap = new LinkedHashMap<JComponent, JComponent>();
    private Map<String, VCIJComboBox> secNameAndComtMap = new LinkedHashMap<String, VCIJComboBox>();
    private Map<Integer,String> secIndexAndNameMap = new LinkedHashMap<Integer, String>();
    private List<JComponent> specSecList = new ArrayList<JComponent>();
    private boolean isSpecialRuleFlag = false;
    private String specialSectioName = "";
    private VCIJPanel rulePal = new VCIJPanel();
    private String[] specialSecVals = new String[0];
    private RMDataTransmitObject transmitForRMData = null;
    /**
     * å±žæ€§ID与属性对应的控件之间的映射MAP
     */
    private LinkedHashMap<String, JComponent> attrIdToCtrlMaps = new LinkedHashMap<String, JComponent>();
    /**
     * å±žæ€§çš„内部名称与属性对应的控件之间的映射MAP
     */
    private LinkedHashMap<String, JComponent> attrInnerNameToCtrlMaps = new LinkedHashMap<String, JComponent>();
    /**
     * å¼•用玛段码值与combox元素位置的映射MAP
     */
    private LinkedHashMap<String, Integer>  refSecValueToCombxindex = new LinkedHashMap<String, Integer>();
    /**
     * ç æ®µid与分类码段码值描述对象对应的控件之间的映射MAP
     */
    private LinkedHashMap<String, JComponent> secIdToClsfIdMap = new LinkedHashMap<String, JComponent>();
    private List<VCIJTextField> textCompts = new LinkedList<VCIJTextField>();
    /**
     * å½“前选择的分类的模板
     */
    private CodeClassifyTemplateVO currentCodeClassifyTemplateVO;
    // å®žé™…çš„
    private VCIJDialog realDialogInstance = null;
    public CodeApplyFor410MainPanel(TransmitTreeObject transTreeObject, User userObj, CodeClassifyTemplateVO currentCodeClassifyTemplateVO) {
        this.transTreeObject = transTreeObject;
        this.userObj = userObj;
        this.currentCodeClassifyTemplateVO=currentCodeClassifyTemplateVO;
    }
    public CodeApplyFor410MainPanel(TransmitTreeObject transTreeObject,User userObj,String deptName,CodeClassifyTemplateVO currentCodeClassifyTemplateVO) {
        this.transTreeObject = transTreeObject;
        this.userObj = userObj;
        this.deptName = deptName;
        this.currentCodeClassifyTemplateVO=currentCodeClassifyTemplateVO;
    }
    /**
     *
     * @param type, 1代表申请,2设置流水
     */
    public void buildMainPanel(int type) {
        try {
            init(type);
            if (type == 2) {
                return;
            }
            this.initRMTypeTreeMaps();
            this.initContents();
        }catch (Exception e){
            VCIOptionPane.showMessage(this,e.getMessage());
        }
    }
    private void init(int type){
        this.loadTextAreaEnableEnv(); //add by liujw
        //this.loadSpecialRuleConfig();
        CodeClassify rmType = (CodeClassify) this.transTreeObject.getCurrentTreeNode().getObj();
        String url= ConfigUtils.getConfigValue("410.PDM.rule.url","http://127.0.0.1:36014/codeApplySwingController/getCodeRuleByClassifyFullInfo");
        /**系统只加载代码项  å¦‚æžœlibName不为空,直接获取对应的代码项**/
        Map<String,String> condtionMap=new HashMap<>();
        condtionMap.put("codeClassId", rmType.getOid());
        R r=HttpUtil.sendGet(url,condtionMap,new HashMap<>());
        CodeRuleVO codeRuleVO=new CodeRuleVO();
        if(r.isSuccess()){
            Object object= r.getData();
            if(object!=null) {
                ObjectMapper objectMapper = new ObjectMapper();
                try {
                    codeRuleVO = objectMapper.readValue(object.toString(),CodeRuleVO.class);
                } catch (JsonProcessingException e) {
                    e.printStackTrace();
                }
            }
        }else{
            VCIOptionPane.showMessage(this,r.getMsg());
        }
        /**加载规则对应的码段信息**/
        if(codeRuleVO!=null){
            List<CodeBasicSecVO> codeBasicSecVOList=codeRuleVO.getSecVOList();
            if(!CollectionUtils.isEmpty(codeBasicSecVOList) ){
                /**初始化码段panel**/
                initSectionPanel(codeBasicSecVOList, codeRuleVO.getOid(), type);//初始化规则码段
            }
        }
        this.setLayout(new BorderLayout());
        this.add(rulePal,BorderLayout.CENTER);
    }
    /**
     * è§„则码段主界面
     * <p>Description: </p>
     *
     * @author Administrator
     * @time 2012-8-7
     * @param objs
     * @param cRuleId
     */
    private void initSectionPanel(List<CodeBasicSecVO> objs, String cRuleId, int type)  {
        //循环获取列名
        int column = 0;
        for(int i = 0; i < objs.size(); i++) {
            if(objs.get(i).getSecType().equals("codeserialsec")){//流水码段不在TABLE里显示
                if (type == 1) {
                    continue;
                } else if (type == 2) {
                    break;
                }
            }
            columnSecMap.put(column++,objs.get(i));
        }
        createSectionPanel(objs, type);
    }
    private void createSectionPanel(List<CodeBasicSecVO> secObjs, int type)  {
        /**每次选择代码项后,自动加载规则码段和模板属性信息,清除原来的码段信息**/
        rulePal.removeAll();
        rulePal.updateUI();
        /**根据规则获取码段信息界面**/
        VCIJPanel sectionPal = new VCIJPanel(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        int x = 0;
        int y = 0;
        int maxAttrInLine = 1;
        int column = 2;
        List<CodeBasicSecVO> secList = new ArrayList<CodeBasicSecVO>();
        List<VCIJComboxBox> comList = new ArrayList<VCIJComboxBox>();
        compMaps.clear();
        secAndComMap.clear();
        secIdToClsfIdMap.clear();
        secNameAndComtMap.clear();
        secIndexAndNameMap.clear();
        // åŠ è½½ç æ®µåˆ—è¡¨
        boolean isBreak = false;
        for(int secIndex = 0; secIndex < secObjs.size(); secIndex += maxAttrInLine){//for1
            for(int columnIndex = 0; columnIndex < maxAttrInLine; columnIndex++){ //for2
                if(secIndex + columnIndex >= secObjs.size()){
                    break;
                }
                if(secObjs.get(secIndex).getSecType().equals("codeserialsec")){//流水码段不在TABLE里显示
                    if (type == 1) {
                        continue;
                    } else {
                        isBreak = true;
                        break;
                    }
                } /*else if (secObjs[secIndex].getSecType() == SectionConstant.SectionType.SECCHAR){//是分隔符
                    continue;
                }*/
                CodeBasicSecVO secObj = secObjs.get(secIndex+columnIndex);
                VCIJLabel lbl = new VCIJLabel(secObj.getName() + ":");
                lbl.setForeground(new Color(129, 0, 0));
                JComponent compt = null;//码段名称
                VCIJComboxBox cbx = new VCIJComboxBox();
                compt = cbx;
                secList.add(secObj);
                comList.add(cbx);
                compMaps.put(column, compt);
                secNameAndComtMap.put(secObj.getName(), cbx);
                secIndexAndNameMap.put(column, secObj.getName());
                /**层级码段需要特殊处理:如果是层级码段,下拉框不能编辑,显示的值是选中的树节点的分类名称和代号**/
                if(secObj.getSecType().equals ("codelevelsec")) {//层级码段
                    levelPositon = column;
                    compt.setEnabled(false);
                }
//                relationMap.put(secIndex, column);
                secAndComMap.put(secObj.getId(), cbx);
                column++;
                c.gridx = x++;
                c.gridy = y;
                c.gridheight = 1;
                c.gridwidth = 1;
                c.weightx = 0d;
                c.weighty = 0d;
//                c.fill = GridBagConstraints.NONE;
                c.anchor = GridBagConstraints.EAST;
                c.insets = new Insets(1, 1, 10, 10);
                c.ipadx = 3;
                c.ipady = 3;
                lbl.setPreferredSize(new Dimension(100,25));
                sectionPal.add(lbl, c);
                c.gridx = x++;
                c.weightx = 0d;
                c.fill = GridBagConstraints.CENTER;
                c.anchor = GridBagConstraints.WEST;
                compt.setPreferredSize(new Dimension(200,25));
                sectionPal.add(compt, c);
                //如果当前码段是需要特殊处理的码段,系统进行记录处理
                if(isSpecialRuleFlag && specialSectioName.equals(secObj.getName())) {
                    specSecList.add(lbl);
                    specSecList.add(compt);
                }
                /**分类码段添加描述信息  410新需求:分类码段码值增加'码值描述'字段 BEGIN***/
                if(secObj.getSecType().equals("codeclassifysec")) {
                    VCIJLabel lblDesc = new VCIJLabel("描述:");
                    c.gridx = x++;
                    c.weightx = 0d;
                    c.fill = GridBagConstraints.NONE;
                    c.anchor = GridBagConstraints.WEST;
                    lblDesc.setPreferredSize(new Dimension(40,25));
                    sectionPal.add(lblDesc, c);
                    VCIJTextField txtDesc = new VCIJTextField("");
                    c.gridx = x++;
                    c.weightx = 0d;
                    c.fill = GridBagConstraints.CENTER;
                    c.anchor = GridBagConstraints.WEST;
                    txtDesc.setPreferredSize(new Dimension(200,25));
                    txtDesc.setEditable(false);
                    sectionPal.add(txtDesc, c);
                    secIdToClsfIdMap.put(secObj.getId(), txtDesc);
                    //详细描述信息的查看
                    VCIJLabel clsfDescLbl = new VCIJLabel();
                    clsfDescLbl.setText("<html><u>"+"详细描述"+"</u><html>");
                    clsfDescLbl.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
                    clsfDescLbl.setForeground(Color.RED);
                    comtMap.put(clsfDescLbl,txtDesc);
                    clsfDescLbl.addMouseListener(new MouseAdapter() {
                        public void mouseClicked(MouseEvent e){
                            clsfValDescActionListener(e);
                        }
                    });
                    c.gridx = x++;
                    c.weightx = 0d;
                    c.fill = GridBagConstraints.NONE;
                    c.anchor = GridBagConstraints.WEST;
//                    lblDesc.setPreferredSize(new Dimension(100,25));
                    sectionPal.add(clsfDescLbl, c);
                    //如果当前码段是需要特殊处理的码段,系统进行记录处理
                    if(isSpecialRuleFlag && specialSectioName.equals(secObj.getName())) {
                        specSecList.add(lblDesc);
                        specSecList.add(txtDesc);
                        specSecList.add(clsfDescLbl);
                    }
                }
                /****************************END**********************************/
            }// for 2
            if (isBreak) {
                break;
            }
            x = 0;
            y += 1;
        }// for 1
        rulePal.setLayout(new BorderLayout());
        rulePal.add(sectionPal,BorderLayout.CENTER);
        if (type == 1) {
            rulePal.add(createAttrPal(),BorderLayout.SOUTH);
        }
        initCurrentRow(secList.toArray(new CodeBasicSecVO[0]),comList.toArray(new VCIJComboxBox[0]));
    }
    /**加载模板属性信息面板**/
    private VCIJPanel createAttrPal() {
        VCIJPanel attrPal = new VCIJPanel();
        CodeClassify rmTypeObj = (CodeClassify) this.transTreeObject.getCurrentTreeNode().getObj();
        /**选择了代码项**/
        if(rmTypeObj != null) {
            transmitForRMData = loadTemplateAttributes("",rmTypeObj.getId(),"");
            /**代码项下的模板包含属性**/
            if(transmitForRMData.getTempPropObjsList().size() > 0) {
                attrPal = createTemplateAttributePanel(transmitForRMData);
            }
        }
        return attrPal;
    }
    private void loadSpecialRuleConfig() {
        /******added by ligang æ˜¯å¦æ˜¯ç‰¹æ®Šè§„则的判断Begin******/
        /*CodeClassify rmType = (CodeClassify) this.transTreeObject.getCurrentTreeNode().getObj();
        RuleManagerObject ruleObj = ruleDel.getRuleManagerById(rmType.getRuleOid());
        String specialRuleName = ConfigUtils.getConfigValue(SPECIAL_RULE_NAME);
        isSpecialRuleFlag = ruleObj.getPlname().toUpperCase().equals(specialRuleName.toUpperCase()) ? true : false;
        specialControlSecName = ConfigUtils.getConfigValue(SPECIAL_CONTROL_SECTION_NAME);
        specialSectioName = ConfigUtils.getConfigValue(SPECIAL_SECTION_NAME);
        specialSecVals = ConfigUtils.getConfigValue(SPECIAL_SECTION_VALUE).split(",");*/
        /*********************End*************************/
    }
    /**
     * åŠ è½½æ˜¯å¦å¯ç”¨TextArea环境参数
     * <p>
     * Description:
     * </p>
     * @author liujw
     * @throws
     * @time 2013-4-16
     */
    private void loadTextAreaEnableEnv()  {
        String textAreaEnable = ConfigUtils.getConfigValue(TEXTAREA_ENABLE_KEY);
        String strAttrInLine = ConfigUtils.getConfigValue(MAX_ATTR_IN_LINE_KEY);
        if (isNumber(strAttrInLine)) {
            Integer iLength = Integer.valueOf(strAttrInLine);
            if (iLength > 0) {
                this.maxAttrInLine = iLength;
            }
        }
        if (textAreaEnable.toLowerCase().equals("true")) {
            this.isEnableTextArea = true;
        }
        if(this.isEnableTextArea){
            String cfgValue = "";
            cfgValue = ConfigUtils.getConfigValue(MAX_STRING_LENGTH_KEY);
            if (isNumber(cfgValue)) {
                Integer iLength = Integer.valueOf(cfgValue);
                if (iLength > 0) {
                    this.maxStringLength = iLength;
                }
            }
            cfgValue = ConfigUtils.getConfigValue(TEXTAREA_PRE_SIZE_WIDTH);
            if (isNumber(cfgValue)) {
                Integer iValue = Integer.valueOf(cfgValue);
                if (iValue > 0) {
                    this.textAreaPreSizeWidth = iValue;
                }
            }
            cfgValue = ConfigUtils.getConfigValue(TEXTAREA_PRE_SIZE_HEIGHT);
            if (isNumber(cfgValue)) {
                Integer iValue = Integer.valueOf(cfgValue);
                if (iValue > 0) {
                    this.textAreaPreSizeHeight = iValue;
                }
            }
            cfgValue = ConfigUtils.getConfigValue(TEXTAREA_MIN_SIZE_WIDTH);
            if (isNumber(cfgValue)) {
                Integer iValue = Integer.valueOf(cfgValue);
                if (iValue > 0) {
                    this.textAreaMinSizeWidth = iValue;
                }
            }
            cfgValue = ConfigUtils.getConfigValue(TEXTAREA_MIN_SIZE_HEIGHT);
            if (isNumber(cfgValue)) {
                Integer iValue = Integer.valueOf(cfgValue);
                if (iValue > 0) {
                    this.textAreaMinSizeHeight = iValue;
                }
            }
            cfgValue = ConfigUtils.getConfigValue(TEXTAREA_MAX_SIZE_WIDTH);
            if (isNumber(cfgValue)) {
                Integer iLength = Integer.valueOf(cfgValue);
                if (iLength > 0) {
                    this.textAreaMaxSizeWidth = iLength;
                }
            }
            cfgValue = ConfigUtils.getConfigValue(TEXTAREA_MAX_SIZE_HEIGHT);
            if (isNumber(cfgValue)) {
                Integer iLength = Integer.valueOf(cfgValue);
                if (iLength > 0) {
                    this.textAreaMaxSizeHeight = iLength;
                }
            }
        }
    }
    /**
     * åˆ†ç±»å±‚级注入功能的完善
     * <p>Description: </p>
     *
     * @author ligang
     * @time 2013-5-7
     */
    private void initContents() {
        Iterator<String> keys = transmitForRMData.getTempPropObjsMap().keySet().iterator();
        while(keys.hasNext()){
            String key = keys.next();
            CodeClassifyTemplateAttrVO tempPropObj = transmitForRMData.getTempPropObjsMap().get(key);
            String referConfig=tempPropObj.getReferConfig();//参照配置
            String componentRule=tempPropObj.getComponentRule();//组合规则
            String innerName = tempPropObj.getId();
            if (attrInnerNameToCtrlMaps.containsKey(innerName)) {
                String classifyLevel = tempPropObj.getClassifyInvokeLevel();
                String classifyInvokeAttr= tempPropObj.getClassifyInvokeAttr();
                JComponent compt = attrInnerNameToCtrlMaps.get(innerName);
                if(StringUtils.isNotBlank(classifyLevel)&&!classifyLevel.equals("none")&&!classifyLevel.equals("min")) {
                    compt.setEnabled(false);
                    //ClassifyLevel classifyLevelObj=new ClassifyLevel();
                    //ObjectMapper objectMapper = new ObjectMapper();
                    String value = "";
                    /*classifyLevelObj = objectMapper.readValue(classifyLevel.toString(), ClassifyLevel.class);
                    String set=classifyLevelObj.getSet();
                    String type=classifyLevelObj.getType();*/
                    if (classifyLevel.equals("min")) {
                        CodeClassify rmType = (CodeClassify) this.transTreeObject.getCurrentTreeNode().getObj();
                        if ("name".equals(classifyInvokeAttr)) {
                            value = rmType.getName();
                        } else if ("id".equals(classifyInvokeAttr)) {
                            value = rmType.getId();
                        }
                    } else {
                        int intLevel = Integer.parseInt(classifyLevel);
                        if (rmTypeTreeMaps.containsKey(intLevel)) {
                            CodeClassify rmType = rmTypeTreeMaps.get(intLevel);
                            if ("name".equals(classifyInvokeAttr)) {
                                value = rmType.getName();
                            } else if ("id".equals(classifyInvokeAttr)) {
                                value = rmType.getId();
                            }
                        }
                    }
                    if (compt instanceof JTextComponent) {
                        ((JTextComponent) compt).setText(value);
                    }
                }
                //参照配置的设置成只读模式
                if(StringUtils.isNotBlank(referConfig)||StringUtils.isNotBlank(componentRule)){
                    compt.setEnabled(false);
                }
            }
        }
    }
    /**
     * åˆ†ç±»æ ‘中的分类对象map
     */
    private LinkedHashMap<Integer, CodeClassify> rmTypeTreeMaps = new LinkedHashMap();
    private void initRMTypeTreeMaps(){
        if(transTreeObject != null){
            TreeNode[] nodes = transTreeObject.getTreeModel().getPathToRoot(transTreeObject.getCurrentTreeNode());
            int level = 1;
            int start = 1;
            for(int i = start; i < nodes.length; i++){
                TreeNode node = nodes[i];
                if(node instanceof VCIBaseTreeNode){
                    VCIBaseTreeNode treeNode = (VCIBaseTreeNode) node;
                    Object obj = treeNode.getObj();
                    if((treeNode.isRoot() || (obj instanceof String))){
                        //
                    }else if(obj instanceof CodeClassify){
                        CodeClassify rmType = (CodeClassify)obj;
                        rmTypeTreeMaps.put(level++, rmType);
                    }
                }
            }
        }
    }
    /**
     * åˆå§‹åŒ–个码段码值,如果是分类码只加载父分类的分类码值,子分类不加载
     * @param secObjs
     */
    public void initCurrentRow(CodeBasicSecVO[] secObjs,VCIJComboxBox[] secCombos) {
        SectionObject lastSecObj = null;
        VCIJComboxBox hisCombo = null;
        try {
            final Map<String, String> secValMap = getSpecialValMap(specialSecVals);
            for(int k = 0;k < secObjs.length; k++) {
                final CodeBasicSecVO secObj = secObjs[k];
                final VCIJComboxBox secCombo = secCombos[k];
                if(null == secObj) {
                    return;
                }
                if (secObj.getSecType().equals("codeclassifysec")) {// æ˜¯åˆ†ç±»ç 
                        continue;
                } else
                    // æ˜¯å›ºå®šç 
                    if (secObj.getSecType() .equals("codefixedsec")) {
                /*    SectionValueClientDelegate codeValDel = new SectionValueClientDelegate(userObj);
                    FixCodeValObject[] codeValObjs = codeValDel.fetchFixCodeValBySecId(secObj.getId());// èŽ·å–è¯¥ç æ®µä¸‹çš„æ‰€æœ‰ç æ®µç å€¼å¯¹è±¡
                    //如果只有一个值,则系统默认选择,不加空值
                    if(codeValObjs.length > 1 ) {
                        secCombo.addItem(new FixCodeValObject());
                    }
                    for (int i = 0; i < codeValObjs.length; i++) {
                        secCombo.addItem(codeValObjs[i]);
                    }
                    *//**当系统选择的是指定码段值时,组别代号的码段系统不显示 Begin**//*
                    FixCodeValObject selObj = (FixCodeValObject) secCombo.getSelectedItem();
                    if(isSpecialRuleFlag && (secObj.getName().equals(specialControlSecName) && secValMap.containsKey(selObj.getValue())) || secValMap.containsKey(getControlSecSelectValue())) {
                        setComponentStatus(false);
                    }else {
                        setComponentStatus(true);
                    }
                    if (secCombo.getItemCount() > 10){
                        if (!secCombo.isFlag()){
                            secCombo.setFlag(true);
                            secCombo.getSearchBtn().setVisible(true);
                            secCombo.getSearchBtn().addActionListener(new ActionListener() {
                                @Override
                                public void actionPerformed(ActionEvent e) {
                                    doSearch(secCombo);
                                }
                            });
                        }
                    }else {
                        secCombo.setFlag(false);
                        secCombo.getSearchBtn().setVisible(false);
                    }*/
                }  else
                        // æ˜¯æ—¥æœŸç æ®µ
                    if (secObj.getSecType().equals("codedatesec")) {
                    /*SectionClientDelegate secDel = new SectionClientDelegate(userObj);
                    DateSecObject dateObj = secDel.fetchDateSecById(secObj.getId());
                    String df = dateObj.getFormat();
                    SimpleDateFormat dateFormate = new SimpleDateFormat(df);
                    String curDate = dateFormate.format(Calendar.getInstance().getTime());
                    secCombo.addItem(curDate);
                    if(dateObj.getIsModify().equals("Y")){//可以修改
                        secCombo.setEditable(true);
                    }*/
                } else
                        //是引用码段
                    if (secObj.getSecType().equals("coderefersec")) {
                    /*RefSecObject refObj = getRefSecObj(secObj.getId());
                    DefaultComboBoxModel aModel = getRefSecComboBox(refObj);
                    secCombo.setModel(aModel);
                    if(deptName != null && !("".equals(deptName))){
                        Integer index = refSecValueToCombxindex.get(deptName);
                        if(index !=null){
                            secCombo.setSelectedIndex(index);
                        }
                    }
                    if (secCombo.getItemCount() > 10){
                        if (!secCombo.isFlag()){
                            secCombo.setFlag(true);
                            secCombo.getSearchBtn().setVisible(true);
                            secCombo.getSearchBtn().addActionListener(new ActionListener() {
                                @Override
                                public void actionPerformed(ActionEvent e) {
                                    doSearch(secCombo);
                                }
                            });
                        }
                    }else {
                        secCombo.setFlag(false);
                        secCombo.getSearchBtn().setVisible(false);
                    }
                */} else
                        //层级码段码值显示的是选择的代码项的名称
                    if(secObj.getSecType().equals("coderefersec")) {
                    /*RMTypeObject rmObj = (RMTypeObject) this.transTreeObject.getCurrentTreeNode().getObj();
                    secCombo.addItem(rmObj);*/
                } else {
                    secCombo.setEditable(true);
                }
            }
        }catch (Exception e) {
            e.printStackTrace();
            VCIOptionPane.showError(this, "初始化码段码值出现错误!");
        }
    }
    /**
     * åŠ è½½æ¨¡æ¿çš„å®šä¹‰çš„å±žæ€§ã€å±žæ€§æ•°æ®
     * <p>Description: </p>
     *
     * @author xchao
     * @time 2012-6-7
     * @param libId
     * @param classifyId
     * @param templateId
     * @return
     */
    public RMDataTransmitObject loadTemplateAttributes(String libId, String classifyId, String templateId) {
        RMDataTransmitObject transmit=new RMDataTransmitObject();
        transmit.setLibId(libId);
        transmit.setClassifyId(classifyId);
        CodeClassify rmType = (CodeClassify) this.transTreeObject.getCurrentTreeNode().getObj();
        transmit.setRmTypeObject(rmType);
        if(currentCodeClassifyTemplateVO!=null) {
            transmit.setTemplateId(templateId);
            Map<String, CodeClassifyTemplateAttrVO> tempPropObjMapsByInnerName = currentCodeClassifyTemplateVO.getAttributes().stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
            transmit.setClassifyCode(rmType.getId());
            transmit.setTempPropObjMapsByInnerName(tempPropObjMapsByInnerName);
            Map<String, CodeClassifyTemplateAttrVO> tempPropObjsMap = currentCodeClassifyTemplateVO.getAttributes().stream().collect(Collectors.toMap(s -> s.getOid().toLowerCase(Locale.ROOT), t -> t));
            transmit.setTempPropObjsMap(tempPropObjsMap);
            transmit.setTemplateObject(currentCodeClassifyTemplateVO);
            transmit.setTempPropObjsList(this.currentCodeClassifyTemplateVO.getAttributes());
        }
        return transmit;
    }
    /****
     * åŠ è½½ä»£ç é¡¹å¯¹åº”çš„æ¨¡æ¿å±žæ€§ä¿¡æ¯åˆ—è¡¨
     * <p>Description: </p>
     *
     * @author Administrator
     * @time 2013-3-23
     * @param transmitForRMData ï¼šæ¨¡æ¿å±žæ€§,分类等信息
     * @return
     */
    private VCIJPanel createTemplateAttributePanel(final RMDataTransmitObject transmitForRMData)  {
        //int maxAttrInLine = 2;
        VCIJPanel pal = new VCIJPanel();
        pal.setLayout(new GridBagLayout());
        int gridx = -1;
        int gridy = -1;
        int gridwidth = 1;
        double weighty = 0.0;
        CodeClassifyTemplateAttrVO[] realAttrs = getRealAttributeObjects(transmitForRMData);
        Map<String, String> attrMaps = getTempPropMap(transmitForRMData);
        attrIdToCtrlMaps.clear();
        attrInnerNameToCtrlMaps.clear();
        for (int attrIndex = 0; attrIndex < realAttrs.length; attrIndex += maxAttrInLine) {// for1
            gridx = 0;
            gridy += 1;
            boolean leastNewLine = checkLeastNewLine(attrIndex, maxAttrInLine,attrMaps,realAttrs);
            for (int columnIndex = 0; columnIndex < maxAttrInLine; columnIndex++) { // for2
                int index = columnIndex + attrIndex;
                if (index >= realAttrs.length) {
                    break;
                }
                CodeClassifyTemplateAttrVO attrObj = realAttrs[index];
                /***如果模板配置了引用模板,属性名称列表添加链接进行处理 BEGIN**/
                //ADD BY liujw
                VCIJLabel lbl = null;
                if(StringUtils.isNotBlank(attrObj.getReferConfig())) {//引用模板属性值
                    lbl = new VCIJLabel("<html><u>"+(attrObj.getName() + ":")+"</u><html>");
                    lbl.setForeground(Color.MAGENTA);
                    lbl.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
                    lbl.setToolTipText("点击此处加载引用模板属性数据");
                    lbl.addMouseListener(new MouseAdapter() {
                        public void mouseClicked(MouseEvent e){
                            getReferTempRMData(attrObj,attrIdToCtrlMaps,transmitForRMData.getTempPropObjsList());
                        }
                    });
                } else if(!"".equals(attrObj.getComponentRule())) {//模板规则的组合
                    String lblName = "☆"+attrObj.getName() + "☆:";
                    lbl = new VCIJLabel("<html><u>"+lblName+"<u></html>");
                    lbl.setForeground(Color.BLUE);
                    lbl.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
                    lbl.setToolTipText("点击此处获取模板对应规则的值");
                    lbl.addMouseListener(new MouseAdapter() {
                        public void mouseClicked(MouseEvent e){
                        //    getComptAttrValue(attrObj,attrIdToCtrlMaps,transmitForRMData.getTempPropObjsList());
                        }
                    });
                } else if(attrObj.getKeyAttrFlag().equals("true")) {//关键属性
                    lbl = new VCIJLabel(attrObj.getName() + ":");
                    lbl.setForeground(new Color(255, 0, 0));
                }
                else {
                    lbl = new VCIJLabel(attrObj.getName() + ":");
                    lbl.setForeground(attrObj.getRequireFlag().equals("true") ? new Color(0, 120, 0) : new Color(129, 0, 0));
                }
                JComponent compt = createComponent(attrObj);
                JComponent comptAddToPanel = compt;
                //by liujw
                boolean isMultiLineFlag = attrObj.getTextAreaFlag().equals("true") ? true : false;
                if (this.isEnableTextArea && isMultiLineFlag // å¯ç”¨TextArea显示处理,且属性长度超过一定范围
                    && attrObj.getAttributeDataType().toUpperCase().equals("VTstring".toUpperCase()) // String类型
                ) {
                    VCIJTextArea textArea = new VCIJTextArea("", attrObj.getRequireFlag().equals("true"));
                    VCIJScrollPane textAreaScroll = createTextAreaScrollPane(textArea);
                    textArea.setEnabled(compt.isEnabled());
                    comptAddToPanel = textAreaScroll;
                    if(compt instanceof JTextComponent){
                        textArea.setText(((JTextComponent)compt).getText());
                    }
                    compt = textArea;
                }
                /**
                 * æ–¹æ¡ˆï¼šV1 å±žæ€§ç»„件加载、显示策略 1、每行(一组)最多显示maxAttrInLine个属性
                 * 2、如果isEnableTextArea为true,则是启用TextArea
                 * 3、启用TextArea后,如果一组内的属性,只要任意一个属性定义的属性长度大于或等于maxStringLength
                 * ï¼Œåˆ™è¯¥ç»„内的每个属性都将独占一整行
                 * æ­¤æ–¹æ¡ˆå­˜åœ¨çš„问题:因为除TextArea之外的属性也将占整行显示,如果一组内的属性个数较多
                 * ï¼ˆå¤§äºŽ2)时,界面显示层面不太,友好,尤其是连续出现多个TextArea时此现象更加明显
                 * å› æ­¤å»ºè®®é…ç½®ï¼šå¯ç”¨TextArea时,RMData.MaxAttrInLine=2,即一组内最多加载两个属性。
                 */
                // ä¸€ç»„至少存在着一个TextArea时,该组内其它属性也将占整个宽度(独占一行),
                if (leastNewLine) {
                    gridwidth = maxAttrInLine * 2;
                    gridx = 0;
                    gridy += 1;
//                        weighty = 1.0;
                    weighty = 0.0;
                } else {
                    gridwidth = 1;
                    weighty = 0.0;
                }
                pal.add(lbl,createGridBagConstraints(gridx, gridy, 1, 1, 0.0, 0.0,GridBagConstraints.NORTHEAST,GridBagConstraints.NONE));
                pal.add(comptAddToPanel,createGridBagConstraints(gridx + 1, gridy, gridwidth,1, 1.0, weighty, GridBagConstraints.NORTHWEST,GridBagConstraints.BOTH));
                // å¦‚果这一组内不存在着需要占整行显示的,则计算横坐标
                //gridx += 2;
                if (!leastNewLine) {
                    gridx += 2;
                }
                /*********************** æ–¹æ¡ˆï¼šV1 End ***********************/
                // ç¼“存各属性对应的控&组件
                String key = attrObj.getId();
                if (!attrIdToCtrlMaps.containsKey(key)) {
                    attrIdToCtrlMaps.put(key, compt);
                }
                // å­˜å‚¨å±žæ€§å†…部名称与控件的关系
                key = attrObj.getId();
                if (!attrInnerNameToCtrlMaps.containsKey(key)) {
                    attrInnerNameToCtrlMaps.put(key, compt);
                }
            }// for 2
        }// for 1
        // åœ¨åº•部添加一行,占据全部的空余区域,其它控件自动从对齐到顶部
        pal.add(new VCIJLabel(""),createGridBagConstraints(0, gridy + 1, maxAttrInLine * 2, 1,1.0, 10.0, GridBagConstraints.NORTHWEST,GridBagConstraints.BOTH));
        this.setTextComptList(textCompts);
        return pal;
    }
    /**根据属性组合规则获取属性的值 **/
    //add by liujw
    private void getComptAttrValue(CodeClassifyTemplateAttrVO attrObj, LinkedHashMap<String, JComponent> attrIdToCtrlMaps) {
        Map<String, String> attrNameMap = new LinkedHashMap<String, String>();
        Map<String, String> tempProMap = new LinkedHashMap<String, String>();
        // å„属性的内部名称
        LinkedList<String> listInnerNames = new LinkedList<String>();
        // å„属性对应的数据值
        LinkedList<String> listValues = new LinkedList<String>();
        // å„属性的类型
        LinkedList<String> listDataTypes = new LinkedList<String>();
        Iterator<String> keys = attrIdToCtrlMaps.keySet().iterator();
        JComponent compt = null;
        while (keys.hasNext()) {
            String attrOid = keys.next();
            compt = attrIdToCtrlMaps.get(attrOid);
            String value = "";
            if (compt instanceof JTextComponent) {
                value = ((JTextComponent) compt).getText();
            } else if (compt instanceof VCIJCalendarPanel) {
                value = ((VCIJCalendarPanel) compt).getDateString();
                value = value == null ? "" : value;
            } else if (compt instanceof VCIJComboBox) {
                Object objItem = ((VCIJComboBox) compt).getSelectedItem();
                if (objItem instanceof AttrRangObjectWarper) { // å±žæ€§å–值范围
                    value = ((AttrRangObjectWarper) objItem).getKeyValue().getValue();
                } else if (objItem instanceof String) { // Boolean类型的会提供0\1选择
                    value = (String) objItem;
                }
            }
            // å…¨éƒ¨éªŒè¯é€šè¿‡
            listInnerNames.add(attrObj.getId());
            listValues.add(value);
            listDataTypes.add(attrObj.getAttributeDataType());
            /**修复属性定义中'/'不能支持的bug**/
            String attrName = attrObj.getName();
            if(attrName.indexOf("/") != -1) {
                attrName = attrObj.getName().replaceAll("/", "_");
            }
            attrNameMap.put(attrName, value);
            /****************End******************/
            tempProMap.put(attrObj.getOid(), attrObj.getId());
        }
        /**根据模板中配置的属性规则,根据规则对属性数据进行组合或者拆分 BEGIN***/
        List<CodeClassifyTemplateAttrVO> list = transmitForRMData.getTempPropObjsList();
        for(CodeClassifyTemplateAttrVO obj : list) {
            if(!"".equals(obj.getComponentRule())) {
                try {
                    /**修复属性定义中'/'不能支持的bug Begin**/
                    String tempRule = obj.getComponentRule();
                    if(tempRule.indexOf("/") != -1) {
                        tempRule = obj.getComponentRule().replaceAll("/", "_");
                    }
                    String value = "";//FreeMarkerCommon.getValueByTempRule(attrNameMap,tempRule);
                    /****************End******************/
                    JComponent comp = attrInnerNameToCtrlMaps.get(tempProMap.get(obj.getOid()));
                    if(comp instanceof JTextComponent) {
                        ((JTextComponent) comp).setText(value);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
    /**
     * èŽ·å–çœŸå®žçš„ã€å®žé™…çš„éœ€è¦åŠ è½½åˆ°UI的属性列表
     * <p>
     * Description:
     * </p>
     *
     * @author xchao
     * @time 2012-11-6
     * @param transmitForRMData
     *            å½“前上下数据传递对象
     * @return
     */
    private CodeClassifyTemplateAttrVO[] getRealAttributeObjects(RMDataTransmitObject transmitForRMData) {
        // å–模板的属性
        CodeClassifyTemplateAttrVO[] tempAttrs = transmitForRMData.getTempPropObjsList().toArray(new CodeClassifyTemplateAttrVO[0]);
        LinkedList<CodeClassifyTemplateAttrVO> attrsList = new LinkedList<CodeClassifyTemplateAttrVO>();
        // è¿›è¡Œè¿‡æ»¤ï¼Œéšè—çš„不显示,企业代码不显示,其它的允许录入
        for (CodeClassifyTemplateAttrVO attrObj : tempAttrs) {
            String attrId = attrObj.getOid();
            // åˆ¤æ–­å±žæ€§æ˜¯å¦éšè—ï¼Œéšè—çš„不需要提供录入项
            if (attrObj.getFormDisplayFlag().equals("false")) {
                continue;
            }
            // å¦‚果是代码列,则也隐藏,通过代码申请框架录入
            else if (attrObj.getId().toUpperCase().equals("id".toUpperCase())) {
                continue;
            }
            attrsList.add(attrObj);
        }
        // æœ‰æ•ˆçš„、需要显示录入框的属性列表
        CodeClassifyTemplateAttrVO[] attrs = attrsList.toArray(new CodeClassifyTemplateAttrVO[] {});
        return attrs;
    }
    /**
     * åˆ›å»ºå±žæ€§åœ¨UI中呈现的组件
     * <p>
     * Description:
     * </p>
     *
     * @author xchao
     * @time 2012-11-6
     * @param attrObj
     *            å±žæ€§åœ¨æ¨¡æ¿ä¸­å¯¹åº”的属性对象
     * @return
     */
    private JComponent createComponent(CodeClassifyTemplateAttrVO attrObj)  {
        JComponent compt = null;
        String attrId = attrObj.getId();
        // æŸ¥å‡ºå±žæ€§çš„取值范围
        if(StringUtils.isNotBlank(attrObj.getEnumString())||StringUtils.isNotBlank(attrObj.getEnumId())){
            KeyValue[] keyValues = getAttrRangeObjects(attrObj.getOid());
            // å¦‚果存在取值范围,只能从取值范围里选择
            if (keyValues.length != 0) {
                AttrRangObjectWarper[] objs = new AttrRangObjectWarper[keyValues.length];
                VCIJComboBox cbx = new VCIJComboBox();
                DefaultComboBoxModel model = new DefaultComboBoxModel();
                //存在取值范围,如果可以为空,则添加一个空值
                int comboBoxIndex = 1;
                KeyValue keyValue = new KeyValue();
                keyValue.setValue("");
                keyValue.setKey("");
                AttrRangObjectWarper wrapper = new AttrRangObjectWarper(keyValue);
                model.addElement(wrapper);
                /*** å¦‚果模板属性不是必填项,加入空值后修改时功能的完善 **/
                LinkedHashMap<String, Integer> specMap = new LinkedHashMap<String, Integer>();
                for (int i = 0; i < objs.length; i++) {
                    objs[i] = new AttrRangObjectWarper(keyValues[i]);
                    model.addElement(objs[i]);
                    specMap.put(objs[i].toString(), comboBoxIndex++);
                }
                cbx.setModel(model);
                compt = cbx;
            }
        } else { // ä¸å­˜åœ¨å–值范围则按类型生成不同的控件
             if (attrObj.getAttributeDataType().equals(VciFieldTypeEnum.VTBoolean)) { // Boolean类型
                VCIJComboBox cbx = new VCIJComboBox();
                DefaultComboBoxModel model = new DefaultComboBoxModel();
                model.addElement("0");
                model.addElement("1");
                cbx.setModel(model);
                compt = cbx;
            } else if (attrObj.getAttributeDataType().equals(VciFieldTypeEnum.VTDate)) { // æ—¥æœŸç±»åž‹
                compt = new VCIJCalendarPanel("yyyy-MM-dd",
                    attrObj.getRequireFlag().equals("true"), true, false);
            } else if (attrObj.getAttributeDataType().equals(VciFieldTypeEnum.VTDateTime)) { // æ—¥æœŸç±»åž‹
                 compt = new VCIJCalendarPanel("yyyy-MM-dd HH:mm:ss",
                     attrObj.getRequireFlag().equals("true"), true, false);
             }else if (attrObj.getAttributeDataType().equals(VciFieldTypeEnum.VTTime)) { // æ—¥æœŸç±»åž‹
                 compt = new VCIJCalendarPanel("HH:mm:ss",
                     attrObj.getRequireFlag().equals("true"), true, false);
             }
             else if (attrObj.getAttributeDataType().equals(VciFieldTypeEnum.VTDouble)||attrObj.getAttributeDataType().equals(VciFieldTypeEnum.VTLong)) { // Real类型
                RealTextField txt = new RealTextField("");
                txt.setRequired(attrObj.getRequireFlag().equals("true"));
                compt = txt;
            } else if (attrObj.getAttributeDataType().equals(VciFieldTypeEnum.VTInteger)) { // Integer类型
                IntegerTextField txt = new IntegerTextField("");
                txt.setRequired(attrObj.getRequireFlag().equals("true"));
                compt = txt;
            }
             else{
                 VCIJTextField txt = new VCIJTextField(this,attrObj.getRequireFlag().equals("true"));
                 compt = txt;
                 textCompts.add(txt);
             }
            boolean enabled = true;
            /*// é›†å›¢ä»£ç ã€é›†å›¢é™„加码不可以手工录入数据
            if (attrObj.getId().equals(Constants.GROUP_CODE_INNERNAME)|| attrObj.getInternalname().equals(Constants.GROUP_ADD_CODE_INNERNAME)) {
                enabled = false;
            }*/
            compt.setEnabled(enabled);
        }
        return compt;
    }
    /****
     * æ ¹æ®å±žæ€§id获取属性取值范围的值
     * <p>Description: </p>
     *
     * @author Administrator
     * @time 2013-3-23
     * @param attrId
     * @return
     */
    private KeyValue[] getAttrRangeObjects(String attrId){
        KeyValue[] res = new KeyValue[0];
        String url= ConfigUtils.getConfigValue("410.PDM.attrKeyValue.url","http://127.0.0.1:36014/codeApplySwingController/listComboboxItems");
        /**系统只加载代码项  å¦‚æžœlibName不为空,直接获取对应的代码项**/
        Map<String,String> condtionMap=new HashMap<>();
        condtionMap.put("oid", attrId);
        R r=HttpUtil.sendGet(url,condtionMap,new HashMap<>());
        List<KeyValue> keyValueList=new ArrayList<>();
        if(r.isSuccess()){
            Object object= r.getData();
            if(object!=null) {
                ObjectMapper objectMapper = new ObjectMapper();
                try {
                    keyValueList = objectMapper.readValue(object.toString(), new com.fasterxml.jackson.core.type.TypeReference<List<KeyValue>>() {
                    });
                } catch (JsonProcessingException e) {
                    e.printStackTrace();
                }
            }
        }else{
            VCIOptionPane.showMessage(this,r.getMsg());
        }
        return keyValueList.toArray(new KeyValue[]{});
    }
    /**
     * æ£€æŸ¥éœ€è¦åœ¨ä¸€è¡Œä¸­æ˜¾ç¤ºçš„那些组件(控件)中,是否至少存在着一个需要换行(占整行)显示的组件
     * <p>
     * Description:
     * </p>
     *
     * @author liujw
     * @time 2013-4-16
     * @param attrIndex
     *            å¾ªçŽ¯å±žæ€§çš„ç´¢å¼•
     * @param maxAttrInLine
     *            éœ€è¦æ¢è¡Œæ˜¾ç¤ºçš„判断条件,属性的长度
     * @param realAttrs
     *            çœŸå®žçš„需要加载的属性列表
     * @return
     */
    private boolean checkLeastNewLine(int attrIndex, int maxAttrInLine,Map<String, String> attrMaps, CodeClassifyTemplateAttrVO[] realAttrs){
        boolean res = false;
        int attrsLength = realAttrs.length;
        for(int columnIndex = 0; columnIndex < maxAttrInLine; columnIndex++){
            int index = attrIndex + columnIndex;
            if(index < attrsLength){
                CodeClassifyTemplateAttrVO attrObj = realAttrs[index];
                boolean isStringType = attrObj.getAttributeDataType().toUpperCase().equals("VTstring".toUpperCase());
                // å¯ç”¨TextArea时才进行判断
                if(this.isEnableTextArea && isStringType && attrMaps.size() > 0 && attrMaps.containsKey(attrObj.getId())){
                    res = true;
                    break;
                }
            }
        }
        return res;
    }
    /***获取属性模板对象  @author liujw**/
    private Map<String, String> getTempPropMap(RMDataTransmitObject transmitForRMData) {
        Map<String, String> map = new LinkedHashMap<String, String>();
        List<CodeClassifyTemplateAttrVO> propObjs = transmitForRMData.getTempPropObjsList();
        for(CodeClassifyTemplateAttrVO obj : propObjs) {
            if(obj.getTextAreaFlag().equals("true")) {
                map.put(obj.getOid(), "Y");
            }
        }
        return map;
    }
    /**码段码值描述信息的详细说明**/
    private void clsfValDescActionListener(MouseEvent e) {
        VCIJTextField txt = (VCIJTextField) comtMap.get(e.getComponent());
        DescViewDialog dialog = new DescViewDialog(this, txt.getText());
        dialog.bulidDialog();
        dialog.setVisible(true);
    }
    /**
     * åˆ›å»ºä¸ŽTextArea相关联的ScrollPane对象
     * <p>
     * Description:
     * </p>
     *
     * @author liujw
     * @time 2013-4-16
     * @param txtArea
     *            VCIJTextArea
     * @return
     */
    private VCIJScrollPane createTextAreaScrollPane(VCIJTextArea txtArea) {
        txtArea.setWrapStyleWord(true);
        txtArea.setLineWrap(true);
        VCIJScrollPane txtScroll = new VCIJScrollPane();
        txtScroll.getViewport().add(txtArea);
        txtScroll.setPreferredSize(new Dimension(textAreaPreSizeWidth, textAreaPreSizeHeight));
        txtScroll.setMinimumSize(new Dimension(textAreaMinSizeWidth, textAreaMinSizeHeight));
        txtScroll.setMaximumSize(new Dimension(textAreaMaxSizeWidth, textAreaMaxSizeHeight));
        txtScroll.setBorder(null);
        return txtScroll;
    }
    /**
     * è¿”回GridBagLayout布局管理的Constraints对象
     * <p>
     * Description:
     * </p>
     *
     * @author xchao
     * @time 2012-11-6
     * @param gridx
     * @param gridy
     * @param gridwidth
     * @param gridheight
     * @param weightx
     * @param weighty
     * @param anchor
     * @param fill
     * @return
     */
    private GridBagConstraints createGridBagConstraints(int gridx, int gridy,
                                                        int gridwidth, int gridheight, double weightx, double weighty,int anchor, int fill) {
        int padxy = 5;
        return new GridBagConstraints(gridx, gridy, gridwidth, gridheight,weightx, weighty, anchor, fill, new Insets(padxy, padxy, padxy,padxy), padxy, padxy);
    }
    /**
     * æ ¹æ®å¼•用模板的id获取引用模板对象包含的数据
     * <p>Description: </p>
     *
     * @author liujw
     * @time 2012-11-29
     * @param //referTempId å¼•用模板id
     */
    private void getReferTempRMData(final CodeClassifyTemplateAttrVO tempPropObj,final LinkedHashMap<String, JComponent> attrIdToCtrlMaps,
                                    final List<CodeClassifyTemplateAttrVO>  tempPropList) {
        // æœ¬ç©ºçª—口调用 æœ‰å¯èƒ½æ¥è‡ªä¸¤å¤„
        // æµç¨‹ä»»åŠ¡å¼•ç”¨
        // ä¸€èˆ¬çš„æ•°æ®å½•入、修改
        // ä¸åŒçš„æ¥æºï¼Œéœ€è¦ç»´æŠ¤å¥½Owner父
        VCIJDialog ownerDialog = realDialogInstance;
        if(ownerDialog == null){
            ownerDialog = new VCIJDialog();
            ownerDialog.setSize(880, 500);
        }
        final String referTempId = tempPropObj.getReferBtmId();
        final RMDataReferTempDialog dialog = new RMDataReferTempDialog(ownerDialog, referTempId);
        dialog.setDialogCallback(new Runnable() {
            @Override
            public void run() {
                /*LinkedList<RMDataObject> list = dialog.getRMDataMainPanel().getTablePanel().getSelectedRowObjects();
                if(dialog.isFromTableDoubleClick()){
                    int index = dialog.getRMDataMainPanel().getTablePanel().getTable().getSelectedRow();
                    list.clear();
                    list.add(dialog.getRMDataMainPanel().getTablePanel().getTableModel().getList().get(index).getObject());
                }
                RMDataObject rmDataObj = list.get(0);//选择的引用模板数据
                LinkedHashMap<String, Integer> innnerNamesMaps = rmDataObj.getInnerNameIndexMap();
                String[] datas = rmDataObj.getDatas();
                for(CodeClassifyTemplateAttrVO obj : tempPropList) {
                    if(obj.getReferTempId().equals(referTempId)) {
                        AttributeObject attrObj = getAttrObjById(obj.getReferAttrId());
                        JComponent comp = attrIdToCtrlMaps.get(obj.getId());
                        if(comp instanceof VCIJTextField) {
                            int index = innnerNamesMaps.get(attrObj.getInternalname());
                            ((VCIJTextField) comp).setText(datas[index]);
                        }else if (comp instanceof VCIJCalendarPanel) {
                            int index = innnerNamesMaps.get(attrObj.getInternalname());
                            ((VCIJCalendarPanel) comp).setDateString(datas[index]);
                        } else if (comp instanceof VCIJComboBox) {
                            int index = innnerNamesMaps.get(attrObj.getId());
                            ((VCIJComboBox) comp).setSelectedIndex(index);
                        }
                    }
                }*/
            }
        });
        //dialog.initDialogSize(ownerDialog.getWidth(), ownerDialog.getHeight());
        Dimension dime = Toolkit.getDefaultToolkit().getScreenSize();
        int x = dime.width/2 - 400;
        int y = dime.height/2 -400;
        dialog.setLocation(x, y);
        dialog.setSize(new Dimension(900, 800));
        dialog.setModal(true);
        dialog.setVisible(true);
    }
    //获取系统配置的码段码值
    private Map<String, String> getSpecialValMap(String[] vals) {
        Map<String, String> map = new LinkedHashMap<String, String>();
        for (String val : vals) {
            map.put(val, "Y");
        }
        return map;
    }
    private boolean isNumber(String value) {
        return Pattern.matches("[0-9]+", value);
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410TreePanel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,304 @@
package com.vci.ubcs.codeapply;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.vci.base.ui.exception.VCIException;
import com.vci.base.ui.swing.VCIOptionPane;
import com.vci.base.ui.swing.components.VCIJPanel;
import com.vci.base.ui.tree.VCIBaseTree;
import com.vci.base.ui.tree.VCIBaseTreeModel;
import com.vci.base.ui.tree.VCIBaseTreeNode;
import com.vci.ubcs.codeapply.object.CodeClassify;
import com.vci.ubcs.codeapply.object.R;
import com.vci.ubcs.codeapply.utils.ConfigUtils;
import com.vci.ubcs.system.user.entity.User;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreePath;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public abstract class CodeApplyFor410TreePanel extends VCIJPanel {
    /**
     *
     */
    private static final long serialVersionUID = 3252637341L;
    private VCIBaseTree tree = null;
    private VCIBaseTreeModel treeModel = null;
    private VCIBaseTreeNode rootNode = null;
    private CodeClassify currentRmType = null;
    private TransmitTreeObject transmitTreeObject = new TransmitTreeObject();
    private User userObj = null;
    private VCIBaseTreeNode selNode = null;
    /**
     * å­˜å‚¨åˆ†ç±»çš„Map,key:分类名称,value:分类值
     */
    private String clsfName = null;
    //    private String[] clsfVal = new String[2];
    private String libName = "";
    public CodeApplyFor410TreePanel(CodeClassify currentRmType, User userObj, String clsfName, String libName) {
        this.currentRmType = currentRmType;
        this.userObj = userObj;
        this.clsfName = clsfName;
        this.libName = libName;
        if (this.libName == null) {
            libName = "";
        }
    }
    public void buildTreePanel(){
        initComponents();
    }
    private void initComponents(){
        initLeftPanel();
    }
    private void initLeftPanel() {
        rootNode = new VCIBaseTreeNode(currentRmType.getName(), currentRmType);
        treeModel = new VCIBaseTreeModel(rootNode);
        tree = new VCIBaseTree(treeModel, new CodeLibTreeCellRenderer());
        selNode = rootNode;
        if (clsfName == null || clsfName.equals("")) {
            loadTreeData(rootNode);
        } else {
            CodeClassify[] rmTypes = getRMTypeByDescAndLib();
            int len = rmTypes.length;
            addChildrenToParentTreeNode(currentRmType,rootNode,rmTypes, len - 2);
        }
        inittreeActions();
    }
    /**
     * å±•开树
     * <p>Description: </p>
     *
     * @author ligang
     * @time 2013-5-8
     * @param rmTypeObj
     * @param parentNode
     */
    private void addChildrenToParentTreeNode(CodeClassify rmTypeObj, VCIBaseTreeNode parentNode, CodeClassify[] rmTypes, int pos){
        String parentId = rmTypeObj.getOid();
        CodeClassify[] libs = {};
        libs = getChildRMTypeObjects(parentId);
        for(CodeClassify obj : libs) {
            VCIBaseTreeNode node = new VCIBaseTreeNode(obj.getName(), obj);
            treeModel.insertNodeInto(node, parentNode, parentNode.getChildCount());
            node.setLeaf(false);
            node.setExpand(false);
            if (pos < 0) {
                continue;
            }
            if (checkIsSel(obj, rmTypes[pos])) {
                selNode = node;
                addChildrenToParentTreeNode(obj, node, rmTypes, pos - 1);
            }
        }
        parentNode.setLeaf(libs.length == 0);
        parentNode.setExpand(true);
        if(tree != null){
            tree.expandPath(new TreePath(selNode.getPath()));
            tree.setSelectionPath(new TreePath(selNode.getPath()));
        }
    }
    private void loadTreeData(VCIBaseTreeNode rootNode){
        CodeClassify currentObj = (CodeClassify) rootNode.getObj();
        String parentId = currentObj.getOid();
        CodeClassify[] libs = {};
        libs = getChildRMTypeObjects(parentId);
        for(CodeClassify obj : libs) {
            VCIBaseTreeNode node = new VCIBaseTreeNode(obj.getName(), obj);
            rootNode.add(node);
            node.setLeaf(false);
            node.setExpand(false);
        }
        rootNode.setLeaf(libs.length == 0);
        rootNode.setExpand(true);
        tree.setSelectionPath(new TreePath(selNode));
        tree.updateUI();
    }
    /**
     * æ ¹æ®å‚数判断当前分类是否是选中状态
     * <p>Description: </p>
     *
     * @author ligang
     * @time 2013-5-8
     * @param obj
     * @return
     */
    private boolean checkIsSel(CodeClassify obj, CodeClassify selObj) {
        if(obj.getId().equals(selObj.getId())) {
            return true;
        }
        return false;
    }
    private void inittreeActions(){
        tree.addTreeSelectionListener(new TreeSelectionListener() {
            @Override
            public void valueChanged(TreeSelectionEvent e) {
                if(!e.isAddedPath()) return;
                leftTree_valueChanged(e);
            }
        });
        tree.addTreeExpansionListener(new TreeExpansionListener() {
            @Override
            public void treeExpanded(TreeExpansionEvent e) {
                tree_treeExpanded_local(e);
            }
            @Override
            public void treeCollapsed(TreeExpansionEvent e) {
            }
        });
    }
    /**
     * æ ¹æ®åˆ†ç±»æè¿°èŽ·å–ä¼ å…¥åˆ†ç±»çš„æ‰€æœ‰çˆ¶åˆ†ç±»ä¿¡æ¯
     * @return
     */
    private CodeClassify[] getRMTypeByDescAndLib() {
        CodeClassify[] objs = new CodeClassify[]{};
        String url= ConfigUtils.getConfigValue("410.PDM.leftdescLibNode.url","http://127.0.0.1:36014/codeApplySwingController/getRMTypeByDescAndLib");
        /**系统只加载代码项  å¦‚æžœlibName不为空,直接获取对应的代码项**/
        Map<String,String> condtionMap=new HashMap<>();
        condtionMap.put("desc", this.clsfName);
        condtionMap.put("codeLibName",rootNode.toString());
        R r=HttpUtil.sendGet(url,condtionMap,new HashMap<>());
        List<CodeClassify> codeClassifyList = new ArrayList<>();
        if(r.isSuccess()){
            Object object= r.getData();
            if(object!=null) {
                ObjectMapper objectMapper = new ObjectMapper();
                try {
                    codeClassifyList = objectMapper.readValue(object.toString(), new com.fasterxml.jackson.core.type.TypeReference<List<CodeClassify>>() {
                    });
                } catch (JsonProcessingException e) {
                    e.printStackTrace();
                }
            }
        }else{
            VCIOptionPane.showMessage(this,r.getMsg());
        }
        return codeClassifyList.toArray(new CodeClassify[]{});
    }
    /**
     * æ ¹æ®ID直接获取子分类,无权限检查
     * <p>Description: </p>
     *
     * @author xchao
     * @time 2013-3-20
     * @param parentId
     * @return
     */
    private CodeClassify[] getChildRMTypeObjects(String parentId){
        String url= ConfigUtils.getConfigValue("410.PDM.leftClsfNode.url","http://127.0.0.1:36014/codeApplySwingController/selectCodeClassifyVOByParentId");
        /**系统只加载代码项  å¦‚æžœlibName不为空,直接获取对应的代码项**/
        Map<String,String> condtionMap=new HashMap<>();
        condtionMap.put("parentId", parentId );
        R r=HttpUtil.sendGet(url,condtionMap,new HashMap<>());
        List<CodeClassify> codeClassifyList = new ArrayList<>();
        if(r.isSuccess()){
            Object object= r.getData();
            if(object!=null) {
                ObjectMapper objectMapper = new ObjectMapper();
                try {
                    codeClassifyList = objectMapper.readValue(object.toString(), new com.fasterxml.jackson.core.type.TypeReference<List<CodeClassify>>() {
                    });
                } catch (JsonProcessingException e) {
                    e.printStackTrace();
                }
            }
        }else{
            VCIOptionPane.showMessage(this,r.getMsg());
        }
        return codeClassifyList.toArray(new CodeClassify[]{});
    }
    private void tree_treeExpanded_local(TreeExpansionEvent e) {
        TreePath treePath = e.getPath();
        VCIBaseTreeNode treeNode = (VCIBaseTreeNode)treePath.getLastPathComponent();
        if(treeNode.isExpand()) return;
        if(!(treeNode.getObj() instanceof CodeClassify)) return;
        CodeClassify rmTypeObject = (CodeClassify)treeNode.getObj();
        CodeClassify[] childs = null;
        childs = getChildRMTypeObjects(rmTypeObject.getOid());
        addRMTypeObjectsToParentTreeNode(childs, treeNode);
        treeNode.setExpand(true);
        treeNode.setLeaf(treeModel.getChildCount(treeNode) == 0);
    }
    private void addRMTypeObjectsToParentTreeNode(CodeClassify[] objs, VCIBaseTreeNode parentNode){
        for(CodeClassify obj : objs){
            VCIBaseTreeNode node = new VCIBaseTreeNode(obj.getName(), obj);
            treeModel.insertNodeInto(node, parentNode, treeModel.getChildCount(parentNode));
        }
    }
    private void leftTree_valueChanged(TreeSelectionEvent e) {
        tree_valueChanged(e);
    }
    /**
     * é€‰æ‹©äº†æ ‘节点的事件处理
     * <p>Description: </p>
     *
     * @author xchao
     * @time 2012-5-26
     * @param e
     */
    public abstract void tree_valueChanged(TreeSelectionEvent e);
    public VCIBaseTree getTree() {
        return tree;
    }
    public void setTree(VCIBaseTree tree) {
        this.tree = tree;
    }
    public VCIBaseTreeModel getTreeModel() {
        return treeModel;
    }
    public void setTreeModel(VCIBaseTreeModel treeModel) {
        this.treeModel = treeModel;
    }
    public VCIBaseTreeNode getRootNode() {
        return rootNode;
    }
    public void setRootNode(VCIBaseTreeNode rootNode) {
        this.rootNode = rootNode;
    }
    public TransmitTreeObject getTransmitTreeObject() {
        return transmitTreeObject;
    }
    public void setTransmitTreeObject(TransmitTreeObject transmitTreeObject) {
        this.transmitTreeObject = transmitTreeObject;
    }
    public VCIBaseTreeNode getSelNode() {
        return selNode;
    }
    public void setSelNode(VCIBaseTreeNode selNode) {
        this.selNode = selNode;
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyPanelFor410.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,388 @@
package com.vci.ubcs.codeapply;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.vci.base.ui.swing.VCIOptionPane;
import com.vci.base.ui.swing.VCISwingUtil;
import com.vci.base.ui.swing.components.*;
import com.vci.base.ui.tree.VCIBaseTree;
import com.vci.base.ui.tree.VCIBaseTreeModel;
import com.vci.base.ui.tree.VCIBaseTreeNode;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
import com.vci.ubcs.codeapply.object.CodeClassify;
import com.vci.ubcs.codeapply.object.R;
import com.vci.ubcs.codeapply.utils.ConfigUtils;
import com.vci.ubcs.system.user.entity.User;
import lombok.SneakyThrows;
import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
import org.apache.commons.collections4.CollectionUtils;
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
public class CodeApplyPanelFor410  extends VCIJPanel {
    //右侧面板
    private CodeApplyFor410MainPanel rightMainPanel = null;
    private VCIJScrollPane scrollLeftTreePane = new VCIJScrollPane();
    private VCIJSplitPane jspLeftToRight = new VCIJSplitPane(VCIJSplitPane.HORIZONTAL_SPLIT, scrollLeftTreePane, rightMainPanel);
    private CodeApplyPanelFor410ActionListener actionListener = new CodeApplyPanelFor410ActionListener(this);
    private VCIJButton applyBtn = VCISwingUtil.createVCIJButton("apply", "申请码值", "申请码值", "arrow-right.png", actionListener);
    private VCIJButton batchApplyBtn = VCISwingUtil.createVCIJButton("batchApply", "批量导入申请", "批量导入申请", "import.gif", actionListener);
    private VCIJButton btnSearch= VCISwingUtil.createVCIJButton("btnSearch", "查询代码", "查询代码", "search.png", actionListener);
    private VCIJButton clearBtn = VCISwingUtil.createVCIJButton("clear", "清空属性", "清空属性", "search.png", actionListener);
    private JLabel codeItemLabel = new JLabel("选择代码项:");
    private VCIJLabel applylbl = new VCIJLabel("申请码值:");
    public VCIJTextField applyTxt = new VCIJTextField(40);
    private JComboBox codeItemCombo = new JComboBox();
    private User userObj = null;;
    private CodeClassifyTemplateVO currentCodeClassifyTemplateVO;
    private boolean isIntegrate = false; //集成时不显示批量申请按钮
    /**
     * å­˜å‚¨åˆ†ç±»çš„Map,key:分类名称,value:分类值
     */
    private String clsfName = null;
    private CodeApplyFor410Dialog owner;
    /**
     * å­˜å‚¨å±žæ€§å’Œå€¼çš„Map,key:属性名称,value:属性值
     */
    private String deptName = null;
    private String[] libName = new String[]{};//代码项名称
    private VCIBaseTree leftTree = null;
    private VCIBaseTreeModel leftTreeModel = null;
    //左侧树
    private CodeApplyFor410TreePanel typeTreePanel = null;
    private TransmitTreeObject transmitTreeObject = new TransmitTreeObject();
    /***
     *
     * @param userObj
     * @param isIntegrate
     * @param clsfName
     * @param deptName
     * @param libName
     */
    public CodeApplyPanelFor410(CodeApplyFor410Dialog owner , User userObj, boolean isIntegrate, String clsfName, String deptName, String[] libName){
        this.userObj = userObj;
        this.owner =owner;
        rightMainPanel = new CodeApplyFor410MainPanel(transmitTreeObject,userObj,getCurrentCodeClassifyTemplateVO());
        this.isIntegrate = isIntegrate;
        this.clsfName = clsfName;
        this.deptName = deptName;
        this.libName = libName;
        init();
        initActionListener();
    }
    /***
     * åˆå§‹åŒ–界面
     */
    private void init() {
        try {
            this.setLayout(new BorderLayout());
            this.add(initCodeItemPal(), BorderLayout.NORTH);
            this.add(initMiddlePanel(), BorderLayout.CENTER);
            this.add(initBtnPal(), BorderLayout.SOUTH);
            this.setVisible(true);
        }catch (Exception ex){
            VCIOptionPane.showMessage(owner,ex.getMessage());
        }
    }
    private JPanel initMiddlePanel()  {
        JPanel middlePanel = new JPanel();
        middlePanel.setLayout(new BorderLayout());
        JTextField jTextField1 = new JTextField();//instead of up line
        JTextField jTextField2 = new JTextField();//instead of down line
        jTextField1.setPreferredSize(new Dimension(63,2));
        jTextField2.setPreferredSize(new Dimension(63,2));
        middlePanel.add(jTextField1, BorderLayout.NORTH);
        middlePanel.add(jTextField2, BorderLayout.SOUTH);
        jspLeftToRight.setDividerSize(10);
        jspLeftToRight.setContinuousLayout(true);
        jspLeftToRight.setOneTouchExpandable(true);
        jspLeftToRight.setDividerLocation(200);
        initLeftPanel();
        middlePanel.add(jspLeftToRight, BorderLayout.CENTER);
        return middlePanel;
    }
    private JPanel initBtnPal() {
        JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        bottomPanel.add(applylbl);
        bottomPanel.add(applyTxt);
        applyTxt.setEditable(false);
        bottomPanel.add(applyBtn);
        if (!this.isIntegrate) {
            bottomPanel.add(batchApplyBtn);
        } else {
            bottomPanel.add(btnSearch);
        }
        bottomPanel.add(clearBtn);
        return bottomPanel;
    }
    /***
     * åˆå§‹åŒ–代码项目
     * @return
     */
    private JPanel initCodeItemPal()  {
        VCIJPanel codeItemPal = new VCIJPanel(new FlowLayout(FlowLayout.LEFT));
        codeItemCombo.setPreferredSize(new Dimension(200,25));
        initCodeItemCombo();//初始化代码项下拉框数据
        codeItemPal.add(codeItemLabel);
        codeItemPal.add(codeItemCombo);
        return codeItemPal;
    }
    /**
     * ä»£ç é¡¹äº‹ä»¶ï¼šé€‰æ‹©ä»£ç é¡¹åŽï¼Œè‡ªåŠ¨åˆ·æ–°ä»£ç é¡¹ä¸‹å¯¹åº”çš„è§„åˆ™ç æ®µå’Œæ¨¡æ¿å±žæ€§ä¿¡æ¯
     * <p>Description: </p>
     *
     * @author Administrator
     * @time 2013-3-23
     */
    public void initCodeItemCombo()  {
        CodeClassifyVO [] codeClassifyVOS = new CodeClassifyVO[0];
        Map<String,String> condtionMap=new HashMap<>();
        //condtionMap.put("parentOid",);
        String url=ConfigUtils.getConfigValue("410.PDM.item.url","http://127.0.0.1:36014/codeApplySwingController/getRMLibByName");
        /**系统只加载代码项  å¦‚æžœlibName不为空,直接获取对应的代码项**/
        if(libName.length>0) {
            condtionMap.put("libName", StringUtils.join(libName,",") );
        }
        R r=HttpUtil.sendGet(url,condtionMap,new HashMap<>());
        List<CodeClassify> codeClassifyList = new ArrayList<>();
        if(r.isSuccess()){
            Object object= r.getData();
            if(object!=null) {
                ObjectMapper objectMapper = new ObjectMapper();
                try {
                    codeClassifyList = objectMapper.readValue(object.toString(), new com.fasterxml.jackson.core.type.TypeReference<List<CodeClassify>>() {
                    });
                } catch (JsonProcessingException e) {
                    e.printStackTrace();
                }
            }
        }else{
            VCIOptionPane.showMessage(this,r.getMsg());
        }
        if(!CollectionUtils.isEmpty(codeClassifyList)){
            codeClassifyList.stream().forEach(codeClassify -> {
                codeItemCombo.addItem(codeClassify);
            });
            codeItemCombo.setSelectedIndex(0);
        }
        initLeftPanel();
    }
    /***
     * åˆå§‹åŒ–按钮事件
     */
    private void initActionListener() {
        /**代码项下拉事件**/
        codeItemCombo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(codeItemCombo.getSelectedIndex() == -1) {
                    return;
                }
                try {
                    ruleComboActionListener();
                } catch (Exception ex) {
                    VCIOptionPane.showMessage(owner,ex.getMessage());
                }
            }
        });
    }
    /**
     * å¤„理代码项下拉事件
     * <p>Description: </p>
     *
     * @author Administrator
     * @time 2013-3-23
     */
    private void ruleComboActionListener()   {
        leftTree.removeAll();
        initLeftPanel();
    }
    private void initLeftPanel()  {
        CodeClassify currentCodeClassify= (CodeClassify) this.codeItemCombo.getSelectedItem();
        if(currentCodeClassify == null) {
            return;
        }
        String  libName=currentCodeClassify.getName();
        String classOid=currentCodeClassify.getOid();
        final CodeApplyPanelFor410 self = this;
        typeTreePanel = new CodeApplyFor410TreePanel(currentCodeClassify,userObj,clsfName, libName) {
            private static final long serialVersionUID = 8121108576137012228L;
            @Override
            public void tree_valueChanged(TreeSelectionEvent e) {
                self.leftTree_valueChanged(e);
            }
        };
        typeTreePanel.buildTreePanel();
        leftTree = typeTreePanel.getTree();
        leftTreeModel = typeTreePanel.getTreeModel();
        transmitTreeObject.setCurrentTreeNode(typeTreePanel.getSelNode());
        transmitTreeObject.setTree(leftTree);
        transmitTreeObject.setTreeModel(leftTreeModel);
        VCIJPanel rightPanel = new VCIJPanel();
        rightPanel.setLayout(new BorderLayout());
        jspLeftToRight.setRightComponent(rightPanel);
        rightPanel.add(scrollPane, BorderLayout.CENTER);
        Object obj =transmitTreeObject.getCurrentTreeNode();
        if(obj instanceof VCIBaseTreeNode){
            VCIBaseTreeNode vciBaseTreeNode=    (VCIBaseTreeNode)obj;
            Object node=vciBaseTreeNode.getObj();
            if(node instanceof CodeClassify) {
                CodeClassify codeClassify=(CodeClassify)node;
                classOid = codeClassify.getOid();
                String url = ConfigUtils.getConfigValue("410.PDM.clsfTemplate.url", "http://127.0.0.1:36014/codeApplySwingController/getUsedTemplateByClassifyOid");
                /**系统只加载代码项  å¦‚æžœlibName不为空,直接获取对应的代码项**/
                Map<String, String> condtionMap = new HashMap<>();
                condtionMap.put("codeClassifyOid", classOid);
                R r = HttpUtil.sendGet(url, condtionMap, new HashMap<>());
                boolean res = false;
                if (r.isSuccess()) {
                    //List<CodeClassifyTemplateVO> codeClassifyTemplateVOList=new ArrayList<>();
                    CodeClassifyTemplateVO codeClassifyTemplateVO = new CodeClassifyTemplateVO();
                    Object object = r.getData();
                    if (object != null) {
                        ObjectMapper objectMapper = new ObjectMapper();
                        try {
                            codeClassifyTemplateVO = objectMapper.readValue(object.toString(), CodeClassifyTemplateVO.class);
                            if (codeClassifyTemplateVO != null) {
                                setCurrentCodeClassifyTemplateVO(codeClassifyTemplateVO);
                                res = true;
                            }
                        } catch (JsonProcessingException e) {
                            e.printStackTrace();
                        }
                    }
                }else{
                    VCIOptionPane.showMessage(this,r.getMsg());
                }
                initBtnStatus(res);
            }
        }
        rightMainPanel = new CodeApplyFor410MainPanel(transmitTreeObject,userObj,deptName,getCurrentCodeClassifyTemplateVO());
        scrollPane.setViewportView(rightMainPanel);
        rightMainPanel.buildMainPanel(1);
        int location = jspLeftToRight.getDividerLocation();
        jspLeftToRight.setDividerLocation(location);
        scrollLeftTreePane.setViewportView(leftTree);
        leftTree.scrollPathToVisible(leftTree.getSelectionPath());
    }
    private void leftTree_valueChanged(TreeSelectionEvent e) {
        TreePath selectedTreePath = e.getPath();
        /**校验 åˆ¤æ–­é€‰æ‹©çš„代码项是否包含模板 Begin**/
        VCIBaseTreeNode selectedTreeNode = (VCIBaseTreeNode)selectedTreePath.getLastPathComponent();
        Object obj = selectedTreeNode.getObj();
        boolean res=false;
        if(obj instanceof CodeClassify) {
            CodeClassify curentCodeClassify=(CodeClassify)obj;
            String url=ConfigUtils.getConfigValue("410.PDM.clsfTemplate.url","http://127.0.0.1:36014/codeApplySwingController/getUsedTemplateByClassifyOid");
            /**系统只加载代码项  å¦‚æžœlibName不为空,直接获取对应的代码项**/
            Map<String,String> condtionMap=new HashMap<>();
            condtionMap.put("codeClassifyOid",curentCodeClassify.getOid());
            R r=HttpUtil.sendGet(url,condtionMap,new HashMap<>() );
            if(r.isSuccess()) {
                CodeClassifyTemplateVO codeClassifyTemplateVO=new CodeClassifyTemplateVO();
                Object object= r.getData();
                if(object!=null) {
                    ObjectMapper objectMapper = new ObjectMapper();
                    try {
                        codeClassifyTemplateVO = objectMapper.readValue(object.toString(), CodeClassifyTemplateVO.class);
                        if(codeClassifyTemplateVO!=null){
                            setCurrentCodeClassifyTemplateVO(codeClassifyTemplateVO);
                            res=true;
                        }
                    } catch (JsonProcessingException e1) {
                        e1.printStackTrace();
                    }
                }
            }else{
                VCIOptionPane.showMessage(this.owner,r.getMsg());
            }
        }
        initBtnStatus(res);
        /*******************End**********************/
        initRightDataTablePanel(selectedTreeNode);
    }
    private void initBtnStatus(boolean enable) {
        applyBtn.setEnabled(enable);
        batchApplyBtn.setEnabled(enable);
        btnSearch.setEnabled(enable);
        clearBtn.setEnabled(enable);
    }
    private void initRightDataTablePanel(VCIBaseTreeNode selectedTreeNode) {
        leftTree = typeTreePanel.getTree();
        leftTreeModel = typeTreePanel.getTreeModel();
        transmitTreeObject.setTree(leftTree);
        transmitTreeObject.setTreeModel(leftTreeModel);
        transmitTreeObject.setCurrentTreeNode(selectedTreeNode);
        if(selectedTreeNode.isRoot() && selectedTreeNode.getObj() instanceof String) return;
        scrollPane = new JScrollPane();
        rightMainPanel = new CodeApplyFor410MainPanel(transmitTreeObject,userObj,deptName,getCurrentCodeClassifyTemplateVO());
        scrollPane.setViewportView(rightMainPanel);
        rightMainPanel.buildMainPanel(1);
        VCIJPanel rightPanel = new VCIJPanel();
        rightPanel.setLayout(new BorderLayout());
        rightPanel.add(scrollPane, BorderLayout.CENTER);
        applyTxt.setText("");
        jspLeftToRight.setRightComponent(rightPanel);
        int location = jspLeftToRight.getDividerLocation();
        jspLeftToRight.setDividerLocation(location);
    }
    private Map<String, String> attrNameAndValMap = new LinkedHashMap();
    private JScrollPane scrollPane = new JScrollPane();
    public Map<String, String> getAttrNameAndValMap() {
        return attrNameAndValMap;
    }
    public void setAttrNameAndValMap(Map<String, String> attrNameAndValMap) {
        this.attrNameAndValMap = attrNameAndValMap;
    }
    public String getApplyCode() {
        return this.applyTxt.getText().trim();
    }
    public void setApplyCode(String codeVal) {
        this.applyTxt.setText(codeVal);
    }
    public CodeClassifyTemplateVO getCurrentCodeClassifyTemplateVO() {
        return currentCodeClassifyTemplateVO;
    }
    public void setCurrentCodeClassifyTemplateVO(CodeClassifyTemplateVO currentCodeClassifyTemplateVO) {
        this.currentCodeClassifyTemplateVO = currentCodeClassifyTemplateVO;
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyPanelFor410ActionListener.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.vci.ubcs.codeapply;
import java.awt.event.ActionEvent;
import java.util.LinkedHashMap;
public class CodeApplyPanelFor410ActionListener extends CommonActionListener {
    private CodeApplyPanelFor410 owner = null;
    private LinkedHashMap<String, Runnable> actionMaps = new LinkedHashMap<String, Runnable>();
    public CodeApplyPanelFor410ActionListener(CodeApplyPanelFor410 owner){
        this.owner = owner;
        this.initActionMap();
    }
    @Override
    public void initActionMap(){
        actionMaps.put("batchApply", new Runnable() { public void run() {
            //batchApply();//批量导入申请代码
        }});
        actionMaps.put("apply", new Runnable() { public void run() {
            //apply();//码值申请
        }});
        actionMaps.put("btnSearch", new Runnable() { public void run() {
            //search();//代码查询
        }});
        actionMaps.put("clear", new Runnable() { public void run() {
        //    clear();//清空属性
        }});
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        String key = e.getActionCommand();
        if(actionMaps.containsKey(key)){
            actionMaps.get(key).run();
        }
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeDataMainPanelDataProvider.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.vci.ubcs.codeapply;
import com.vci.base.ui.swing.components.table.AbstractVCIJTableDataProvider;
import com.vci.base.ui.swing.components.table.VCIJTableNode;
import org.apache.poi.ss.formula.functions.T;
public class CodeDataMainPanelDataProvider extends AbstractVCIJTableDataProvider<T> {
    @Override
    public String[] getSpecialColumns() {
        return new String[0];
    }
    @Override
    public int getTotal() {
        return 0;
    }
    @Override
    public VCIJTableNode<T> getNewRowNode(T t) {
        return null;
    }
    @Override
    public T[] getDatas(int i, int i1) {
        return new T[0];
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeLibTreeCellRenderer.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
package com.vci.ubcs.codeapply;
import com.vci.base.ui.image.bundle.BundleImage;
import com.vci.base.ui.tree.VCIBaseTreeNode;
import com.vci.ubcs.codeapply.object.CodeClassify;
import javax.swing.*;
import javax.swing.tree.DefaultTreeCellRenderer;
import java.awt.*;
public class CodeLibTreeCellRenderer extends DefaultTreeCellRenderer {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    public CodeLibTreeCellRenderer() {
    }
    public Component getTreeCellRendererComponent (
        JTree tree,
        Object value,
        boolean sel,
        boolean expanded,
        boolean leaf,
        int row,
        boolean hasFocus) {
        super.getTreeCellRendererComponent (
            tree, value, sel,
            expanded, leaf, row,
            hasFocus);
        try {
            ToolTipManager.sharedInstance().registerComponent(tree);
            VCIBaseTreeNode node = (VCIBaseTreeNode)value;
            if(node.isRoot()){
                setIcon(new BundleImage().createImageIcon ("house.png"));
            } else if (node.getObj().equals("root")) { //根节点
                setIcon(new BundleImage().createImageIcon ("house.png"));
            }else if(node.getObj() instanceof CodeClassify){
                //CodeClassify rmTypeInfo=(CodeClassify)node.getObj();
                setIcon(new BundleImage().createImageIcon ("box.gif"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return this;
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CommonActionListener.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.vci.ubcs.codeapply;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedHashMap;
public class CommonActionListener implements ActionListener {
    protected LinkedHashMap<String, Runnable> actionMaps = new LinkedHashMap<String, Runnable>();
    public void initActionMap(){
        //
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        String key = e.getActionCommand();
        if(actionMaps.containsKey(key)){
            actionMaps.get(key).run();
        }
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/DescViewDialog.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
package com.vci.ubcs.codeapply;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import com.vci.base.ui.swing.components.VCIJDialog;
public class DescViewDialog extends VCIJDialog {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private JPanel topPanel;
    private JTextArea reasonTextArea = new JTextArea(5,5);
    private JButton cancelBtn = new JButton("关闭");
    private String desc;
    private CodeApplyFor410MainPanel owner = null;
    public DescViewDialog(CodeApplyFor410MainPanel owner,String desc){
//        super(frame,true);
        this.owner = owner;
        this.desc = desc;
        this.setModal(true);
    }
    public void bulidDialog() {
        init ();
    }
    private void init(){
        int width = 550,height = 250;
        int px = (int)(this.owner.getLocationOnScreen().getX());
        int py = (int)(this.owner.getLocationOnScreen().getY());
        int pWidth = this.owner.getBounds().width;
        int pHeight = this.owner.getBounds().height;
        this.setLocation(px + (pWidth - width) / 2, py + (pHeight - height) / 2);
        this.setSize(new Dimension(550, 250));
//        this.initDialogSize(600, 250);
        this.setResizable(false);
        this.setTitle("码段码值的详细描述信息");
        initUI();
        JPanel bottomPanel = new JPanel();
        bottomPanel.add(cancelBtn);
        cancelBtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                close();
            }
        });
        this.setLayout(new BorderLayout());
        this.add(topPanel,BorderLayout.CENTER);
        this.add(bottomPanel,BorderLayout.SOUTH);
    }
    private void close() {
        this.setDialogResult(DialogResult.CANCEL);
        this.setVisible(false);
    }
    private void initUI() {
        topPanel = new JPanel();
        topPanel.setLayout(new BorderLayout());
        reasonTextArea.setText(desc);
        reasonTextArea.setAutoscrolls(true);
        reasonTextArea.setLineWrap(true);
        JScrollPane scrollPanel = new JScrollPane();
        scrollPanel.setViewportView(reasonTextArea);
        scrollPanel.setAutoscrolls(true);
        topPanel.add(scrollPanel,BorderLayout.CENTER);
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/HttpClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,141 @@
package com.vci.ubcs.codeapply;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class HttpClient {
    public static String doGet(String httpurl) {
        HttpURLConnection connection = null;
        InputStream is = null;
        BufferedReader br = null;
        String result = null;// è¿”回结果字符串
        try {
            // åˆ›å»ºè¿œç¨‹url连接对象
            URL url = new URL(httpurl);
            // é€šè¿‡è¿œç¨‹url连接对象打开一个连接,强转成httpURLConnectionç±»
            connection = (HttpURLConnection) url.openConnection();
            // è®¾ç½®è¿žæŽ¥æ–¹å¼ï¼šget
            connection.setRequestMethod("GET");
            // è®¾ç½®è¿žæŽ¥ä¸»æœºæœåŠ¡å™¨çš„è¶…æ—¶æ—¶é—´ï¼š15000毫秒
            connection.setConnectTimeout(15000);
            // è®¾ç½®è¯»å–远程返回的数据时间:60000毫秒
            connection.setReadTimeout(60000);
            // å‘送请求
            connection.connect();
            // é€šè¿‡connection连接,获取输入流
            if (connection.getResponseCode() == 200) {
                is = connection.getInputStream();
                // å°è£…输入流is,并指定字符集
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                // å­˜æ”¾æ•°æ®
                StringBuffer sbf = new StringBuffer();
                String temp = null;
                while ((temp = br.readLine()) != null) {
                    sbf.append(temp);
                    sbf.append("\r\n");
                }
                result = sbf.toString();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // å…³é—­èµ„源
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            connection.disconnect();// å…³é—­è¿œç¨‹è¿žæŽ¥
        }
        return result;
    }
    public static String doPost(String httpUrl, String param) {
        HttpURLConnection connection = null;
        InputStream is = null;
        OutputStream os = null;
        BufferedReader br = null;
        String result = null;
        try {
            URL url = new URL(httpUrl);
            // é€šè¿‡è¿œç¨‹url连接对象打开连接
            connection = (HttpURLConnection) url.openConnection();
            // è®¾ç½®è¿žæŽ¥è¯·æ±‚方式
            connection.setRequestMethod("POST");
            // è®¾ç½®è¿žæŽ¥ä¸»æœºæœåŠ¡å™¨è¶…æ—¶æ—¶é—´ï¼š15000毫秒
            connection.setConnectTimeout(15000);
            // è®¾ç½®è¯»å–主机服务器返回数据超时时间:60000毫秒
            connection.setReadTimeout(60000);
            // é»˜è®¤å€¼ä¸ºï¼šfalse,当向远程服务器传送数据/写数据时,需要设置为true
            connection.setDoOutput(true);
            // é»˜è®¤å€¼ä¸ºï¼štrue,当前向远程服务读取数据时,设置为true,该参数可有可无
            connection.setDoInput(true);
            // è®¾ç½®ä¼ å…¥å‚数的格式:请求参数应该是 name1=value1&name2=value2 çš„形式。
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            // è®¾ç½®é‰´æƒä¿¡æ¯ï¼šAuthorization: Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0
            connection.setRequestProperty("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");
            // é€šè¿‡è¿žæŽ¥å¯¹è±¡èŽ·å–ä¸€ä¸ªè¾“å‡ºæµ
            os = connection.getOutputStream();
            // é€šè¿‡è¾“出流对象将参数写出去/传输出去,它是通过字节数组写出的
            os.write(param.getBytes());
            // é€šè¿‡è¿žæŽ¥å¯¹è±¡èŽ·å–ä¸€ä¸ªè¾“å…¥æµï¼Œå‘è¿œç¨‹è¯»å–
            if (connection.getResponseCode() == 200) {
                is = connection.getInputStream();
                // å¯¹è¾“入流对象进行包装:charset根据工作项目组的要求来设置
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                StringBuffer sbf = new StringBuffer();
                String temp = null;
                // å¾ªçŽ¯éåŽ†ä¸€è¡Œä¸€è¡Œè¯»å–æ•°æ®
                while ((temp = br.readLine()) != null) {
                    sbf.append(temp);
                    sbf.append("\r\n");
                }
                result = sbf.toString();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // å…³é—­èµ„源
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != os) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // æ–­å¼€ä¸Žè¿œç¨‹åœ°å€url的连接
            connection.disconnect();
        }
        return result;
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/HttpClient3.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,159 @@
package com.vci.ubcs.codeapply;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class HttpClient3 {
    public static String doGet(String url) {
        // è¾“入流
        InputStream is = null;
        BufferedReader br = null;
        String result = null;
        // åˆ›å»ºhttpClient实例
        HttpClient httpClient = new HttpClient();
        // è®¾ç½®http连接主机服务超时时间:15000毫秒
        // å…ˆèŽ·å–è¿žæŽ¥ç®¡ç†å™¨å¯¹è±¡ï¼Œå†èŽ·å–å‚æ•°å¯¹è±¡,再进行参数的赋值
        httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
        // åˆ›å»ºä¸€ä¸ªGet方法实例对象
        GetMethod getMethod = new GetMethod(url);
        // è®¾ç½®get请求超时为60000毫秒
        getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);
        // è®¾ç½®è¯·æ±‚重试机制,默认重试次数:3次,参数设置为true,重试机制可用,false相反
        getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, true));
        try {
            // æ‰§è¡ŒGet方法
            int statusCode = httpClient.executeMethod(getMethod);
            // åˆ¤æ–­è¿”回码
            if (statusCode != HttpStatus.SC_OK) {
                // å¦‚果状态码返回的不是ok,说明失败了,打印错误信息
                System.err.println("Method faild: " + getMethod.getStatusLine());
            } else {
                // é€šè¿‡getMethod实例,获取远程的一个输入流
                is = getMethod.getResponseBodyAsStream();
                // åŒ…装输入流
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                StringBuffer sbf = new StringBuffer();
                // è¯»å–封装的输入流
                String temp = null;
                while ((temp = br.readLine()) != null) {
                    sbf.append(temp).append("\r\n");
                }
                result = sbf.toString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // å…³é—­èµ„源
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // é‡Šæ”¾è¿žæŽ¥
            getMethod.releaseConnection();
        }
        return result;
    }
    public static String doPost(String url, Map<String, Object> paramMap) {
        // èŽ·å–è¾“å…¥æµ
        InputStream is = null;
        BufferedReader br = null;
        String result = null;
        // åˆ›å»ºhttpClient实例对象
        HttpClient httpClient = new HttpClient();
        // è®¾ç½®httpClient连接主机服务器超时时间:15000毫秒
        httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
        // åˆ›å»ºpost请求方法实例对象
        PostMethod postMethod = new PostMethod(url);
        // è®¾ç½®post请求超时时间
        postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);
        NameValuePair[] nvp = null;
        // åˆ¤æ–­å‚æ•°map集合paramMap是否为空
        if (null != paramMap && paramMap.size() > 0) {// ä¸ä¸ºç©º
            // åˆ›å»ºé”®å€¼å‚数对象数组,大小为参数的个数
            nvp = new NameValuePair[paramMap.size()];
            // å¾ªçŽ¯éåŽ†å‚æ•°é›†åˆmap
            Set<Entry<String, Object>> entrySet = paramMap.entrySet();
            // èŽ·å–è¿­ä»£å™¨
            Iterator<Entry<String, Object>> iterator = entrySet.iterator();
            int index = 0;
            while (iterator.hasNext()) {
                Entry<String, Object> mapEntry = iterator.next();
                // ä»ŽmapEntry中获取key和value创建键值对象存放到数组中
                try {
                    nvp[index] = new NameValuePair(mapEntry.getKey(),
                        new String(mapEntry.getValue().toString().getBytes("UTF-8"), "UTF-8"));
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                index++;
            }
        }
        // åˆ¤æ–­nvp数组是否为空
        if (null != nvp && nvp.length > 0) {
            // å°†å‚数存放到requestBody对象中
            postMethod.setRequestBody(nvp);
        }
        // æ‰§è¡ŒPOST方法
        try {
            int statusCode = httpClient.executeMethod(postMethod);
            // åˆ¤æ–­æ˜¯å¦æˆåŠŸ
            if (statusCode != HttpStatus.SC_OK) {
                System.err.println("Method faild: " + postMethod.getStatusLine());
            }
            // èŽ·å–è¿œç¨‹è¿”å›žçš„æ•°æ®
            is = postMethod.getResponseBodyAsStream();
            // å°è£…输入流
            br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
            StringBuffer sbf = new StringBuffer();
            String temp = null;
            while ((temp = br.readLine()) != null) {
                sbf.append(temp).append("\r\n");
            }
            result = sbf.toString();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // å…³é—­èµ„源
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // é‡Šæ”¾è¿žæŽ¥
            postMethod.releaseConnection();
        }
        return result;
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/HttpUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,239 @@
package com.vci.ubcs.codeapply;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.shaded.com.google.gson.JsonObject;
import com.vci.ubcs.code.vo.webserviceModel.apply.InterParameterVO;
import com.vci.ubcs.codeapply.object.R;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.http.*;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
public class HttpUtil {
    private static final CloseableHttpClient httpclient = HttpClients.createDefault();
    /**
     * å‘送HttpGet请求
     * @param url
     * @return
     */
    public static String sendGet(String url) {
        HttpGet httpget = new HttpGet(url);
        CloseableHttpResponse response = null;
        try {
            response = httpclient.execute(httpget);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        String result = null;
        try {
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                result = EntityUtils.toString(entity);
            }
        } catch (ParseException | IOException e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }
    /**
     * å‘送HttpGet带参请求
     * @param url
     * @param params
     * @return
     */
    public static R sendGet(String url, Map<String, String> params,Map<String,String> headers) {
        R r=new R();
        // èŽ·å–è¿žæŽ¥å®¢æˆ·ç«¯å·¥å…·
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String entityStr = null;
        CloseableHttpResponse response = null;
        try {
            /*
             * ç”±äºŽGET请求的参数都是拼装在URL地址后方,所以我们要构建一个URL,带参数
             */
            URIBuilder uriBuilder = new URIBuilder(url);
            /** ç¬¬ä¸€ç§æ·»åŠ å‚æ•°çš„å½¢å¼ */
        /*uriBuilder.addParameter("name", "root");
        uriBuilder.addParameter("password", "123456");*/
            /** ç¬¬äºŒç§æ·»åŠ å‚æ•°çš„å½¢å¼ */
            List<NameValuePair> list = new LinkedList<>();
            //设置头部
            for(Map.Entry<String,String> entry:params.entrySet()){
                BasicNameValuePair param1 = new BasicNameValuePair(entry.getKey(), entry.getValue());
                list.add(param1);
            }
            uriBuilder.setParameters(list);
            // æ ¹æ®å¸¦å‚æ•°çš„URI对象构建GET请求对象
            HttpGet httpGet = new HttpGet(uriBuilder.build());
            /*
             * æ·»åŠ è¯·æ±‚å¤´ä¿¡æ¯
             */
            if(headers!=null&&headers.size()>0) {
                for (Map.Entry<String, String> entry : params.entrySet()) {
                    httpGet.addHeader(entry.getKey(), entry.getValue());
                }
            }
            // æ‰§è¡Œè¯·æ±‚
            response = httpClient.execute(httpGet);
            // èŽ·å¾—å“åº”çš„å®žä½“å¯¹è±¡
            HttpEntity entity = response.getEntity();
            // ä½¿ç”¨Apache提供的工具类进行转换成字符串
            entityStr = EntityUtils.toString(entity, "UTF-8");
            if(StringUtils.isNotBlank(entityStr)){
                r = JSONObject.toJavaObject(JSONObject.parseObject(entityStr), R.class);
            }
        } catch (ClientProtocolException e) {
            System.err.println("Http协议出现问题");
            e.printStackTrace();
        } catch (ParseException e) {
            System.err.println("解析错误");
            e.printStackTrace();
        } catch (URISyntaxException e) {
            System.err.println("URI解析异常");
            e.printStackTrace();
        } catch (IOException e) {
            System.err.println("IO异常");
            e.printStackTrace();
        } finally {
            // é‡Šæ”¾è¿žæŽ¥
            if (null != response) {
                try {
                    response.close();
                    httpClient.close();
                } catch (IOException e) {
                    System.err.println("释放连接出错");
                    e.printStackTrace();
                }
            }
        }
        return r;
    }
    /**
     * å‘送HttpGet带参请求
     * @param url
     * @param header
     * @return
     */
    public static String sendGet(String url, Map<String, String> header) {
        HttpGet httpGet = new HttpGet(url);
        //设置头部
        for(Map.Entry entry:header.entrySet()){
//            System.out.println(entry.getKey()+ "###########" + entry.getValue());
            httpGet.setHeader(entry.getKey().toString(),entry.getValue().toString());
        }
//        System.out.println(jsonObject.toString());
//        HttpGet httpget = new HttpGet(url);
        CloseableHttpResponse response = null;
        try {
            response = httpclient.execute(httpGet);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        String result = null;
        try {
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                result = EntityUtils.toString(entity);
            }
        } catch (ParseException | IOException e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }
    /**
     * å‘送HttpPost请求,参数为map
     * @param url
     * @param map
     * @return
     */
    public static String sendPost(String url, Map<String,String> map) {
//        JsonObject formparams = new JsonObject();
//        for (Map.Entry<String, String> entry : map.entrySet()) {
//            formparams.add(entry.getKey(), entry.getValue();
//        }
        //json æ ¼å¼
//        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);
        JsonObject jsonObject = new JsonObject();
        for(Map.Entry entry:map.entrySet()){
//            System.out.println(entry.getKey()+ "###########" + entry.getValue());
            jsonObject.addProperty(entry.getKey().toString(),entry.getValue().toString());
        }
//        System.out.println(jsonObject.toString());
        StringEntity entity = new StringEntity(jsonObject.toString(), Consts.UTF_8);
        HttpPost httppost = new HttpPost(url);
        httppost.setEntity(entity);
        CloseableHttpResponse response = null;
        try {
            response = httpclient.execute(httppost);
        } catch (IOException e) {
            e.printStackTrace();
        }
        HttpEntity entity1 = response.getEntity();
        String result = null;
        try {
            result = EntityUtils.toString(entity1);
        } catch (ParseException | IOException e) {
            e.printStackTrace();
        }
        return result;
    }
    /**
     * å‘送不带参数的HttpPost请求
     * @param url
     * @return
     */
    public static String sendPost(String url) {
        HttpPost httppost = new HttpPost(url);
        CloseableHttpResponse response = null;
        try {
            response = httpclient.execute(httppost);
        } catch (IOException e) {
            e.printStackTrace();
        }
        HttpEntity entity = response.getEntity();
        String result = null;
        try {
            result = EntityUtils.toString(entity);
        } catch (ParseException | IOException e) {
            e.printStackTrace();
        }
        return result;
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/RMDataReferTempDialog.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,159 @@
package com.vci.ubcs.codeapply;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;
import com.vci.base.ui.exception.VCIException;
import com.vci.base.ui.swing.VCISwingUtil;
import com.vci.base.ui.swing.components.VCIJButton;
import com.vci.base.ui.swing.components.VCIJDialog;
import com.vci.base.ui.swing.components.VCIJPanel;
import com.vci.base.ui.swing.components.VCIJTable;
import com.vci.base.ui.swing.components.table.VCIJTablePanel;
import org.apache.poi.ss.formula.functions.T;
public class RMDataReferTempDialog extends VCIJDialog {
    private VCIJDialog rmDataAddDialog;
    private String templateId = "";
    private RMDataReferTempDialogActionListener actionListener = new RMDataReferTempDialogActionListener(this);
    private VCIJButton btnOk = VCISwingUtil.createVCIJButton("ok", "确定", "确定", "accept.png", actionListener);
    private VCIJButton btnCancel = VCISwingUtil.createVCIJButton("cancel", "取消", "取消", "cancel.png", actionListener);
    private static final long serialVersionUID = 1L;
    public RMDataReferTempDialog(VCIJDialog rmDataAddDialog,String templateId) {
        //super(true);
        this.rmDataAddDialog = rmDataAddDialog;
        this.templateId = templateId;
        init();
        setTitle("引用模板-属性选择");
        //initDialogSize(rmDataAddDialog.getWidth(), rmDataAddDialog.getHeight());
    }
    private void init(){
        this.setLayout(new BorderLayout());
        JPanel panel = new JPanel(new FlowLayout());
        panel.add(btnOk);
        panel.add(btnCancel);
        this.add(createRMDataMainPanel(), BorderLayout.CENTER);
        this.add(panel,BorderLayout.SOUTH);
        Dimension dime = Toolkit.getDefaultToolkit().getScreenSize().getSize();
        int x = dime.width/6;
        int y = dime.height/6 + 50;
        this.setLocation(x , y);
        this.setSize(850, 400);
    }
    private boolean fromTableDoubleClick = false;
    public boolean isFromTableDoubleClick() {
        return fromTableDoubleClick;
    }
    public void setFromTableDoubleClick(boolean fromTableDoubleClick) {
        this.fromTableDoubleClick = fromTableDoubleClick;
    }
    private VCIJPanel createRMDataMainPanel(){
        VCIJPanel rmDataTablePanel = new VCIJPanel();
        if(!templateId.equals("")){
            //rmDataTablePanel = getRMDataMainPanel("", "", templateId);
        }
        rmDataTablePanel.setPreferredSize(new Dimension(880,300));
        return rmDataTablePanel;
    }
    private VCIJTablePanel<T> tablePanel = null;
    private CodeDataMainPanelDataProvider dataProvider;
    public VCIJTablePanel getRMDataMainPanel(String libId, String classifyId, String templateId) {
        dataProvider = new CodeDataMainPanelDataProvider();
        tablePanel = new VCIJTablePanel<T>(dataProvider);
        //tablePanel.setCustomButtons(getCombinedButtons());
        tablePanel.setShowExport(true);
        tablePanel.setShowPaging(true);
        tablePanel.setPageButtonFlowAlign(FlowLayout.CENTER);
        tablePanel.setCustomButtonFlowAlign(FlowLayout.CENTER);
        tablePanel.buildTablePanel();
        int columnCount = tablePanel.getTable().getColumnCount();
        tablePanel.getTable().getColumnModel().getColumn(columnCount - 2).setPreferredWidth(150);
        tablePanel.getTable().getColumnModel().getColumn(columnCount - 4).setPreferredWidth(150);
        /**
         * ç¦æ­¢table表头拖动,防止第一列的复选框和第二列的序号拖动出问题:
         * ç‚¹å‡»æŸè¡Œï¼Œè¡¨æ ¼ä¸­çš„复选框看不到,且选中表头上的复选框系统会报错;数据信息显示不正确。
         * 2012-12-4 wangxl
         */
        tablePanel.getTable().getTableHeader().setReorderingAllowed(false);
        tablePanel.refreshTableData();
         VCIJTable table = tablePanel.getTable();
        table.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if (e.getButton() == 1 && e.getClickCount() == 2) {
                    setFromTableDoubleClick(true);
                    btnOk.doClick();
                }
            }
        });
        return tablePanel;
    }
    /***获取资源数据的主面板**/
/*
    public RMDataMainPanel getRMDataMainPanel() {
        return rmDataMainPanel;
    }
*/
    /*private RMDataTransmitObject loadTemplateAttributes(String libId, String classifyId, String templateId){
        LinkedHashMap<String, TemplatePropertyObject> tempPropObjsMap = new LinkedHashMap<String, TemplatePropertyObject>();
        LinkedList<TemplatePropertyObject> tempPropObjsList = new LinkedList<TemplatePropertyObject>();
        LinkedHashMap<String, AttributeObject> tempAttrObjsMap = new LinkedHashMap<String, AttributeObject>();
        LinkedList<AttributeObject> tempAttrObjsList = new LinkedList<AttributeObject>();
        TemplateObject templateObject = null;
        RMDataTransmitObject transmit = new RMDataTransmitObject();
        transmit.setLibId(libId);
        transmit.setClassifyId(classifyId);
        transmit.setTemplateId(templateId);
        transmit.setSpecialLib(true);//added by ligang 2012.07.04备件库不做权限校验
        try{
            UserEntityObject userEntityObject = LogonApplication.getUserEntityObject();
            TemplateClientDelegate  tempDel = new TemplateClientDelegate(userEntityObject);
            RMTemplateProertyClientDelegate tempPropDel = new RMTemplateProertyClientDelegate(userEntityObject);
            AttributeClientDelegate attrDel = new AttributeClientDelegate(userEntityObject);
//            RMTypeObject rmTypeObject = new RMTypeClientDelegate(userEntityObject).getRMTypeById(classifyId);
            RMTypeObject rmTypeObject = new RMTypeObject();
            // ä»Žèµ„源分类树中选择的对应的分类对象
            transmit.setRmTypeObject(rmTypeObject);
            // èŽ·å–æ¨¡æ¿å¯¹è±¡
            templateObject = tempDel.getTemplateObjectById(templateId);
            transmit.setTemplateObject(templateObject);
            // èŽ·å–æ¨¡æ¿å®šä¹‰çš„å±žæ€§å¯¹è±¡ï¼ˆè¿™ä¸ªå¯¹è±¡åŒ…å«çš„æ˜¯å±žæ€§åœ¨æ¨¡æ¿ä¸­æ˜¯å¦ä¸ºå…³é”®å±žæ€§ã€å¯å¦ä¸ºç©ºç­‰ç­‰ï¼‰
            TemplatePropertyObject[] tempPropObjs = tempPropDel.getTempletePropertys(templateId);
            for(TemplatePropertyObject obj : tempPropObjs){
                tempPropObjsMap.put(obj.getAttrId(), obj);
                tempPropObjsList.add(obj);
            }
            transmit.setTempPropObjsMap(tempPropObjsMap);
            transmit.setTempPropObjsList(tempPropObjsList);
            // èŽ·å–æ¨¡æ¿å®šä¹‰çš„å±žæ€§å¯¹è±¡å¯¹åº”åˆ°çš„çœŸå®žçš„å±žæ€§å¯¹è±¡ï¼ˆç³»ç»Ÿé…ç½®æ¨¡å—å®šä¹‰çš„é‚£äº›å±žæ€§å¯¹è±¡ï¼‰
            AttributeObject[] attrObjs = attrDel.fetchAttributeByTemplateId(templateId);
            for(AttributeObject obj : attrObjs){
                tempAttrObjsMap.put(obj.getId(), obj);
                tempAttrObjsList.add(obj);
            }
            transmit.setTempAttrObjsMap(tempAttrObjsMap);
            transmit.setTempAttrObjsList(tempAttrObjsList);
        }catch(VCIException e){
            e.printStackTrace();
        }
        return transmit;
    }*/
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/RMDataReferTempDialogActionListener.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.vci.ubcs.codeapply;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedHashMap;
import com.vci.base.ui.swing.VCIOptionPane;
import com.vci.base.ui.swing.components.VCIJDialog.DialogResult;
public class RMDataReferTempDialogActionListener implements ActionListener {
    private RMDataReferTempDialog owner = null;
    public RMDataReferTempDialogActionListener(RMDataReferTempDialog owner){
        this.owner = owner;
        this.initActionMap();
    }
    private LinkedHashMap<String, Runnable> actionMaps = new LinkedHashMap<String, Runnable>();
    private void initActionMap(){
        actionMaps.put("ok", new Runnable() { public void run() {
            ok();
        }});
        actionMaps.put("cancel", new Runnable() { public void run() {
            cancel();
        }});
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        String key = e.getActionCommand();
        if(actionMaps.containsKey(key)){
            actionMaps.get(key).run();
        }
    }
    private void ok(){
        if(!owner.isFromTableDoubleClick()){
            /*LinkedList<RMDataObject> list = this.owner.getRMDataMainPanel().getTablePanel().getSelectedRowObjects();
            if(list.size() > 1) {
                VCIOptionPane.showMessageDialog(this.owner, "不允许选择多条数据进行操作!");
                return;
            } else if(list.size() <= 0) {
                VCIOptionPane.showMessageDialog(this.owner, "请选择数据进行操作!");
                return;
            }*/
        }
        owner.setDialogResult(DialogResult.OK);
        close();
        owner.getDialogCallback().run();
    }
    private void cancel(){
        owner.setDialogResult(DialogResult.CANCEL);
        close();
    }
    private void close(){
        owner.setVisible(false);
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/SectionObject.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,4 @@
package com.vci.ubcs.codeapply;
public class SectionObject {
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/TestIntegrateFrame.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
package com.vci.ubcs.codeapply;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;
public class TestIntegrateFrame {
    public static JButton apply = new JButton();
    public static JTextField text = new JTextField();
    public static void main(String[] args) {
        final JFrame j = new JFrame();
        j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel p = new JPanel();
        j.setSize(200, 200);
        apply.setText("test");
        apply.setSize(80, 25);
        text.setPreferredSize(new Dimension(100,25));
        p.add(text);
        p.add(apply);
        j.add(p);
        j.setLocation(new Point(500,300));
        j.setVisible(true);
        apply.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Map<String, String> map = new HashMap<String, String>();
//                map.put("原材料替换件", "YUANCAILIAOTIHUANJIAN");
//                map.put("原材料部件", "1");
//                map.put("简易示波器", "");
                map.put("", "YCL");
                String clsfName = "锁";
                String deptName = "";
                CodeApplyFor410Dialog dialog = new CodeApplyFor410Dialog(j, clsfName,deptName);
                String code = dialog.getCodeValue();
                dialog.getAttributeValue("mi");
                text.setText(code + "_" + dialog.getAttributeValue("MIDU"));
                System.out.println("code:---"+code+"---");
            }
        });
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/TransmitTreeObject.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
package com.vci.ubcs.codeapply;
import com.vci.base.ui.tree.VCIBaseTree;
import com.vci.base.ui.tree.VCIBaseTreeModel;
import com.vci.base.ui.tree.VCIBaseTreeNode;
public class TransmitTreeObject {
    private VCIBaseTreeNode currentTreeNode; //选中的树节点
    private VCIBaseTreeModel treeModel;  // è¦æ“ä½œçš„ treeModel
    private VCIBaseTree tree;  // è¦æ“ä½œçš„ tree
    private VCIBaseTreeNode lastRightClickedTreeNode;// æœ€åŽä¸€æ¬¡å³é”®å¯¹åº”çš„TreeNode
    public TransmitTreeObject(){
        super();
    }
    public TransmitTreeObject(VCIBaseTreeNode currentTreeNode,
                              VCIBaseTreeModel treeModel, VCIBaseTree tree,
                              VCIBaseTreeNode lastRightClickedTreeNode) {
        super();
        this.currentTreeNode = currentTreeNode;
        this.treeModel = treeModel;
        this.tree = tree;
        this.lastRightClickedTreeNode = lastRightClickedTreeNode;
    }
    public VCIBaseTreeNode getCurrentTreeNode() {
        return currentTreeNode;
    }
    public void setCurrentTreeNode(VCIBaseTreeNode currentTreeNode) {
        this.currentTreeNode = currentTreeNode;
    }
    public VCIBaseTree getTree() {
        return tree;
    }
    public void setTree(VCIBaseTree tree) {
        this.tree = tree;
    }
    public VCIBaseTreeModel getTreeModel() {
        return treeModel;
    }
    public void setTreeModel(VCIBaseTreeModel treeModel) {
        this.treeModel = treeModel;
    }
    /**
     * è¿”回 æœ€åŽä¸€æ¬¡å³é”®å¯¹åº”çš„TreeNode
     * <p>Description: </p>
     *
     * @author xchao
     * @time 2012-5-21
     * @return
     */
    public VCIBaseTreeNode getLastRightClickedTreeNode() {
        return lastRightClickedTreeNode;
    }
    /**
     * è®¾ç½® æœ€åŽä¸€æ¬¡å³é”®å¯¹åº”çš„TreeNode
     * <p>Description: </p>
     *
     * @author xchao
     * @time 2012-5-21
     * @param lastRightClickedTreeNode
     */
    public void setLastRightClickedTreeNode(VCIBaseTreeNode lastRightClickedTreeNode) {
        this.lastRightClickedTreeNode = lastRightClickedTreeNode;
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/httpClient4.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,134 @@
package com.vci.ubcs.codeapply;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class httpClient4 {
    public static String doGet(String url) {
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse response = null;
        String result = "";
        try {
            // é€šè¿‡å€é»˜è®¤é…ç½®åˆ›å»ºä¸€ä¸ªhttpClient实例
            httpClient = HttpClients.createDefault();
            // åˆ›å»ºhttpGet远程连接实例
            HttpGet httpGet = new HttpGet(url);
            // è®¾ç½®è¯·æ±‚头信息,鉴权
            httpGet.setHeader("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");
            // è®¾ç½®é…ç½®è¯·æ±‚参数
            RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// è¿žæŽ¥ä¸»æœºæœåŠ¡è¶…æ—¶æ—¶é—´
                .setConnectionRequestTimeout(35000)// è¯·æ±‚è¶…æ—¶æ—¶é—´
                .setSocketTimeout(60000)// æ•°æ®è¯»å–è¶…æ—¶æ—¶é—´
                .build();
            // ä¸ºhttpGet实例设置配置
            httpGet.setConfig(requestConfig);
            // æ‰§è¡Œget请求得到返回对象
            response = httpClient.execute(httpGet);
            // é€šè¿‡è¿”回对象获取返回数据
            HttpEntity entity = response.getEntity();
            // é€šè¿‡EntityUtils中的toString方法将结果转换为字符串
            result = EntityUtils.toString(entity);
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // å…³é—­èµ„源
            if (null != response) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != httpClient) {
                try {
                    httpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }
    public static String doPost(String url, Map<String, Object> paramMap) {
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse httpResponse = null;
        String result = "";
        // åˆ›å»ºhttpClient实例
        httpClient = HttpClients.createDefault();
        // åˆ›å»ºhttpPost远程连接实例
        HttpPost httpPost = new HttpPost(url);
        // é…ç½®è¯·æ±‚参数实例
        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// è®¾ç½®è¿žæŽ¥ä¸»æœºæœåŠ¡è¶…æ—¶æ—¶é—´
            .setConnectionRequestTimeout(35000)// è®¾ç½®è¿žæŽ¥è¯·æ±‚è¶…æ—¶æ—¶é—´
            .setSocketTimeout(60000)// è®¾ç½®è¯»å–数据连接超时时间
            .build();
        // ä¸ºhttpPost实例设置配置
        httpPost.setConfig(requestConfig);
        // è®¾ç½®è¯·æ±‚头
        httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
        // å°è£…post请求参数
        if (null != paramMap && paramMap.size() > 0) {
            List<NameValuePair> nvps = new ArrayList<NameValuePair>();
            // é€šè¿‡map集成entrySet方法获取entity
            Set<Entry<String, Object>> entrySet = paramMap.entrySet();
            // å¾ªçŽ¯éåŽ†ï¼ŒèŽ·å–è¿­ä»£å™¨
            Iterator<Entry<String, Object>> iterator = entrySet.iterator();
            while (iterator.hasNext()) {
                Entry<String, Object> mapEntry = iterator.next();
                nvps.add(new BasicNameValuePair(mapEntry.getKey(), mapEntry.getValue().toString()));
            }
            // ä¸ºhttpPost设置封装好的请求参数
            try {
                httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        try {
            // httpClient对象执行post请求,并返回响应参数对象
            httpResponse = httpClient.execute(httpPost);
            // ä»Žå“åº”对象中获取响应内容
            HttpEntity entity = httpResponse.getEntity();
            result = EntityUtils.toString(entity);
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // å…³é—­èµ„源
            if (null != httpResponse) {
                try {
                    httpResponse.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != httpClient) {
                try {
                    httpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/AttrRangObjectWarper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
package com.vci.ubcs.codeapply.object;
import com.vci.ubcs.starter.web.pagemodel.KeyValue;
import java.io.Serializable;
import java.text.MessageFormat;
public class AttrRangObjectWarper implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 8306930792434927633L;
    private KeyValue keyValue = null;
    public AttrRangObjectWarper(KeyValue keyValue){
        this.keyValue = keyValue;
    }
    public KeyValue getKeyValue() {
        return keyValue;
    }
    public void setKeyValue(KeyValue keyValue) {
        this.keyValue = keyValue;
    }
    @Override
    public String toString() {
        String res = "";
        String desc = keyValue.getValue();
        String value = keyValue.getKey();
        if("".equals(desc) && "".equals(value)) {
            return "";
        }else if (desc.equals("")) {
            res = value;
//            res = MessageFormat.format("{0}({1})", value, value);
        } else {
            res = MessageFormat.format("{0}({1})", desc, value);
        }
        return res;
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/ClassifyLevel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.vci.ubcs.codeapply.object;
public class ClassifyLevel {
    /***
     * åˆ†ç±»ä»£å·
     */
    private String type;
    /**
     * å¦
     */
    private String change;
    /**
     * æœ€å°å±‚
     */
    private String set;
    /**
     * å±‚级
     */
    private int injectNum;
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getChange() {
        return change;
    }
    public void setChange(String change) {
        this.change = change;
    }
    public String getSet() {
        return set;
    }
    public void setSet(String set) {
        this.set = set;
    }
    public int getInjectNum() {
        return injectNum;
    }
    public void setInjectNum(int injectNum) {
        this.injectNum = injectNum;
    }
    @Override
    public String toString() {
        return "classifyLevel{" +
            "type='" + type + '\'' +
            ", change='" + change + '\'' +
            ", set='" + set + '\'' +
            ", injectNum='" + injectNum + '\'' +
            '}';
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/CodeClassify.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.vci.ubcs.codeapply.object;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
public class CodeClassify extends CodeClassifyVO {
    @Override
    public String toString() {
        return super.getName();
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/R.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
package com.vci.ubcs.codeapply.object;
public class R<T> {
    private int code;
    private boolean success;
    private T data;
    private String msg;
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public boolean isSuccess() {
        return success;
    }
    public void setSuccess(boolean success) {
        this.success = success;
    }
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    @Override
    public String toString() {
        return "R{" +
            "code=" + code +
            ", success=" + success +
            ", data=" + data +
            ", msg='" + msg + '\'' +
            '}';
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/RMDataTransmitObject.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,160 @@
package com.vci.ubcs.codeapply.object;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
import java.util.*;
public class RMDataTransmitObject {
    // åº“ID
    private String libId = "";
    // åˆ†ç±»ID
    private String classifyId = "";
    // åˆ†ç±»ç 
    private String classifyCode = "";
    // æ¨¡æ¿ID
    private String templateId = "";
    // æ¨¡æ¿å¯¹è±¡
    private CodeClassifyTemplateVO templateObject = null;
    // æ¨¡æ¿çš„属性配置对象MAP  key:属性ID value:模板和属性定义对象
    private Map<String, CodeClassifyTemplateAttrVO> tempPropObjsMap = new LinkedHashMap<String, CodeClassifyTemplateAttrVO>();
    /**
     * æ¨¡æ¿çš„属性配置,key:innerName, value:TemplatePropertyObject
     */
    private Map<String, CodeClassifyTemplateAttrVO> tempPropObjMapsByInnerName = new LinkedHashMap<String, CodeClassifyTemplateAttrVO>();
    // æ¨¡æ¿çš„属性配置对象LIST
    private List<CodeClassifyTemplateAttrVO> tempPropObjsList = new ArrayList<>();
    // èµ„源数据操作时,选择的流程对象
    //private ProcessDefinitionObject processObject = null;
    // èµ„源数据操作时,流程的任务对象,在添加资源数据时,此任务对象是选择的流程的第一个任务,在资源数据编辑或从任务箱中编辑时,是该任务对应的任务对象
    //private ProcessTaskInfo processTaskInfo = null;
    // èµ„源数据面板区域(表格区域)
    //private RMDataMainPanel rmDataMainPanel = null;
    // èµ„源数据对应的库或分类
    private CodeClassify rmTypeObject = null;
    // æœ€åŽä¸€æ¬¡åˆ›å»ºæˆåŠŸçš„èµ„æºæ•°æ®å¯¹è±¡ï¼‰
    //private RMDataObject lastCreatedRMDataObject = null;
    // æœ€åŽä¸€æ¬¡æ›´æ–°æˆåŠŸçš„èµ„æºæ•°æ®å¯¹è±¡
    //private RMDataObject lastUpdateRMDataObject = null;
    //资源数据操作时,流程的任务对象,在添加资源数据时,此任务对象是选择的流程的第一个任务,在资源数据编辑或从任务箱中编辑时,是该任务对应的任务对象
    //private FlowInstanceInfo flowInstanceInfo = null;
    // å±žæ€§çš„取值范围列表 key:属性ID value: map key:属性名称,value:取值范围值
    private LinkedHashMap<String, LinkedHashMap<String, String>> attrRangeNameToValueMaps = new LinkedHashMap<String, LinkedHashMap<String,String>>();
    //  å±žæ€§çš„取值范围列表 key:属性ID value: map key:取值范围值,value:属性名称
    private LinkedHashMap<String, LinkedHashMap<String, String>> attrRangeValueToNameMaps = new LinkedHashMap<String, LinkedHashMap<String,String>>();
    //是否是专有库标示
    private boolean specialLib = false;
    private boolean view = true;
    public String getLibId() {
        return libId;
    }
    public void setLibId(String libId) {
        this.libId = libId;
    }
    public String getClassifyId() {
        return classifyId;
    }
    public void setClassifyId(String classifyId) {
        this.classifyId = classifyId;
    }
    public String getClassifyCode() {
        return classifyCode;
    }
    public void setClassifyCode(String classifyCode) {
        this.classifyCode = classifyCode;
    }
    public String getTemplateId() {
        return templateId;
    }
    public void setTemplateId(String templateId) {
        this.templateId = templateId;
    }
    public CodeClassifyTemplateVO getTemplateObject() {
        return templateObject;
    }
    public void setTemplateObject(CodeClassifyTemplateVO templateObject) {
        this.templateObject = templateObject;
    }
    public Map<String, CodeClassifyTemplateAttrVO> getTempPropObjsMap() {
        return tempPropObjsMap;
    }
    public void setTempPropObjsMap(Map<String, CodeClassifyTemplateAttrVO> tempPropObjsMap) {
        this.tempPropObjsMap = tempPropObjsMap;
    }
    public Map<String, CodeClassifyTemplateAttrVO> getTempPropObjMapsByInnerName() {
        return tempPropObjMapsByInnerName;
    }
    public void setTempPropObjMapsByInnerName(Map<String, CodeClassifyTemplateAttrVO> tempPropObjMapsByInnerName) {
        this.tempPropObjMapsByInnerName = tempPropObjMapsByInnerName;
    }
    public List<CodeClassifyTemplateAttrVO> getTempPropObjsList() {
        return tempPropObjsList;
    }
    public void setTempPropObjsList(List<CodeClassifyTemplateAttrVO> tempPropObjsList) {
        this.tempPropObjsList = tempPropObjsList;
    }
    public LinkedHashMap<String, LinkedHashMap<String, String>> getAttrRangeNameToValueMaps() {
        return attrRangeNameToValueMaps;
    }
    public void setAttrRangeNameToValueMaps(LinkedHashMap<String, LinkedHashMap<String, String>> attrRangeNameToValueMaps) {
        this.attrRangeNameToValueMaps = attrRangeNameToValueMaps;
    }
    public LinkedHashMap<String, LinkedHashMap<String, String>> getAttrRangeValueToNameMaps() {
        return attrRangeValueToNameMaps;
    }
    public void setAttrRangeValueToNameMaps(LinkedHashMap<String, LinkedHashMap<String, String>> attrRangeValueToNameMaps) {
        this.attrRangeValueToNameMaps = attrRangeValueToNameMaps;
    }
    public boolean isSpecialLib() {
        return specialLib;
    }
    public void setSpecialLib(boolean specialLib) {
        this.specialLib = specialLib;
    }
    public boolean isView() {
        return view;
    }
    public void setView(boolean view) {
        this.view = view;
    }
    public CodeClassify getRmTypeObject() {
        return rmTypeObject;
    }
    public void setRmTypeObject(CodeClassify rmTypeObject) {
        this.rmTypeObject = rmTypeObject;
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/swing/IntegerTextField.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.vci.ubcs.codeapply.swing;
import java.io.Serializable;
import javax.swing.text.Document;
import com.vci.base.ui.swing.components.NumberPlainDocument;
import com.vci.base.ui.swing.components.VCIJTextField;
public class IntegerTextField  extends VCIJTextField implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 3885601645788779103L;
    public IntegerTextField(String text){
        super(text);
    }
    @Override
    protected Document createDefaultModel(){
        return new NumberPlainDocument(false);
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/swing/RealTextField.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.vci.ubcs.codeapply.swing;
import com.vci.base.ui.swing.components.NumberPlainDocument;
import com.vci.base.ui.swing.components.VCIJTextField;
import javax.swing.text.Document;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class RealTextField extends VCIJTextField {
    /**
     *
     */
    private static final long serialVersionUID = -2711989168936034987L;
    /**
     *
     */
    public RealTextField(String text) {
        super(text);
        addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
                this_keyReleased(e);
            }
        });
    }
    private void this_keyReleased(KeyEvent e) {
        String text = getText();
        if (text.equals(""))
            return;
        // æ•°å€¼ä¸èƒ½ä»¥-.或.开头
        if (text.startsWith("-.")) {
            text = "-0." + text.substring(2);
        } else if (text.startsWith(".")) {
            text = "0." + text.substring(1);
        }
        String str = text.substring(0, text.length() - 1);
        String last = text.substring(text.length() - 1);
        // Real类型的输入时,只能出现一个.
        if (last.equals(".")) {
            if (str.indexOf(".") > 0) {
                text = str;
            }
        }
        setText(text);
    }
    @Override
    protected Document createDefaultModel() {
        return new NumberPlainDocument(true);
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/swing/VCIJComboxBox.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
package com.vci.ubcs.codeapply.swing;
import java.awt.BorderLayout;
import java.awt.Dimension;
import com.vci.base.ui.swing.VCISwingUtil;
import com.vci.base.ui.swing.components.VCIJButton;
import com.vci.base.ui.swing.components.VCIJComboBox;
public class VCIJComboxBox  extends VCIJComboBox{
    private static final long serialVersionUID = 1L;
//    private KJButton searchBtn = new KJButton("", "search.png");
    private VCIJButton searchBtn = VCISwingUtil.createVCIJButton("search", "", "", "search.png", null);
    public VCIJButton getSearchBtn() {
        return searchBtn;
    }
    public void setSearchBtn(VCIJButton searchBtn) {
        this.searchBtn = searchBtn;
    }
    private boolean flag = false;
    public VCIJComboxBox(){
        this.setLayout(new BorderLayout());
        searchBtn.setVisible(false);
        searchBtn.setPreferredSize(new Dimension(40, 30));
        this.add(searchBtn, BorderLayout.EAST );
    }
//    public KJButton getSearchBtn() {
//        return searchBtn;
//    }
//
//    public void setSearchBtn(KJButton searchBtn) {
//        this.searchBtn = searchBtn;
//    }
    public boolean isFlag() {
        return flag;
    }
    public void setFlag(boolean flag) {
        this.flag = flag;
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/utils/ConfigUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.vci.ubcs.codeapply.utils;
import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
import com.vci.base.common.resource.CommonProperties;
/**
 * é…ç½®ä¿¡æ¯ç»Ÿä¸€è¯»å–ç±»
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2012</p>
 * <p>Company: VCI</p>
 * @author xchao
 * @time 2013-3-20
 * @version 1.0
 */
public class ConfigUtils {
    /**
     * æ ¹æ®KEY,从远程服务器端conf.properties中配置值
     * <p>Description: æ ¹æ®æœªæ‰¾åˆ°ç›¸åº”的值,则返回KEY</p>
     *
     * @author xchao
     * @time 2013-3-20
     * @param key
     * @return
     */
    public static String getConfigValue(String key){
        String res=CommonProperties.getStringProperty(key);
        return res;
    }
    /**
     * æ ¹æ®KEY,从远程服务器端conf.properties中配置值
     * <p>Description: æ ¹æ®æœªæ‰¾åˆ°ç›¸åº”的值,则返回KEY</p>
     *
     * @author xchao
     * @time 2013-3-20
     * @param key
     * @return
     */
    public static String getConfigValue(String key,String defaultValue){
        String res=CommonProperties.getStringProperty(key);
        if(StringUtils.isBlank(res)){
            return defaultValue;
        }
        return res;
    }
}
Source/UBCS/ubcs-codeApply/src/main/resources/properties/conf.properties
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
#?????????????????
# ??????????????????????????????????
RMData.MaxAttrInLine=2
# ?????????????TextArea???true:?? false????????true
RMData.TextArea.Enable=true
# ?String??????????????????????TextArea????????????100
RMData.MaxStringLength=500
# ???TextArea???TextArea?PreferredSize?MinimumSize?MaximumSize?Width?Height
RMData.TextArea.PreferredSize.Width=100
RMData.TextArea.PreferredSize.Height=50
RMData.TextArea.MinimumSize.Width=100
RMData.TextArea.MinimumSize.Height=30
RMData.TextArea.MaximumSize.Width=100
RMData.TextArea.MaximumSize.Height=80
#PDM????????????????????????????????????????#??
410.PDM.LibCodeName=\u7269\u54c1\#\u9644\u5f55
#???????????
410.PDM.item.url=http://127.0.0.1:36014/codeApplySwingController/getRMLibByName
#???????????
410.PDM.clsfTemplate.url=http://127.0.0.1:36014/codeApplySwingController/getUsedTemplateByClassifyOid
#???????????
410.PDM.leftClsfNode.url=http://127.0.0.1:36014/codeApplySwingController/selectCodeClassifyVOByParentId
#
410.PDM.leftdescLibNode.url=http://127.0.0.1:36014/codeApplySwingController/getRMTypeByDescAndLib
410.PDM.rule.url=http://127.0.0.1:36014/codeApplySwingController/getCodeRuleByClassifyFullInfo
410.PDM.attrKeyValue.url=http://127.0.0.1:36014/codeApplySwingController/listComboboxItems
Source/UBCS/ubcs-codeApply/src/main/resources/properties/tt.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
{"type":"分类代号","set":"最小层","change":"否","injectNum":4}
Source/UBCS/ubcs-service/ubcs-code/pom.xml
@@ -173,6 +173,14 @@
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySwingController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
package com.vci.ubcs.code.controller;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.service.ICodeClassifyService;
import com.vci.ubcs.code.service.ICodeClassifyTemplateAttrService;
import com.vci.ubcs.code.service.MdmEngineService;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.starter.web.pagemodel.KeyValue;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
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 java.util.List;
/**
 * ä¸»é¢˜åº“定义表 æŽ§åˆ¶å™¨
 *
 * @author xiejun
 * @since 2023-07-24
 */
@RestController
@AllArgsConstructor
@RequestMapping("/codeApplySwingController")
@Api(value = "主题库定义表", tags = "主题库定义表接口")
public class CodeApplySwingController {
    /***
     * åˆ†ç±»æœåŠ¡å¯¹è±¡
     */
    private final ICodeClassifyService codeClassifyService;
    /***
     * æ•°æ®æ“ä½œæœåŠ¡å¯¹è±¡
     */
    private final MdmEngineService mdmEngineService;
    /***
     * æ¨¡æ¿å±žæ€§æœåŠ¡
     */
    private final ICodeClassifyTemplateAttrService  codeClstempattrService;
    /**
     * èŽ·å–åº“èŠ‚ç‚¹ä¿¡æ¯
     * @param libName åº“节点名称
     * @return ä¸»é¢˜åº“分类显示树
     */
    @GetMapping("/getRMLibByName")
    public R<List<CodeClassifyVO>> getRMLibByName(String libName)  {
        List<CodeClassifyVO> codeClassifyVOList=codeClassifyService.getRMLibByName(libName);
        return R.data(codeClassifyVOList) ;
    }
    /***
     * æ ¹æ®åˆ†ç±»æè¿°å¤‡æ³¨å’Œåº“节点查询分类信息
     * @param desc
     * @param codeLibName
     * @return
     */
    @GetMapping("/getRMTypeByDescAndLib")
    public R<List<CodeClassifyVO>> getRMTypeByDescAndLib(String desc,String codeLibName)  {
        List<CodeClassifyVO> codeClassifyVOList=codeClassifyService.getRMTypeByDescAndLib(desc,codeLibName);
        return R.data(codeClassifyVOList) ;
    }
    /**
     * ä¸»é¢˜åº“分类树
     * @param parentId æ ‘形查询对象
     * @return ä¸»é¢˜åº“分类显示树
     */
    @GetMapping("/selectCodeClassifyVOByParentId")
    public R<List<CodeClassifyVO>> selectCodeClassifyVOByParentId(String parentId)  {
          List<CodeClassifyVO> codeClassifyVOList =codeClassifyService.selectCodeClassifyVOByParentId(parentId);
          return R.data(codeClassifyVOList);
    }
    /**
     * ä½¿ç”¨åˆ†ç±»çš„主键获取可以使用的模板对象
     * @param codeClassifyOid åˆ†ç±»çš„主键
     * @return æ¨¡æ¿çš„æ˜¾ç¤ºå¯¹è±¡
     */
    @GetMapping("/getUsedTemplateByClassifyOid")
    public R<CodeClassifyTemplateVO> getUsedTemplateByClassifyOid(String codeClassifyOid){
        CodeClassifyTemplateVO codeClassifyTemplateVO=mdmEngineService.getUsedTemplateByClassifyOid(codeClassifyOid);
        return R.data(codeClassifyTemplateVO);
    }
    /***
     * æ ¹æ“šåˆ†ç±»oid获取规则信息
     * @param codeClassId
     * @return
     */
    @GetMapping("/getCodeRuleByClassifyFullInfo")
    public R<CodeRuleVO> getCodeRuleByClassifyFullInfo(String codeClassId){
        CodeRuleVO codeRuleVO=new CodeRuleVO();
        CodeClassifyFullInfoBO classifyFullInfo = codeClassifyService.getClassifyFullInfo(codeClassId);
        if(classifyFullInfo!=null) {
            codeRuleVO = mdmEngineService.getCodeRuleByClassifyFullInfo(classifyFullInfo);
        }
        return R.data(codeRuleVO);
    }
    /***
     * æ ¹æ®å±žæ€§èŽ·å–æžšä¸¾å€¼
     * @param oid
     * @return
     */
    @GetMapping("/listComboboxItems")
    public R<List<KeyValue>> listComboboxItems(String oid){
        List<KeyValue> keyValueList=mdmEngineService.listComboboxItems(codeClstempattrService.getObjectByOid(oid));
        return R.data(keyValueList);
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java
@@ -117,4 +117,35 @@
    CodeClassify selectByIdRel(@Param("oid") String oid);
    /**
     * æ ¹æ®çˆ¶èŠ‚ç‚¹id查询当前节点子节点数据
     *
     * @param parentOid åˆ†ç±»çš„主键
     * @return æ•°æ®é›†åˆ
     */
    List<CodeClassify>     selectCodeClassifyDOByParentId(@Param("parentOid")String parentOid,@Param("tenantId") String tenantId);
    /***
     * æ ¹æ®åº“节点名称获取分类
     * @param libNames
     * @param lcstatus
     * @param tenantId
     * @return
     */
    List<CodeClassify> getRMLibByName(List<String> libNames,@Param("lcstatus")String lcstatus,@Param("tenantId") String tenantId);
    /***
     * æ ¹æ®åˆ†ç±»æè¿°å¤‡æ³¨å’Œåº“节点查询分类信息
     * @param desc
     * @param codeLibName
     * @return
     */
    List<CodeClassify> getRMTypeByDesc(@Param("desc")String desc,@Param("lcstatus")String lcstatus,@Param("tenantId") String tenantId);
    /***
     * æ ¹æ®å½“前分类获取上级分类信息
     * @param oid
     * @param tenantId
     * @return
     */
    List<CodeClassify>  selectAllParenClassifytByOid(@Param("oid")String oid,@Param("tenantId") String tenantId);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java
@@ -270,4 +270,27 @@
     * @return ä¸ªæ•°
     */
    int countChildrenByClassifyOid(String codeClassifyOid);
    /***
     * æ ¹æ®çˆ¶èŠ‚ç‚¹æŸ¥è¯¢ä¸‹çº§å¶å­èŠ‚ç‚¹
     * @param parentId
     * @return
     */
    List<CodeClassifyVO> selectCodeClassifyVOByParentId(String parentId);
    /***
     * æ ¹æ®åº“节点名称获取分类
     * @param libName
     * @return
     */
    List<CodeClassifyVO> getRMLibByName(String libName);
    /***
     * æ ¹æ®åˆ†ç±»æè¿°å¤‡æ³¨å’Œåº“节点查询分类信息
     * @param desc
     * @param codeLibName
     * @return
     */
    List<CodeClassifyVO> getRMTypeByDescAndLib(String desc,String codeLibName);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
@@ -528,6 +528,57 @@
        List<CodeClassifyVO> voList = codeClassifyDO2VOs(doList);
        return voList;
    }
    /***
     *
     * @param parentOid
     * @return
     */
    @Override
    public List<CodeClassifyVO> selectCodeClassifyVOByParentId(String parentOid) {
        List<CodeClassify> doList =codeClassifyMapper.selectCodeClassifyDOByParentId(parentOid,AuthUtil.getTenantId());
        List<CodeClassifyVO> voList = codeClassifyDO2VOs(doList);
        return voList;
    }
    /**
     * æ ¹æ®åº“节点名称获取分类
     * @param libName
     * @return
     */
    @Override
    public List<CodeClassifyVO> getRMLibByName(String libName) {
        List<String> libNameList=new ArrayList<>();
        if(StringUtils.isNotBlank(libName)){
            libNameList=VciBaseUtil.str2List(libName);
        }
        List<CodeClassify> doList =codeClassifyMapper.getRMLibByName(libNameList,"Enabled",AuthUtil.getTenantId());
        List<CodeClassifyVO> voList = codeClassifyDO2VOs(doList);
        return voList;
    }
    /***
     * æ ¹æ®åˆ†ç±»æè¿°å¤‡æ³¨å’Œåº“节点查询分类信息
     * @param desc
     * @param codeLibName
     * @return
     */
    @Override
    public List<CodeClassifyVO> getRMTypeByDescAndLib(String desc, String codeLibName) {
        List<CodeClassify> doList =codeClassifyMapper.getRMTypeByDesc(desc,"Enabled",AuthUtil.getTenantId());
        if (CollectionUtils.isEmpty(doList)) {
            return new LinkedList<CodeClassifyVO>();
        }
        CodeClassify codeClassify=doList.get(0);
        List<CodeClassify>  codeClassifyList=codeClassifyMapper.selectAllParenClassifytByOid(codeClassify.getOid(),AuthUtil.getTenantId());
        CodeClassify currentLib = codeClassifyList.get(codeClassifyList.size() - 1);
        if (!currentLib.getName().equals(codeLibName)) {
            return new ArrayList<>();
        }
        List<CodeClassifyVO> voList = codeClassifyDO2VOs(codeClassifyList);
        return voList;
    }
    /**
     * ä½¿ç”¨ç¼–号的路径获取对象
     *
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml
@@ -319,4 +319,172 @@
        WHERE PCC.OID IN (${oids})
    </select>
    <select id="selectCodeClassifyDOByParentId" resultMap="plCodeClassifyResultMap">
        select codeclassify0.OWNER                 as owner,
        codeclassify0.BTMTYPEID             as btmtypeid,
        codeclassify0.CREATOR               as creator,
        codeclassify0.CREATETIME            as createtime,
        codeclassify0.LASTMODIFIER          as lastmodifier,
        codeclassify0.DESCRIPTION           as description,
        codeclassify0.ORDERNUM              as ordernum,
        codeclassify0.CODERULEOID           as coderuleoid,
        codeclassify0.OID                   as oid,
        codeclassify0.BTMNAME               as btmname,
        codeclassify0.BTMTYPENAME           as btmtypename,
        codeclassify0.CODEKEYATTRREPEATOID  as codekeyattrrepeatoid,
        codeclassify0.PARENTCODECLASSIFYOID as parentcodeclassifyoid,
        codeclassify0.NAME                  as name,
        codeclassify0.LASTMODIFYTIME        as lastmodifytime,
        codeclassify0.ID                    as id,
        codeclassify0.CODERESEMBLERULEOID   as coderesembleruleoid,
        codeclassify0.LCSTATUS              as lcstatus,
        codeclassify0.TS                    as ts,
        codeclassify0.TENANT_ID             as tenantId ,
        coderuleoid.name                    as codeRuleOidName,
        codekeyattrrepeatoid.name           as codeKeyAttrRepeatOidName,
        coderesembleruleoid.name            as codeResembleRuleOidName
        from pl_code_classify codeclassify0
        left join pl_code_rule coderuleoid
        on codeclassify0.codeRuleOid = coderuleoid.oid
        left join pl_code_keyattrrepeat codekeyattrrepeatoid
        on codeclassify0.codeKeyAttrRepeatOid = codekeyattrrepeatoid.oid
        left join pl_code_resemblerule coderesembleruleoid
        on codeclassify0.codeResembleRuleOid = coderesembleruleoid.oid
        where 1=1
        <if test="parentOid != null and parentOid != ''">
            and codeclassify0.parentcodeclassifyoid = #{parentOid}
        </if>
        <if test="parentOid == null or parentOid == ''">
            and codeclassify0.parentcodeclassifyoid is null
        </if>
        <if test="tenantId != null and tenantId != ''">
            codeclassify0.tenant_id = #{tenantId}
        </if>
        order by id asc
    </select>
    <select id="getRMLibByName" resultMap="plCodeClassifyResultMap">
        select codeclassify0.OWNER                 as owner,
        codeclassify0.BTMTYPEID             as btmtypeid,
        codeclassify0.CREATOR               as creator,
        codeclassify0.CREATETIME            as createtime,
        codeclassify0.LASTMODIFIER          as lastmodifier,
        codeclassify0.DESCRIPTION           as description,
        codeclassify0.ORDERNUM              as ordernum,
        codeclassify0.CODERULEOID           as coderuleoid,
        codeclassify0.OID                   as oid,
        codeclassify0.BTMNAME               as btmname,
        codeclassify0.BTMTYPENAME           as btmtypename,
        codeclassify0.CODEKEYATTRREPEATOID  as codekeyattrrepeatoid,
        codeclassify0.PARENTCODECLASSIFYOID as parentcodeclassifyoid,
        codeclassify0.NAME                  as name,
        codeclassify0.LASTMODIFYTIME        as lastmodifytime,
        codeclassify0.ID                    as id,
        codeclassify0.CODERESEMBLERULEOID   as coderesembleruleoid,
        codeclassify0.LCSTATUS              as lcstatus,
        codeclassify0.TS                    as ts,
        codeclassify0.TENANT_ID             as tenantId ,
        coderuleoid.name                    as codeRuleOidName,
        codekeyattrrepeatoid.name           as codeKeyAttrRepeatOidName,
        coderesembleruleoid.name            as codeResembleRuleOidName
        from pl_code_classify codeclassify0
        left join pl_code_rule coderuleoid
        on codeclassify0.codeRuleOid = coderuleoid.oid
        left join pl_code_keyattrrepeat codekeyattrrepeatoid
        on codeclassify0.codeKeyAttrRepeatOid = codekeyattrrepeatoid.oid
        left join pl_code_resemblerule coderesembleruleoid
        on codeclassify0.codeResembleRuleOid = coderesembleruleoid.oid
        where codeclassify0.lcstatus = #{lcstatus}
        and codeclassify0.parentcodeclassifyoid is null
        <if test="libNames != null and ! libNames.isEmpty() and libNames.size() > 0">
            and codeclassify0.name in
            <foreach item="item" index="index" collection="libNames" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="tenantId != null and tenantId != ''">
            codeclassify0.tenant_id = #{tenantId}
        </if>
        order by id asc
    </select>
    <select id="getRMTypeByDesc" resultMap="plCodeClassifyResultMap">
        select codeclassify0.OWNER                 as owner,
        codeclassify0.BTMTYPEID             as btmtypeid,
        codeclassify0.CREATOR               as creator,
        codeclassify0.CREATETIME            as createtime,
        codeclassify0.LASTMODIFIER          as lastmodifier,
        codeclassify0.DESCRIPTION           as description,
        codeclassify0.ORDERNUM              as ordernum,
        codeclassify0.CODERULEOID           as coderuleoid,
        codeclassify0.OID                   as oid,
        codeclassify0.BTMNAME               as btmname,
        codeclassify0.BTMTYPENAME           as btmtypename,
        codeclassify0.CODEKEYATTRREPEATOID  as codekeyattrrepeatoid,
        codeclassify0.PARENTCODECLASSIFYOID as parentcodeclassifyoid,
        codeclassify0.NAME                  as name,
        codeclassify0.LASTMODIFYTIME        as lastmodifytime,
        codeclassify0.ID                    as id,
        codeclassify0.CODERESEMBLERULEOID   as coderesembleruleoid,
        codeclassify0.LCSTATUS              as lcstatus,
        codeclassify0.TS                    as ts,
        codeclassify0.TENANT_ID             as tenantId ,
        coderuleoid.name                    as codeRuleOidName,
        codekeyattrrepeatoid.name           as codeKeyAttrRepeatOidName,
        coderesembleruleoid.name            as codeResembleRuleOidName
        from pl_code_classify codeclassify0
        left join pl_code_rule coderuleoid
        on codeclassify0.codeRuleOid = coderuleoid.oid
        left join pl_code_keyattrrepeat codekeyattrrepeatoid
        on codeclassify0.codeKeyAttrRepeatOid = codekeyattrrepeatoid.oid
        left join pl_code_resemblerule coderesembleruleoid
        on codeclassify0.codeResembleRuleOid = coderesembleruleoid.oid
        where 1=1 and codeclassify0.lcstatus = #{lcstatus}
        <if test="desc != null">
            and  codeclassify0.DESCRIPTION = #{desc}
        </if>
        <if test="tenantId != null and tenantId != ''">
          and  codeclassify0.tenant_id = #{tenantId}
        </if>
        order by id asc
    </select>
    <select id="selectAllParenClassifytByOid" resultMap="plCodeClassifyResultMap">
        select codeclassify0.OWNER                 as owner,
        codeclassify0.BTMTYPEID             as btmtypeid,
        codeclassify0.CREATOR               as creator,
        codeclassify0.CREATETIME            as createtime,
        codeclassify0.LASTMODIFIER          as lastmodifier,
        codeclassify0.DESCRIPTION           as description,
        codeclassify0.ORDERNUM              as ordernum,
        codeclassify0.CODERULEOID           as coderuleoid,
        codeclassify0.OID                   as oid,
        codeclassify0.BTMNAME               as btmname,
        codeclassify0.BTMTYPENAME           as btmtypename,
        codeclassify0.CODEKEYATTRREPEATOID  as codekeyattrrepeatoid,
        codeclassify0.PARENTCODECLASSIFYOID as parentcodeclassifyoid,
        codeclassify0.NAME                  as name,
        codeclassify0.LASTMODIFYTIME        as lastmodifytime,
        codeclassify0.ID                    as id,
        codeclassify0.CODERESEMBLERULEOID   as coderesembleruleoid,
        codeclassify0.LCSTATUS              as lcstatus,
        codeclassify0.TS                    as ts,
        codeclassify0.TENANT_ID             as tenantId ,
        coderuleoid.name                    as codeRuleOidName,
        codekeyattrrepeatoid.name           as codeKeyAttrRepeatOidName,
        coderesembleruleoid.name            as codeResembleRuleOidName
        from pl_code_classify codeclassify0
        left join pl_code_rule coderuleoid
        on codeclassify0.codeRuleOid = coderuleoid.oid
        left join pl_code_keyattrrepeat codekeyattrrepeatoid
        on codeclassify0.codeKeyAttrRepeatOid = codekeyattrrepeatoid.oid
        left join pl_code_resemblerule coderesembleruleoid
        on codeclassify0.codeResembleRuleOid = coderesembleruleoid.oid
        start with  codeclassify0.oid=#{oid}
         <if test="tenantId != null and tenantId != ''">
           and  codeclassify0.tenant_id = #{tenantId}
          </if>
            connect by prior PARENTCODECLASSIFYOID = codeclassify0.oid
    </select>
</mapper>