package com.vci.event.mpm; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.vci.common.objects.UserEntity; import com.vci.common.qt.object.Condition; import com.vci.common.qt.object.QueryTemplate; import com.vci.corba.bofactory.BOFactoryServicePrx; import com.vci.corba.common.VCIError; import com.vci.corba.omd.data.BusinessObject; import com.vci.corba.query.ObjectQueryServicePrx; import com.vci.corba.query.data.BOAndLO; import com.vci.omd.constants.BusinessConstants; import com.vci.omd.utils.ObjectTool; import com.vci.server.base.utility.OQueryHelper; import com.vci.server.base.utility.ServerServiceProvider; public class StatusListener { private String status =""; //要修改的状�? private String statusSelf =""; //父状�? private String creatorUser = ""; // 父创建人 private BusinessObject bso = null; public void doAction(UserEntity user,String status,String[] oid,String type,String linkType) { if (linkType == null || linkType.equals("")) { linkType = "EBOM"; } this.status = status; try { BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService(); BusinessObject[] bos = getBusinessObjectbyByRefTypeAndOid(oid, type); if (bos != null) { //只有业务对象为part,product才需要父子状态提升�? if (!type.equals("part") && !type.equals("product")) { for(int i = 0; i < bos.length; i++){ BusinessObject businessObject = bos[i]; ObjectTool.setBOAttributeValue(businessObject, BusinessConstants.SELECT_LCSTATUS.toLowerCase(), status); } // BusinessObjectListHolder bosh = new BusinessObjectListHolder(); // bosh.value = bos; bofService.batchUpdateBusinessObject(bos); }else { for(int i = 0; i < bos.length; i++){ List list = new ArrayList(); BusinessObject businessObject = bos[i]; statusSelf = businessObject.lcStatus; creatorUser = businessObject.creator; this.bso = businessObject; list = fetchAllPbomLinks(businessObject.oid, linkType.toUpperCase(), list); // BusinessObjectListHolder bosh = new BusinessObjectListHolder(); // bosh.value = list.toArray(new BusinessObject[0]); bofService.batchUpdateBusinessObject(list.toArray(new BusinessObject[0])); } } } } catch (VCIError e) { e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private List fetchAllPbomLinks(String fromOid, String linkType, List boList) throws Exception { BOAndLO[] searchLinks = searchLOAddBO(linkType, fromOid, true); if(searchLinks != null && searchLinks.length > 0){ for(BOAndLO boAddLo : searchLinks){ BusinessObject bo = boAddLo.bo; //父子状�?是否�?�� boolean res = booolStatus(statusSelf,bo.lcStatus); //创建人是否是同一个人 if (creatorUser.equals(bo.creator)) { if (res) { //父子状�?相同, �?��提升 ObjectTool.setBOAttributeValue(bo, BusinessConstants.SELECT_LCSTATUS.toLowerCase(), status); ObjectTool.setBOAttributeValue(this.bso, BusinessConstants.SELECT_LCSTATUS.toLowerCase(), status); }else { //提升父,不提升子 ObjectTool.setBOAttributeValue(this.bso, BusinessConstants.SELECT_LCSTATUS.toLowerCase(), status); } }else { //创建人不�?�� //父子状�?�?��,不提升,子大于父,提升父,不提升�? if (!res) { ObjectTool.setBOAttributeValue(this.bso, BusinessConstants.SELECT_LCSTATUS.toLowerCase(), status); } } boList.add(bo); //查询子节�? fetchAllPbomLinks(bo.oid, linkType, boList); } }else{ ObjectTool.setBOAttributeValue(this.bso, BusinessConstants.SELECT_LCSTATUS.toLowerCase(), status); } if (!boList.contains(this.bso)) { boList.add(this.bso); } return boList; } /** * 判断父子状�?是否�?��提升 *

Description:

* @author heyj * @time 2014-4-4 * @param status1 父状�? * @param status2 子状�? * @return */ public boolean booolStatus(String status1,String status2){ boolean res = false; Map map = getStatusMap(); int a = map.get(status1.toLowerCase()); //父状�? int b = map.get(status2.toLowerCase()); //子状�? //子状态大于父状�? if (a < b) { res = false; //子状态与父状态一�? }else if(a == b){ res = true; } return res; } /** * 封转状�?,用来比较大�? *

Description:

* @author heyj * @time 2014-4-4 * @return */ public Map getStatusMap(){ Map map = new HashMap(); map.put("working", 1); map.put("auditing", 2); map.put("release", 3); return map; } private BOAndLO[] searchLOAddBO(String lintype,String fromOrToOid ,boolean direction) throws VCIError{ QueryTemplate qt2 = new QueryTemplate(); qt2.setId("ltQuery"); qt2.setLinkType(lintype); qt2.setType("link"); qt2.setBtmType("part"); List clauseList = new ArrayList(); clauseList.add("*"); qt2.setClauseList(clauseList); Map conditions = new HashMap(); if(direction){ qt2.setDirection("positive"); conditions.put("f_oid", fromOrToOid); }else{ qt2.setDirection("opposite"); conditions.put("t_oid", fromOrToOid); } Condition cond = OQueryHelper.getCondition(conditions); qt2.setCondition(cond); //QtServiceDelegate delegate = QtServiceDelegate.getInstance(); ObjectQueryServicePrx oqService = ServerServiceProvider.getOQService(); BOAndLO[] loaddbo = oqService.getBOAndLOS(qt2.getId(), OQueryHelper.getQTTextByQT(qt2),""); return loaddbo; } /** * 得到要修改的业务对象 *

Description:

* @author heyj * @time 2014-4-3 * @param type * @param conditionMap * @return */ private BusinessObject[] getBusinessObjectbyByRefTypeAndOid(final String[] oid,final String type){ BusinessObject[] bos = null; try { QueryTemplate qt2 = new QueryTemplate(); qt2.setId("btmQuery"); qt2.setBtmType(type); qt2.setType("btm"); qt2.setQueryChildrenFlag(true); List clauseList = new ArrayList(); clauseList.add("*"); qt2.setClauseList(clauseList); Map conditions = new HashMap(); String oidStr = ""; for (int i = 0; i < oid.length; i++) { oidStr += oid[i]; oidStr += "\\OR"; } oidStr = oidStr.substring(0, oidStr.lastIndexOf("\\OR")); conditions.put("oid", oidStr); Condition cond = OQueryHelper.getCondition(conditions); qt2.setCondition(cond); //QtServiceDelegate delegate = QtServiceDelegate.getInstance(); ObjectQueryServicePrx oqService = ServerServiceProvider.getOQService(); bos = oqService.findBTMObjects(qt2.getId(), OQueryHelper.getQTTextByQT(qt2)); } catch (VCIError e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } if (bos == null || bos.length <0) { return null; } return bos; } }