package com.vci.server.bof.server.transfer; import com.vci.corba.common.data.VCIInvocationInfo; import com.vci.corba.omd.data.BusinessObject; import com.vci.corba.omd.lcm.LifeCycle; import com.vci.corba.omd.lcm.TransitionVO; import com.vci.server.base.persistence.dao.HibernateSessionFactory; import com.vci.server.base.utility.LogRecordUtil; import com.vci.server.base.utility.ServerServiceProvider; import com.vci.server.bof.server.ServiceFacadeExecuteHelper; import com.vci.server.bof.service.BOFactoryServices; import com.vci.server.cache.OMCacheProvider; import java.util.Map; import java.util.HashMap; import com.vci.corba.common.VCIError; public class BatchTransferBO extends ServiceFacadeExecuteHelper { private static ServiceFacadeExecuteHelper instance = null; public static ServiceFacadeExecuteHelper getInstance() { if (instance == null) { instance = new BatchTransferBO(); } return instance; } @Override protected Object doAction() throws Throwable { boolean rs = false; BusinessObject[] bos = params.getBos(); TransitionVO[] vos = params.getVos(); Map mapLifeCycle = new HashMap(); try { for (int i = 0; i < bos.length; i++) { TransitionVO vo2 = null; String boLcStatus = bos[i].lcStatus; if (boLcStatus == null || boLcStatus == "") { throw getLocalString("", new VCIError("P0010SOF-00023", new String[] { bos[i].name })); // throw getLocalString("", new // VCIError("当前所选的业务对象\"{0}\"的生命周期状态值为空,不用有效执行跃迁操作。",new // String[]{bos[i].name})); } LifeCycle curLC = null; if (mapLifeCycle.containsKey(bos[i].lctId)) curLC = mapLifeCycle.get(bos[i].lctId); else { curLC = OMCacheProvider.getLifeCycle(bos[i].lctId); mapLifeCycle.put(curLC.id, curLC); } if (curLC == null) { // TODO:提示出来 throw getLocalString("", new VCIError("P0010SOF-00024", new String[] { bos[i].name })); } if (!vos[i].destination.equals("") && !vos[i].connect.equals("")) { for (int l = 0; l < curLC.routes.length; ++l) { TransitionVO route = curLC.routes[l]; if (route.source.equals(boLcStatus)) { if (vos[i].destination.equals(route.destination) && vos[i].connect.equals(route.connect)) { vo2 = route; break; } } } if (vo2 == null) { throw getLocalString("", new VCIError("P0010SOF-00027", new String[] { vos[i].destination })); } } else if (!vos[i].destination.equals("")) { for (int l = 0; l < curLC.routes.length; ++l) { TransitionVO route = curLC.routes[l]; if (route.source.equals(boLcStatus)) { if (vos[i].destination.equals(route.destination)) { vo2 = route; break; } } } if (vo2 == null) { throw getLocalString("", new VCIError("P0010SOF-00027", new String[] { vos[i].destination })); } } else if (!vos[i].connect.equals("")) { for (int l = 0; l < curLC.routes.length; ++l) { TransitionVO route = curLC.routes[l]; if (route.source.equals(boLcStatus)) { if (vos[i].connect.equals(route.connect)) { vo2 = route; break; } } } if (vo2 == null) { throw getLocalString("", new VCIError("P0010SOF-00025", new String[] { vos[i].connect })); } } else { throw getLocalString("", new VCIError("P0010SOF-00026", new String[] {})); } // 执行跃迁事件 TransitionEventsExcuter excuter = new TransitionEventsExcuter(); excuter.excute(vo2, bos[i]); } BOFactoryServices services = BOFactoryServices.getInstance(); rs = services.batchTransferBusinessObject(bos, vos, params.getReleaseStatuss()); if (!rs) { return rs; } // 日志记录 // VCIInvocationInfo info = HibernateSessionFactory.getVciSessionInfo(); // String ip = "127.0.0.1"; // if (info != null) { // ip = info.clientIPInfo == null || "".equals(info.clientIPInfo) ? "127.0.0.1" : info.clientIPInfo; // } //batchRecordLog(bos, ip, "跃迁"); LogRecordUtil.batchWriteLog(bos, "跃迁"); } catch (Exception e) { e.printStackTrace(); throw this.getLocalString("P0010SOF-00008", e); } catch (Throwable t) { t.printStackTrace(); throw this.getLocalString("P0010SOF-00008", t); } return rs; } }