From ac3f3629a261770f573f27e5e23f7ec19d096c2a Mon Sep 17 00:00:00 2001
From: xiejun <xiejun@vci-tech.com>
Date: 星期三, 04 九月 2024 18:29:05 +0800
Subject: [PATCH] UI授权功能查询

---
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLifeCycleServiceImpl.java |  588 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 538 insertions(+), 50 deletions(-)

diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLifeCycleServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLifeCycleServiceImpl.java
index cd2fce1..26e995a 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLifeCycleServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLifeCycleServiceImpl.java
@@ -1,40 +1,49 @@
 package com.vci.web.service.impl;
 
-import com.vci.client.common.providers.ServiceProvider;
 import com.vci.corba.common.PLException;
+import com.vci.corba.omd.data.BusinessObject;
 import com.vci.corba.omd.lcm.Bound;
 import com.vci.corba.omd.lcm.LifeCycle;
 import com.vci.corba.omd.lcm.TransitionVO;
+import com.vci.corba.omd.lcm.TransitionVOEvent;
+import com.vci.dto.*;
+import com.vci.pagemodel.*;
+import com.vci.po.OsLifeCyclePO;
+import com.vci.starter.poi.bo.ReadExcelOption;
+import com.vci.starter.poi.bo.WriteExcelData;
+import com.vci.starter.poi.bo.WriteExcelOption;
+import com.vci.starter.poi.constant.ExcelLangCodeConstant;
+import com.vci.starter.poi.util.ExcelUtil;
 import com.vci.starter.web.annotation.log.VciUnLog;
 import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
 import com.vci.starter.web.pagemodel.DataGrid;
-import com.vci.starter.web.util.VciDateUtil;
-import com.vci.web.constant.CacheKeyConstant;
-import com.vci.web.model.OsLifeCycleDO;
-import com.vci.web.pageModel.*;
+import com.vci.starter.web.util.*;
+import com.vci.model.OsLifeCycleDO;
 import com.vci.web.service.OsLifeCycleServiceI;
 import com.vci.web.service.OsStatusServiceI;
 import com.vci.web.service.WebBoServiceI;
+import com.vci.web.util.Func;
 import com.vci.web.util.PlatformClientUtil;
 import com.vci.web.util.WebUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.util.HSSFColor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.cache.annotation.Cacheable;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import javax.swing.*;
+import java.io.File;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.vci.frameworkcore.constant.FrameWorkBusLangCodeConstant.DATA_ID_NOT_EXIST;
-import static com.vci.web.constant.CacheNameConstant.VCI_OBJECT_SERVICE;
-import static com.vci.web.constant.WebLangCodeConstant.LIFE_CYCLE_ROUTER_NULL;
-import static com.vci.web.constant.WebLangCodeConstant.LIFE_CYCLE_TRANS_ERROR;
+import static com.vci.constant.FrameWorkBusLangCodeConstant.DATA_ID_NOT_EXIST;
+import static com.vci.constant.WebLangCodeConstant.LIFE_CYCLE_ROUTER_NULL;
+import static com.vci.constant.WebLangCodeConstant.LIFE_CYCLE_TRANS_ERROR;
 
 /**
  * 鐢熷懡鍛ㄦ湡鏈嶅姟
@@ -70,6 +79,11 @@
 	private WebBoServiceI boService;
 
 	/**
+	 *  蹇呭~鍒�
+	 */
+	private List<Integer> ColumnNameisRed = new ArrayList<Integer>();
+
+	/**
 	 * 鏃ュ織
 	 */
 	private Logger logger = LoggerFactory.getLogger(getClass());
@@ -92,7 +106,7 @@
 	 * @throws VciBaseException 濡傛灉鐩爣鐢熷懡鍛ㄦ湡鍜屽綋鍓嶇敓鍛藉懆鏈熺姸鎬佹病鏈夎繛鎺ョ嚎鏃舵姏鍑哄紓甯�
 	 */
 	@Override
-	public void transStatus(com.vci.corba.omd.data.BusinessObject bo, String targetStatus)
+	public void transStatus(BusinessObject bo, String targetStatus)
 			throws VciBaseException {
 		WebUtil.alertNotNull(bo,"涓氬姟鏁版嵁瀵硅薄",bo.lctId,"鐢熷懡鍛ㄦ湡缂栫爜",bo.lcStatus,"褰撳墠鐢熷懡鍛ㄦ湡鐘舵��",targetStatus,"鐩爣鐢熷懡鍛ㄦ湡鐘舵��");
 		OsLifeCycleLineVO transVO = getTransVO(bo.lctId, bo.lcStatus, targetStatus);
@@ -113,7 +127,7 @@
 	 * @throws VciBaseException 杞崲鐢熷懡鍛ㄦ湡鍑洪敊鐨勬椂鍊欐姏鍑哄紓甯�
 	 */
 	@Override
-	public void transStatus(List<com.vci.corba.omd.data.BusinessObject> boList, String targetStatus)
+	public void transStatus(List<BusinessObject> boList, String targetStatus)
 			throws VciBaseException {
 		WebUtil.alertNotNull(boList,"涓氬姟鏁版嵁瀵硅薄",targetStatus,"鐩爣瀵硅薄");
 		transStatus(boList.toArray(new com.vci.corba.omd.data.BusinessObject[0]), targetStatus);
@@ -126,13 +140,13 @@
 	 * @throws VciBaseException 杞崲鐢熷懡鍛ㄦ湡鍑洪敊鐨勬椂鍊欐姏鍑哄紓甯�
 	 */
 	@Override
-	public void transStatus(com.vci.corba.omd.data.BusinessObject[] bos, String targetStatus)
+	public void transStatus(BusinessObject[] bos, String targetStatus)
 			throws VciBaseException {
 		WebUtil.alertNotNull(bos,"涓氬姟鏁版嵁瀵硅薄",targetStatus,"鐩爣瀵硅薄");
 		List<OsLifeCycleLineVO> transVOList = new ArrayList<>();
-		List<com.vci.corba.omd.data.BusinessObject> transBOs = new ArrayList<>();
+		List<BusinessObject> transBOs = new ArrayList<>();
 		for(int i = 0 ; i < bos.length ; i ++){
-			com.vci.corba.omd.data.BusinessObject bo = bos[i];
+			BusinessObject bo = bos[i];
 			WebUtil.alertNotNull(bo,"涓氬姟鏁版嵁瀵硅薄",bo.lctId,"鐢熷懡鍛ㄦ湡缂栫爜",bo.lcStatus,"褰撳墠鐢熷懡鍛ㄦ湡鐘舵��");
 			OsLifeCycleLineVO transVO = getTransVO(bo.lctId, bo.lcStatus, targetStatus);
 			if(transVO!=null){
@@ -145,7 +159,7 @@
 			}
 		}
 		if(!CollectionUtils.isEmpty(transBOs)) {
-			batchTransVo(transBOs.toArray(new com.vci.corba.omd.data.BusinessObject[0]), transVOList.toArray(new OsLifeCycleLineVO[0]));
+			batchTransVo(transBOs.toArray(new BusinessObject[0]), transVOList.toArray(new OsLifeCycleLineVO[0]));
 		}
 	}
 
@@ -156,12 +170,12 @@
 	 * @throws VciBaseException 杞崲鐢熷懡鍛ㄦ湡鍑洪敊鐨勬椂鍊欐姏鍑哄紓甯�
 	 */
 	@Override
-	public void transCboStatus(List<com.vci.client.bof.ClientBusinessObject> cboList,
+	public void transCboStatus(List<BusinessObject> cboList,
 			String targetStatus) throws VciBaseException {
 		WebUtil.alertNotNull(cboList,"涓氬姟鏁版嵁瀵硅薄",targetStatus,"鐩爣瀵硅薄");
-		com.vci.corba.omd.data.BusinessObject[] bos = new com.vci.corba.omd.data.BusinessObject[cboList.size()];
+		BusinessObject[] bos = new BusinessObject[cboList.size()];
 		for(int i = 0 ; i < cboList.size() ; i ++){
-			bos[i] = cboList.get(i).getBusinessObject();
+			bos[i] = cboList.get(i);
 		}
 		transStatus(bos, targetStatus);
 	}
@@ -218,8 +232,26 @@
 				e.printStackTrace();
 			}
 			life.setOid(lifeCycle.oid);
+			Bound[] bounds = lifeCycle.bounds;
+			if(bounds != null && bounds.length>0){
+				List<OsLifeCycleLineBoundVO> boundVOList = new ArrayList<>();
+				Arrays.stream(bounds).forEach(bound->{
+					OsLifeCycleLineBoundVO boundVO = new OsLifeCycleLineBoundVO();
+					boundVO.setId(bound.id);
+					boundVO.setName(bound.name);
+					boundVO.setCellx(bound.cellx);
+					boundVO.setCelly(bound.celly);
+					boundVO.setCellh(bound.cellh);
+					boundVO.setCellw(bound.cellw);
+					boundVO.setCellicon(bound.cellicon);
+					boundVOList.add(boundVO);
+				});
+				life.setBounds(boundVOList.toArray(new OsLifeCycleLineBoundVO[boundVOList.size()]));
+			}else{
+				life.setBounds(new OsLifeCycleLineBoundVO[0]);
+			}
 			List<OsLifeCycleLineVO> lineVOS = new ArrayList<>();
-			if(lifeCycle.routes!=null&& lifeCycle.routes.length>0){
+			if(lifeCycle.routes!=null && lifeCycle.routes.length>0){
 				Arrays.stream(lifeCycle.routes).forEach(route->{
 					OsLifeCycleLineVO lineVO = new OsLifeCycleLineVO();
 					lineVO.setSourceLifeStatus(route.source);
@@ -263,16 +295,17 @@
 	 * @return 鏁版嵁瀵硅薄
 	 */
 	@Override
-	public LifeCycle lifeCycleVO2DO(OsLifeCycleVO lifeCycleVO){
+	public LifeCycle lifeCycleVO2DO(OsLifeCycleVO lifeCycleVO) throws PLException {
 		LifeCycle lifeCyle = new LifeCycle();
 		lifeCyle.name = lifeCycleVO.getId();
 		lifeCyle.tag = lifeCycleVO.getName();
 		lifeCyle.oid = lifeCycleVO.getOid();
-		lifeCyle.creator = lifeCycleVO.getCreator();
+		String userId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
+		lifeCyle.creator = Func.isBlank(lifeCycleVO.getCreator()) ? userId:lifeCycleVO.getCreator();
 		lifeCyle.description = lifeCycleVO.getDescription();
-		lifeCyle.modifier = lifeCycleVO.getLastModifier();
-		lifeCyle.modifyTime = lifeCycleVO.getLastModifyTime() != null ? lifeCycleVO.getLastModifyTime().getTime():null;
-		lifeCyle.createTime = lifeCycleVO.getCreateTime() != null ? lifeCycleVO.getCreateTime().getTime():null;
+		lifeCyle.modifier = Func.isBlank(lifeCycleVO.getLastModifier()) ? userId:lifeCycleVO.getLastModifier();
+		lifeCyle.modifyTime = System.currentTimeMillis();
+		lifeCyle.createTime = lifeCycleVO.getCreateTime() != null ? lifeCycleVO.getCreateTime().getTime():System.currentTimeMillis();
 		lifeCyle.startState =lifeCycleVO.getStartStatus();
 		lifeCyle.ts = VciDateUtil.date2Str(lifeCycleVO.getTs(),VciDateUtil.DateTimeMillFormat);
 		if(lifeCycleVO.getBounds() !=null && lifeCycleVO.getBounds().length>0) {
@@ -293,7 +326,7 @@
 		}else{
 			lifeCyle.bounds = new Bound[0];
 		}
-		//鍔犻摼鎺ョ嚎
+		//鍔犺繛鎺ョ嚎
 		List<TransitionVO> lines = new ArrayList<>();
 		for (int i = 0; i < lifeCycleVO.getLines().size(); i++) {
 			OsLifeCycleLineVO lineVO = lifeCycleVO.getLines().get(i);
@@ -313,12 +346,11 @@
 	@VciUnLog
 	public List<OsLifeCycleVO> selectAllLifeCycle() throws VciBaseException {
 		try {
-//			LifeCyle[] lifeCyles = platformClientUtil.getLifeCycleService().getLifeCyles();
-			LifeCycle[] lifeCyles = ServiceProvider.getOMDService().getLifeCycleService().getLifeCycles();
+			LifeCycle[] lifeCyles = platformClientUtil.getLifeCycleService().getLifeCycles();
 			return lifeCycleDO2VOs(Arrays.stream(lifeCyles).collect(Collectors.toList()));
 		} catch (PLException vciError) {
 			 if(logger.isErrorEnabled()){
-//			 	logger.error(vciError.error_code,vciError);
+			 	logger.error(vciError.code,vciError);
 			 }
 			 throw WebUtil.getVciBaseException(vciError);
 		}
@@ -331,7 +363,6 @@
 	 */
 	@Override
 	@VciUnLog
-	@Cacheable(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_LIFE_CYCLE,unless="#result == null")
 	public Map<String,OsLifeCycleVO> selectAllLifeCycleMap() throws VciBaseException{
 		return Optional.ofNullable(self.selectAllLifeCycle()).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getId(),t->t,(o1,o2)->o1));
 	}
@@ -340,7 +371,6 @@
 	 * 娓呴櫎缂撳瓨
 	 */
 	@Override
-	@CacheEvict(value = VCI_OBJECT_SERVICE,key = CacheKeyConstant.ALL_LIFE_CYCLE)
 	public void clearCache() {
 
 	}
@@ -367,7 +397,6 @@
 		return Optional.ofNullable(life.getLines()).orElseGet(()->new ArrayList<>()).stream().filter(s->s.getSourceLifeStatus().equalsIgnoreCase(currentStatus) && s.getTargetLifeStatus().equalsIgnoreCase(targetStatus)).findFirst().orElseGet(()->null);
 	}
 
-
 	/**
 	 * 璺冭縼涓氬姟绫诲瀷鐨勭敓鍛藉懆鏈熺姸鎬�
 	 * @param obj 涓氬姟绫诲瀷鏁版嵁瀵硅薄
@@ -375,12 +404,11 @@
 	 * @throws VciBaseException 璺冭縼鍑洪敊鐨勬槸浼氭姏鍑哄紓甯�
 	 */
 	@Override
-	public void doTransVO(com.vci.corba.omd.data.BusinessObject obj,OsLifeCycleLineVO lineVO) throws VciBaseException {
+	public void doTransVO(BusinessObject obj,OsLifeCycleLineVO lineVO) throws VciBaseException {
 		if(lineVO!=null){
 			try {
-				com.vci.corba.omd.lcm.TransitionVO transitionVO = lifeCycleLineVO2DO(lineVO);
-//				platformClientUtil.getBOFactoryService().transferBusinessObject(new BusinessObjectHolder(obj), transitionVO);
-				ServiceProvider.getBOFService().transferBusinessObject(obj, transitionVO.destination);
+				TransitionVO transitionVO = lifeCycleLineVO2DO(lineVO);
+				platformClientUtil.getBOFService().transferBusinessObject(obj, transitionVO.destination);
 			} catch (PLException e) {
 				throw WebUtil.getVciBaseException(e);
 			}
@@ -394,23 +422,24 @@
 	 * @param lineVO 杩炴帴绾垮璞�
 	 * @return 骞冲彴鐨勮繛鎺ョ嚎瀵硅薄
 	 */
-	private com.vci.corba.omd.lcm.TransitionVO lifeCycleLineVO2DO(OsLifeCycleLineVO lineVO){
+	private TransitionVO lifeCycleLineVO2DO(OsLifeCycleLineVO lineVO) throws PLException {
 		com.vci.corba.omd.lcm.TransitionVO transitionVO = new com.vci.corba.omd.lcm.TransitionVO();
 		transitionVO.id = lineVO.getOid();
 		transitionVO.source = lineVO.getSourceLifeStatus();
 		transitionVO.destination = lineVO.getTargetLifeStatus();
 		transitionVO.connect = lineVO.getName() == null?"":lineVO.getName();
 			//鍔犱簨浠�
-		com.vci.corba.omd.lcm.TransitionVOEvent[] events;
+		TransitionVOEvent[] events;
 		if(lineVO.getEvents() == null || lineVO.getEvents().length == 0){
-			events = new com.vci.corba.omd.lcm.TransitionVOEvent[0];
+			events = new TransitionVOEvent[0];
 		}else{
-			events = new com.vci.corba.omd.lcm.TransitionVOEvent[lineVO.getEvents().length];
+			events = new TransitionVOEvent[lineVO.getEvents().length];
 			for (int j = 0; j < lineVO.getEvents().length; j++) {
 				OsLifeCycleLineEventVO eventVO = lineVO.getEvents()[j];
-				com.vci.corba.omd.lcm.TransitionVOEvent event = new com.vci.corba.omd.lcm.TransitionVOEvent();
+				TransitionVOEvent event = new TransitionVOEvent();
 				event.id = eventVO.getOid();
-				event.name = eventVO.getEventFullName();
+				event.name = Func.isBlank(eventVO.getEventFullName()) ?
+						platformClientUtil.getLifeCycleService().getLCEventValueByKey(eventVO.getOid()):eventVO.getEventFullName();
 				events[j] = event;
 			}
 		}
@@ -425,12 +454,12 @@
 	 * @throws VciBaseException 璺冭縼鍑洪敊鐨勬槸浼氭姏鍑哄紓甯�
 	 */
 	@Override
-	public void batchTransVo(com.vci.corba.omd.data.BusinessObject[] bos,OsLifeCycleLineVO[] vos) throws VciBaseException{
+	public void batchTransVo(BusinessObject[] bos,OsLifeCycleLineVO[] vos) throws VciBaseException{
 		batchTransVo(bos,vos,null);
 	}
 
 	/**
-	 * 浣跨敤鐢熷懡鍛ㄦ湡鐨勭紪鍙峰洖鍘诲寘鍚殑鐘舵�佹樉绀哄璞�
+	 * 浣跨敤鐢熷懡鍛ㄦ湡鐨勭紪鍙疯幏鍙栧寘鍚殑鐘舵�佹樉绀哄璞�
 	 *
 	 * @param lifeCycleId 鐢熷懡鍛ㄦ湡鐨勭紪鍙�
 	 * @return 鐘舵�佺殑鏄剧ず瀵硅薄
@@ -455,6 +484,27 @@
 	}
 
 	/**
+	 * 浣跨敤澶氫釜缂栧彿鑾峰彇鐢熷懡鍛ㄦ湡鐨勫璞�
+	 * @param lcIdList 缂栧彿
+	 * @return 鏄剧ず瀵硅薄
+	 */
+	@Override
+	public List<OsLifeCycleVO> getLifeCycleByIds(Collection<String> lcIdList) {
+		if(Func.isEmpty(lcIdList)){
+			return null;
+		}
+		Map<String, OsLifeCycleVO> lifeCycleVOMap = self.selectAllLifeCycleMap();
+		List<OsLifeCycleVO> lifeCycleVOList = new ArrayList<>();
+		lcIdList.stream().forEach(vrId->{
+			OsLifeCycleVO lifeCycleVO = lifeCycleVOMap.getOrDefault(vrId,null);
+			if(lifeCycleVO != null){
+				lifeCycleVOList.add(lifeCycleVO);
+			}
+		});
+		return lifeCycleVOList;
+	}
+
+	/**
 	 * 鎵归噺娣诲姞鐢熷懡鍛ㄦ湡
 	 *
 	 * @param lifeCyleList 鐢熷懡鍛ㄦ湡鐨勫唴瀹�
@@ -464,6 +514,8 @@
 		if(!CollectionUtils.isEmpty(lifeCyleList)){
 			lifeCyleList.stream().forEach(lifeCyle -> {
 				try {
+					//鏍¢獙鐢熷懡鍛ㄦ湡鏄惁鍚堣
+					this.checkLifeCycle(lifeCyle,true);
 					platformClientUtil.getLifeCycleService().addLifeCycle(lifeCyle);
 				} catch (PLException e) {
 					throw WebUtil.getVciBaseException(e);
@@ -482,6 +534,8 @@
 		if(!CollectionUtils.isEmpty(lifeCycleList)){
 			lifeCycleList.stream().forEach(lifeCyle -> {
 				try {
+					//鏍¢獙鐢熷懡鍛ㄦ湡鏄惁鍚堣
+					this.checkLifeCycle(lifeCyle,false);
 					platformClientUtil.getLifeCycleService().modifyLifeCycle(lifeCyle);
 				} catch (PLException e) {
 					throw WebUtil.getVciBaseException(e);
@@ -491,7 +545,7 @@
 	}
 
 	/**
-	 * 鐘舵�佸湪鐢熷懡鍛ㄦ湡涓娇鐢ㄧ殑鍕ゅ揩
+	 * 鐘舵�佸湪鐢熷懡鍛ㄦ湡涓娇鐢ㄧ殑鑼冨洿
 	 *
 	 * @param statusOid 鐘舵�佺殑涓婚敭
 	 * @return 鐢熷懡鍛ㄦ湡鐨勪俊鎭�
@@ -545,6 +599,434 @@
 	}
 
 	/**
+	 * 鏂板鍗曟潯鐢熷懡鍛ㄦ湡
+	 * @param osLifeCycleVO
+	 * @return
+	 */
+	@Override
+	public boolean addLifeCycle(OsLifeCycleVO osLifeCycleVO) throws PLException {
+		VciBaseUtil.alertNotNull(osLifeCycleVO,"鐢熷懡鍛ㄦ湡妯℃澘");
+		LifeCycle lifeCycle = lifeCycleVO2DO(osLifeCycleVO);
+		//鐢熷懡鍛ㄦ湡鍚堣鏍¢獙
+		checkLifeCycle(lifeCycle,true);
+		return platformClientUtil.getLifeCycleService().addLifeCycle(lifeCycle);
+	}
+
+	/**
+	 * 淇敼鐢熷懡鍛ㄦ湡
+	 * @param osLifeCycleVO
+	 * @return
+	 */
+	@Override
+	public boolean updateLifeCycle(OsLifeCycleVO osLifeCycleVO) throws PLException {
+		VciBaseUtil.alertNotNull(osLifeCycleVO,"鐢熷懡鍛ㄦ湡妯℃澘");
+		//鏌ヨ淇敼鐨勭敓鍛藉懆鏈熸槸鍚﹀瓨鍦�
+		LifeCycle dbLifeCycle = platformClientUtil.getLifeCycleService().getLifeCycle(osLifeCycleVO.getId());
+		if(Func.isEmpty(dbLifeCycle) || Func.isBlank(dbLifeCycle.oid)){
+			throw new PLException("500",new String[]{"淇敼鐢熷懡鍛ㄦ湡妯℃澘涓嶅瓨鍦紒"});
+		}
+		osLifeCycleVO.setCreator(dbLifeCycle.creator);
+		osLifeCycleVO.setCreateTime(new Date(dbLifeCycle.createTime));
+		LifeCycle lifeCycle = lifeCycleVO2DO(osLifeCycleVO);
+		//妫�鏌ョ敓鍛藉懆鏈熶慨鏀规槸鍚﹀拰瑙�
+		checkLifeCycle(lifeCycle,false);
+		return platformClientUtil.getLifeCycleService().modifyLifeCycle(lifeCycle);
+	}
+
+	/**
+	 * 鍒犻櫎鐢熷懡鍛ㄦ湡
+	 * @param lifeCycleDTOS
+	 * @return
+	 */
+	@Override
+	public boolean deleteLifeCycles(List<OsLifeCycleDTO> lifeCycleDTOS) throws PLException {
+		VciBaseUtil.alertNotNull(lifeCycleDTOS,"寰呭垹闄ょ殑鐢熷懡鍛ㄦ湡鍒楄〃");
+		//鍒ゆ柇瑕佸垹闄ょ殑鐢熷懡鍛ㄦ湡鏄惁鏈夎寮曠敤
+		lifeCycleDTOS.stream().forEach(item->{
+			String lifeCycleName = item.getId();
+			try {
+				List<Map<String, String>> usedLifeCycleList = this.getUsedLifeCycleList(lifeCycleName);
+				if(Func.isNotEmpty(usedLifeCycleList)){
+					throw new VciBaseException("璇ョ敓鍛藉懆鏈熷凡琚娇鐢ㄤ笉鍏佽鍒犻櫎");
+				}
+			} catch (PLException e) {
+				logger.error(e.getMessage());
+				e.printStackTrace();
+				throw new VciBaseException(e.getMessage());
+			}
+		});
+
+		//骞冲彴鐨刣eleteStatus鏂规硶蹇呬紶涓変釜鍙傛暟锛宱id銆乶ame鍜宼s
+		List<LifeCycle> lcList = new ArrayList<>();
+		for(OsLifeCycleDTO lcDTO : lifeCycleDTOS){
+			//oid鍜宼s鍒ょ┖
+			String oid = lcDTO.getOid();
+			//id涓昏鐢ㄦ潵瀵圭紦瀛樻暟鎹垹闄�
+			String id = lcDTO.getId();
+			//鍚庡彴浼氱敤ts杩涜鏁版嵁涓�鑷存�ф牎楠�
+			Date ts = lcDTO.getTs();
+			if(Func.isBlank(oid) || Func.isBlank(id) || Func.isEmpty(ts)){
+				throw new PLException("500",new String[]{"寰呭垹闄ょ殑鐢熷懡鍛ㄦ湡鍒楄〃涓富閿�恛id銆戙�佽皟鏁存椂闂淬�恡s銆戙�佺姸鎬佸悕绉般�恘ame銆戜笉鑳戒负绌猴紒"});
+			}
+			LifeCycle vr = new LifeCycle();
+			vr.oid = oid;
+			vr.name = id;
+			vr.ts = Func.format(ts,VciDateUtil.DateTimeMillFormat);
+			lcList.add(vr);
+		}
+		return platformClientUtil.getLifeCycleService().deleteLifeCycles(lcList.toArray(new LifeCycle[lcList.size()]));
+	}
+
+	/**
+	 * 鏌ョ湅鐢熷懡鍛ㄦ湡鐨勪娇鐢ㄨ寖鍥�
+	 * @return
+	 */
+	@Override
+	public List<Map<String, String>> getUsedLifeCycleList(String lifeCycleName) throws PLException {
+		if(Func.isBlank(lifeCycleName)){
+			throw new PLException("500",new String[]{"璇烽�夋嫨瑕佹煡璇娇鐢ㄨ寖鍥寸殑鐢熷懡鍛ㄦ湡妯℃澘!"});
+		}
+		String[] btNames = platformClientUtil.getBtmService().getBTNamesByLCName(lifeCycleName);
+		if(Func.isEmpty(btNames)){
+			return new ArrayList<>();
+		}
+		List<Map<String,String>> btmNameMapList = new ArrayList<>();
+		Arrays.stream(btNames).forEach(btName->{
+			Map<String, String> itemMap = new HashMap<>();
+			itemMap.put("lifeCycleName",lifeCycleName);
+			itemMap.put("source",btName);
+			btmNameMapList.add(itemMap);
+		});
+		return btmNameMapList;
+	}
+
+	/**
+	 * 瀵煎嚭閫変腑鐨勭敓鍛藉懆鏈�
+	 * @param exportFileName 瀵煎嚭鐨勬枃浠跺悕
+	 * @param lcNames 闇�瑕佸鍑虹殑鐢熷懡鍛ㄦ湡鍚嶇О
+	 * @param flag 鎺у埗瀵煎嚭鐨勫垪鍚嶆槸鍚﹀拰瀵煎叆妯℃澘涓�鑷�
+	 * @return
+	 */
+	@Override
+	public String exportLifeCycles(String exportFileName, String lcNames, boolean flag) throws PLException {
+		if(Func.isBlank(lcNames)){
+			throw new PLException("500",new String[]{"璇峰嬀閫夎瀵煎嚭鐨勭敓鍛藉懆鏈熸ā鏉�!"});
+		}
+		//鐣岄潰娌′紶鍚嶇О锛屼娇鐢ㄩ粯璁ゅ鍑哄悕绉�
+		exportFileName = Func.isBlank(exportFileName) ?  "鐢熷懡鍛ㄦ湡瀵煎嚭_" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss"):exportFileName;
+		//璁剧疆鍒楀悕
+		List<String> columns = this.getCloumns(flag);
+
+		//鍐檈xcel
+		String excelPath = LocalFileUtil.getDefaultTempFolder() + File.separator + exportFileName +  ".xls";
+		try {
+			new File(excelPath).createNewFile();
+		} catch (Throwable e) {
+			throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelPath}, e);
+		}
+		//璁剧疆鍒�
+		List<WriteExcelData> excelDataList = new ArrayList<>();
+		//璁剧疆鍒楀ご
+		for (int index = 0; index < columns.size(); index++) {
+			excelDataList.add(new WriteExcelData(0,index, columns.get(index)));
+		}
+		//鎸夌収鐗堟湰瑙勫垯鍚嶆煡璇紝鐒跺悗澶勭悊鐗堟湰瑙勫垯瀵煎嚭
+		List<String> lcIdList = Func.toStrList(lcNames);
+		List<OsLifeCycleVO> lifeCycleVOList = this.getLifeCycleByIds(lcIdList);
+		if(Func.isEmpty(lifeCycleVOList)){
+			excelDataList.add(new WriteExcelData(1,1, "鏍规嵁鍚嶇О鏈煡璇㈠埌鐢熷懡鍛ㄦ湡淇℃伅锛岃鍒锋柊鍚庡皾璇曢噸鏂板鍑猴紒"));
+		}else{
+			int row = 1;
+			for (int i = 0; i < lifeCycleVOList.size(); i++) {
+				OsLifeCycleVO lifeCycleVO = lifeCycleVOList.get(i);
+				List<OsLifeCycleLineVO> lines = lifeCycleVO.getLines();
+				if(Func.isNotEmpty(lines)){
+					for (int j = 0; j < lines.size(); j++) {
+						int start = row + j;
+						excelDataList.add(new WriteExcelData(start,0, lifeCycleVO.getId()));
+						excelDataList.add(new WriteExcelData(start,1, lifeCycleVO.getName()));
+						excelDataList.add(new WriteExcelData(start,2, lifeCycleVO.getStartStatus()));
+						excelDataList.add(new WriteExcelData(start,3, lifeCycleVO.getDescription()));
+						OsLifeCycleLineVO osLifeCycleLineVO = lines.get(j);
+						//鎸夌収瀵煎嚭妯℃澘鍒楀~鏁版嵁
+						if(!flag){
+							excelDataList.add(new WriteExcelData(start,4, osLifeCycleLineVO.getName()));
+							excelDataList.add(new WriteExcelData(start,5, osLifeCycleLineVO.getSourceLifeStatus()));
+							excelDataList.add(new WriteExcelData(start,6, osLifeCycleLineVO.getSourceLifeStatusName()));
+							excelDataList.add(new WriteExcelData(start,7, osLifeCycleLineVO.getTargetLifeStatus()));
+							excelDataList.add(new WriteExcelData(start,8, osLifeCycleLineVO.getTargetLifeStatusName()));
+							//澶勭悊杩炴帴绾垮寘鍚殑浜嬩欢
+							OsLifeCycleLineEventVO[] events = osLifeCycleLineVO.getEvents();
+							if(events != null && events.length > 0){
+								String collect = Arrays.stream(events).map(OsLifeCycleLineEventVO::getOid).collect(Collectors.joining(";"));
+								excelDataList.add(new WriteExcelData(start,9, collect));
+							}
+							excelDataList.add(new WriteExcelData(start,10, Func.format(lifeCycleVO.getCreateTime(),"yyyy骞碝M鏈坉d鏃� hh:mm:ss")));
+						}else{
+							excelDataList.add(new WriteExcelData(start,4, osLifeCycleLineVO.getSourceLifeStatus()));
+							excelDataList.add(new WriteExcelData(start,5, osLifeCycleLineVO.getTargetLifeStatus()));
+						}
+					}
+					row = row+lines.size();
+				}else{
+					excelDataList.add(new WriteExcelData(row,0, lifeCycleVO.getId()));
+					excelDataList.add(new WriteExcelData(row,1, lifeCycleVO.getName()));
+					excelDataList.add(new WriteExcelData(row,2, lifeCycleVO.getStartStatus()));
+					excelDataList.add(new WriteExcelData(row,3, lifeCycleVO.getDescription()));
+					if(!flag){
+						excelDataList.add(new WriteExcelData(row,10, Func.format(lifeCycleVO.getCreateTime(),"yyyy骞碝M鏈坉d鏃� hh:mm:ss")));
+					}
+					row++;
+				}
+
+			}
+		}
+		WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
+		ExcelUtil.writeDataToFile(excelPath, excelOption);
+		return excelPath;
+	}
+
+	/**
+	 * 涓嬭浇鐢熷懡鍛ㄦ湡瀵煎叆妯℃澘
+	 * @param exportFileName
+	 * @return
+	 * @throws PLException
+	 */
+	@Override
+	public String downloadLifeCycleTemplate(String exportFileName) throws Exception {
+		//鐣岄潰娌′紶鍚嶇О锛屼娇鐢ㄩ粯璁ゅ鍑哄悕绉�
+		exportFileName = Func.isBlank(exportFileName) ?  "鐢熷懡鍛ㄦ湡瀵煎叆妯℃澘_" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss"):exportFileName;
+		//璁剧疆鍒楀悕
+		List<String> columns = this.getCloumns(true);
+		//璁剧疆蹇呭~鍒�
+		ColumnNameisRed.clear();
+		ColumnNameisRed.add(0);
+		ColumnNameisRed.add(2);
+
+		//鍐檈xcel
+		String excelPath = LocalFileUtil.getDefaultTempFolder() + File.separator + exportFileName +  ".xls";
+		try {
+			new File(excelPath).createNewFile();
+		} catch (Throwable e) {
+			throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelPath}, e);
+		}
+		//璁剧疆鍒�
+		List<WriteExcelData> excelDataList = new ArrayList<>();
+		//璁剧疆鍒楀ご
+		for (int index = 0; index < columns.size(); index++) {
+			//鍒ゆ柇鏄惁涓哄繀濉垪锛岀粰蹇呭~鍒楄缃鑹�
+			if(ColumnNameisRed.contains(index)){
+				WriteExcelData excelData = new WriteExcelData(0, index, columns.get(index));
+				excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
+				excelDataList.add(excelData);
+			}else{
+				excelDataList.add(new WriteExcelData(0,index, columns.get(index)));
+			}
+		}
+		WriteExcelOption excelOption = new WriteExcelOption(excelDataList);
+		ExcelUtil.writeDataToFile(excelPath, excelOption);
+		return excelPath;
+	}
+
+	/**
+	 * 瀵煎叆鐢熷懡鍛ㄦ湡
+	 * @param file
+	 * @return
+	 */
+	@Override
+	public BaseResult importLifeCycles(File file) throws Exception {
+		VciBaseUtil.alertNotNull(file,"excel鏂囦欢");
+		if(!file.exists()){
+			throw new VciBaseException("瀵煎叆鐨別xcel鏂囦欢涓嶅瓨鍦�,{0}",new String[]{file.getPath()});
+		}
+		try{
+			//1銆佽鍙杄xcel涓殑鏁版嵁锛岀粍鎴愬璞�
+			ReadExcelOption excelOption = new ReadExcelOption();
+			List<OsLifeCyclePO> poList = ExcelUtil.readDataObjectFromExcel(file, OsLifeCyclePO.class,excelOption,(value, po, fieldName)->{});
+			//鍘婚櫎閮芥槸绌虹殑鎯呭喌
+			if(CollectionUtils.isEmpty(poList)){
+				return BaseResult.fail(ExcelLangCodeConstant.IMPORT_CONTENT_NULL,new String[]{});
+			}
+			//灏嗘灇涓惧拰鏋氫妇椤瑰鐞嗘垚涓�瀵瑰鍏崇郴鐨勫璞�
+			Map<String, OsLifeCyclePO> groupPOMap = new HashMap<>();
+			//榛樿鐨勭敓鍛藉懆鏈熷浘鏍囩殑鍧愭爣鍜屽搴︾瓑淇℃伅
+			List<OsLifeCycleLineBoundVO> defaultBoundList = new ArrayList<>();
+			for (OsLifeCyclePO po : poList) {
+				//鎷兼帴鐢ㄦ潵浣滀负鍒嗙粍鐨刱ey
+				String key = po.getId() + "_" + po.getName() + "_" + po.getStartStatus();
+				OsLifeCyclePO group = groupPOMap.get(key);
+				if (group == null) {
+					group = new OsLifeCyclePO();
+					//鎷垮嚭鐜扮殑棣栬鍋氬悗缁殑鎻愮ず琛�
+					group.setRowIndex(po.getRowIndex());
+					group.setId(po.getId());
+					group.setName(po.getName());
+					group.setStartStatus(po.getStartStatus());
+					group.setDescription(po.getDescription());
+					groupPOMap.put(key, group);
+					//绗竴琛岃捣濮嬬姸鎬侀渶瑕佸崟鐙鐞�
+					if(po.getRowIndex().equals("1")){
+						OsLifeCycleLineBoundVO boundVO = new OsLifeCycleLineBoundVO();
+						boundVO.setName(po.getStartStatus());
+						boundVO.setCellh("30.0");
+						boundVO.setCellw("80.0");
+						boundVO.setCellx(String.valueOf(200+(Integer.parseInt(po.getRowIndex())*60)));
+						boundVO.setCelly(String.valueOf(300+(Integer.parseInt(po.getRowIndex())*60)));
+						boundVO.setCellicon("");
+						defaultBoundList.add(boundVO);
+					}
+					//澶勭悊鐢熷懡鍛ㄦ湡鍥炬爣鐨勯粯璁ょ殑鍧愭爣淇℃伅
+					OsLifeCycleLineBoundVO boundVO = new OsLifeCycleLineBoundVO();
+					boundVO.setName(po.getTargetLifeStatus());
+					boundVO.setCellh("30.0");
+					boundVO.setCellw("80.0");
+					boundVO.setCellx(String.valueOf(250+(Integer.parseInt(po.getRowIndex())*60)));
+					boundVO.setCelly(String.valueOf(350+(Integer.parseInt(po.getRowIndex())*60)));
+					boundVO.setCellicon("");
+					defaultBoundList.add(boundVO);
+				}
+
+				OsLifeCycleLineVO lineItemVO = new OsLifeCycleLineVO();
+				lineItemVO.setName("line"+po.getRowIndex());
+				lineItemVO.setSourceLifeStatus(po.getSourceLifeStatus());
+				lineItemVO.setTargetLifeStatus(po.getTargetLifeStatus());
+
+				//澶勭悊杩炴帴绾垮寘鍚殑浜嬩欢
+				String[] eventArr = po.getEvents().split(";");
+				if(eventArr != null & eventArr.length > 0){
+					List<OsLifeCycleLineEventVO> eventVOList = new ArrayList<>();
+					for (int i = 0; i < eventArr.length; i++) {
+						OsLifeCycleLineEventVO osLCLineEventVO = new OsLifeCycleLineEventVO();
+						osLCLineEventVO.setOid(eventArr[i]);
+						String lcEventValueByKey = platformClientUtil.getLifeCycleService().getLCEventValueByKey(eventArr[i]);
+						osLCLineEventVO.setEventFullName(lcEventValueByKey);
+						eventVOList.add(osLCLineEventVO);
+					}
+					lineItemVO.setEvents(eventVOList.toArray(new OsLifeCycleLineEventVO[eventVOList.size()]));
+				}
+				group.getLineItems().add(lineItemVO);
+			}
+			Collection<OsLifeCyclePO> newPOList = groupPOMap.values();
+			//鏁版嵁搴撴煡璇㈡槸鍚︽湁宸插瓨鍦ㄧ殑鐢熷懡鍛ㄦ湡鍚嶏紝鏂逛究鍚庣画鍋氬垽閲嶅鐞�
+			List<OsLifeCycleVO> lifeCycleVOList = this.getLifeCycleByIds(poList.stream().map(OsLifeCyclePO::getId).collect(Collectors.toSet()));
+			List<String> repeatLCId = new ArrayList<>();
+			if(Func.isNotEmpty(lifeCycleVOList)){
+				repeatLCId = lifeCycleVOList.stream().map(OsLifeCycleVO::getId).collect(Collectors.toList());
+			}
+			//褰撳墠excel涓槸鍚﹂噸澶嶇敤鐨勫垽閲峂ap:锛坘ey锛氬垽閲嶅睘鎬э紝value锛氳鍙凤級
+			Map<String, String> excelReapeat = new HashMap<>();
+			//鍒ゆ柇蹇呭~灞炴�ф槸鍚︿负绌虹瓑绛�
+			List<String> finalRepeatLCId = repeatLCId;
+			newPOList.stream().forEach(lcPO -> {
+				if(Func.isBlank(lcPO.getId())){
+					throw new VciBaseException("绗��"+lcPO.getRowIndex()+"銆戣锛宭cnameerror");
+				}else if(Func.isEmpty(lcPO.getStartStatus())){
+					throw new VciBaseException("绗��"+lcPO.getRowIndex()+"銆戣锛宻tartstatuserror");
+				}else if(!lcPO.getId().matches("^[A-Za-z]+$")){
+					throw new VciBaseException("绗��"+lcPO.getRowIndex()+"銆戣鏁版嵁锛屽悕绉板彧鑳戒负鑻辨枃瀛楁瘝");
+				}else if(excelReapeat.containsKey(lcPO.getId())){//鍚嶇О琛ㄦ牸涓垽閲�
+					throw new VciBaseException("绗��"+excelReapeat.get(lcPO.getId())+"銆戣鍜岀銆�"+lcPO.getRowIndex()+"銆戣鏁版嵁锛屽悕绉伴噸澶�");
+				}else if (Func.isNotEmpty(finalRepeatLCId) && finalRepeatLCId.contains(lcPO.getId())){//2銆佸垽鏂悕绉版槸鍚︿笌绯荤粺涓噸澶�
+					throw new VciBaseException("绗��"+lcPO.getRowIndex()+"銆戣锛屽悕绉板湪绯荤粺涓凡缁忓瓨鍦�,璇蜂慨鏀�!");
+				}
+				//鍏堝鏋氫妇鍚峞xcel涓渶瑕佸垽閲嶅鐞�
+				excelReapeat.put(lcPO.getId(),lcPO.getRowIndex());
+			});
+			//淇濆瓨閫昏緫
+			for (OsLifeCyclePO osLifeCyclePO : newPOList) {
+				OsLifeCycleVO osLifeCycleVO = new OsLifeCycleVO();
+				//鐢熸垚瀛樺偍鐨凞TO瀵硅薄
+				osLifeCycleVO.setId(osLifeCyclePO.getId());
+				osLifeCycleVO.setName(osLifeCyclePO.getName());
+				osLifeCycleVO.setDescription(osLifeCyclePO.getDescription());
+				osLifeCycleVO.setStartStatus(osLifeCyclePO.getStartStatus());
+				osLifeCycleVO.setLines(osLifeCyclePO.getLineItems());
+				osLifeCycleVO.setBounds(defaultBoundList.toArray(new OsLifeCycleLineBoundVO[defaultBoundList.size()]));
+				//璋冪敤鏂板鏋氫妇鏂规硶
+				boolean addBoolean = platformClientUtil.getLifeCycleService().addLifeCycle(lifeCycleVO2DO(osLifeCycleVO));
+				if(!addBoolean){
+					throw new PLException("500",new String[]{"淇濆瓨鐢熷懡鍛ㄦ湡鍚嶏紝涓恒��" + osLifeCycleVO.getId() + "銆戠殑鏁版嵁鏃跺嚭鐜伴敊璇�!"});
+				}
+			}
+		}catch (Exception e){
+			if(logger.isErrorEnabled()){
+				logger.error("璇诲彇excel鍐呭鏃舵垨淇濆瓨鐢熷懡鍛ㄦ湡淇℃伅鏃跺嚭鐜颁簡閿欒锛屽叿浣撳師鍥狅細",VciBaseUtil.getExceptionMessage(e));
+			}
+			e.printStackTrace();
+			return BaseResult.fail(VciBaseUtil.getExceptionMessage(e),new String[]{},e);
+		}
+		return BaseResult.success("鐢熷懡鍛ㄦ湡瀵煎叆鎴愬姛锛�");
+	}
+
+	/**
+	 * 鑾峰彇瀵煎嚭鎴栧鍏ユā鏉跨殑鍒楀悕
+	 * @param flag 鏄惁鑾峰彇瀵煎叆妯℃澘鍒楀悕
+	 * @return
+	 */
+	private List<String> getCloumns(boolean flag){
+		if(flag){
+			return new ArrayList<>(
+					Arrays.asList(
+							"鍚嶇О", "鏍囩", "璧峰鐘舵��", "鎻忚堪",
+							"杩炴帴绾胯捣濮嬬姸鎬�", "杩炴帴绾跨洰鏍囩姸鎬�", "浜嬩欢(;闂撮殧)"
+					)
+			);
+		}
+		return new ArrayList<>(
+				Arrays.asList(
+						"鍚嶇О", "鏍囩", "璧峰鐘舵��", "鎻忚堪",
+						"杩炴帴绾垮悕绉�", "杩炴帴绾胯捣濮嬬姸鎬佽嫳鏂囧悕绉�","杩炴帴绾胯捣濮嬬姸鎬佷腑鏂囧悕绉�",
+						"杩炴帴绾跨洰鏍囩姸鎬佽嫳鏂囧悕绉�","杩炴帴绾跨洰鏍囩姸鎬佷腑鏂囧悕绉�", "浜嬩欢", "鍒涘缓鏃堕棿"
+				)
+		);
+	}
+
+	/**
+	 * 妫�鏌ョ敓鍛藉懆鏈熷悕绉版槸鍚﹀凡瀛樺湪
+	 * @param name
+	 * @return
+	 */
+	public boolean checkLCExist(String name) {
+		try {
+			LifeCycle lc = platformClientUtil.getLifeCycleService().getLifeCycle(name);
+			if (lc != null && !lc.name.equals("")) {
+				return true;
+			}
+		} catch (PLException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			logger.error(VciBaseUtil.getExceptionMessage(e));
+		}
+
+		return false;
+	}
+
+	/**
+	 * 妫�鏌ョ敓鍛藉懆鏈熸槸鍚﹀悎瑙�
+	 * @param lifeCycle
+	 * @param isAdd 鏄惁涓烘柊澧�
+	 * @throws PLException
+	 */
+	public void checkLifeCycle(LifeCycle lifeCycle,boolean isAdd) throws PLException {
+		String name = lifeCycle.name;
+		if (Func.isBlank(name)) {
+			throw new PLException("500", new String[]{"璇疯緭鍏ョ敓鍛藉懆鏈熷悕绉�!"});
+		}
+
+		if (!name.matches("[a-z A-Z]*")) {
+			throw new PLException("500", new String[]{"鐢熷懡鍛ㄦ湡鍚嶇О鍙兘涓鸿嫳鏂囧瓧姣�!"});
+		}
+
+		if (isAdd && checkLCExist(name)) {
+			throw new PLException("500", new String[]{"璇ョ敓鍛藉懆鏈熷悕绉板凡缁忓瓨鍦�!"});
+		}
+
+		if (Func.isBlank(lifeCycle.startState)) {
+			throw new PLException("500", new String[]{"璇烽�夋嫨寮�濮嬬姸鎬�!"});
+		}
+	}
+
+	/**
 	 * 鐢熷懡鍛ㄦ湡鐨勯摼鎺ョ嚎
 	 *
 	 * @param id 缂栧彿
@@ -588,6 +1070,14 @@
 		return ervo;
 	}
 
+	/**
+	 * 鏌ヨ鎵�鏈夎穬杩佷簨浠秌ey
+	 * @return
+	 */
+	@Override
+	public List<String> getLCEventKeys() throws PLException {
+		return Arrays.asList(platformClientUtil.getLifeCycleService().getLCEventKeys());
+	}
 
 	/**
 	 * 鎵归噺鎵ц璺冭縼鎿嶄綔锛岃姹傚繀椤绘槸鍚屼竴涓笟鍔$被鍨嬩笅鐨�
@@ -597,7 +1087,7 @@
 	 * @throws VciBaseException  璺冭縼鍑洪敊鐨勬槸浼氭姏鍑哄紓甯�
 	 */
 	@Override
-	public void batchTransVo(com.vci.corba.omd.data.BusinessObject[] bos,OsLifeCycleLineVO[] lineVOs,String[] releaseStatus) throws VciBaseException{
+	public void batchTransVo(BusinessObject[] bos,OsLifeCycleLineVO[] lineVOs,String[] releaseStatus) throws VciBaseException{
 		if(bos!=null && lineVOs != null && lineVOs.length == bos.length){
 			try {
 				if(releaseStatus == null){
@@ -610,9 +1100,7 @@
 				for(int i = 0 ; i < lineVOs.length; i ++){
 					vos[i] = lifeCycleLineVO2DO(lineVOs[i]);
 				}
-//				platformClientUtil.getBOFactoryService().batchTransferBusinessObjectAndRelease(
-//						bos, vos, releaseStatus);
-				ServiceProvider.getBOFService().batchTransferBusinessObjectAndRelease(
+				platformClientUtil.getBOFService().batchTransferBusinessObjectAndRelease(
 						bos, vos, releaseStatus);
 			} catch (PLException e) {
 				throw WebUtil.getVciBaseException(e);

--
Gitblit v1.9.3