Commit 1bbfbc6c authored by shyWang's avatar shyWang

PDM前端改造

文档相关改造
parent 2b2a52c8
......@@ -5,9 +5,7 @@ import com.yonde.basedata.vo.DxMasterVO;
import com.yonde.basedata.vo.DxVersionVO;
import com.yonde.context.vo.DxContextVO;
import com.yonde.doc.vo.DxDocumentVO;
import com.yonde.part.vo.DxPartVO;
import com.yonde.part.vo.DxUsageLinkVO;
import com.yonde.part.vo.DxViewVO;
import com.yonde.part.vo.*;
import wt.clients.beans.query.WTAttribute;
import wt.doc.WTDocument;
import wt.fc.ObjectIdentifier;
......@@ -88,6 +86,8 @@ public class SearchOperatorEnumUtil {
typeItemMap.put(DxMasterVO.class, "com.yonde.dex.version.plugin.common.entity.DxMasterVO");
typeItemMap.put(DxContextVO.class, "com.yonde.dex.context.common.vo.DxContextProjectVO");
typeItemMap.put(DxUsageLinkVO.class, "com.yonde.dcs.xbom.common.entity.vo.DxUsageLinkVO");
typeItemMap.put(DxPartDescribeLinkVO.class, "com.yonde.dcs.xbom.common.entity.vo.DxPartDescribeLinkVO");
typeItemMap.put(DxPartReferenceLinkVO.class, "com.yonde.dcs.xbom.common.entity.vo.DxPartReferenceLinkVO");
//TODO add
}
......
......@@ -6,6 +6,7 @@ import com.yonde.common.DateTimeUtil;
import com.yonde.part.vo.DxPartVO;
import wt.enterprise.RevisionControlled;
import wt.fc.Persistable;
import wt.locks.LockHelper;
import wt.org.WTPrincipal;
import wt.org.WTUser;
import wt.session.SessionContext;
......@@ -76,7 +77,8 @@ public class RevisionControlledVO extends IdVO implements Serializable {
}
public void setLockerVO(RevisionControlled object) throws WTException {
Persistable persistable = object.getLocker().getObject();
Persistable persistable = LockHelper.getLocker(object);
//object.getLocker().getObject();
if (persistable != null) {
WTUser locker = ((WTUser) persistable);
this.setLockNote(object.getLockNote());
......
......@@ -3,6 +3,7 @@ package com.yonde.common;
import com.ptc.core.meta.type.mgmt.server.impl.WTTypeDefinition;
import com.ptc.core.meta.type.mgmt.server.impl.WTTypeDefinitionMaster;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import wt.access.NotAuthorizedException;
import wt.content.*;
......@@ -11,11 +12,16 @@ import wt.doc.WTDocumentDependencyLink;
import wt.doc.WTDocumentMaster;
import wt.doc.WTDocumentMasterIdentity;
import wt.fc.*;
import wt.folder.Folder;
import wt.folder.FolderEntry;
import wt.folder.FolderHelper;
import wt.httpgw.URLFactory;
import wt.iba.definition.IBADefinitionException;
import wt.iba.definition.litedefinition.AttributeDefDefaultView;
import wt.iba.definition.service.IBADefinitionHelper;
import wt.iba.value.StringValue;
import wt.inf.container.WTContainer;
import wt.inf.container.WTContainerRef;
import wt.method.RemoteAccess;
import wt.method.RemoteMethodServer;
import wt.org.WTPrincipal;
......@@ -26,8 +32,10 @@ import wt.query.SearchCondition;
import wt.query.SubSelectExpression;
import wt.session.SessionHelper;
import wt.session.SessionServerHelper;
import wt.team.TeamReference;
import wt.type.ClientTypedUtility;
import wt.type.TypeDefinitionReference;
import wt.type.TypedUtility;
import wt.util.WTAttributeNameIfc;
import wt.util.WTException;
import wt.util.WTPropertyVetoException;
......@@ -1155,4 +1163,107 @@ public class DocUtil implements RemoteAccess, Serializable {
throws VersionControlException {
return RfUtil.getDocVid(doc);
}
/**
* create wtdocument in windchill by name, container,folder and type
* type default is WTDocument, folder default value is Default,
* name and container must has value.
*
* @return
* @throws WTException
*/
public static WTDocument createDoc(String docNum, String docName, WTContainer container, Folder docFold, String type)
throws WTException {
logger.debug("=============create doc begin============");
if (docName == null || "".equals(docName)) {
return null;
}
if (container == null) {
return null;
}
WTDocument document = WTDocument.newWTDocument();
try {
TypeDefinitionReference typeDefinitionRef = null;
if (type == null || "".equals(type)) {
typeDefinitionRef =
TypedUtility.getTypeDefinitionReference("wt.doc.WTDocument");
} else {
typeDefinitionRef =
TypedUtility.getTypeDefinitionReference(type);
}
document.setTypeDefinitionReference(typeDefinitionRef);
document.setName(docName);
if (StringUtils.isNotEmpty(docNum)) {
document.setNumber(docNum);
}
// Set Folder
if (docFold == null) {
docFold = FolderHelper.service.getFolder("Default", WTContainerRef.newWTContainerRef(container));
/*
* if (folder == null || "".equals(folder)) {
* docFold = FolderHelper.service.getFolder("Default", WTContainerRef.newWTContainerRef(container));
* } else {
* docFold = FolderHelper.service.getFolder("Default/" + folder,
* WTContainerRef.newWTContainerRef(container));
* }
*/
}
FolderHelper.assignLocation((FolderEntry) document, docFold);
// Set Container
PersistenceHelper.manager.save(document);
logger.debug("=============create doc end============");
} catch (WTException e) {
logger.error(e.getLocalizedMessage(), e);
throw new WTException(e);
} catch (WTPropertyVetoException e) {
logger.error(e.getLocalizedMessage(), e);
throw new WTException(e);
}
return document;
}
/**
* revise WTDocument
*
* @param document
* WTDocument
* @return WTDocument
* @throws WTException
*/
public static WTDocument reviseWTDocument(WTDocument document, String comment) throws WTException {
WTDocument wtdocument = document;
try {
if (wtdocument == null) {
return null;
}
WTContainer container = wtdocument.getContainer();
WTContainerRef containerRef = WTContainerRef.newWTContainerRef(container); // container.getContainerReference();//
TeamReference teamReference = wtdocument.getTeamId();
Folder oldFoler = FolderHelper.getFolder(wtdocument);
if (oldFoler == null)
{
String strLocation = wtdocument.getLocation();
oldFoler = FolderHelper.service.getFolder(strLocation, containerRef);
}
wtdocument = (WTDocument) wt.vc.VersionControlHelper.service.newVersion((wt.vc.Versioned) wtdocument);
if (teamReference != null)
{
wtdocument.setTeamId(teamReference);
}
VersionControlHelper.setNote(wtdocument, comment == null ? "" : comment);
wtdocument.setContainer(container);
FolderHelper.assignLocation((FolderEntry) wtdocument, oldFoler);
wtdocument = (WTDocument) PersistenceHelper.manager.save(wtdocument);
wtdocument = (WTDocument) PersistenceHelper.manager.refresh(wtdocument);
} catch (Exception e) {
logger.error("Auto Revise Failed :" + e.toString());
logger.error("Original comment :" + comment);
throw new WTException(e);
}
return wtdocument;
}
}
......@@ -6,6 +6,9 @@ import wt.access.AccessPermission;
import wt.doc.WTDocument;
import wt.fc.PersistenceServerHelper;
import wt.fc.WTObject;
import wt.folder.Folder;
import wt.folder.FolderHelper;
import wt.inf.container.WTContainerRef;
import wt.lifecycle.LifeCycleHelper;
import wt.lifecycle.LifeCycleManaged;
import wt.lifecycle.State;
......@@ -135,4 +138,26 @@ public class DxCommonUtils implements RemoteAccess, Serializable {
}
return false;
}
public static Folder makeFolder(String locationFolder, WTContainerRef containerRef) throws WTException {
if (locationFolder == null || locationFolder.equalsIgnoreCase("")) {
locationFolder = "/Default";
} else {
if (!locationFolder.startsWith("/Default")) {
locationFolder = "/Default/" + locationFolder;
}
}
Folder location = null;
try {
location = FolderHelper.service.getFolder(locationFolder, containerRef);
} catch (Exception e) {
location = null;
}
if (location == null)
location = FolderHelper.service.saveFolderPath(locationFolder, containerRef);
return location;
}
}
package com.yonde.common;
import com.yonde.basedata.vo.DxDocumentFolderVO;
import com.yonde.context.vo.DxContextVO;
import com.yonde.doc.vo.DxDocumentVO;
import com.yonde.part.vo.DxPartVO;
import org.apache.log4j.Logger;
import wt.doc.WTDocument;
import wt.folder.Folder;
import wt.inf.container.WTContainer;
import wt.log4j.LogR;
import wt.method.RemoteAccess;
import wt.part.WTPart;
import wt.util.WTException;
import java.io.Serializable;
public class DxDocUtil implements RemoteAccess, Serializable {
private static Logger logger = LogR.getLogger(DxDocUtil.class.getName());
private static final long serialVersionUID = 1L;
/**
* 根据id 查询DxDocument
* @param id
* @return
* @throws Exception
*/
public static DxDocumentVO getDxDocumentVO(long id) throws Exception {
String oid = "OR:wt.doc.WTDocument:" + id;
WTDocument doc = RfUtil.getDoc(oid);
DxDocumentVO dxDocumentVO = new DxDocumentVO(doc);
/*if (ObjectsUtil.nonNull(part)) {
WTPart copyOfPart = getWorkingCopyOfPart(part);
dxPartVO = new DxPartVO(copyOfPart);
}*/
return dxDocumentVO;
}
/**
* 根据id 查询DxDocument
* @param id
* @return
*/
public static WTDocument getDocById(long id) {
String oid = "OR:wt.doc.WTDocument:" + id;
WTDocument doc = RfUtil.getDoc(oid);
return doc;
}
public static WTDocument createDoc(DxDocumentVO dxDocumentVO) throws WTException {
WTContainer container = null;
DxContextVO dxContext = dxDocumentVO.getDxContext();
logger.error("dxContext Name======" + dxContext);
if (ObjectsUtil.nonNull(dxContext)) {
String contextName = dxContext.getName();
logger.error("container Name======" + contextName);
container = ContainerUtil.getContainerByName(contextName);
logger.error("container======" + container);
}
if (ObjectsUtil.isNull(container)) {
return null;
}
String folderPath = null;
DxDocumentFolderVO folderVO = dxDocumentVO.getDxDocumentFolder();
if (ObjectsUtil.nonNull(folderVO)) {
folderPath = folderVO.getFullPath();
}
Folder folder = DxCommonUtils.makeFolder(folderPath, container.getContainerReference());
//dxDocumentVO.getSubTypeName()
WTDocument doc = DocUtil.createDoc(dxDocumentVO.getNumber(), dxDocumentVO.getName(),
container, folder, null);
// TODO update attr
return doc;
}
}
This diff is collapsed.
......@@ -9,6 +9,7 @@ import com.yonde.basedata.vo.IdVO;
import com.yonde.doc.vo.DxDocumentVO;
import com.yonde.part.vo.DxPartVO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
......@@ -86,6 +87,10 @@ public class DxSearchUtil implements RemoteAccess, Serializable {
boolean enforce = SessionServerHelper.manager.setAccessEnforced(false);
List partList;
List<String> indices = searchQueryCondition.getIndices();
Class cls = WTPart.class;
if (StringUtils.isNotEmpty(searchQueryCondition.getName())) {
cls = WTDocument.class;
}
try {
SearchItems searchItems = searchQueryCondition.getSearchItems();
if (ObjectsUtil.isNull(searchItems)) {
......@@ -96,7 +101,7 @@ public class DxSearchUtil implements RemoteAccess, Serializable {
List<SearchItem> items = child.getItems();
}*/
QuerySpec querySpec = DxSearchUtil.buildQuerySpec(searchItems, WTPart.class);
QuerySpec querySpec = DxSearchUtil.buildQuerySpec(searchItems, cls);
/* LatestConfigSpec ls = new LatestConfigSpec();
querySpec = ls.appendSearchCriteria(querySpec);*/
QueryResult qr = PersistenceHelper.manager.find((StatementSpec) querySpec);
......
......@@ -7,14 +7,19 @@ import org.apache.log4j.Logger;
import wt.doc.WTDocument;
import wt.doc.WTDocumentDependencyLink;
import wt.doc.WTDocumentHelper;
import wt.doc.WTDocumentMaster;
import wt.fc.Persistable;
import wt.fc.PersistenceHelper;
import wt.fc.PersistenceServerHelper;
import wt.fc.QueryResult;
import wt.part.WTPart;
import wt.part.WTPartDescribeLink;
import wt.part.WTPartReferenceLink;
import wt.session.SessionServerHelper;
import wt.util.WTException;
import java.lang.reflect.InvocationTargetException;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
import static org.apache.commons.lang.StringUtils.isNotBlank;
......@@ -314,8 +319,6 @@ public class LinkObjUtil {
* 获取部件下的所有层子件。
*
* @param part
* @param partList
* @param isA
* @throws WTException
*//*
public static void getAllUsesPartList(WTPart part, ArrayList<WTPart> partList, boolean needVersionA, String containerName) throws WTException {
......@@ -374,4 +377,63 @@ public class LinkObjUtil {
SessionServerHelper.manager.setAccessEnforced(accessEnforceds);
}
}*/
public static WTPartReferenceLink associateRefDocToPart(WTPart part,WTDocument doc) throws WTException {
boolean enforce = wt.session.SessionServerHelper.manager.setAccessEnforced(false);
WTPartReferenceLink wtpartreferencelink = null;
try {
WTDocumentMaster docMasterRoleB = (WTDocumentMaster) doc.getMaster();
// 检查是否文档间已经有连接,得到WTPartReferenceLink
QueryResult queryresult = PersistenceHelper.manager.find(
WTPartReferenceLink.class, part,
WTPartReferenceLink.REFERENCED_BY_ROLE,
docMasterRoleB);
System.out.println(">>>associateRefDocToPart>>>part<<<<"+part.getNumber()+">>><<doc>>"+doc.getNumber()+"<<<queryresult.size()>>>"+(queryresult.size()));
if (queryresult == null || queryresult.size() == 0) {
// 如果没有连接,则建立
wtpartreferencelink = WTPartReferenceLink.newWTPartReferenceLink(part,docMasterRoleB);
PersistenceServerHelper.manager.insert(wtpartreferencelink);
wtpartreferencelink = (WTPartReferenceLink) PersistenceHelper.manager.refresh(wtpartreferencelink);
}
} finally {
SessionServerHelper.manager.setAccessEnforced(enforce);
}
return wtpartreferencelink;
}
/**
* 创建文档和部件的描述关系
*
* @param wtpart
* @param wtdocument
* @return
* @throws Exception
*/
public static WTPartDescribeLink createPartDocDescLink(WTPart wtpart, WTDocument wtdocument) throws WTException {
WTPartDescribeLink link = getPartDescribeLink(wtpart, wtdocument);
if (link == null) {
link = WTPartDescribeLink.newWTPartDescribeLink(wtpart, wtdocument);
PersistenceServerHelper.manager.insert(link);
link = (WTPartDescribeLink) PersistenceHelper.manager.refresh(link);
}
return link;
}
/**
* 获取part和文档描述关系
*
* @param wtpart
* @param wtdocument
* @return
* @throws WTException
*/
public static WTPartDescribeLink getPartDescribeLink(WTPart wtpart, WTDocument wtdocument) throws WTException {
QueryResult queryresult = PersistenceHelper.manager.find(wt.part.WTPartDescribeLink.class, wtpart,
WTPartDescribeLink.DESCRIBES_ROLE, wtdocument);
if (queryresult == null || queryresult.size() == 0)
return null;
else
return (WTPartDescribeLink) queryresult.nextElement();
}
}
......@@ -7,13 +7,12 @@ import com.yonde.doc.vo.DxDocumentVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping({"/DxDocument"})
@ResponseBody
public class DxDocController extends AbstractBaseController {
@Autowired
private DxDocService docService;
/* @Autowired
public DxDocService docService;*/
@GetMapping({"/version/getWorkingCopy/{id}"})
//@ApiOperation("获取工作副本")
......@@ -163,6 +162,6 @@ public class DxDocController extends AbstractBaseController {
protected DxDocService getService() {
return docService;
return null;
}
}
package com.yonde.doc.vo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.yonde.basedata.entity.users.DxUserVO;
import com.yonde.basedata.vo.*;
import com.yonde.common.DateTimeUtil;
import com.yonde.common.IBAHelper;
import com.yonde.context.vo.DxContextVO;
import wt.doc.WTDocument;
import wt.fc.Persistable;
import wt.fc.PersistenceHelper;
import wt.org.WTOrganization;
import wt.org.WTUser;
import wt.session.SessionContext;
import wt.session.SessionHelper;
import wt.type.ClientTypedUtility;
import wt.util.WTException;
import wt.vc.wip.WorkInProgressHelper;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.rmi.RemoteException;
import java.util.Locale;
import java.util.Map;
public class DxDocumentVO extends RevisionControlledVO {
@JsonTypeInfo(
use = JsonTypeInfo.Id.CLASS,
property = "classname",
visible = true,
defaultImpl = DxDocumentVO.class
)
public class DxDocumentVO extends RevisionControlledVO implements Serializable {
public DxDocumentVO() {
}
......@@ -37,10 +44,6 @@ public class DxDocumentVO extends RevisionControlledVO {
private boolean latest;
private boolean checkOuted;
private String subTypeName;
private String subTypeDisplayName;
private Long lifecycleTemplateId;
private DxContextVO dxContext;
......@@ -62,24 +65,38 @@ public class DxDocumentVO extends RevisionControlledVO {
//TODO
//Team team = TeamHelper.service.getTeam("");
//team.getOwnership().
WTOrganization organization = wtDoc.getOrganization();
this.setDxOrganization(new DxOrganizationVO(organization));
this.setMasterVO(new DxMasterVO(wtDoc));
this.setVersion(new DxVersionVO(wtDoc));
this.setDxContext(new DxContextVO(wtDoc.getContainer()));
this.setModifier(new DxUserVO(wtDoc.getModifier().getPrincipal()));
this.setCreator(new DxUserVO(wtDoc.getCreator().getPrincipal()));
this.dynamicAttrs = IBAHelper.getAllIBAValues(wtDoc);
this.state = wtDoc.getState().getState().getDisplay(Locale.SIMPLIFIED_CHINESE);
this.subTypeName = ClientTypedUtility.getTypeIdentifier(wtDoc).getTypename();
this.subTypeDisplayName = ClientTypedUtility.getLocalizedTypeName(wtDoc, Locale.SIMPLIFIED_CHINESE);
this.latest = wtDoc.isLatestIteration();
this.checkOuted = WorkInProgressHelper.isCheckedOut(wtDoc);
SessionContext previous = SessionContext.newContext();
try {
if (wtDoc == null) {
return;
}
this.wtDoc = wtDoc;
// To set the user of the session to be the administrator
SessionHelper.manager.setAdministrator();
WTOrganization organization = wtDoc.getOrganization();
this.setDxOrganization(new DxOrganizationVO(organization));
this.setMasterVO(new DxMasterVO(wtDoc));
this.setVersion(new DxVersionVO(wtDoc));
this.setDxContext(new DxContextVO(wtDoc.getContainer()));
this.name = wtDoc.getName();
this.number = wtDoc.getNumber();
this.setModifier(new DxUserVO(wtDoc.getModifier().getPrincipal()));
this.setCreator(new DxUserVO(wtDoc.getCreator().getPrincipal()));
this.dynamicAttrs = IBAHelper.getAllIBAValues(wtDoc);
this.state = wtDoc.getState().getState().toString();
//this.subTypeName = ClientTypedUtility.getTypeIdentifier(wtDoc).getTypename();
this.subTypeName = "managementDoc";//TODO 要映射
this.subTypeDisplayName = ClientTypedUtility.getLocalizedTypeName(wtDoc, Locale.SIMPLIFIED_CHINESE);
this.latest = wtDoc.isLatestIteration();
this.checkOuted = WorkInProgressHelper.isCheckedOut(wtDoc);
this.setOperator("NO_CHANGE");
this.lifecycleTemplateId = PersistenceHelper.getObjectIdentifier(wtDoc.getLifeCycleTemplate().getObject()).getId();
} finally {
SessionContext.setContext(previous);
}
this.lifecycleTemplateId = PersistenceHelper.getObjectIdentifier(wtDoc.getLifeCycleTemplate().getObject()).getId();
}
public DxOrganizationVO getDxOrganization() {
......@@ -206,8 +223,28 @@ public class DxDocumentVO extends RevisionControlledVO {
this.checkOuted = checkOuted;
}
@Override
public String getSubTypeName() {
return subTypeName;
}
@Override
public void setSubTypeName(String subTypeName) {
this.subTypeName = subTypeName;
}
public String getModifyTime() {
@Override
public String getSubTypeDisplayName() {
return subTypeDisplayName;
}
@Override
public void setSubTypeDisplayName(String subTypeDisplayName) {
this.subTypeDisplayName = subTypeDisplayName;
}
/*public String getModifyTime() {
return modifyTime;
}
......@@ -258,13 +295,5 @@ public class DxDocumentVO extends RevisionControlledVO {
public void setSubTypeDisplayName(String subTypeDisplayName) {
this.subTypeDisplayName = subTypeDisplayName;
}
@Override
public String getDxClassname() {
return this.getClass().getName();
}
@Override
public void setDxClassname(String var1) {
}
*/
}
package com.yonde.part.controller;
import com.alibaba.fastjson.JSON;
import com.yonde.basedata.controller.AbstractBaseController;
import com.yonde.basedata.entity.api.ApiResult;
import com.yonde.part.service.DxPartService;
import com.yonde.part.vo.DxPartDescribeLinkVO;
import com.yonde.part.vo.DxPartVO;
import com.yonde.part.vo.DxUsageLinkVO;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping(value = "/DxPartDescribeLink")
public class DxPartDescribeLinkController extends AbstractBaseController {
//@ApiOperation("深度保存对象")
@PostMapping({"recursion"})
public ApiResult recursionObj(@RequestBody Map entity) {
//return ApiResult.ok(this.getService().saveRecursion(entity));
try {
String jsonString = JSON.toJSONString(entity);
DxUsageLinkVO entityVO = JSON.parseObject(jsonString, DxUsageLinkVO.class);
entityVO = DxPartService.createDxPartUsageLink(entityVO);
return ApiResult.ok(entityVO);
} catch (Exception e) {
e.printStackTrace();
return ApiResult.error("501", e.getLocalizedMessage(), e);
}
}
//@ApiOperation("深度保存对象")
@PostMapping({"recursions"})
public ApiResult recursionObj(@RequestBody List<Object> entity) {
//return ApiResult.ok(this.getService().saveRecursion(entity));
try {
String jsonString = JSON.toJSONString(entity);
List<DxPartDescribeLinkVO> entityVOList = JSON.parseArray(jsonString, DxPartDescribeLinkVO.class);
List<DxPartDescribeLinkVO> resultList = new ArrayList<DxPartDescribeLinkVO>();
for (DxPartDescribeLinkVO o : entityVOList) {
DxPartDescribeLinkVO entityVO = DxPartService.createDxPartDesLink(o);
resultList.add(entityVO);
}
return ApiResult.ok(resultList);
} catch (Exception e) {
e.printStackTrace();
return ApiResult.error("501", e.getLocalizedMessage(), e);
}
}
@PostMapping({"/search/{id}"})
//@ApiOperation("获取工作副本")
public List<DxPartDescribeLinkVO> searchDesLink(@PathVariable Long id) {
List<DxPartDescribeLinkVO> dxPartDescribeLinkVOS = new ArrayList<DxPartDescribeLinkVO>();
try {
dxPartDescribeLinkVOS = DxPartService.searchPartDesLink(id);
} catch (Exception e) {
e.printStackTrace();
}
return dxPartDescribeLinkVOS;
}
}
package com.yonde.part.controller;
import com.alibaba.fastjson.JSON;
import com.yonde.basedata.controller.AbstractBaseController;
import com.yonde.basedata.entity.api.ApiResult;
import com.yonde.part.service.DxPartService;
import com.yonde.part.vo.DxPartReferenceLinkVO;
import com.yonde.part.vo.DxPartVO;
import com.yonde.part.vo.DxUsageLinkVO;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping(value = "/DxPartReferenceLink")
public class DxPartReferenceLinkController extends AbstractBaseController {
//@ApiOperation("深度保存对象")
@PostMapping({"recursion"})
public ApiResult recursionObj(@RequestBody Map entity) {
//return ApiResult.ok(this.getService().saveRecursion(entity));
try {
String jsonString = JSON.toJSONString(entity);
DxUsageLinkVO entityVO = JSON.parseObject(jsonString, DxUsageLinkVO.class);
entityVO = DxPartService.createDxPartUsageLink(entityVO);
return ApiResult.ok(entityVO);
} catch (Exception e) {
e.printStackTrace();
return ApiResult.error("501", e.getLocalizedMessage(), e);
}
}
//@ApiOperation("深度保存对象")
@PostMapping({"recursions"})
public ApiResult recursionObj(@RequestBody List<Object> entity) {
//return ApiResult.ok(this.getService().saveRecursion(entity));
try {
String jsonString = JSON.toJSONString(entity);
List<DxPartReferenceLinkVO> entityVOList = JSON.parseArray(jsonString, DxPartReferenceLinkVO.class);
List<DxPartReferenceLinkVO> resultList = new ArrayList<DxPartReferenceLinkVO>();
for (DxPartReferenceLinkVO o : entityVOList) {
DxPartReferenceLinkVO entityVO = DxPartService.createDxPartRefLink(o);
resultList.add(entityVO);
}
return ApiResult.ok(resultList);
} catch (Exception e) {
e.printStackTrace();
return ApiResult.error("501", e.getLocalizedMessage(), e);
}
}
@PostMapping({"/search/{id}"})
//@ApiOperation("获取工作副本")
public List<DxPartReferenceLinkVO> searchRefLink(@PathVariable Long id) {
List<DxPartReferenceLinkVO> dxPartReferenceLinkVOS = new ArrayList<DxPartReferenceLinkVO>();
try {
dxPartReferenceLinkVOS = DxPartService.searchPartRefLink(id);
//dxPartVO = DxPartService.checkin(id, node);
} catch (Exception e) {
e.printStackTrace();
}
return dxPartReferenceLinkVOS;
}
}
package com.yonde.part.service;
import com.yonde.basedata.data.DxPageImpl;
import com.yonde.basedata.entity.users.DxUserVO;
import com.yonde.basedata.search.BaseSearchCondition;
import com.yonde.basedata.search.SearchQueryCondition;
import com.yonde.basedata.vo.IdVO;
import com.yonde.common.*;
import com.yonde.part.vo.BOMQueryVO;
import com.yonde.part.vo.DxPartVO;
import com.yonde.part.vo.DxUsageLinkVO;
import com.yonde.part.vo.*;
import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
import wt.doc.WTDocument;
import wt.doc.WTDocumentMaster;
import wt.fc.PersistenceHelper;
import wt.fc.QueryResult;
import wt.log4j.LogR;
import wt.method.RemoteAccess;
import wt.method.RemoteMethodServer;
import wt.part.WTPart;
import wt.part.WTPartHelper;
import wt.part.WTPartUsageLink;
import wt.part.*;
import wt.session.SessionContext;
import wt.session.SessionHelper;
import wt.util.WTException;
import wt.vc.VersionControlHelper;
import wt.vc.wip.WorkInProgressHelper;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
......@@ -47,7 +48,7 @@ public class DxPartService implements RemoteAccess, Serializable {
}
logger.error("findByConfigSpecSelect===111" + searchQueryCondition.toString());
/*boolean enforce = SessionServerHelper.manager.setAccessEnforced(false);*/
List<IdVO> partList = DxSearchUtil.findByConfigSpecSelect(searchQueryCondition);;
List<IdVO> partList = DxSearchUtil.findByConfigSpecSelect(searchQueryCondition);
return partList;
}
......@@ -192,15 +193,21 @@ public class DxPartService implements RemoteAccess, Serializable {
DxPartVO dxPartVO = null;
try {
SessionHelper.manager.setAdministrator();
logger.error("getCopyOf ====" + id);
WTPart partById = DxPartUtil.getPartById(id);
if (CommonUtil.isCheckedOut(partById)) {
WTPart partByIdCp = (WTPart) CommonUtil.getWorkingCopyVersion(partById);
dxPartVO = new DxPartVO(partByIdCp);
if (ObjectsUtil.isNull(dxPartVO.getLocker())) {
dxPartVO.setLockerVO(partById);
dxPartVO.setLockerVO(CommonUtil.getPreviousVersion(partById));
}
} else {
dxPartVO = new DxPartVO(partById);
if (WorkInProgressHelper.isWorkingCopy(partById) && ObjectsUtil.isNull(dxPartVO.getLocker())) {
DxUserVO dxUserVO = new DxUserVO(partById.getModifier().getPrincipal());
dxPartVO.setLocker(dxUserVO);
dxPartVO.setLockerId(dxUserVO.getId());
}
}
} finally {
......@@ -334,6 +341,55 @@ public class DxPartService implements RemoteAccess, Serializable {
return dxPartVO;
}
/**
* 创建部件link
* @param dxPartVO
* @return
* @throws Exception
*/
public static DxPartReferenceLinkVO createDxPartRefLink(DxPartReferenceLinkVO dxPartVO) throws Exception {
if (!RemoteMethodServer.ServerFlag) {
return (DxPartReferenceLinkVO) RemoteMethodServer.getDefault().invoke("createDxPartRefLink", DxPartService.class.getName(), null,
new Class[] { DxPartReferenceLinkVO.class},
new Object[] { dxPartVO });
}
SessionContext previous = SessionContext.newContext();
try {
SessionHelper.manager.setAdministrator();
WTPartReferenceLink referenceLink = DxPartUtil.saveWTPartRefLink(dxPartVO);
System.out.println("referenceLink====" + referenceLink);
dxPartVO = new DxPartReferenceLinkVO(referenceLink);
} finally {
SessionContext.setContext(previous);
}
return dxPartVO;
}
/**
* 创建部件描述link
* @param dxPartVO
* @return
* @throws Exception
*/
public static DxPartDescribeLinkVO createDxPartDesLink(DxPartDescribeLinkVO dxPartVO) throws Exception {
if (!RemoteMethodServer.ServerFlag) {
return (DxPartDescribeLinkVO) RemoteMethodServer.getDefault().invoke("createDxPartDesLink", DxPartService.class.getName(), null,
new Class[] { DxPartDescribeLinkVO.class},
new Object[] { dxPartVO });
}
SessionContext previous = SessionContext.newContext();
try {
SessionHelper.manager.setAdministrator();
logger.error("dxPartVO====" + dxPartVO);
WTPartDescribeLink describeLink = DxPartUtil.saveWTPartDesLink(dxPartVO);
logger.error("describeLink====" + describeLink);
dxPartVO = new DxPartDescribeLinkVO(describeLink);
} finally {
SessionContext.setContext(previous);
}
return dxPartVO;
}
/**
* 获取对象
* @param id
......@@ -365,4 +421,58 @@ public class DxPartService implements RemoteAccess, Serializable {
}
return partVOList;
}
public static List<DxPartDescribeLinkVO> searchPartDesLink(Long id) throws Exception {
if (!RemoteMethodServer.ServerFlag) {
return (List) RemoteMethodServer.getDefault().invoke("searchPartDesLink", DxPartService.class.getName(), null,
new Class[] { Long.class },
new Object[] { id });
}
List<DxPartDescribeLinkVO> resultList = new ArrayList<DxPartDescribeLinkVO>();
SessionContext previous = SessionContext.newContext();
try {
SessionHelper.manager.setAdministrator();
WTPart partById = DxPartUtil.getPartById(id);
QueryResult qr = PersistenceHelper.manager.navigate(partById, WTPartDescribeLink.DESCRIBED_BY_ROLE,
WTPartDescribeLink.class, false);
while (qr != null && qr.hasMoreElements()) {
WTPartDescribeLink nowLink = (WTPartDescribeLink) qr.nextElement();
if (nowLink.getRoleBObject() instanceof WTDocument) {
DxPartDescribeLinkVO describeLinkVO = new DxPartDescribeLinkVO(nowLink);
resultList.add(describeLinkVO);
}
}
}finally {
SessionContext.setContext(previous);
}
return resultList;
}
public static List<DxPartReferenceLinkVO> searchPartRefLink(Long id) throws Exception {
if (!RemoteMethodServer.ServerFlag) {
return (List) RemoteMethodServer.getDefault().invoke("searchPartRefLink", DxPartService.class.getName(), null,
new Class[] { Long.class },
new Object[] { id });
}
List<DxPartReferenceLinkVO> resultList = new ArrayList<DxPartReferenceLinkVO>();
SessionContext previous = SessionContext.newContext();
try {
SessionHelper.manager.setAdministrator();
WTPart partById = DxPartUtil.getPartById(id);
QueryResult qrRefLink = PersistenceHelper.manager.navigate(partById, WTPartReferenceLink.REFERENCES_ROLE,
WTPartReferenceLink.class, false);
while (qrRefLink != null && qrRefLink.hasMoreElements()) {
WTPartReferenceLink nowLink = (WTPartReferenceLink) qrRefLink.nextElement();
if (nowLink.getRoleBObject() instanceof WTDocumentMaster) {
DxPartReferenceLinkVO referenceLinkVO = new DxPartReferenceLinkVO(nowLink);
resultList.add(referenceLinkVO);
}
}
}finally {
SessionContext.setContext(previous);
}
return resultList;
}
}
package com.yonde.part.vo;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.yonde.basedata.vo.IdVO;
import com.yonde.common.DateTimeUtil;
import com.yonde.doc.vo.DxDocumentVO;
public class DxPartDescribeLinkVO extends IdVO {
import wt.doc.WTDocument;
import wt.fc.PersistenceHelper;
import wt.part.WTPart;
import wt.part.WTPartDescribeLink;
import wt.session.SessionContext;
import wt.session.SessionHelper;
import wt.util.WTException;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.rmi.RemoteException;
@JsonTypeInfo(
use = JsonTypeInfo.Id.CLASS,
property = "classname",
visible = true,
defaultImpl = DxPartDescribeLinkVO.class
)
public class DxPartDescribeLinkVO extends IdVO implements Serializable{
private DxDocumentVO target;
private DxPartVO source;
......@@ -15,6 +34,25 @@ public class DxPartDescribeLinkVO extends IdVO {
// TODO
public DxPartDescribeLinkVO() {
}
public DxPartDescribeLinkVO(WTPartDescribeLink describeLink) throws WTException, RemoteException, InvocationTargetException {
super(describeLink);
SessionContext previous = SessionContext.newContext();
try {
// To set the user of the session to be the administrator
SessionHelper.manager.setAdministrator();
this.setSource(new DxPartVO((WTPart) describeLink.getRoleAObject()));
this.sourceId = this.source.getId();
this.setTarget(new DxDocumentVO((WTDocument) describeLink.getRoleBObject()));
this.targetId = this.target.getId();
}finally {
SessionContext.setContext(previous);
}
}
public DxDocumentVO getTarget() {
return target;
}
......
package com.yonde.part.vo;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.yonde.basedata.vo.IdVO;
import com.yonde.doc.vo.DxDocumentVO;
public class DxPartReferenceLinkVO extends IdVO {
import wt.doc.WTDocument;
import wt.doc.WTDocumentMaster;
import wt.fc.QueryResult;
import wt.part.WTPart;
import wt.part.WTPartReferenceLink;
import wt.session.SessionContext;
import wt.session.SessionHelper;
import wt.util.WTException;
import wt.vc.VersionControlHelper;
import wt.vc.wip.WorkInProgressHelper;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.rmi.RemoteException;
@JsonTypeInfo(
use = JsonTypeInfo.Id.CLASS,
property = "classname",
visible = true,
defaultImpl = DxPartReferenceLinkVO.class
)
public class DxPartReferenceLinkVO extends IdVO implements Serializable{
private DxDocumentVO target;
private DxPartVO source;
......@@ -15,6 +36,34 @@ public class DxPartReferenceLinkVO extends IdVO {
// TODO
public DxPartReferenceLinkVO() {
}
public DxPartReferenceLinkVO(WTPartReferenceLink referenceLink) throws WTException, RemoteException, InvocationTargetException {
super(referenceLink);
SessionContext previous = SessionContext.newContext();
try {
// To set the user of the session to be the administrator
SessionHelper.manager.setAdministrator();
this.setSource(new DxPartVO((WTPart) referenceLink.getRoleAObject()));
this.sourceId = this.source.getId();
WTDocumentMaster documentMaster = (WTDocumentMaster) referenceLink.getRoleBObject();
QueryResult qrv = VersionControlHelper.service.allVersionsOf(documentMaster);
WTDocument document = null;
while (qrv.hasMoreElements()) {
document = (WTDocument) qrv.nextElement();
if (!WorkInProgressHelper.isWorkingCopy(document)) {
this.setTarget(new DxDocumentVO(document));
break;
}
}
this.targetId = this.target.getId();
}finally {
SessionContext.setContext(previous);
}
}
public DxDocumentVO getTarget() {
return target;
}
......
......@@ -102,9 +102,9 @@ public class DxPartVO extends RevisionControlledVO implements Serializable {
//ObjectMapper m = new ObjectMapper();
WTOrganization organization = wtPart.getOrganization();
this.setDxOrganization(new DxOrganizationVO(organization));
this.originId = id;
WTPart previousVersion = CommonUtil.getPreviousVersion(wtPart);
this.predecessorId = PersistenceHelper.getObjectIdentifier(previousVersion).getId();
this.originId = predecessorId;
this.name = wtPart.getName();
this.number = wtPart.getNumber();
this.setMasterVO(new DxMasterVO(wtPart));
......@@ -126,7 +126,7 @@ public class DxPartVO extends RevisionControlledVO implements Serializable {
this.endItem = wtPart.isEndItem();
this.dxView = new DxViewVO(wtPart);
this.dxViewId = dxView.getLevel();
}finally {
} finally {
SessionContext.setContext(previous);
}
......
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