田源
2025-01-09 8a166a60cfd1a2e593ffa103d10c0dc224fc8628
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
package com.vci.client.uif.actions.client;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
 
import javax.swing.JOptionPane;
 
import com.vci.client.bof.ClientBusinessObject;
import com.vci.client.bof.ClientBusinessObjectOperation;
import com.vci.client.bof.ClientLinkObject;
import com.vci.client.ui.swing.VCIOptionPane;
import com.vci.client.uif.engine.common.DefaultTableNode;
import com.vci.mw.ClientContextVariable;
 
/**
 * 升级版本操作
 * 参数信息:
 *     oid(升版对象的oid)
 *     btmname(升版对象的类型)
 *     name(升版对象的名称、用于显示信息)
 * @author VCI-STGK006
 *
 */
public class RevisionAction extends AbstractBatchBusionessOperationAction {
 
    /**
     * 方法集合
     */
    UIFUtils operation =
            new UIFUtils();
    
    private ClientBusinessObjectOperation boOperation = new ClientBusinessObjectOperation();
    
    public RevisionAction(){
        super();
    }
    
    @Override
    public String getKey() {
        return REVISION;
    }
 
    @Override
    public boolean checkHasRight(){
        // 按LBO进行数据权限检查
        setDataRightCheckType(RightCheckConstants.RIGHT_CHECK_TYPE_B);
        return super.checkHasRight();
    }
    
    @Override
    public boolean doPost() {
        //获得按钮参数,校验并设置默认值
        Map<String, String> params = getButtonParams();
        boolean direction = true;//如果是link是,是对from还是to进行升版
        boolean copyLink = false;//是否复制链接
        String linkType = "";//复制链接的名称
        String linkdirection = "to"; 
        if(params.containsKey("direction") 
                && params.get("direction").trim().equalsIgnoreCase("false")) {
            direction = false;
        }
        if(params.containsKey("copylink") 
                && params.get("copylink").trim().equalsIgnoreCase("true")) {
            copyLink = true;
        }
        if(copyLink) {
            linkType = params.get("linktype");
            if(linkType == null || linkType.trim().equals("")) {
                UIFUtils.showMessage(ClientContextVariable.getFrame(),
                        "uifmodel.plm.uif.actions.syserror.configerror.paramserror", "linktype");
                return false;
            }
            if(params.containsKey("linkdirection")) {
                linkdirection = params.get("linkdirection").trim();
                if(!linkdirection.equalsIgnoreCase("from") 
                        && !linkdirection.equalsIgnoreCase("to")
                        && !linkdirection.equalsIgnoreCase("all")) {
                    UIFUtils.showMessage(ClientContextVariable.getFrame(),
                            "uifmodel.plm.uif.actions.syserror.configerror.paramserror", "linkdirection");
                    return false;
                }
            }
        }
        //获得业务对象数据
        Object[] objs = getDataModel().getSelectObjects();
        if(objs == null || objs.length < 1){
            return false;
        }
        
        List<ClientBusinessObject> cboList = new ArrayList<ClientBusinessObject>();
        for(int i = 0; i < objs.length; i++){
            DefaultTableNode dtn = (DefaultTableNode) objs[i];
            try {
                //判断主对象类型
                if(dtn.getMaterObject() instanceof ClientBusinessObject){
                    //如果是业务类型
                    ClientBusinessObject tempCbo = (ClientBusinessObject) dtn.getMaterObject();
                    String oid = tempCbo.getBusinessObject().oid;
                    String btmName = tempCbo.getBusinessObject().btName;
                    String name = tempCbo.getBusinessObject().name;
                    if(name == null || name.equals("")){
                        name = "选择的第" + (i + 1) + "行数据";
                    }
                    ClientBusinessObject cbo = boOperation.readBusinessObjectById(oid, btmName);
                    if(cbo == null){
                        int confirm = VCIOptionPane.showConfirmDialog(ClientContextVariable.getFrame(), ""
                                    + name
                                    + "不存在或者已经被删除,继续执行升版操作系统将会忽略该对象"
                                    +".\n是否继续执行升版操作?", "系统提示",JOptionPane.YES_NO_OPTION);
                        if(confirm == JOptionPane.NO_OPTION || objs.length == 1){
                            return false;
                        } 
                    }
                    cboList.add(cbo);
                } else if (dtn.getMaterObject() instanceof ClientLinkObject){
                    //如果是link类型
                    ClientLinkObject tempLink = (ClientLinkObject) dtn.getMaterObject();
                    String oid = "";
                    String btmName = "";
                    String name = "";
                    if (direction) {
                        oid = tempLink.getLinkObject().toOid;
                        btmName = tempLink.getLinkObject().toBTName;
                        name = dtn.getValueMap().get("t_oid.name");
                    } else {
                        oid = tempLink.getLinkObject().fromOid;
                        btmName = tempLink.getLinkObject().fromBTName;
                        name = dtn.getValueMap().get("f_oid.name");
                    }
                    if(name == null || name.equals("")){
                        name = "选择的第" + (i + 1) + "行数据";
                    }
                    //如果操作所需参数不存在则直接停止操作
                    //正常的数据不会出现这种情况
                    if(oid == null || oid.equals("") ||btmName == null || btmName.equals("")){
                        UIFUtils.showMessage(ClientContextVariable.getFrame(),
                                "uifmodel.plm.uif.actions.syserror.parmerror.bo", "");
                        return false;
                    }
                    //需要重新下载cbo对象
                    ClientBusinessObject cbo = boOperation.readBusinessObjectById(oid, btmName);
                    //对象不存在或者已经被删除
                    if(cbo == null || cbo.getBusinessObject().oid == null
                            || cbo.getBusinessObject().oid.equals("")){
                        int confirm = VCIOptionPane.showConfirmDialog(ClientContextVariable.getFrame(), "" 
                                + name
                                + "不存在或者已经被删除,继续执行升版操作系统将会忽略该对象"
                                +".\n是否继续执行升版操作?", "系统提示",JOptionPane.YES_NO_OPTION);
                        if(confirm == JOptionPane.NO_OPTION || objs.length == 1){
                            return false;
                        } 
                    } else {
                        cboList.add(cbo);
                    }                    
                }
                
            } catch (Exception e){
                UIFUtils.showErrorMessage(
                ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.editboerror", e);
                int confirm = VCIOptionPane.showConfirmDialog(ClientContextVariable.getFrame(),
                        "系统在加载对象时发生异常,升级版本操作可能会失败\n是否继续执行升级版本操作?",
                        "系统提示",JOptionPane.YES_NO_OPTION);
                if(confirm == JOptionPane.NO_OPTION){
                    return false;
                }                
            }
        }
 
        //得到需要升版的业务对象 当为多个时 有升级成功的就算成功
        boolean success = false;
        try {
            if(!cboList.isEmpty()){
                batchRevisonBusinessObject(cboList, copyLink, linkType, linkdirection);
                success = true;
            }
            if(success){
                UIFUtils.showMessage(ClientContextVariable.getFrame(), 
                        "uifmodel.plm.uif.actions.revisionsuccessmsg");
            }
        } catch (Exception e) {
            UIFUtils.showErrorMessage(ClientContextVariable.getFrame(), e);
        }
        return success;
    }
    
    /**
     * 升级版本
     * @param cboList 待升版对象
     * @param linkTypes 复制link的类型
     * @param copyLink 是否复制link
     * @param linkdirection 复制哪端的link
     * @throws Exception
     */
    private void batchRevisonBusinessObject(List<ClientBusinessObject> cboList,
            boolean copyLink, String linkTypes, String linkdirection) throws Exception {
        if(copyLink) {
            String[] linkType = linkTypes.split(",");
            boolean isRev = true;
            boolean isSave = true;
            boolean isFromLinkCopy = false;
            boolean isToLinkCopy = false;
            if(linkdirection.equalsIgnoreCase("to")) {
                isFromLinkCopy = true;
            } else if (linkdirection.equalsIgnoreCase("from")) {
                isToLinkCopy = true;
            } else if (linkdirection.equalsIgnoreCase("all")) {
                isFromLinkCopy = true;
                isToLinkCopy = true;
            }
            for(ClientBusinessObject cbo : cboList) {
                boOperation.revisionBusinessObject(
                        cbo, linkType, isRev, isSave, isFromLinkCopy, isToLinkCopy);
            }
        } else {
            //获得OID列表
            String[] oids = new String[cboList.size()];
            String btmName = "";
            for(int i = 0; i < cboList.size(); i++) {
                ClientBusinessObject cbo = cboList.get(i);
                if(btmName.equals("")) {
                    btmName = cbo.getBusinessObject().btName;
                }
                oids[i] = cbo.getBusinessObject().oid;
            }
            boOperation.batchRevisonBusinessObject(oids, btmName);
        }
    }
}