Browse Source

teamwok服务接口修改

luojing 5 years ago
parent
commit
cfd2b3903b
16 changed files with 574 additions and 138 deletions
  1. 22 43
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/ProjectTemplateFactory.java
  2. 5 3
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/TaskListTemplateFactory.java
  3. 3 3
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionDelete.java
  4. 80 5
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionGet.java
  5. 19 26
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionList.java
  6. 173 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionListNextWithFilter.java
  7. 9 24
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ProjectTemplateAction.java
  8. 103 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/WrapInQueryProjectTemplate.java
  9. 51 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/WrapOutControl.java
  10. 6 4
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/taskListTemplate/ActionList.java
  11. 22 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/DynamicPersistService.java
  12. 15 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/DynamicService.java
  13. 27 13
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/ProjectTemplateQueryService.java
  14. 26 16
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/ProjectTemplateService.java
  15. 12 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/TaskListTemplateService.java
  16. 1 1
      o2server/x_teamwork_core_entity/src/main/java/com/x/teamwork/core/entity/ProjectTemplate.java

+ 22 - 43
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/ProjectTemplateFactory.java

@@ -20,6 +20,7 @@ import com.x.teamwork.core.entity.Dynamic_;
 import com.x.teamwork.core.entity.Project;
 import com.x.teamwork.core.entity.Project;
 import com.x.teamwork.core.entity.ProjectDetail;
 import com.x.teamwork.core.entity.ProjectDetail;
 import com.x.teamwork.core.entity.ProjectTemplate;
 import com.x.teamwork.core.entity.ProjectTemplate;
+import com.x.teamwork.core.entity.ProjectTemplate_;
 import com.x.teamwork.core.entity.Project_;
 import com.x.teamwork.core.entity.Project_;
 import com.x.teamwork.core.entity.tools.CriteriaBuilderTools;
 import com.x.teamwork.core.entity.tools.CriteriaBuilderTools;
 import com.x.teamwork.core.entity.tools.filter.QueryFilter;
 import com.x.teamwork.core.entity.tools.filter.QueryFilter;
@@ -173,44 +174,34 @@ public class ProjectTemplateFactory extends AbstractFactory {
 	 * @return
 	 * @return
 	 * @throws Exception
 	 * @throws Exception
 	 */
 	 */
-	public List<Project> listWithFilter( Integer maxCount, Object sequenceFieldValue, String orderField, String orderType, String personName, List<String> identityNames, List<String> unitNames, List<String> groupNames, QueryFilter queryFilter) throws Exception {
-		EntityManager em = this.entityManagerContainer().get( Project.class );
+	public List<ProjectTemplate> listWithFilter( Integer maxCount, Object sequenceFieldValue, String orderField, String orderType, String personName, QueryFilter queryFilter) throws Exception {
+		EntityManager em = this.entityManagerContainer().get( ProjectTemplate.class );
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaBuilder cb = em.getCriteriaBuilder();
-		CriteriaQuery<Project> cq = cb.createQuery(Project.class);
-		Root<Project> root = cq.from(Project.class);
+		CriteriaQuery<ProjectTemplate> cq = cb.createQuery(ProjectTemplate.class);
+		Root<ProjectTemplate> root = cq.from(ProjectTemplate.class);
 		Predicate p_permission = null;
 		Predicate p_permission = null;
 		
 		
-		if( StringUtils.isNotEmpty( personName )) {
+		/*if( StringUtils.isNotEmpty( personName )) {
 			//可以管理的栏目,肯定可以发布信息
 			//可以管理的栏目,肯定可以发布信息
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.participantPersonList )) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.participantPersonList )) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.manageablePersonList )) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.manageablePersonList )) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.creatorPerson ), personName ) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.creatorPerson ), personName ) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.executor ), personName ) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.executor ), personName ) );
-		}
-		
-		if( ListTools.isNotEmpty( identityNames )) {
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission,  root.get( Project_.participantIdentityList).in(identityNames));
-		}
-		if( ListTools.isNotEmpty( unitNames )) {
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission,  root.get( Project_.participantUnitList).in(unitNames));
-		}
-		if( ListTools.isNotEmpty( groupNames )) {
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission,  root.get( Project_.participantGroupList).in(groupNames));
-		}
+		}*/
 		
 		
-		Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( Project_.class, cb, p_permission, root, queryFilter );
+		Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( ProjectTemplate_.class, cb, p_permission, root, queryFilter );
 		
 		
 		if( sequenceFieldValue != null && StringUtils.isNotEmpty( sequenceFieldValue.toString() )) {
 		if( sequenceFieldValue != null && StringUtils.isNotEmpty( sequenceFieldValue.toString() )) {
 			Predicate p_seq = cb.isNotNull( root.get( Dynamic_.sequence ) );
 			Predicate p_seq = cb.isNotNull( root.get( Dynamic_.sequence ) );
 			if( "desc".equalsIgnoreCase( orderType )){
 			if( "desc".equalsIgnoreCase( orderType )){
-				p_seq = cb.and( p_seq, cb.lessThan( root.get( Project_.sequence ), sequenceFieldValue.toString() ));
+				p_seq = cb.and( p_seq, cb.lessThan( root.get( ProjectTemplate_.sequence ), sequenceFieldValue.toString() ));
 			}else{
 			}else{
-				p_seq = cb.and( p_seq, cb.greaterThan( root.get( Project_.sequence ), sequenceFieldValue.toString() ));
+				p_seq = cb.and( p_seq, cb.greaterThan( root.get( ProjectTemplate_.sequence ), sequenceFieldValue.toString() ));
 			}
 			}
 			p = cb.and( p, p_seq);
 			p = cb.and( p, p_seq);
 		}		
 		}		
 		
 		
-		Order orderWithField = CriteriaBuilderTools.getOrder( cb, root, Project_.class, orderField, orderType );
+		Order orderWithField = CriteriaBuilderTools.getOrder( cb, root, ProjectTemplate_.class, orderField, orderType );
 		if( orderWithField != null ){
 		if( orderWithField != null ){
 			cq.orderBy( orderWithField );
 			cq.orderBy( orderWithField );
 		}
 		}
@@ -219,46 +210,34 @@ public class ProjectTemplateFactory extends AbstractFactory {
 	}
 	}
 	
 	
 	/**
 	/**
-	 * 根据条件查询所有符合条件的项目信息ID,项目信息不会很多 ,所以直接查询出来
+	 * 根据条件查询所有符合条件的项目模板信息ID,项目信息不会很多 ,所以直接查询出来
 	 * @param maxCount
 	 * @param maxCount
 	 * @param sequenceFieldValue
 	 * @param sequenceFieldValue
 	 * @param orderField
 	 * @param orderField
 	 * @param orderType
 	 * @param orderType
 	 * @param personName
 	 * @param personName
-	 * @param identityNames
-	 * @param unitNames
-	 * @param groupNames
 	 * @param queryFilter
 	 * @param queryFilter
 	 * @return
 	 * @return
 	 * @throws Exception
 	 * @throws Exception
 	 */
 	 */
-	public List<String> listAllViewableProjectIds( Integer maxCount, String personName, List<String> identityNames, List<String> unitNames, List<String> groupNames, QueryFilter queryFilter) throws Exception {
-		EntityManager em = this.entityManagerContainer().get( Project.class );
+	public List<String> listAllProjectTemplateIds( Integer maxCount, String personName, QueryFilter queryFilter) throws Exception {
+		EntityManager em = this.entityManagerContainer().get( ProjectTemplate.class );
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
-		Root<Project> root = cq.from(Project.class);
+		Root<ProjectTemplate> root = cq.from(ProjectTemplate.class);
 		Predicate p_permission = null;
 		Predicate p_permission = null;
 		
 		
 		
 		
-		if( StringUtils.isNotEmpty( personName )) {
+		/*if( StringUtils.isNotEmpty( personName )) {
 			//可以管理的栏目,肯定可以发布信息
 			//可以管理的栏目,肯定可以发布信息
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.participantPersonList )) );
+			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( ProjectTemplate_.participantPersonList )) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.manageablePersonList )) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.manageablePersonList )) );
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.creatorPerson ), personName ) );
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.executor ), personName ) );
-		}
-		if( ListTools.isNotEmpty( identityNames )) {
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission,  root.get( Project_.participantIdentityList).in(identityNames));
-		}
-		if( ListTools.isNotEmpty( unitNames )) {
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission,  root.get( Project_.participantUnitList).in(unitNames));
-		}
-		if( ListTools.isNotEmpty( groupNames )) {
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission,  root.get( Project_.participantGroupList).in(groupNames));
-		}
+			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( ProjectTemplate_.creatorPerson ), personName ) );
+			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( ProjectTemplate_.executor ), personName ) );
+		}*/
 		
 		
-		Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( Project_.class, cb, p_permission, root, queryFilter );
-		cq.distinct(true).select( root.get(Project_.id) );
+		Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( ProjectTemplate_.class, cb, p_permission, root, queryFilter );
+		cq.distinct(true).select( root.get(ProjectTemplate_.id) );
 		return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
 		return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
 	}
 	}
 
 

+ 5 - 3
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/TaskListTemplateFactory.java

@@ -23,6 +23,7 @@ import com.x.teamwork.core.entity.ProjectTemplate;
 import com.x.teamwork.core.entity.Project_;
 import com.x.teamwork.core.entity.Project_;
 import com.x.teamwork.core.entity.TaskListTemplate;
 import com.x.teamwork.core.entity.TaskListTemplate;
 import com.x.teamwork.core.entity.TaskListTemplate_;
 import com.x.teamwork.core.entity.TaskListTemplate_;
+import com.x.teamwork.core.entity.Task_;
 import com.x.teamwork.core.entity.tools.CriteriaBuilderTools;
 import com.x.teamwork.core.entity.tools.CriteriaBuilderTools;
 import com.x.teamwork.core.entity.tools.filter.QueryFilter;
 import com.x.teamwork.core.entity.tools.filter.QueryFilter;
 
 
@@ -54,14 +55,15 @@ public class TaskListTemplateFactory extends AbstractFactory {
 	 * @throws Exception
 	 * @throws Exception
 	 */
 	 */
 	public List<TaskListTemplate> list( String id ) throws Exception {
 	public List<TaskListTemplate> list( String id ) throws Exception {
-		if( StringUtils.isNotEmpty( id ) ){
+		if( StringUtils.isEmpty( id ) ){
 			return new ArrayList<TaskListTemplate>();
 			return new ArrayList<TaskListTemplate>();
 		}
 		}
-		EntityManager em = this.entityManagerContainer().get(Project.class);
+		EntityManager em = this.entityManagerContainer().get(TaskListTemplate.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<TaskListTemplate> cq = cb.createQuery(TaskListTemplate.class);
 		CriteriaQuery<TaskListTemplate> cq = cb.createQuery(TaskListTemplate.class);
 		Root<TaskListTemplate> root = cq.from(TaskListTemplate.class);
 		Root<TaskListTemplate> root = cq.from(TaskListTemplate.class);
-		Predicate p = cb.equal( root.get( TaskListTemplate_.id ), id ); 
+		Predicate p = cb.equal( root.get( TaskListTemplate_.projectTemplate ), id ); 
+		p = cb.and( p, cb.isFalse( root.get(TaskListTemplate_.deleted)));
 		cq.orderBy( cb.desc( root.get( TaskListTemplate_.updateTime ) ) ); 
 		cq.orderBy( cb.desc( root.get( TaskListTemplate_.updateTime ) ) ); 
 		return em.createQuery(cq.where(p)).getResultList();
 		return em.createQuery(cq.where(p)).getResultList();
 	}
 	}

+ 3 - 3
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionDelete.java

@@ -70,9 +70,9 @@ public class ActionDelete extends BaseAction {
 				logger.error(e, effectivePerson, request, null);
 				logger.error(e, effectivePerson, request, null);
 			}
 			}
 		}
 		}
-		/*if( Boolean.TRUE.equals( check ) ){
+		if( Boolean.TRUE.equals( check ) ){
 			try {					
 			try {					
-				Dynamic dynamic = dynamicPersistService.projectGroupDeleteDynamic( projectGroup, effectivePerson );
+				Dynamic dynamic = dynamicPersistService.projectTemplateDeleteDynamic( projectTemplate, effectivePerson );
 				if( dynamic != null ) {
 				if( dynamic != null ) {
 					List<WoDynamic> dynamics = new ArrayList<>();
 					List<WoDynamic> dynamics = new ArrayList<>();
 					dynamics.add( WoDynamic.copier.copy( dynamic ) );
 					dynamics.add( WoDynamic.copier.copy( dynamic ) );
@@ -83,7 +83,7 @@ public class ActionDelete extends BaseAction {
 			} catch (Exception e) {
 			} catch (Exception e) {
 				logger.error(e, effectivePerson, request, null);
 				logger.error(e, effectivePerson, request, null);
 			}	
 			}	
-		}*/
+		}
 		result.setData( wo );
 		result.setData( wo );
 		return result;
 		return result;
 	}
 	}

+ 80 - 5
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionGet.java

@@ -7,7 +7,10 @@ import javax.servlet.http.HttpServletRequest;
 
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 
 
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
 import com.x.base.core.entity.JpaObject;
 import com.x.base.core.entity.JpaObject;
+import com.x.base.core.project.annotation.FieldDescribe;
 import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
 import com.x.base.core.project.bean.WrapCopierFactory;
 import com.x.base.core.project.cache.ApplicationCache;
 import com.x.base.core.project.cache.ApplicationCache;
@@ -16,7 +19,9 @@ import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.ListTools;
+import com.x.teamwork.assemble.control.Business;
 import com.x.teamwork.core.entity.ProjectTemplate;
 import com.x.teamwork.core.entity.ProjectTemplate;
+import com.x.teamwork.core.entity.TaskListTemplate;
 
 
 import net.sf.ehcache.Element;
 import net.sf.ehcache.Element;
 
 
@@ -29,6 +34,8 @@ public class ActionGet extends BaseAction {
 		Wo wo = null;
 		Wo wo = null;
 		ProjectTemplate projectTemplate = null;
 		ProjectTemplate projectTemplate = null;
 		Boolean check = true;
 		Boolean check = true;
+		List<TaskListTemplate> taskListTemplate = null;
+		WrapOutControl control = null;
 
 
 		if ( StringUtils.isEmpty( id ) ) {
 		if ( StringUtils.isEmpty( id ) ) {
 			check = false;
 			check = false;
@@ -36,13 +43,13 @@ public class ActionGet extends BaseAction {
 			result.error( exception );
 			result.error( exception );
 		}
 		}
 
 
-		String cacheKey = ApplicationCache.concreteCacheKey( id ,effectivePerson);
+		/*String cacheKey = ApplicationCache.concreteCacheKey( id ,effectivePerson);
 		Element element = projectTemplateCache.get( cacheKey );
 		Element element = projectTemplateCache.get( cacheKey );
 
 
 		if ((null != element) && (null != element.getObjectValue())) {
 		if ((null != element) && (null != element.getObjectValue())) {
 			wo = (Wo) element.getObjectValue();
 			wo = (Wo) element.getObjectValue();
 			result.setData( wo );
 			result.setData( wo );
-		} else {
+		} else {*/
 			if( Boolean.TRUE.equals( check ) ){
 			if( Boolean.TRUE.equals( check ) ){
 				try {
 				try {
 					projectTemplate = projectTemplateQueryService.get( id );
 					projectTemplate = projectTemplateQueryService.get( id );
@@ -61,8 +68,45 @@ public class ActionGet extends BaseAction {
 			
 			
 			if( Boolean.TRUE.equals( check ) ){
 			if( Boolean.TRUE.equals( check ) ){
 				try {
 				try {
-					wo = Wo.copier.copy( projectTemplate );					
-					projectTemplateCache.put(new Element(cacheKey, wo));
+					wo = Wo.copier.copy( projectTemplate );
+					taskListTemplate = projectTemplateQueryService.getTaskListTemplateWithTemplateId(wo.getId());
+					if( ListTools.isNotEmpty( taskListTemplate )) {
+						wo.setTaskListTemplate( WoTaskListTemplate.copier.copy( taskListTemplate ));
+					}
+					
+					//计算权限
+					if( Boolean.TRUE.equals( check ) ){
+						Business business = null;
+						try (EntityManagerContainer bc = EntityManagerContainerFactory.instance().create()) {
+							business = new Business(bc);
+						}
+						try {
+							control = new WrapOutControl();
+							if( business.isManager(effectivePerson) 
+									|| effectivePerson.getDistinguishedName().equalsIgnoreCase( projectTemplate.getOwner() )){
+								control.setDelete( true );
+								control.setEdit( true );
+								control.setSortable( true );								
+							}else{
+								control.setDelete( false );
+								control.setEdit( false );
+								control.setSortable( false );								
+							}
+							if(effectivePerson.getDistinguishedName().equalsIgnoreCase( projectTemplate.getOwner() )){
+								control.setFounder( true );
+							}else{
+								control.setFounder( false );
+							}
+							wo.setControl(control);
+						} catch (Exception e) {
+							check = false;
+							Exception exception = new ProjectTemplateQueryException(e, "根据指定flag查询工作任务权限信息时发生异常。id:" + id);
+							result.error(exception);
+							logger.error(e, effectivePerson, request, null);
+						}
+					}
+					
+					//projectTemplateCache.put(new Element(cacheKey, wo));
 					result.setData(wo);
 					result.setData(wo);
 				} catch (Exception e) {
 				} catch (Exception e) {
 					Exception exception = new ProjectTemplateQueryException(e, "将查询出来的项目模板信息对象转换为可输出的数据信息时发生异常。");
 					Exception exception = new ProjectTemplateQueryException(e, "将查询出来的项目模板信息对象转换为可输出的数据信息时发生异常。");
@@ -70,11 +114,33 @@ public class ActionGet extends BaseAction {
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
 			}
 			}
-		}
+		//}
 		return result;
 		return result;
 	}
 	}
 
 
 	public static class Wo extends ProjectTemplate {
 	public static class Wo extends ProjectTemplate {
+		@FieldDescribe("项目模板权限")
+		private WrapOutControl control = null;	
+		
+		@FieldDescribe("模板对应的泳道信息")
+		private List<WoTaskListTemplate> taskListTemplate = null;
+		
+		public WrapOutControl getControl() {
+			return control;
+		}
+
+		public void setControl(WrapOutControl control) {
+			this.control = control;
+		}
+		
+		public List<WoTaskListTemplate> getTaskListTemplate() {
+			return taskListTemplate;
+		}
+
+		public void setTaskListTemplate(List<WoTaskListTemplate> taskListTemplate) {
+			this.taskListTemplate = taskListTemplate;
+		}
+		
 		
 		
 		private static final long serialVersionUID = -5076990764713538973L;
 		private static final long serialVersionUID = -5076990764713538973L;
 
 
@@ -83,4 +149,13 @@ public class ActionGet extends BaseAction {
 		static WrapCopier<ProjectTemplate, Wo> copier = WrapCopierFactory.wo( ProjectTemplate.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));		
 		static WrapCopier<ProjectTemplate, Wo> copier = WrapCopierFactory.wo( ProjectTemplate.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));		
 
 
 	}
 	}
+	public static class WoTaskListTemplate extends TaskListTemplate {
+		
+		private static final long serialVersionUID = -5076990764713538973L;
+
+		public static List<String> Excludes = new ArrayList<String>();
+
+		static WrapCopier<TaskListTemplate, WoTaskListTemplate> copier = WrapCopierFactory.wo( TaskListTemplate.class, WoTaskListTemplate.class, null, ListTools.toList(JpaObject.FieldsInvisible));		
+
+	}
 }
 }

+ 19 - 26
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionList.java

@@ -16,6 +16,7 @@ import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.SortTools;
 import com.x.base.core.project.tools.SortTools;
 import com.x.teamwork.core.entity.ProjectGroup;
 import com.x.teamwork.core.entity.ProjectGroup;
+import com.x.teamwork.core.entity.TaskListTemplate;
 
 
 import net.sf.ehcache.Element;
 import net.sf.ehcache.Element;
 
 
@@ -27,39 +28,31 @@ public class ActionList extends BaseAction {
 	protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson ) throws Exception {
 	protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson ) throws Exception {
 		ActionResult<List<Wo>> result = new ActionResult<>();
 		ActionResult<List<Wo>> result = new ActionResult<>();
 		List<Wo> wos = null;
 		List<Wo> wos = null;
-		List<ProjectGroup> projectGroups = null;
+		List<TaskListTemplate> projectGroups = null;
 		Boolean check = true;
 		Boolean check = true;
 
 
-		String cacheKey = ApplicationCache.concreteCacheKey( "list.my", effectivePerson.getDistinguishedName() );
-		/*Element element = projectGroupCache.get( cacheKey );
-		
-		if ((null != element) && (null != element.getObjectValue())) {
-			wos = (List<Wo>) element.getObjectValue();
-			result.setData( wos );
-		} else {
-			if( Boolean.TRUE.equals( check ) ){
-				try {
-					projectGroups = projectGroupQueryService.listGroupByPerson( effectivePerson.getDistinguishedName() );
-					if( ListTools.isNotEmpty( projectGroups )) {
-						wos = Wo.copier.copy( projectGroups );
-						
-						SortTools.asc( wos, "createTime");
-						
-						projectGroupCache.put(new Element(cacheKey, wos));
-						result.setData(wos);
-					}
-				} catch (Exception e) {
-					check = false;
-					Exception exception = new ProjectTemplateQueryException(e, "根据用户拥有的项目组信息列表时发生异常。");
-					result.error(exception);
-					logger.error(e, effectivePerson, request, null);
+		/*if( Boolean.TRUE.equals( check ) ){
+			try {
+				projectGroups = projectGroupQueryService.listGroupByPerson( effectivePerson.getDistinguishedName() );
+				if( ListTools.isNotEmpty( projectGroups )) {
+					wos = Wo.copier.copy( projectGroups );
+					
+					SortTools.asc( wos, "createTime");
+					
+					result.setData(wos);
 				}
 				}
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new ProjectTemplateQueryException(e, "根据用户拥有的项目组信息列表时发生异常。");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
 			}
 			}
 		}*/
 		}*/
+		
 		return result;
 		return result;
 	}
 	}
 
 
-	public static class Wo extends ProjectGroup {
+	public static class Wo extends TaskListTemplate {
 		
 		
 		private Long rank;
 		private Long rank;
 
 
@@ -75,7 +68,7 @@ public class ActionList extends BaseAction {
 
 
 		public static List<String> Excludes = new ArrayList<String>();
 		public static List<String> Excludes = new ArrayList<String>();
 
 
-		static WrapCopier<ProjectGroup, Wo> copier = WrapCopierFactory.wo( ProjectGroup.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
+		static WrapCopier<TaskListTemplate, Wo> copier = WrapCopierFactory.wo( TaskListTemplate.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
 
 
 	}
 	}
 }
 }

+ 173 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionListNextWithFilter.java

@@ -0,0 +1,173 @@
+package com.x.teamwork.assemble.control.jaxrs.projectTemplate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.google.gson.JsonElement;
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.entity.JpaObject;
+import com.x.base.core.project.bean.WrapCopier;
+import com.x.base.core.project.bean.WrapCopierFactory;
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.ListTools;
+import com.x.teamwork.assemble.control.Business;
+import com.x.teamwork.core.entity.Project;
+import com.x.teamwork.core.entity.ProjectTemplate;
+import com.x.teamwork.core.entity.tools.filter.QueryFilter;
+import com.x.teamwork.core.entity.tools.filter.term.InTerm;
+
+import net.sf.ehcache.Element;
+
+public class ActionListNextWithFilter extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionListNextWithFilter.class);
+
+	protected ActionResult<List<Wo>> execute( HttpServletRequest request, EffectivePerson effectivePerson, String flag, Integer count, JsonElement jsonElement ) throws Exception {
+		ActionResult<List<Wo>> result = new ActionResult<>();
+		ResultObject resultObject = null;
+		List<Wo> wos = new ArrayList<>();
+		Wi wrapIn = null;
+		Boolean check = true;
+		String cacheKey = null;
+		Element element = null;
+		QueryFilter  queryFilter = null;
+		List<String> queryProjectIds = new ArrayList<>();
+		
+		if ( StringUtils.isEmpty( flag ) || "(0)".equals(flag)) { 
+			flag = null;
+		}
+
+		try {
+			wrapIn = this.convertToWrapIn(jsonElement, Wi.class);
+		} catch (Exception e) {
+			check = false;
+			Exception exception = new ProjectTemplateQueryException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
+		}
+
+		if( Boolean.TRUE.equals( check ) ){
+			if( wrapIn == null ) {
+				wrapIn = new Wi();
+			}
+			queryFilter = wrapIn.getQueryFilter();
+			
+		}
+		
+		if( Boolean.TRUE.equals( check ) ){
+			cacheKey = ApplicationCache.concreteCacheKey( "ActionListNextWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
+					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
+			element = projectTemplateCache.get( cacheKey );
+			
+			if ((null != element) && (null != element.getObjectValue())) {
+				resultObject = (ResultObject) element.getObjectValue();
+				result.setCount( resultObject.getTotal() );
+				result.setData( resultObject.getWos() );
+			} else {
+				try {
+					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
+					List<String>  projectIds = projectTemplateQueryService.listAllProjectTemplateIds( effectivePerson, 2000, queryFilter );
+					if( ListTools.isNotEmpty( projectIds )) {
+						//直接根据可见项目ID列表进行分页查询
+						Long total = Long.parseLong( projectIds.size() + "" );										
+						List<ProjectTemplate>  projectList = projectTemplateQueryService.listWithProjectIdFilter( count, flag, wrapIn.getOrderField(), wrapIn.getOrderType(), projectIds );
+						
+						if( ListTools.isNotEmpty( projectList )) { 
+							WrapOutControl control = null;
+							for( ProjectTemplate project : projectList ) {
+								Wo wo = Wo.copier.copy(project);
+								
+								/*Business business = null;
+								try (EntityManagerContainer bc = EntityManagerContainerFactory.instance().create()) {
+									business = new Business(bc);
+								}
+								control = new WrapOutControl();
+								if( business.isManager(effectivePerson) 
+										|| effectivePerson.getDistinguishedName().equalsIgnoreCase( project.getCreatorPerson() )
+										|| project.getManageablePersonList().contains( effectivePerson.getDistinguishedName() )) {
+									control.setDelete( true );
+									control.setEdit( true );
+									control.setSortable( true );
+								}else{
+									control.setDelete( false );
+									control.setEdit( false );
+									control.setSortable( false );
+								}
+								if(effectivePerson.getDistinguishedName().equalsIgnoreCase( project.getCreatorPerson())){
+									control.setFounder( true );
+								}else{
+									control.setFounder( false );
+								}
+								wo.setControl(control);*/
+								wos.add( wo );
+							}
+						}
+						resultObject = new ResultObject( total, wos );
+						projectTemplateCache.put(new Element( cacheKey, resultObject ));
+						
+						result.setCount( resultObject.getTotal() );
+						result.setData( resultObject.getWos() );
+					}
+				} catch (Exception e) {
+					check = false;
+					logger.warn("系统查询项目信息列表时发生异常!");
+					result.error(e);
+					logger.error(e, effectivePerson, request, null);
+				}
+			}		
+		}
+		return result;
+	}
+
+	public static class Wi extends WrapInQueryProjectTemplate{
+	}
+	
+	public static class Wo extends ProjectTemplate {
+
+		private static final long serialVersionUID = -5076990764713538973L;
+
+		public static List<String> Excludes = new ArrayList<String>();
+
+		static WrapCopier<ProjectTemplate, Wo> copier = WrapCopierFactory.wo( ProjectTemplate.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
+
+	}
+	
+	public static class ResultObject {
+
+		private Long total;
+		
+		private List<Wo> wos;
+
+		public ResultObject() {}
+		
+		public ResultObject(Long count, List<Wo> data) {
+			this.total = count;
+			this.wos = data;
+		}
+
+		public Long getTotal() {
+			return total;
+		}
+
+		public void setTotal(Long total) {
+			this.total = total;
+		}
+
+		public List<Wo> getWos() {
+			return wos;
+		}
+
+		public void setWos(List<Wo> wos) {
+			this.wos = wos;
+		}
+	}
+}

+ 9 - 24
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ProjectTemplateAction.java

@@ -28,6 +28,7 @@ import com.x.base.core.project.jaxrs.StandardJaxrsAction;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.logger.LoggerFactory;
 
 
+
 @Path("projectTemplate")
 @Path("projectTemplate")
 @JaxrsDescribe("项目模板信息管理")
 @JaxrsDescribe("项目模板信息管理")
 public class ProjectTemplateAction extends StandardJaxrsAction {
 public class ProjectTemplateAction extends StandardJaxrsAction {
@@ -53,35 +54,19 @@ public class ProjectTemplateAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	}
 	
 	
-	@JaxrsMethodDescribe(value = "查询用户创建的所有项目组信息列表.", action = ActionList.class)
-	@GET
-	@Path("list/my")
-	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
-	@Consumes(MediaType.APPLICATION_JSON)
-	public void listGroups(@Suspended final AsyncResponse asyncResponse, 
-			@Context HttpServletRequest request ) {
-		ActionResult<List<ActionList.Wo>> result = new ActionResult<>();
-		EffectivePerson effectivePerson = this.effectivePerson(request);	
-		try {
-			result = new ActionList().execute( request, effectivePerson );
-		} catch (Exception e) {
-			logger.error(e, effectivePerson, request, null);
-			result.error(e);
-		}
-		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
-	}
-	
-	@JaxrsMethodDescribe(value = "根据ID列表查询项目组信息列表.", action = ActionListWithFilter.class)
+	@JaxrsMethodDescribe(value = "列示项目信息,下一页.", action = ActionListNextWithFilter.class)
 	@PUT
 	@PUT
+	@Path("list/{id}/next/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public void listWithIds(@Suspended final AsyncResponse asyncResponse, 
-			@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("传入的ID列表") JsonElement jsonElement ) {
-		ActionResult<List<ActionListWithFilter.Wo>> result = new ActionResult<>();
+	public void listNextWithFilter(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("最后一条信息数据的ID") @PathParam( "id" ) String id, 
+			@JaxrsParameterDescribe("每页显示的条目数量") @PathParam( "count" ) Integer count, 
+			@JaxrsParameterDescribe("查询过滤条件") JsonElement jsonElement ) {
+		ActionResult<List<ActionListNextWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
 		try {
-			result = new ActionListWithFilter().execute(request, effectivePerson, jsonElement);
+			result = new ActionListNextWithFilter().execute(request, effectivePerson, id, count, jsonElement);
 		} catch (Exception e) {
 		} catch (Exception e) {
 			logger.error(e, effectivePerson, request, null);
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 			result.error(e);

+ 103 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/WrapInQueryProjectTemplate.java

@@ -0,0 +1,103 @@
+package com.x.teamwork.assemble.control.jaxrs.projectTemplate;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.teamwork.core.entity.tools.filter.QueryFilter;
+import com.x.teamwork.core.entity.tools.filter.term.EqualsTerm;
+import com.x.teamwork.core.entity.tools.filter.term.LikeTerm;
+
+public class WrapInQueryProjectTemplate {
+	@FieldDescribe("用于排列的属性,非必填,默认为createTime.")
+	private String orderField = "createTime";
+
+	@FieldDescribe("排序方式:DESC | ASC,非必填, 默认为DESC.")
+	private String orderType = "DESC";
+	
+	@FieldDescribe("用于搜索的标题,非必填.")
+	private String title = null;
+	
+	@FieldDescribe("用于搜索的项目模板类型,非必填.")
+	private String type = null;			
+	
+	@FieldDescribe("是否已经删除,非必填")
+	private String deleted = null;
+	
+	@FieldDescribe("创建者,非必填")
+	private String owner = null;		
+	
+	private Long rank = 0L;
+	
+	public String getOrderField() {
+		return orderField;
+	}
+	public void setOrderField(String orderField) {
+		this.orderField = orderField;
+	}
+	public String getOrderType() {
+		return orderType;
+	}
+
+	public void setOrderType(String orderType) {
+		this.orderType = orderType;
+	}
+	public String getTitle() {
+		return title;
+	}
+	public void setTitle(String title) {
+		this.title = title;
+	}
+	public String getType() {
+		return type;
+	}
+	public void setType(String type) {
+		this.type = type;
+	}
+	public String getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(String deleted) {
+		this.deleted = deleted;
+	}
+	public String getOwner() {
+		return owner;
+	}
+	public void setOwner(String owner) {
+		this.owner = owner;
+	}
+	public Long getRank() {
+		return rank;
+	}
+	public void setRank(Long rank) {
+		this.rank = rank;
+	}
+
+
+
+	/**
+	 * 根据传入的查询参数,组织一个完整的QueryFilter对象
+	 * @return
+	 */
+	public QueryFilter getQueryFilter() {
+		QueryFilter queryFilter = new QueryFilter();		
+		queryFilter.setJoinType( "and" );
+		//组织查询条件对象
+		if( StringUtils.isNotEmpty( this.getTitle() )) {
+			queryFilter.addLikeTerm( new LikeTerm( "title", this.getTitle() ) );
+		}
+		if( StringUtils.isNotEmpty( this.getType())) {
+			queryFilter.addEqualsTerm( new EqualsTerm( "type", this.getType() ) );
+		}
+		if( StringUtils.isNotEmpty( this.getOwner())) {
+			queryFilter.addEqualsTerm( new EqualsTerm( "owner", this.getOwner() ) );
+		}
+		if( StringUtils.isNotEmpty( this.getDeleted() )) {
+			if( "true".equalsIgnoreCase( this.getDeleted() )) {
+				queryFilter.addEqualsTerm( new EqualsTerm( "deleted", true ) );
+			}else {
+				queryFilter.addEqualsTerm( new EqualsTerm( "deleted", false ) );
+			}
+		}
+		return queryFilter;
+	}
+}

+ 51 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/WrapOutControl.java

@@ -0,0 +1,51 @@
+package com.x.teamwork.assemble.control.jaxrs.projectTemplate;
+
+import com.x.base.core.project.annotation.FieldDescribe;
+
+public class WrapOutControl {
+	
+	@FieldDescribe("是否可删除")
+	private Boolean delete = false;
+	
+	@FieldDescribe("是否可编辑")
+	private Boolean edit = false;
+	
+	@FieldDescribe("是否可排序")
+	private Boolean sortable = true;
+	
+	@FieldDescribe("是否创始人")
+	private Boolean founder = false;
+	
+	public Boolean getDelete() {
+		return delete;
+	}
+
+	public void setDelete(Boolean delete) {
+		this.delete = delete;
+	}
+	
+	public Boolean getEdit() {
+		return edit;
+	}
+
+	public void setEdit(Boolean edit) {
+		this.edit = edit;
+	}
+	
+	public Boolean getSortable() {
+		return sortable;
+	}
+
+	public void setSortable(Boolean sortable) {
+		this.sortable = sortable;
+	}
+	
+	public Boolean getFounder() {
+		return founder;
+	}
+
+	public void setFounder(Boolean founder) {
+		this.founder = founder;
+	}
+	
+}

+ 6 - 4
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/taskListTemplate/ActionList.java

@@ -16,6 +16,7 @@ import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.SortTools;
 import com.x.base.core.project.tools.SortTools;
 import com.x.teamwork.core.entity.ProjectGroup;
 import com.x.teamwork.core.entity.ProjectGroup;
+import com.x.teamwork.core.entity.TaskListTemplate;
 
 
 import net.sf.ehcache.Element;
 import net.sf.ehcache.Element;
 
 
@@ -27,16 +28,17 @@ public class ActionList extends BaseAction {
 	protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson ) throws Exception {
 	protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson ) throws Exception {
 		ActionResult<List<Wo>> result = new ActionResult<>();
 		ActionResult<List<Wo>> result = new ActionResult<>();
 		List<Wo> wos = null;
 		List<Wo> wos = null;
-		List<ProjectGroup> projectGroups = null;
+		List<TaskListTemplate> taskListTemplates = null;
 		Boolean check = true;
 		Boolean check = true;
 
 
-		String cacheKey = ApplicationCache.concreteCacheKey( "list.my", effectivePerson.getDistinguishedName() );
-		/*Element element = projectGroupCache.get( cacheKey );
+		/*String cacheKey = ApplicationCache.concreteCacheKey( "list.taskListTemplates", effectivePerson.getDistinguishedName() );
+		Element element = projectGroupCache.get( cacheKey );
 		
 		
 		if ((null != element) && (null != element.getObjectValue())) {
 		if ((null != element) && (null != element.getObjectValue())) {
 			wos = (List<Wo>) element.getObjectValue();
 			wos = (List<Wo>) element.getObjectValue();
 			result.setData( wos );
 			result.setData( wos );
 		} else {
 		} else {
+		
 			if( Boolean.TRUE.equals( check ) ){
 			if( Boolean.TRUE.equals( check ) ){
 				try {
 				try {
 					projectGroups = projectGroupQueryService.listGroupByPerson( effectivePerson.getDistinguishedName() );
 					projectGroups = projectGroupQueryService.listGroupByPerson( effectivePerson.getDistinguishedName() );
@@ -55,7 +57,7 @@ public class ActionList extends BaseAction {
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
 			}
 			}
-		}*/
+		//}*/
 		return result;
 		return result;
 	}
 	}
 
 

+ 22 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/DynamicPersistService.java

@@ -408,6 +408,28 @@ public class DynamicPersistService {
 		}
 		}
 		return dynamic;
 		return dynamic;
 	}
 	}
+	/**
+	 * 保存项目模板删除动态信息
+	 * @param object
+	 * @param effectivePerson
+	 * @return
+	 * @throws Exception
+	 */
+	public Dynamic projectTemplateDeleteDynamic( ProjectTemplate object, EffectivePerson effectivePerson ) throws Exception {
+		if ( object == null) {
+			throw new Exception("ProjectTemplate object is null.");
+		}
+		if ( effectivePerson == null ) {
+			throw new Exception("effectivePerson is null.");
+		}
+		Dynamic dynamic = dynamicService.getProjectTemplateDeleteDynamic(object, effectivePerson);
+		try ( EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {			
+			dynamic = dynamicService.save( emc, dynamic, null );
+		} catch (Exception e) {
+			throw e;
+		}
+		return dynamic;
+	}
 	
 	
 	/**
 	/**
 	 * 保存工作任务删除动态信息
 	 * 保存工作任务删除动态信息

+ 15 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/DynamicService.java

@@ -542,6 +542,21 @@ class DynamicService {
 		return composeNewDynamic( objectType, title, description, viewUrl, optType, object, effectivePerson, true );
 		return composeNewDynamic( objectType, title, description, viewUrl, optType, object, effectivePerson, true );
 	}
 	}
 	
 	
+	/**
+	 * 组织一个项目模板删除操作动态
+	 * @param object
+	 * @param effectivePerson
+	 * @return
+	 */
+	protected Dynamic getProjectTemplateDeleteDynamic( ProjectTemplate object, EffectivePerson effectivePerson ) {
+		String objectType =  "PROJECT_TEMPLATE";
+		String title =  "项目模板信息删除";
+		String viewUrl = null;
+		String optType =  "DELETE";
+		String description = effectivePerson.getName() +"删除了项目模板信息:" + object.getTitle();
+		return composeNewDynamic( objectType, title, description, viewUrl, optType, object, effectivePerson, true );
+	}
+	
 	/**
 	/**
 	 * 组织项目扩展信息配置保存操作动态
 	 * 组织项目扩展信息配置保存操作动态
 	 * @param object_old
 	 * @param object_old

+ 27 - 13
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/ProjectTemplateQueryService.java

@@ -12,6 +12,7 @@ import com.x.base.core.project.tools.ListTools;
 import com.x.teamwork.core.entity.Project;
 import com.x.teamwork.core.entity.Project;
 import com.x.teamwork.core.entity.ProjectDetail;
 import com.x.teamwork.core.entity.ProjectDetail;
 import com.x.teamwork.core.entity.ProjectTemplate;
 import com.x.teamwork.core.entity.ProjectTemplate;
+import com.x.teamwork.core.entity.TaskListTemplate;
 import com.x.teamwork.core.entity.tools.filter.QueryFilter;
 import com.x.teamwork.core.entity.tools.filter.QueryFilter;
 import com.x.teamwork.core.entity.tools.filter.term.EqualsTerm;
 import com.x.teamwork.core.entity.tools.filter.term.EqualsTerm;
 import com.x.teamwork.core.entity.tools.filter.term.InTerm;
 import com.x.teamwork.core.entity.tools.filter.term.InTerm;
@@ -24,6 +25,8 @@ import com.x.teamwork.core.entity.tools.filter.term.InTerm;
 public class ProjectTemplateQueryService {
 public class ProjectTemplateQueryService {
 
 
 	private ProjectTemplateService projectTemplateService = new ProjectTemplateService();
 	private ProjectTemplateService projectTemplateService = new ProjectTemplateService();
+	private TaskListTemplateService taskListTemplateService = new TaskListTemplateService();
+	
 	private UserManagerService userManagerService = new UserManagerService();
 	private UserManagerService userManagerService = new UserManagerService();
 	
 	
 	/**
 	/**
@@ -43,6 +46,23 @@ public class ProjectTemplateQueryService {
 		}
 		}
 	}
 	}
 	
 	
+	/**
+	 * 根据项目的标识查询项目信息
+	 * @param id
+	 * @return
+	 * @throws Exception
+	 */
+	public List<TaskListTemplate> getTaskListTemplateWithTemplateId( String id ) throws Exception {
+		if ( StringUtils.isEmpty( id )) {
+			return null;
+		}
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			return taskListTemplateService.getTaskListTemplateWithTemplateId(emc, id );
+		} catch (Exception e) {
+			throw e;
+		}
+	}
+	
 	public ProjectDetail getDetail(String id) throws Exception {
 	public ProjectDetail getDetail(String id) throws Exception {
 		if ( StringUtils.isEmpty( id )) {
 		if ( StringUtils.isEmpty( id )) {
 			return null;
 			return null;
@@ -153,8 +173,8 @@ public class ProjectTemplateQueryService {
 	 * @return
 	 * @return
 	 * @throws Exception
 	 * @throws Exception
 	 */
 	 */
-	public List<Project> listWithProjectIdFilter( Integer pageSize, String lastId, String orderField, String orderType, List<String> projectIds ) throws Exception {
-		Project project = null;
+	public List<ProjectTemplate> listWithProjectIdFilter( Integer pageSize, String lastId, String orderField, String orderType, List<String> projectIds ) throws Exception {
+		ProjectTemplate project = null;
 		if( pageSize == 0 ) { pageSize = 20; }
 		if( pageSize == 0 ) { pageSize = 20; }
 		if( StringUtils.isEmpty( orderField ) ) { 
 		if( StringUtils.isEmpty( orderField ) ) { 
 			orderField = "createTime";
 			orderField = "createTime";
@@ -166,7 +186,7 @@ public class ProjectTemplateQueryService {
 		queryFilter.addInTerm( new InTerm("id", new ArrayList<>(projectIds) ));
 		queryFilter.addInTerm( new InTerm("id", new ArrayList<>(projectIds) ));
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
 			if( lastId != null ) {
 			if( lastId != null ) {
-				project = emc.find( lastId, Project.class );
+				project = emc.find( lastId, ProjectTemplate.class );
 			}
 			}
 			if( project != null ) {
 			if( project != null ) {
 				return projectTemplateService.listWithFilter(emc, pageSize, project.getSequence(), orderField, orderType, null, null, null, null, queryFilter );
 				return projectTemplateService.listWithFilter(emc, pageSize, project.getSequence(), orderField, orderType, null, null, null, null, queryFilter );
@@ -294,27 +314,21 @@ public class ProjectTemplateQueryService {
 	}
 	}
 
 
 	/**
 	/**
-	 * 根据条件查询项目ID列表,最大查询2000条,查询未删除
+	 * 根据条件查询项目模板ID列表,最大查询2000条,查询未删除
 	 * @param effectivePerson
 	 * @param effectivePerson
 	 * @param i
 	 * @param i
 	 * @param queryFilter
 	 * @param queryFilter
 	 * @return
 	 * @return
 	 * @throws Exception 
 	 * @throws Exception 
 	 */
 	 */
-	public List<String> listAllViewableProjectIds(EffectivePerson effectivePerson, int maxCount, QueryFilter queryFilter) throws Exception {
-		List<String> unitNames = null;
-		List<String> groupNames = null;
-		List<String> identityNames = null;
+	public List<String> listAllProjectTemplateIds(EffectivePerson effectivePerson, int maxCount, QueryFilter queryFilter) throws Exception {
 		String personName = effectivePerson.getDistinguishedName();
 		String personName = effectivePerson.getDistinguishedName();
 		if( maxCount ==  0) {
 		if( maxCount ==  0) {
 			maxCount = 1000;
 			maxCount = 1000;
 		}
 		}
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
-			unitNames = userManagerService.listUnitNamesWithPerson( personName );
-			groupNames = userManagerService.listGroupNamesByPerson( personName );
-			identityNames = userManagerService.listIdentitiesWithPerson( personName );
 			queryFilter.addEqualsTerm( new EqualsTerm( "deleted", false ) );
 			queryFilter.addEqualsTerm( new EqualsTerm( "deleted", false ) );
-			return projectTemplateService.listAllViewableProjectIds( emc, maxCount, personName,  identityNames, unitNames, groupNames, queryFilter );
+			return projectTemplateService.listAllProjectTemplateIds( emc, maxCount, personName, queryFilter );
 		} catch (Exception e) {
 		} catch (Exception e) {
 			throw e;
 			throw e;
 		}
 		}
@@ -339,7 +353,7 @@ public class ProjectTemplateQueryService {
 			unitNames = userManagerService.listUnitNamesWithPerson( personName );
 			unitNames = userManagerService.listUnitNamesWithPerson( personName );
 			groupNames = userManagerService.listGroupNamesByPerson( personName );
 			groupNames = userManagerService.listGroupNamesByPerson( personName );
 			identityNames = userManagerService.listIdentitiesWithPerson( personName );
 			identityNames = userManagerService.listIdentitiesWithPerson( personName );
-			return projectTemplateService.listAllViewableProjectIds( emc, maxCount, personName,  identityNames, unitNames, groupNames, queryFilter );
+			return projectTemplateService.listAllProjectTemplateIds( emc, maxCount, personName, queryFilter );
 		} catch (Exception e) {
 		} catch (Exception e) {
 			throw e;
 			throw e;
 		}
 		}

+ 26 - 16
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/ProjectTemplateService.java

@@ -62,7 +62,7 @@ class ProjectTemplateService {
 	}
 	}
 	
 	
 	/**
 	/**
-	 * 根据条件查询符合条件的项目信息ID,根据上一条的sequnce查询指定数量的信息
+	 * 根据条件查询符合条件的项目模板信息ID,根据上一条的sequnce查询指定数量的信息
 	 * @param emc
 	 * @param emc
 	 * @param maxCount
 	 * @param maxCount
 	 * @param sequnce
 	 * @param sequnce
@@ -77,9 +77,9 @@ class ProjectTemplateService {
 	 * @return
 	 * @return
 	 * @throws Exception
 	 * @throws Exception
 	 */
 	 */
-	protected List<Project> listWithFilter( EntityManagerContainer emc, Integer maxCount, String sequnce, String orderField, String orderType, String personName, List<String> identityNames, List<String> unitNames, List<String> groupNames, QueryFilter queryFilter ) throws Exception {
+	protected List<ProjectTemplate> listWithFilter( EntityManagerContainer emc, Integer maxCount, String sequnce, String orderField, String orderType, String personName, List<String> identityNames, List<String> unitNames, List<String> groupNames, QueryFilter queryFilter ) throws Exception {
 		Business business = new Business( emc );
 		Business business = new Business( emc );
-		return business.projectFactory().listWithFilter(maxCount, sequnce, orderField, orderType, personName, identityNames, unitNames, groupNames, queryFilter);
+		return business.projectTemplateFactory().listWithFilter(maxCount, sequnce, orderField, orderType, personName, queryFilter);
 	}
 	}
 
 
 	/**
 	/**
@@ -98,8 +98,7 @@ class ProjectTemplateService {
 		
 		
 		projectTemplate = emc.find( object.getId(), ProjectTemplate.class );
 		projectTemplate = emc.find( object.getId(), ProjectTemplate.class );
 		
 		
-		emc.beginTransaction( Project.class );
-		emc.beginTransaction( ProjectDetail.class );
+		emc.beginTransaction( ProjectTemplate.class );
 		
 		
 		if( projectTemplate == null ){ // 保存一个新的对象
 		if( projectTemplate == null ){ // 保存一个新的对象
 			projectTemplate = new ProjectTemplate();
 			projectTemplate = new ProjectTemplate();
@@ -138,12 +137,12 @@ class ProjectTemplateService {
 				emc.check( projectTemplate , CheckPersistType.all );
 				emc.check( projectTemplate , CheckPersistType.all );
 			}
 			}
 			//还需要删除所有的TaskListTemplate
 			//还需要删除所有的TaskListTemplate
-			List<TaskListTemplate> TaskListTemplates = business.taskListTemplateFactory().list(projectTemplate.getId());
-			if( ListTools.isNotEmpty(TaskListTemplates)) {
-				for( TaskListTemplate TaskListTemplate : TaskListTemplates ) {
+			List<TaskListTemplate> taskListTemplates = business.taskListTemplateFactory().list(projectTemplate.getId());
+			if( ListTools.isNotEmpty(taskListTemplates)) {
+				for( TaskListTemplate taskListTemplate : taskListTemplates ) {
 					//emc.remove( task , CheckRemoveType.all );
 					//emc.remove( task , CheckRemoveType.all );
-					TaskListTemplate.setDeleted(true);
-					emc.check( TaskListTemplate , CheckPersistType.all );
+					taskListTemplate.setDeleted(true);
+					emc.check( taskListTemplate , CheckPersistType.all );
 				}
 				}
 			}
 			}
 			emc.commit();
 			emc.commit();
@@ -241,15 +240,26 @@ class ProjectTemplateService {
 		TaskListTemplate taskList = null;
 		TaskListTemplate taskList = null;
 		List<String> taskListsTemplate = template.getTaskList();
 		List<String> taskListsTemplate = template.getTaskList();
 		
 		
+		//检查是否已有模板对应的泳道,如有则先删除
+		Business business = new Business( emc );
+		List<TaskListTemplate> tlTemplates = business.taskListTemplateFactory().list(template.getId());
+		if( ListTools.isNotEmpty(tlTemplates)) {
+			for( TaskListTemplate tlemplate : tlTemplates ) {
+				//emc.remove( task , CheckRemoveType.all );
+				tlemplate.setDeleted(true);
+				emc.check( tlemplate , CheckPersistType.all );
+			}
+		}
+		
 		if( !ListTools.isEmpty( taskListsTemplate )) {
 		if( !ListTools.isEmpty( taskListsTemplate )) {
-			emc.beginTransaction( TaskList.class );
+			emc.beginTransaction( TaskListTemplate.class );
+			//添加模板对应的泳道
 			for( String taskListTemplate: taskListsTemplate ) {
 			for( String taskListTemplate: taskListsTemplate ) {
 				taskList = composeTaskListObject( template.getId(), taskListTemplate, 1, "SYSTEM", person, "" );
 				taskList = composeTaskListObject( template.getId(), taskListTemplate, 1, "SYSTEM", person, "" );
 				emc.persist( taskList, CheckPersistType.all );
 				emc.persist( taskList, CheckPersistType.all );
 			}
 			}
-			
-			emc.commit();
 		}
 		}
+		emc.commit();
 	}
 	}
 	
 	
 	private TaskListTemplate  composeTaskListObject( String projectTemplateId, String listName, int orderNum, String creatorName, String owner, String memo ) {
 	private TaskListTemplate  composeTaskListObject( String projectTemplateId, String listName, int orderNum, String creatorName, String owner, String memo ) {
@@ -267,7 +277,7 @@ class ProjectTemplateService {
 	}
 	}
 
 
 	/**
 	/**
-	 * 根据条件查询项目ID列表,最大查询2000条
+	 * 根据条件查询项目模板ID列表,最大查询2000条
 	 * @param emc
 	 * @param emc
 	 * @param maxCount
 	 * @param maxCount
 	 * @param personName
 	 * @param personName
@@ -278,9 +288,9 @@ class ProjectTemplateService {
 	 * @return
 	 * @return
 	 * @throws Exception
 	 * @throws Exception
 	 */
 	 */
-	public List<String> listAllViewableProjectIds(EntityManagerContainer emc, int maxCount, String personName, List<String> identityNames, List<String> unitNames, List<String> groupNames, QueryFilter queryFilter) throws Exception {
+	public List<String> listAllProjectTemplateIds(EntityManagerContainer emc, int maxCount, String personName, QueryFilter queryFilter) throws Exception {
 		Business business = new Business( emc );
 		Business business = new Business( emc );
-		return business.projectFactory().listAllViewableProjectIds(maxCount, personName, identityNames, unitNames, groupNames, queryFilter);
+		return business.projectTemplateFactory().listAllProjectTemplateIds(maxCount, personName, queryFilter);
 	}
 	}
 
 
 	public List<String> listAllProjectIds(EntityManagerContainer emc ) throws Exception {
 	public List<String> listAllProjectIds(EntityManagerContainer emc ) throws Exception {

+ 12 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/TaskListTemplateService.java

@@ -41,6 +41,18 @@ class TaskListTemplateService {
 		return business.projectFactory().getDetail( id );
 		return business.projectFactory().getDetail( id );
 	}
 	}
 	
 	
+	/**
+	 * 根据项目的标识查询项目的信息
+	 * @param emc
+	 * @param flag  主要是ID
+	 * @return
+	 * @throws Exception 
+	 */
+	protected List<TaskListTemplate> getTaskListTemplateWithTemplateId(EntityManagerContainer emc, String flag) throws Exception {
+		Business business = new Business( emc );
+		return business.taskListTemplateFactory().list( flag ); 
+	}
+	
 	/**
 	/**
 	 * 根据过滤条件查询符合要求的项目信息列表
 	 * 根据过滤条件查询符合要求的项目信息列表
 	 * @param emc
 	 * @param emc

+ 1 - 1
o2server/x_teamwork_core_entity/src/main/java/com/x/teamwork/core/entity/ProjectTemplate.java

@@ -96,7 +96,7 @@ public class ProjectTemplate extends SliceJpaObject {
 	private String icon = null;
 	private String icon = null;
 	
 	
 	public static final String description_FIELDNAME = "description";
 	public static final String description_FIELDNAME = "description";
-	@FieldDescribe("模板类型")
+	@FieldDescribe("描述")
 	@Column( length = JpaObject.length_255B, name = ColumnNamePrefix + description_FIELDNAME)
 	@Column( length = JpaObject.length_255B, name = ColumnNamePrefix + description_FIELDNAME)
 	@Index(name = TABLE + IndexNameMiddle + description_FIELDNAME)
 	@Index(name = TABLE + IndexNameMiddle + description_FIELDNAME)
 	@CheckPersist(allowEmpty = true )
 	@CheckPersist(allowEmpty = true )