xiejun
2023-08-12 4187374bbae66190e7eca6f42cc5e61cfae1637f
PDM集成swing界面相关功能开发
已修改19个文件
已添加8个文件
1750 ■■■■■ 文件已修改
Source/UBCS/ubcs-codeApply/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/AttarSearchPanel.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410Dialog.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410MainPanel.java 612 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410SearchDialog.java 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410SearchMainPanel.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410SearchProvider.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyPanelFor410.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyPanelFor410ActionListener.java 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeDataMainPanel.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/RMDataReferTempDialog.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/BaseModel.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/CodeDataObject.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/DataGrid.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/utils/HttpUtil.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/utils/ListUtil.java 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/resources/properties/conf.properties 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/test/java/tt.json 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/DockingSystemConfig.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/ComponentRule.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/MdmUIInfoVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySwingController.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemConfigServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/FormulaServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/pom.xml
@@ -50,6 +50,11 @@
        <artifactId>commons-collections4</artifactId>
        <version>4.1</version>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils-core</artifactId>
            <version>1.8.3</version>
        </dependency>
    </dependencies>
    <distributionManagement>
        <repository>
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/AttarSearchPanel.java
@@ -1,7 +1,5 @@
package com.vci.ubcs.codeapply;
import com.vci.base.ui.swing.VCISwingUtil;
import com.vci.base.ui.swing.components.VCIJButton;
import com.vci.base.ui.swing.components.VCIJLabel;
import com.vci.base.ui.swing.components.VCIJPanel;
import com.vci.base.ui.swing.components.VCIJTextField;
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410Dialog.java
@@ -47,6 +47,7 @@
    }
    public CodeApplyFor410Dialog(Frame frame, String userName, String clsfName, String deptName, String[] libName){
        super(frame, true);
        VCISwingUtil.setClientMainFrame(frame);
        try {
            this.setModal(true);
            parentComponet = frame;
@@ -62,6 +63,7 @@
    public CodeApplyFor410Dialog(JDialog dialog, String userName, String clsfName, String deptName, String[] libName) {
        super(dialog, true);
        VCISwingUtil.setClientMainFrame(new Frame());
        try {
            this.setModal(true);
            parentComponet = dialog;
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410MainPanel.java
@@ -1,10 +1,12 @@
package com.vci.ubcs.codeapply;
import com.alibaba.fastjson.JSONObject;
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.corba.common.VCIError;
import com.vci.ubcs.code.vo.pagemodel.*;
import com.vci.ubcs.codeapply.object.*;
import com.vci.ubcs.codeapply.swing.IntegerTextField;
@@ -17,6 +19,7 @@
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.system.user.entity.User;
import io.swagger.models.auth.In;
import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
import org.apache.commons.collections4.CollectionUtils;
@@ -28,6 +31,7 @@
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.List;
@@ -81,10 +85,11 @@
    private boolean isSpecialRuleFlag = false;
    private String specialSectioName = "";
    private VCIJPanel rulePal = new VCIJPanel();
    private StringBuffer tempStr= new StringBuffer();//可变码段的值;
    private  String  levelRes="";
    private String[] specialSecVals = new String[0];
    private RMDataTransmitObject transmitForRMData = null;
    private CodeRuleVO codeRuleVO=null;
    /**
     * å±žæ€§ID与属性对应的控件之间的映射MAP
     */
@@ -148,7 +153,7 @@
        Map<String,String> condtionMap=new HashMap<>();
        condtionMap.put("codeClassId", rmType.getOid());
        R r= HttpUtil.sendGet(url+"/getCodeRuleByClassifyFullInfo",condtionMap,new HashMap<>());
        CodeRuleVO codeRuleVO=new CodeRuleVO();
        codeRuleVO=new CodeRuleVO();
        if(r.isSuccess()){
            Object object= r.getData();
            if(object!=null) {
@@ -667,6 +672,17 @@
                } else
                        //是引用码段
                    if (secObj.getSecType().equals("coderefersec")) {
                        if (!secCombo.isFlag()){
                            secCombo.setFlag(true);
                            secCombo.getSearchBtn().setVisible(true);
                            secCombo.getSearchBtn().addActionListener(new ActionListener() {
                                @Override
                                public void actionPerformed(ActionEvent e) {
                                    doSearch(secCombo,secObj);
                                }
                            });
                        }
                    /*RefSecObject refObj = getRefSecObj(secObj.getId());
                    DefaultComboBoxModel aModel = getRefSecComboBox(refObj);
                    secCombo.setModel(aModel);
@@ -695,7 +711,7 @@
                */} else
                    //层级码段码值显示的是选择的代码项的名称
                    if(secObj.getSecType().equals("coderefersec")) {
                    if(secObj.getSecType().equals("codelevelsec")) {
                        CodeClassify rmObj = (CodeClassify) this.transTreeObject.getCurrentTreeNode().getObj();
                        secCombo.addItem(rmObj);
                    } else {
@@ -722,12 +738,12 @@
        RMDataTransmitObject transmit=new RMDataTransmitObject();
        transmit.setLibId(libId);
        transmit.setClassifyId(classifyId);
        CodeClassify rmType = (CodeClassify) this.transTreeObject.getCurrentTreeNode().getObj();
        transmit.setRmTypeObject(rmType);
        CodeClassify codeClassify = (CodeClassify) this.transTreeObject.getCurrentTreeNode().getObj();
        transmit.setRmTypeObject(codeClassify);
        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.setClassifyCode(codeClassify.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);
@@ -792,7 +808,7 @@
                    lbl.setToolTipText("点击此处获取模板对应规则的值");
                    lbl.addMouseListener(new MouseAdapter() {
                        public void mouseClicked(MouseEvent e){
                        //    getComptAttrValue(attrObj,attrIdToCtrlMaps,transmitForRMData.getTempPropObjsList());
                        getComptAttrValue(attrObj,attrIdToCtrlMaps);
                        }
                    });
@@ -866,77 +882,6 @@
        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的属性列表
@@ -1201,8 +1146,48 @@
        return new GridBagConstraints(gridx, gridy, gridwidth, gridheight,weightx, weighty, anchor, fill, new Insets(padxy, padxy, padxy,padxy), padxy, padxy);
    }
    /**根据属性组合规则获取属性的值 **/
    private void getComptAttrValue( CodeClassifyTemplateAttrVO  tempPropObj, LinkedHashMap<String, JComponent> attrIdToCtrlMaps) {
        Map<String,String> dataMap=new HashMap<>();
        Map<String,String> condtionMap=new HashMap<>();
        attrIdToCtrlMaps.forEach((key,compt)->{
            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;
                }
            }
            dataMap.put(key,value);
            condtionMap.put("dataMap["+key+"]",value);
        });
        condtionMap.put("componentRuleValue",tempPropObj.getComponentRule());
        R r= HttpUtil.sendGet(url+"/getValueByFormula",condtionMap,new HashMap<>());
        String value="";
        if(r.isSuccess()){
            value= r.getData().toString();
            if(attrIdToCtrlMaps.containsKey(tempPropObj.getId())){
                JComponent comp = attrInnerNameToCtrlMaps.get(tempPropObj.getId());
                if(comp instanceof JTextComponent) {
                    ((JTextComponent) comp).setText(value);
                }
            }
            Object object= r.getData();
            if(object!=null) {
                value= object.toString();
            }
        }else{
            VCIOptionPane.showMessage(this,r.getMsg());
        }
    }
    /**
     * æ ¹æ®å¼•用模板的id获取引用模板对象包含的数据
     * <p>Description: </p>
@@ -1223,7 +1208,11 @@
            ownerDialog.setSize(880, 500);
        }*/
        //final String referTempId = tempPropObj.getReferBtmId();
        final RMDataReferTempDialog dialog = new RMDataReferTempDialog(this,tempPropObj);
        if(StringUtils.isBlank(tempPropObj.getReferConfig())){
            VCIOptionPane.showMessage(this,"参照配置信息不正确,请核对!");
            return;
        }
        final RMDataReferTempDialog dialog = new RMDataReferTempDialog(this,tempPropObj.getReferConfig());
        dialog.setDialogCallback(new Runnable() {
            @Override
            public void run() {
@@ -1268,6 +1257,435 @@
        dialog.setVisible(true);
    }
    private void doSearch(VCIJComboxBox comboxBox,CodeBasicSecVO secObj){
        if(StringUtils.isBlank(secObj.getReferConfig())){
            VCIOptionPane.showMessage(this,"参照配置信息不正确,请核对!");
            return;
        }
        final RMDataReferTempDialog dialog = new RMDataReferTempDialog(this,secObj.getReferConfig());
        dialog.setDialogCallback(new Runnable() {
            @Override
            public void run() {
                KeyValue keyValue=new KeyValue();
                keyValue= dialog.getKeyValue();
                //for(CodeClassifyTemplateAttrVO obj : tempPropList) {
                if (keyValue != null) {
                    AttrRangObjectWarper wrapper = new AttrRangObjectWarper(keyValue);
                    comboxBox.getModel().setSelectedItem(wrapper);
                }
            }
        });
        //dialog.initDialogSize(ownerDialog.getWidth(), ownerDialog.getHeight());
        Dimension dime = Toolkit.getDefaultToolkit().getScreenSize();
        int x = dime.width/2 - 400;
        int y = dime.height/2 -300;
        dialog.setLocation(x, y);
        dialog.setSize(new Dimension(900, 600));
        dialog.setModal(true);
        dialog.setVisible(true);
    }
    /**
     * æ£€æŸ¥ç”³è¯·ç å€¼çš„æ•°æ®å¡«å†™æ˜¯å¦å®Œæ•´
     * 1.检查各个码段的值是否已经填写
     * 2.如果有日期码段,并且日期码段的值为可修改,需校验修改后的日期的格式是否符合
     * @return
     */
    public boolean checkIsAllowed(){
        Iterator<Integer> ite = compMaps.keySet().iterator();
        JComponent compt = null;
        /**校验1:检查各个码段的值是否已经填写完成**/
        while(ite.hasNext()) {
            int k = ite.next();
            //如果是层级码,跳出不进行判断
            if(k == levelPositon) {
                continue;
            }
            compt = compMaps.get(k);
            if(compt instanceof VCIJComboBox) {
                Object obj = ((VCIJComboBox) compt).getSelectedItem();
                if(obj == null || "".equals(obj)) {
                    VCIOptionPane.showMessageDialog(this, "请将信息填写完整!");
                    return false;
                }
            }
        }
        int len = columnSecMap.size();
        for (int i = 0; i < len; i++) {
            CodeBasicSecVO secObj = columnSecMap.get(i);
            String cType = secObj.getSecType();
            /**校验2:如果有日期码段,并且日期码段的值为可修改,需校验修改后的日期的格式是否符合**/
            if (cType.equals("codedatesec")) {
                String df =secObj.getCodeDateFormatStr();
                SimpleDateFormat dateFormate = new SimpleDateFormat(df);
                //String curDate = dateFormate.format(Calendar.getInstance().getTime());
                dateFormate.setLenient(false);//设置严格校验
                String dateStr = (String) ((VCIJComboBox)secAndComMap.get(secObj.getId())).getSelectedItem();
                try {
                    dateFormate.parse(dateStr);
                } catch (ParseException e) {
                    VCIOptionPane.showMessageDialog(this, "修改后的日期格式跟日期码段设置的格式不匹配,请修改!");
                    return false;
                }
                /**校验三:可变码段的校验**/
            } else if (cType .equals( "codevariablesec")) {
                 tempStr = new StringBuffer();
                String codeSecLength =secObj.getCodeSecLength();
                int secLen= Integer.parseInt(codeSecLength);
                //取出用户输入的值
                String varStr = (String) ((VCIJComboBox)secAndComMap.get(secObj.getId())).getSelectedItem();
                if(varStr.length() >secLen){
                    VCIOptionPane.showMessageDialog(this, "输入的可变码值超出了该码段的定义长度"+codeSecLength+"请修改");
                    return false;
                }
                //如果是固定长度,则需要考虑填充和补位
//                if(varObj.getLenType() == SectionConstant.SectionLengthType.VARLEN) {
                if(varStr.length() < secLen) {//没有达到最大长度
                    if(secObj.getCodeFillType().equals("L")) {//如果需要左填充
                        tempStr = new StringBuffer();
                        for(int j=0;j<secLen - varStr.length();j++) {
                            tempStr.append(secObj.getCodeFillSeparator());
                        }
                        tempStr.append(varStr);
                    } else if(secObj.getCodeFillType().equals("R")) {//如果需要右填充
                        tempStr = new StringBuffer();
                        tempStr.append(varStr);
                        for(int j=0;j<secLen- varStr.length();j++) {
                            tempStr.append(secObj.getCodeFillSeparator());
                        }
                    } else {
                        tempStr = new StringBuffer();
                        tempStr.append(varStr);
                    }
                } else {
                    tempStr = new StringBuffer();
                    tempStr.append(varStr);
                }
//                }
                /**层级码段的校验**/
            } else if (cType.equals("codelevelsec")) {
                Integer levelVal= secObj.getCodeLevelValue();
                levelRes = getRuleLevelCodeFromTree(secObj.getCodeLevelValue());
                if("".equals(levelRes)) {
//                    setBuildingHasError(true);
                    if(secObj.getCodeLevelType().equals("min")) {
                        VCIOptionPane.showError(this, "当前编码项规则中包含层级码段,并且层级设置为最小层,选择的当前节点包含子节点,不允许在当前分类下进行码值申请!");
                    }else {
                        VCIOptionPane.showError(this, "请至少在第 " + levelVal + "层(分类)添加数据!(编码项节点不算)" +
                            "\n(注意:如果算上编码项节点,则至少应该在第 " + (levelVal + 1) + " å±‚(分类)添加数据!)");
                    }
                    return false;
                }
            } else if(cType  .equals("codeclassifysec")) {//分类码段码值添加了空值,需要特殊判断一下
                // update by xchao 2013.07.09
//                ClsfCodeValObject obj = (ClsfCodeValObject) ((VCIJComboBox)secAndComMap.get(secObj.getId())).getSelectedItem();
                // åˆ†ç±»ç ç å€¼ä¸ºç©ºæ—¶ï¼Œä¹Ÿå¯ä»¥ç”³è¯·ç¼–码
//                if("".equals(obj.getValue())) {
//                    VCIOptionPane.showMessageDialog(this, "请选择码段:"+secObj.getName()+" å¯¹åº”的码值");
//                    return false;
//                }
            } else if(cType .equals( "codefixedsec")) {//固定码段码值添加了空值,需要特殊判断一下
                CodeFixedValueVO obj = (CodeFixedValueVO) ((VCIJComboBox)secAndComMap.get(secObj.getId())).getSelectedItem();
                if("".equals(obj.getId())) {
                    VCIOptionPane.showMessageDialog(this, "请选择码段:"+secObj.getName()+" å¯¹åº”的码值");
                    return false;
                }
            } else if(cType.equals("coderefersec")) {//引用码段码值添加了空值,需要特殊判断一下
                KeyValue keyValue = ((AttrRangObjectWarper)((VCIJComboBox)secAndComMap.get(secObj.getId())).getSelectedItem()).getKeyValue();
                if(keyValue!=null&&("".equals(keyValue.getValue()))) {
                    VCIOptionPane.showMessageDialog(this, "请选择码段:"+secObj.getName()+" å¯¹åº”的码值");
                    return false;
                }
            }
        }
        return true;
    }
    private LinkedList<VCIBaseTreeNode> parentTreeNodeListDesc = new LinkedList<VCIBaseTreeNode>();
    private LinkedList<VCIBaseTreeNode> parentTreeNodeListAsc = new LinkedList<VCIBaseTreeNode>();
    private String getRuleLevelCodeFromTree(int level){
        String res = null;
        TransmitTreeObject CodeClassifyTreeObj = this.transTreeObject;
        if(CodeClassifyTreeObj != null){
            VCIBaseTreeNode node = CodeClassifyTreeObj.getCurrentTreeNode();
            parentTreeNodeListDesc.clear();
            //每次进行申请时都重新初始化存储树结构的对象
            parentTreeNodeListAsc.clear();
            calcParentTreeNode(node);
            for(int i = parentTreeNodeListDesc.size() - 1; i >=0; i--){
                parentTreeNodeListAsc.add(parentTreeNodeListDesc.get(i));
            }
            /***校验:申请码值时,层级的处理 level = 0 æ ‡ç¤ºä»»æ„å±‚,level = 99 æ ‡ç¤ºæœ€å°å±‚  ,其它指指定层BEGIN**/
            if(level == 0) {
                res = ((CodeClassify)node.getObj()).getId();
                /***level == 99 å¹¶ä¸”是叶子节点时,才允许进行编码申请**/
            } else if(level == 99) {
                if(checkIsHasSonCodeClassify(node)) {
                    res = ((CodeClassify)node.getObj()).getId();
                }else {
                    res = "";
                }
            } else if(level == 99 && !checkIsHasSonCodeClassify(node)){
                res = "";
            } else if(parentTreeNodeListAsc.size() > level + 1) {
                VCIBaseTreeNode levelNode = parentTreeNodeListAsc.get(level + 1);
                CodeClassify codeClassify = (CodeClassify) levelNode.getObj();
                res = codeClassify.getId();
            } else {
                res = "";
            }
            /**************************************END**********************************/
        }
        return res;
    }
    /**
     * æ£€æŸ¥é€‰æ‹©çš„当前分类是否有子分类
     * <p>Description: </p>
     *
     * @author Administrator
     * @time 2013-4-10
     * @return
     */
    public boolean checkIsHasSonCodeClassify(VCIBaseTreeNode node) {
        int count = 0;
        if(node.isExpand()) {
            count = node.getChildCount();
        } else {
            //则需要去查询下面的是否存在
            CodeClassify codeClassify = (CodeClassify) node.getObj();
            codeClassify.getOid();
            Map<String,String> condtionMap=new HashMap<>();
            condtionMap.put("codeClassId", codeClassify.getOid());
            R r= HttpUtil.sendGet(url+"/countChildrenByClassifyOid",condtionMap,new HashMap<>());
            if(r.isSuccess()){
                Object object= r.getData();
                count=(int)object;
            }
        }
        if(count <= 0) {
            return true;
        }
        return false;
    }
    /**
     * æä¾›è°ƒç”¨è€…获取各个码段的拼接值
     * <p>Description: </p>
     *
     * @author xf
     * @time 2012-5-28
     * @return
     */
    public List<KeyValue> getSectionValues(){
        List<KeyValue> keyValueList=new ArrayList<>();
        if(getCodeRuleVO()!=null) {
            List<CodeBasicSecVO> codeBasicSecVOList = this.getCodeRuleVO().getSecVOList();
            if (!CollectionUtils.isEmpty(codeBasicSecVOList)) {
                for (int i = 0; i < codeBasicSecVOList.size(); i++) {
                    CodeBasicSecVO secObj=codeBasicSecVOList.get(i);
                    KeyValue keyValue = new KeyValue();
                    String cVal = "";
                    String secObjOid = secObj.getOid();
                    String secType = secObj.getSecType();
                    /***如果系统选择的是特殊规则,即工装图样代码规则,组别代号码段自动设置为空**Begin***/
                    if (isSpecialRuleFlag && secObj.getName().equals(specialSectioName)) {
                        cVal = "";
                        /**********************************End************************/
                    } else if (secType.equals("codedatesec")) {//日期码段的值
                        cVal = (String) ((VCIJComboBox) secAndComMap.get(secObj.getId())).getSelectedItem();
                    } else if (secType.equals("codevariablesec")) {//可变码段的值
//                        cVal = (String) ((VCIJComboBox)secAndComMap.get(secObj.getId())).getSelectedItem();
                        cVal = tempStr.toString();
                    } else if (secType.equals("codeclassifysec")) {//分类码段码值
                        cVal = ((CodeClassifyValue) ((VCIJComboBox) secAndComMap.get(secObj.getId())).getSelectedItem()).getOid();
                    } else if (secType.equals( "codefixedsec")) {//固定码段码值
                        cVal = ((CodeFixedValueVO) ((VCIJComboBox) secAndComMap.get(secObj.getId())).getSelectedItem()).getId();
                    } else if (secType.equals("coderefersec")) {//引用码段码值
//                    cVal = ((CodeValueObject)((VCIJComboBox)secAndComMap.get(secObj.getId())).getSelectedItem()).getPlcodeval();
                        KeyValue newKeyValue = ((AttrRangObjectWarper) ((VCIJComboBox) secAndComMap.get(secObj.getId())).getSelectedItem()).getKeyValue();
                        cVal=newKeyValue.getValue();
                    /*} else if (secType == SectionConstant.SectionType.SECCHAR) {//分隔符
                        cVal = secObj.getName();*/
                    } else if (secType.equals("codelevelsec")) {//层级码段
                        cVal = levelRes;
                    } else if (secType.equals("codeserialsec")) {
                            continue;
                    } else {
                        cVal = (String) ((VCIJComboBox) secAndComMap.get(secObj.getId())).getSelectedItem();
                    }
                    keyValue.setKey(secObjOid);
                    keyValue.setValue(cVal);
                    keyValueList.add(keyValue);
                }
            }
        }
        return keyValueList;
    }
    /**
     * æ ¡éªŒæ¨¡æ¿å±žæ€§ä¿¡æ¯æ˜¯å¦æ­£ç¡®
     * <p>Description: </p>
     *
     * @author Administrator
     * @time 2013-3-23
     * @return
     */
    public String[][] checkInputValues() {
        Map<String, String> attrNameMap = new LinkedHashMap<String, String>();
        Map<String, String> tempProMap = new LinkedHashMap<String, String>();
        // å„属性的内部名称
        LinkedList<String> listInnerNames = new LinkedList<String>();
        // å­˜å‚¨å±žæ€§çš„外部名称
        LinkedList<String> listOutNames = new LinkedList<String>();
        // å„属性对应的数据值
        LinkedList<String> listValues = new LinkedList<String>();
        // å„属性的类型
        LinkedList<String> listDataTypes = new LinkedList<String>();
        Map<String,CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrVOMap=transmitForRMData.getTempPropObjsList().stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
        Iterator<String> keys = attrIdToCtrlMaps.keySet().iterator();
        JComponent compt = null;
        JComponent firstCompt = null;
        while (keys.hasNext()) {
            String attrOid = keys.next();
            compt = attrIdToCtrlMaps.get(attrOid);
            String value = "";
            CodeClassifyTemplateAttrVO propObj = codeClassifyTemplateAttrVOMap.get(attrOid);
            boolean isExistError = false;
            String message = "";
            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;
                }
            }
            boolean checkNullInput = true;
            if (checkNullInput) {
                // æ£€æŸ¥å±žæ€§æ˜¯å¦å¯ä»¥ä¸ºç©º isNull=0 è¡¨ç¤ºä¸èƒ½ä¸ºç©ºï¼ŒisNull=1表示可以为空
                if ("true".equals(propObj.getRequireFlag())) {// ä¸èƒ½ä¸ºç©ºæ—¶éœ€è¦åˆ¤æ–­è¾“入的值是否为空
                    if ((value == null) || (value != null && value.trim().length() == 0)) {
                        isExistError = true;
                        compt.requestFocus();
                        message = propObj.getName() + " ä¸èƒ½ä¸ºç©ºï¼Œè¯·é‡æ–°è¾“入!";
                    }
                }
                // æ ¡éªŒé•¿åº¦
                else if ((value != null && !value.equals(""))
                    && value.length() > Integer.valueOf(propObj.getControlLength())
                    && !(propObj.getAttributeDataType().toUpperCase().equals(VciFieldTypeEnum.VTDate)||
                    propObj.getAttributeDataType().toUpperCase().equals(VciFieldTypeEnum.VTDateTime))
                ) {
                    isExistError = true;
                    compt.requestFocus();
                    message = propObj.getName() + " çš„属性值  " + value
                        + " çš„长度不能超过" + propObj.getControlLength();
                }
                // æ£€æŸ¥è¾“入的值是否满足属性校验规则(如果存在)
                if (!isExistError && !propObj.getComponentRule().equals("")) { // å­˜åœ¨ç€å±žæ€§æ ¡éªŒè§„则
                    // æ—¥æœŸç±»åž‹çš„不检查属性校验规则
//                    if (propObj.getAttributeDataType().toUpperCase().equals(Constants.DATA_TYPE_DATE)|| (compt instanceof VCIJComboBox)) {
//                        // ä¸åšæ£€æŸ¥
//                    } else {
//                        initAllAttrRuleMaps();
//                        // åšæ£€æŸ¥
//                        if (!value.equals("") && allAttrRulesMap.containsKey(propObj.getAttrRuleId())) {
//                            // TODO è°ƒç”¨å±žæ€§æ ¡éªŒè§„则的接口,校验当前输入的值是否满足规则条件
//                            AttrRuleObject attrRuleObj = allAttrRulesMap.get(attrObj.getAttrRuleId());
//                            String regex = attrRuleObj.getRule();
//                            Pattern p = Pattern.compile(regex);
//                            if (!p.matcher(value).matches()) {
//                                // ä¸åŒ¹é…
//
//                                isExistError = true;
//                                compt.requestFocus();
//                                message = attrObj.getName() + "的输入值 " + value
//                                    + " ä¸æ»¡è¶³è¯¥å±žæ€§å®šä¹‰çš„æ ¡éªŒè§„则  \n\n" + ""
//                                    + attrRuleObj.getRuleName() + ":\t"
//                                    + attrRuleObj.getRule() + "\n\n"
//                                    + "请重新输入!";
//                            }
//                        }
//                    }
                }
            }
            // æ˜¯å¦å­˜åœ¨é”™è¯¯
            if (isExistError) {
                //setErrorMessageFlag(true);
                listInnerNames.clear();
                listOutNames.clear();
                listValues.clear();
                listDataTypes.clear();
                VCIOptionPane.showMessage(this, message);
                break;
            } else {
                //setErrorMessageFlag(false);
                // å¦‚果是日期类型,且属性可空,又没有选择日期值,则给个默认值
                if (value == null && propObj.getAttributeDataType().toUpperCase().equals(VciFieldTypeEnum.VTDate)) {
                    SimpleDateFormat sdfDateAndTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    value = sdfDateAndTime.format(new Date());
                }else if(value == null&&propObj.getAttributeDataType().toUpperCase().equals(VciFieldTypeEnum.VTDateTime)){
                    SimpleDateFormat sdfDateAndTime = new SimpleDateFormat("HH:mm:ss");
                    value = sdfDateAndTime.format(new Date());
                }
                // å…¨éƒ¨éªŒè¯é€šè¿‡
                value = value.trim();
                listInnerNames.add(propObj.getId());
                listOutNames.add(propObj.getName());
                listValues.add(value);
                if(propObj.getAttributeDataType().equals(VciFieldTypeEnum.VTFilePath)){
                    listDataTypes.add("String");
                }else{
                    listDataTypes.add(propObj.getAttributeDataType());
                }
                attrNameMap.put(propObj.getName(), value);
                tempProMap.put(propObj.getId(), propObj.getId());
            }
            // update by xchao 2012.07.11
            if (firstCompt == null) {
                firstCompt = compt;
            }
        }// end while(keys.hadNext())
        LinkedList<String[]> res = new LinkedList<String[]>();
        res.add(listInnerNames.toArray(new String[] {}));
        res.add(listValues.toArray(new String[] {}));
        res.add(listDataTypes.toArray(new String[] {}));
        res.add(listOutNames.toArray(new String[]{}));
        return res.toArray(new String[][] {});
    }
    private void calcParentTreeNode(VCIBaseTreeNode node){
        parentTreeNodeListDesc.add(node);
        if(node.getParent() != null){
            calcParentTreeNode((VCIBaseTreeNode)node.getParent());
        } else{
            // æ ¹èŠ‚ç‚¹
            // æ¥è‡ªä¸“用库(带分类显示的)
            // ç”±äºŽä¸“用库(带分类显示的)将库节点向上提升了一级,库节点就是根节点
            // å› æ­¤ä¸ºä¿æŒç»Ÿè®¡ï¼Œæ–¹ä¾¿æ ¹æ®å±‚级取分类码(代号),在此将原因的根添加到集合
            if(node.getObj() instanceof CodeClassify){
                parentTreeNodeListDesc.add(new VCIBaseTreeNode("所有资源数据", "root"));
            }
        }
    }
    //获取系统配置的码段码值
    private Map<String, String> getSpecialValMap(String[] vals) {
@@ -1280,4 +1698,36 @@
    private boolean isNumber(String value) {
        return Pattern.matches("[0-9]+", value);
    }
    public LinkedHashMap<String, JComponent> getAttrIdToCtrlMaps() {
        return attrIdToCtrlMaps;
    }
    public void setAttrIdToCtrlMaps(LinkedHashMap<String, JComponent> attrIdToCtrlMaps) {
        this.attrIdToCtrlMaps = attrIdToCtrlMaps;
    }
    public LinkedHashMap<String, JComponent> getAttrInnerNameToCtrlMaps() {
        return attrInnerNameToCtrlMaps;
    }
    public void setAttrInnerNameToCtrlMaps(LinkedHashMap<String, JComponent> attrInnerNameToCtrlMaps) {
        this.attrInnerNameToCtrlMaps = attrInnerNameToCtrlMaps;
    }
    public TransmitTreeObject getTransTreeObject() {
        return transTreeObject;
    }
    public void setTransTreeObject(TransmitTreeObject transTreeObject) {
        this.transTreeObject = transTreeObject;
    }
    public CodeRuleVO getCodeRuleVO() {
        return codeRuleVO;
    }
    public void setCodeRuleVO(CodeRuleVO codeRuleVO) {
        this.codeRuleVO = codeRuleVO;
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410SearchDialog.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,168 @@
package com.vci.ubcs.codeapply;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.LinkedList;
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.swing.components.table.VCIJTablePanel;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
import com.vci.ubcs.codeapply.object.BaseModel;
import com.vci.ubcs.codeapply.object.CodeClassify;
public class CodeApplyFor410SearchDialog extends VCIJDialog {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private CodeApplyPanelFor410 ownerPanel;
    private VCIJLabel codeName = new VCIJLabel("代码:");
    private VCIJTextField  txtCodeName = new VCIJTextField(false);
    private VCIJButton btnSearch= VCISwingUtil.createVCIJButton("btnSearch", "查询", "查询", "search.png", null);
    private VCIJButton btnOk = VCISwingUtil.createVCIJButton("replace", "确定", "确定", "ok.gif",null);
    private VCIJButton btnCancel = VCISwingUtil.createVCIJButton("cancel", "取消", "取消", "cancel.gif",null);
    private String strName = "";
    private String str = "";
    public CodeApplyFor410SearchDialog(CodeApplyPanelFor410 ownerPanel){
        //super(LogonApplication.frame,true);
        this.ownerPanel = ownerPanel;
        this.setTitle("查询代码");
        Dimension dime = Toolkit.getDefaultToolkit().getScreenSize();
        int x = dime.width/2 - 300;
        int y = dime.height/2 - 300;
        this.setLocation(x, y);
        this.setSize(new Dimension(700, 600));
        init();
        setModal(true);
        setVisible(true);
    }
    private LinkedList<VCIJButton> selfCustomButtons = new LinkedList<VCIJButton>();
    {
        selfCustomButtons.add(btnOk);
        selfCustomButtons.add(btnCancel);
    }
    public void init(){
        setLayout(new BorderLayout());
        add(nothPanel(),BorderLayout.NORTH);
        add(createCenterTPanel(), BorderLayout.CENTER);
        cancel();
    }
    private VCIJPanel nothPanel(){
        VCIJPanel pal = new VCIJPanel();
        VCIJPanel nothPanel = new VCIJPanel();
        nothPanel.setLayout(null);
        nothPanel.setPreferredSize(new Dimension(300,40));
        codeName.setBounds(10, 5, 60, 28);
        txtCodeName.setBounds(70, 5, 200, 28);
        btnSearch.setBounds(300, 5, 80, 25);
        nothPanel.add(codeName);
        nothPanel.add(txtCodeName);
        nothPanel.add(btnSearch);
        pal.setLayout(new BorderLayout());
        pal.add(nothPanel);
        pal.setVisible(true);
        return pal;
    }
    private CodeApplyFor410SearchMainPanel codeDataMainPanel=null;
    private VCIJPanel createCenterTPanel(){
        codeDataMainPanel=new CodeApplyFor410SearchMainPanel();
        CodeApplyFor410SearchProvider  dataProvider=new CodeApplyFor410SearchProvider(this);
        codeDataMainPanel.setDataProvider(dataProvider);
        codeDataMainPanel.setCustomTopPanel(nothPanel());
        codeDataMainPanel.buildPanel();
        VCIJTable table = codeDataMainPanel.getTablePanel().getTable();
        table.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if (e.getButton() == 1 && e.getClickCount() == 2) {
                    btnOk.doClick();
                }
            }
        });
        return codeDataMainPanel;
    }
    public VCIJTablePanel<BaseModel> getPanel() {
        return codeDataMainPanel.getTablePanel();
    }
    /**
     * æŒ‰é’®äº‹ä»¶
     */
    public void cancel(){
        btnCancel.addActionListener(new ActionListener() {
            @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
             btn_Cancel();    //取消
            }
        });
        btnSearch.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0) {
                searchButton_action();//查询
            }
        });
        btnOk.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0) {
                okButton_action();//确定
            }
        });
    }
    public void okButton_action(){
        int len = codeDataMainPanel.getTablePanel().getSelectedRowObjects().size();
        if (len==0) {
            VCIOptionPane.showMessage(this, "请先选择要操作的数据");
            return;
        }else if (len>1) {
            VCIOptionPane.showMessage(this, "一次只能选择一条数据进行操作");
            return;
        }
        LinkedList<BaseModel> list = codeDataMainPanel.getTablePanel().getSelectedRowObjects();
        for (BaseModel object : list) {
            str = object.getId();
            setStr(str);
        }
        this.dispose();
    }
    public void searchButton_action(){
        strName = txtCodeName.getText();
        setStrName(strName);
        codeDataMainPanel.getTablePanel().refreshTableData();
    }
    public CodeApplyPanelFor410 getOwnerPanel() {
        return ownerPanel;
    }
    public void setOwnerPanel(CodeApplyPanelFor410 ownerPanel) {
        this.ownerPanel = ownerPanel;
    }
    public String getStr() {
        return str;
    }
    public void setStr(String str) {
        this.str = str;
    }
    public String getStrName() {
        return strName;
    }
    public void setStrName(String strName) {
        this.strName = strName;
    }
    public void btn_Cancel(){
        this.dispose();
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410SearchMainPanel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
package com.vci.ubcs.codeapply;
import com.vci.base.ui.swing.VCISwingUtil;
import com.vci.base.ui.swing.components.VCIJPanel;
import com.vci.base.ui.swing.components.table.AbstractVCIJTableDataProvider;
import com.vci.base.ui.swing.components.table.VCIJTablePanel;
import com.vci.ubcs.codeapply.object.BaseModel;
import java.awt.*;
public class CodeApplyFor410SearchMainPanel  extends VCIJPanel {
    /**
     * è‡ªå®šä¹‰é¡¶éƒ¨æŽ§ä»¶åŒºåŸŸ
     */
    private VCIJPanel customTopPanel = null;
    public void buildPanel(){
        this.init();
    }
    private void init(){
        initComponents();
    }
    private void initComponents(){
        setLayout(new BorderLayout());
        add(createNorthBaseAttrsPanel(), BorderLayout.NORTH);
        add(createCenterDataTablePanel(), BorderLayout.CENTER);
    }
    private VCIJPanel createNorthBaseAttrsPanel(){
        VCIJPanel palRes = new VCIJPanel(new BorderLayout());
        if(getCustomTopPanel() != null) {
            palRes.add(getCustomTopPanel(), BorderLayout.CENTER);
        }
        return palRes;
    }
    /**
     * æ ¹æ®ç±»åž‹æ˜¾ç¤ºtable
     */
    private VCIJTablePanel<BaseModel> tablePanel = null;
    private AbstractVCIJTableDataProvider<BaseModel> dataProvider = null;
    private VCIJPanel createCenterDataTablePanel() {
        tablePanel = new VCIJTablePanel<BaseModel>(dataProvider);
        //tablePanel.setCustomButtons(getCombinedButtons());
        tablePanel.setShowExport(true);
        tablePanel.setShowPaging(true);
        tablePanel.setShowProgressBar(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();
        return tablePanel;
    }
    public VCIJPanel getCustomTopPanel() {
        return customTopPanel;
    }
    public void setCustomTopPanel(VCIJPanel customTopPanel) {
        this.customTopPanel = customTopPanel;
    }
    public VCIJTablePanel<BaseModel> getTablePanel() {
        return tablePanel;
    }
    public void setTablePanel(VCIJTablePanel<BaseModel> tablePanel) {
        this.tablePanel = tablePanel;
    }
    public AbstractVCIJTableDataProvider<BaseModel> getDataProvider() {
        return dataProvider;
    }
    public void setDataProvider(AbstractVCIJTableDataProvider<BaseModel> dataProvider) {
        this.dataProvider = dataProvider;
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyFor410SearchProvider.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,116 @@
package com.vci.ubcs.codeapply;
import java.util.*;
import com.alibaba.cloud.commons.lang.StringUtils;
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.table.AbstractVCIJTableDataProvider;
import com.vci.base.ui.swing.components.table.VCIJTableNode;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
import com.vci.ubcs.codeapply.object.*;
import com.vci.ubcs.codeapply.utils.ConfigUtils;
import com.vci.ubcs.codeapply.utils.HttpUtil;
import com.vci.ubcs.codeapply.utils.ListUtil;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.apache.commons.collections4.CollectionUtils;
public class CodeApplyFor410SearchProvider extends AbstractVCIJTableDataProvider<BaseModel> {
    private String[] fields = {};
    private boolean view = true;
    private String codeName;
    LinkedList<String> fieldList = new LinkedList<String>();
    private CodeApplyFor410SearchDialog dialog = null;
    private String url= ConfigUtils.getConfigValue("410.code.url","http://127.0.0.1:36014/codeApplySwingController");
    public CodeApplyFor410SearchProvider(CodeApplyFor410SearchDialog dialog){
        this.dialog = dialog;
    }
    @Override
    public String[] getSpecialColumns() {
        LinkedList<String> nameList = new LinkedList<String>();
        CodeClassifyTemplateVO codeClassifyTemplateVO=this.dialog.getOwnerPanel().getCurrentCodeClassifyTemplateVO();
        if(codeClassifyTemplateVO!=null){
            if(!CollectionUtils.isEmpty(codeClassifyTemplateVO.getAttributes())){
                codeClassifyTemplateVO.getAttributes().stream().forEach(codeClassifyTemplateAttrVO -> {
                    fieldList.add(codeClassifyTemplateAttrVO.getId());
                    nameList.add(codeClassifyTemplateAttrVO.getName());
                });
            }
        }
        fields = fieldList.toArray(new String[]{});
        return nameList.toArray(new String[]{});
    }
    @Override
    public int getTotal() {
        // TODO Auto-generated method stub
        return this.total;
    }
    @Override
    public VCIJTableNode<BaseModel> getNewRowNode(BaseModel dataObj) {
        Map<String,String> dataMap= dataObj.getData();
        Map<String, String> defaultDataMap= VciBaseUtil.objectToMapString(dataObj);
        defaultDataMap.putAll(dataMap);
        VCIJTableNode<BaseModel> res = new VCIJTableNode<BaseModel>(dataObj);
        int i=dataColumnStartIndex;
        String data="";
        for (String field:fields){
            if(defaultDataMap.containsKey(field+"_text")){
                 data=defaultDataMap.getOrDefault(field+"_text","");
            }else if(defaultDataMap.containsKey(field+"Text")){
                data=defaultDataMap.getOrDefault(field+"Text","");
            }else{
                data=defaultDataMap.getOrDefault(field,"");
            }
            res.setPropertyValue(getColumns()[i++], data);
        }
        return res;
    }
    @Override
    public BaseModel[] getDatas(int pageIndex, int pageSize) {
        DataGrid dataGrid=new DataGrid();
        try{
            CodeClassifyTemplateVO codeClassifyTemplateVO=this.dialog.getOwnerPanel().getCurrentCodeClassifyTemplateVO();
            CodeClassify codeClassify = (CodeClassify) this.dialog.getOwnerPanel().getRightMainPanel().getTransTreeObject().getCurrentTreeNode().getObj();
            Map<String,String> condtionMap=new HashMap<>();
            condtionMap.put("codeClassifyOid",codeClassify.getOid());
            condtionMap.put("templateOid",codeClassifyTemplateVO.getOid());
            condtionMap.put("page",pageIndex+"");
            condtionMap.put("limit",pageSize+"");
            if(StringUtils.isNotBlank(this.dialog.getStrName())){
                condtionMap.put("conditionMap[id]",this.dialog.getStrName());
            }
            //condtionMap.put("conditionMap[lcStatus]","Released");
            R r= HttpUtil.sendGet(url+"/gridTableDataByClassifyOid",condtionMap,new HashMap<>());
            if(r.isSuccess()){
                Object object= r.getData();
                if(object!=null) {
                    ObjectMapper objectMapper = new ObjectMapper();
                    dataGrid = objectMapper.readValue(object.toString(), DataGrid.class);
                }
            }else{
                VCIOptionPane.showMessage(this.dialog,r.getMsg());
            }
        } catch (
        JsonProcessingException e) {
            e.printStackTrace();
        }
        this.total= new Long(dataGrid.getTotal()).intValue();
        List<Map>  dataList= dataGrid.getData();
        List<BaseModel> hostInfos=new ArrayList<>();
        //List<BaseModel> hostInfos=    ListUtil.listMapParseListObj(dataList, BaseModel.class);
        dataList.stream().forEach(map->{
            BaseModel baseModel=ListUtil.mapParseJavaBean(map,BaseModel.class);
            baseModel.setData(map);
            hostInfos.add(baseModel);
        });
        //List<BaseModel> hostInfos = (List<BaseModel>) dataList.stream().map(entity -> JSONUtil.toBean(JSONUtil.parseObj(entity), BaseModel.class)).collect(Collectors.toList());
        return hostInfos.toArray(new BaseModel[]{});
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyPanelFor410.java
@@ -388,4 +388,20 @@
    public void setCurrentCodeClassifyTemplateVO(CodeClassifyTemplateVO currentCodeClassifyTemplateVO) {
        this.currentCodeClassifyTemplateVO = currentCodeClassifyTemplateVO;
    }
    public CodeApplyFor410MainPanel getRightMainPanel() {
        return rightMainPanel;
    }
    public void setRightMainPanel(CodeApplyFor410MainPanel rightMainPanel) {
        this.rightMainPanel = rightMainPanel;
    }
    public TransmitTreeObject getTransmitTreeObject() {
        return transmitTreeObject;
    }
    public void setTransmitTreeObject(TransmitTreeObject transmitTreeObject) {
        this.transmitTreeObject = transmitTreeObject;
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeApplyPanelFor410ActionListener.java
@@ -1,12 +1,31 @@
package com.vci.ubcs.codeapply;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.vci.base.ui.swing.VCIOptionPane;
import com.vci.base.ui.swing.components.VCIJComboBox;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.dto.CodeOrderSecDTO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
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.codeapply.utils.HttpUtil;
import com.vci.ubcs.starter.web.pagemodel.KeyValue;
import org.apache.commons.collections4.CollectionUtils;
import javax.swing.*;
import javax.swing.text.JTextComponent;
import javax.swing.tree.TreePath;
import java.awt.event.ActionEvent;
import java.util.LinkedHashMap;
import java.util.*;
public class CodeApplyPanelFor410ActionListener extends CommonActionListener {
    private CodeApplyPanelFor410 owner = null;
    private LinkedHashMap<String, Runnable> actionMaps = new LinkedHashMap<String, Runnable>();
    boolean codeAlreadExist = false;
    private String url= ConfigUtils.getConfigValue("410.code.url","http://127.0.0.1:36014/codeApplySwingController");
    public CodeApplyPanelFor410ActionListener(CodeApplyPanelFor410 owner){
        this.owner = owner;
        this.initActionMap();
@@ -17,14 +36,16 @@
            //batchApply();//批量导入申请代码
        }});
        actionMaps.put("apply", new Runnable() { public void run() {
            //apply();//码值申请
            apply();//码值申请
        }});
        actionMaps.put("btnSearch", new Runnable() { public void run() {
            //search();//代码查询
            search();//代码查询
        }});
        actionMaps.put("clear", new Runnable() { public void run() {
        //    clear();//清空属性
            clear();//清空属性
        }});
    }
    @Override
@@ -34,4 +55,119 @@
            actionMaps.get(key).run();
        }
    }
    private void apply() {
        codeAlreadExist = false;
        if(null == this.owner.getTransmitTreeObject().getCurrentTreeNode()) {
            return;
        }
        CodeClassify codeClassify = (CodeClassify) this.owner.getTransmitTreeObject().getCurrentTreeNode().getObj();
        if(codeClassify == null || "".equals(codeClassify.getOid())){
            VCIOptionPane.showMessage(this.owner, "请选择编码项分类!");
            return;
        }
        CodeClassifyTemplateVO codeClassifyTemplateVO = this.owner.getCurrentCodeClassifyTemplateVO();
        if(codeClassifyTemplateVO!=null&&"".equals(codeClassifyTemplateVO.getOid())) {
            VCIOptionPane.showMessageDialog(this.owner, "代码项没有配置模板,不允许申请!");
            return;
        }
        CodeRuleVO codeRuleVO= this.owner.getRightMainPanel().getCodeRuleVO();
        /**选择的分类是否包含规则的校验**/
        if(codeRuleVO==null||"".equals(codeRuleVO.getOid())) {
            VCIOptionPane.showMessage(this.owner, "分类:" + codeClassify.getName() + " æ²¡æœ‰åŒ…含规则,无法申请!");
            return;
        }
        //校验规则是否填写合格
        if(!this.owner.getRightMainPanel().checkIsAllowed()) {
            return;
        }
        //  æ£€æŸ¥æ¨¡æ¿å„属性的输入值是否满足要求
        String[][] inputValues = this.owner.getRightMainPanel().checkInputValues();
        String[] fields = inputValues[0];
        String[] values = inputValues[1];
        String[] dataTypes = inputValues[2];
        String[] outNames = inputValues[3];
        Map<String,String> dataMap=new HashMap<>();
        for (int i=0;i<fields.length;i++){
            dataMap.put(fields[i],values[i]);
        }
        List<KeyValue> keyValueList= this.owner.getRightMainPanel().getSectionValues();
        if(CollectionUtils.isEmpty(keyValueList)){
            VCIOptionPane.showMessage(this.owner, "分类:" + codeClassify.getName() + " æ²¡æœ‰èŽ·å–è§„åˆ™ç æ®µé€‰æ‹©å€¼ä¿¡æ¯ï¼Œæ— æ³•ç”³è¯·ï¼");
            return;
        }
        CodeOrderDTO codeOrderDTO=new CodeOrderDTO();
        /**系统只加载代码项  å¦‚æžœlibName不为空,直接获取对应的代码项**/
        codeOrderDTO.setCodeClassifyOid(codeClassify.getOid());
        codeOrderDTO.setTemplateOid(codeClassifyTemplateVO.getOid());
        codeOrderDTO.setCodeRuleOid(codeRuleVO.getOid());
        List<CodeOrderSecDTO> secDTOList=new ArrayList<>();
        keyValueList.stream().forEach(keyValue -> {
            CodeOrderSecDTO codeOrderSecDTO=new CodeOrderSecDTO();
            codeOrderSecDTO.setSecOid(keyValue.getKey());
            codeOrderSecDTO.setSecValue(keyValue.getValue());
            secDTOList.add(codeOrderSecDTO);
        });
        codeOrderDTO.setSecDTOList(secDTOList);
        codeOrderDTO.setData(dataMap);
        Object object = JSONObject.toJSON(codeOrderDTO);
        Map<String,String> headerMap=new HashMap<>();
        headerMap.put("content-type","application/json");
        R r= HttpUtil.sendPost(url+"/addSaveCode",object.toString(),headerMap);
        String code="";
        if(r.isSuccess()){
            code=r.getData().toString();
            this.owner.setApplyCode(code);
        }else{
            VCIOptionPane.showMessage(this.owner,r.getMsg());
        }
    }
    /***
     * æ¸…空属性
     */
    private void clear(){
        CodeApplyFor410MainPanel rightMainPanel2 = this.owner.getRightMainPanel();
        LinkedHashMap<String, JComponent> attrInnerNameToCtrlMaps = rightMainPanel2.getAttrInnerNameToCtrlMaps();
        if(attrInnerNameToCtrlMaps!=null&&attrInnerNameToCtrlMaps.size()>0){
            attrInnerNameToCtrlMaps.forEach((key,component)->{
                if(component instanceof JTextComponent){
                    if(((JTextComponent) component).isEnabled())
                        ((JTextComponent) component).setText("");
                }else if(component instanceof VCIJComboBox){
                    if(((VCIJComboBox) component).isEnabled())
                        ((VCIJComboBox) component).setSelectedIndex(0);
                }
            });
        }
        String applyCode = this.owner.getApplyCode();
        if(StringUtils.isBlank(applyCode)) {
            this.owner.setApplyCode("");
        }
    }
    /**
     *
     * æŸ¥è¯¢ä»£ç 
     */
    private void search(){
        if(null == this.owner.getRightMainPanel().getTransTreeObject().getCurrentTreeNode()) {
            return;
        }
        CodeClassify rmType = (CodeClassify) this.owner.getRightMainPanel().getTransTreeObject().getCurrentTreeNode().getObj();
        if(rmType == null || "".equals(rmType.getId())){
            VCIOptionPane.showMessage(this.owner, "请选择代码项分类!");
            return;
        }
        CodeApplyFor410SearchDialog dialog = new CodeApplyFor410SearchDialog(this.owner);
        String str = dialog.getStr();
        if (!str.equals("")) {
            owner.applyTxt.setText(str);
        }
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/CodeDataMainPanel.java
@@ -46,9 +46,9 @@
    private VCIJPanel createCenterDataTablePanel() {
        tablePanel = new VCIJTablePanel<BaseModel>(dataProvider);
        //tablePanel.setCustomButtons(getCombinedButtons());
        tablePanel.setShowExport(true);
        //tablePanel.setShowExport(true);
        tablePanel.setShowPaging(true);
        tablePanel.setShowProgressBar(false);
        tablePanel.setShowProgressBar(true);
        tablePanel.setPageButtonFlowAlign(FlowLayout.CENTER);
        tablePanel.setCustomButtonFlowAlign(FlowLayout.CENTER);
        tablePanel.buildTablePanel();
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/RMDataReferTempDialog.java
@@ -25,7 +25,8 @@
public class RMDataReferTempDialog extends VCIJDialog {
    private CodeApplyFor410MainPanel owner;
    private CodeClassifyTemplateAttrVO codeClassifyTemplateAttr;
    //private CodeClassifyTemplateAttrVO codeClassifyTemplateAttr;
    private String referConfig="";
    private RMDataReferTempDialogActionListener actionListener = new RMDataReferTempDialogActionListener(this);
    private VCIJButton btnOk = VCISwingUtil.createVCIJButton("ok", "确定", "确定", "accept.png", actionListener);
    private VCIJButton btnCancel = VCISwingUtil.createVCIJButton("cancel", "取消", "取消", "cancel.png", actionListener);
@@ -35,10 +36,10 @@
    private VCIBaseTree leftTree = null;
    private VCIBaseTreeModel leftTreeModel = null;
    private KeyValue keyValue;
    public RMDataReferTempDialog(CodeApplyFor410MainPanel owner, CodeClassifyTemplateAttrVO codeClassifyTemplateAttr) {
    public RMDataReferTempDialog(CodeApplyFor410MainPanel owner, String  referConfig) {
        //super(true);
        this.owner = owner;
        this.codeClassifyTemplateAttr = codeClassifyTemplateAttr;
        this.referConfig = referConfig;
        init();
        setTitle("引用模板-属性选择");
        //initDialogSize(rmDataAddDialog.getWidth(), rmDataAddDialog.getHeight());
@@ -69,8 +70,8 @@
    private VCIJPanel createRMDataMainPanel(){
        VCIJPanel rmDataTablePanel = new VCIJPanel(new BorderLayout());
        uiFormRefer=new UIFormRefer();
        if(StringUtils.isNotBlank(codeClassifyTemplateAttr.getReferConfig())){
            uiFormRefer = JSONObject.toJavaObject(JSONObject.parseObject(codeClassifyTemplateAttr.getReferConfig().toString()), UIFormRefer.class);
        if(StringUtils.isNotBlank(referConfig)){
            uiFormRefer = JSONObject.toJavaObject(JSONObject.parseObject(referConfig.toString()), UIFormRefer.class);
        }
        if(uiFormRefer !=null&&(uiFormRefer.getType().equals(CodeReferConfigTypeEnum.TREE.getValue())
                ||uiFormRefer.getType().equals(CodeReferConfigTypeEnum.ORGDEPARTMENTREFER.getValue()))){
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/BaseModel.java
@@ -1,11 +1,12 @@
package com.vci.ubcs.codeapply.object;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.springframework.data.annotation.Transient;
import java.util.Date;
import java.util.Map;
@JsonIgnoreProperties
public class BaseModel {
    private String oid;
    private String id;
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/CodeDataObject.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,4 @@
package com.vci.ubcs.codeapply.object;
public class CodeDataObject {
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/object/DataGrid.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,115 @@
package com.vci.ubcs.codeapply.object;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class DataGrid<T> implements Serializable {
    private static final long serialVersionUID = -5909212697362510055L;
    private long total = 0L;
    private List<T> data = new ArrayList();
    private int start;
    private int limit;
    private int page;
    private String sort;
    private String order;
    private String msg;
    private int code = 0;
    private String traceId;
    public long getTotal() {
        return total;
    }
    public void setTotal(long total) {
        this.total = total;
    }
    public List<T> getData() {
        return data;
    }
    public void setData(List<T> data) {
        this.data = data;
    }
    public int getStart() {
        return start;
    }
    public void setStart(int start) {
        this.start = start;
    }
    public int getLimit() {
        return limit;
    }
    public void setLimit(int limit) {
        this.limit = limit;
    }
    public int getPage() {
        return page;
    }
    public void setPage(int page) {
        this.page = page;
    }
    public String getSort() {
        return sort;
    }
    public void setSort(String sort) {
        this.sort = sort;
    }
    public String getOrder() {
        return order;
    }
    public void setOrder(String order) {
        this.order = order;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getTraceId() {
        return traceId;
    }
    public void setTraceId(String traceId) {
        this.traceId = traceId;
    }
    @Override
    public String toString() {
        return "DataGrid{" +
            "total=" + total +
            ", data=" + data +
            ", start=" + start +
            ", limit=" + limit +
            ", page=" + page +
            ", sort='" + sort + '\'' +
            ", order='" + order + '\'' +
            ", msg='" + msg + '\'' +
            ", code=" + code +
            ", traceId='" + traceId + '\'' +
            '}';
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/utils/HttpUtil.java
@@ -7,6 +7,7 @@
import org.apache.commons.collections4.CollectionUtils;
import org.apache.http.*;
import org.apache.http.client.ClientProtocolException;
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;
@@ -173,7 +174,102 @@
        }
        return result;
    }
    /**
     * å‘送HttpPost请求,参数为map
     * @param url
     * @param jsonDataStr
     * @return
     */
    public static R sendPost(String url, String jsonDataStr,Map<String,String> headers) {
        R r=new R();
//        JsonObject formparams = new JsonObject();
//        for (Map.Entry<String, String> entry : map.entrySet()) {
//            formparams.add(entry.getKey(), entry.getValue();
//        }
        //json æ ¼å¼
        //UrlEncodedFormEntity entity = new UrlEncodedFormEntity(jsonDataStr, Consts.UTF_8);
//        System.out.println(jsonObject.toString());
        StringEntity entity = new StringEntity(jsonDataStr, Consts.UTF_8);
        HttpPost httppost = new HttpPost(url);
        /*
         * æ·»åŠ è¯·æ±‚å¤´ä¿¡æ¯
         */
        if(headers!=null&&headers.size()>0) {
            for (Map.Entry<String, String> entry : headers.entrySet()) {
                httppost.addHeader(entry.getKey(), entry.getValue());
            }
        }
        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, "UTF-8");
            // ä½¿ç”¨Apache提供的工具类进行转换成字符串
            if(StringUtils.isNotBlank(result)){
                r = JSONObject.toJavaObject(JSONObject.parseObject(result), R.class);
            }
        } catch (ParseException | IOException e) {
            e.printStackTrace();
        }
        return r;
    }
    /**
     * å‘送HttpPost请求,参数为map
     * @param url
     * @param map
     * @return
     */
    public static R sendPost(String url, Map<String,String> map,Map<String,String> headers) {
        R r=new R();
//        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);
        /*
         * æ·»åŠ è¯·æ±‚å¤´ä¿¡æ¯
         */
        if(headers!=null&&headers.size()>0) {
            for (Map.Entry<String, String> entry : headers.entrySet()) {
                httppost.addHeader(entry.getKey(), entry.getValue());
            }
        }
        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(entity, "UTF-8");
            // ä½¿ç”¨Apache提供的工具类进行转换成字符串
            if(StringUtils.isNotBlank(result)){
                r = JSONObject.toJavaObject(JSONObject.parseObject(result), R.class);
            }
        } catch (ParseException | IOException e) {
            e.printStackTrace();
        }
        return r;
    }
    /**
     * å‘送HttpPost请求,参数为map
     * @param url
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/ubcs/codeapply/utils/ListUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,172 @@
package com.vci.ubcs.codeapply.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.util.StringUtils;
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
public class ListUtil {
    /**
     * targetList éœ€è¦å¤„理的list
     * targetClass ç›®æ ‡class
     * @return List å¤„理好的list
     */
    public static List listMapParseListObj(List targetList, Class targetClass){
        // å…ˆèŽ·å–è¯¥ç±»çš„ä»£ç†å¯¹è±¡
        Object obj = null;
        try {
            obj = targetClass.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        Field[] fields = targetClass.getDeclaredFields();
        // å°†list转为list对象
        for(int i = 0; i< targetList.size(); i++){
            Map map = (Map)targetList.get(i);                  // èŽ·å–æ¯ä¸ªlist里面每个map
            for (Field field : fields) {
                String fieldName = field.getName();
                if(fieldName.equals("data")){
                    try {
                        PropertyUtils.setProperty(obj, fieldName, map);
                    }catch(Exception ex){
                    ex.printStackTrace();
                    }
                }else if (map.containsKey(fieldName.toUpperCase(Locale.ROOT))||map.containsKey(fieldName.toLowerCase(Locale.ROOT))) {
                    Object value="";
                    if (map.containsKey(fieldName.toUpperCase(Locale.ROOT))) {
                        value = map.get(fieldName.toUpperCase());
                    }else if(map.containsKey(fieldName.toLowerCase(Locale.ROOT))){
                        value = map.get(fieldName.toLowerCase());
                    }
                    try{
                        //取得值的类形
                        Class type = PropertyUtils.getPropertyType(obj, fieldName);
                        if(!StringUtils.isEmpty(type)){
                            PropertyUtils.setProperty(obj, fieldName,convert(value, type));
                        }
                    }catch(Exception ex){
                        ex.printStackTrace();
                    }
                }
            }
        }
        // å°†list<Map> è½¬ä¸ºå¯¹è±¡è¿›è¡Œè¿”回
        List resListObj = Lists.newArrayList();
        for (Object object : targetList) {
            JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(object));
            resListObj.add(jsonObject.toJavaObject((Type)targetClass));
        }
        //返回封装好的集合
        return resListObj;
    }
    /**
     * targetList éœ€è¦å¤„理的list
     * targetClass ç›®æ ‡class
     * @return List å¤„理好的list
     */
    public static <T> T mapParseJavaBean(Map map, Class targetClass){
        // å…ˆèŽ·å–è¯¥ç±»çš„ä»£ç†å¯¹è±¡
        Object obj = null;
        try {
            obj = targetClass.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        Field[] fields = targetClass.getDeclaredFields();
        // å°†list转为list对象
            for (Field field : fields) {
                String fieldName = field.getName();
                if(fieldName.equals("data")){
                    try {
                        PropertyUtils.setProperty(obj, fieldName, map);
                    }catch(Exception ex){
                        ex.printStackTrace();
                    }
                }else if (map.containsKey(fieldName.toUpperCase(Locale.ROOT))||map.containsKey(fieldName.toLowerCase(Locale.ROOT))) {
                    Object value="";
                    if (map.containsKey(fieldName.toUpperCase(Locale.ROOT))) {
                        value = map.get(fieldName.toUpperCase());
                    }else if(map.containsKey(fieldName.toLowerCase(Locale.ROOT))){
                        value = map.get(fieldName.toLowerCase());
                    }
                    try{
                        //取得值的类形
                        Class type = PropertyUtils.getPropertyType(obj, fieldName);
                        if(!StringUtils.isEmpty(type)){
                            PropertyUtils.setProperty(obj, fieldName,convert(value, type));
                        }
                    }catch(Exception ex){
                        ex.printStackTrace();
                    }
                }
            }
            /*// å°†list<Map> è½¬ä¸ºå¯¹è±¡è¿›è¡Œè¿”回
            List resListObj = Lists.newArrayList();
            JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(obj));
            resListObj.add(jsonObject.toJavaObject((Type)targetClass));*/
        //返回封装好的集合
        return (T) obj;
    }
    public static Object convert(Object value, Class clazz){
        if (value == null) { // å¦‚果获取参数值为null,则返回null
            return null;
        } else if (!value.equals("")) { // å¦‚果获取参数值不为"",则通过convertGt方法进行类型转换后返回结果
            return convertGt(value, clazz);
        } else if (clazz.getName().equals(String.class.getName())) { // å¦‚果获取参数值为""
            return convertGt(value, clazz);
        } else {// å¦‚果获取参数值为"",并且clazz不是是String类型,则返回null
            return null;
        }
    }
    /**
     * @param value
     * @param clazz
     * @return
     */
    @SuppressWarnings("unchecked")
    public static Object convertGt(Object value, Class clazz) {
        if (value == null) { // å¦‚果值为null,则返回null
            return null;
        } else if (value.equals("")&& !clazz.getName().equals(String.class.getName())) { // å¦‚æžœvalue值为"",而且要转为的类型不是string类型,那么就统一返回null,也就是空字符串不能转成任何其他类型的实体,只能返回null
                return null;
            } else if (Date.class.getName().equalsIgnoreCase(clazz.getName())) { // å¢žåŠ å¯¹ä»ŽString类型到Date
                return convertSTD(value.toString());
            }
            return ConvertUtils.convert(value, clazz);
        }
    //日期类型的转换
    private static SimpleDateFormat simpleDateFormate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public static Date convertSTD(String date){
        try {
            return simpleDateFormate.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
        }
    public static String convertDTS(Date date){
        return simpleDateFormate.format(date);
    }
}
Source/UBCS/ubcs-codeApply/src/main/resources/properties/conf.properties
@@ -20,6 +20,6 @@
#PDM????????????????????????????????????????#??
410.PDM.LibCodeName=\u7269\u54c1\#\u9644\u5f55
#code ????
410.code.url=http://127.0.0.1:36014/codeApplySwingController
410.code.url=http://127.0.0.1:37000/ubcs-code/codeApplySwingController
Source/UBCS/ubcs-codeApply/src/test/java/tt.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
{
  "tenant_id": "986926",
  "xinghaoguige": "",
  "lastmodifier": "",
  "secondfl": "",
  "codetemplateoid": "c59e6ff9d7a30ddbe4a776d6eb534d54",
  "description": "",
  "oid": "1681250544175419392",
  "shifoupihaoguanli": "true",
  "thrifl": "",
  "firstfl": "",
  "jiliangdwname": "",
  "xinghaoguigeText": "null",
  "materialtype": "1001-01-01",
  "materialtypeText": "1001-01-01",
  "chukufangshi": "",
  "morengongysname": "",
  "hesuanfenlei": "",
  "lcstatus_text": "已发布",
  "oldcode": "",
  "id": "A001001200000000XJ7E1C92A2-9B6F-4DB3-48C7-F42D1304E36B8",
  "hesuanfenleiname": "",
  "codeclsfpath": "46B5DB5E-F783-DFE9-B48A-C4A367D02AC0##0C600A6A-6398-FC30-D13E-121201FDA908##1C7A2455-5831-1535-2A21-B4C1CC9C7C9D##D9CF223F-317D-71EB-BD11-433A94CAD9F3",
  "zuixiaoqiding": "",
  "owner": "-1",
  "xiaoshouwl": "false",
  "creator": "weidy",
  "createtime": "2023-07-18 18:32:20.513",
  "caigouwl": "true",
  "kucunwl": "true",
  "tuhao": "",
  "btmname": "wupin",
  "revisionvalue": "",
  "codeclsfid": "46B5DB5E-F783-DFE9-B48A-C4A367D02AC0",
  "name": "",
  "jiliangdw": "",
  "materialclassify": "",
  "lastmodifytime": "2023-07-199",
  "morengongys": "",
  "lcstatus": "Released",
  "rn": "1",
  "ts": "2023-07-18 18:32:20.513",
  "lastmodifytimeText": "2023-07-199"
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/DockingSystemConfig.java
@@ -101,6 +101,12 @@
    @ApiModelProperty(value = "接口类型显示文本")
    @TableField(exist = false)
    private String interfaceTypeText;
    @Override
    public String getFirstR() {
        return super.getFirstR();
    }
    /**
     * å‚数类型
     */
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/ComponentRule.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.vci.ubcs.code.vo;
import java.util.Map;
public class ComponentRule {
    private Map<String,String> dataMap;
    private  String componentRuleValue;
    public Map<String, String> getDataMap() {
        return dataMap;
    }
    public void setDataMap(Map<String, String> dataMap) {
        this.dataMap = dataMap;
    }
    public String getComponentRuleValue() {
        return componentRuleValue;
    }
    public void setComponentRuleValue(String componentRuleValue) {
        this.componentRuleValue = componentRuleValue;
    }
    @Override
    public String toString() {
        return "ComponentRule{" +
            "dataMap=" + dataMap +
            ", componentRuleValue='" + componentRuleValue + '\'' +
            '}';
    }
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/MdmUIInfoVO.java
@@ -1,7 +1,5 @@
package com.vci.ubcs.code.vo.pagemodel;
import com.vci.ubcs.flow.core.vo.ProcessStageAttrVO;
import java.util.List;
public class MdmUIInfoVO implements java.io.Serializable {
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
@@ -37,8 +37,6 @@
import java.math.BigInteger;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -1371,9 +1369,14 @@
//                        String sqlField = camelToUnderscore(key);
                        if (map.containsKey(key.toUpperCase())) {
                        if (map.containsKey(key.toUpperCase(Locale.ROOT))||map.containsKey(key.toLowerCase(Locale.ROOT))) {
                            try {
                                Object value = map.get(key.toUpperCase());
                                Object value="";
                                if (map.containsKey(key.toUpperCase(Locale.ROOT))) {
                                    value = map.get(key.toUpperCase());
                                }else if(map.containsKey(key.toLowerCase(Locale.ROOT))){
                                    value = map.get(key.toLowerCase());
                                }
                                // å¾—到property对应的setter方法
                                Method setter = property.getWriteMethod();
                                Class<?> type = property.getPropertyType();
@@ -1395,6 +1398,7 @@
        return beanList;
}
    public static String camelToUnderscore(String name) {
        if (name == null && name.length() <= 0) {
            return name;
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySwingController.java
@@ -1,29 +1,34 @@
package com.vci.ubcs.code.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.entity.CodeClassify;
import com.vci.ubcs.code.enumpack.CodeClassifyProcessUseEnum;
import com.vci.ubcs.code.service.ICodeClassifyService;
import com.vci.ubcs.code.service.ICodeClassifyTemplateAttrService;
import com.vci.ubcs.code.service.ICodeClassifyValueService;
import com.vci.ubcs.code.service.MdmEngineService;
import com.vci.ubcs.code.service.impl.FormulaServiceImpl;
import com.vci.ubcs.code.vo.ComponentRule;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyValueVO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.starter.annotation.VciBusinessLog;
import com.vci.ubcs.starter.revision.model.BaseModel;
import com.vci.ubcs.starter.revision.model.TreeQueryObject;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.starter.web.pagemodel.KeyValue;
import com.vci.ubcs.starter.web.pagemodel.Tree;
import com.vci.ubcs.starter.web.pagemodel.UIFormReferVO;
import com.vci.ubcs.starter.web.pagemodel.*;
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
 * ä¸»é¢˜åº“定义表 æŽ§åˆ¶å™¨
@@ -53,6 +58,12 @@
     * åˆ†ç±»ç æ®µæœåŠ¡
     */
    private final ICodeClassifyValueService codeClassifyValueService;
    /**
     * å…¬å¼çš„æœåŠ¡
     */
    @Autowired
    private FormulaServiceImpl formulaService;
    /**
     * èŽ·å–åº“èŠ‚ç‚¹ä¿¡æ¯
     * @param libName åº“节点名称
@@ -169,4 +180,54 @@
        return R.data(iPage);
    }
    /**
     * èŽ·å–å±žæ€§ç»„åˆè§„åˆ™çš„å€¼
     * @param componentRule å‚照的配置信息
     * @param componentRule ç»„合规则
     * @return æ‰§è¡Œçš„结果
     */
    @GetMapping("/getValueByFormula")
    public R<String> getValueByFormula(ComponentRule componentRule){
        String value = formulaService.getValueByFormula(componentRule.getDataMap(),componentRule.getComponentRuleValue());
        return R.data(value);
    }
    /**
     * ä½¿ç”¨åˆ†ç±»èŽ·å–å¯¹åº”çš„æ•°æ®
     * @param codeClassifyOid åˆ†ç±»çš„主键
     * @param templateOid æ¨¡æ¿çš„主键
     * @param queryObject åŸºç¡€æŸ¥è¯¢å¯¹è±¡
     * @return æ•°æ®çš„信息(包含下级分类)
     */
    @GetMapping("/gridTableDataByClassifyOid")
    @VciBusinessLog(operateName = "查询主题库分类的数据")
    public R<DataGrid<Map<String,String>>> gridTableDataByClassifyOid(String codeClassifyOid, String templateOid, BaseQueryObject queryObject){
        //TODO后续可以定义查询模板来查询
        return R.data(mdmEngineService.gridTableDataByClassifyOid(codeClassifyOid,templateOid,queryObject.getConditionMap(),queryObject.getPageHelper()));
    }
    /***
     *统计子节点的个数
     * @param parentId çˆ¶èŠ‚ç‚¹oid
     * @return
     */
    @GetMapping("/countChildrenByClassifyOid")
    @VciBusinessLog(operateName = "统计子节点的个数")
    public R<Integer> countChildrenByClassifyOid(String parentId){
         int count=    this.codeClassifyService.countChildrenByClassifyOid(parentId);
         return R.data(count);
    }
    /**
     * ç”³è¯·ç¼–码保存
     * @param orderDTO ç¼–码申请相关的信息,需要有属性和码段相关的信息
     * @return æ‰§è¡Œç»“æžœ
     */
    @PostMapping("/addSaveCode")
    @VciBusinessLog(operateName = "申请单个编码")
    public R addSaveCode(@RequestBody CodeOrderDTO orderDTO) throws Exception {
        return R.success(mdmEngineService.addSaveCode(orderDTO));
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemConfigServiceImpl.java
@@ -164,9 +164,14 @@
        log.info(" å¢žåŠ ç³»ç»Ÿé›†æˆçš„æŽ¥å£ç®¡ç†ä¿¡æ¯:"+dockingSystemConfigDTO.toString());
        VciBaseUtil.alertNotNull(dockingSystemConfigDTO, "需要添加的数据对象");
        checkColumnNotNull(dockingSystemConfigDTO);
        String sourcesystemoid = dockingSystemConfigDTO.getSourceSystemOid();
        DockingSystem dockingSystem = dockingSystemMapper.selectById(sourcesystemoid);
        dockingSystemConfigDTO.setSysBaseOid(sourcesystemoid);
        String systemOid ="";
        if(dockingSystemConfigDTO.getDataFlowType().equals(SysIntegrationDataFlowTypeEnum.ACCEPT.getValue())) {
            systemOid = dockingSystemConfigDTO.getTargetSystemOid();
        }else{
            systemOid = dockingSystemConfigDTO.getSourceSystemOid();
        }
        DockingSystem dockingSystem = dockingSystemMapper.selectById(systemOid);
        dockingSystemConfigDTO.setSysBaseOid(systemOid);
        dockingSystemConfigDTO.setSysBaseId(dockingSystem.getId());
        dockingSystemConfigDTO.setSysBaseName(dockingSystem.getName());
        dockingSystemConfigDTO.setUsedFlag("true");//设置默认启用状态
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/FormulaServiceImpl.java
@@ -709,7 +709,7 @@
            str = str.substring(2);
        }
        //需要替换系统变量
        Map<String, String> systemVarValueMap = VciSystemVarConstants.getSystemVarValueMap();
        Map<String, String> systemVarValueMap = new HashMap<>();//VciSystemVarConstants.getSystemVarValueMap();
        if(!CollectionUtils.isEmpty(systemVarValueMap)){
            final String[] finalStr = new String[]{str};
            systemVarValueMap.forEach((key,value)->{
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -187,6 +187,7 @@
            //参照的自行输入名称
            //分类注入的不用,都是导入后自动处理的
            //编码,状态等字段不导入
            if(!CollectionUtils.isEmpty(templateVO.getAttributes())) {
            List<CodeClassifyTemplateAttrVO> templateAttrVOS = templateVO.getAttributes().stream().filter(s ->
                !DEFAULT_ATTR_LIST.contains(s.getId())
                    && StringUtils.isBlank(s.getComponentRule())
@@ -219,6 +220,7 @@
                    allFieldToOutNameMap.put(name,codetemplateAttr);
                }
            });
            }
        });
        //整理好所有模板需要写入execl的属性信息
        Workbook workbook = new HSSFWorkbook();
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeClassifyTemplateMapper.xml
@@ -109,7 +109,7 @@
                                start with oid = #{classifyoid}
                            connect by prior oid = parentcodeclassifyoid) cls
                           on t.codeclassifyoid = cls.oid
        where t.lcstatus = #{templatelcstatus}
        where t.lastr=1 and t.lastv=1 and t.lcstatus = #{templatelcstatus}
          and cls.oid is not null
    </select>