提交 0b7a5de4 编写于 作者: O o2null

Merge branch 'cherry-pick-25790fca' into 'master'

Merge branch 'fix/deleteTeamWork' into 'develop'

See merge request o2oa/o2oa!1020
......@@ -320,6 +320,20 @@
<finalName>${project.artifactId}</finalName>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<filesets>
<fileset>
<directory>${basedir}</directory>
<includes>
<include>**/*_.java</include>
</includes>
</fileset>
</filesets>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
......
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>o2oa</groupId>
<artifactId>o2server</artifactId>
<version>5</version>
</parent>
<artifactId>x_teamwork_assemble_control</artifactId>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>o2oa</groupId>
<artifactId>x_base_core_project</artifactId>
</dependency>
<dependency>
<groupId>o2oa</groupId>
<artifactId>x_organization_core_entity</artifactId>
</dependency>
<dependency>
<groupId>o2oa</groupId>
<artifactId>x_organization_core_express</artifactId>
</dependency>
<dependency>
<groupId>o2oa</groupId>
<artifactId>x_teamwork_core_entity</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>describeBuilder</id>
<phase>prepare-package</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<addOutputToClasspath>true</addOutputToClasspath>
<includePluginDependencies>true</includePluginDependencies>
<includeProjectDependencies>true</includeProjectDependencies>
<mainClass>com.x.base.core.project.annotation.DescribeBuilder</mainClass>
<arguments>
<argument>${basedir}</argument>
<argument>${project.build.sourceDirectory}</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>apiBuilder</id>
<phase>prepare-package</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<addOutputToClasspath>true</addOutputToClasspath>
<includePluginDependencies>true</includePluginDependencies>
<includeProjectDependencies>true</includeProjectDependencies>
<mainClass>com.x.base.core.project.annotation.ApiBuilder</mainClass>
<arguments>
<argument>${basedir}</argument>
<argument>${project.build.sourceDirectory}</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>checkAssemble</id>
<phase>prepare-package</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<addOutputToClasspath>true</addOutputToClasspath>
<includePluginDependencies>true</includePluginDependencies>
<includeProjectDependencies>true</includeProjectDependencies>
<mainClass>com.x.base.core.project.build.CheckAssemble</mainClass>
</configuration>
</execution>
<execution>
<id>createWebXml</id>
<phase>prepare-package</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<addOutputToClasspath>true</addOutputToClasspath>
<includePluginDependencies>true</includePluginDependencies>
<includeProjectDependencies>true</includeProjectDependencies>
<mainClass>com.x.base.core.project.build.CreateWebXml</mainClass>
<arguments>
<argument>${basedir}</argument>
<argument>${project.artifactId}</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-war</id>
<phase>verify</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>../../o2server/custom</outputDirectory>
<resources>
<resource>
<directory>target</directory>
<includes>
<include>${project.artifactId}.war</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
package com.x.teamwork.assemble.control;
import java.util.List;
import com.x.base.core.project.tools.ListTools;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.project.http.EffectivePerson;
import com.x.organization.core.express.Organization;
import com.x.teamwork.assemble.control.factory.AttachmentFactory;
import com.x.teamwork.assemble.control.factory.BatchOperationFactory;
import com.x.teamwork.assemble.control.factory.ChatFactory;
import com.x.teamwork.assemble.control.factory.DynamicFactory;
import com.x.teamwork.assemble.control.factory.PriorityFactory;
import com.x.teamwork.assemble.control.factory.ProjectConfigFactory;
import com.x.teamwork.assemble.control.factory.CustomExtFieldReleFactory;
import com.x.teamwork.assemble.control.factory.ProjectFactory;
import com.x.teamwork.assemble.control.factory.ProjectGroupFactory;
import com.x.teamwork.assemble.control.factory.ProjectGroupReleFactory;
import com.x.teamwork.assemble.control.factory.ProjectTemplateFactory;
import com.x.teamwork.assemble.control.factory.ReviewFactory;
import com.x.teamwork.assemble.control.factory.SystemConfigFactory;
import com.x.teamwork.assemble.control.factory.TaskFactory;
import com.x.teamwork.assemble.control.factory.TaskGroupFactory;
import com.x.teamwork.assemble.control.factory.TaskGroupReleFactory;
import com.x.teamwork.assemble.control.factory.TaskListFactory;
import com.x.teamwork.assemble.control.factory.TaskListTemplateFactory;
import com.x.teamwork.assemble.control.factory.TaskTagFactory;
import com.x.teamwork.assemble.control.factory.TaskViewFactory;
public class Business {
private EntityManagerContainer emc;
public Business(EntityManagerContainer emc) throws Exception {
this.emc = emc;
}
public EntityManagerContainer entityManagerContainer() {
return this.emc;
}
private Organization organization;
private ProjectFactory projectFactory;
private TaskFactory taskFactory;
private ProjectTemplateFactory projectTemplateFactory;
private TaskListTemplateFactory taskListTemplateFactory;
private DynamicFactory dynamicFactory;
private SystemConfigFactory systemConfigFactory;
private ProjectGroupFactory projectGroupFactory;
private ProjectGroupReleFactory projectGroupReleFactory;
private TaskListFactory taskListFactory;
private ChatFactory chatFactory;
private TaskGroupFactory taskGroupFactory;
private TaskGroupReleFactory taskGroupReleFactory;
private TaskViewFactory taskViewFactory;
private CustomExtFieldReleFactory customExtFieldReleFactory;
private ReviewFactory reviewFactory;
private BatchOperationFactory batchOperationFactory;
private TaskTagFactory taskTagFactory;
private AttachmentFactory attachmentFactory;
private PriorityFactory priorityFactory;
private ProjectConfigFactory projectConfigFactory;
public Organization organization() throws Exception {
if (null == this.organization) {
this.organization = new Organization(ThisApplication.context());
}
return organization;
}
/**
* 获取附件信息数据库访问类
* @return
* @throws Exception
*/
public AttachmentFactory attachmentFactory() throws Exception {
if (null == this.attachmentFactory) {
this.attachmentFactory = new AttachmentFactory( this );
}
return attachmentFactory;
}
/**
* 获取工作任务标签数据库访问类
* @return
* @throws Exception
*/
public TaskTagFactory taskTagFactory() throws Exception {
if (null == this.taskTagFactory) {
this.taskTagFactory = new TaskTagFactory( this );
}
return taskTagFactory;
}
/**
* 获取批处理任务数据库访问类
* @return
* @throws Exception
*/
public BatchOperationFactory batchOperationFactory() throws Exception {
if (null == this.batchOperationFactory) {
this.batchOperationFactory = new BatchOperationFactory( this );
}
return batchOperationFactory;
}
/**
* 获取Review信息数据库访问类
* @return
* @throws Exception
*/
public ReviewFactory reviewFactory() throws Exception {
if (null == this.reviewFactory) {
this.reviewFactory = new ReviewFactory( this );
}
return reviewFactory;
}
/**
* 获取项目扩展属性关联信息数据库访问类
* @return
* @throws Exception
*/
public CustomExtFieldReleFactory customExtFieldReleFactory() throws Exception {
if (null == this.customExtFieldReleFactory) {
this.customExtFieldReleFactory = new CustomExtFieldReleFactory( this );
}
return customExtFieldReleFactory;
}
/**
* 获取任务视图数据库访问类
* @return
* @throws Exception
*/
public TaskViewFactory taskViewFactory() throws Exception {
if (null == this.taskViewFactory) {
this.taskViewFactory = new TaskViewFactory( this );
}
return taskViewFactory;
}
/**
* 获取工作任务组关联信息数据库访问类
* @return
* @throws Exception
*/
public TaskGroupReleFactory taskGroupReleFactory() throws Exception {
if (null == this.taskGroupReleFactory) {
this.taskGroupReleFactory = new TaskGroupReleFactory( this );
}
return taskGroupReleFactory;
}
/**
* 获取工作任务组数据库访问类
* @return
* @throws Exception
*/
public TaskGroupFactory taskGroupFactory() throws Exception {
if (null == this.taskGroupFactory) {
this.taskGroupFactory = new TaskGroupFactory( this );
}
return taskGroupFactory;
}
/**
* 获取工作交流数据库访问类
* @return
* @throws Exception
*/
public ChatFactory chatFactory() throws Exception {
if (null == this.chatFactory) {
this.chatFactory = new ChatFactory( this );
}
return chatFactory;
}
/**
* 获取工作任务列表数据库访问类
* @return
* @throws Exception
*/
public TaskListFactory taskListFactory() throws Exception {
if (null == this.taskListFactory) {
this.taskListFactory = new TaskListFactory( this );
}
return taskListFactory;
}
/**
* 获取项目组数据库访问类
* @return
* @throws Exception
*/
public ProjectGroupFactory projectGroupFactory() throws Exception {
if (null == this.projectGroupFactory) {
this.projectGroupFactory = new ProjectGroupFactory( this );
}
return projectGroupFactory;
}
/**
* 获取优先级数据库访问类
* @return
* @throws Exception
*/
public ProjectConfigFactory projectConfigFactory() throws Exception {
if (null == this.projectConfigFactory) {
this.projectConfigFactory = new ProjectConfigFactory( this );
}
return projectConfigFactory;
}
/**
* 获取优先级数据库访问类
* @return
* @throws Exception
*/
public PriorityFactory priorityFactory() throws Exception {
if (null == this.priorityFactory) {
this.priorityFactory = new PriorityFactory( this );
}
return priorityFactory;
}
/**
* 获取项目模板数据库访问类
* @return
* @throws Exception
*/
public ProjectTemplateFactory projectTemplateFactory() throws Exception {
if (null == this.projectTemplateFactory) {
this.projectTemplateFactory = new ProjectTemplateFactory( this );
}
return projectTemplateFactory;
}
/**
* 获取项目模板对应的泳道数据库访问类
* @return
* @throws Exception
*/
public TaskListTemplateFactory taskListTemplateFactory() throws Exception {
if (null == this.taskListTemplateFactory) {
this.taskListTemplateFactory = new TaskListTemplateFactory( this );
}
return taskListTemplateFactory;
}
/**
* 获取项目与项目组关联信息数据库访问类
* @return
* @throws Exception
*/
public ProjectGroupReleFactory projectGroupReleFactory() throws Exception {
if (null == this.projectGroupReleFactory) {
this.projectGroupReleFactory = new ProjectGroupReleFactory( this );
}
return projectGroupReleFactory;
}
/**
* 获取系统配置信息数据库访问类
* @return
* @throws Exception
*/
public SystemConfigFactory systemConfigFactory() throws Exception {
if (null == this.systemConfigFactory) {
this.systemConfigFactory = new SystemConfigFactory( this );
}
return systemConfigFactory;
}
/**
* 获取工作任务信息数据库访问类
* @return
* @throws Exception
*/
public TaskFactory taskFactory() throws Exception {
if (null == this.taskFactory) {
this.taskFactory = new TaskFactory( this );
}
return taskFactory;
}
/**
* 获取项目信息数据库访问类
* @return
* @throws Exception
*/
public ProjectFactory projectFactory() throws Exception {
if (null == this.projectFactory) {
this.projectFactory = new ProjectFactory( this );
}
return projectFactory;
}
/**
* 获取动态信息数据库访问类
* @return
* @throws Exception
*/
public DynamicFactory dynamicFactory() throws Exception {
if (null == this.dynamicFactory) {
this.dynamicFactory = new DynamicFactory( this );
}
return dynamicFactory;
}
/**
* TODO 判断用户是否管理员权限 1、person.isManager() 2、xadmin 3、CRMManager
*
* @param request
* @param personName
* @return
* @throws Exception
*/
public boolean isManager(EffectivePerson person) throws Exception {
// 如果用户的身份是平台的超级管理员,那么就是超级管理员权限
if (person.isManager()) {
return true;
}
if ("xadmin".equalsIgnoreCase(person.getDistinguishedName())) {
return true;
}
if (isHasPlatformRole(person.getDistinguishedName(), "TeamWorkManager@TeamWorkManager@R")) {
return true;
}
return false;
}
public boolean isHasPlatformRole(String personName, String roleName) throws Exception {
if (StringUtils.isEmpty(personName)) {
throw new Exception("personName is null!");
}
if (StringUtils.isEmpty(roleName)) {
throw new Exception("roleName is null!");
}
List<String> roleList = null;
roleList = organization().role().listWithPerson(personName);
if (ListTools.isNotEmpty(roleList) ) {
if (roleList.stream().filter(r -> roleName.equalsIgnoreCase(r)).count() > 0) {
return true;
}
} else {
return false;
}
return false;
}
}
package com.x.teamwork.assemble.control;
import javax.activation.MimetypesFileTypeMap;
public class MimeTypeDefinition {
public static MimetypesFileTypeMap instance;
}
package com.x.teamwork.assemble.control.factory;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.project.exception.ExceptionWhen;
import com.x.teamwork.assemble.control.AbstractFactory;
import com.x.teamwork.assemble.control.Business;
import com.x.teamwork.core.entity.CustomExtFieldRele;
import com.x.teamwork.core.entity.CustomExtFieldRele_;
public class CustomExtFieldReleFactory extends AbstractFactory {
public CustomExtFieldReleFactory( Business business ) throws Exception {
super(business);
}
/**
* 获取指定Id的CustomExtFieldRele实体信息对象
* @param id
* @return
* @throws Exception
*/
public CustomExtFieldRele get( String id ) throws Exception {
return this.entityManagerContainer().find( id, CustomExtFieldRele.class, ExceptionWhen.none );
}
/**
* 列示指定Id的CustomExtFieldRele实体信息列表
* @param ids
* @return
* @throws Exception
*/
public List<CustomExtFieldRele> list( List<String> ids ) throws Exception {
if( ids == null || ids.size() == 0 ){
return new ArrayList<CustomExtFieldRele>();
}
EntityManager em = this.entityManagerContainer().get(CustomExtFieldRele.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<CustomExtFieldRele> cq = cb.createQuery(CustomExtFieldRele.class);
Root<CustomExtFieldRele> root = cq.from(CustomExtFieldRele.class);
Predicate p = root.get(CustomExtFieldRele_.id).in(ids);
cq.orderBy( cb.desc( root.get( CustomExtFieldRele_.updateTime ) ) );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 列示所有扩展属性信息列表
* @return
* @throws Exception
*/
public List<CustomExtFieldRele> listAllFieldReleObj() throws Exception {
EntityManager em = this.entityManagerContainer().get(CustomExtFieldRele.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<CustomExtFieldRele> cq = cb.createQuery(CustomExtFieldRele.class);
Root<CustomExtFieldRele> root = cq.from(CustomExtFieldRele.class);
cq.orderBy( cb.asc( root.get( CustomExtFieldRele_.order ) ) );
return em.createQuery(cq).getResultList();
}
/**
* 根据关联ID列示扩展属性信息列表
* @param correlationId
* @return
* @throws Exception
*/
public List<CustomExtFieldRele> listFieldReleObjByCorrelation( String correlationId ) throws Exception {
if( StringUtils.isEmpty( correlationId ) ){
throw new Exception("correlationId can not be empty!");
}
EntityManager em = this.entityManagerContainer().get(CustomExtFieldRele.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<CustomExtFieldRele> cq = cb.createQuery(CustomExtFieldRele.class);
Root<CustomExtFieldRele> root = cq.from(CustomExtFieldRele.class);
Predicate p = cb.equal( root.get(CustomExtFieldRele_.correlationId), correlationId );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 根据扩展属性类型列示扩展属性信息列表
* @param type
* @return
* @throws Exception
*/
public List<CustomExtFieldRele> listFieldReleObjByType( String type ) throws Exception {
if( StringUtils.isEmpty( type ) ){
throw new Exception("type can not be empty!");
}
EntityManager em = this.entityManagerContainer().get(CustomExtFieldRele.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<CustomExtFieldRele> cq = cb.createQuery(CustomExtFieldRele.class);
Root<CustomExtFieldRele> root = cq.from(CustomExtFieldRele.class);
Predicate p = cb.equal( root.get(CustomExtFieldRele_.type), type );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 根据关联ID列示扩展属性ID信息列表
* @param correlationId
* @return
* @throws Exception
*/
public List<String> listFieldReleIdsByCorrelation( String correlationId ) throws Exception {
if( StringUtils.isEmpty( correlationId ) ){
throw new Exception("correlationId can not be empty!");
}
EntityManager em = this.entityManagerContainer().get(CustomExtFieldRele.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<CustomExtFieldRele> root = cq.from(CustomExtFieldRele.class);
Predicate p = cb.equal( root.get(CustomExtFieldRele_.correlationId), correlationId );
cq.select( root.get(CustomExtFieldRele_.correlationId) );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 根据扩展属性名以及关联ID获取一组关联信息
* @param fieldName
* @param correlationId
* @return
* @throws Exception
*/
public List<CustomExtFieldRele> listWithFieldNameAndCorrelation( String fieldName, String correlationId ) throws Exception {
if( StringUtils.isEmpty( fieldName ) ){
throw new Exception("fieldName can not be empty!");
}
/*if( StringUtils.isEmpty( correlationId ) ){
throw new Exception("correlationId can not be empty!");
}*/
EntityManager em = this.entityManagerContainer().get(CustomExtFieldRele.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<CustomExtFieldRele> cq = cb.createQuery(CustomExtFieldRele.class);
Root<CustomExtFieldRele> root = cq.from(CustomExtFieldRele.class);
Predicate p = cb.equal( root.get(CustomExtFieldRele_.extFieldName), fieldName );
if( StringUtils.isNotEmpty( correlationId ) ){
p = cb.and( p, cb.equal( root.get(CustomExtFieldRele_.correlationId), correlationId ));
}
return em.createQuery(cq.where(p)).getResultList();
}
}
package com.x.teamwork.assemble.control.factory;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.project.exception.ExceptionWhen;
import com.x.base.core.project.tools.ListTools;
import com.x.teamwork.assemble.control.AbstractFactory;
import com.x.teamwork.assemble.control.Business;
import com.x.teamwork.core.entity.Priority;
import com.x.teamwork.core.entity.Priority_;
import com.x.teamwork.core.entity.ProjectGroup;
import com.x.teamwork.core.entity.ProjectGroup_;
public class PriorityFactory extends AbstractFactory {
public PriorityFactory( Business business ) throws Exception {
super(business);
}
/**
* 获取指定Id的ProjectGroup实体信息对象
* @param id
* @return
* @throws Exception
*/
public Priority get( String id ) throws Exception {
return this.entityManagerContainer().find( id, Priority.class, ExceptionWhen.none );
}
/**
* 获取指定name的优先级实体信息对象
* @param name
* @return
* @throws Exception
*/
public List<Priority> getByName( String name ) throws Exception {
EntityManager em = this.entityManagerContainer().get(Priority.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Priority> cq = cb.createQuery(Priority.class);
Root<Priority> root = cq.from(Priority.class);
Predicate p = cb.equal( root.get(Priority_.priority), name );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 列示指定Id的ProjectGroup实体信息列表
* @param ids
* @return
* @throws Exception
*/
public List<Priority> listPriority() throws Exception {
EntityManager em = this.entityManagerContainer().get(Priority.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Priority> cq = cb.createQuery(Priority.class);
Root<Priority> root = cq.from(Priority.class);
//Predicate p = cb.equal( root.get(Priority_.owner), person );
cq.orderBy( cb.asc( root.get( Priority_.order ) ) );
return em.createQuery(cq).getResultList();
}
/**
* 根据用户列示ProjectGroup实体信息列表
* @param person
* @return
* @throws Exception
*/
public List<String> listByPerson( String person ) throws Exception {
if( StringUtils.isEmpty( person ) ){
throw new Exception("person can not be empty!");
}
EntityManager em = this.entityManagerContainer().get(ProjectGroup.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<ProjectGroup> root = cq.from(ProjectGroup.class);
Predicate p = cb.equal( root.get(ProjectGroup_.owner), person );
cq.select( root.get(ProjectGroup_.id ) );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 根据用户列示Priority实体信息列表
* @param person
* @return
* @throws Exception
*/
public List<Priority> listPriorityByPerson( String person ) throws Exception {
EntityManager em = this.entityManagerContainer().get(Priority.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Priority> cq = cb.createQuery(Priority.class);
Root<Priority> root = cq.from(Priority.class);
//Predicate p = cb.equal( root.get(Priority_.owner), person );
cq.orderBy( cb.desc( root.get( Priority_.order ) ) );
return em.createQuery(cq).getResultList();
}
}
package com.x.teamwork.assemble.control.factory;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Order;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.project.exception.ExceptionWhen;
import com.x.base.core.project.tools.ListTools;
import com.x.teamwork.assemble.control.AbstractFactory;
import com.x.teamwork.assemble.control.Business;
import com.x.teamwork.core.entity.Dynamic_;
import com.x.teamwork.core.entity.Priority;
import com.x.teamwork.core.entity.Priority_;
import com.x.teamwork.core.entity.Project;
import com.x.teamwork.core.entity.ProjectConfig;
import com.x.teamwork.core.entity.ProjectConfig_;
import com.x.teamwork.core.entity.ProjectGroup;
import com.x.teamwork.core.entity.ProjectGroup_;
import com.x.teamwork.core.entity.Project_;
import com.x.teamwork.core.entity.tools.CriteriaBuilderTools;
import com.x.teamwork.core.entity.tools.filter.QueryFilter;
public class ProjectConfigFactory extends AbstractFactory {
public ProjectConfigFactory( Business business ) throws Exception {
super(business);
}
/**
* 获取指定Id的ProjectGroup实体信息对象
* @param id
* @return
* @throws Exception
*/
public ProjectConfig get( String id ) throws Exception {
return this.entityManagerContainer().find( id, ProjectConfig.class, ExceptionWhen.none );
}
/**
* 获取指定name的优先级实体信息对象
* @param name
* @return
* @throws Exception
*/
public List<Priority> getByName( String name ) throws Exception {
EntityManager em = this.entityManagerContainer().get(Priority.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Priority> cq = cb.createQuery(Priority.class);
Root<Priority> root = cq.from(Priority.class);
Predicate p = cb.equal( root.get(Priority_.priority), name );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 列示指定Id的ProjectGroup实体信息列表
* @param ids
* @return
* @throws Exception
*/
public List<Priority> listPriority() throws Exception {
EntityManager em = this.entityManagerContainer().get(Priority.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Priority> cq = cb.createQuery(Priority.class);
Root<Priority> root = cq.from(Priority.class);
//Predicate p = cb.equal( root.get(Priority_.owner), person );
cq.orderBy( cb.asc( root.get( Priority_.order ) ) );
return em.createQuery(cq).getResultList();
}
/**
* 根据用户列示ProjectGroup实体信息列表
* @param person
* @return
* @throws Exception
*/
public List<String> listByPerson( String person ) throws Exception {
if( StringUtils.isEmpty( person ) ){
throw new Exception("person can not be empty!");
}
EntityManager em = this.entityManagerContainer().get(ProjectGroup.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<ProjectGroup> root = cq.from(ProjectGroup.class);
Predicate p = cb.equal( root.get(ProjectGroup_.owner), person );
cq.select( root.get(ProjectGroup_.id ) );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 根据用户列示Priority实体信息列表
* @param person
* @return
* @throws Exception
*/
public List<Priority> listPriorityByPerson( String person ) throws Exception {
EntityManager em = this.entityManagerContainer().get(Priority.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Priority> cq = cb.createQuery(Priority.class);
Root<Priority> root = cq.from(Priority.class);
//Predicate p = cb.equal( root.get(Priority_.owner), person );
cq.orderBy( cb.desc( root.get( Priority_.order ) ) );
return em.createQuery(cq).getResultList();
}
/**
* 根据条件查询所有符合条件的项目配置信息ID,项目配置信息不会很多 ,所以直接查询出来
* @param maxCount
* @param sequenceFieldValue
* @param orderField
* @param orderType
* @param personName
* @param queryFilter
* @return
* @throws Exception
*/
public List<String> listAllProjectConfigIds( Integer maxCount, String personName, QueryFilter queryFilter) throws Exception {
EntityManager em = this.entityManagerContainer().get( ProjectConfig.class );
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<ProjectConfig> root = cq.from(ProjectConfig.class);
Predicate p_permission = null;
/*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_.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 ) );
}*/
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( ProjectConfig_.class, cb, p_permission, root, queryFilter );
cq.distinct(true).select( root.get(ProjectConfig_.id) );
return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
}
/**
* 根据条件查询符合条件的项目信息ID
* @param maxCount
* @param orderField
* @param orderType
* @param personName
* @param identityNames
* @param unitNames
* @param groupNames
* @param queryFilter
* @return
* @throws Exception
*/
public List<ProjectConfig> listWithFilter( Integer maxCount, String orderField, String orderType, String personName, List<String> identityNames, List<String> unitNames, List<String> groupNames, QueryFilter queryFilter) throws Exception {
EntityManager em = this.entityManagerContainer().get( ProjectConfig.class );
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<ProjectConfig> cq = cb.createQuery(ProjectConfig.class);
Root<ProjectConfig> root = cq.from(ProjectConfig.class);
Predicate p_permission = null;
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( ProjectConfig_.class, cb, p_permission, root, queryFilter );
Order orderWithField = CriteriaBuilderTools.getOrder(cb, root, ProjectConfig_.class, orderField, orderType);
if( orderWithField != null ){
cq.orderBy( orderWithField );
}
return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
}
/**
* 根据条件查询符合条件的项目信息ID,根据上一条的sequnce查询指定数量的信息
* @param maxCount
* @param sequenceFieldValue
* @param orderField
* @param orderType
* @param personName
* @param identityNames
* @param unitNames
* @param groupNames
* @param queryFilter
* @return
* @throws Exception
*/
public List<ProjectConfig> 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( ProjectConfig.class );
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<ProjectConfig> cq = cb.createQuery(ProjectConfig.class);
Root<ProjectConfig> root = cq.from(ProjectConfig.class);
Predicate p_permission = null;
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( ProjectConfig_.class, cb, p_permission, root, queryFilter );
if( sequenceFieldValue != null && StringUtils.isNotEmpty( sequenceFieldValue.toString() )) {
Predicate p_seq = cb.isNotNull( root.get( Dynamic_.sequence ) );
if( "desc".equalsIgnoreCase( orderType )){
p_seq = cb.and( p_seq, cb.lessThan( root.get( ProjectConfig_.sequence ), sequenceFieldValue.toString() ));
}else{
p_seq = cb.and( p_seq, cb.greaterThan( root.get( ProjectConfig_.sequence ), sequenceFieldValue.toString() ));
}
p = cb.and( p, p_seq);
}
Order orderWithField = CriteriaBuilderTools.getOrder( cb, root, ProjectConfig_.class, orderField, orderType );
if( orderWithField != null ){
cq.orderBy( orderWithField );
}
System.out.println(">>>SQL:" + em.createQuery(cq.where(p)).setMaxResults( maxCount).toString() );
return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
}
/**
* 获取指定name的优先级实体信息对象
* @param name
* @return
* @throws Exception
*/
public List<ProjectConfig> getProjectConfigByProject( String name ) throws Exception {
EntityManager em = this.entityManagerContainer().get(ProjectConfig.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<ProjectConfig> cq = cb.createQuery(ProjectConfig.class);
Root<ProjectConfig> root = cq.from(ProjectConfig.class);
Predicate p = cb.equal( root.get(ProjectConfig_.project), name );
return em.createQuery(cq.where(p)).getResultList();
}
}
package com.x.teamwork.assemble.control.factory;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Order;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.project.exception.ExceptionWhen;
import com.x.base.core.project.tools.ListTools;
import com.x.teamwork.assemble.control.AbstractFactory;
import com.x.teamwork.assemble.control.Business;
import com.x.teamwork.core.entity.Dynamic_;
import com.x.teamwork.core.entity.Project;
import com.x.teamwork.core.entity.ProjectDetail;
import com.x.teamwork.core.entity.Project_;
import com.x.teamwork.core.entity.Task;
import com.x.teamwork.core.entity.Task_;
import com.x.teamwork.core.entity.tools.CriteriaBuilderTools;
import com.x.teamwork.core.entity.tools.filter.QueryFilter;
public class ProjectFactory extends AbstractFactory {
public ProjectFactory( Business business ) throws Exception {
super(business);
}
/**
* 获取指定Id的Project实体信息对象
* @param id
* @return
* @throws Exception
*/
public Project get( String id ) throws Exception {
return this.entityManagerContainer().find( id, Project.class, ExceptionWhen.none );
}
public ProjectDetail getDetail(String id) throws Exception {
return this.entityManagerContainer().find( id, ProjectDetail.class, ExceptionWhen.none );
}
/**
* 列示指定Id的Project实体信息列表
* @param ids
* @return
* @throws Exception
*/
public List<Project> list( List<String> ids ) throws Exception {
if( ids == null || ids.size() == 0 ){
return new ArrayList<Project>();
}
EntityManager em = this.entityManagerContainer().get(Project.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Project> cq = cb.createQuery(Project.class);
Root<Project> root = cq.from(Project.class);
Predicate p = root.get(Project_.id).in(ids);
cq.orderBy( cb.desc( root.get( Project_.updateTime ) ) );
return em.createQuery(cq.where(p)).getResultList();
}
public List<String> listAllProjectIds() throws Exception {
EntityManager em = this.entityManagerContainer().get(Project.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<Project> root = cq.from(Project.class);
cq.select( root.get( Project_.id) );
return em.createQuery(cq ).getResultList();
}
/**
* 根据条件查询符合条件的项目信息数量
* @param personName
* @param unitNames
* @param groupNames
* @param queryFilter
* @return
* @throws Exception
*/
public Long countWithFilter( String personName, List<String> identityNames, List<String> unitNames, List<String> groupNames, QueryFilter queryFilter) throws Exception {
EntityManager em = this.entityManagerContainer().get( Project.class );
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<Project> root = cq.from(Project.class);
Predicate p_permission = null;
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_.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));
}
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( Project_.class, cb, p_permission, root, queryFilter );
cq.select(cb.count(root)).where(p);
Long count = em.createQuery(cq).getSingleResult();
return count;
}
/**
* 根据条件查询符合条件的项目信息ID
* @param maxCount
* @param orderField
* @param orderType
* @param personName
* @param identityNames
* @param unitNames
* @param groupNames
* @param queryFilter
* @return
* @throws Exception
*/
public List<Project> listWithFilter( Integer maxCount, 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 );
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Project> cq = cb.createQuery(Project.class);
Root<Project> root = cq.from(Project.class);
Predicate p_permission = null;
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_.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));
}
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( Project_.class, cb, p_permission, root, queryFilter );
Order orderWithField = CriteriaBuilderTools.getOrder(cb, root, Project_.class, orderField, orderType);
if( orderWithField != null ){
cq.orderBy( orderWithField );
}
return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
}
/**
* 根据条件查询符合条件的项目信息ID
* @param projectId
* @param deleted
* @return
* @throws Exception
*/
public List<Task> listAllTasks(String projectId, Boolean deleted) throws Exception {
if( StringUtils.isEmpty( projectId ) ){
return new ArrayList<Task>();
}
EntityManager em = this.entityManagerContainer().get(Task.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Task> cq = cb.createQuery(Task.class);
Root<Task> root = cq.from(Task.class);
Predicate p = root.get(Task_.project).in(projectId);
p = cb.and( p, cb.isFalse( root.get(Task_.deleted )));
cq.orderBy( cb.desc( root.get( Task_.updateTime ) ) );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 根据条件查询符合条件的项目信息ID,根据上一条的sequnce查询指定数量的信息
* @param maxCount
* @param sequenceFieldValue
* @param orderField
* @param orderType
* @param personName
* @param identityNames
* @param unitNames
* @param groupNames
* @param queryFilter
* @return
* @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 );
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Project> cq = cb.createQuery(Project.class);
Root<Project> root = cq.from(Project.class);
Predicate p_permission = null;
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_.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));
}
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( Project_.class, cb, p_permission, root, queryFilter );
if( sequenceFieldValue != null && StringUtils.isNotEmpty( sequenceFieldValue.toString() )) {
Predicate p_seq = cb.isNotNull( root.get( Dynamic_.sequence ) );
if( "desc".equalsIgnoreCase( orderType )){
p_seq = cb.and( p_seq, cb.lessThan( root.get( Project_.sequence ), sequenceFieldValue.toString() ));
}else{
p_seq = cb.and( p_seq, cb.greaterThan( root.get( Project_.sequence ), sequenceFieldValue.toString() ));
}
p = cb.and( p, p_seq);
}
Order orderWithField = CriteriaBuilderTools.getOrder( cb, root, Project_.class, orderField, orderType );
if( orderWithField != null ){
cq.orderBy( orderWithField );
}
System.out.println(">>>SQL:" + em.createQuery(cq.where(p)).setMaxResults( maxCount).toString() );
return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
}
/**
* 根据条件查询所有符合条件的项目信息ID,项目信息不会很多 ,所以直接查询出来
* @param maxCount
* @param sequenceFieldValue
* @param orderField
* @param orderType
* @param personName
* @param identityNames
* @param unitNames
* @param groupNames
* @param queryFilter
* @return
* @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 );
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<Project> root = cq.from(Project.class);
Predicate p_permission = null;
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_.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));
}
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( Project_.class, cb, p_permission, root, queryFilter );
cq.distinct(true).select( root.get(Project_.id) );
return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
}
}
package com.x.teamwork.assemble.control.factory;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Order;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.project.exception.ExceptionWhen;
import com.x.base.core.project.tools.ListTools;
import com.x.organization.core.entity.PersonCard;
import com.x.organization.core.entity.PersonCard_;
import com.x.teamwork.assemble.control.AbstractFactory;
import com.x.teamwork.assemble.control.Business;
import com.x.teamwork.core.entity.Dynamic_;
import com.x.teamwork.core.entity.Project;
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.Project_;
import com.x.teamwork.core.entity.tools.CriteriaBuilderTools;
import com.x.teamwork.core.entity.tools.filter.QueryFilter;
public class ProjectTemplateFactory extends AbstractFactory {
public ProjectTemplateFactory( Business business ) throws Exception {
super(business);
}
/**
* 获取指定Id的Project实体信息对象
* @param id
* @return
* @throws Exception
*/
public ProjectTemplate get( String id ) throws Exception {
return this.entityManagerContainer().find( id, ProjectTemplate.class, ExceptionWhen.none );
}
public ProjectDetail getDetail(String id) throws Exception {
return this.entityManagerContainer().find( id, ProjectDetail.class, ExceptionWhen.none );
}
/**
* 列示指定Id的Project实体信息列表
* @param ids
* @return
* @throws Exception
*/
public List<Project> list( List<String> ids ) throws Exception {
if( ids == null || ids.size() == 0 ){
return new ArrayList<Project>();
}
EntityManager em = this.entityManagerContainer().get(Project.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Project> cq = cb.createQuery(Project.class);
Root<Project> root = cq.from(Project.class);
Predicate p = root.get(Project_.id).in(ids);
cq.orderBy( cb.desc( root.get( Project_.updateTime ) ) );
return em.createQuery(cq.where(p)).getResultList();
}
public List<String> listAllProjectIds() throws Exception {
EntityManager em = this.entityManagerContainer().get(Project.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<Project> root = cq.from(Project.class);
cq.select( root.get( Project_.id) );
return em.createQuery(cq ).getResultList();
}
/**
* 根据条件查询符合条件的项目信息数量
* @param personName
* @param unitNames
* @param groupNames
* @param queryFilter
* @return
* @throws Exception
*/
public Long countWithFilter( String personName, List<String> identityNames, List<String> unitNames, List<String> groupNames, QueryFilter queryFilter) throws Exception {
EntityManager em = this.entityManagerContainer().get( Project.class );
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<Project> root = cq.from(Project.class);
Predicate p_permission = null;
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_.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));
}
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( Project_.class, cb, p_permission, root, queryFilter );
cq.select(cb.count(root)).where(p);
Long count = em.createQuery(cq).getSingleResult();
return count;
}
/**
* 根据条件查询符合条件的项目信息ID
* @param maxCount
* @param orderField
* @param orderType
* @param personName
* @param identityNames
* @param unitNames
* @param groupNames
* @param queryFilter
* @return
* @throws Exception
*/
public List<Project> listWithFilter( Integer maxCount, 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 );
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Project> cq = cb.createQuery(Project.class);
Root<Project> root = cq.from(Project.class);
Predicate p_permission = null;
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_.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));
}
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( Project_.class, cb, p_permission, root, queryFilter );
Order orderWithField = CriteriaBuilderTools.getOrder(cb, root, Project_.class, orderField, orderType);
if( orderWithField != null ){
cq.orderBy( orderWithField );
}
return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
}
/**
* 根据条件查询符合条件的项目信息ID,根据上一条的sequnce查询指定数量的信息
* @param maxCount
* @param sequenceFieldValue
* @param orderField
* @param orderType
* @param personName
* @param identityNames
* @param unitNames
* @param groupNames
* @param queryFilter
* @return
* @throws Exception
*/
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();
CriteriaQuery<ProjectTemplate> cq = cb.createQuery(ProjectTemplate.class);
Root<ProjectTemplate> root = cq.from(ProjectTemplate.class);
Predicate p_permission = null;
/*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_.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 ) );
}*/
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( ProjectTemplate_.class, cb, p_permission, root, queryFilter );
if( sequenceFieldValue != null && StringUtils.isNotEmpty( sequenceFieldValue.toString() )) {
Predicate p_seq = cb.isNotNull( root.get( Dynamic_.sequence ) );
if( "desc".equalsIgnoreCase( orderType )){
p_seq = cb.and( p_seq, cb.lessThan( root.get( ProjectTemplate_.sequence ), sequenceFieldValue.toString() ));
}else{
p_seq = cb.and( p_seq, cb.greaterThan( root.get( ProjectTemplate_.sequence ), sequenceFieldValue.toString() ));
}
p = cb.and( p, p_seq);
}
Order orderWithField = CriteriaBuilderTools.getOrder( cb, root, ProjectTemplate_.class, orderField, orderType );
if( orderWithField != null ){
cq.orderBy( orderWithField );
}
System.out.println(">>>SQL:" + em.createQuery(cq.where(p)).setMaxResults( maxCount).toString() );
return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
}
/**
* 根据条件查询所有符合条件的项目模板信息ID,项目信息不会很多 ,所以直接查询出来
* @param maxCount
* @param sequenceFieldValue
* @param orderField
* @param orderType
* @param personName
* @param queryFilter
* @return
* @throws Exception
*/
public List<String> listAllProjectTemplateIds( Integer maxCount, String personName, QueryFilter queryFilter) throws Exception {
EntityManager em = this.entityManagerContainer().get( ProjectTemplate.class );
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<ProjectTemplate> root = cq.from(ProjectTemplate.class);
Predicate p_permission = null;
/*if( StringUtils.isNotEmpty( personName )) {
//可以管理的栏目,肯定可以发布信息
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.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( ProjectTemplate_.class, cb, p_permission, root, queryFilter );
cq.distinct(true).select( root.get(ProjectTemplate_.id) );
return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
}
/**
* 列示所有模板的分类信息
* @param distinguishName
* @return
* @throws Exception
*/
public List<String> fetchAllGroupType( String distinguishName ) throws Exception {
EntityManager em = this.entityManagerContainer().get(ProjectTemplate.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<ProjectTemplate> root = cq.from(ProjectTemplate.class);
Predicate p = cb.equal(root.get(ProjectTemplate_.deleted), false);
cq.select(root.get(ProjectTemplate_.type)).where(p).distinct(true);
return em.createQuery(cq).getResultList();
}
/**
* 根据模板类型列示模板信息
* @param type
* @return
* @throws Exception
*/
public List<ProjectTemplate> ListProjectTemplateWithType( String type ) throws Exception {
EntityManager em = this.entityManagerContainer().get(ProjectTemplate.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<ProjectTemplate> cq = cb.createQuery(ProjectTemplate.class);
Root<ProjectTemplate> root = cq.from(ProjectTemplate.class);
Predicate p = cb.equal(root.get(ProjectTemplate_.deleted), false);
p = cb.and( p, cb.equal(root.get(ProjectTemplate_.type), type));
return em.createQuery(cq.where(p)).getResultList();
}
}
package com.x.teamwork.assemble.control.factory;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.project.exception.ExceptionWhen;
import com.x.teamwork.assemble.control.AbstractFactory;
import com.x.teamwork.assemble.control.Business;
import com.x.teamwork.core.entity.Task;
import com.x.teamwork.core.entity.TaskDetail;
import com.x.teamwork.core.entity.Task_;
public class StatisticFactory extends AbstractFactory {
public StatisticFactory( Business business ) throws Exception {
super(business);
}
/**
* 获取指定Id的Task实体信息对象
* @param id
* @return
* @throws Exception
*/
public Task get( String id ) throws Exception {
return this.entityManagerContainer().find( id, Task.class, ExceptionWhen.none );
}
/**
* 获取指定Id的TaskDetail实体信息对象
* @param id
* @return
* @throws Exception
*/
public TaskDetail getDetail( String id ) throws Exception {
return this.entityManagerContainer().find( id, TaskDetail.class, ExceptionWhen.none );
}
/**
* 列示指定Id的Task实体信息列表
* @param ids
* @return
* @throws Exception
*/
public List<Task> list( List<String> ids ) throws Exception {
if( ids == null || ids.size() == 0 ){
return new ArrayList<Task>();
}
EntityManager em = this.entityManagerContainer().get(Task.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Task> cq = cb.createQuery(Task.class);
Root<Task> root = cq.from(Task.class);
Predicate p = root.get(Task_.id).in(ids);
cq.orderBy( cb.asc( root.get( Task_.createTime ) ) );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 根据类别列示Task实体ID信息列表
* @param application
* @return
* @throws Exception
*/
public List<String> listByProject( String projectId ) throws Exception {
if( StringUtils.isEmpty( projectId ) ){
throw new Exception("projectId can not be empty!");
}
EntityManager em = this.entityManagerContainer().get(Task.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<Task> root = cq.from(Task.class);
Predicate p = cb.equal( root.get(Task_.project), projectId );
cq.select( root.get(Task_.id ) );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 根据类别列示Task实体ID信息列表
* @param projectId
* @return
* @throws Exception
*/
public List<Task> listAllTasksByProject( String projectId ) throws Exception {
if( StringUtils.isEmpty( projectId ) ){
throw new Exception("projectId can not be empty!");
}
EntityManager em = this.entityManagerContainer().get(Task.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Task> cq = cb.createQuery(Task.class);
Root<Task> root = cq.from(Task.class);
Predicate p = cb.equal( root.get(Task_.project), projectId );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 查询未review的工作任务信息
* @param maxCount
* @return
* @throws Exception
*/
public List<Task> listUnReviewTask(int maxCount) throws Exception {
if( maxCount == 0 ){
maxCount = 100;
}
EntityManager em = this.entityManagerContainer().get(Task.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Task> cq = cb.createQuery(Task.class);
Root<Task> root = cq.from(Task.class);
Predicate p = cb.or( cb.isNull(root.get(Task_.reviewed )), cb.isFalse( root.get(Task_.reviewed )));
cq.orderBy( cb.asc( root.get( Task_.updateTime ) ) );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 根据类别列示Task实体信息列表
* @param application
* @return
* @throws Exception
*/
public List<String> listByParent( String pid) throws Exception {
if( StringUtils.isEmpty( pid ) ){
throw new Exception("projectId can not be empty!");
}
EntityManager em = this.entityManagerContainer().get(Task.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<Task> root = cq.from(Task.class);
Predicate p = cb.equal( root.get(Task_.parent), pid );
cq.select( root.get(Task_.id ) );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 根据条件查询符合条件的项目信息数量
* @param projectId
* @return
* @throws Exception
*/
public Long countWithProject( String projectId ) throws Exception {
EntityManager em = this.entityManagerContainer().get( Task.class );
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<Task> root = cq.from(Task.class);
Predicate p = cb.equal( root.get( Task_.project), projectId );
cq.select(cb.count(root)).where(p);
return em.createQuery(cq).getSingleResult();
}
public List<Task> allUnCompletedSubTasks(String taskId) throws Exception {
if( StringUtils.isEmpty( taskId ) ){
return null;
}
EntityManager em = this.entityManagerContainer().get(Task.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Task> cq = cb.createQuery(Task.class);
Root<Task> root = cq.from(Task.class);
Predicate p = cb.equal( root.get( Task_.parent ), taskId );
p = cb.and( p, cb.isFalse( root.get(Task_.completed )));
return em.createQuery(cq.where(p)).getResultList();
}
public List<String> listAllTaskIdsWithProject(String project) throws Exception {
if( StringUtils.isEmpty( project ) ){
return null;
}
EntityManager em = this.entityManagerContainer().get(Task.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<Task> root = cq.from(Task.class);
Predicate p = cb.equal( root.get( Task_.project ), project );
cq.select( root.get(Task_.id ) );
return em.createQuery(cq.where(p)).getResultList();
}
}
package com.x.teamwork.assemble.control.factory;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Order;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.project.exception.ExceptionWhen;
import com.x.base.core.project.tools.ListTools;
import com.x.teamwork.assemble.control.AbstractFactory;
import com.x.teamwork.assemble.control.Business;
import com.x.teamwork.core.entity.Dynamic_;
import com.x.teamwork.core.entity.Project;
import com.x.teamwork.core.entity.ProjectDetail;
import com.x.teamwork.core.entity.ProjectTemplate;
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.Task_;
import com.x.teamwork.core.entity.tools.CriteriaBuilderTools;
import com.x.teamwork.core.entity.tools.filter.QueryFilter;
public class TaskListTemplateFactory extends AbstractFactory {
public TaskListTemplateFactory( Business business ) throws Exception {
super(business);
}
/**
* 获取指定Id的Project实体信息对象
* @param id
* @return
* @throws Exception
*/
public TaskListTemplate get( String id ) throws Exception {
return this.entityManagerContainer().find( id, TaskListTemplate.class, ExceptionWhen.none );
}
public ProjectDetail getDetail(String id) throws Exception {
return this.entityManagerContainer().find( id, ProjectDetail.class, ExceptionWhen.none );
}
/**
* 列示指定ProjectTemplate Id的TaskListTemplate实体信息列表
* @param id
* @return
* @throws Exception
*/
public List<TaskListTemplate> list( String id ) throws Exception {
if( StringUtils.isEmpty( id ) ){
return new ArrayList<TaskListTemplate>();
}
EntityManager em = this.entityManagerContainer().get(TaskListTemplate.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<TaskListTemplate> cq = cb.createQuery(TaskListTemplate.class);
Root<TaskListTemplate> root = cq.from(TaskListTemplate.class);
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 ) ) );
return em.createQuery(cq.where(p)).getResultList();
}
public List<String> listAllProjectIds() throws Exception {
EntityManager em = this.entityManagerContainer().get(Project.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<Project> root = cq.from(Project.class);
cq.select( root.get( Project_.id) );
return em.createQuery(cq ).getResultList();
}
/**
* 根据条件查询符合条件的项目信息数量
* @param personName
* @param unitNames
* @param groupNames
* @param queryFilter
* @return
* @throws Exception
*/
public Long countWithFilter( String personName, List<String> identityNames, List<String> unitNames, List<String> groupNames, QueryFilter queryFilter) throws Exception {
EntityManager em = this.entityManagerContainer().get( Project.class );
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<Project> root = cq.from(Project.class);
Predicate p_permission = null;
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_.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));
}
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( Project_.class, cb, p_permission, root, queryFilter );
cq.select(cb.count(root)).where(p);
Long count = em.createQuery(cq).getSingleResult();
return count;
}
/**
* 根据条件查询符合条件的项目信息ID
* @param maxCount
* @param orderField
* @param orderType
* @param personName
* @param identityNames
* @param unitNames
* @param groupNames
* @param queryFilter
* @return
* @throws Exception
*/
public List<Project> listWithFilter( Integer maxCount, 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 );
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Project> cq = cb.createQuery(Project.class);
Root<Project> root = cq.from(Project.class);
Predicate p_permission = null;
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_.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));
}
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( Project_.class, cb, p_permission, root, queryFilter );
Order orderWithField = CriteriaBuilderTools.getOrder(cb, root, Project_.class, orderField, orderType);
if( orderWithField != null ){
cq.orderBy( orderWithField );
}
return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
}
/**
* 根据条件查询符合条件的项目信息ID,根据上一条的sequnce查询指定数量的信息
* @param maxCount
* @param sequenceFieldValue
* @param orderField
* @param orderType
* @param personName
* @param identityNames
* @param unitNames
* @param groupNames
* @param queryFilter
* @return
* @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 );
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Project> cq = cb.createQuery(Project.class);
Root<Project> root = cq.from(Project.class);
Predicate p_permission = null;
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_.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));
}
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( Project_.class, cb, p_permission, root, queryFilter );
if( sequenceFieldValue != null && StringUtils.isNotEmpty( sequenceFieldValue.toString() )) {
Predicate p_seq = cb.isNotNull( root.get( Dynamic_.sequence ) );
if( "desc".equalsIgnoreCase( orderType )){
p_seq = cb.and( p_seq, cb.lessThan( root.get( Project_.sequence ), sequenceFieldValue.toString() ));
}else{
p_seq = cb.and( p_seq, cb.greaterThan( root.get( Project_.sequence ), sequenceFieldValue.toString() ));
}
p = cb.and( p, p_seq);
}
Order orderWithField = CriteriaBuilderTools.getOrder( cb, root, Project_.class, orderField, orderType );
if( orderWithField != null ){
cq.orderBy( orderWithField );
}
System.out.println(">>>SQL:" + em.createQuery(cq.where(p)).setMaxResults( maxCount).toString() );
return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
}
/**
* 根据条件查询所有符合条件的项目信息ID,项目信息不会很多 ,所以直接查询出来
* @param maxCount
* @param sequenceFieldValue
* @param orderField
* @param orderType
* @param personName
* @param identityNames
* @param unitNames
* @param groupNames
* @param queryFilter
* @return
* @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 );
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<Project> root = cq.from(Project.class);
Predicate p_permission = null;
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_.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));
}
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( Project_.class, cb, p_permission, root, queryFilter );
cq.distinct(true).select( root.get(Project_.id) );
return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
}
}
package com.x.teamwork.assemble.control.jaxrs;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import com.x.base.core.project.jaxrs.AbstractActionApplication;
import com.x.teamwork.assemble.control.jaxrs.attachment.AttachmentAction;
import com.x.teamwork.assemble.control.jaxrs.chat.ChatAction;
import com.x.teamwork.assemble.control.jaxrs.config.SystemConfigAction;
import com.x.teamwork.assemble.control.jaxrs.dynamic.DynamicAction;
import com.x.teamwork.assemble.control.jaxrs.extfield.CustomExtFieldReleAction;
import com.x.teamwork.assemble.control.jaxrs.global.GlobalAction;
import com.x.teamwork.assemble.control.jaxrs.list.TaskListAction;
import com.x.teamwork.assemble.control.jaxrs.project.ProjectAction;
import com.x.teamwork.assemble.control.jaxrs.projectTemplate.ProjectTemplateAction;
import com.x.teamwork.assemble.control.jaxrs.projectgroup.ProjectGroupAction;
import com.x.teamwork.assemble.control.jaxrs.task.TaskAction;
import com.x.teamwork.assemble.control.jaxrs.taskListTemplate.TaskListTemplateAction;
import com.x.teamwork.assemble.control.jaxrs.taskgroup.TaskGroupAction;
import com.x.teamwork.assemble.control.jaxrs.tasktag.TaskTagAction;
import com.x.teamwork.assemble.control.jaxrs.taskview.TaskViewAction;
import com.x.teamwork.core.entity.CustomExtFieldRele;
@ApplicationPath("jaxrs")
public class ActionApplication extends AbstractActionApplication {
public Set<Class<?>> getClasses() {
this.classes.add( ProjectAction.class );
this.classes.add( TaskAction.class );
this.classes.add( TaskTagAction.class );
this.classes.add( TaskViewAction.class );
this.classes.add( AttachmentAction.class );
this.classes.add( ProjectGroupAction.class );
this.classes.add( TaskGroupAction.class );
this.classes.add( TaskListAction.class );
this.classes.add( DynamicAction.class );
this.classes.add( ChatAction.class );
this.classes.add( SystemConfigAction.class );
this.classes.add( CustomExtFieldReleAction.class );
this.classes.add( ProjectTemplateAction.class );
this.classes.add( TaskListTemplateAction.class );
this.classes.add( GlobalAction.class );
this.classes.add( CustomExtFieldRele.class );
return this.classes;
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs;
import javax.servlet.annotation.WebFilter;
import com.x.base.core.project.jaxrs.ManagerUserJaxrsFilter;
@WebFilter(urlPatterns = {
"/jaxrs/project/*",
"/jaxrs/chat/*",
"/jaxrs/task/*",
"/jaxrs/task_tag/*",
"/jaxrs/task_view/*",
"/jaxrs/attachment/*",
"/jaxrs/project_group/*",
"/jaxrs/projectTemplate/*",
"/jaxrs/taskListTemplate/*",
"/jaxrs/task_group/*",
"/jaxrs/task_list/*",
"/jaxrs/config/*",
"/jaxrs/extfield/*",
"/jaxrs/global/*",
"/jaxrs/dynamic/*"
}, asyncSupported = true)
public class JaxrsManagerUserFilter extends ManagerUserJaxrsFilter {
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.chat;
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.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.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.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.teamwork.assemble.control.service.MessageFactory;
import com.x.teamwork.core.entity.Chat;
import com.x.teamwork.core.entity.Dynamic;
import com.x.teamwork.core.entity.Task;
public class ActionCreate extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionCreate.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, JsonElement jsonElement ) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Chat chat = null;
Task task = null;
Wi wi = null;
Wo wo = new Wo();
Boolean check = true;
try {
wi = this.convertToWrapIn( jsonElement, Wi.class );
chat = Wi.copier.copy( wi );
} catch (Exception e) {
check = false;
Exception exception = new ChatPersistException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
if( Boolean.TRUE.equals( check ) ){
if( StringUtils.isEmpty( wi.getTaskId() )) {
check = false;
Exception exception = new TaskIDEmptyException();
result.error(exception);
}
}
if( Boolean.TRUE.equals( check ) ){
if( StringUtils.isEmpty( wi.getContent() )) {
check = false;
Exception exception = new ChatContentEmptyException();
result.error(exception);
}
}
if( Boolean.TRUE.equals( check ) ){
if( StringUtils.isEmpty( wi.getSender() )) {
chat.setSender( effectivePerson.getDistinguishedName() );
}
}
if( Boolean.TRUE.equals( check ) ){
try {
task = taskQueryService.get( wi.getTaskId() );
if ( task == null) {
check = false;
Exception exception = new TaskNotExistsException( wi.getTaskId() );
result.error( exception );
}else {
chat.setProjectId( task.getProject() );
chat.setProjectTitle( task.getProjectName() );
chat.setTaskTitle( task.getName() );
chat.setTarget(effectivePerson.getDistinguishedName());
}
} catch (Exception e) {
check = false;
Exception exception = new ChatPersistException(e, "根据ID查询工作任务信息对象时发生异常。ID:" + wi.getTaskId());
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
String lobContent = wi.getContent();
if( wi.getContent().length() > 70 ) {
chat.setIsLob( true );
chat.setContent( wi.getContent().substring(0, 70) + "...");
}
chat = chatPersistService.create( effectivePerson, chat, lobContent );
// 更新缓存
ApplicationCache.notify( Chat.class );
wo.setId( chat.getId() );
} catch (Exception e) {
check = false;
Exception exception = new ChatPersistException(e, "工作评论信息保存时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
MessageFactory.message_to_chat( chat );
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
Dynamic dynamic = dynamicPersistService.chatPublishDynamic( chat, effectivePerson, jsonElement.toString() );
if( dynamic != null ) {
List<WoDynamic> dynamics = new ArrayList<>();
dynamics.add( WoDynamic.copier.copy( dynamic ) );
if( wo != null ) {
wo.setDynamics(dynamics);
}
}
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
}
}
result.setData( wo );
return result;
}
public static class Wi {
public static WrapCopier<Wi, Chat> copier = WrapCopierFactory.wi( Wi.class, Chat.class, null, null );
@FieldDescribe("所属工作ID,<font style='color:red'>必填</font>")
private String taskId = null;
@FieldDescribe("交流内容,<font style='color:red'>必填</font>" )
private String content = null;
@FieldDescribe("发送者,非必填")
private String sender = null;
@FieldDescribe("目标者,非必填")
private String target = null;
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
public static class Wo extends WoId {
@FieldDescribe("操作引起的动态内容")
List<WoDynamic> dynamics = new ArrayList<>();
public List<WoDynamic> getDynamics() {
return dynamics;
}
public void setDynamics(List<WoDynamic> dynamics) {
this.dynamics = dynamics;
}
}
public static class WoDynamic extends Dynamic{
private static final long serialVersionUID = -5076990764713538973L;
public static WrapCopier<Dynamic, WoDynamic> copier = WrapCopierFactory.wo( Dynamic.class, WoDynamic.class, null, JpaObject.FieldsInvisible);
private Long rank = 0L;
public Long getRank() {
return rank;
}
public void setRank(Long rank) {
this.rank = rank;
}
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.extfield;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
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.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.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.teamwork.core.entity.Dynamic;
import com.x.teamwork.core.entity.CustomExtFieldRele;
public class ActionDelete extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionDelete.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String flag) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
CustomExtFieldRele customExtFieldRele = null;
Wo wo = new Wo();
Boolean check = true;
if ( StringUtils.isEmpty( flag ) ) {
check = false;
Exception exception = new CustomExtFieldReleFlagForQueryEmptyException();
result.error( exception );
}
if( Boolean.TRUE.equals( check ) ){
try {
customExtFieldRele = customExtFieldReleQueryService.get(flag);
if ( customExtFieldRele == null) {
check = false;
Exception exception = new CustomExtFieldReleNotExistsException(flag);
result.error( exception );
}
} catch (Exception e) {
check = false;
Exception exception = new CustomExtFieldReleQueryException(e, "根据指定flag查询扩展属性关联信息对象时发生异常。flag:" + flag);
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
customExtFieldRelePersistService.delete(flag, effectivePerson );
// 更新缓存
ApplicationCache.notify( CustomExtFieldRele.class );
wo.setId( customExtFieldRele.getId() );
} catch (Exception e) {
check = false;
Exception exception = new CustomExtFieldReleQueryException(e, "根据指定flag删除扩展属性关联信息对象时发生异常。flag:" + flag);
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
Dynamic dynamic = dynamicPersistService.projectExtFieldReleDeleteDynamic( customExtFieldRele, effectivePerson);
if( dynamic != null ) {
List<WoDynamic> dynamics = new ArrayList<>();
dynamics.add( WoDynamic.copier.copy( dynamic ) );
if( wo != null ) {
wo.setDynamics(dynamics);
}
}
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
}
}
result.setData( wo );
return result;
}
public static class Wo extends WoId {
@FieldDescribe("操作引起的动态内容")
List<WoDynamic> dynamics = new ArrayList<>();
public List<WoDynamic> getDynamics() {
return dynamics;
}
public void setDynamics(List<WoDynamic> dynamics) {
this.dynamics = dynamics;
}
}
public static class WoDynamic extends Dynamic{
private static final long serialVersionUID = -5076990764713538973L;
public static WrapCopier<Dynamic, WoDynamic> copier = WrapCopierFactory.wo( Dynamic.class, WoDynamic.class, null, JpaObject.FieldsInvisible);
private Long rank = 0L;
public Long getRank() {
return rank;
}
public void setRank(Long rank) {
this.rank = rank;
}
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.extfield;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
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.core.entity.CustomExtFieldRele;
import net.sf.ehcache.Element;
public class ActionGet extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionGet.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String id) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Wo wo = null;
CustomExtFieldRele customExtFieldRele = null;
Boolean check = true;
if ( StringUtils.isEmpty( id ) ) {
check = false;
Exception exception = new CustomExtFieldReleFlagForQueryEmptyException();
result.error( exception );
}
String cacheKey = ApplicationCache.concreteCacheKey( "CustomExtFieldRele.Get." + id );
Element element = customExtFieldReleCache.get( cacheKey );
if ((null != element) && (null != element.getObjectValue())) {
wo = (Wo) element.getObjectValue();
} else {
if( Boolean.TRUE.equals( check ) ){
try {
customExtFieldRele = customExtFieldReleQueryService.get(id);
if ( customExtFieldRele == null) {
check = false;
Exception exception = new CustomExtFieldReleNotExistsException(id);
result.error( exception );
}
} catch (Exception e) {
check = false;
Exception exception = new CustomExtFieldReleQueryException( e, "根据指定id查询扩展属性关联信息对象时发生异常。flag:" + id );
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
wo = Wo.copier.copy( customExtFieldRele );
} catch (Exception e) {
Exception exception = new CustomExtFieldReleQueryException(e, "将查询出来的扩展属性关联信息对象转换为可输出的数据信息时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
}
result.setData( wo );
return result;
}
public static class Wo extends CustomExtFieldRele {
private static final long serialVersionUID = -5076990764713538973L;
public static List<String> Excludes = new ArrayList<String>();
static WrapCopier<CustomExtFieldRele, Wo> copier = WrapCopierFactory.wo( CustomExtFieldRele.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.extfield;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
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.teamwork.core.entity.Project;
import com.x.teamwork.core.entity.Task;
public class ActionGetNextUseableExtFieldName extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionGetNextUseableExtFieldName.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String correlationId, String fieldType ) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Project project = null;
Task task = null;
Boolean check = true;
Wo wo = new Wo();
if( Boolean.TRUE.equals( check ) ){
if( StringUtils.isEmpty( correlationId )) {
check = false;
Exception exception = new CustomExtFieldReleFlagForQueryEmptyException();
result.error( exception );
}
}
if( Boolean.TRUE.equals( check ) ){
if( StringUtils.isEmpty( fieldType )) {
fieldType = "TEXT";
}
}
/*if( Boolean.TRUE.equals( check ) ){
try {
project = projectQueryService.get( correlationId );
if ( project == null) {
check = false;
Exception exception = new ProjectNotExistsException( correlationId );
result.error( exception );
}
} catch (Exception e) {
check = false;
Exception exception = new CustomExtFieldRelePersistException(e, "根据指定flag查询应用项目信息对象时发生异常。flag:" + correlationId );
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}*/
if( Boolean.TRUE.equals( check ) ){
String fieldName = customExtFieldReleQueryService.getNextUseableExtFieldName( correlationId, fieldType );
if( StringUtils.isNotEmpty( fieldName )) {
wo.setFieldName(fieldName);
}else {
Exception exception = new CustomExtFieldReleQueryException( "当前关联ID无可用扩展属性。" );
result.error(exception);
}
}
result.setData(wo);
return result;
}
public static class Wo {
private String fieldName = null;
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.extfield;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.teamwork.core.entity.tools.FieldInfo;
import com.x.teamwork.core.entity.tools.CustomExtField;
public class ActionListAllExtFields extends BaseAction {
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson ) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Wo wo = new Wo();
result.setData(wo);
return result;
}
public static class Wo {
private List<FieldInfo> fieldInfos = CustomExtField.listAllExtField();
public List<FieldInfo> getFieldInfos() {
return fieldInfos;
}
public void setFieldInfos(List<FieldInfo> fieldInfos) {
this.fieldInfos = fieldInfos;
}
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.extfield;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
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.base.core.project.tools.SortTools;
import com.x.teamwork.core.entity.CustomExtFieldRele;
import net.sf.ehcache.Element;
public class ActionListWithCorrelation extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionListWithCorrelation.class);
@SuppressWarnings("unchecked")
protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson, String correlationId ) throws Exception {
ActionResult<List<Wo>> result = new ActionResult<>();
List<Wo> wos = null;
List<CustomExtFieldRele> customExtFieldReles = null;
Boolean check = true;
String cacheKey = ApplicationCache.concreteCacheKey( "ActionListWithCorrelation", correlationId, effectivePerson.getDistinguishedName() );
Element element = customExtFieldReleCache.get( cacheKey );
if ((null != element) && (null != element.getObjectValue())) {
wos = (List<Wo>) element.getObjectValue();
result.setData( wos );
} else {
if( Boolean.TRUE.equals( check ) ){
try {
customExtFieldReles = customExtFieldReleQueryService.listReleWithCorrelation(correlationId);
if( ListTools.isEmpty( customExtFieldReles )) {
customExtFieldReles = new ArrayList<>();
}
wos = Wo.copier.copy( customExtFieldReles );
SortTools.asc( wos, "createTime");
customExtFieldReleCache.put(new Element(cacheKey, wos));
result.setData(wos);
} catch (Exception e) {
check = false;
Exception exception = new CustomExtFieldReleQueryException(e, "根据关联ID查询对应的扩展属性信息列表时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
}
return result;
}
public static class Wo extends CustomExtFieldRele {
private Long rank;
public Long getRank() {
return rank;
}
public void setRank(Long rank) {
this.rank = rank;
}
private static final long serialVersionUID = -5076990764713538973L;
public static List<String> Excludes = new ArrayList<String>();
static WrapCopier<CustomExtFieldRele, Wo> copier = WrapCopierFactory.wo( CustomExtFieldRele.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.extfield;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
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.base.core.project.tools.SortTools;
import com.x.teamwork.core.entity.CustomExtFieldRele;
import net.sf.ehcache.Element;
public class ActionListWithType extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionListWithType.class);
@SuppressWarnings("unchecked")
protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson, String type ) throws Exception {
ActionResult<List<Wo>> result = new ActionResult<>();
List<Wo> wos = null;
List<CustomExtFieldRele> customExtFieldReles = null;
Boolean check = true;
String cacheKey = ApplicationCache.concreteCacheKey( "ActionListWithPublic", type, effectivePerson.getDistinguishedName() );
Element element = customExtFieldReleCache.get( cacheKey );
if ((null != element) && (null != element.getObjectValue())) {
wos = (List<Wo>) element.getObjectValue();
result.setData( wos );
} else {
if( Boolean.TRUE.equals( check ) ){
try {
customExtFieldReles = customExtFieldReleQueryService.listReleWithType(type);
if( ListTools.isEmpty( customExtFieldReles )) {
customExtFieldReles = new ArrayList<>();
}
wos = Wo.copier.copy( customExtFieldReles );
SortTools.asc( wos, "createTime");
customExtFieldReleCache.put(new Element(cacheKey, wos));
result.setData(wos);
} catch (Exception e) {
check = false;
Exception exception = new CustomExtFieldReleQueryException(e, "根据关联ID查询对应的扩展属性信息列表时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
}
return result;
}
public static class Wo extends CustomExtFieldRele {
private Long rank;
public Long getRank() {
return rank;
}
public void setRank(Long rank) {
this.rank = rank;
}
private static final long serialVersionUID = -5076990764713538973L;
public static List<String> Excludes = new ArrayList<String>();
static WrapCopier<CustomExtFieldRele, Wo> copier = WrapCopierFactory.wo( CustomExtFieldRele.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.extfield;
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.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.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.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.teamwork.core.entity.Dynamic;
import com.x.teamwork.core.entity.Project;
import com.x.teamwork.core.entity.Task;
import com.x.teamwork.core.entity.CustomExtFieldRele;
public class ActionSave extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionSave.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, JsonElement jsonElement ) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
CustomExtFieldRele customExtFieldRele = null;
CustomExtFieldRele customExtFieldRele_old = null;
Project project = null;
Task task = null;
Wi wi = null;
Wo wo = new Wo();
String fieldName = null;
Boolean check = true;
try {
wi = this.convertToWrapIn( jsonElement, Wi.class );
customExtFieldRele = Wi.copier.copy( wi );
} catch (Exception e) {
check = false;
Exception exception = new CustomExtFieldRelePersistException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
/*if( Boolean.TRUE.equals( check ) ){
if( StringUtils.isEmpty( customExtFieldRele.getProjectId() )) {
check = false;
Exception exception = new ProjectFlagForQueryEmptyException();
result.error( exception );
}
}*/
if( Boolean.TRUE.equals( check ) ){
if(StringUtils.isNotEmpty( customExtFieldRele.getCorrelationId() )){
try {
if(StringUtils.equals(customExtFieldRele.getType(), "project")){
project = projectQueryService.get( customExtFieldRele.getCorrelationId() );
if ( project == null) {
check = false;
Exception exception = new ProjectNotExistsException( customExtFieldRele.getCorrelationId() );
result.error( exception );
}
}
if(StringUtils.equals(customExtFieldRele.getType(), "task")){
task = taskQueryService.get( customExtFieldRele.getCorrelationId() );
if ( task == null) {
check = false;
Exception exception = new TaskNotExistsException( customExtFieldRele.getCorrelationId() );
result.error( exception );
}
}
} catch (Exception e) {
check = false;
Exception exception = new CustomExtFieldRelePersistException(e, "根据指定flag查询应用项目信息对象时发生异常。flag:" + customExtFieldRele.getCorrelationId() );
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
}
if( Boolean.TRUE.equals( check ) ){
if( StringUtils.isNotEmpty( customExtFieldRele.getId() )) {
try {
customExtFieldRele_old = customExtFieldReleQueryService.get( customExtFieldRele.getId() );
} catch (Exception e) {
check = false;
Exception exception = new CustomExtFieldReleQueryException(e, "系统在根据ID查询指定的扩展属性关联信息时发生异常。ID:" + customExtFieldRele.getId() );
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
}
if( Boolean.TRUE.equals( check ) ){
if( customExtFieldRele_old == null ) { //新建
fieldName = customExtFieldReleQueryService.getNextUseableExtFieldName( customExtFieldRele.getCorrelationId(), customExtFieldRele.getDisplayType() );
}else {
//判断是否属性在富文本和普通 文本之间发生了变换
if( (StringUtils.equals("RICHTEXT",wi.getDisplayType()) && !StringUtils.equals("RICHTEXT",customExtFieldRele_old.getDisplayType()))
|| !StringUtils.equals("RICHTEXT",wi.getDisplayType()) && StringUtils.equals("RICHTEXT",customExtFieldRele_old.getDisplayType())) {
//判断当前所需要的类型的备用属性是否足够
fieldName = customExtFieldReleQueryService.getNextUseableExtFieldName( customExtFieldRele.getCorrelationId(), customExtFieldRele.getDisplayType() );
}else {
fieldName = customExtFieldRele_old.getExtFieldName();
}
}
}
if( Boolean.TRUE.equals( check ) ){
if( StringUtils.isEmpty( fieldName )) {
//备用属性已经用完了,无法再添加新的属性
check = false;
wo.setUseable(false);
/*Exception exception = new CustomExtFieldRelePersistException( "扩展属性不足(备用属性已用完),系统无法为该对象分配["+ customExtFieldRele.getDisplayType() +"]。" );
result.error(exception);*/
}else {
customExtFieldRele.setExtFieldName( fieldName );
}
}
if( Boolean.TRUE.equals( check ) ){
try {
customExtFieldRele = customExtFieldRelePersistService.save( customExtFieldRele, effectivePerson );
// 更新缓存
ApplicationCache.notify( CustomExtFieldRele.class );
wo.setId( customExtFieldRele.getId() );
} catch (Exception e) {
check = false;
Exception exception = new CustomExtFieldRelePersistException(e, "扩展属性关联信息保存时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
Dynamic dynamic = dynamicPersistService.projectExtFieldReleSaveDynamic(customExtFieldRele_old, customExtFieldRele, effectivePerson);
if( dynamic != null ) {
List<WoDynamic> dynamics = new ArrayList<>();
dynamics.add( WoDynamic.copier.copy( dynamic ) );
if( wo != null ) {
wo.setDynamics(dynamics);
}
}
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
}
}
result.setData( wo );
return result;
}
public static class Wi {
@FieldDescribe("ID,为空时为新建")
private String id;
@FieldDescribe("显示属性名称(必填)")
private String displayName;
@FieldDescribe("显示方式:TEXT|RADIO|CHECKBOX|SELECT|MUTISELECT|RICHTEXT(必填)")
private String displayType="TEXT";
@FieldDescribe("类型:project|task(必填)")
private String type;
@FieldDescribe("说明信息(非必填)")
private String description;
@FieldDescribe("关联ID((非必填)")
private String correlationId;
@FieldDescribe("选择荐的备选数据,数据Json, displayType=RADIO|CHECKBOX|SELECT|MUTISELECT时必须填写,否则无选择项")
private String optionsData;
public static WrapCopier<Wi, CustomExtFieldRele> copier = WrapCopierFactory.wi( Wi.class, CustomExtFieldRele.class, null, null );
public String getDisplayType() {
return displayType;
}
public void setDisplayType(String displayType) {
this.displayType = displayType;
}
public String getOptionsData() {
return optionsData;
}
public void setOptionsData(String optionsData) {
this.optionsData = optionsData;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCorrelationId() {
return correlationId;
}
public void setCorrelationId(String correlationId) {
this.correlationId = correlationId;
}
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
public static class Wo extends WoId {
@FieldDescribe("操作引起的动态内容")
List<WoDynamic> dynamics = new ArrayList<>();
@FieldDescribe("备用属性是否可用")
Boolean useable = true;
public Boolean getUseable(){
return useable;
}
public void setUseable(Boolean useable){
this.useable = useable;
}
public List<WoDynamic> getDynamics() {
return dynamics;
}
public void setDynamics(List<WoDynamic> dynamics) {
this.dynamics = dynamics;
}
}
public static class WoDynamic extends Dynamic{
private static final long serialVersionUID = -5076990764713538973L;
public static WrapCopier<Dynamic, WoDynamic> copier = WrapCopierFactory.wo( Dynamic.class, WoDynamic.class, null, JpaObject.FieldsInvisible);
private Long rank = 0L;
public Long getRank() {
return rank;
}
public void setRank(Long rank) {
this.rank = rank;
}
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.extfield;
import com.x.base.core.project.cache.ApplicationCache;
import com.x.base.core.project.jaxrs.StandardJaxrsAction;
import com.x.teamwork.assemble.control.service.DynamicPersistService;
import com.x.teamwork.assemble.control.service.CustomExtFieldRelePersistService;
import com.x.teamwork.assemble.control.service.CustomExtFieldReleQueryService;
import com.x.teamwork.assemble.control.service.ProjectQueryService;
import com.x.teamwork.assemble.control.service.SystemConfigQueryService;
import com.x.teamwork.assemble.control.service.TaskQueryService;
import com.x.teamwork.core.entity.CustomExtFieldRele;
import net.sf.ehcache.Ehcache;
public class BaseAction extends StandardJaxrsAction {
protected Ehcache customExtFieldReleCache = ApplicationCache.instance().getCache( CustomExtFieldRele.class );
protected CustomExtFieldReleQueryService customExtFieldReleQueryService = new CustomExtFieldReleQueryService();
protected CustomExtFieldRelePersistService customExtFieldRelePersistService = new CustomExtFieldRelePersistService();
protected ProjectQueryService projectQueryService = new ProjectQueryService();
protected TaskQueryService taskQueryService = new TaskQueryService();
protected DynamicPersistService dynamicPersistService = new DynamicPersistService();
protected SystemConfigQueryService systemConfigQueryService = new SystemConfigQueryService();
}
package com.x.teamwork.assemble.control.jaxrs.extfield;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.container.AsyncResponse;
import javax.ws.rs.container.Suspended;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import com.google.gson.JsonElement;
import com.x.base.core.project.annotation.JaxrsDescribe;
import com.x.base.core.project.annotation.JaxrsMethodDescribe;
import com.x.base.core.project.annotation.JaxrsParameterDescribe;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.http.HttpMediaType;
import com.x.base.core.project.jaxrs.ResponseFactory;
import com.x.base.core.project.jaxrs.StandardJaxrsAction;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
@Path("extfield")
@JaxrsDescribe("扩展属性关联信息管理")
public class CustomExtFieldReleAction extends StandardJaxrsAction {
private Logger logger = LoggerFactory.getLogger(CustomExtFieldReleAction.class);
@JaxrsMethodDescribe(value = "查询所有扩展属性信息.", action = ActionListAllExtFields.class)
@GET
@Path("list/fields/all")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void listAllUseableFields(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request ) {
ActionResult<ActionListAllExtFields.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionListAllExtFields().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 = ActionGet.class)
@GET
@Path("rele/{id}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void get(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request, @JaxrsParameterDescribe("关联信息ID") @PathParam("id") String id ) {
ActionResult<ActionGet.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionGet().execute( request, effectivePerson, id );
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "根据关联ID,需要的扩展属性类别获取下一个可用的属性名称.", action = ActionGetNextUseableExtFieldName.class)
@GET
@Path("next/field/{correlationId}/{fieldType}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void getNextUseableFieldName(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("关联ID") @PathParam("correlationId") String correlationId,
@JaxrsParameterDescribe("属性类别:TEXT|SELECT|MUTISELECT|RICHTEXT|DATE|DATETIME|PERSON|IDENTITY|UNIT|GROUP|") @PathParam("fieldType") String fieldType ) {
ActionResult<ActionGetNextUseableExtFieldName.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionGetNextUseableExtFieldName().execute( request, effectivePerson, correlationId, fieldType );
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "根据关联ID查询用户创建的所有扩展属性关联信息列表.", action = ActionListWithCorrelation.class)
@GET
@Path("list/{correlationId}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void listFieldsWithCorrelation(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("关联ID") @PathParam("correlationId") String correlationId ) {
ActionResult<List<ActionListWithCorrelation.Wo>> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionListWithCorrelation().execute( request, effectivePerson, correlationId );
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "根据扩展属性类型查询扩展属性信息列表.", action = ActionListWithType.class)
@GET
@Path("listPublicFields/{type}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void listFieldsWithType(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("扩展属性类型") @PathParam("type") String type ) {
ActionResult<List<ActionListWithType.Wo>> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionListWithType().execute( request, effectivePerson, type );
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "创建或者更新一个扩展属性关联信息.", action = ActionSave.class)
@POST
@Path("relevance")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void save(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("需要保存的扩展属性关联信息") JsonElement jsonElement ) {
ActionResult<ActionSave.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionSave().execute(request, effectivePerson, jsonElement);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "根据标识删除扩展属性关联信息.", action = ActionDelete.class)
@DELETE
@Path("relevance/{id}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void delete(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("标识") @PathParam("id") String id ) {
ActionResult<ActionDelete.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionDelete().execute(request, effectivePerson, id);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.extfield;
import com.x.base.core.project.exception.PromptException;
class CustomExtFieldReleFlagForQueryEmptyException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
CustomExtFieldReleFlagForQueryEmptyException() {
super("查询的扩展属性关联信息ID为空,无法继续查询数据。" );
}
}
package com.x.teamwork.assemble.control.jaxrs.extfield;
import com.x.base.core.project.exception.PromptException;
class CustomExtFieldReleNotExistsException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
CustomExtFieldReleNotExistsException( String id ) {
super("指定ID的扩展属性关联信息不存在。ID:" + id );
}
}
package com.x.teamwork.assemble.control.jaxrs.extfield;
import com.x.base.core.project.exception.PromptException;
class CustomExtFieldRelePersistException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
CustomExtFieldRelePersistException( Throwable e ) {
super("系统在保存扩展属性关联信息时发生异常。" , e );
}
CustomExtFieldRelePersistException( Throwable e, String message ) {
super("系统在保存扩展属性关联信息时发生异常。Message:" + message, e );
}
CustomExtFieldRelePersistException( String message ) {
super("系统在保存扩展属性关联信息时发生异常。Message:" + message );
}
}
package com.x.teamwork.assemble.control.jaxrs.extfield;
import com.x.base.core.project.exception.PromptException;
class CustomExtFieldReleQueryException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
CustomExtFieldReleQueryException( Throwable e ) {
super("系统在查询扩展属性关联信息时发生异常。" , e );
}
CustomExtFieldReleQueryException( Throwable e, String message ) {
super("系统在查询扩展属性关联信息时发生异常。Message:" + message, e );
}
CustomExtFieldReleQueryException( String message ) {
super("系统在查询扩展属性关联信息时发生异常。Message:" + message );
}
}
package com.x.teamwork.assemble.control.jaxrs.extfield;
import com.x.base.core.project.exception.PromptException;
class TaskNotExistsException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
TaskNotExistsException( String id ) {
super("指定ID的任务信息不存在。ID:" + id );
}
}
package com.x.teamwork.assemble.control.jaxrs.global;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
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.jaxrs.WoId;
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.core.entity.Priority;
public class ActionInitConfig extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionInitConfig.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Wo wo = new Wo();
List<Priority> prioritys = null;
try {
prioritys = priorityQueryService.listPriority();
if( ListTools.isEmpty( prioritys )) {
//初始化默认的优先级配置、默认模板
this.initPrioritys(wo,effectivePerson);
}
} catch (Exception e) {
Exception exception = new PriorityQueryException(e, "查询优先级信息列表时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
result.setData( wo );
return result;
}
private void initPrioritys(Wo wo,EffectivePerson effectivePerson) throws Exception{
for(int i=0;i<3;i++){
Priority priority = new Priority();
if(i==0){
priority.setPriority("紧急");
priority.setPriorityColor("#e62412");
}
if(i==1){
priority.setPriority("优先");
priority.setPriorityColor("#fa8c15");
}
if(i==2){
priority.setPriority("普通");
priority.setPriorityColor("#15ad31");
}
priority.setOrder(i);
priority.setOwner("系统");
try {
priority = priorityPersistService.save( priority, effectivePerson );
ApplicationCache.notify( Priority.class );
wo.setId( priority.getId() );
} catch (Exception e) {
Exception exception = new PriorityPersistException(e, "优先级信息保存时发生异常。");
}
}
}
public static class Wo extends WoId {
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.global;
import javax.servlet.http.HttpServletRequest;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.teamwork.assemble.control.Business;
public class ActionIsManager extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionIsManager.class);
protected ActionResult<String> execute(HttpServletRequest request, EffectivePerson effectivePerson) throws Exception {
ActionResult<String> result = new ActionResult<>();
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()){
Business business = new Business(emc);
if(business.isManager(effectivePerson)){
result.setData( "yes" );
}else{
result.setData( "no" );
}
} catch (Exception e) {
result.error(e);
logger.error(e, effectivePerson, request, null);
}
return result;
}
public static class Wo extends WoId {
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.global;
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.entity.JpaObject;
import com.x.base.core.project.bean.WrapCopier;
import com.x.base.core.project.bean.WrapCopierFactory;
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.core.entity.tools.filter.QueryFilter;
import com.x.teamwork.core.entity.ProjectConfig;
public class ActionListProjectConfigNextWithFilter extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionListProjectConfigNextWithFilter.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;
QueryFilter queryFilter = null;
if ( StringUtils.isEmpty( flag ) || "(0)".equals(flag)) {
flag = null;
}
try {
wrapIn = this.convertToWrapIn(jsonElement, Wi.class);
} catch (Exception e) {
check = false;
Exception exception = new ProjectConfigQueryException(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 = projectCache.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> projectConfigIds = projectConfigQueryService.listAllProjectConfigIds( effectivePerson, 2000, queryFilter );
if( ListTools.isNotEmpty( projectConfigIds )) {
//直接根据可见项目ID列表进行分页查询
Long total = Long.parseLong( projectConfigIds.size() + "" );
List<ProjectConfig> projectConfigList = projectConfigQueryService.listWithProjectConfigIdFilter( count, flag, wrapIn.getOrderField(), wrapIn.getOrderType(), projectConfigIds );
if( ListTools.isNotEmpty( projectConfigList )) {
for( ProjectConfig projectConfig : projectConfigList ) {
Wo wo = Wo.copier.copy(projectConfig);
wos.add( wo );
}
}
resultObject = new ResultObject( total, wos );
//projectCache.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 WrapInQueryProjectConfig{
}
public static class Wo extends ProjectConfig {
private static final long serialVersionUID = -5076990764713538973L;
public static List<String> Excludes = new ArrayList<String>();
static WrapCopier<ProjectConfig, Wo> copier = WrapCopierFactory.wo( ProjectConfig.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;
}
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.global;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
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.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.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.teamwork.core.entity.Dynamic;
import com.x.teamwork.core.entity.Priority;
import com.x.teamwork.core.entity.Project;
import com.x.teamwork.core.entity.ProjectGroup;
public class ActionPriorityDelete extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionPriorityDelete.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String flag) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Priority priority = null;
Boolean check = true;
Wo wo = new Wo();
if ( StringUtils.isEmpty( flag ) ) {
check = false;
Exception exception = new PriorityFlagForQueryEmptyException();
result.error( exception );
}
if( Boolean.TRUE.equals( check ) ){
try {
priority = priorityQueryService.get(flag);
if ( priority == null) {
check = false;
Exception exception = new PriorityNotExistsException(flag);
result.error( exception );
}
} catch (Exception e) {
check = false;
Exception exception = new PriorityQueryException(e, "根据指定flag查询优先级信息对象时发生异常。flag:" + flag);
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
priorityPersistService.delete(flag, effectivePerson );
// 更新缓存
ApplicationCache.notify( Priority.class );
wo.setId( priority.getId() );
} catch (Exception e) {
check = false;
Exception exception = new PriorityQueryException(e, "根据指定flag删除优先级信息对象时发生异常。flag:" + flag);
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
result.setData( wo );
return result;
}
public static class Wo extends WoId {
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.global;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
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.core.entity.Priority;
import com.x.teamwork.core.entity.ProjectGroup;
import net.sf.ehcache.Element;
public class ActionPriorityGet extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionPriorityGet.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String id ) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Wo wo = null;
Priority priority = null;
Boolean check = true;
if ( StringUtils.isEmpty( id ) ) {
check = false;
Exception exception = new PriorityFlagForQueryEmptyException();
result.error( exception );
}
if( Boolean.TRUE.equals( check ) ){
try {
priority = priorityQueryService.get( id );
if ( priority == null) {
check = false;
Exception exception = new PriorityNotExistsException( id );
result.error( exception );
}
} catch (Exception e) {
check = false;
Exception exception = new PriorityQueryException(e, "根据指定flag查询优先级信息对象时发生异常。id:" + id );
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
wo = Wo.copier.copy( priority );
result.setData(wo);
} catch (Exception e) {
Exception exception = new PriorityQueryException(e, "将查询出来的优先级信息对象转换为可输出的数据信息时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
return result;
}
public static class Wo extends Priority {
private static final long serialVersionUID = -5076990764713538973L;
public static List<String> Excludes = new ArrayList<String>();
static WrapCopier<Priority, Wo> copier = WrapCopierFactory.wo( Priority.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.global;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
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.base.core.project.tools.SortTools;
import com.x.teamwork.core.entity.Priority;
import com.x.teamwork.core.entity.ProjectGroup;
import net.sf.ehcache.Element;
public class ActionPriorityList extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionPriorityList.class);
@SuppressWarnings("unchecked")
protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson ) throws Exception {
ActionResult<List<Wo>> result = new ActionResult<>();
List<Wo> wos = null;
List<Priority> prioritys = null;
try {
prioritys = priorityQueryService.listPriority();
if( ListTools.isNotEmpty( prioritys )) {
wos = Wo.copier.copy( prioritys );
//SortTools.asc( wos, "createTime");
result.setData(wos);
}
result.setData(wos);
} catch (Exception e) {
Exception exception = new PriorityQueryException(e, "查询优先级信息列表时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
return result;
}
public static class Wo extends Priority {
private Long rank;
public Long getRank() {
return rank;
}
public void setRank(Long rank) {
this.rank = rank;
}
private static final long serialVersionUID = -5076990764713538973L;
public static List<String> Excludes = new ArrayList<String>();
static WrapCopier<Priority, Wo> copier = WrapCopierFactory.wo( Priority.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.global;
import javax.servlet.http.HttpServletRequest;
import com.google.gson.JsonElement;
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.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.teamwork.core.entity.Priority;
public class ActionPrioritySave extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionPrioritySave.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, JsonElement jsonElement ) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Priority priority = null;
Wi wi = null;
Wo wo = new Wo();
try {
wi = this.convertToWrapIn( jsonElement, Wi.class );
} catch (Exception e) {
Exception exception = new PriorityPersistException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
try {
priority = priorityPersistService.save( wi, effectivePerson );
// 更新缓存
ApplicationCache.notify( Priority.class );
wo.setId( priority.getId() );
} catch (Exception e) {
Exception exception = new PriorityPersistException(e, "优先级信息保存时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
result.setData( wo );
return result;
}
public static class Wi extends Priority {
private static final long serialVersionUID = -6314932919066148113L;
public static WrapCopier<Wi, Priority> copier = WrapCopierFactory.wi( Wi.class, Priority.class, null, null );
}
public static class Wo extends WoId {
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.global;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
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.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.teamwork.core.entity.ProjectConfig;
public class ActionProjectConfigDelete extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionProjectConfigDelete.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String flag) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
ProjectConfig projectConfig = null;
Boolean check = true;
Wo wo = new Wo();
if ( StringUtils.isEmpty( flag ) ) {
check = false;
Exception exception = new ProjectConfigFlagForQueryEmptyException();
result.error( exception );
}
if( Boolean.TRUE.equals( check ) ){
try {
projectConfig = projectConfigQueryService.get(flag);
if ( projectConfig == null) {
check = false;
Exception exception = new ProjectConfigNotExistsException(flag);
result.error( exception );
}
} catch (Exception e) {
check = false;
Exception exception = new ProjectConfigQueryException(e, "根据指定flag查询项目配置信息对象时发生异常。flag:" + flag);
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
projectConfigPersistService.delete(flag, effectivePerson );
// 更新缓存
ApplicationCache.notify( ProjectConfig.class );
wo.setId( projectConfig.getId() );
} catch (Exception e) {
check = false;
Exception exception = new ProjectConfigQueryException(e, "根据指定flag删除项目配置信息对象时发生异常。flag:" + flag);
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
result.setData( wo );
return result;
}
public static class Wo extends WoId {
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.global;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
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.core.entity.Priority;
import com.x.teamwork.core.entity.ProjectConfig;
import com.x.teamwork.core.entity.ProjectGroup;
import net.sf.ehcache.Element;
public class ActionProjectConfigGet extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionProjectConfigGet.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String id ) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Wo wo = null;
ProjectConfig projectConfig = null;
Boolean check = true;
if ( StringUtils.isEmpty( id ) ) {
check = false;
Exception exception = new PriorityFlagForQueryEmptyException();
result.error( exception );
}
if( Boolean.TRUE.equals( check ) ){
try {
projectConfig = projectConfigQueryService.get( id );
if ( projectConfig == null) {
check = false;
Exception exception = new ProjectConfigNotExistsException( id );
result.error( exception );
}
} catch (Exception e) {
check = false;
Exception exception = new ProjectConfigQueryException(e, "根据指定flag查询项目配置信息对象时发生异常。id:" + id );
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
wo = Wo.copier.copy( projectConfig );
result.setData(wo);
} catch (Exception e) {
Exception exception = new ProjectConfigQueryException(e, "将查询出来的项目配置信息对象转换为可输出的数据信息时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
return result;
}
public static class Wo extends ProjectConfig {
private static final long serialVersionUID = -5076990764713538973L;
public static List<String> Excludes = new ArrayList<String>();
static WrapCopier<ProjectConfig, Wo> copier = WrapCopierFactory.wo( ProjectConfig.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.global;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
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.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.core.entity.ProjectConfig;
public class ActionProjectConfigGetByProject extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionProjectConfigGetByProject.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String id ) throws Exception {
ActionResult<Wo> result = new ActionResult<Wo>();
Wo wo = null;
List<ProjectConfig> projectConfigs = null;
ProjectConfig projectConfig = null;
Boolean check = true;
if ( StringUtils.isEmpty( id ) ) {
check = false;
Exception exception = new ProjectConfigFlagForQueryEmptyException();
result.error( exception );
}
if( Boolean.TRUE.equals( check ) ){
try {
projectConfigs = projectConfigQueryService.getProjectConfigByProject( id );
if(ListTools.isNotEmpty(projectConfigs)){
projectConfig = projectConfigs.get(0);
}
/*
if ( projectConfig == null) {
check = false;
Exception exception = new ProjectConfigNotExistsException( id );
result.error( exception );
}*/
} catch (Exception e) {
check = false;
Exception exception = new ProjectConfigQueryException(e, "根据指定flag查询项目配置信息对象时发生异常。id:" + id );
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
wo = Wo.copier.copy( projectConfig );
result.setData(wo);
} catch (Exception e) {
Exception exception = new ProjectConfigQueryException(e, "将查询出来的项目配置信息对象转换为可输出的数据信息时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
return result;
}
public static class Wo extends ProjectConfig {
private static final long serialVersionUID = -5076990764713538973L;
public static List<String> Excludes = new ArrayList<String>();
static WrapCopier<ProjectConfig, Wo> copier = WrapCopierFactory.wo( ProjectConfig.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.global;
import javax.servlet.http.HttpServletRequest;
import com.google.gson.JsonElement;
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.jaxrs.WoId;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.teamwork.core.entity.ProjectConfig;
public class ActionProjectConfigSave extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionProjectConfigSave.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, JsonElement jsonElement ) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
ProjectConfig projectConfig = null;
Wi wi = null;
Wo wo = new Wo();
try {
wi = this.convertToWrapIn( jsonElement, Wi.class );
} catch (Exception e) {
Exception exception = new PriorityPersistException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
try {
projectConfig = projectConfigPersistService.save( wi, effectivePerson );
// 更新缓存
ApplicationCache.notify( ProjectConfig.class );
wo.setId( projectConfig.getId() );
} catch (Exception e) {
Exception exception = new PriorityPersistException(e, "项目配置信息保存时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
result.setData( wo );
return result;
}
public static class Wi extends ProjectConfig {
private static final long serialVersionUID = -6314932919066148113L;
public static WrapCopier<Wi, ProjectConfig> copier = WrapCopierFactory.wi( Wi.class, ProjectConfig.class, null, null );
}
public static class Wo extends WoId {
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.global;
import com.x.base.core.project.cache.ApplicationCache;
import com.x.base.core.project.jaxrs.StandardJaxrsAction;
import com.x.teamwork.assemble.control.service.DynamicPersistService;
import com.x.teamwork.assemble.control.service.PriorityPersistService;
import com.x.teamwork.assemble.control.service.PriorityQueryService;
import com.x.teamwork.assemble.control.service.ProjectConfigPersistService;
import com.x.teamwork.assemble.control.service.ProjectConfigQueryService;
import com.x.teamwork.assemble.control.service.SystemConfigQueryService;
import com.x.teamwork.core.entity.Priority;
import com.x.teamwork.core.entity.ProjectConfig;
import net.sf.ehcache.Ehcache;
public class BaseAction extends StandardJaxrsAction {
protected Ehcache priorityCache = ApplicationCache.instance().getCache( Priority.class );
protected PriorityQueryService priorityQueryService = new PriorityQueryService();
protected PriorityPersistService priorityPersistService = new PriorityPersistService();
protected DynamicPersistService dynamicPersistService = new DynamicPersistService();
protected SystemConfigQueryService systemConfigQueryService = new SystemConfigQueryService();
protected Ehcache projectConfigCache = ApplicationCache.instance().getCache( ProjectConfig.class );
protected ProjectConfigPersistService projectConfigPersistService = new ProjectConfigPersistService();
protected ProjectConfigQueryService projectConfigQueryService = new ProjectConfigQueryService();
}
package com.x.teamwork.assemble.control.jaxrs.global;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.container.AsyncResponse;
import javax.ws.rs.container.Suspended;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import com.google.gson.JsonElement;
import com.x.base.core.project.annotation.JaxrsDescribe;
import com.x.base.core.project.annotation.JaxrsMethodDescribe;
import com.x.base.core.project.annotation.JaxrsParameterDescribe;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.http.HttpMediaType;
import com.x.base.core.project.jaxrs.ResponseFactory;
import com.x.base.core.project.jaxrs.StandardJaxrsAction;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.teamwork.assemble.control.jaxrs.project.ActionListNextWithFilter;
@Path("global")
@JaxrsDescribe("全局信息管理")
public class GlobalAction extends StandardJaxrsAction {
private Logger logger = LoggerFactory.getLogger(GlobalAction.class);
@JaxrsMethodDescribe(value = "查询当前用户是否具有管理员权限.", action = ActionIsManager.class)
@GET
@Path("isManager")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void isManager(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request ) {
ActionResult<String> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionIsManager().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 = ActionPriorityGet.class)
@GET
@Path("priority/{id}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void priorityGet(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("优先级ID") @PathParam("id") String id ) {
ActionResult<ActionPriorityGet.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionPriorityGet().execute( request, effectivePerson, id );
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "查询所有优先级信息列表.", action = ActionPriorityList.class)
@GET
@Path("priority/list")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void priorityList(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request ) {
ActionResult<List<ActionPriorityList.Wo>> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionPriorityList().execute( request, effectivePerson );
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "创建或者更新一个优先级信息.", action = ActionPrioritySave.class)
@POST
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void prioritySave(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("需要保存的优先级信息") JsonElement jsonElement ) {
ActionResult<ActionPrioritySave.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionPrioritySave().execute(request, effectivePerson, jsonElement);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "根据标识删除优先级信息.", action = ActionPriorityDelete.class)
@DELETE
@Path("priority/{id}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void priorityDelete(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("标识") @PathParam("id") String id ) {
ActionResult<ActionPriorityDelete.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionPriorityDelete().execute(request, effectivePerson, id);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "根据ID查询项目配置信息.", action = ActionProjectConfigGet.class)
@GET
@Path("projectConfig/{id}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void projectConfigGet(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("项目配置ID") @PathParam("id") String id ) {
ActionResult<ActionProjectConfigGet.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionProjectConfigGet().execute( request, effectivePerson, id );
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "创建或者更新一个项目配置信息.", action = ActionProjectConfigSave.class)
@POST
@Path("projectConfig")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void projectConfigSave(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("需要保存的优先级信息") JsonElement jsonElement ) {
ActionResult<ActionProjectConfigSave.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionProjectConfigSave().execute(request, effectivePerson, jsonElement);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "根据标识删除项目配置信息.", action = ActionProjectConfigDelete.class)
@DELETE
@Path("projectConfig/{id}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void projectConfigDelete(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("标识") @PathParam("id") String id ) {
ActionResult<ActionProjectConfigDelete.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionProjectConfigDelete().execute(request, effectivePerson, id);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "列示项目配置信息,下一页.", action = ActionListProjectConfigNextWithFilter.class)
@PUT
@Path("listProjectConfig/{id}/next/{count}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void listProjectConfigNextWithFilter(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
@JaxrsParameterDescribe("最后一条信息数据的ID") @PathParam( "id" ) String id,
@JaxrsParameterDescribe("每页显示的条目数量") @PathParam( "count" ) Integer count,
@JaxrsParameterDescribe("查询过滤条件") JsonElement jsonElement ) {
ActionResult<List<ActionListProjectConfigNextWithFilter.Wo>> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionListProjectConfigNextWithFilter().execute(request, effectivePerson, id, count, jsonElement);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "根据ID查询项目配置信息.", action = ActionProjectConfigGetByProject.class)
@GET
@Path("projectConfig/project/{id}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void projectConfigGetByProject(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("项目ID") @PathParam("id") String id ) {
ActionResult<ActionProjectConfigGetByProject.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionProjectConfigGetByProject().execute( request, effectivePerson, id );
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "初始化优先级信息.", action = ActionInitConfig.class)
@GET
@Path("initConfig")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void initConfig(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request) {
ActionResult<ActionInitConfig.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionInitConfig().execute(request, effectivePerson);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.global;
import com.x.base.core.project.exception.PromptException;
class PriorityFlagForQueryEmptyException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
PriorityFlagForQueryEmptyException() {
super("查询的优先级信息ID为空,无法继续查询数据。" );
}
}
package com.x.teamwork.assemble.control.jaxrs.global;
import com.x.base.core.project.exception.PromptException;
class PriorityNotExistsException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
PriorityNotExistsException( String id ) {
super("指定ID的优先级信息不存在。ID:" + id );
}
}
package com.x.teamwork.assemble.control.jaxrs.global;
import com.x.base.core.project.exception.PromptException;
class PriorityPersistException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
PriorityPersistException( Throwable e ) {
super("系统在保存项目组信息时发生异常。" , e );
}
PriorityPersistException( Throwable e, String message ) {
super("系统在保存项目组信息时发生异常。Message:" + message, e );
}
PriorityPersistException( String message ) {
super("系统在保存项目组信息时发生异常。Message:" + message );
}
}
package com.x.teamwork.assemble.control.jaxrs.global;
import com.x.base.core.project.exception.PromptException;
class PriorityQueryException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
PriorityQueryException( Throwable e ) {
super("系统在查询优先级信息时发生异常。" , e );
}
PriorityQueryException( Throwable e, String message ) {
super("系统在查询优先级信息时发生异常。Message:" + message, e );
}
}
package com.x.teamwork.assemble.control.jaxrs.global;
import com.x.base.core.project.exception.PromptException;
class ProjectConfigFlagForQueryEmptyException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
ProjectConfigFlagForQueryEmptyException() {
super("查询的项目配置信息ID为空,无法继续查询数据。" );
}
}
package com.x.teamwork.assemble.control.jaxrs.global;
import com.x.base.core.project.exception.PromptException;
class ProjectConfigNotExistsException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
ProjectConfigNotExistsException( String id ) {
super("指定ID的项目配置信息不存在。ID:" + id );
}
}
package com.x.teamwork.assemble.control.jaxrs.global;
import com.x.base.core.project.exception.PromptException;
class ProjectConfigPersistException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
ProjectConfigPersistException( Throwable e ) {
super("系统在保存项目配置信息时发生异常。" , e );
}
ProjectConfigPersistException( Throwable e, String message ) {
super("系统在保存项目配置信息时发生异常。Message:" + message, e );
}
ProjectConfigPersistException( String message ) {
super("系统在保存项目配置信息时发生异常。Message:" + message );
}
}
package com.x.teamwork.assemble.control.jaxrs.global;
import com.x.base.core.project.exception.PromptException;
class ProjectConfigQueryException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
ProjectConfigQueryException( Throwable e ) {
super("系统在查询项目配置信息时发生异常。" , e );
}
ProjectConfigQueryException( Throwable e, String message ) {
super("系统在查询项目配置信息时发生异常。Message:" + message, e );
}
}
package com.x.teamwork.assemble.control.jaxrs.global;
import javax.persistence.Column;
import org.apache.commons.lang3.StringUtils;
import org.apache.openjpa.persistence.jdbc.Index;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
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 WrapInQueryProjectConfig {
@FieldDescribe("用于排列的属性,非必填,默认为createTime.")
private String orderField = "createTime";
@FieldDescribe("排序方式:DESC | ASC,非必填, 默认为DESC.")
private String orderType = "DESC";
@FieldDescribe("项目ID.")
private String project=null;
@FieldDescribe("新建任务:true|false.")
private String taskCreate = null;
@FieldDescribe("复制任务:true|false.")
private String taskCopy = null;
@FieldDescribe("删除任务:true|false.")
private String taskRemove = null;
@FieldDescribe("新建泳道:true|false.")
private String laneCreate = null;
@FieldDescribe("编辑泳道:true|false.")
private String laneEdit = null;
@FieldDescribe("删除泳道:true|false.")
private String laneRemove = null;
@FieldDescribe("上传附件:true|false.")
private String attachmentUpload = null;
@FieldDescribe("允许评论:true|false.")
private String comment = null;
private Long rank = 0L;
public String getProject() {
return project;
}
public void setProject(String project) {
this.project = project;
}
public String getTaskCreate() {
return taskCreate;
}
public void setTaskCreate(String taskCreate) {
this.taskCreate = taskCreate;
}
public String getTaskCopy() {
return taskCopy;
}
public void setTaskCopy(String taskCopy) {
this.taskCopy = taskCopy;
}
public String getTaskRemove() {
return taskRemove;
}
public void setTaskRemove(String taskRemove) {
this.taskRemove = taskRemove;
}
public String getLaneCreate() {
return laneCreate;
}
public void setLaneCreate(String laneCreate) {
this.laneCreate = laneCreate;
}
public String getLaneEdit() {
return laneEdit;
}
public void setLaneEdit(String laneEdit) {
this.laneEdit = laneEdit;
}
public String getLaneRemove() {
return laneRemove;
}
public void setLaneRemove(String laneRemove) {
this.laneRemove = laneRemove;
}
public String getAttachmentUpload() {
return attachmentUpload;
}
public void setAttachmentUpload(String attachmentUpload) {
this.attachmentUpload = attachmentUpload;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
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 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.getProject())) {
queryFilter.addEqualsTerm( new EqualsTerm( "project", this.getProject() ) );
}
if( StringUtils.isNotEmpty( this.getTaskCreate() )) {
if("true".equalsIgnoreCase( this.getTaskCreate() )) {
queryFilter.addEqualsTerm( new EqualsTerm( "taskCreate", true ) );
}else{
queryFilter.addEqualsTerm( new EqualsTerm( "taskCreate", false ) );
}
}
if( StringUtils.isNotEmpty( this.getTaskCopy() )) {
if("true".equalsIgnoreCase( this.getTaskCopy() )) {
queryFilter.addEqualsTerm( new EqualsTerm( "taskCopy", true ) );
}else{
queryFilter.addEqualsTerm( new EqualsTerm( "taskCopy", false ) );
}
}
if( StringUtils.isNotEmpty( this.getTaskRemove() )) {
if("true".equalsIgnoreCase( this.getTaskRemove() )) {
queryFilter.addEqualsTerm( new EqualsTerm( "taskRemove", true ) );
}else{
queryFilter.addEqualsTerm( new EqualsTerm( "taskRemove", false ) );
}
}
if( StringUtils.isNotEmpty( this.getLaneCreate() )) {
if("true".equalsIgnoreCase( this.getLaneCreate() )) {
queryFilter.addEqualsTerm( new EqualsTerm( "laneCreate", true ) );
}else{
queryFilter.addEqualsTerm( new EqualsTerm( "laneCreate", false ) );
}
}
if( StringUtils.isNotEmpty( this.getLaneEdit() )) {
if("true".equalsIgnoreCase( this.getLaneEdit() )) {
queryFilter.addEqualsTerm( new EqualsTerm( "laneEdit", true ) );
}else{
queryFilter.addEqualsTerm( new EqualsTerm( "laneEdit", false ) );
}
}
if( StringUtils.isNotEmpty( this.getLaneRemove() )) {
if("true".equalsIgnoreCase( this.getLaneRemove() )) {
queryFilter.addEqualsTerm( new EqualsTerm( "laneRemove", true ) );
}else{
queryFilter.addEqualsTerm( new EqualsTerm( "laneRemove", false ) );
}
}
if( StringUtils.isNotEmpty( this.getAttachmentUpload() )) {
if("true".equalsIgnoreCase( this.getAttachmentUpload() )) {
queryFilter.addEqualsTerm( new EqualsTerm( "attachmentUpload", true ) );
}else{
queryFilter.addEqualsTerm( new EqualsTerm( "attachmentUpload", false ) );
}
}
if( StringUtils.isNotEmpty( this.getComment() )) {
if("true".equalsIgnoreCase( this.getComment() )) {
queryFilter.addEqualsTerm( new EqualsTerm( "comment", true ) );
}else{
queryFilter.addEqualsTerm( new EqualsTerm( "comment", false ) );
}
}
return queryFilter;
}
}
package com.x.teamwork.assemble.control.jaxrs.list;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
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.WrapCopierFactory;
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.core.entity.Project;
import com.x.teamwork.core.entity.TaskList;
public class ActionListWithTaskGroup extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionListWithTaskGroup.class);
@SuppressWarnings("unchecked")
protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson, String taskGroupId ) throws Exception {
ActionResult<List<Wo>> result = new ActionResult<>();
List<Wo> wos = null;
List<TaskList> taskLists = null;
Boolean check = true;
/*String cacheKey = ApplicationCache.concreteCacheKey( "list.my.taskgroup", taskGroupId, effectivePerson.getDistinguishedName() );
Element element = taskListCache.get( cacheKey );
if ((null != element) && (null != element.getObjectValue())) {
System.out.println("111");
wos = (List<Wo>) element.getObjectValue();
result.setData( wos );
} else {*/
if( Boolean.TRUE.equals( check ) ){
try {
taskLists = taskListQueryService.listWithTaskGroup( effectivePerson.getDistinguishedName(), taskGroupId );
if( ListTools.isNotEmpty( taskLists )) {
wos = Wo.copier.copy( taskLists );
if( ListTools.isNotEmpty( wos )) {
for( Wo wo : wos ) {
//计算当前List里的任务数量
wo.setTaskCount(taskListQueryService.countTaskWithTaskListId( effectivePerson.getDistinguishedName(), wo.getId(), wo.getTaskGroup() ));
if( "NoneList".equalsIgnoreCase( wo.getMemo() )) {
wo.setControl( new Control(false, false, false, false ));
}else {
wo.setControl( new Control(true, true, true, true ));
}
Project project = null;
project = projectQueryService.get(wo.getProject());
if(project != null && (project.getDeleted() || project.getCompleted())){
wo.setControl( new Control(false, false, false, false ));
}
}
}
//taskListCache.put(new Element(cacheKey, wos));
result.setData(wos);
}
} catch (Exception e) {
check = false;
Exception exception = new TaskListQueryException(e, "根据用户在指定工作任务组拥有的工作任务列表信息时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
//}
return result;
}
public static class Wo extends TaskList {
private Long rank;
@FieldDescribe("工作任务数量.")
private Long taskCount = 0L;
@FieldDescribe("工作任务列表操作权限.")
private Control control;
public Control getControl() {
return control;
}
public void setControl(Control control) {
this.control = control;
}
public Long getRank() {
return rank;
}
public void setRank(Long rank) {
this.rank = rank;
}
public Long getTaskCount() {
return taskCount;
}
public void setTaskCount(Long taskCount) {
this.taskCount = taskCount;
}
private static final long serialVersionUID = -5076990764713538973L;
public static List<String> Excludes = new ArrayList<String>();
static WrapCopier<TaskList, Wo> copier = WrapCopierFactory.wo( TaskList.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
}
public static class Control{
private Boolean delete = false;
private Boolean edit = false;
private Boolean sortable = true;
private Boolean founder = false;
public Control( Boolean edit, Boolean delete, Boolean sortable, Boolean founder ) {
this.delete = delete;
this.edit = edit;
this.sortable = sortable;
this.founder = founder;
}
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;
}
}
}
\ No newline at end of file
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册