Commit 09bc7ce6 authored by shyWang's avatar shyWang

PDM前端改造

更改相关
parent 766187f2
......@@ -21,11 +21,9 @@ import java.util.Map;
public class AbstractBaseController {
//@ApiOperation("根据模板id查询模板信息,包含模板节点、路径、及节点下的事件 路径下的事件")
@GetMapping({"/findDetail/{id}"})
public ApiResult<LifecycleTemplateVO> findDetail(@PathVariable Long id) {
//return ApiResult.ok(this.getService().findDetail(id));
return ApiResult.ok("");
}
......@@ -54,10 +52,7 @@ public class AbstractBaseController {
}
@DeleteMapping({"/batch/{ids}/{type}"})// id,id2,id3 linkId
//@SubPermission({"remove"})
public ApiResult deleteDxPartUsageLink(@PathVariable("ids") String ids, @PathVariable("type") String type) {
//this.getService().deleteAllIterationFromSameVersion(id);
try {
List<String> idList = new ArrayList<String>();
if (ObjectsUtil.nonNull(ids)) {
......@@ -80,31 +75,6 @@ public class AbstractBaseController {
return ApiResult.error("501", "删除失败", e);
}
}
/* //@ApiOperation("配置规范查询")
@PostMapping({"findBySpec"})
List<DxPartVO> findByConfigSpec(@RequestBody SearchQueryCondition specSearch) {
try {
List<DxPartVO> partVOS = DxPartService.findByConfigSpecSelect(specSearch);
return partVOS;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//@ApiOperation("深度查询")
@PostMapping({"find/recursion"})
List<DxPartVO> findRecursion(@RequestBody SearchQueryCondition specSearch) {
try {
List<DxPartVO> partVOS = DxPartService.findByConfigSpecSelect(specSearch);
return partVOS;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}*/
public SearchItems getPermSearchItems(BaseSearchCondition permSearchParams) {
SearchItems searchItems = new SearchItems();
......
......@@ -2,11 +2,17 @@ package com.yonde.basedata.search;
import com.yonde.basedata.entity.users.DxUserVO;
import com.yonde.basedata.vo.*;
import com.yonde.change.vo.ecn.DxChangeNoticeVo;
import com.yonde.change.vo.ecr.DxChangeRequestVo;
import com.yonde.change.vo.pr.DxProblemReportVo;
import com.yonde.context.vo.DxContextVO;
import com.yonde.doc.vo.DxDocumentVO;
import com.yonde.part.vo.*;
import com.yonde.plan.vo.DxProcessDocDescribeLinkVO;
import com.yonde.plan.vo.DxProcessDocReferenceLinkVO;
import wt.change2.WTChangeIssue;
import wt.change2.WTChangeOrder2;
import wt.change2.WTChangeRequest2;
import wt.clients.beans.query.WTAttribute;
import wt.doc.WTDocument;
import wt.fc.ObjectIdentifier;
......@@ -19,7 +25,9 @@ import wt.util.WTAttributeNameIfc;
import wt.vc.Iterated;
import wt.vc.views.ViewReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SearchOperatorEnumUtil {
......@@ -46,23 +54,43 @@ public class SearchOperatorEnumUtil {
public static final Map<String, String> docSearchItemMap = new HashMap();// 文档搜索条件
public static final Map<String, String> changeSearchItemMap = new HashMap();// 变更搜索条件
public static final Map<Class<?>, Map<String, String>> typeSearchItemMap = new HashMap();// 类型搜索条件映射
public static final Map<Class<?>, String> typeItemMap = new HashMap();// 类型映射
public static final Map<String, Class<?>> typeMap = new HashMap();// 类型映射
public static final Map<String, String> typeStrPrefixMap = new HashMap();// 类型映射
public static final Map<String, String> viewMap = new HashMap();// 视图映射
public static final Map<Class<?>, String> typePrefixMap = new HashMap();// 类型映射
public static final List<String> oidPrefixList = new ArrayList<String>();//PDM类型
static {
initSearchItemMap();
initPartItemMap();
initDocItemMap();
initChangeItemMap();
initTypeItemMap();
initTypeMap();
initViewMap();
initTypePrefixMap();
initOidPrefixList();
}
public static void initOidPrefixList() {
oidPrefixList.add("OR:wt.part.WTPart:");
oidPrefixList.add("OR:wt.doc.WTDocument:");
oidPrefixList.add("OR:wt.change2.WTChangeOrder2:");
oidPrefixList.add("OR:wt.change2.WTChangeRequest2:");
oidPrefixList.add("OR:wt.change2.WTChangeIssue:");
oidPrefixList.add("OR:wt.vc.baseline.ManagedBaseline:");
}
public static void initViewMap() {
......@@ -71,6 +99,16 @@ public class SearchOperatorEnumUtil {
viewMap.put("3", "Manufacture");
}
public static void initTypeMap() {
typeMap.put("DxDocument", WTDocument.class);
typeMap.put("DxPart", WTPart.class);
typeMap.put("DxChangeRequest", WTChangeRequest2.class);
typeMap.put("DxChangeNotice", WTChangeOrder2.class);
typeMap.put("DxDeviation", WTChangeIssue.class);
typeMap.put("DxProblemReport", WTChangeIssue.class);
typeMap.put("DxWaver", WTChangeIssue.class);
}
public static void initTypePrefixMap() {
typePrefixMap.put(DxPartVO.class, "wt.part.WTPart:");
typePrefixMap.put(DxDocumentVO.class, "wt.doc.WTDocument:");
......@@ -87,6 +125,10 @@ public class SearchOperatorEnumUtil {
typeStrPrefixMap.put("com.yonde.dcs.xbom.common.entity.vo.DxPartVO", "wt.part.WTPart:");
typeStrPrefixMap.put("DxPart", "wt.part.WTPart:");
typeStrPrefixMap.put("DxDocument", "wt.doc.WTDocument:");
typeStrPrefixMap.put("com.yonde.dcs.cmt.common.entity.vo.DxChangeRequestVo", "wt.change2.WTChangeRequest2:");
typeStrPrefixMap.put("com.yonde.dcs.cmt.common.entity.vo.DxChangeNoticeVo", "wt.change2.WTChangeOrder2:");
typeStrPrefixMap.put("com.yonde.dcs.cmt.common.entity.vo.DxProblemReportVo", "wt.change2.WTChangeIssue:");
typeStrPrefixMap.put("com.yonde.dcs.document.common.entity.vo.DxDocumentVO", "wt.doc.WTDocument:");
}
......@@ -107,6 +149,10 @@ public class SearchOperatorEnumUtil {
typeItemMap.put(DxProcessDocReferenceLinkVO.class, "com.yonde.dcs.process.common.entity.vo.DxProcessDocReferenceLinkVO");
typeItemMap.put(DxProcessDocDescribeLinkVO.class, "com.yonde.dcs.process.common.entity.vo.DxProcessDocDescribeLinkVO");
typeItemMap.put(DxChangeRequestVo.class, "com.yonde.dcs.cmt.common.entity.vo.DxChangeRequestVo");
typeItemMap.put(DxChangeNoticeVo.class, "com.yonde.dcs.cmt.common.entity.vo.DxChangeNoticeVo");
typeItemMap.put(DxProblemReportVo.class, "com.yonde.dcs.cmt.common.entity.vo.DxProblemReportVo");
//TODO add
}
......@@ -127,8 +173,8 @@ public class SearchOperatorEnumUtil {
+ ViewReference.KEY + "." + ObjectIdentifier.ID);
partSearchItemMap.put(DX_STATE, WTPart.LIFE_CYCLE_STATE);
partSearchItemMap.put(DX_MASTER_ID, Iterated.MASTER_REFERENCE + "." + ObjectReference.KEY + "." + ObjectIdentifier.ID);
docSearchItemMap.put("createTime", WTPart.CREATE_TIMESTAMP);
docSearchItemMap.put("modifyTime", WTPart.MODIFY_TIMESTAMP);
partSearchItemMap.put("createTime", WTPart.CREATE_TIMESTAMP);
partSearchItemMap.put("modifyTime", WTPart.MODIFY_TIMESTAMP);
//部件类型映射
typeSearchItemMap.put(WTPart.class, partSearchItemMap);
......@@ -149,4 +195,19 @@ public class SearchOperatorEnumUtil {
typeSearchItemMap.put(WTDocument.class, docSearchItemMap);
}
public static void initChangeItemMap() {
changeSearchItemMap.put(DX_ID, "thePersistInfo.theObjectIdentifier.id");
changeSearchItemMap.put(DX_NUMBER, WTChangeOrder2.NUMBER);
changeSearchItemMap.put(DX_NAME, WTChangeOrder2.NAME);
changeSearchItemMap.put(DX_STATE, WTChangeOrder2.LIFE_CYCLE_STATE);
changeSearchItemMap.put("createTime", WTChangeOrder2.CREATE_TIMESTAMP);
changeSearchItemMap.put("modifyTime", WTChangeOrder2.MODIFY_TIMESTAMP);
//更改类型映射
typeSearchItemMap.put(WTChangeOrder2.class, changeSearchItemMap);
typeSearchItemMap.put(WTChangeRequest2.class, changeSearchItemMap);
typeSearchItemMap.put(WTChangeIssue.class, changeSearchItemMap);
}
}
......@@ -167,9 +167,12 @@ public class BaseSearchService <V extends IdVO> implements RemoteAccess {
String targetId = fileForm.getTargetId();
String operator = fileForm.getOperator();
String sourceIdType = fileForm.getSourceIdType();
ContentHolder holder = DxDocUtil.getDocById(sourceId);
ContentHolder holder = null;
//DxDocUtil.getDocById(sourceId);
if (StringUtils.isNotEmpty(sourceIdType) && sourceIdType.toLowerCase().contains("part")) {
holder = DxPartUtil.getPartById(sourceId);
} else {
holder = (ContentHolder) RfUtil.getWTObjectById(sourceId);
}
if ("ADD".equalsIgnoreCase(operator)) {
ContentRoleType roleType = ContentRoleType.PRIMARY;
......
......@@ -34,7 +34,7 @@ public class IdVO extends IdOnlyVO implements Serializable {
this.setId(PersistenceHelper.getObjectIdentifier(object).getId());
this.createTime = DateTimeUtil.timeStampToString(object.getCreateTimestamp());
this.modifyTime = DateTimeUtil.timeStampToString(object.getModifyTimestamp());
}finally {
} finally {
SessionContext.setContext(previous);
}
......
package com.yonde.change.controller;
import com.alibaba.fastjson.JSON;
import com.yonde.basedata.controller.AbstractBaseController;
import com.yonde.basedata.entity.api.ApiResult;
import com.yonde.basedata.vo.IdVO;
import com.yonde.change.service.DXChangeOrderService;
import com.yonde.change.vo.DxChangeAffectedDataVo;
import com.yonde.change.vo.DxReportedAgainstVo;
import com.yonde.change.vo.ecn.DxChangeNoticeVo;
import com.yonde.change.vo.ecr.DxChangeRequestVo;
import com.yonde.change.vo.pr.DxProblemReportVo;
import com.yonde.common.ObjectsUtil;
import com.yonde.doc.service.DxDocService;
import com.yonde.doc.vo.DxDocumentVO;
import com.yonde.part.service.DxPartService;
import com.yonde.part.vo.DxPartVO;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping({"/changeOrder"})
public class DxChangeOrderController {
public class DxChangeOrderController extends AbstractBaseController {
//@ApiOperation("深度保存对象")
@PostMapping({"createPR"})
public ApiResult recursionPR(@RequestBody Map entity, HttpServletRequest request) {
DxPartVO part = null;
DxProblemReportVo pr = null;
try {
String jsonString = JSON.toJSONString(entity);
DxProblemReportVo entityVO = JSON.parseObject(jsonString, DxProblemReportVo.class);
......@@ -34,9 +41,9 @@ public class DxChangeOrderController {
//更新link
//part = DxPartService.updateDxPartUsageLink(entityVO);
} else {
//part = DxPartService.createDxPart(entityVO, portUserName);
pr = DXChangeOrderService.createPR(entityVO, portUserName);
}
return ApiResult.ok(part);
return ApiResult.ok(pr);
} catch (Exception e) {
e.printStackTrace();
return ApiResult.error("501", e.getLocalizedMessage(), e);
......@@ -46,7 +53,7 @@ public class DxChangeOrderController {
//@ApiOperation("深度保存对象")
@PostMapping({"createECR"})
public ApiResult recursionECR(@RequestBody Map entity, HttpServletRequest request) {
DxPartVO part = null;
DxChangeRequestVo ecr = null;
try {
String jsonString = JSON.toJSONString(entity);
DxChangeRequestVo entityVO = JSON.parseObject(jsonString, DxChangeRequestVo.class);
......@@ -55,9 +62,9 @@ public class DxChangeOrderController {
//更新link
//part = DxPartService.updateDxPartUsageLink(entityVO);
} else {
//part = DxPartService.createDxPart(entityVO, portUserName);
ecr = DXChangeOrderService.createECR(entityVO, portUserName);
}
return ApiResult.ok(part);
return ApiResult.ok(ecr);
} catch (Exception e) {
e.printStackTrace();
return ApiResult.error("501", e.getLocalizedMessage(), e);
......@@ -67,7 +74,7 @@ public class DxChangeOrderController {
//@ApiOperation("深度保存对象")
@PostMapping({"createECN"})
public ApiResult recursionECN(@RequestBody Map entity, HttpServletRequest request) {
DxPartVO part = null;
DxChangeNoticeVo ecn = null;
try {
String jsonString = JSON.toJSONString(entity);
DxChangeNoticeVo entityVO = JSON.parseObject(jsonString, DxChangeNoticeVo.class);
......@@ -76,12 +83,62 @@ public class DxChangeOrderController {
//更新link
//part = DxPartService.updateDxPartUsageLink(entityVO);
} else {
//part = DxPartService.createDxPart(entityVO, portUserName);
ecn = DXChangeOrderService.createECN(entityVO, portUserName);
}
return ApiResult.ok(part);
return ApiResult.ok(ecn);
} catch (Exception e) {
e.printStackTrace();
return ApiResult.error("501", e.getLocalizedMessage(), e);
}
}
@GetMapping({"/DxReportedAgainst/search"})
//@ApiOperation("获取PR相关对象")
public List getAffectedDataLink(@RequestParam(value = "targetId", required = false) String targetId, @RequestParam(value = "sourceId", required = false) String sourceId, HttpServletRequest request) {
List<DxReportedAgainstVo> resultList = new ArrayList<DxReportedAgainstVo>();
try {
if (StringUtils.isNotEmpty(sourceId)) {
resultList = DXChangeOrderService.getChangeDataLink(Long.valueOf(sourceId),null);
return resultList;
}
if (StringUtils.isNotEmpty(targetId)) {
resultList = DXChangeOrderService.getAffectedDataLink(Long.valueOf(targetId), "DxProblemReport");
return resultList;
}
} catch (Exception e) {
e.printStackTrace();
}
return resultList;
}
@GetMapping({"/DxChangeAffectedData/search"})
//@ApiOperation("获取更改相关对象")
public List getChangeAffectedDataLink(@RequestParam(value = "targetId", required = false) String targetId, @RequestParam(value = "sourceId", required = false) String sourceId, @RequestParam("sourceIdType") String sourceIdType, HttpServletRequest request) {
List<DxChangeAffectedDataVo> resultList = new ArrayList<DxChangeAffectedDataVo>();
try {
if (StringUtils.isNotEmpty(sourceId)) {
resultList = DXChangeOrderService.getChangeDataLink(Long.valueOf(sourceId),null);
return resultList;
}
if (StringUtils.isNotEmpty(targetId)) {
resultList = DXChangeOrderService.getAffectedDataLink(Long.valueOf(targetId), sourceIdType);
return resultList;
}
} catch (Exception e) {
e.printStackTrace();
}
return resultList;
}
@GetMapping({"/version/getWorkingCopy"})
//@ApiOperation("获取变更对象")
public IdVO getWorkingCopy(@RequestParam("id") Long id, @RequestParam("type") String type, HttpServletRequest request) {
IdVO idVO = null;
try {
idVO = DXChangeOrderService.getWorkingCopyById(id, type);
} catch (Exception e) {
e.printStackTrace();
}
return idVO;
}
}
package com.yonde.change.service;
import com.yonde.basedata.search.SearchOperatorEnumUtil;
import com.yonde.basedata.vo.DxDocumentFolderVO;
import com.yonde.basedata.vo.IdVO;
import com.yonde.basedata.vo.RevisionControlledVO;
import com.yonde.change.util.WTChangeDataUtil;
import com.yonde.change.vo.DxChangeAffectedDataVo;
import com.yonde.change.vo.DxChangeAfterDataVo;
import com.yonde.change.vo.DxReportedAgainstVo;
import com.yonde.change.vo.ecn.DxAddressedByVo;
import com.yonde.change.vo.ecn.DxChangeNoticeVo;
import com.yonde.change.vo.ecr.DxChangeRequestVo;
import com.yonde.change.vo.pr.DxProblemReportVo;
import com.yonde.common.ChangeOrderUtil;
import com.yonde.common.CommonUtil;
import com.yonde.common.RfUtil;
import com.yonde.doc.service.DxDocService;
import wt.change2.Changeable2;
import wt.change2.WTChangeOrder2;
import com.yonde.common.*;
import com.yonde.context.vo.DxContextVO;
import com.yonde.doc.vo.DxDocumentVO;
import com.yonde.part.vo.DxPartVO;
import org.apache.commons.lang.StringUtils;
import org.springframework.util.CollectionUtils;
import wt.change2.*;
import wt.doc.WTDocument;
import wt.fc.Persistable;
import wt.fc.PersistenceHelper;
import wt.fc.QueryResult;
import wt.fc.WTObject;
import wt.fc.collections.WTValuedHashMap;
import wt.folder.Folder;
import wt.folder.FolderHelper;
import wt.inf.container.WTContainer;
import wt.method.RemoteAccess;
import wt.method.RemoteMethodServer;
import wt.part.WTPart;
import wt.type.TypeDefinitionReference;
import wt.type.TypedUtilityServiceHelper;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
public class DXChangeOrderService {
public class DXChangeOrderService implements RemoteAccess {
public void createPR(DxProblemReportVo problemReportVo) {
public static DxProblemReportVo createPR(DxProblemReportVo entityVO, String userName) throws Exception {
if (!RemoteMethodServer.ServerFlag) {
return (DxProblemReportVo) RemoteMethodServer.getDefault().invoke("createPR", DXChangeOrderService.class.getName(), null,
new Class[] { DxProblemReportVo.class, String.class},
new Object[] { entityVO, userName});
}
CommonUtil.initSessionContext(userName);
WTContainer container = null;
WTChangeIssue changeIssue = null;
if (ObjectsUtil.nonNull(entityVO.getId())) {
WTObject objectById = RfUtil.getWTObjectById(entityVO.getId());
if (ObjectsUtil.nonNull(objectById)) {
changeIssue = (WTChangeIssue) objectById;
}
}
if (ObjectsUtil.isNull(changeIssue)) {
changeIssue = WTChangeIssue.newWTChangeIssue("");
}
changeIssue.setNumber(entityVO.getNumber());
changeIssue.setName(entityVO.getName());
DxContextVO dxContext = entityVO.getDxContext();
if (ObjectsUtil.nonNull(dxContext)) {
String contextName = dxContext.getName();
container = ContainerUtil.getContainerByName(contextName);
}
if (ObjectsUtil.isNull(container)) {
return null;
}
if (container != null) {
changeIssue.setContainer(container);
String folderPath = null;
DxDocumentFolderVO folderVO = null;
if (ObjectsUtil.nonNull(folderVO)) {
folderPath = folderVO.getFullPath();
}
//设置ecr的文件夹路径
Folder location = DxCommonUtils.makeFolder(folderPath, container.getContainerReference());
if(location != null) {
WTValuedHashMap loacationMap = new WTValuedHashMap();
loacationMap.put(changeIssue, location);
FolderHelper.assignLocations(loacationMap);
} else {
System.out.println("未找到工程更改文件夹");
}
}
changeIssue = (WTChangeIssue) ChangeHelper2.service.saveChangeIssue(changeIssue);
//更新软属性
if (ObjectsUtil.nonNull(entityVO.getDynamicAttrs())) {
IBAUtil.forceSetIBAValues(changeIssue, entityVO.getDynamicAttrs());
}
changeIssue = (WTChangeIssue) PersistenceHelper.manager.refresh(changeIssue);
//设置受影响对象
List<DxReportedAgainstVo> reportedAgainsts = entityVO.getReportedAgainsts();
if (!CollectionUtils.isEmpty(reportedAgainsts)) {
Vector affectedDataVector = new Vector();
for (DxReportedAgainstVo reportedAgainst : reportedAgainsts) {
Long targetId = reportedAgainst.getPboId();
String pboType = reportedAgainst.getPboType();
String typeStr = SearchOperatorEnumUtil.typeStrPrefixMap.get(pboType);
Persistable oid = CommonUtil.getPersistableByOid("OR:" + typeStr + targetId);
affectedDataVector.add(oid);
//ifc = ChangeOrderUtil.addChangeableToChangeIssue(ifc, (Changeable2) oid);
}
ChangeOrderUtil.setIssueAffectedData(changeIssue, affectedDataVector);
}
return new DxProblemReportVo(changeIssue);
}
public void createECR(DxChangeRequestVo changeRequestVo) {
public static DxChangeRequestVo createECR(DxChangeRequestVo entityVO, String userName) throws Exception {
if (!RemoteMethodServer.ServerFlag) {
return (DxChangeRequestVo) RemoteMethodServer.getDefault().invoke("createECR", DXChangeOrderService.class.getName(), null,
new Class[] { DxChangeRequestVo.class, String.class},
new Object[] { entityVO, userName});
}
CommonUtil.initSessionContext(userName);
WTChangeRequest2 ecr = null;
WTContainer container = null;
String name = entityVO.getName();
if (ObjectsUtil.nonNull(entityVO.getId())) {
WTObject objectById = RfUtil.getWTObjectById(entityVO.getId());
if (ObjectsUtil.nonNull(objectById)) {
ecr = (WTChangeRequest2) objectById;
}
}
if (ObjectsUtil.isNull(ecr)) {
ecr = WTChangeRequest2.newWTChangeRequest2(name);
}
String number = entityVO.getNumber();
if (number != null) {
ecr.setNumber(number);
}
DxContextVO dxContext = entityVO.getDxContext();
if (ObjectsUtil.nonNull(dxContext)) {
String contextName = dxContext.getName();
container = ContainerUtil.getContainerByName(contextName);
}
if (ObjectsUtil.isNull(container)) {
return null;
}
if (container != null) {
ecr.setContainer(container);
String folderPath = null;
DxDocumentFolderVO folderVO = null;
if (ObjectsUtil.nonNull(folderVO)) {
folderPath = folderVO.getFullPath();
}
//设置ecr的文件夹路径
Folder location = DxCommonUtils.makeFolder(folderPath, container.getContainerReference());
if(location != null) {
WTValuedHashMap loacationMap = new WTValuedHashMap();
loacationMap.put(ecr, location);
FolderHelper.assignLocations(loacationMap);
} else {
System.out.println("未找到工程更改文件夹");
}
}
String type = entityVO.getSubTypeName();
if (StringUtils.isNotEmpty(type)) {
TypeDefinitionReference tdr = TypedUtilityServiceHelper.service
.getTypeDefinitionReference(type);
ecr.setTypeDefinitionReference(tdr);
}
ecr = (WTChangeRequest2) ChangeHelper2.service.saveChangeRequest(ecr);
//更新软属性
if (ObjectsUtil.nonNull(entityVO.getDynamicAttrs())) {
IBAUtil.forceSetIBAValues(ecr, entityVO.getDynamicAttrs());
}
ecr = (WTChangeRequest2) PersistenceHelper.manager.refresh(ecr);
//设置受影响对象
List<DxChangeAffectedDataVo> affectedDatas = entityVO.getChangeAffectedDatas();
Vector affectedDataVector = new Vector();
if (!CollectionUtils.isEmpty(affectedDatas)) {
for (DxChangeAffectedDataVo affectedData : affectedDatas) {
Long targetId = affectedData.getTargetId();
String pboType = affectedData.getPboType();
String typeStr = SearchOperatorEnumUtil.typeStrPrefixMap.get(pboType);
Persistable oid = CommonUtil.getPersistableByOid("OR:" + typeStr + targetId);
affectedDataVector.add(oid);
}
ChangeOrderUtil.setECRAffectedData(ecr, affectedDataVector);
}
DxChangeRequestVo dxChangeRequestVo = new DxChangeRequestVo(ecr);
return dxChangeRequestVo;
}
public static DxChangeNoticeVo createECN(DxChangeNoticeVo changeNoticeVo, String userName) throws Exception {
if (!RemoteMethodServer.ServerFlag) {
return (DxChangeNoticeVo) RemoteMethodServer.getDefault().invoke("checkin", DxDocService.class.getName(), null,
return (DxChangeNoticeVo) RemoteMethodServer.getDefault().invoke("createECN", DXChangeOrderService.class.getName(), null,
new Class[] { DxChangeNoticeVo.class, String.class},
new Object[] { changeNoticeVo, userName});
}
CommonUtil.initSessionContext(userName);
WTChangeOrder2 wtChangeOrder2 = ChangeOrderUtil.createWTChangeOrder2(changeNoticeVo.getName(), null, null, "",changeNoticeVo.getDynamicAttrs());
WTChangeOrder2 wtChangeOrder2 = null;
if (ObjectsUtil.nonNull(changeNoticeVo.getId())) {
WTObject objectById = RfUtil.getWTObjectById(changeNoticeVo.getId());
if (ObjectsUtil.nonNull(objectById)) {
wtChangeOrder2 = (WTChangeOrder2) objectById;
}
}
if (ObjectsUtil.isNull(wtChangeOrder2)) {
wtChangeOrder2 = WTChangeOrder2.newWTChangeOrder2(changeNoticeVo.getName());
}
wtChangeOrder2 = ChangeOrderUtil.createWTChangeOrder2(wtChangeOrder2, changeNoticeVo.getName(), null,
null, "",changeNoticeVo.getDynamicAttrs());
//更新软属性
if (ObjectsUtil.nonNull(changeNoticeVo.getDynamicAttrs())) {
IBAUtil.forceSetIBAValues(wtChangeOrder2, changeNoticeVo.getDynamicAttrs());
}
wtChangeOrder2 = (WTChangeOrder2) PersistenceHelper.manager.refresh(wtChangeOrder2);
//设置受影响对象
List<Changeable2> affectedDataList = new ArrayList<Changeable2>();
List<DxChangeAffectedDataVo> affectedDatas = changeNoticeVo.getChangeAffectedDatas();
for (DxChangeAffectedDataVo affectedData : affectedDatas) {
String pboClass = affectedData.getPboType();
String prefix = SearchOperatorEnumUtil.typeStrPrefixMap.get(pboClass);
......@@ -46,12 +224,185 @@ public class DXChangeOrderService {
affectedDataList.add(wtObjectByOid);
}
wtChangeOrder2 = ChangeOrderUtil.addAffectedDataToChangeNotice(wtChangeOrder2, affectedDataList, null);
//设置产生对象
List<Changeable2> afterDataList = new ArrayList<Changeable2>();
List<DxChangeAfterDataVo> referenceLink = changeNoticeVo.getSourceDxCMReferenceLink();
for (DxChangeAfterDataVo dxChangeAfterDataVo : referenceLink) {
String pboClass = dxChangeAfterDataVo.getPboType();
String prefix = SearchOperatorEnumUtil.typeStrPrefixMap.get(pboClass);
Long pboId = dxChangeAfterDataVo.getPboId();
Changeable2 wtObjectByOid = (Changeable2) RfUtil.getWTObjectByOid("OR:" + prefix + pboId);
afterDataList.add(wtObjectByOid);
}
ChangeOrderUtil.addChangeableAfterToChangeNotice(wtChangeOrder2, afterDataList, null);
//TODO
ChangeOrderUtil.addChangeNoticeToChangeRequest(wtChangeOrder2,null);
//关联ECN、ECR
List<DxAddressedByVo> addressedBys = changeNoticeVo.getAddressedBys();
if (!CollectionUtils.isEmpty(addressedBys)) {
for (DxAddressedByVo addressedBy : addressedBys) {
DxChangeRequestVo source = addressedBy.getSource();
String prefix = SearchOperatorEnumUtil.typeStrPrefixMap.get(source.getDxClassname());
String oid = "OR:" + prefix + source.getId();
WTChangeRequest2 persistableByOid = (WTChangeRequest2) CommonUtil.getPersistableByOid(oid);
if (ObjectsUtil.nonNull(persistableByOid)) {
ChangeOrderUtil.addChangeNoticeToChangeRequest(wtChangeOrder2,persistableByOid);
}
}
}
changeNoticeVo = new DxChangeNoticeVo(wtChangeOrder2);
return changeNoticeVo;
}
/**
* 根据pbo 获取关联变更对象
* @param id
* @param sourceIdType
* @return
* @throws Exception
*/
public static List getAffectedDataLink(Long id, String sourceIdType) throws Exception {
if (!RemoteMethodServer.ServerFlag) {
return (List) RemoteMethodServer.getDefault().invoke("getAffectedDataLink", DXChangeOrderService.class.getName(), null,
new Class[] { Long.class, String.class },
new Object[] { id, sourceIdType });
}
CommonUtil.initSessionContext(null);
List resultList = new ArrayList();
WTObject wtObjectById = RfUtil.getWTObjectById(id);
RevisionControlledVO revisionControlledVO = null;
if (wtObjectById instanceof WTPart) {
revisionControlledVO = new DxPartVO((WTPart) wtObjectById);
} else if (wtObjectById instanceof WTDocument) {
revisionControlledVO = new DxDocumentVO((WTDocument) wtObjectById);
} else {
// TODO
}
if ("DxProblemReport".equalsIgnoreCase(sourceIdType)) {
List<WTChangeIssue> changeable = WTChangeDataUtil.getIssueByChangeable((Changeable2) wtObjectById);
if (!CollectionUtils.isEmpty(changeable)) {
for (WTChangeIssue wtChangeIssue : changeable) {
DxProblemReportVo reportVo = new DxProblemReportVo(wtChangeIssue);
DxReportedAgainstVo againstVo = new DxReportedAgainstVo(reportVo, revisionControlledVO);
resultList.add(againstVo);
}
}
}
if ("DxChangeRequest".equalsIgnoreCase(sourceIdType)) {
List<WTChangeRequest2> request2List = WTChangeDataUtil.getECRByChangeable((Changeable2) wtObjectById);
if (!CollectionUtils.isEmpty(request2List)) {
for (WTChangeRequest2 request2 : request2List) {
DxChangeRequestVo requestVo = new DxChangeRequestVo(request2);
DxChangeAffectedDataVo dataVo = new DxChangeAffectedDataVo(revisionControlledVO, requestVo);
resultList.add(dataVo);
}
}
}
if ("DxChangeNotice".equalsIgnoreCase(sourceIdType)) {
List<WTChangeOrder2> order2s = WTChangeDataUtil.getECNByAffectChange((Changeable2) wtObjectById);
if (!CollectionUtils.isEmpty(order2s)) {
for (WTChangeOrder2 order2 : order2s) {
DxChangeNoticeVo noticeVo = new DxChangeNoticeVo(order2);
DxChangeAffectedDataVo dataVo = new DxChangeAffectedDataVo(revisionControlledVO, noticeVo);
resultList.add(dataVo);
}
}
}
//TODO 产生对象集合
if ("AfterAffected".equalsIgnoreCase(sourceIdType)) {
List<WTChangeOrder2> order2s = WTChangeDataUtil.getECNByChangingChange((Changeable2) wtObjectById);
if (!CollectionUtils.isEmpty(order2s)) {
for (WTChangeOrder2 order2 : order2s) {
DxChangeNoticeVo noticeVo = new DxChangeNoticeVo(order2);
//DxChangeAffectedDataVo dataVo = new DxChangeAffectedDataVo(revisionControlledVO, noticeVo);
resultList.add(noticeVo);
}
}
}
return resultList;
}
/**
* 根据变更对象 获取关联PBO
* @param id
* @param sourceIdType
* @return
* @throws Exception
*/
public static List getChangeDataLink(Long id, String sourceIdType) throws Exception {
if (!RemoteMethodServer.ServerFlag) {
return (List) RemoteMethodServer.getDefault().invoke("getChangeDataLink", DXChangeOrderService.class.getName(), null,
new Class[] { Long.class, String.class },
new Object[] { id, sourceIdType });
}
CommonUtil.initSessionContext(null);
List resultList = new ArrayList();
WTObject wtObjectById = RfUtil.getWTObjectById(id);
if (wtObjectById instanceof WTChangeOrder2) {
WTChangeOrder2 changeOrder2 = (WTChangeOrder2) wtObjectById;
DxChangeNoticeVo noticeVo = new DxChangeNoticeVo(changeOrder2);
List<WTObject> changeBefore = ChangeOrderUtil.getChangeBefore(changeOrder2);
for (WTObject wtObject : changeBefore) {
IdVO changeableVO = WTChangeDataUtil.buildChangeableVO(wtObject);
DxChangeAffectedDataVo dataVo = new DxChangeAffectedDataVo((RevisionControlledVO) changeableVO, noticeVo);
resultList.add(dataVo);
}
return resultList;
}
if (wtObjectById instanceof WTChangeRequest2) {
WTChangeRequest2 changeRequest2 = (WTChangeRequest2) wtObjectById;
DxChangeRequestVo requestVo = new DxChangeRequestVo(changeRequest2);
List<WTObject> changeBefore = ChangeOrderUtil.getChangeBefore(changeRequest2);
for (WTObject wtObject : changeBefore) {
IdVO changeableVO = WTChangeDataUtil.buildChangeableVO(wtObject);
DxChangeAffectedDataVo dataVo = new DxChangeAffectedDataVo((RevisionControlledVO) changeableVO, requestVo);
resultList.add(dataVo);
}
return resultList;
}
if (wtObjectById instanceof WTChangeIssue) {
WTChangeIssue changeIssue = (WTChangeIssue) wtObjectById;
DxProblemReportVo reportVo = new DxProblemReportVo(changeIssue);
List<WTObject> changeBefore = ChangeOrderUtil.getChangeBefore(changeIssue);
for (WTObject wtObject : changeBefore) {
IdVO changeableVO = WTChangeDataUtil.buildChangeableVO(wtObject);
DxReportedAgainstVo againstVo = new DxReportedAgainstVo(reportVo, (RevisionControlledVO) changeableVO);
resultList.add(againstVo);
}
return resultList;
}
return resultList;
}
/**
* 根据id 获取变更对象
* @param id
* @param sourceIdType
* @return
* @throws Exception
*/
public static IdVO getWorkingCopyById(Long id, String sourceIdType) throws Exception {
if (!RemoteMethodServer.ServerFlag) {
return (IdVO) RemoteMethodServer.getDefault().invoke("getWorkingCopyById", DXChangeOrderService.class.getName(), null,
new Class[] { Long.class, String.class },
new Object[] { id, sourceIdType });
}
CommonUtil.initSessionContext(null);
WTObject wtObjectById = RfUtil.getWTObjectById(id);
IdVO idVO = null;
if (wtObjectById instanceof WTChangeOrder2) {
idVO = new DxChangeNoticeVo((WTChangeOrder2) wtObjectById);
} else if (wtObjectById instanceof WTChangeRequest2) {
idVO = new DxChangeRequestVo((WTChangeRequest2) wtObjectById);
} else {
// TODO
idVO = new DxProblemReportVo((WTChangeIssue) wtObjectById);
}
return idVO;
}
}
package com.yonde.change.util;
import com.ptc.core.meta.common.impl.TypeIdentifierUtilityHelper;
import com.yonde.basedata.vo.IdVO;
import com.yonde.common.CommonUtil;
import com.yonde.doc.vo.DxDocumentVO;
import com.yonde.part.vo.DxPartVO;
import wt.change2.*;
import wt.doc.WTDocument;
import wt.enterprise.RevisionControlled;
import wt.fc.ObjectIdentifier;
import wt.fc.PersistenceHelper;
import wt.fc.QueryResult;
import wt.fc.WTObject;
import wt.method.RemoteAccess;
import wt.method.RemoteMethodServer;
import wt.part.WTPart;
import wt.pdmlink.PDMLinkProduct;
import wt.query.QuerySpec;
import wt.query.SearchCondition;
import wt.util.WTException;
import wt.vc.VersionControlException;
import wt.vc.VersionControlHelper;
import wt.vc.baseline.Baseline;
import wt.vc.views.Variation2;
import java.lang.reflect.InvocationTargetException;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
public class WTChangeDataUtil implements RemoteAccess {
/**
* 根据oid获取产品名称
* @param oid
* @return
*/
public static PDMLinkProduct getProductByOid(String oid){
if (!RemoteMethodServer.ServerFlag) {
try {
return (PDMLinkProduct) RemoteMethodServer.getDefault().invoke(
"getProductByOid",
WTChangeDataUtil.class.getName(),
null,
new Class[] { String.class },
new Object[] { oid }
);
} catch (RemoteException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
/* try {
Persistable persistable = ToolUtils.getObjectByOid(oid);
if (persistable instanceof PDMLinkProduct) {
return (PDMLinkProduct) ToolUtils.getObjectByOid(oid);
} else if (persistable instanceof SubFolder) {
SubFolder subFolder = (SubFolder) ToolUtils.getObjectByOid(oid);
return (PDMLinkProduct) subFolder.getContainer();
} else if (persistable instanceof Cabinet) {
Cabinet cabinet = (Cabinet) ToolUtils.getObjectByOid(oid);
return (PDMLinkProduct) cabinet.getContainer();
}
} catch (WTException e) {
e.printStackTrace();
}*/
return null;
}
/**
* 获取行号信息
* @return
*/
public static String getLineInfo() {
StackTraceElement ste = new Throwable().getStackTrace()[1];
return ste.getFileName() + ": Line " + ste.getLineNumber();
}
/**
* This method is used to create ECR
*
* @param name
* name
* number
* @param attributes
* @param product
* @return
*/
/*public static WTChangeRequest2 createECR(String name, HashMap attributes, PDMLinkProduct product) {
WTChangeRequest2 ecr = null;
try {
ecr = WTChangeRequest2.newWTChangeRequest2(getStringValue((String) attributes.get("partNumber")));
//设置软类型
TypeDefinitionReference tdr = TypedUtilityServiceHelper.service
.getTypeDefinitionReference("CAIC.EngineeringChangeRequest");
ecr.setTypeDefinitionReference(tdr);
if (product != null){
ecr.setContainer(product);
}
ecr = (WTChangeRequest2) ChangeHelper2.service.saveChangeRequest(ecr);
String SecurityLabel = getStringValue((String) attributes.get("securityLevel"));
if (!StringUtil.isEmpty(SecurityLabel)){
IBAHelper.setIBAStringValue(ecr, "SECURITYLEVEL", SecurityLabel);
}
String PartNumber = getStringValue((String) attributes.get("partNumber"));
if (!StringUtil.isEmpty(PartNumber)){
IBAHelper.setIBAStringValue(ecr, "PartNumber", PartNumber);
}
String CUSTPHASE = getStringValue((String) attributes.get("custPhase"));
if (!StringUtil.isEmpty(CUSTPHASE)){
IBAHelper.setIBAStringValue(ecr, "CUSTPHASE", CUSTPHASE);
}
String ChangeBasis = getStringValue((String) attributes.get("changeBasis"));
if (!StringUtil.isEmpty(ChangeBasis)){
IBAHelper.setIBAStringValue(ecr, "ChangeBasis", ChangeBasis);
}
String ChangeBasisOther = getStringValue((String) attributes.get("changeBasisOther"));
if (!StringUtil.isEmpty(ChangeBasisOther)){
IBAHelper.setIBAStringValue(ecr, "ChangeBasisOther", ChangeBasisOther);
}
String ChangeBasisCoordination = getStringValue((String) attributes.get("changeBasisCoordination"));
if (!StringUtil.isEmpty(ChangeBasisCoordination)){
IBAHelper.setIBAStringValue(ecr, "ChangeBasisCoordination", ChangeBasisCoordination);
}
String changeReason = getStringValue((String) attributes.get("changeReason"));
if (!StringUtil.isEmpty(changeReason)){
//更改理由富文本
System.out.println(getLineInfo()+"----->"+changeReason);
}
String changeContent = getStringValue((String) attributes.get("designChangeContent"));
if (!StringUtil.isEmpty(changeContent)){
//更改内容富文本
System.out.println(getLineInfo()+"----->"+changeContent);
}
} catch (Exception e) {
e.printStackTrace();
}
return ecr;
}*/
/*public static WTChangeRequest2 createECP(String name, HashMap attributes, PDMLinkProduct product) {
WTChangeRequest2 ecr = null;
try {
ecr = WTChangeRequest2.newWTChangeRequest2(getStringValue((String) attributes.get("partNumber")));
//设置软类型
TypeDefinitionReference tdr = TypedUtilityServiceHelper.service
.getTypeDefinitionReference("CAIC.PartNumberChangeRequest");
ecr.setTypeDefinitionReference(tdr);
if (product != null){
ecr.setContainer(product);
}
ecr = (WTChangeRequest2) ChangeHelper2.service.saveChangeRequest(ecr);
String SecurityLabel = getStringValue((String) attributes.get("securityLevel"));
if (!StringUtil.isEmpty(SecurityLabel)){
IBAHelper.setIBAStringValue(ecr, "SECURITYLEVEL", SecurityLabel);
}
String PartNumber = getStringValue((String) attributes.get("partNumber"));
if (!StringUtil.isEmpty(PartNumber)){
IBAHelper.setIBAStringValue(ecr, "PartNumber", PartNumber);
}
String CUSTPHASE = getStringValue((String) attributes.get("custPhase"));
if (!StringUtil.isEmpty(CUSTPHASE)){
IBAHelper.setIBAStringValue(ecr, "CUSTPHASE", CUSTPHASE);
}
String ChangeBasis = getStringValue((String) attributes.get("changeBasis"));
if (!StringUtil.isEmpty(ChangeBasis)){
IBAHelper.setIBAStringValue(ecr, "ChangeBasis", ChangeBasis);
}
String ChangeBasisOther = getStringValue((String) attributes.get("changeBasisOther"));
if (!StringUtil.isEmpty(ChangeBasisOther)){
IBAHelper.setIBAStringValue(ecr, "ChangeBasisOther", ChangeBasisOther);
}
String ChangeBasisCoordination = getStringValue((String) attributes.get("changeBasisCoordination"));
if (!StringUtil.isEmpty(ChangeBasisCoordination)){
IBAHelper.setIBAStringValue(ecr, "ChangeBasisCoordination", ChangeBasisCoordination);
}
String changeReason = getStringValue((String) attributes.get("changeReason"));
if (!StringUtil.isEmpty(changeReason)){
//更改理由富文本
System.out.println(getLineInfo()+"----->"+changeReason);
}
String changeContent = getStringValue((String) attributes.get("designChangeContent"));
if (!StringUtil.isEmpty(changeContent)){
//更改内容富文本
System.out.println(getLineInfo()+"----->"+changeContent);
}
} catch (Exception e) {
e.printStackTrace();
}
return ecr;
}*/
/**
* retrive a not-null value of a given string
*
* @param value
* @return
*/
public static String getStringValue(String value) {
if (value == null)
return "";
value = value.trim();
return value;
}
/**
* 通过产品oid获取基线对象
* @param oid
* @return
*/
public static List getBaseLineByProductId(String oid){
List<Baseline> result = new ArrayList<Baseline>();
try {
PDMLinkProduct wtProduct = (PDMLinkProduct) CommonUtil.getPersistableByOid(oid);
if(wtProduct == null) return null;
ObjectIdentifier objProduct = PersistenceHelper.getObjectIdentifier(wtProduct);
QuerySpec criteria = new QuerySpec(Baseline.class);
criteria.appendSearchCondition(new SearchCondition(Baseline.class,
"containerReference.key",SearchCondition.EQUAL,objProduct));
QueryResult results = PersistenceHelper.manager.find(criteria);
while(results.hasMoreElements()){
Baseline wtECR = (Baseline)results.nextElement();
result.add(wtECR);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 获取更改请求
* @param changeable2
* @return
*/
public static List<WTChangeRequest2> getECRByChangeable(Changeable2 changeable2) {
List aWTECR = new ArrayList();
String user = "";
try {
user = wt.session.SessionHelper.manager.getPrincipal().getName();
wt.session.SessionHelper.manager.setAdministrator();
if (changeable2 == null) {
return null;
}
QueryResult results = ChangeHelper2.service.getRelevantChangeRequests(changeable2);
while (results.hasMoreElements()) {
WTChangeRequest2 wtECR = (WTChangeRequest2) results.nextElement();
aWTECR.add(wtECR);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (user != null && !user.equals(""))
wt.session.SessionHelper.manager.setPrincipal(user);
} catch (Exception e) {
// TODO: handle exception
}
}
return aWTECR;
}
/**
* 受影响对象关联ECN
* @param changeable2
* @return
*/
public static List<WTChangeOrder2> getECNByAffectChange(Changeable2 changeable2) {
List ecnList = new ArrayList();
String user = "";
try {
user = wt.session.SessionHelper.manager.getPrincipal().getName();
wt.session.SessionHelper.manager.setAdministrator();
if (changeable2 == null) {
return null;
}
QueryResult results = ChangeHelper2.service.getAffectingChangeActivities(changeable2);
while (results.hasMoreElements()) {
WTChangeActivity2 wtChangeActivity2 = (WTChangeActivity2) results.nextElement();
QueryResult orders = ChangeHelper2.service.getChangeOrder(wtChangeActivity2);
while (orders.hasMoreElements()) {
WTChangeOrder2 ecn = (WTChangeOrder2) orders.nextElement();
ecnList.add(ecn);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (user != null && !user.equals(""))
wt.session.SessionHelper.manager.setPrincipal(user);
} catch (Exception e) {
// TODO: handle exception
}
}
return ecnList;
}
/**
* 受影响对象关联ECN 自变更通告产生
* @param changeable2
* @return
*/
public static List<WTChangeOrder2> getECNByChangingChange(Changeable2 changeable2) {
List ecnList = new ArrayList();
String user = "";
try {
user = wt.session.SessionHelper.manager.getPrincipal().getName();
wt.session.SessionHelper.manager.setAdministrator();
if (changeable2 == null) {
return null;
}
QueryResult results = ChangeHelper2.service.getChangingChangeActivities(changeable2);
while (results.hasMoreElements()) {
WTChangeActivity2 wtChangeActivity2 = (WTChangeActivity2) results.nextElement();
QueryResult orders = ChangeHelper2.service.getChangeOrder(wtChangeActivity2);
while (orders.hasMoreElements()) {
WTChangeOrder2 ecn = (WTChangeOrder2) orders.nextElement();
ecnList.add(ecn);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (user != null && !user.equals(""))
wt.session.SessionHelper.manager.setPrincipal(user);
} catch (Exception e) {
// TODO: handle exception
}
}
return ecnList;
}
/**
* 获取问题请求
* @param changeable2
* @return
*/
public static List<WTChangeIssue> getIssueByChangeable(Changeable2 changeable2) {
List changeIssueList = new ArrayList();
String user = "";
try {
user = wt.session.SessionHelper.manager.getPrincipal().getName();
wt.session.SessionHelper.manager.setAdministrator();
if (changeable2 == null) {
return null;
}
QueryResult results = ChangeHelper2.service.getReportedAgainstChangeIssue(changeable2);
while (results.hasMoreElements()) {
WTChangeIssue wtChangeIssue = (WTChangeIssue) results.nextElement();
changeIssueList.add(wtChangeIssue);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (user != null && !user.equals(""))
wt.session.SessionHelper.manager.setPrincipal(user);
} catch (Exception e) {
// TODO: handle exception
}
}
return changeIssueList;
}
/**
* 按照编号,版本获取前一大版的历史版本Part对象
*
* @return 上一大版本的最新小版本对象
*/
public static WTPart getWTPartPreviousVersion(WTPart part)
throws WTException {
if (part == null)
return null;
String version = part.getVersionIdentifier().getValue();
String view = part.getViewName();
int order = 0;
Variation2 type2 = part.getVariation2();
if (type2 != null) {
order = type2.getOrder();
}
WTPart previousVersion = null;
QueryResult qr = VersionControlHelper.service.allVersionsOf(part.getMaster());// 获取所有版本的物料
WTPart tempPart = null;
boolean flag = false;
while (qr.hasMoreElements()) {
Object object = (Object) qr.nextElement();
if (object instanceof WTPart) {
tempPart = (WTPart) object;
if (!tempPart.getViewName().equals(view)) {
continue;
}
if (tempPart.getVersionIdentifier().getValue().equals(version)) {
flag = true;
continue;
}
if (!flag) {
continue;
}
if (order > 0) {
int order2 = 0;
Variation2 temptype2 = tempPart.getVariation2();
if (temptype2 != null) {
order2 = temptype2.getOrder();
}
if (order != order2) {
continue;
}
}
if (isGreaterThan(part, tempPart)) {
previousVersion = tempPart;
break;
}
}
}
return previousVersion;
}
/**
*
* 比较版本
*
* @param rc1
* @param rc2
* @return
* @throws VersionControlException
*/
public static boolean isGreaterThan(RevisionControlled rc1, RevisionControlled rc2) throws VersionControlException {
return rc1.getVersionIdentifier().getSeries().greaterThan(rc2.getVersionIdentifier().getSeries());
}
public static String getECPNumberByPart(WTPart part)throws Exception{
String result = "";
WTPart prePart = getWTPartPreviousVersion(part);
WTChangeRequest2 ecp = null;
QueryResult results = ChangeHelper2.service.getRelevantChangeRequests(prePart);
while (results.hasMoreElements()) {
WTChangeRequest2 wtECR = (WTChangeRequest2) results.nextElement();
String objType = TypeIdentifierUtilityHelper.service.getTypeIdentifier(wtECR)+"";
if(objType.endsWith("CAIC.PartNumberChangeRequest")){
ecp = wtECR;
result = ecp.getNumber();
}
}
return result;
}
public static IdVO buildChangeableVO(WTObject changeable2) throws Exception {
IdVO idVO = null;
if (changeable2 instanceof WTPart) {
idVO = new DxPartVO((WTPart) changeable2);
return idVO;
}
if (changeable2 instanceof WTDocument) {
idVO = new DxDocumentVO((WTDocument) changeable2);
return idVO;
}
return idVO;
}
public static void main(String[] args) {
//获取软属性
// IBAHelper.getIBAStringValue(product, ibaKey);
//设置软属性
// IBAHelper.setIBAStringValue(obj, ibaKey, value);
//通过oid获取对象
// ToolUtils.getObjectByOid(oid);
}
}
package com.yonde.change.vo;
import com.yonde.basedata.vo.IdVO;
import com.yonde.basedata.vo.RevisionControlledVO;
import com.yonde.common.entity.DxIterationVOHolder;
import java.io.Serializable;
/**
* 受影响对象LINK
*/
public class DxChangeAffectedDataVo {
public class DxChangeAffectedDataVo implements Serializable {
private String pboType;
private Long pboId;
......@@ -29,11 +32,32 @@ public class DxChangeAffectedDataVo {
public String displayDxViewName;
private RevisionControlledVO target;
private IdVO source;
private Long sourceId;
private String sourceIdType;
private Long targetId;
private String targetIdType;
public DxChangeAffectedDataVo() {
}
public DxChangeAffectedDataVo(RevisionControlledVO target, IdVO source) {
this.target = target;
this.targetId = target.getId();
this.targetIdType = target.getSubTypeName();
this.source = source;
this.sourceId = source.getId();
this.sourceIdType = source.getSubTypeName();
}
public IdVO getSource() {
return source;
}
public void setSource(IdVO source) {
this.source = source;
}
public String getPboType() {
return pboType;
}
......
......@@ -12,6 +12,24 @@ public class DxChangeAfterDataVo {
private String sourceIdType;
private Long targetId;
private String targetIdType;
private String pboType;
private Long pboId;
public String getPboType() {
return pboType;
}
public void setPboType(String pboType) {
this.pboType = pboType;
}
public Long getPboId() {
return pboId;
}
public void setPboId(Long pboId) {
this.pboId = pboId;
}
public RevisionControlledVO getTarget() {
return target;
......
package com.yonde.change.vo;
import com.yonde.basedata.vo.IdVO;
import java.io.Serializable;
public class DxChangeItemVo extends IdVO implements Serializable {
}
package com.yonde.change.vo;
import com.yonde.basedata.vo.IdVO;
import com.yonde.basedata.vo.RevisionControlledVO;
import com.yonde.change.vo.pr.DxProblemReportVo;
import com.yonde.common.ObjectsUtil;
import java.io.Serializable;
/**
* 受影响对象
* PR Link
*/
public class DxReportedAgainstVo implements Serializable {
public class DxReportedAgainstVo extends IdVO implements Serializable {
private RevisionControlledVO target;
private DxProblemReportVo source;
private Long sourceId;
private String sourceIdType;
private RevisionControlledVO target;//
private Long targetId;
private String targetIdType;
private Long pboId;
private String pboType;
public DxReportedAgainstVo(DxProblemReportVo source, RevisionControlledVO target) {
if (ObjectsUtil.nonNull(source)) {
this.source = source;
this.sourceId = source.getId();
this.sourceIdType = source.getDxClassname().substring(source.getDxClassname().lastIndexOf(".") + 1);
this.id = sourceId;
this.createTime = source.getCreateTime();
this.modifyTime = source.getModifyTime();
}
if (ObjectsUtil.nonNull(target)) {
this.target = target;
this.targetId = target.getId();
this.targetIdType = target.getDxClassname().substring(target.getDxClassname().lastIndexOf(".") + 1);
}
}
public Long getPboId() {
return pboId;
}
public void setPboId(Long pboId) {
this.pboId = pboId;
}
public String getPboType() {
return pboType;
}
public void setPboType(String pboType) {
this.pboType = pboType;
}
public DxProblemReportVo getSource() {
return source;
}
public void setSource(DxProblemReportVo source) {
this.source = source;
}
public RevisionControlledVO getTarget() {
return target;
}
......
package com.yonde.change.vo.ecn;
import com.yonde.basedata.entity.users.DxUserVO;
import com.yonde.basedata.vo.DxOrganizationVO;
import com.yonde.basedata.vo.IdVO;
import com.yonde.basedata.vo.ObjFileLinkVO;
import com.yonde.change.vo.DxChangeAffectedDataVo;
import com.yonde.change.vo.DxChangeAfterDataVo;
import com.yonde.common.ChangeOrderUtil;
import com.yonde.common.DxCommonUtils;
import com.yonde.common.IBAHelper;
import com.yonde.common.ObjectsUtil;
import com.yonde.context.vo.DxContextVO;
import wt.change2.WTChangeOrder2;
import wt.org.WTOrganization;
import wt.util.WTException;
import wt.type.ClientTypedUtility;
import java.io.Serializable;
import java.util.List;
import java.util.Locale;
public class DxChangeNoticeVo extends IdVO implements Serializable {
......@@ -45,10 +47,15 @@ public class DxChangeNoticeVo extends IdVO implements Serializable {
this.number = wtChangeOrder2.getNumber();
this.state = wtChangeOrder2.getState().getState().toString();
WTOrganization organization = wtChangeOrder2.getOrganization();
this.setDxOrganization(new DxOrganizationVO(organization));
if (ObjectsUtil.nonNull(organization)) {
this.setDxOrganization(new DxOrganizationVO(organization));
}
this.setDxContext(new DxContextVO(wtChangeOrder2.getContainer()));
this.setModifier(new DxUserVO(wtChangeOrder2.getModifier().getPrincipal()));
this.setCreator(new DxUserVO(wtChangeOrder2.getCreator().getPrincipal()));
this.dynamicAttrs = IBAHelper.getAllIBAValues(wtChangeOrder2);
this.subTypeName = "DxChangeNotice";//TODO 要映射
this.subTypeDisplayName = ClientTypedUtility.getLocalizedTypeName(wtChangeOrder2, Locale.SIMPLIFIED_CHINESE);
this.setObjFileLinks(DxCommonUtils.buildObjFileLinks(wtChangeOrder2));
//ChangeOrderUtil.get
......
package com.yonde.change.vo.ecr;
import com.yonde.basedata.entity.users.DxUserVO;
import com.yonde.basedata.vo.DxDocumentFolderVO;
import com.yonde.basedata.vo.DxOrganizationVO;
import com.yonde.basedata.vo.IdVO;
import com.yonde.basedata.vo.ObjFileLinkVO;
import com.yonde.change.vo.DxChangeAffectedDataVo;
import com.yonde.common.DxCommonUtils;
import com.yonde.common.IBAHelper;
import com.yonde.common.ObjectsUtil;
import com.yonde.context.vo.DxContextVO;
import org.apache.commons.lang.StringUtils;
import wt.change2.WTChangeRequest2;
import wt.org.WTOrganization;
import wt.type.ClientTypedUtility;
import java.io.Serializable;
import java.util.List;
import java.util.Locale;
/**
* ECR
*/
public class DxChangeRequestVo extends IdVO {
public class DxChangeRequestVo extends IdVO implements Serializable {
private String number;
private String name;
......@@ -23,8 +34,111 @@ public class DxChangeRequestVo extends IdVO {
private Long dxOrganizationId;
private String dxOrganizationIdType;
private DxDocumentFolderVO folderVO;
private List<ObjFileLinkVO> objFileLinks;
//受影响对象
private List<DxChangeAffectedDataVo> changeAffectedDatas;
public DxChangeRequestVo(WTChangeRequest2 ecr) throws Exception{
super(ecr);
this.name = ecr.getName();
this.number = ecr.getNumber();
this.state = ecr.getState().getState().getDisplay();
WTOrganization organization = ecr.getOrganization();
if (ObjectsUtil.nonNull(organization)) {
this.setDxOrganization(new DxOrganizationVO(organization));
}
this.setDxContext(new DxContextVO(ecr.getContainer()));
this.subTypeName = "DxChangeRequest";//TODO 要映射
this.subTypeDisplayName = ClientTypedUtility.getLocalizedTypeName(ecr, Locale.SIMPLIFIED_CHINESE);
this.setModifier(new DxUserVO(ecr.getModifier().getPrincipal()));
this.setCreator(new DxUserVO(ecr.getCreator().getPrincipal()));
this.dynamicAttrs = IBAHelper.getAllIBAValues(ecr);
if (StringUtils.isNotEmpty(ecr.getDescription())) {
this.getDynamicAttrs().put("description", ecr.getDescription());
}
this.setObjFileLinks(DxCommonUtils.buildObjFileLinks(ecr));
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public DxContextVO getDxContext() {
return dxContext;
}
public void setDxContext(DxContextVO dxContext) {
this.dxContext = dxContext;
}
public Long getDxContextId() {
return dxContextId;
}
public void setDxContextId(Long dxContextId) {
this.dxContextId = dxContextId;
}
public DxOrganizationVO getDxOrganization() {
return dxOrganization;
}
public void setDxOrganization(DxOrganizationVO dxOrganization) {
this.dxOrganization = dxOrganization;
}
public Long getDxOrganizationId() {
return dxOrganizationId;
}
public void setDxOrganizationId(Long dxOrganizationId) {
this.dxOrganizationId = dxOrganizationId;
}
public String getDxOrganizationIdType() {
return dxOrganizationIdType;
}
public void setDxOrganizationIdType(String dxOrganizationIdType) {
this.dxOrganizationIdType = dxOrganizationIdType;
}
public List<ObjFileLinkVO> getObjFileLinks() {
return objFileLinks;
}
public void setObjFileLinks(List<ObjFileLinkVO> objFileLinks) {
this.objFileLinks = objFileLinks;
}
public List<DxChangeAffectedDataVo> getChangeAffectedDatas() {
return changeAffectedDatas;
}
public void setChangeAffectedDatas(List<DxChangeAffectedDataVo> changeAffectedDatas) {
this.changeAffectedDatas = changeAffectedDatas;
}
}
package com.yonde.change.vo.pr;
import com.yonde.basedata.entity.users.DxUserVO;
import com.yonde.basedata.vo.DxOrganizationVO;
import com.yonde.basedata.vo.IdVO;
import com.yonde.basedata.vo.ObjFileLinkVO;
import com.yonde.change.vo.DxReportedAgainstVo;
import com.yonde.common.DxCommonUtils;
import com.yonde.common.IBAHelper;
import com.yonde.common.ObjectsUtil;
import com.yonde.context.vo.DxContextVO;
import org.apache.commons.lang.StringUtils;
import wt.change2.WTChangeIssue;
import wt.org.WTOrganization;
import wt.type.ClientTypedUtility;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Locale;
/**
* PR
*/
public class DxProblemReportVo extends IdVO implements Serializable {
private String name;
private String number;
private String state;
private String problemSource;
private String problemCategory;
private String comments;
......@@ -20,8 +36,112 @@ public class DxProblemReportVo extends IdVO implements Serializable {
private String problemIdentity;
private Short technologyPriority;
private DxContextVO dxContext;
private Long dxContextId;
private DxOrganizationVO dxOrganization;
private Long dxOrganizationId;
private String dxOrganizationIdType;
private List<DxReportedAgainstVo> reportedAgainsts;
private List<ObjFileLinkVO> objFileLinks;
public DxProblemReportVo() {
}
public DxProblemReportVo(WTChangeIssue ifc) throws Exception {
super(ifc);
this.name = ifc.getName();
this.number = ifc.getNumber();
this.state = ifc.getState().getState().toString();
WTOrganization organization = ifc.getOrganization();
if (ObjectsUtil.nonNull(organization)) {
this.setDxOrganization(new DxOrganizationVO(organization));
}
this.setDxContext(new DxContextVO(ifc.getContainer()));
this.subTypeName = "DxProblemReport";//TODO 要映射
this.subTypeDisplayName = ClientTypedUtility.getLocalizedTypeName(ifc, Locale.SIMPLIFIED_CHINESE);
this.setModifier(new DxUserVO(ifc.getModifier().getPrincipal()));
this.setCreator(new DxUserVO(ifc.getCreator().getPrincipal()));
this.dynamicAttrs = IBAHelper.getAllIBAValues(ifc);
if (StringUtils.isNotEmpty(ifc.getDescription())) {
this.getDynamicAttrs().put("description", ifc.getDescription());
}
this.setObjFileLinks(DxCommonUtils.buildObjFileLinks(ifc));
}
public DxContextVO getDxContext() {
return dxContext;
}
public void setDxContext(DxContextVO dxContext) {
this.dxContext = dxContext;
}
public Long getDxContextId() {
return dxContextId;
}
public void setDxContextId(Long dxContextId) {
this.dxContextId = dxContextId;
}
public DxOrganizationVO getDxOrganization() {
return dxOrganization;
}
public void setDxOrganization(DxOrganizationVO dxOrganization) {
this.dxOrganization = dxOrganization;
}
public Long getDxOrganizationId() {
return dxOrganizationId;
}
public void setDxOrganizationId(Long dxOrganizationId) {
this.dxOrganizationId = dxOrganizationId;
}
public String getDxOrganizationIdType() {
return dxOrganizationIdType;
}
public void setDxOrganizationIdType(String dxOrganizationIdType) {
this.dxOrganizationIdType = dxOrganizationIdType;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public List<ObjFileLinkVO> getObjFileLinks() {
return objFileLinks;
}
public void setObjFileLinks(List<ObjFileLinkVO> objFileLinks) {
this.objFileLinks = objFileLinks;
}
public String getProblemSource() {
return problemSource;
}
......
package com.yonde.common;
import com.yonde.basedata.search.SearchOperatorEnumUtil;
import com.yonde.basedata.vo.DxDocumentFolderVO;
import com.yonde.change.vo.DxChangeAffectedDataVo;
import com.yonde.change.vo.ecr.DxChangeRequestVo;
import com.yonde.context.vo.DxContextVO;
import org.apache.commons.collections.ListUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.util.CollectionUtils;
import wt.change2.*;
import wt.fc.*;
import wt.fc.collections.WTArrayList;
import wt.fc.collections.WTCollection;
import wt.fc.collections.WTHashSet;
import wt.fc.collections.WTList;
import wt.fc.collections.*;
import wt.folder.Folder;
import wt.folder.FolderEntry;
import wt.folder.FolderHelper;
import wt.folder.FolderNotFoundException;
import wt.iba.value.IBAHolder;
import wt.inf.container.WTContainer;
import wt.inf.container.WTContainerRef;
......@@ -35,6 +38,7 @@ import wt.workflow.engine.WfEngineHelper;
import wt.workflow.engine.WfProcess;
import wt.workflow.engine.WfState;
import java.rmi.RemoteException;
import java.sql.Timestamp;
import java.util.*;
......@@ -126,6 +130,45 @@ public class ChangeOrderUtil
return changeOrder;
}
/**
* @param name
* @param ecnType
* @param folder
* @param description
* @return
* @throws WTException
* @throws WTPropertyVetoException
*/
public static WTChangeOrder2 createWTChangeOrder2(WTChangeOrder2 changeOrder, String name, String ecnType, Folder folder, String description,Map<String, Object> ibaMap)
throws WTException, WTPropertyVetoException
{
if (ObjectsUtil.isNull(changeOrder)) {
changeOrder = WTChangeOrder2.newWTChangeOrder2(name);
}
TypeDefinitionReference typeDefinitionRef = TypedUtility.getTypeDefinitionReference(ecnType);
if (typeDefinitionRef == null) {
typeDefinitionRef = TypeDefinitionReference.newTypeDefinitionReference();
}
changeOrder.setTypeDefinitionReference(typeDefinitionRef);
if(!StringUtils.isEmpty(description)){
changeOrder.setDescription(description);
}
changeOrder.setChangeNoticeComplexity(ChangeNoticeComplexity.BASIC);
if (ObjectsUtil.isNull(folder)) {
WTContainer container = changeOrder.getContainer();
WTContainerRef containerRef = WTContainerRef.newWTContainerRef(container);
folder = FolderHelper.service.getFolder("/Default/", containerRef);
}
FolderHelper.assignLocation((FolderEntry) changeOrder, folder);
changeOrder = (WTChangeOrder2) ChangeHelper2.service.saveChangeOrder(changeOrder);
if (ObjectsUtil.nonNull(ibaMap)) {
IBAUtil.forceSetIBAValues(changeOrder, ibaMap);
}
changeOrder = (WTChangeOrder2) PersistenceHelper.manager.refresh(changeOrder);
return changeOrder;
}
/**
* autoCreateECAFromECN
*
......@@ -424,6 +467,70 @@ public class ChangeOrderUtil
}
return null;
}
/**
* This method is used to get ECR by it's number.
*
* @param issueNumber
* @return
*/
public static WTChangeIssue getIssueByNumber(String issueNumber)
{
try
{
QuerySpec criteria = new QuerySpec(WTChangeIssue.class);
criteria.appendSearchCondition(new SearchCondition(WTChangeIssue.class, WTChangeIssue.NUMBER,
SearchCondition.EQUAL, issueNumber, false));
QueryResult results = PersistenceHelper.manager.find(criteria);
if (results.hasMoreElements())
{
return (WTChangeIssue) results.nextElement();
}
} catch (Exception e)
{
LOGGER.error(e.getMessage(), e);
}
return null;
}
/**
* get all affected object from ecr
*
* @param ecr
* @return
* @throws ChangeException2
* @throws WTException
*/
public static List<WTObject> getChangeBefore(WTChangeRequest2 ecr) throws ChangeException2, WTException {
List<WTObject> list = new ArrayList<WTObject>();
QueryResult res = ChangeHelper2.service.getChangeables(ecr);
while (res.hasMoreElements())
{
WTObject object = (WTObject) res.nextElement();
list.add(object);
}
return list;
}
/**
* get all affected object from issue
*
* @param issue
* @return
* @throws ChangeException2
* @throws WTException
*/
public static List<WTObject> getChangeBefore(WTChangeIssue issue) throws ChangeException2, WTException {
List<WTObject> list = new ArrayList<WTObject>();
QueryResult res = ChangeHelper2.service.getChangeables(issue);
while (res.hasMoreElements())
{
WTObject object = (WTObject) res.nextElement();
list.add(object);
}
return list;
}
/**
* get all affected object from ECN
......@@ -767,5 +874,192 @@ public class ChangeOrderUtil
}
return cr;
}
/**
* 为变更请求添加内容对象
*
* @param issue 目标变更请求
* @param changeable 变更请求内容对象
* @return 添加好的变更请求对象
*/
public static WTChangeIssue addChangeableToChangeIssue(WTChangeIssue issue, Changeable2 changeable) {
try {
boolean enforce = SessionServerHelper.manager.setAccessEnforced(false);
try {
Vector changeables = new Vector();
changeables.add(changeable);
ChangeHelper2.service.storeAssociations(RelevantAnalysisData.class, issue, changeables);
issue = (WTChangeIssue) PersistenceHelper.manager.refresh(issue);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
SessionServerHelper.manager.setAccessEnforced(enforce);
}
return issue;
} catch (Exception e) {
e.printStackTrace();
}
return issue;
}
/**
* 创建ECR和受影响对象直接关联
*
* @param ecr
* @param affectedData
*/
@SuppressWarnings({ "rawtypes", "null" })
public static void setECRAffectedData(WTChangeRequest2 ecr, Vector affectedData) {
String user = "";
try {
user = wt.session.SessionHelper.manager.getPrincipal().getName();
wt.session.SessionHelper.manager.setAdministrator();
} catch (Exception e) {
}
try {
Vector vector = ChangeHelper2.service.storeAssociations(RelevantRequestData2.class, ecr,
affectedData);
if (vector != null)
System.out.println("\t==after adding affected data, return vector=" + vector.toString());
else
System.out.println("\t==after adding affected data, return vector=" + vector);
} catch (Exception e) {
e.printStackTrace();
}
if (!"".equals(user)) {
try {
wt.session.SessionHelper.manager.setPrincipal(user);
} catch (Exception e) {
}
}
}
/**
* 创建Issue和受影响对象直接关联
*
* @param issue
* @param affectedData
*/
@SuppressWarnings({ "rawtypes", "null" })
public static void setIssueAffectedData(WTChangeIssue issue, Vector affectedData) {
String user = "";
try {
user = wt.session.SessionHelper.manager.getPrincipal().getName();
wt.session.SessionHelper.manager.setAdministrator();
} catch (Exception e) {
}
try {
Vector vector = ChangeHelper2.service.storeAssociations(RelevantAnalysisData.class, issue,
affectedData);
if (vector != null)
System.out.println("\t==after adding affected data, return vector=" + vector.toString());
else
System.out.println("\t==after adding affected data, return vector=" + vector);
} catch (Exception e) {
e.printStackTrace();
}
if (!"".equals(user)) {
try {
wt.session.SessionHelper.manager.setPrincipal(user);
} catch (Exception e) {
}
}
}
/**
* This method is used to create ECR
*
* @param entityVO
* @return
* @throws WTException
* @throws WTPropertyVetoException
* @throws RemoteException
* @throws ChangeException2
*/
@SuppressWarnings({ "rawtypes" })
private static WTChangeRequest2 createECR(DxChangeRequestVo entityVO, WTContainer container)
throws WTException, WTPropertyVetoException, RemoteException {
WTChangeRequest2 ecr = null;
String name = entityVO.getName();
ecr = WTChangeRequest2.newWTChangeRequest2(name);
String number = entityVO.getNumber();
if (number != null) {
ecr.setNumber(number);
}
DxContextVO dxContext = entityVO.getDxContext();
if (ObjectsUtil.nonNull(dxContext)) {
String contextName = dxContext.getName();
container = ContainerUtil.getContainerByName(contextName);
}
if (ObjectsUtil.isNull(container)) {
return null;
}
if (container != null) {
ecr.setContainer(container);
String folderPath = null;
DxDocumentFolderVO folderVO = null;
if (ObjectsUtil.nonNull(folderVO)) {
folderPath = folderVO.getFullPath();
}
//Folder folder = DxCommonUtils.makeFolder(folderPath, container.getContainerReference());
//设置ecr的文件夹路径
Folder location = DxCommonUtils.makeFolder(folderPath, container.getContainerReference());
//String changeFolder = FolderUtil.getFolderString(FolderUtil.CHANGE_FOLDER);
if(location != null){
WTValuedHashMap loacationMap = new WTValuedHashMap();
loacationMap.put(ecr, location);
FolderHelper.assignLocations(loacationMap);
} else {
System.out.println("未找到工程更改文件夹");
}
}
String type = entityVO.getSubTypeName();
if (StringUtils.isNotEmpty(type)) {
TypeDefinitionReference tdr = TypedUtilityServiceHelper.service
.getTypeDefinitionReference(type);
ecr.setTypeDefinitionReference(tdr);
}
ecr = (WTChangeRequest2) ChangeHelper2.service.saveChangeRequest(ecr);
List<DxChangeAffectedDataVo> affectedDatas = entityVO.getChangeAffectedDatas();
Vector affectedDataVector = new Vector();
if (!CollectionUtils.isEmpty(affectedDatas)) {
for (DxChangeAffectedDataVo affectedData : affectedDatas) {
Long targetId = affectedData.getTargetId();
String pboType = affectedData.getPboType();
String typeStr = SearchOperatorEnumUtil.typeStrPrefixMap.get(pboType);
Persistable oid = CommonUtil.getPersistableByOid("OR:" + typeStr + targetId);
affectedDataVector.add(oid);
setECRAffectedData(ecr, affectedDataVector);
}
}
/* String partNum = attributes.get("PARTNUMBER");
if(StringUtils.isNotEmpty(partNum)){
WTPart part = PartUtil.findRightVersionPart(partNum);
if(part != null) {
Vector affectedData = new Vector();
affectedData.add(part);
//受影响成品
ChangeHelper2.service.storeAssociations(RelatedProductData.class, ecr, affectedData);
}
}*/
return ecr;
}
/**
* retrive a not-null value of a given string
*
* @param value
* @return
*/
private static String getStringValue(String value) {
if (value == null)
return "";
value = value.trim();
return value;
}
}
\ No newline at end of file
......@@ -5,7 +5,9 @@ import com.yonde.basedata.search.SearchItem;
import com.yonde.basedata.search.SearchItems;
import com.yonde.basedata.search.SearchOperatorEnumUtil;
import com.yonde.basedata.search.SearchQueryCondition;
import com.yonde.basedata.vo.IdVO;
import com.yonde.change.vo.ecn.DxChangeNoticeVo;
import com.yonde.change.vo.ecr.DxChangeRequestVo;
import com.yonde.change.vo.pr.DxProblemReportVo;
import com.yonde.doc.vo.DxDocumentVO;
import com.yonde.part.vo.DxPartVO;
import org.apache.commons.collections.CollectionUtils;
......@@ -13,6 +15,10 @@ import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import wt.change2.VersionableChangeItem;
import wt.change2.WTChangeIssue;
import wt.change2.WTChangeOrder2;
import wt.change2.WTChangeRequest2;
import wt.doc.WTDocument;
import wt.fc.*;
import wt.log4j.LogR;
......@@ -25,6 +31,7 @@ import wt.session.SessionServerHelper;
import wt.util.WTAttributeNameIfc;
import wt.util.WTException;
import wt.vc.Iterated;
import wt.vc.baseline.Baseline;
import wt.vc.views.View;
import wt.vc.views.ViewHelper;
import wt.vc.wip.WorkInProgressHelper;
......@@ -80,7 +87,7 @@ public class DxSearchUtil implements RemoteAccess, Serializable {
List<String> indices = searchQueryCondition.getIndices();
Class cls = WTPart.class;
if (StringUtils.isNotEmpty(searchQueryCondition.getName())) {
cls = WTDocument.class;
cls = SearchOperatorEnumUtil.typeMap.get(searchQueryCondition.getName());
}
try {
//合并查询条件
......@@ -91,31 +98,39 @@ public class DxSearchUtil implements RemoteAccess, Serializable {
//构建查询
QuerySpec querySpec = DxSearchUtil.buildQuerySpec(searchItems, cls);
//通用查询条件
// Case 1:检入状态
if (querySpec.getConditionCount() > 0) {
querySpec.appendAnd();
}
querySpec.appendWhere(
WorkInProgressHelper.getSearchCondition(
cls, WorkInProgressState.CHECKED_IN, true),
new int[]{0});
if (CollectionUtils.isNotEmpty(indices)) {
if (!cls.getName().toLowerCase().contains("change")) {
// Case 1:检入状态
if (querySpec.getConditionCount() > 0) {
querySpec.appendAnd();
}
SearchCondition condition = new SearchCondition(cls, WTAttributeNameIfc.LATEST_ITERATION,
SearchCondition.IS_TRUE);
querySpec.appendWhere(condition, new int[]{0});
querySpec.appendWhere(
WorkInProgressHelper.getSearchCondition(
cls, WorkInProgressState.WORKING, false),
new int[]{0});
if (CollectionUtils.isNotEmpty(indices)) {
if (querySpec.getConditionCount() > 0) {
querySpec.appendAnd();
}
SearchCondition condition = new SearchCondition(cls, WTAttributeNameIfc.LATEST_ITERATION,
SearchCondition.IS_TRUE);
querySpec.appendWhere(condition, new int[]{0});
}
}
//创建时间排序
querySpec.appendOrderBy(cls, "thePersistInfo.createStamp", true);
//page
int pageFrom = 0;
int pageSize = 9999;
if (ObjectsUtil.nonNull(searchQueryCondition.getPageFrom())) {
pageFrom = searchQueryCondition.getPageFrom() -1;
pageSize = searchQueryCondition.getPageSize();
}
BasicPageableQuerySpec bpqs = new BasicPageableQuerySpec();
bpqs.setPrimaryStatement(querySpec);
logger.error("pageFrom====" + (searchQueryCondition.getPageFrom()-1)*searchQueryCondition.getPageSize());
logger.error("pageSize====" + searchQueryCondition.getPageSize());
bpqs.setOffset((searchQueryCondition.getPageFrom()-1)*searchQueryCondition.getPageSize());
bpqs.setRange(searchQueryCondition.getPageSize());
logger.error("pageFrom====" + pageFrom*pageSize);
logger.error("pageSize====" + pageSize);
bpqs.setOffset(pageFrom*pageSize);
bpqs.setRange(pageSize);
bpqs.setBackgroundThreadEnabled(false);
bpqs.setLimitModeEnabled(true);
//bpqs.setAdvancedQueryEnabled();
......@@ -129,23 +144,43 @@ public class DxSearchUtil implements RemoteAccess, Serializable {
/**
* 生成反馈结果
* @param o
* @param partList
* @param objList
* @param indices
* @throws Exception
*/
public static void buildQueryResult(WTObject o, List partList, List<String> indices) throws Exception {
public static void buildQueryResult(WTObject o, List objList, List<String> indices) throws Exception {
if (o instanceof WTPart) {
WTPart wtPart = (WTPart) o;
DxPartVO dxPartVO = new DxPartVO(wtPart);
partList.add(dxPartVO);
objList.add(dxPartVO);
return;
}
if (o instanceof WTDocument) {
WTDocument document = (WTDocument) o;
DxDocumentVO dxPartVO = new DxDocumentVO(document);
partList.add(dxPartVO);
} else {
//TODO ...other type
objList.add(dxPartVO);
return;
}
if (o instanceof WTChangeOrder2) {
WTChangeOrder2 changeOrder2 = (WTChangeOrder2) o;
DxChangeNoticeVo changeNoticeVo = new DxChangeNoticeVo(changeOrder2);
objList.add(changeNoticeVo);
return;
}
if (o instanceof WTChangeRequest2) {
WTChangeRequest2 changeRequest2 = (WTChangeRequest2) o;
DxChangeRequestVo changeRequestVo = new DxChangeRequestVo(changeRequest2);
objList.add(changeRequestVo);
return;
}
if (o instanceof WTChangeIssue) {
WTChangeIssue issue = (WTChangeIssue) o;
DxProblemReportVo problemReportVo = new DxProblemReportVo(issue);
objList.add(problemReportVo);
return;
}
if (o instanceof Baseline) {
// TODO 基线
}
}
......@@ -255,6 +290,11 @@ public class DxSearchUtil implements RemoteAccess, Serializable {
if (fieldName.toLowerCase().contains("stamp") && ObjectsUtil.nonNull(value)) {
value = Timestamp.valueOf(String.valueOf(value));
}
if (value instanceof Long || fieldName.contains(Iterated.MASTER_REFERENCE) || fieldName.equalsIgnoreCase(WTAttributeNameIfc.ID_NAME)) {
sc = new SearchCondition(clazz, fieldName,
op, Long.valueOf(String.valueOf(value)));
return sc;
}
if (value instanceof String) {
String scVal = String.valueOf(value);
if("LIKE".equalsIgnoreCase(op)) {
......@@ -264,11 +304,6 @@ public class DxSearchUtil implements RemoteAccess, Serializable {
op, scVal);
return sc;
}
if (value instanceof Long || fieldName.contains(Iterated.MASTER_REFERENCE) || fieldName.equalsIgnoreCase(WTAttributeNameIfc.ID_NAME)) {
sc = new SearchCondition(clazz, fieldName,
op, Long.valueOf(String.valueOf(value)));
return sc;
}
if (value instanceof Integer) {
sc = new SearchCondition(clazz, fieldName,
op, Integer.valueOf(String.valueOf(value)));
......
package com.yonde.common;
import com.yonde.basedata.search.SearchOperatorEnumUtil;
import wt.doc.WTDocument;
import wt.fc.PersistenceHelper;
import wt.fc.ReferenceFactory;
import wt.fc.WTObject;
import wt.fc.WTReference;
import wt.fc.*;
import wt.lifecycle.LifeCycleHelper;
import wt.method.RemoteMethodServer;
import wt.part.WTPart;
......@@ -96,6 +94,46 @@ public class RfUtil {
return p;
}
/**
* 通过oid获取WTObject
*
* @param id
* @return
* @throws WTException
* @throws RemoteException
* @throws InvocationTargetException
*/
public static WTObject getWTObjectById(Long id) {
WTObject p = null;
boolean flag = SessionServerHelper.manager.setAccessEnforced(false);
try {
List<String> oidPrefixList = SearchOperatorEnumUtil.oidPrefixList;
for (String prefix: oidPrefixList) {
p = getWTObjectById(id, prefix);
if (ObjectsUtil.nonNull(p)) {
break;
}
}
} finally {
SessionServerHelper.manager.setAccessEnforced(flag);
}
return p;
}
public static WTObject getWTObjectById(Long id, String prefix) {
WTObject p = null;
try {
String oid = prefix + id;
WTReference wtreference = rf.getReference(oid);
if (wtreference != null) {
wtreference.refresh();
p = (WTObject) wtreference.getObject();
}
} catch (WTException e) {
}
return p;
}
/**
* 根据对象oid获取WTReference
*
......
......@@ -758,6 +758,9 @@ public class WorkflowUtil implements RemoteAccess {
try {
WfProcessDefinition processDefinition =
WfDefinerHelper.service.getProcessDefinition(templateName, context_ref);
log.error("===temp Name===" + templateName);
log.error("===context_ref===" + context_ref);
log.error("===processDefinition===" + processDefinition);
wfprocess = WfEngineHelper.service.createProcess(processDefinition, team_spec, context_ref);
wfprocess.setName(processname);
ProcessData processData = wfprocess.getContext();
......
......@@ -32,7 +32,6 @@ public class DxDocController extends AbstractBaseController {
} catch (Exception e) {
e.printStackTrace();
}
return dxDocumentVO;
}
......
......@@ -16,6 +16,7 @@ import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.rmi.RemoteException;
import java.util.List;
import java.util.Locale;
import java.util.Map;
public class PdmPartBean implements Serializable, Cloneable {
......@@ -50,7 +51,11 @@ public class PdmPartBean implements Serializable, Cloneable {
this.parentNumber = parent.getNumber();
Quantity qt = usageLink.getQuantity();
this.setAmount(qt.getAmount());
this.setUnit(qt.getUnit().toString());
String unit = qt.getUnit().getDisplay(Locale.SIMPLIFIED_CHINESE);
if ("每个".equals(unit)) {
unit = "个";
}
this.setUnit(unit);
WTPartMaster uses = (WTPartMaster) usageLink.getUses();
WTPart child = PartUtil.getLatestPartByNoViewWithState(uses.getNumber(), parent.getViewName(), null, false);
if (ObjectsUtil.nonNull(child)) {
......
......@@ -63,7 +63,6 @@ public class DxPartController extends AbstractBaseController {
} catch (Exception e) {
e.printStackTrace();
}
return dxPartVO;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment