提交 6933f523 编写于 作者: L luojing

Merge branch 'feature/teamwork.view_add' into fix/teamwork_1024

# Conflicts:
#	o2server/x_console/src/main/java/com/x/server/console/server/application/ApplicationServerTools.java
......@@ -58,6 +58,9 @@ public class OrganizationDefinition {
public final static String CRMManager = "CRMManager";
public final static String CRMManager_discription = "CRM管理员(系统角色),可以进行CRM系统相关配置,对客户信息,商机等信息进行管理操作。";
public final static String TeamWorkManager = "TeamWorkManager";
public final static String TeamWorkManager_discription = "TeamWork管理员(系统角色),可以进行TeamWork系统相关配置,对项目,任务等信息进行管理操作。";
public final static String QueryManager = "QueryManager";
public final static String QueryManager_discription = "数据中心管理员(系统角色),可以在数据中心进行视图管理,统计管理等操作。";
......@@ -94,7 +97,7 @@ public class OrganizationDefinition {
public final static List<String> DEFAULTROLES = new UnmodifiableList<String>(ListTools.toList(Manager,
AttendanceManager, OrganizationManager, PersonManager, GroupManager, UnitManager, RoleManager,
ProcessPlatformManager, ProcessPlatformCreator, MeetingManager, MeetingViewer, PortalManager, BBSManager,
CMSManager, OKRManager, CRMManager, QueryManager, MessageManager, HotPictureManager, SearchPrivilege));
CMSManager, OKRManager, CRMManager,TeamWorkManager, QueryManager, MessageManager, HotPictureManager, SearchPrivilege));
public static String name(String distinguishedName) {
if (StringUtils.contains(distinguishedName, "@")) {
......
package com.x.base.core.project;
import com.x.base.core.project.annotation.Module;
import com.x.base.core.project.annotation.ModuleCategory;
import com.x.base.core.project.annotation.ModuleType;
@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "工作任务管理", packageName = "com.x.teamwork.assemble.control",
containerEntities = {
"com.x.teamwork.core.entity.Project", "com.x.teamwork.core.entity.ProjectDetail",
"com.x.teamwork.core.entity.ProjectExtFieldRele", "com.x.teamwork.core.entity.ProjectGroup",
"com.x.teamwork.core.entity.ProjectTemplate","com.x.teamwork.core.entity.TaskListTemplate",
"com.x.teamwork.core.entity.ProjectGroupRele", "com.x.teamwork.core.entity.Task",
"com.x.teamwork.core.entity.TaskGroup", "com.x.teamwork.core.entity.TaskGroupRele",
"com.x.teamwork.core.entity.TaskDetail", "com.x.teamwork.core.entity.TaskExtField", "com.x.teamwork.core.entity.TaskList",
"com.x.teamwork.core.entity.TaskListRele", "com.x.teamwork.core.entity.TaskRelevance",
"com.x.teamwork.core.entity.TaskView", "com.x.teamwork.core.entity.SystemConfig",
"com.x.teamwork.core.entity.SystemConfigLobValue", "com.x.teamwork.core.entity.Review",
"com.x.teamwork.core.entity.BatchOperation", "com.x.teamwork.core.entity.TaskTag",
"com.x.teamwork.core.entity.TaskTagRele", "com.x.teamwork.core.entity.Attachment",
"com.x.teamwork.core.entity.Chat", "com.x.teamwork.core.entity.ChatContent",
"com.x.teamwork.core.entity.Dynamic", "com.x.teamwork.core.entity.DynamicDetail" }, storeJars = { "x_organization_core_entity",
"x_organization_core_express", "x_teamwork_core_entity" })
public class x_teamwork_assemble_control extends Deployable {
}
package com.x.base.core.project;
import com.x.base.core.project.annotation.Module;
import com.x.base.core.project.annotation.ModuleCategory;
import com.x.base.core.project.annotation.ModuleType;
@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "工作任务管理", packageName = "com.x.teamwork.core.entity")
public class x_teamwork_core_entity extends Compilable {
}
......@@ -60,12 +60,12 @@ import com.x.base.core.project.x_processplatform_service_processing;
import com.x.base.core.project.x_query_assemble_designer;
import com.x.base.core.project.x_query_assemble_surface;
import com.x.base.core.project.x_query_service_processing;
import com.x.base.core.project.x_teamwork_assemble_control;
import com.x.base.core.project.annotation.Module;
import com.x.base.core.project.annotation.ModuleCategory;
import com.x.base.core.project.annotation.ModuleType;
import com.x.base.core.project.config.ApplicationServer;
import com.x.base.core.project.config.Config;
import com.x.base.core.project.gson.XGsonBuilder;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.DefaultCharset;
......@@ -97,8 +97,8 @@ public class ApplicationServerTools extends JettySeverTools {
x_bbs_assemble_control.class.getName(), x_file_assemble_control.class.getName(),
x_meeting_assemble_control.class.getName(), x_mind_assemble_control.class.getName(),
x_okr_assemble_control.class.getName(), x_hotpic_assemble_control.class.getName(),
x_teamwork_assemble_control.class.getName(), x_query_service_processing.class.getName(),
x_query_assemble_designer.class.getName(), x_query_assemble_surface.class.getName());
x_query_service_processing.class.getName(), x_query_assemble_designer.class.getName(),
x_query_assemble_surface.class.getName());
public static Server start(ApplicationServer applicationServer) throws Exception {
......
......@@ -221,7 +221,7 @@ public class Context extends AbstractContext {
OrganizationDefinition.GroupManager, OrganizationDefinition.UnitManager,
OrganizationDefinition.RoleManager, OrganizationDefinition.ProcessPlatformManager,
OrganizationDefinition.ProcessPlatformCreator, OrganizationDefinition.MeetingManager,
OrganizationDefinition.PortalManager, OrganizationDefinition.BBSManager,
OrganizationDefinition.PortalManager, OrganizationDefinition.BBSManager,OrganizationDefinition.TeamWorkManager,
OrganizationDefinition.CMSManager, OrganizationDefinition.OKRManager, OrganizationDefinition.CRMManager,
OrganizationDefinition.QueryManager, OrganizationDefinition.MessageManager,
OrganizationDefinition.SearchPrivilege, OrganizationDefinition.HotPictureManager);
......@@ -290,7 +290,9 @@ public class Context extends AbstractContext {
return OrganizationDefinition.OKRManager_discription;
} else if (OrganizationDefinition.CRMManager.equalsIgnoreCase(str)) {
return OrganizationDefinition.CRMManager_discription;
} else if (OrganizationDefinition.QueryManager.equalsIgnoreCase(str)) {
}else if (OrganizationDefinition.TeamWorkManager.equalsIgnoreCase(str)) {
return OrganizationDefinition.TeamWorkManager_discription;
}else if (OrganizationDefinition.QueryManager.equalsIgnoreCase(str)) {
return OrganizationDefinition.QueryManager_discription;
} else if (OrganizationDefinition.MessageManager.equalsIgnoreCase(str)) {
return OrganizationDefinition.MessageManager_discription;
......
package com.x.program.center.jaxrs.command;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import com.hankcs.hanlp.corpus.io.IOUtil;
import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.config.Config;
import com.x.base.core.project.config.Nodes;
import com.x.base.core.project.gson.GsonPropertyObject;
import com.x.base.core.project.gson.XGsonBuilder;
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.Crypto;
public class ActionUploadFile extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(CommandAction.class);
ActionResult<Wo> execute(HttpServletRequest request ,EffectivePerson effectivePerson, String ctl, String nodeName , String nodePort, InputStream fileInputStream, FormDataContentDisposition disposition) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Wo wo = null;
String curServer = request.getLocalAddr();
ByteArrayInputStream byteArrayInputStream = null;
byte[] byteArray = IOUtil.readBytesFromOtherInputStream(fileInputStream);
fileInputStream.close();
if(nodeName.equalsIgnoreCase("*")) {
Nodes nodes = Config.nodes();
logger.info("先其他服务器");
for (String node : nodes.keySet()){
//先其他服务器
if(!node.equalsIgnoreCase(curServer)) {
if(nodes.get(node).getApplication().getEnable() || nodes.get(node).getCenter().getEnable()){
byteArrayInputStream = new ByteArrayInputStream(byteArray);
logger.info("node="+node);
wo = executeCommand( ctl, node , nodes.get(node).nodeAgentPort(), byteArrayInputStream, disposition);
}
}
}
logger.info("后当前服务器");
for(String node : nodes.keySet()) {
//后当前服务器
if(node.equalsIgnoreCase(curServer)) {
if(nodes.get(curServer).getApplication().getEnable() || nodes.get(curServer).getCenter().getEnable()){
byteArrayInputStream = new ByteArrayInputStream(byteArray);
logger.info("node="+node);
wo = executeCommand( ctl, node , nodes.get(curServer).nodeAgentPort(), byteArrayInputStream, disposition);
}
}
}
}else {
byteArrayInputStream = new ByteArrayInputStream(byteArray);
wo = executeCommand( ctl, nodeName , Integer.parseInt(nodePort), byteArrayInputStream, disposition);
}
result.setData(wo);
return result;
}
synchronized private Wo executeCommand(String ctl , String nodeName ,int nodePort,InputStream fileInputStream, FormDataContentDisposition disposition) throws Exception{
Wo wo = new Wo();
wo.setNode(nodeName);
wo.setStatus("success");
try (Socket socket = new Socket(nodeName, nodePort)) {
socket.setKeepAlive(true);
socket.setSoTimeout(5000);
DataOutputStream dos = null;
DataInputStream dis = null;
try {
dos = new DataOutputStream(socket.getOutputStream());
dis = new DataInputStream(socket.getInputStream());
Map<String, Object> commandObject = new HashMap<>();
commandObject.put("command", "redeploy:"+ ctl);
commandObject.put("credential", Crypto.rsaEncrypt("o2@", Config.publicKey()));
dos.writeUTF(XGsonBuilder.toJson(commandObject));
dos.flush();
dos.writeUTF(disposition.getFileName());
dos.flush();
logger.info("发送文件starting.......");
byte[] bytes = new byte[1024];
int length =0;
while((length = fileInputStream.read(bytes, 0, bytes.length)) != -1) {
dos.write(bytes, 0, length);
dos.flush();
}
logger.info("发送文件end.");
}finally {
dos.close();
dis.close();
socket.close();
fileInputStream.close();
}
} catch (Exception ex) {
wo.setStatus("fail");
}
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
wo.setTime(df.format(new Date()));
return wo;
}
public static class Wi extends GsonPropertyObject{
private String ctl;
private String nodeName;
private String nodePort;
public String getCtl() {
return ctl;
}
public void setCtl(String ctl) {
this.ctl = ctl;
}
public String getNodeName() {
return nodeName;
}
public void setNodeName(String nodeName) {
this.nodeName = nodeName;
}
public String getNodePort() {
return nodePort;
}
public void setNodePort(String nodePort) {
this.nodePort = nodePort;
}
}
public static class Wo extends GsonPropertyObject {
@FieldDescribe("执行时间")
private String time;
@FieldDescribe("执行结束")
private String status;
@FieldDescribe("执行服务器")
private String node;
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getNode() {
return node;
}
public void setNode(String node) {
this.node = node;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
}
package com.x.program.center.jaxrs.command;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import com.hankcs.hanlp.corpus.io.IOUtil;
import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.config.Config;
import com.x.base.core.project.config.Nodes;
import com.x.base.core.project.gson.GsonPropertyObject;
import com.x.base.core.project.gson.XGsonBuilder;
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.Crypto;
public class ActionUploadFile extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(CommandAction.class);
ActionResult<Wo> execute(HttpServletRequest request ,EffectivePerson effectivePerson, String ctl, String nodeName , String nodePort, InputStream fileInputStream, FormDataContentDisposition disposition) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Wo wo = null;
String curServer = request.getLocalAddr();
ByteArrayInputStream byteArrayInputStream = null;
byte[] byteArray = IOUtil.readBytesFromOtherInputStream(fileInputStream);
fileInputStream.close();
if(nodeName.equalsIgnoreCase("*")) {
Nodes nodes = Config.nodes();
logger.info("先其他服务器");
for (String node : nodes.keySet()){
//先其他服务器
if(!node.equalsIgnoreCase(curServer)) {
if(nodes.get(node).getApplication().getEnable() || nodes.get(node).getCenter().getEnable()){
byteArrayInputStream = new ByteArrayInputStream(byteArray);
logger.info("node="+node);
wo = executeCommand( ctl, node , nodes.get(node).nodeAgentPort(), byteArrayInputStream, disposition);
}
}
}
logger.info("后当前服务器");
for(String node : nodes.keySet()) {
//后当前服务器
if(node.equalsIgnoreCase(curServer)) {
if(nodes.get(curServer).getApplication().getEnable() || nodes.get(curServer).getCenter().getEnable()){
byteArrayInputStream = new ByteArrayInputStream(byteArray);
logger.info("node="+node);
wo = executeCommand( ctl, node , nodes.get(curServer).nodeAgentPort(), byteArrayInputStream, disposition);
}
}
}
}else {
byteArrayInputStream = new ByteArrayInputStream(byteArray);
wo = executeCommand( ctl, nodeName , Integer.parseInt(nodePort), byteArrayInputStream, disposition);
}
result.setData(wo);
return result;
}
synchronized private Wo executeCommand(String ctl , String nodeName ,int nodePort,InputStream fileInputStream, FormDataContentDisposition disposition) throws Exception{
Wo wo = new Wo();
wo.setNode(nodeName);
wo.setStatus("success");
try (Socket socket = new Socket(nodeName, nodePort)) {
socket.setKeepAlive(true);
socket.setSoTimeout(5000);
DataOutputStream dos = null;
DataInputStream dis = null;
try {
dos = new DataOutputStream(socket.getOutputStream());
dis = new DataInputStream(socket.getInputStream());
Map<String, Object> commandObject = new HashMap<>();
commandObject.put("command", "redeploy:"+ ctl);
commandObject.put("credential", Crypto.rsaEncrypt("o2@", Config.publicKey()));
dos.writeUTF(XGsonBuilder.toJson(commandObject));
dos.flush();
dos.writeUTF(disposition.getFileName());
dos.flush();
logger.info("发送文件starting.......");
byte[] bytes = new byte[1024];
int length =0;
while((length = fileInputStream.read(bytes, 0, bytes.length)) != -1) {
dos.write(bytes, 0, length);
dos.flush();
}
logger.info("发送文件end.");
}finally {
dos.close();
dis.close();
socket.close();
fileInputStream.close();
}
} catch (Exception ex) {
wo.setStatus("fail");
}
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
wo.setTime(df.format(new Date()));
return wo;
}
public static class Wi extends GsonPropertyObject{
private String ctl;
private String nodeName;
private String nodePort;
public String getCtl() {
return ctl;
}
public void setCtl(String ctl) {
this.ctl = ctl;
}
public String getNodeName() {
return nodeName;
}
public void setNodeName(String nodeName) {
this.nodeName = nodeName;
}
public String getNodePort() {
return nodePort;
}
public void setNodePort(String nodePort) {
this.nodePort = nodePort;
}
}
public static class Wo extends GsonPropertyObject {
@FieldDescribe("执行时间")
private String time;
@FieldDescribe("执行结束")
private String status;
@FieldDescribe("执行服务器")
private String node;
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getNode() {
return node;
}
public void setNode(String node) {
this.node = node;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
}
......@@ -111,7 +111,7 @@
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>../store</outputDirectory>
<outputDirectory>../../o2server/custom</outputDirectory>
<resources>
<resource>
<directory>target</directory>
......
......@@ -12,7 +12,9 @@ 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.ProjectExtFieldReleFactory;
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;
......@@ -52,11 +54,13 @@ public class Business {
private TaskGroupFactory taskGroupFactory;
private TaskGroupReleFactory taskGroupReleFactory;
private TaskViewFactory taskViewFactory;
private ProjectExtFieldReleFactory projectExtFieldReleFactory;
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) {
......@@ -118,11 +122,11 @@ public class Business {
* @return
* @throws Exception
*/
public ProjectExtFieldReleFactory projectExtFieldReleFactory() throws Exception {
if (null == this.projectExtFieldReleFactory) {
this.projectExtFieldReleFactory = new ProjectExtFieldReleFactory( this );
public CustomExtFieldReleFactory customExtFieldReleFactory() throws Exception {
if (null == this.customExtFieldReleFactory) {
this.customExtFieldReleFactory = new CustomExtFieldReleFactory( this );
}
return projectExtFieldReleFactory;
return customExtFieldReleFactory;
}
/**
......@@ -197,6 +201,30 @@ public class Business {
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
......
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.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.ProjectExtFieldRele;
import com.x.teamwork.core.entity.ProjectExtFieldRele_;
public class ProjectExtFieldReleFactory extends AbstractFactory {
public ProjectExtFieldReleFactory( Business business ) throws Exception {
super(business);
}
/**
* 获取指定Id的ProjectExtFieldRele实体信息对象
* @param id
* @return
* @throws Exception
*/
public ProjectExtFieldRele get( String id ) throws Exception {
return this.entityManagerContainer().find( id, ProjectExtFieldRele.class, ExceptionWhen.none );
}
/**
* 列示指定Id的ProjectExtFieldRele实体信息列表
* @param ids
* @return
* @throws Exception
*/
public List<ProjectExtFieldRele> list( List<String> ids ) throws Exception {
if( ids == null || ids.size() == 0 ){
return new ArrayList<ProjectExtFieldRele>();
}
EntityManager em = this.entityManagerContainer().get(ProjectExtFieldRele.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<ProjectExtFieldRele> cq = cb.createQuery(ProjectExtFieldRele.class);
Root<ProjectExtFieldRele> root = cq.from(ProjectExtFieldRele.class);
Predicate p = root.get(ProjectExtFieldRele_.id).in(ids);
cq.orderBy( cb.desc( root.get( ProjectExtFieldRele_.updateTime ) ) );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 根据项目ID列示项目扩展属性ID信息列表
* @param project
* @return
* @throws Exception
*/
public List<ProjectExtFieldRele> listFieldReleObjByProject( String project ) throws Exception {
if( StringUtils.isEmpty( project ) ){
throw new Exception("project can not be empty!");
}
EntityManager em = this.entityManagerContainer().get(ProjectExtFieldRele.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<ProjectExtFieldRele> cq = cb.createQuery(ProjectExtFieldRele.class);
Root<ProjectExtFieldRele> root = cq.from(ProjectExtFieldRele.class);
Predicate p = cb.equal( root.get(ProjectExtFieldRele_.projectId), project );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 根据项目ID列示项目扩展属性ID信息列表
* @param project
* @return
* @throws Exception
*/
public List<String> listFieldReleIdsByProject( String project ) throws Exception {
if( StringUtils.isEmpty( project ) ){
throw new Exception("project can not be empty!");
}
EntityManager em = this.entityManagerContainer().get(ProjectExtFieldRele.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<ProjectExtFieldRele> root = cq.from(ProjectExtFieldRele.class);
Predicate p = cb.equal( root.get(ProjectExtFieldRele_.projectId), project );
cq.select( root.get(ProjectExtFieldRele_.projectId) );
return em.createQuery(cq.where(p)).getResultList();
}
/**
* 根据扩展属性名以及项目ID获取一组关联信息
* @param fieldName
* @param project
* @return
* @throws Exception
*/
public List<ProjectExtFieldRele> listWithFieldNameAndProject( String fieldName, String project ) throws Exception {
if( StringUtils.isEmpty( fieldName ) ){
throw new Exception("fieldName can not be empty!");
}
if( StringUtils.isEmpty( project ) ){
throw new Exception("project can not be empty!");
}
EntityManager em = this.entityManagerContainer().get(ProjectExtFieldRele.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<ProjectExtFieldRele> cq = cb.createQuery(ProjectExtFieldRele.class);
Root<ProjectExtFieldRele> root = cq.from(ProjectExtFieldRele.class);
Predicate p = cb.equal( root.get(ProjectExtFieldRele_.extFieldName), fieldName );
p = cb.and( p, cb.equal( root.get(ProjectExtFieldRele_.projectId), project ));
return em.createQuery(cq.where(p)).getResultList();
}
}
......@@ -20,6 +20,8 @@ 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;
......@@ -158,6 +160,28 @@ public class ProjectFactory extends AbstractFactory {
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
......
......@@ -14,12 +14,15 @@ 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;
......@@ -173,44 +176,34 @@ public class ProjectTemplateFactory extends AbstractFactory {
* @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 );
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<Project> cq = cb.createQuery(Project.class);
Root<Project> root = cq.from(Project.class);
CriteriaQuery<ProjectTemplate> cq = cb.createQuery(ProjectTemplate.class);
Root<ProjectTemplate> root = cq.from(ProjectTemplate.class);
Predicate p_permission = null;
if( StringUtils.isNotEmpty( personName )) {
/*if( StringUtils.isNotEmpty( personName )) {
//可以管理的栏目,肯定可以发布信息
p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.participantPersonList )) );
p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.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 );
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( Project_.sequence ), sequenceFieldValue.toString() ));
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( Project_.sequence ), sequenceFieldValue.toString() ));
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, Project_.class, orderField, orderType );
Order orderWithField = CriteriaBuilderTools.getOrder( cb, root, ProjectTemplate_.class, orderField, orderType );
if( orderWithField != null ){
cq.orderBy( orderWithField );
}
......@@ -219,48 +212,67 @@ public class ProjectTemplateFactory extends AbstractFactory {
}
/**
* 根据条件查询所有符合条件的项目信息ID,项目信息不会很多 ,所以直接查询出来
* 根据条件查询所有符合条件的项目模板信息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 );
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<Project> root = cq.from(Project.class);
Root<ProjectTemplate> root = cq.from(ProjectTemplate.class);
Predicate p_permission = null;
if( StringUtils.isNotEmpty( personName )) {
/*if( StringUtils.isNotEmpty( personName )) {
//可以管理的栏目,肯定可以发布信息
p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.participantPersonList )) );
p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( ProjectTemplate_.participantPersonList )) );
p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.manageablePersonList )) );
p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.creatorPerson ), personName ) );
p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.executor ), personName ) );
}
if( ListTools.isNotEmpty( identityNames )) {
p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, root.get( Project_.participantIdentityList).in(identityNames));
}
if( ListTools.isNotEmpty( unitNames )) {
p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, root.get( Project_.participantUnitList).in(unitNames));
}
if( ListTools.isNotEmpty( groupNames )) {
p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, root.get( Project_.participantGroupList).in(groupNames));
}
p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( ProjectTemplate_.creatorPerson ), personName ) );
p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( ProjectTemplate_.executor ), personName ) );
}*/
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( Project_.class, cb, p_permission, root, queryFilter );
cq.distinct(true).select( root.get(Project_.id) );
Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( ProjectTemplate_.class, cb, p_permission, root, queryFilter );
cq.distinct(true).select( root.get(ProjectTemplate_.id) );
return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
}
/**
* 列示所有模板的分类信息
* @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();
}
}
......@@ -23,6 +23,7 @@ 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;
......@@ -54,14 +55,15 @@ public class TaskListTemplateFactory extends AbstractFactory {
* @throws Exception
*/
public List<TaskListTemplate> list( String id ) throws Exception {
if( StringUtils.isNotEmpty( id ) ){
if( StringUtils.isEmpty( id ) ){
return new ArrayList<TaskListTemplate>();
}
EntityManager em = this.entityManagerContainer().get(Project.class);
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_.id ), id );
Predicate p = cb.equal( root.get( TaskListTemplate_.projectTemplate ), id );
p = cb.and( p, cb.isFalse( root.get(TaskListTemplate_.deleted)));
cq.orderBy( cb.desc( root.get( TaskListTemplate_.updateTime ) ) );
return em.createQuery(cq.where(p)).getResultList();
}
......
......@@ -9,7 +9,8 @@ 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.ProjectExtFieldReleAction;
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;
......@@ -19,6 +20,7 @@ import com.x.teamwork.assemble.control.jaxrs.taskListTemplate.TaskListTemplateAc
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 {
......@@ -36,9 +38,11 @@ public class ActionApplication extends AbstractActionApplication {
this.classes.add( DynamicAction.class );
this.classes.add( ChatAction.class );
this.classes.add( SystemConfigAction.class );
this.classes.add( ProjectExtFieldReleAction.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;
}
......
......@@ -18,6 +18,7 @@ import com.x.base.core.project.jaxrs.ManagerUserJaxrsFilter;
"/jaxrs/task_list/*",
"/jaxrs/config/*",
"/jaxrs/extfield/*",
"/jaxrs/global/*",
"/jaxrs/dynamic/*"
}, asyncSupported = true)
public class JaxrsManagerUserFilter extends ManagerUserJaxrsFilter {
......
......@@ -76,6 +76,7 @@ public class ActionCreate extends BaseAction {
chat.setProjectId( task.getProject() );
chat.setProjectTitle( task.getProjectName() );
chat.setTaskTitle( task.getName() );
chat.setTarget(effectivePerson.getDistinguishedName());
}
} catch (Exception e) {
check = false;
......
......@@ -18,7 +18,7 @@ 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.ProjectExtFieldRele;
import com.x.teamwork.core.entity.CustomExtFieldRele;
public class ActionDelete extends BaseAction {
......@@ -26,27 +26,27 @@ public class ActionDelete extends BaseAction {
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String flag) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
ProjectExtFieldRele projectExtFieldRele = null;
CustomExtFieldRele customExtFieldRele = null;
Wo wo = new Wo();
Boolean check = true;
if ( StringUtils.isEmpty( flag ) ) {
check = false;
Exception exception = new ProjectExtFieldReleFlagForQueryEmptyException();
Exception exception = new CustomExtFieldReleFlagForQueryEmptyException();
result.error( exception );
}
if( Boolean.TRUE.equals( check ) ){
try {
projectExtFieldRele = projectExtFieldReleQueryService.get(flag);
if ( projectExtFieldRele == null) {
customExtFieldRele = customExtFieldReleQueryService.get(flag);
if ( customExtFieldRele == null) {
check = false;
Exception exception = new ProjectExtFieldReleNotExistsException(flag);
Exception exception = new CustomExtFieldReleNotExistsException(flag);
result.error( exception );
}
} catch (Exception e) {
check = false;
Exception exception = new ProjectExtFieldReleQueryException(e, "根据指定flag查询项目扩展属性关联信息对象时发生异常。flag:" + flag);
Exception exception = new CustomExtFieldReleQueryException(e, "根据指定flag查询扩展属性关联信息对象时发生异常。flag:" + flag);
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
......@@ -54,23 +54,23 @@ public class ActionDelete extends BaseAction {
if( Boolean.TRUE.equals( check ) ){
try {
projectExtFieldRelePersistService.delete(flag, effectivePerson );
customExtFieldRelePersistService.delete(flag, effectivePerson );
// 更新缓存
ApplicationCache.notify( ProjectExtFieldRele.class );
ApplicationCache.notify( CustomExtFieldRele.class );
wo.setId( projectExtFieldRele.getId() );
wo.setId( customExtFieldRele.getId() );
} catch (Exception e) {
check = false;
Exception exception = new ProjectExtFieldReleQueryException(e, "根据指定flag删除项目扩展属性关联信息对象时发生异常。flag:" + flag);
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( projectExtFieldRele, effectivePerson);
Dynamic dynamic = dynamicPersistService.projectExtFieldReleDeleteDynamic( customExtFieldRele, effectivePerson);
if( dynamic != null ) {
List<WoDynamic> dynamics = new ArrayList<>();
dynamics.add( WoDynamic.copier.copy( dynamic ) );
......
......@@ -16,7 +16,7 @@ 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.ProjectExtFieldRele;
import com.x.teamwork.core.entity.CustomExtFieldRele;
import net.sf.ehcache.Element;
......@@ -27,17 +27,17 @@ public class ActionGet extends BaseAction {
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String id) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Wo wo = null;
ProjectExtFieldRele projectExtFieldRele = null;
CustomExtFieldRele customExtFieldRele = null;
Boolean check = true;
if ( StringUtils.isEmpty( id ) ) {
check = false;
Exception exception = new ProjectExtFieldReleFlagForQueryEmptyException();
Exception exception = new CustomExtFieldReleFlagForQueryEmptyException();
result.error( exception );
}
String cacheKey = ApplicationCache.concreteCacheKey( "ProjectExtFieldRele.Get." + id );
Element element = projectExtFieldReleCache.get( cacheKey );
String cacheKey = ApplicationCache.concreteCacheKey( "CustomExtFieldRele.Get." + id );
Element element = customExtFieldReleCache.get( cacheKey );
if ((null != element) && (null != element.getObjectValue())) {
wo = (Wo) element.getObjectValue();
......@@ -45,15 +45,15 @@ public class ActionGet extends BaseAction {
} else {
if( Boolean.TRUE.equals( check ) ){
try {
projectExtFieldRele = projectExtFieldReleQueryService.get(id);
if ( projectExtFieldRele == null) {
customExtFieldRele = customExtFieldReleQueryService.get(id);
if ( customExtFieldRele == null) {
check = false;
Exception exception = new ProjectExtFieldReleNotExistsException(id);
Exception exception = new CustomExtFieldReleNotExistsException(id);
result.error( exception );
}
} catch (Exception e) {
check = false;
Exception exception = new ProjectExtFieldReleQueryException( e, "根据指定id查询扩展属性关联信息对象时发生异常。flag:" + id );
Exception exception = new CustomExtFieldReleQueryException( e, "根据指定id查询扩展属性关联信息对象时发生异常。flag:" + id );
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
......@@ -61,9 +61,9 @@ public class ActionGet extends BaseAction {
if( Boolean.TRUE.equals( check ) ){
try {
wo = Wo.copier.copy( projectExtFieldRele );
wo = Wo.copier.copy( customExtFieldRele );
} catch (Exception e) {
Exception exception = new ProjectExtFieldReleQueryException(e, "将查询出来的扩展属性关联信息对象转换为可输出的数据信息时发生异常。");
Exception exception = new CustomExtFieldReleQueryException(e, "将查询出来的扩展属性关联信息对象转换为可输出的数据信息时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
......@@ -73,13 +73,13 @@ public class ActionGet extends BaseAction {
return result;
}
public static class Wo extends ProjectExtFieldRele {
public static class Wo extends CustomExtFieldRele {
private static final long serialVersionUID = -5076990764713538973L;
public static List<String> Excludes = new ArrayList<String>();
static WrapCopier<ProjectExtFieldRele, Wo> copier = WrapCopierFactory.wo( ProjectExtFieldRele.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
static WrapCopier<CustomExtFieldRele, Wo> copier = WrapCopierFactory.wo( CustomExtFieldRele.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
}
}
\ No newline at end of file
......@@ -9,21 +9,23 @@ 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 projectId, String fieldType ) throws Exception {
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( projectId )) {
if( StringUtils.isEmpty( correlationId )) {
check = false;
Exception exception = new ProjectFlagForQueryEmptyException();
Exception exception = new CustomExtFieldReleFlagForQueryEmptyException();
result.error( exception );
}
}
......@@ -34,28 +36,28 @@ public class ActionGetNextUseableExtFieldName extends BaseAction {
}
}
if( Boolean.TRUE.equals( check ) ){
/*if( Boolean.TRUE.equals( check ) ){
try {
project = projectQueryService.get( projectId );
project = projectQueryService.get( correlationId );
if ( project == null) {
check = false;
Exception exception = new ProjectNotExistsException( projectId );
Exception exception = new ProjectNotExistsException( correlationId );
result.error( exception );
}
} catch (Exception e) {
check = false;
Exception exception = new ProjectExtFieldRelePersistException(e, "根据指定flag查询应用项目信息对象时发生异常。flag:" + projectId );
Exception exception = new CustomExtFieldRelePersistException(e, "根据指定flag查询应用项目信息对象时发生异常。flag:" + correlationId );
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
}*/
if( Boolean.TRUE.equals( check ) ){
String fieldName = projectExtFieldReleQueryService.getNextUseableExtFieldName( projectId, fieldType );
String fieldName = customExtFieldReleQueryService.getNextUseableExtFieldName( correlationId, fieldType );
if( StringUtils.isNotEmpty( fieldName )) {
wo.setFieldName(fieldName);
}else {
Exception exception = new ProjectExtFieldReleQueryException( "当前项目无可用扩展属性。" );
Exception exception = new CustomExtFieldReleQueryException( "当前关联ID无可用扩展属性。" );
result.error(exception);
}
}
......
......@@ -7,7 +7,7 @@ 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.ProjectExtField;
import com.x.teamwork.core.entity.tools.CustomExtField;
public class ActionListAllExtFields extends BaseAction {
......@@ -20,7 +20,7 @@ public class ActionListAllExtFields extends BaseAction {
public static class Wo {
private List<FieldInfo> fieldInfos = ProjectExtField.listAllExtField();
private List<FieldInfo> fieldInfos = CustomExtField.listAllExtField();
public List<FieldInfo> getFieldInfos() {
return fieldInfos;
......
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
......@@ -15,23 +15,23 @@ 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.ProjectExtFieldRele;
import com.x.teamwork.core.entity.CustomExtFieldRele;
import net.sf.ehcache.Element;
public class ActionListWithProject extends BaseAction {
public class ActionListWithType extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionListWithProject.class);
private static Logger logger = LoggerFactory.getLogger(ActionListWithType.class);
@SuppressWarnings("unchecked")
protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson, String projectId ) throws Exception {
protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson, String type ) throws Exception {
ActionResult<List<Wo>> result = new ActionResult<>();
List<Wo> wos = null;
List<ProjectExtFieldRele> projectExtFieldReles = null;
List<CustomExtFieldRele> customExtFieldReles = null;
Boolean check = true;
String cacheKey = ApplicationCache.concreteCacheKey( "ActionList", projectId, effectivePerson.getDistinguishedName() );
Element element = projectExtFieldReleCache.get( cacheKey );
String cacheKey = ApplicationCache.concreteCacheKey( "ActionListWithPublic", type, effectivePerson.getDistinguishedName() );
Element element = customExtFieldReleCache.get( cacheKey );
if ((null != element) && (null != element.getObjectValue())) {
wos = (List<Wo>) element.getObjectValue();
......@@ -39,17 +39,17 @@ public class ActionListWithProject extends BaseAction {
} else {
if( Boolean.TRUE.equals( check ) ){
try {
projectExtFieldReles = projectExtFieldReleQueryService.listReleWithProject(projectId);
if( ListTools.isEmpty( projectExtFieldReles )) {
projectExtFieldReles = new ArrayList<>();
customExtFieldReles = customExtFieldReleQueryService.listReleWithType(type);
if( ListTools.isEmpty( customExtFieldReles )) {
customExtFieldReles = new ArrayList<>();
}
wos = Wo.copier.copy( projectExtFieldReles );
wos = Wo.copier.copy( customExtFieldReles );
SortTools.asc( wos, "createTime");
projectExtFieldReleCache.put(new Element(cacheKey, wos));
customExtFieldReleCache.put(new Element(cacheKey, wos));
result.setData(wos);
} catch (Exception e) {
check = false;
Exception exception = new ProjectExtFieldReleQueryException(e, "根据用户拥有的项目扩展属性关联信息列表时发生异常。");
Exception exception = new CustomExtFieldReleQueryException(e, "根据关联ID查询对应的扩展属性信息列表时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
......@@ -58,7 +58,7 @@ public class ActionListWithProject extends BaseAction {
return result;
}
public static class Wo extends ProjectExtFieldRele {
public static class Wo extends CustomExtFieldRele {
private Long rank;
......@@ -74,7 +74,7 @@ public class ActionListWithProject extends BaseAction {
public static List<String> Excludes = new ArrayList<String>();
static WrapCopier<ProjectExtFieldRele, Wo> copier = WrapCopierFactory.wo( ProjectExtFieldRele.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
static WrapCopier<CustomExtFieldRele, Wo> copier = WrapCopierFactory.wo( CustomExtFieldRele.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
}
}
\ No newline at end of file
......@@ -20,7 +20,8 @@ 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.ProjectExtFieldRele;
import com.x.teamwork.core.entity.Task;
import com.x.teamwork.core.entity.CustomExtFieldRele;
public class ActionSave extends BaseAction {
......@@ -28,9 +29,10 @@ public class ActionSave extends BaseAction {
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, JsonElement jsonElement ) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
ProjectExtFieldRele projectExtFieldRele = null;
ProjectExtFieldRele projectExtFieldRele_old = null;
CustomExtFieldRele customExtFieldRele = null;
CustomExtFieldRele customExtFieldRele_old = null;
Project project = null;
Task task = null;
Wi wi = null;
Wo wo = new Wo();
String fieldName = null;
......@@ -38,45 +40,59 @@ public class ActionSave extends BaseAction {
try {
wi = this.convertToWrapIn( jsonElement, Wi.class );
projectExtFieldRele = Wi.copier.copy( wi );
customExtFieldRele = Wi.copier.copy( wi );
} catch (Exception e) {
check = false;
Exception exception = new ProjectExtFieldRelePersistException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
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( projectExtFieldRele.getProjectId() )) {
/*if( Boolean.TRUE.equals( check ) ){
if( StringUtils.isEmpty( customExtFieldRele.getProjectId() )) {
check = false;
Exception exception = new ProjectFlagForQueryEmptyException();
result.error( exception );
}
}
}*/
if( Boolean.TRUE.equals( check ) ){
try {
project = projectQueryService.get( projectExtFieldRele.getProjectId() );
if ( project == null) {
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 ProjectNotExistsException( projectExtFieldRele.getProjectId() );
result.error( exception );
Exception exception = new CustomExtFieldRelePersistException(e, "根据指定flag查询应用项目信息对象时发生异常。flag:" + customExtFieldRele.getCorrelationId() );
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
} catch (Exception e) {
check = false;
Exception exception = new ProjectExtFieldRelePersistException(e, "根据指定flag查询应用项目信息对象时发生异常。flag:" + projectExtFieldRele.getProjectId() );
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
if( StringUtils.isNotEmpty( projectExtFieldRele.getId() )) {
if( StringUtils.isNotEmpty( customExtFieldRele.getId() )) {
try {
projectExtFieldRele_old = projectExtFieldReleQueryService.get( projectExtFieldRele.getId() );
customExtFieldRele_old = customExtFieldReleQueryService.get( customExtFieldRele.getId() );
} catch (Exception e) {
check = false;
Exception exception = new ProjectExtFieldReleQueryException(e, "系统在根据ID查询指定的扩展属性关联信息时发生异常。ID:" + projectExtFieldRele.getId() );
Exception exception = new CustomExtFieldReleQueryException(e, "系统在根据ID查询指定的扩展属性关联信息时发生异常。ID:" + customExtFieldRele.getId() );
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
......@@ -84,51 +100,53 @@ public class ActionSave extends BaseAction {
}
if( Boolean.TRUE.equals( check ) ){
if( projectExtFieldRele_old == null ) { //新建
fieldName = projectExtFieldReleQueryService.getNextUseableExtFieldName( projectExtFieldRele.getProjectId(), projectExtFieldRele.getDisplayType() );
if( customExtFieldRele_old == null ) { //新建
fieldName = customExtFieldReleQueryService.getNextUseableExtFieldName( customExtFieldRele.getCorrelationId(), customExtFieldRele.getDisplayType() );
}else {
//判断是否属性在富文本和普通 文本之间发生了变换
if( ("RICHTEXT".equals( wi.getDisplayType() ) && !"RICHTEXT".equals( projectExtFieldRele_old.getDisplayType() ))
|| !"RICHTEXT".equals( wi.getDisplayType() ) && "RICHTEXT".equals( projectExtFieldRele_old.getDisplayType() ) ) {
if( (StringUtils.equals("RICHTEXT",wi.getDisplayType()) && !StringUtils.equals("RICHTEXT",customExtFieldRele_old.getDisplayType()))
|| !StringUtils.equals("RICHTEXT",wi.getDisplayType()) && StringUtils.equals("RICHTEXT",customExtFieldRele_old.getDisplayType())) {
//判断当前所需要的类型的备用属性是否足够
fieldName = projectExtFieldReleQueryService.getNextUseableExtFieldName( projectExtFieldRele.getProjectId(), projectExtFieldRele.getDisplayType() );
fieldName = customExtFieldReleQueryService.getNextUseableExtFieldName( customExtFieldRele.getCorrelationId(), customExtFieldRele.getDisplayType() );
}else {
fieldName = projectExtFieldRele_old.getExtFieldName();
fieldName = customExtFieldRele_old.getExtFieldName();
}
}
}
if( Boolean.TRUE.equals( check ) ){
if( StringUtils.isEmpty( fieldName )) {
//备用属性已经用完了,无法再添加新的属性
check = false;
Exception exception = new ProjectExtFieldRelePersistException( "扩展属性不足,系统无法为该项目分配["+ projectExtFieldRele.getDisplayType() +"]。" );
result.error(exception);
wo.setUseable(false);
/*Exception exception = new CustomExtFieldRelePersistException( "扩展属性不足(备用属性已用完),系统无法为该对象分配["+ customExtFieldRele.getDisplayType() +"]。" );
result.error(exception);*/
}else {
projectExtFieldRele.setExtFieldName( fieldName );
customExtFieldRele.setExtFieldName( fieldName );
}
}
if( Boolean.TRUE.equals( check ) ){
try {
projectExtFieldRele = projectExtFieldRelePersistService.save( projectExtFieldRele, effectivePerson );
customExtFieldRele = customExtFieldRelePersistService.save( customExtFieldRele, effectivePerson );
// 更新缓存
ApplicationCache.notify( ProjectExtFieldRele.class );
ApplicationCache.notify( CustomExtFieldRele.class );
wo.setId( projectExtFieldRele.getId() );
wo.setId( customExtFieldRele.getId() );
} catch (Exception e) {
check = false;
Exception exception = new ProjectExtFieldRelePersistException(e, "项目扩展属性关联信息保存时发生异常。");
Exception exception = new CustomExtFieldRelePersistException(e, "扩展属性关联信息保存时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
Dynamic dynamic = dynamicPersistService.projectExtFieldReleSaveDynamic(projectExtFieldRele_old, projectExtFieldRele, effectivePerson);
Dynamic dynamic = dynamicPersistService.projectExtFieldReleSaveDynamic(customExtFieldRele_old, customExtFieldRele, effectivePerson);
if( dynamic != null ) {
List<WoDynamic> dynamics = new ArrayList<>();
dynamics.add( WoDynamic.copier.copy( dynamic ) );
......@@ -148,23 +166,26 @@ public class ActionSave extends BaseAction {
@FieldDescribe("ID,为空时为新建")
private String id;
@FieldDescribe("项目ID(必填)")
private String projectId;
@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, ProjectExtFieldRele> copier = WrapCopierFactory.wi( Wi.class, ProjectExtFieldRele.class, null, null );
public static WrapCopier<Wi, CustomExtFieldRele> copier = WrapCopierFactory.wi( Wi.class, CustomExtFieldRele.class, null, null );
public String getDisplayType() {
return displayType;
......@@ -190,12 +211,12 @@ public class ActionSave extends BaseAction {
this.id = id;
}
public String getProjectId() {
return projectId;
public String getCorrelationId() {
return correlationId;
}
public void setProjectId(String projectId) {
this.projectId = projectId;
public void setCorrelationId(String correlationId) {
this.correlationId = correlationId;
}
public String getDisplayName() {
......@@ -205,6 +226,14 @@ public class ActionSave extends BaseAction {
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;
......@@ -219,6 +248,17 @@ public class ActionSave extends BaseAction {
@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;
......
......@@ -3,23 +3,25 @@ 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.ProjectExtFieldRelePersistService;
import com.x.teamwork.assemble.control.service.ProjectExtFieldReleQueryService;
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.core.entity.ProjectExtFieldRele;
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 projectExtFieldReleCache = ApplicationCache.instance().getCache( ProjectExtFieldRele.class );
protected Ehcache customExtFieldReleCache = ApplicationCache.instance().getCache( CustomExtFieldRele.class );
protected ProjectExtFieldReleQueryService projectExtFieldReleQueryService = new ProjectExtFieldReleQueryService();
protected CustomExtFieldReleQueryService customExtFieldReleQueryService = new CustomExtFieldReleQueryService();
protected ProjectExtFieldRelePersistService projectExtFieldRelePersistService = new ProjectExtFieldRelePersistService();
protected CustomExtFieldRelePersistService customExtFieldRelePersistService = new CustomExtFieldRelePersistService();
protected ProjectQueryService projectQueryService = new ProjectQueryService();
protected TaskQueryService taskQueryService = new TaskQueryService();
protected DynamicPersistService dynamicPersistService = new DynamicPersistService();
......
......@@ -28,12 +28,12 @@ import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
@Path("extfield")
@JaxrsDescribe("项目扩展属性关联信息管理")
public class ProjectExtFieldReleAction extends StandardJaxrsAction {
@JaxrsDescribe("扩展属性关联信息管理")
public class CustomExtFieldReleAction extends StandardJaxrsAction {
private Logger logger = LoggerFactory.getLogger(ProjectExtFieldReleAction.class);
private Logger logger = LoggerFactory.getLogger(CustomExtFieldReleAction.class);
@JaxrsMethodDescribe(value = "查询所有项目扩展属性信息.", action = ActionListAllExtFields.class)
@JaxrsMethodDescribe(value = "查询所有扩展属性信息.", action = ActionListAllExtFields.class)
@GET
@Path("list/fields/all")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
......@@ -51,7 +51,7 @@ public class ProjectExtFieldReleAction extends StandardJaxrsAction {
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "根据指定ID查询项目扩展属性关联信息.", action = ActionGet.class)
@JaxrsMethodDescribe(value = "根据指定ID查询扩展属性关联信息.", action = ActionGet.class)
@GET
@Path("rele/{id}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
......@@ -69,19 +69,19 @@ public class ProjectExtFieldReleAction extends StandardJaxrsAction {
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "根据项目ID,需要的扩展属性类别获取下一个可用的属性名称.", action = ActionGetNextUseableExtFieldName.class)
@JaxrsMethodDescribe(value = "根据关联ID,需要的扩展属性类别获取下一个可用的属性名称.", action = ActionGetNextUseableExtFieldName.class)
@GET
@Path("next/field/{projectId}/{fieldType}")
@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("projectId") String projectId,
@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, projectId, fieldType );
result = new ActionGetNextUseableExtFieldName().execute( request, effectivePerson, correlationId, fieldType );
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
......@@ -89,18 +89,18 @@ public class ProjectExtFieldReleAction extends StandardJaxrsAction {
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "查询用户创建的所有项目扩展属性关联信息列表.", action = ActionListWithProject.class)
@JaxrsMethodDescribe(value = "根据关联ID查询用户创建的所有扩展属性关联信息列表.", action = ActionListWithCorrelation.class)
@GET
@Path("list/{projectId}")
@Path("list/{correlationId}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void listFieldsWithProject(@Suspended final AsyncResponse asyncResponse,
public void listFieldsWithCorrelation(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("项目ID") @PathParam("projectId") String projectId ) {
ActionResult<List<ActionListWithProject.Wo>> result = new ActionResult<>();
@JaxrsParameterDescribe("关联ID") @PathParam("correlationId") String correlationId ) {
ActionResult<List<ActionListWithCorrelation.Wo>> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionListWithProject().execute( request, effectivePerson, projectId );
result = new ActionListWithCorrelation().execute( request, effectivePerson, correlationId );
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
......@@ -108,14 +108,33 @@ public class ProjectExtFieldReleAction extends StandardJaxrsAction {
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "创建或者更新一个项目扩展属性关联信息.", action = ActionSave.class)
@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 ) {
@JaxrsParameterDescribe("需要保存的扩展属性关联信息") JsonElement jsonElement ) {
ActionResult<ActionSave.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
......@@ -127,7 +146,7 @@ public class ProjectExtFieldReleAction extends StandardJaxrsAction {
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "根据标识删除项目扩展属性关联信息.", action = ActionDelete.class)
@JaxrsMethodDescribe(value = "根据标识删除扩展属性关联信息.", action = ActionDelete.class)
@DELETE
@Path("relevance/{id}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
......
......@@ -2,11 +2,11 @@ package com.x.teamwork.assemble.control.jaxrs.extfield;
import com.x.base.core.project.exception.PromptException;
class ProjectExtFieldReleFlagForQueryEmptyException extends PromptException {
class CustomExtFieldReleFlagForQueryEmptyException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
ProjectExtFieldReleFlagForQueryEmptyException() {
super("查询的项目扩展属性关联信息ID为空,无法继续查询数据。" );
CustomExtFieldReleFlagForQueryEmptyException() {
super("查询的扩展属性关联信息ID为空,无法继续查询数据。" );
}
}
......@@ -2,11 +2,11 @@ package com.x.teamwork.assemble.control.jaxrs.extfield;
import com.x.base.core.project.exception.PromptException;
class ProjectExtFieldReleNotExistsException extends PromptException {
class CustomExtFieldReleNotExistsException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
ProjectExtFieldReleNotExistsException( String id ) {
super("指定ID的项目扩展属性关联信息不存在。ID:" + id );
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 ProjectExtFieldRelePersistException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
ProjectExtFieldRelePersistException( Throwable e ) {
super("系统在保存项目扩展属性关联信息时发生异常。" , e );
}
ProjectExtFieldRelePersistException( Throwable e, String message ) {
super("系统在保存项目扩展属性关联信息时发生异常。Message:" + message, e );
}
ProjectExtFieldRelePersistException( String message ) {
super("系统在保存项目扩展属性关联信息时发生异常。Message:" + message );
}
}
package com.x.teamwork.assemble.control.jaxrs.extfield;
import com.x.base.core.project.exception.PromptException;
class ProjectExtFieldReleQueryException extends PromptException {
private static final long serialVersionUID = 1859164370743532895L;
ProjectExtFieldReleQueryException( Throwable e ) {
super("系统在查询项目扩展属性关联信息时发生异常。" , e );
}
ProjectExtFieldReleQueryException( Throwable e, String message ) {
super("系统在查询项目扩展属性关联信息时发生异常。Message:" + message, e );
}
ProjectExtFieldReleQueryException( 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;
}
}
......@@ -14,6 +14,7 @@ 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;
......@@ -32,7 +33,7 @@ public class ActionListWithTaskGroup extends BaseAction {
if ((null != element) && (null != element.getObjectValue())) {
System.out.println("111");
wos = (List<Wo>) element.getObjectValue();
wos = (List<Wo>) element.getObjectValue();
result.setData( wos );
} else {*/
if( Boolean.TRUE.equals( check ) ){
......@@ -49,6 +50,11 @@ public class ActionListWithTaskGroup extends BaseAction {
}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));
......
......@@ -3,6 +3,7 @@ package com.x.teamwork.assemble.control.jaxrs.list;
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.ProjectQueryService;
import com.x.teamwork.assemble.control.service.SystemConfigQueryService;
import com.x.teamwork.assemble.control.service.TaskGroupQueryService;
import com.x.teamwork.assemble.control.service.TaskListPersistService;
......@@ -31,4 +32,6 @@ public class BaseAction extends StandardJaxrsAction {
protected SystemConfigQueryService systemConfigQueryService = new SystemConfigQueryService();
protected ProjectQueryService projectQueryService = new ProjectQueryService();
}
package com.x.teamwork.assemble.control.jaxrs.project;
import javax.servlet.http.HttpServletRequest;
import com.google.gson.JsonElement;
import com.x.base.core.project.annotation.FieldDescribe;
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.Project;
public class ActionComplete extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionComplete.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String projectId, JsonElement jsonElement ) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Wi wi = null;
Project project = null;
Boolean check = true;
try {
wi = this.convertToWrapIn( jsonElement, Wi.class );
} catch (Exception e) {
check = false;
Exception exception = new ProjectPersistException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
if( Boolean.TRUE.equals( check ) ){
try {
project = projectQueryService.get( projectId );
if ( project == null) {
check = false;
Exception exception = new ProjectNotExistsException( projectId );
result.error( exception );
}
} catch (Exception e) {
check = false;
Exception exception = new ProjectQueryException(e, "根据指定flag查询应用项目信息对象时发生异常。ID:" + projectId );
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
projectPersistService.completeProject( projectId,wi.getCompleted());
// 更新缓存
ApplicationCache.notify( Project.class );
Wo wo = new Wo();
wo.setId( project.getId() );
result.setData( wo );
} catch (Exception e) {
check = false;
Exception exception = new ProjectPersistException(e, "项目状态信息更新时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
try {
dynamicPersistService.projectCompleteDynamic( project, effectivePerson ,wi.getCompleted());
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
}
}
return result;
}
public static class Wi {
@FieldDescribe("已完成/未完成")
private Boolean completed = true;
public Boolean getCompleted() {
return completed;
}
public void setCompleted(Boolean completed) {
this.completed = completed;
}
}
public static class Wo extends WoId {
}
}
\ No newline at end of file
package com.x.teamwork.assemble.control.jaxrs.project;
import javax.servlet.http.HttpServletRequest;
import com.google.gson.JsonElement;
import com.x.base.core.project.annotation.FieldDescribe;
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.Project;
public class ActionCreateable extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionCreateable.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String projectId, JsonElement jsonElement ) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Wi wi = null;
Project project = null;
Boolean check = true;
try {
wi = this.convertToWrapIn( jsonElement, Wi.class );
} catch (Exception e) {
check = false;
Exception exception = new ProjectPersistException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
if( Boolean.TRUE.equals( check ) ){
try {
project = projectQueryService.get( projectId );
if ( project == null) {
check = false;
Exception exception = new ProjectNotExistsException( projectId );
result.error( exception );
}
} catch (Exception e) {
check = false;
Exception exception = new ProjectQueryException(e, "根据指定flag查询应用项目信息对象时发生异常。ID:" + projectId );
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
projectPersistService.createableProject( projectId,wi.getCreateable());
// 更新缓存
ApplicationCache.notify( Project.class );
Wo wo = new Wo();
wo.setId( project.getId() );
result.setData( wo );
} catch (Exception e) {
check = false;
Exception exception = new ProjectPersistException(e, "项目状态信息更新时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
try {
dynamicPersistService.projectCreateableDynamic( project, effectivePerson ,wi.getCreateable());
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
}
}
return result;
}
public static class Wi {
@FieldDescribe("是否可新建任务")
private Boolean createable = true;
public Boolean getCreateable() {
return createable;
}
public void setCreateable(Boolean createable) {
this.createable = createable;
}
}
public static class Wo extends WoId {
}
}
\ No newline at end of file
......@@ -10,9 +10,9 @@ import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.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.logger.Logger;
......@@ -20,10 +20,11 @@ import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.ListTools;
import com.x.teamwork.assemble.control.Business;
import com.x.teamwork.core.entity.Project;
import com.x.teamwork.core.entity.ProjectConfig;
import com.x.teamwork.core.entity.ProjectDetail;
import com.x.teamwork.core.entity.ProjectGroup;
import com.x.teamwork.core.entity.Task;
import net.sf.ehcache.Element;
public class ActionGet extends BaseAction {
......@@ -36,8 +37,15 @@ public class ActionGet extends BaseAction {
ProjectDetail projectDetail = null;
List<String> groupIds = null;
List<ProjectGroup> groups = null;
List<Task> taskList = null;
List<ProjectConfig> projectConfigs = null;
WrapOutControl control = null;
Boolean check = true;
Integer taskTotal = 0;
Integer progressTotal = 0;
Integer completedTotal = 0;
Integer overtimeTotal = 0;
if ( StringUtils.isEmpty( flag ) ) {
check = false;
......@@ -45,13 +53,13 @@ public class ActionGet extends BaseAction {
result.error( exception );
}
String cacheKey = ApplicationCache.concreteCacheKey( flag );
/*String cacheKey = ApplicationCache.concreteCacheKey( flag,effectivePerson );
Element element = projectCache.get( cacheKey );
if ((null != element) && (null != element.getObjectValue())) {
wo = (Wo) element.getObjectValue();
result.setData( wo );
} else {
} else {*/
if( Boolean.TRUE.equals( check ) ){
try {
project = projectQueryService.get(flag);
......@@ -68,6 +76,25 @@ public class ActionGet extends BaseAction {
}
}
if( Boolean.TRUE.equals( check ) ){
taskList = projectQueryService.listAllTasks(flag , true);
if( ListTools.isNotEmpty( taskList )) {
for( Task task : taskList ) {
taskTotal ++;
if( "completed".equalsIgnoreCase(task.getWorkStatus()) ) {
completedTotal++;
}
if( "processing".equalsIgnoreCase(task.getWorkStatus()) ) {
progressTotal++;
}
if( task.getOvertime() ) {
overtimeTotal++;
}
}
}
}
if( Boolean.TRUE.equals( check ) ){
try {
wo = Wo.copier.copy( project );
......@@ -85,29 +112,56 @@ public class ActionGet extends BaseAction {
groups = projectGroupQueryService.list( groupIds );
wo.setGroups( groups );
//查询项目配置信息
projectConfigs = projectConfigQueryService.getProjectConfigByProject( project.getId() );
Business business = null;
try (EntityManagerContainer bc = EntityManagerContainerFactory.instance().create()) {
business = new Business(bc);
}
control = new WrapOutControl();
if(ListTools.isNotEmpty(projectConfigs)){
ProjectConfig projectConfig = projectConfigs.get(0);
control.setTaskCreate(projectConfig.getTaskCreate());
control.setTaskCopy(projectConfig.getTaskCopy());
control.setTaskRemove(projectConfig.getTaskRemove());
control.setLaneCreate(projectConfig.getLaneCreate());
control.setLaneEdit(projectConfig.getLaneEdit());
control.setLaneRemove(projectConfig.getLaneRemove());
control.setAttachmentUpload(projectConfig.getAttachmentUpload());
control.setComment(projectConfig.getComment());
}else{
control.setTaskCreate(true);
}
if( business.isManager(effectivePerson)
|| effectivePerson.getDistinguishedName().equalsIgnoreCase( project.getCreatorPerson() )
|| project.getManageablePersonList().contains( effectivePerson.getDistinguishedName() )) {
control.setDelete( true );
control.setEdit( true );
control.setSortable( true );
control.setTaskCreate(true);
}else{
control.setDelete( false );
control.setEdit( false );
control.setSortable( false );
}
if(project.getDeleted() || project.getCompleted()){
control.setTaskCreate(false);
}
if(effectivePerson.getDistinguishedName().equalsIgnoreCase( project.getCreatorPerson())){
control.setFounder( true );
}else{
control.setFounder( false );
}
wo.setControl(control);
projectCache.put(new Element(cacheKey, wo));
wo.setProgressTotal(progressTotal);
wo.setCompletedTotal(completedTotal);
wo.setOvertimeTotal(overtimeTotal);
wo.setTaskTotal(taskTotal);
result.setData(wo);
} catch (Exception e) {
Exception exception = new ProjectQueryException(e, "将查询出来的应用项目信息对象转换为可输出的数据信息时发生异常。");
......@@ -115,13 +169,58 @@ public class ActionGet extends BaseAction {
logger.error(e, effectivePerson, request, null);
}
}
}
//}
return result;
}
public static class Wo extends WrapOutProject {
private static final long serialVersionUID = -5076990764713538973L;
@FieldDescribe("所有任务数量")
private Integer taskTotal = 0;
@FieldDescribe("执行中任务数量")
private Integer progressTotal = 0;
@FieldDescribe("已完成任务数量")
private Integer completedTotal = 0;
@FieldDescribe("超时任务数量")
private Integer overtimeTotal = 0;
public Integer getTaskTotal() {
return taskTotal;
}
public void setTaskTotal(Integer taskTotal) {
this.taskTotal = taskTotal;
}
public Integer getProgressTotal() {
return progressTotal;
}
public void setProgressTotal(Integer progressTotal) {
this.progressTotal = progressTotal;
}
public Integer getCompletedTotal() {
return completedTotal;
}
public void setCompletedTotal( Integer completedTotal ) {
this.completedTotal = completedTotal;
}
public Integer getOvertimeTotal() {
return overtimeTotal;
}
public void setOvertimeTotal( Integer overtimeTotal ) {
this.overtimeTotal = overtimeTotal;
}
public static List<String> Excludes = new ArrayList<String>();
......
......@@ -37,8 +37,8 @@ public class ActionListArchiveNextWithFilter extends BaseAction {
List<Wo> wos = new ArrayList<>();
Wi wrapIn = null;
Boolean check = true;
String cacheKey = null;
Element element = null;
//String cacheKey = null;
//Element element = null;
QueryFilter queryFilter = null;
List<String> queryProjectIds = new ArrayList<>();
......@@ -77,7 +77,7 @@ public class ActionListArchiveNextWithFilter extends BaseAction {
}
if( Boolean.TRUE.equals( check ) ){
cacheKey = ApplicationCache.concreteCacheKey( "ActionListArchiveNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListArchiveNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
wrapIn.getOrderField(), wrapIn.getOrderType(), queryFilter.getContentSHA1() );
element = projectCache.get( cacheKey );
......@@ -85,7 +85,7 @@ public class ActionListArchiveNextWithFilter extends BaseAction {
resultObject = (ResultObject) element.getObjectValue();
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
} else {
} else {*/
try {
//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
List<String> projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
......@@ -129,7 +129,7 @@ public class ActionListArchiveNextWithFilter extends BaseAction {
}
}
resultObject = new ResultObject( total, wos );
projectCache.put(new Element( cacheKey, resultObject ));
//projectCache.put(new Element( cacheKey, resultObject ));
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
......@@ -140,7 +140,7 @@ public class ActionListArchiveNextWithFilter extends BaseAction {
result.error(e);
logger.error(e, effectivePerson, request, null);
}
}
//}
}
return result;
}
......
......@@ -37,8 +37,8 @@ public class ActionListCompletedNextWithFilter extends BaseAction {
List<Wo> wos = new ArrayList<>();
Wi wrapIn = null;
Boolean check = true;
String cacheKey = null;
Element element = null;
//String cacheKey = null;
//Element element = null;
QueryFilter queryFilter = null;
List<String> queryProjectIds = new ArrayList<>();
......@@ -77,7 +77,7 @@ public class ActionListCompletedNextWithFilter extends BaseAction {
}
if( Boolean.TRUE.equals( check ) ){
cacheKey = ApplicationCache.concreteCacheKey( "ActionListCompletedNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListCompletedNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
wrapIn.getOrderField(), wrapIn.getOrderType(), queryFilter.getContentSHA1() );
element = projectCache.get( cacheKey );
......@@ -85,7 +85,7 @@ public class ActionListCompletedNextWithFilter extends BaseAction {
resultObject = (ResultObject) element.getObjectValue();
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
} else {
} else {*/
try {
//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
List<String> projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
......@@ -129,7 +129,7 @@ public class ActionListCompletedNextWithFilter extends BaseAction {
}
}
resultObject = new ResultObject( total, wos );
projectCache.put(new Element( cacheKey, resultObject ));
//projectCache.put(new Element( cacheKey, resultObject ));
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
......@@ -140,7 +140,7 @@ public class ActionListCompletedNextWithFilter extends BaseAction {
result.error(e);
logger.error(e, effectivePerson, request, null);
}
}
//}
}
return result;
}
......
......@@ -37,8 +37,8 @@ public class ActionListMyNextWithFilter extends BaseAction {
List<Wo> wos = new ArrayList<>();
Wi wrapIn = null;
Boolean check = true;
String cacheKey = null;
Element element = null;
//String cacheKey = null;
//Element element = null;
QueryFilter queryFilter = null;
List<String> queryProjectIds = new ArrayList<>();
......@@ -77,7 +77,7 @@ public class ActionListMyNextWithFilter extends BaseAction {
}
if( Boolean.TRUE.equals( check ) ){
cacheKey = ApplicationCache.concreteCacheKey( "ActionListMyNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListMyNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
wrapIn.getOrderField(), wrapIn.getOrderType(), queryFilter.getContentSHA1() );
element = projectCache.get( cacheKey );
......@@ -85,7 +85,7 @@ public class ActionListMyNextWithFilter extends BaseAction {
resultObject = (ResultObject) element.getObjectValue();
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
} else {
} else {*/
try {
//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
List<String> projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
......@@ -129,7 +129,7 @@ public class ActionListMyNextWithFilter extends BaseAction {
}
}
resultObject = new ResultObject( total, wos );
projectCache.put(new Element( cacheKey, resultObject ));
//projectCache.put(new Element( cacheKey, resultObject ));
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
......@@ -140,7 +140,7 @@ public class ActionListMyNextWithFilter extends BaseAction {
result.error(e);
logger.error(e, effectivePerson, request, null);
}
}
//}
}
return result;
}
......
......@@ -36,8 +36,8 @@ public class ActionListNextInGroupWithFilter extends BaseAction {
List<Wo> wos = new ArrayList<>();
Wi wrapIn = null;
Boolean check = true;
String cacheKey = null;
Element element = null;
//String cacheKey = null;
//Element element = null;
QueryFilter queryFilter = null;
List<String> queryProjectIds = new ArrayList<>();
......@@ -71,7 +71,7 @@ public class ActionListNextInGroupWithFilter extends BaseAction {
}
if( Boolean.TRUE.equals( check ) ){
cacheKey = ApplicationCache.concreteCacheKey( "ActionListNextInGroupWithFilter", effectivePerson.getDistinguishedName(), flag, count,
/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListNextInGroupWithFilter", effectivePerson.getDistinguishedName(), flag, count,
wrapIn.getOrderField(), wrapIn.getOrderType(), queryFilter.getContentSHA1() );
element = projectCache.get( cacheKey );
......@@ -79,7 +79,7 @@ public class ActionListNextInGroupWithFilter extends BaseAction {
resultObject = (ResultObject) element.getObjectValue();
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
} else {
} else {*/
try {
//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
List<String> projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
......@@ -123,7 +123,7 @@ public class ActionListNextInGroupWithFilter extends BaseAction {
}
}
resultObject = new ResultObject( total, wos );
projectCache.put(new Element( cacheKey, resultObject ));
//projectCache.put(new Element( cacheKey, resultObject ));
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
......@@ -134,7 +134,7 @@ public class ActionListNextInGroupWithFilter extends BaseAction {
result.error(e);
logger.error(e, effectivePerson, request, null);
}
}
//}
}
return result;
}
......
......@@ -21,6 +21,7 @@ import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.ListTools;
import com.x.teamwork.assemble.control.Business;
import com.x.teamwork.core.entity.Project;
import com.x.teamwork.core.entity.ProjectConfig;
import com.x.teamwork.core.entity.tools.filter.QueryFilter;
import com.x.teamwork.core.entity.tools.filter.term.InTerm;
......@@ -74,7 +75,8 @@ public class ActionListNextWithFilter extends BaseAction {
}
if( Boolean.TRUE.equals( check ) ){
cacheKey = ApplicationCache.concreteCacheKey( "ActionListNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
/*采用缓存
* cacheKey = ApplicationCache.concreteCacheKey( "ActionListNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
wrapIn.getOrderField(), wrapIn.getOrderType(), queryFilter.getContentSHA1() );
element = projectCache.get( cacheKey );
......@@ -82,7 +84,7 @@ public class ActionListNextWithFilter extends BaseAction {
resultObject = (ResultObject) element.getObjectValue();
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
} else {
} else {*/
try {
//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
List<String> projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
......@@ -104,13 +106,34 @@ public class ActionListNextWithFilter extends BaseAction {
try (EntityManagerContainer bc = EntityManagerContainerFactory.instance().create()) {
business = new Business(bc);
}
//查询项目配置信息
List<ProjectConfig> projectConfigs = null;
projectConfigs = projectConfigQueryService.getProjectConfigByProject( project.getId() );
control = new WrapOutControl();
if(ListTools.isNotEmpty(projectConfigs)){
ProjectConfig projectConfig = projectConfigs.get(0);
control.setTaskCreate(projectConfig.getTaskCreate());
control.setTaskCopy(projectConfig.getTaskCopy());
control.setTaskRemove(projectConfig.getTaskRemove());
control.setLaneCreate(projectConfig.getLaneCreate());
control.setLaneEdit(projectConfig.getLaneEdit());
control.setLaneRemove(projectConfig.getLaneRemove());
control.setAttachmentUpload(projectConfig.getAttachmentUpload());
control.setComment(projectConfig.getComment());
}else{
control.setTaskCreate(true);
}
if( business.isManager(effectivePerson)
|| effectivePerson.getDistinguishedName().equalsIgnoreCase( project.getCreatorPerson() )
|| project.getManageablePersonList().contains( effectivePerson.getDistinguishedName() )) {
control.setDelete( true );
control.setEdit( true );
control.setSortable( true );
control.setTaskCreate(true);
}else{
control.setDelete( false );
control.setEdit( false );
......@@ -121,12 +144,15 @@ public class ActionListNextWithFilter extends BaseAction {
}else{
control.setFounder( false );
}
if(project.getDeleted() || project.getCompleted()){
control.setTaskCreate(false);
}
wo.setControl(control);
wos.add( wo );
}
}
resultObject = new ResultObject( total, wos );
projectCache.put(new Element( cacheKey, resultObject ));
//projectCache.put(new Element( cacheKey, resultObject ));
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
......@@ -137,7 +163,7 @@ public class ActionListNextWithFilter extends BaseAction {
result.error(e);
logger.error(e, effectivePerson, request, null);
}
}
//}
}
return result;
}
......
......@@ -37,8 +37,8 @@ public class ActionListNoGroupNextWithFilter extends BaseAction {
List<Wo> wos = new ArrayList<>();
Wi wrapIn = null;
Boolean check = true;
String cacheKey = null;
Element element = null;
//String cacheKey = null;
//Element element = null;
QueryFilter queryFilter = null;
List<String> queryProjectIds = new ArrayList<>();
......@@ -77,7 +77,7 @@ public class ActionListNoGroupNextWithFilter extends BaseAction {
}
if( Boolean.TRUE.equals( check ) ){
cacheKey = ApplicationCache.concreteCacheKey( "ActionListNoGroupNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListNoGroupNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
wrapIn.getOrderField(), wrapIn.getOrderType(), queryFilter.getContentSHA1() );
element = projectCache.get( cacheKey );
......@@ -85,7 +85,7 @@ public class ActionListNoGroupNextWithFilter extends BaseAction {
resultObject = (ResultObject) element.getObjectValue();
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
} else {
} else {*/
try {
//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
List<String> projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
......@@ -129,7 +129,7 @@ public class ActionListNoGroupNextWithFilter extends BaseAction {
}
}
resultObject = new ResultObject( total, wos );
projectCache.put(new Element( cacheKey, resultObject ));
//projectCache.put(new Element( cacheKey, resultObject ));
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
......@@ -140,7 +140,7 @@ public class ActionListNoGroupNextWithFilter extends BaseAction {
result.error(e);
logger.error(e, effectivePerson, request, null);
}
}
//}
}
return result;
}
......
......@@ -34,8 +34,8 @@ public class ActionListPageInGroupWithFilter extends BaseAction {
ResultObject resultObject = null;
Wi wrapIn = null;
Boolean check = true;
String cacheKey = null;
Element element = null;
//String cacheKey = null;
//Element element = null;
QueryFilter queryFilter = null;
List<String> queryProjectIds = new ArrayList<>();
......@@ -64,19 +64,19 @@ public class ActionListPageInGroupWithFilter extends BaseAction {
queryFilter.addInTerm( new InTerm("id", new ArrayList<Object>(queryProjectIds) ));
}
if( Boolean.TRUE.equals( check ) ){
/*if( Boolean.TRUE.equals( check ) ){
cacheKey = ApplicationCache.concreteCacheKey( "ActionListPageWithFilter", effectivePerson.getDistinguishedName(),
pageNum, count, wrapIn.getOrderField(), wrapIn.getOrderType(), queryFilter.getContentSHA1() );
element = projectCache.get( cacheKey );
}
}*/
if( Boolean.TRUE.equals( check ) ){
if ((null != element) && (null != element.getObjectValue())) {
/*if ((null != element) && (null != element.getObjectValue())) {
resultObject = (ResultObject) element.getObjectValue();
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
} else {
} else {*/
try {
//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
List<String> projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
......@@ -120,7 +120,7 @@ public class ActionListPageInGroupWithFilter extends BaseAction {
}
resultObject = new ResultObject( total, wos );
projectCache.put(new Element( cacheKey, resultObject ));
//projectCache.put(new Element( cacheKey, resultObject ));
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
}
......@@ -130,7 +130,7 @@ public class ActionListPageInGroupWithFilter extends BaseAction {
result.error(e);
logger.error(e, effectivePerson, request, null);
}
}
//}
}
return result;
}
......
......@@ -36,8 +36,8 @@ public class ActionListPageWithFilter extends BaseAction {
ResultObject resultObject = null;
Wi wrapIn = null;
Boolean check = true;
String cacheKey = null;
Element element = null;
//String cacheKey = null;
//Element element = null;
QueryFilter queryFilter = null;
List<String> queryProjectIds = new ArrayList<>();
......@@ -71,19 +71,19 @@ public class ActionListPageWithFilter extends BaseAction {
}
}
if( Boolean.TRUE.equals( check ) ){
/*if( Boolean.TRUE.equals( check ) ){
cacheKey = ApplicationCache.concreteCacheKey( "ActionListPageWithFilter", effectivePerson.getDistinguishedName(),
pageNum, count, wrapIn.getOrderField(), wrapIn.getOrderType(), queryFilter.getContentSHA1() );
element = projectCache.get( cacheKey );
}
}*/
if( Boolean.TRUE.equals( check ) ){
if ((null != element) && (null != element.getObjectValue())) {
/*if ((null != element) && (null != element.getObjectValue())) {
resultObject = (ResultObject) element.getObjectValue();
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
} else {
} else { */
try {
//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
List<String> projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
......@@ -127,7 +127,7 @@ public class ActionListPageWithFilter extends BaseAction {
}
resultObject = new ResultObject( total, wos );
projectCache.put(new Element( cacheKey, resultObject ));
//projectCache.put(new Element( cacheKey, resultObject ));
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
}
......@@ -137,7 +137,7 @@ public class ActionListPageWithFilter extends BaseAction {
result.error(e);
logger.error(e, effectivePerson, request, null);
}
}
//}
}
return result;
}
......
......@@ -32,8 +32,8 @@ public class ActionListRecycleNextWithFilter extends BaseAction {
List<Wo> wos = new ArrayList<>();
Wi wrapIn = null;
Boolean check = true;
String cacheKey = null;
Element element = null;
//String cacheKey = null;
//Element element = null;
QueryFilter queryFilter = null;
List<String> queryProjectIds = new ArrayList<>();
......@@ -73,7 +73,7 @@ public class ActionListRecycleNextWithFilter extends BaseAction {
}
if( Boolean.TRUE.equals( check ) ) {
cacheKey = ApplicationCache.concreteCacheKey( "ActionListRecycleNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListRecycleNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
wrapIn.getOrderField(), wrapIn.getOrderType(), queryFilter.getContentSHA1() );
element = projectCache.get( cacheKey );
......@@ -81,7 +81,7 @@ public class ActionListRecycleNextWithFilter extends BaseAction {
resultObject = (ResultObject) element.getObjectValue();
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
} else {
} else {*/
try {
//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
List<String> projectIds = projectQueryService.listAllProjectIds( effectivePerson, 2000, queryFilter );
......@@ -125,7 +125,7 @@ public class ActionListRecycleNextWithFilter extends BaseAction {
}
}
resultObject = new ResultObject( total, wos );
projectCache.put(new Element( cacheKey, resultObject ));
//projectCache.put(new Element( cacheKey, resultObject ));
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
......@@ -135,7 +135,7 @@ public class ActionListRecycleNextWithFilter extends BaseAction {
result.error(e);
logger.error(e, effectivePerson, request, null);
}
}
//}
}
return result;
}
......
......@@ -37,8 +37,8 @@ public class ActionListStarNextWithFilter extends BaseAction {
List<Wo> wos = new ArrayList<>();
Wi wrapIn = null;
Boolean check = true;
String cacheKey = null;
Element element = null;
//String cacheKey = null;
//Element element = null;
QueryFilter queryFilter = null;
List<String> queryProjectIds = new ArrayList<>();
......@@ -77,7 +77,7 @@ public class ActionListStarNextWithFilter extends BaseAction {
}
if( Boolean.TRUE.equals( check ) ){
cacheKey = ApplicationCache.concreteCacheKey( "ActionListStarNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListStarNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
wrapIn.getOrderField(), wrapIn.getOrderType(), queryFilter.getContentSHA1() );
element = projectCache.get( cacheKey );
......@@ -85,7 +85,7 @@ public class ActionListStarNextWithFilter extends BaseAction {
resultObject = (ResultObject) element.getObjectValue();
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
} else {
} else {*/
try {
//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
List<String> projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
......@@ -129,7 +129,7 @@ public class ActionListStarNextWithFilter extends BaseAction {
}
}
resultObject = new ResultObject( total, wos );
projectCache.put(new Element( cacheKey, resultObject ));
//projectCache.put(new Element( cacheKey, resultObject ));
result.setCount( resultObject.getTotal() );
result.setData( resultObject.getWos() );
......@@ -140,7 +140,7 @@ public class ActionListStarNextWithFilter extends BaseAction {
result.error(e);
logger.error(e, effectivePerson, request, null);
}
}
//}
}
return result;
}
......
package com.x.teamwork.assemble.control.jaxrs.project;
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.Project;
public class ActionRecovery extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionRecovery.class);
protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String projectId) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Project project = null;
Boolean check = true;
if ( StringUtils.isEmpty( projectId )) {
check = false;
Exception exception = new ProjectFlagForQueryEmptyException();
result.error( exception );
}
if( Boolean.TRUE.equals( check ) ){
try {
project = projectQueryService.get( projectId );
if ( project == null) {
check = false;
Exception exception = new ProjectNotExistsException( projectId );
result.error( exception );
}
} catch (Exception e) {
check = false;
Exception exception = new ProjectQueryException(e, "根据指定flag查询应用项目信息对象时发生异常。ID:" + projectId );
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
if( Boolean.TRUE.equals( check ) ){
try {
projectPersistService.recoveryProject( projectId);
// 更新缓存
ApplicationCache.notify( Project.class );
Wo wo = new Wo();
wo.setId( project.getId() );
result.setData( wo );
} catch (Exception e) {
check = false;
Exception exception = new ProjectPersistException(e, "项目恢复时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
try {
dynamicPersistService.projectRecoveryDynamic( project, effectivePerson);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
}
}
return result;
}
public static class Wo extends WoId {
}
}
\ No newline at end of file
......@@ -136,6 +136,9 @@ public class ActionSave extends BaseAction {
@FieldDescribe("执行者|负责人,非必填")
private String executor;
@FieldDescribe("模板id")
private String templateId;
@FieldDescribe("管理者,非必填")
private List<String> manageablePersonList;
......@@ -220,6 +223,14 @@ public class ActionSave extends BaseAction {
public void setExecutor(String executor) {
this.executor = executor;
}
public String getTemplateId() {
return templateId;
}
public void setTemplateId(String templateId) {
this.templateId = templateId;
}
public List<String> getManageablePersonList() {
return manageablePersonList;
......
......@@ -43,13 +43,13 @@ public class ActionStatisticMyProjects extends BaseAction {
Integer archiveCount = 0;
Integer deleteCount = 0;
String cacheKey = ApplicationCache.concreteCacheKey( "ActionStatisticMyProjects", effectivePerson.getDistinguishedName() );
/*String cacheKey = ApplicationCache.concreteCacheKey( "ActionStatisticMyProjects", effectivePerson.getDistinguishedName() );
Element element = projectCache.get( cacheKey );
if ((null != element) && (null != element.getObjectValue())) {
wo = (Wo) element.getObjectValue();
result.setData( wo );
} else {
} else {*/
if( Boolean.TRUE.equals( check ) ){
try {
//查询我参与的所有项目
......@@ -127,7 +127,7 @@ public class ActionStatisticMyProjects extends BaseAction {
SortTools.asc( woGroupList, "createTime");
}
wo.setGroups( woGroupList );
projectCache.put( new Element(cacheKey, wo) );
//projectCache.put( new Element(cacheKey, wo) );
result.setData(wo);
} catch (Exception e) {
Exception exception = new ProjectQueryException(e, "将查询出来的应用项目信息对象转换为可输出的数据信息时发生异常。");
......@@ -135,7 +135,7 @@ public class ActionStatisticMyProjects extends BaseAction {
logger.error(e, effectivePerson, request, null);
}
}
}
//}
return result;
}
......
......@@ -34,13 +34,13 @@ public class ActionStatisticMyProjectsGroups extends BaseAction {
List<WoGroup> woGroupList = null;
Boolean check = true;
String cacheKey = ApplicationCache.concreteCacheKey( "ActionStatisticMyProjectsGroups", effectivePerson.getDistinguishedName() );
/*String cacheKey = ApplicationCache.concreteCacheKey( "ActionStatisticMyProjectsGroups", effectivePerson.getDistinguishedName() );
Element element = projectCache.get( cacheKey );
if ((null != element) && (null != element.getObjectValue())) {
wo = (Wo) element.getObjectValue();
result.setData( wo );
} else {
} else {*/
if( Boolean.TRUE.equals( check ) ){
try {
//查询我参与的所有项目
......@@ -92,14 +92,14 @@ public class ActionStatisticMyProjectsGroups extends BaseAction {
wo.setGroups( woGroupList );
result.setData(wo);
projectCache.put( new Element(cacheKey, wo) );
//projectCache.put( new Element(cacheKey, wo) );
} catch (Exception e) {
Exception exception = new ProjectQueryException(e, "将查询出来的应用项目信息对象转换为可输出的数据信息时发生异常。");
result.error(exception);
logger.error(e, effectivePerson, request, null);
}
}
}
//}
return result;
}
......
......@@ -3,6 +3,7 @@ package com.x.teamwork.assemble.control.jaxrs.project;
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.ProjectConfigQueryService;
import com.x.teamwork.assemble.control.service.ProjectGroupPersistService;
import com.x.teamwork.assemble.control.service.ProjectGroupQueryService;
import com.x.teamwork.assemble.control.service.ProjectPersistService;
......@@ -29,4 +30,6 @@ public class BaseAction extends StandardJaxrsAction {
protected SystemConfigQueryService systemConfigQueryService = new SystemConfigQueryService();
protected ProjectConfigQueryService projectConfigQueryService = new ProjectConfigQueryService();
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册