diff --git a/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/ActionSave.java b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/ActionSave.java index 0185e6d4fd206a297dd452c9765f209ce6b81972..aa4cd951322820aa1945704ba4e3884f9b4ceb77 100644 --- a/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/ActionSave.java +++ b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/ActionSave.java @@ -713,7 +713,7 @@ public class ActionSave extends BaseAction { } -public static class Wo extends WoId { + public static class Wo extends WoId { @FieldDescribe("操作引起的动态内容") List dynamics = new ArrayList<>(); diff --git a/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/ActionTransformAsSubTask.java b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/ActionTransformAsSubTask.java new file mode 100644 index 0000000000000000000000000000000000000000..ca8f114bd4d519b4223e6fa0ae4053e8c3c1b378 --- /dev/null +++ b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/ActionTransformAsSubTask.java @@ -0,0 +1,192 @@ +package com.x.teamwork.assemble.control.jaxrs.task; + +import com.google.gson.Gson; +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.gson.XGsonBuilder; +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.assemble.control.service.BatchOperationPersistService; +import com.x.teamwork.assemble.control.service.BatchOperationProcessService; +import com.x.teamwork.core.entity.*; +import net.sf.ehcache.Element; +import org.apache.commons.lang3.StringUtils; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +/** + * 将任务转为子任务 + */ +public class ActionTransformAsSubTask extends BaseAction { + + private static Logger logger = LoggerFactory.getLogger(ActionTransformAsSubTask.class); + + /** + * 将任务转换为子任务的服务 + * 1、确认ID是否合法 + * 2、将任务的parentId设置为parentId + * 3、保存任务信息 + * 4、记录动态信息 + * + * @param request + * @param effectivePerson + * @param sourceTaskId + * @param parentId + * @return + * @throws Exception + */ + protected ActionResult execute(HttpServletRequest request, EffectivePerson effectivePerson, String sourceTaskId, String parentId ) throws Exception { + ActionResult result = new ActionResult<>(); + Wo wo = new Wo(); + Task sourceTask = null; + Task parentTask = null; + TaskDetail taskDetail = null; + TaskExtField taskExtField = null; + List extFieldReleList = null; + List tags = null; + List dynamics = new ArrayList<>(); + Boolean check = true; + + if ( StringUtils.isEmpty( sourceTaskId ) ) { + check = false; + Exception exception = new TaskTransformException("需要转换的工作任务ID不允许为空!"); + result.error( exception ); + } + + if ( StringUtils.isEmpty( parentId ) ) { + check = false; + Exception exception = new TaskTransformException("上级任务ID不允许为空!"); + result.error( exception ); + } + + if (check) { + //查询需要转换为子任务的任务是否存在 + try { + sourceTask = taskQueryService.get( sourceTaskId ); + if ( sourceTask == null) { + check = false; + Exception exception = new TaskNotExistsException(sourceTaskId); + result.error( exception ); + } + } catch (Exception e) { + check = false; + Exception exception = new TaskQueryException(e, "根据指定ID查询工作任务信息对象时发生异常。sourceTaskId:" + sourceTaskId ); + result.error(exception); + logger.error(e, effectivePerson, request, null); + } + } + + if (check) { + //查询上级任务是否存在 + try { + parentTask = taskQueryService.get( parentId ); + if ( parentTask == null) { + check = false; + Exception exception = new TaskNotExistsException( parentId ); + result.error( exception ); + } + } catch (Exception e) { + check = false; + Exception exception = new TaskQueryException(e, "根据指定ID查询工作任务信息对象时发生异常。parentId:" + parentId ); + result.error(exception); + logger.error(e, effectivePerson, request, null); + } + } + + try { + taskPersistService.updateParentId( sourceTask.getId(), parentTask.getId(), effectivePerson ); + } catch (Exception e) { + check = false; + Exception exception = new TaskPersistException(e, "工作上级任务ID信息更新时发生异常。"); + result.error(exception); + logger.error(e, effectivePerson, request, null); + } + + + if (check) { + //记录工作任务信息变化记录 + try { + dynamics = dynamicPersistService.subTaskTransformDynamic( sourceTask, parentTask, effectivePerson ); + } catch (Exception e) { + logger.error(e, effectivePerson, request, null); + } + } + + if (check) { + try { + new BatchOperationPersistService().addOperation( + BatchOperationProcessService.OPT_OBJ_TASK, + BatchOperationProcessService.OPT_TYPE_PERMISSION, sourceTask.getId(), sourceTask.getId(), "刷新文档权限:ID=" + sourceTask.getId() ); + } catch (Exception e) { + logger.error(e, effectivePerson, request, null); + } + } + + if (check) { + try { + new BatchOperationPersistService().addOperation( + BatchOperationProcessService.OPT_OBJ_TASK, + BatchOperationProcessService.OPT_TYPE_PERMISSION, parentTask.getId(), parentTask.getId(), "刷新文档权限:ID=" + parentTask.getId() ); + } catch (Exception e) { + logger.error(e, effectivePerson, request, null); + } + } + + if( ListTools.isNotEmpty( dynamics ) ) { + wo.setDynamics( WoDynamic.copier.copy( dynamics ) ); + } + + // 更新缓存 + ApplicationCache.notify( Task.class ); + ApplicationCache.notify( TaskList.class ); + ApplicationCache.notify( TaskView.class ); + ApplicationCache.notify( Review.class ); + ApplicationCache.notify( TaskGroup.class ); + ApplicationCache.notify( Dynamic.class ); + + result.setData( wo ); + return result; + } + + + public static class Wo extends WoId { + + @FieldDescribe("操作引起的动态内容") + List dynamics = new ArrayList<>(); + + public List getDynamics() { + return dynamics; + } + + public void setDynamics(List dynamics) { + this.dynamics = dynamics; + } + + } + + public static class WoDynamic extends Dynamic{ + + private static final long serialVersionUID = -5076990764713538973L; + + public static WrapCopier copier = WrapCopierFactory.wo( Dynamic.class, ActionSave.WoDynamic.class, null, JpaObject.FieldsInvisible); + + private Long rank = 0L; + + public Long getRank() { + return rank; + } + + public void setRank(Long rank) { + this.rank = rank; + } + } +} \ No newline at end of file diff --git a/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/TaskAction.java b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/TaskAction.java index f1226c985cf9b3f29a97107594f6ce4b7ce92818..a54836be19dec2f92343c004127ff24db37de55c 100644 --- a/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/TaskAction.java +++ b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/TaskAction.java @@ -90,7 +90,27 @@ public class TaskAction extends StandardJaxrsAction { } asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); } - + + @JaxrsMethodDescribe(value = "将指定的工作转换为子工作.", action = ActionTransformAsSubTask.class) + @GET + @Path("transform/{tid}/parent/{pid}") + @Produces(HttpMediaType.APPLICATION_JSON_UTF_8) + @Consumes(MediaType.APPLICATION_JSON) + public void transformAsSubTask(@Suspended final AsyncResponse asyncResponse, + @Context HttpServletRequest request, + @JaxrsParameterDescribe("指定任务ID") @PathParam("tid") String tid, + @JaxrsParameterDescribe("上级任务ID") @PathParam("pid") String pid) { + ActionResult result = new ActionResult<>(); + EffectivePerson effectivePerson = this.effectivePerson(request); + try { + result = new ActionTransformAsSubTask().execute( request, effectivePerson, tid, pid ); + } catch (Exception e) { + logger.error(e, effectivePerson, request, null); + result.error(e); + } + asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); + } + @JaxrsMethodDescribe(value = "查询我的项目首页中工作任务视图信息.", action = ActionStatisticMyTaskViews.class) @GET @Path("statitic/group/{projectId}") diff --git a/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/TaskTransformException.java b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/TaskTransformException.java new file mode 100644 index 0000000000000000000000000000000000000000..563075db752cdffbe10e803af80c26ed205ec4da --- /dev/null +++ b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/TaskTransformException.java @@ -0,0 +1,20 @@ +package com.x.teamwork.assemble.control.jaxrs.task; + +import com.x.base.core.project.exception.PromptException; + +class TaskTransformException extends PromptException { + + private static final long serialVersionUID = 1859164370743532895L; + + TaskTransformException(Throwable e ) { + super("系统在转换工作任务为子任务时发生异常。" , e ); + } + + TaskTransformException(Throwable e, String message ) { + super("系统在转换工作任务为子任务时发生异常。Message:" + message, e ); + } + + TaskTransformException(String message ) { + super("系统在转换工作任务为子任务时发生异常。Message:" + message ); + } +} diff --git a/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/DynamicPersistService.java b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/DynamicPersistService.java index e9aed7e2ff9b984ce779cdbfedfc9edeb236fe93..f3f66a4938455f97a4e64ea6e3262646969edd1d 100644 --- a/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/DynamicPersistService.java +++ b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/DynamicPersistService.java @@ -82,7 +82,6 @@ public class DynamicPersistService { /** * 保存项目创建或者更新动态信息 - * @param old_object * @param object * @param effectivePerson * @param content @@ -132,9 +131,7 @@ public class DynamicPersistService { * 保存项目扩展信息保存操作动态信息 * @param object_old * @param object - * @param optType * @param effectivePerson - * @param content * @return * @throws Exception */ @@ -179,8 +176,8 @@ public class DynamicPersistService { /** * 保存动态信息 + * @param object_old * @param object - * @param optType * @param effectivePerson * @param content * @return @@ -230,7 +227,6 @@ public class DynamicPersistService { * @param object_old * @param object_new * @param effectivePerson - * @param content * @return * @throws Exception */ @@ -257,11 +253,53 @@ public class DynamicPersistService { } return result; } - + /** - * 保存动态信息 - * @param dynamic + * 保存转换子工作的动态信息 + * @param subTask + * @param parentTask + * @param effectivePerson + * @return + * @throws Exception + */ + public List subTaskTransformDynamic( Task subTask, Task parentTask, EffectivePerson effectivePerson ) throws Exception { + if ( subTask == null) { + throw new Exception("sourceTask is null."); + } + if ( parentTask == null) { + throw new Exception("parentTask is null."); + } + if ( effectivePerson == null ) { + throw new Exception("effectivePerson is null."); + } + List result = new ArrayList<>(); + List dynamics = null; + + //记录一个添加子任务转换的动态信息 + result.add(dynamicService.getTaskTransformDynamic( parentTask, subTask, effectivePerson)); + + //记录一个为上级任务添加子任务的动态信息 + result.add(dynamicService.getTaskSplitDynamic( parentTask, subTask, effectivePerson)); + + try ( EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + if( ListTools.isNotEmpty( result )) { + for( Dynamic dynamic : result ) { + //持久化工作操作动态 + dynamicService.save( emc, dynamic, "" ); + } + } + } catch (Exception e) { + throw e; + } + return result; + } + + /** + * 保存项目工作组信息动态 + * @param object_old + * @param object * @param effectivePerson + * @param content * @return * @throws Exception */ @@ -287,7 +325,6 @@ public class DynamicPersistService { * 保存项目组删除动态信息 * @param object * @param effectivePerson - * @param content * @return * @throws Exception */ @@ -311,7 +348,6 @@ public class DynamicPersistService { * 保存工作任务删除动态信息 * @param object * @param effectivePerson - * @param content * @return * @throws Exception */ @@ -338,7 +374,6 @@ public class DynamicPersistService { * @param addManagers * @param removeManagers * @param effectivePerson - * @param content * @throws Exception */ public List taskManagerUpdateDynamic(Task task, List addManagers, List removeManagers, EffectivePerson effectivePerson ) throws Exception { @@ -421,7 +456,6 @@ public class DynamicPersistService { * @param addParticipants * @param removeParticipants * @param effectivePerson - * @param content * @throws Exception */ public List taskParticipantsUpdateDynamic(Task task, List addParticipants, List removeParticipants, EffectivePerson effectivePerson ) throws Exception { @@ -570,7 +604,6 @@ public class DynamicPersistService { * 保存工作任务评论删除动态信息 * @param object * @param effectivePerson - * @param content * @return * @throws Exception */ diff --git a/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/DynamicService.java b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/DynamicService.java index 7584c8a0135b1a2f357cc2e7855e9bb13892a9dc..c20c91bd20925515174705e0970cb113397900f4 100644 --- a/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/DynamicService.java +++ b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/DynamicService.java @@ -103,8 +103,6 @@ class DynamicService { * @param maxCount * @param orderField * @param orderType - * @param projectIds - * @param taskIds * @return * @throws Exception */ @@ -116,7 +114,7 @@ class DynamicService { /** * 向数据库持久化动态信息 * @param emc - * @param dynamic + * @param object * @return * @throws Exception */ @@ -480,7 +478,6 @@ class DynamicService { * 保存和根据项目组信息操作动态 * @param object_old * @param object - * @param optType * @param effectivePerson * @return */ @@ -734,7 +731,7 @@ class DynamicService { /** * 更新工作任务管理者信息操作动态 - * @param task + * @param object * @param addManagers * @param removeManagers * @param effectivePerson @@ -768,7 +765,7 @@ class DynamicService { /** * 更新工作任务参与者操作动态 - * @param task + * @param object * @param addParticipants * @param removeParticipants * @param effectivePerson @@ -805,11 +802,22 @@ class DynamicService { String title = "工作任务分解"; String viewUrl = task.getId(); String optType = "SPLIT"; - String description = effectivePerson.getName() +"为工作添加了一个子任务:" + task.getName(); + String description = effectivePerson.getName() +"为工作添加了一个子任务:[" + task.getName() + "]"; Dynamic dynamic = composeNewDynamic( objectType, title, description, viewUrl, optType, parentTask, effectivePerson, false ); dynamic.setTarget( parentTask.getExecutor() ); return dynamic; } + + public Dynamic getTaskTransformDynamic(Task parentTask, Task task, EffectivePerson effectivePerson) { + String objectType = "TASK"; + String title = "转换为子工作"; + String viewUrl = task.getId(); + String optType = "TRANSFORM"; + String description = effectivePerson.getName() +"将工作转换为工作[" +parentTask.getName() + "]的一个子任务。"; + Dynamic dynamic = composeNewDynamic( objectType, title, description, viewUrl, optType, task, effectivePerson, false ); + dynamic.setTarget( task.getExecutor() ); + return dynamic; + } public Dynamic subTaskDeleteDynamic(Task parentTask, Task task, EffectivePerson effectivePerson) { String objectType = "TASK"; @@ -888,7 +896,7 @@ class DynamicService { /** * 工作任务附件上传操作动态信息 - * @param attachment + * @param object * @param effectivePerson * @return */ @@ -903,7 +911,7 @@ class DynamicService { /** * 工作任务附件下载操作动态信息 - * @param attachment + * @param object * @param effectivePerson * @return */ @@ -918,7 +926,7 @@ class DynamicService { /** * 工作任务附件删除操作动态信息 - * @param attachment + * @param object * @param effectivePerson * @return */ diff --git a/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/TaskPersistService.java b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/TaskPersistService.java index 09a8c5da42adb38ef175e1fbda131713c02d906f..0d22c1b822f645aa2b8c0e5d12ce51372e9c5c64 100644 --- a/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/TaskPersistService.java +++ b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/TaskPersistService.java @@ -190,7 +190,34 @@ public class TaskPersistService { throw e; } } - + + + /** + * 更新任务的上级任务ID信息 + * @param taskId + * @param parentId + * @param effectivePerson + * @throws Exception + */ + public void updateParentId( String taskId, String parentId, EffectivePerson effectivePerson) throws Exception { + + if( StringUtils.isEmpty( taskId )) { + throw new Exception("taskId can not empty in update parentId."); + } + try ( EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + Task task = emc.find( taskId, Task.class ); + if( task != null ){ + task.setParent( parentId ); + } + emc.beginTransaction( Task.class ); + emc.check( task, CheckPersistType.all ); + emc.commit(); + } catch (Exception e) { + throw e; + } + + } + /** * 查询用户是否拥有创建工作任务的权限 * @param effectivePerson @@ -588,5 +615,5 @@ public class TaskPersistService { } } - + } diff --git a/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/TaskQueryService.java b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/TaskQueryService.java index 121fc366dd72496f027d647eebe5279f5aa83b66..faaec82262e4239c4dabd058915aa62a79211575 100644 --- a/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/TaskQueryService.java +++ b/o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/service/TaskQueryService.java @@ -217,7 +217,9 @@ public class TaskQueryService { for( TaskListRele rele : taskListReles ) { task = emc.find( rele.getTaskId(), Task.class ); //只查询自己负责的任务 - if( personName.equalsIgnoreCase( task.getExecutor() )) { + if( personName.equalsIgnoreCase( task.getExecutor() ) || + ( task.getParticipantList() !=null && task.getParticipantList().contains( personName )) + ) { task.setOrder( rele.getOrder() ); resultList.add( task ); } @@ -252,7 +254,9 @@ public class TaskQueryService { if( ListTools.isNotEmpty( taskListTmp )) { for( Task _task : taskListTmp ) { //只查询自己负责的任务 - if( personName.equalsIgnoreCase( _task.getExecutor() )) { + if( personName.equalsIgnoreCase( _task.getExecutor() )|| + ( _task.getParticipantList() !=null && _task.getParticipantList().contains( personName ))) + { resultList.add( _task ); } } @@ -266,7 +270,6 @@ public class TaskQueryService { /** * 在人员的可见范围之类,根据指定的工作任务ID,查询子任务列表 - * @param project * @param taskId * @param effectivePerson * @return diff --git a/o2server/x_teamwork_assemble_control/src/main/webapp/describe/describe.json b/o2server/x_teamwork_assemble_control/src/main/webapp/describe/describe.json index 8a57c3db48b5e67c1d81a2ae3da542ae47854307..bd96ac0dc35eb6478ffe8ae0fd9f9f7a774061ca 100644 --- a/o2server/x_teamwork_assemble_control/src/main/webapp/describe/describe.json +++ b/o2server/x_teamwork_assemble_control/src/main/webapp/describe/describe.json @@ -7790,6 +7790,46 @@ } ] }, + { + "name": "transformAsSubTask", + "className": "com.x.teamwork.assemble.control.jaxrs.task.ActionTransformAsSubTask", + "description": "将指定的工作转换为子工作.", + "type": "GET", + "path": "jaxrs/task/transform/{tid}/parent/{pid}", + "contentType": "application/json", + "resultContentType": "application/json; charset\u003dUTF-8", + "useJsonElementParameter": false, + "useStringParameter": false, + "pathParameters": [ + { + "name": "tid", + "type": "String", + "description": "指定任务ID" + }, + { + "name": "pid", + "type": "String", + "description": "上级任务ID" + } + ], + "formParameters": [], + "queryParameters": [], + "ins": [], + "outs": [ + { + "name": "dynamics", + "type": "List\u003cWoDynamic\u003e", + "isCollection": true, + "description": "操作引起的动态内容" + }, + { + "name": "id", + "type": "String", + "isCollection": false, + "description": "id" + } + ] + }, { "name": "updateManager", "className": "com.x.teamwork.assemble.control.jaxrs.task.ActionManagerUpdate", diff --git a/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/jaxrs/task/ActionSave.java b/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/jaxrs/task/ActionSave.java index 0185e6d4fd206a297dd452c9765f209ce6b81972..aa4cd951322820aa1945704ba4e3884f9b4ceb77 100644 --- a/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/jaxrs/task/ActionSave.java +++ b/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/jaxrs/task/ActionSave.java @@ -713,7 +713,7 @@ public class ActionSave extends BaseAction { } -public static class Wo extends WoId { + public static class Wo extends WoId { @FieldDescribe("操作引起的动态内容") List dynamics = new ArrayList<>(); diff --git a/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/jaxrs/task/TaskAction.java b/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/jaxrs/task/TaskAction.java index f1226c985cf9b3f29a97107594f6ce4b7ce92818..a54836be19dec2f92343c004127ff24db37de55c 100644 --- a/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/jaxrs/task/TaskAction.java +++ b/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/jaxrs/task/TaskAction.java @@ -90,7 +90,27 @@ public class TaskAction extends StandardJaxrsAction { } asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); } - + + @JaxrsMethodDescribe(value = "将指定的工作转换为子工作.", action = ActionTransformAsSubTask.class) + @GET + @Path("transform/{tid}/parent/{pid}") + @Produces(HttpMediaType.APPLICATION_JSON_UTF_8) + @Consumes(MediaType.APPLICATION_JSON) + public void transformAsSubTask(@Suspended final AsyncResponse asyncResponse, + @Context HttpServletRequest request, + @JaxrsParameterDescribe("指定任务ID") @PathParam("tid") String tid, + @JaxrsParameterDescribe("上级任务ID") @PathParam("pid") String pid) { + ActionResult result = new ActionResult<>(); + EffectivePerson effectivePerson = this.effectivePerson(request); + try { + result = new ActionTransformAsSubTask().execute( request, effectivePerson, tid, pid ); + } catch (Exception e) { + logger.error(e, effectivePerson, request, null); + result.error(e); + } + asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); + } + @JaxrsMethodDescribe(value = "查询我的项目首页中工作任务视图信息.", action = ActionStatisticMyTaskViews.class) @GET @Path("statitic/group/{projectId}") diff --git a/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/DynamicPersistService.java b/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/DynamicPersistService.java index e9aed7e2ff9b984ce779cdbfedfc9edeb236fe93..f3f66a4938455f97a4e64ea6e3262646969edd1d 100644 --- a/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/DynamicPersistService.java +++ b/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/DynamicPersistService.java @@ -82,7 +82,6 @@ public class DynamicPersistService { /** * 保存项目创建或者更新动态信息 - * @param old_object * @param object * @param effectivePerson * @param content @@ -132,9 +131,7 @@ public class DynamicPersistService { * 保存项目扩展信息保存操作动态信息 * @param object_old * @param object - * @param optType * @param effectivePerson - * @param content * @return * @throws Exception */ @@ -179,8 +176,8 @@ public class DynamicPersistService { /** * 保存动态信息 + * @param object_old * @param object - * @param optType * @param effectivePerson * @param content * @return @@ -230,7 +227,6 @@ public class DynamicPersistService { * @param object_old * @param object_new * @param effectivePerson - * @param content * @return * @throws Exception */ @@ -257,11 +253,53 @@ public class DynamicPersistService { } return result; } - + /** - * 保存动态信息 - * @param dynamic + * 保存转换子工作的动态信息 + * @param subTask + * @param parentTask + * @param effectivePerson + * @return + * @throws Exception + */ + public List subTaskTransformDynamic( Task subTask, Task parentTask, EffectivePerson effectivePerson ) throws Exception { + if ( subTask == null) { + throw new Exception("sourceTask is null."); + } + if ( parentTask == null) { + throw new Exception("parentTask is null."); + } + if ( effectivePerson == null ) { + throw new Exception("effectivePerson is null."); + } + List result = new ArrayList<>(); + List dynamics = null; + + //记录一个添加子任务转换的动态信息 + result.add(dynamicService.getTaskTransformDynamic( parentTask, subTask, effectivePerson)); + + //记录一个为上级任务添加子任务的动态信息 + result.add(dynamicService.getTaskSplitDynamic( parentTask, subTask, effectivePerson)); + + try ( EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + if( ListTools.isNotEmpty( result )) { + for( Dynamic dynamic : result ) { + //持久化工作操作动态 + dynamicService.save( emc, dynamic, "" ); + } + } + } catch (Exception e) { + throw e; + } + return result; + } + + /** + * 保存项目工作组信息动态 + * @param object_old + * @param object * @param effectivePerson + * @param content * @return * @throws Exception */ @@ -287,7 +325,6 @@ public class DynamicPersistService { * 保存项目组删除动态信息 * @param object * @param effectivePerson - * @param content * @return * @throws Exception */ @@ -311,7 +348,6 @@ public class DynamicPersistService { * 保存工作任务删除动态信息 * @param object * @param effectivePerson - * @param content * @return * @throws Exception */ @@ -338,7 +374,6 @@ public class DynamicPersistService { * @param addManagers * @param removeManagers * @param effectivePerson - * @param content * @throws Exception */ public List taskManagerUpdateDynamic(Task task, List addManagers, List removeManagers, EffectivePerson effectivePerson ) throws Exception { @@ -421,7 +456,6 @@ public class DynamicPersistService { * @param addParticipants * @param removeParticipants * @param effectivePerson - * @param content * @throws Exception */ public List taskParticipantsUpdateDynamic(Task task, List addParticipants, List removeParticipants, EffectivePerson effectivePerson ) throws Exception { @@ -570,7 +604,6 @@ public class DynamicPersistService { * 保存工作任务评论删除动态信息 * @param object * @param effectivePerson - * @param content * @return * @throws Exception */ diff --git a/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/DynamicService.java b/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/DynamicService.java index 7584c8a0135b1a2f357cc2e7855e9bb13892a9dc..c20c91bd20925515174705e0970cb113397900f4 100644 --- a/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/DynamicService.java +++ b/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/DynamicService.java @@ -103,8 +103,6 @@ class DynamicService { * @param maxCount * @param orderField * @param orderType - * @param projectIds - * @param taskIds * @return * @throws Exception */ @@ -116,7 +114,7 @@ class DynamicService { /** * 向数据库持久化动态信息 * @param emc - * @param dynamic + * @param object * @return * @throws Exception */ @@ -480,7 +478,6 @@ class DynamicService { * 保存和根据项目组信息操作动态 * @param object_old * @param object - * @param optType * @param effectivePerson * @return */ @@ -734,7 +731,7 @@ class DynamicService { /** * 更新工作任务管理者信息操作动态 - * @param task + * @param object * @param addManagers * @param removeManagers * @param effectivePerson @@ -768,7 +765,7 @@ class DynamicService { /** * 更新工作任务参与者操作动态 - * @param task + * @param object * @param addParticipants * @param removeParticipants * @param effectivePerson @@ -805,11 +802,22 @@ class DynamicService { String title = "工作任务分解"; String viewUrl = task.getId(); String optType = "SPLIT"; - String description = effectivePerson.getName() +"为工作添加了一个子任务:" + task.getName(); + String description = effectivePerson.getName() +"为工作添加了一个子任务:[" + task.getName() + "]"; Dynamic dynamic = composeNewDynamic( objectType, title, description, viewUrl, optType, parentTask, effectivePerson, false ); dynamic.setTarget( parentTask.getExecutor() ); return dynamic; } + + public Dynamic getTaskTransformDynamic(Task parentTask, Task task, EffectivePerson effectivePerson) { + String objectType = "TASK"; + String title = "转换为子工作"; + String viewUrl = task.getId(); + String optType = "TRANSFORM"; + String description = effectivePerson.getName() +"将工作转换为工作[" +parentTask.getName() + "]的一个子任务。"; + Dynamic dynamic = composeNewDynamic( objectType, title, description, viewUrl, optType, task, effectivePerson, false ); + dynamic.setTarget( task.getExecutor() ); + return dynamic; + } public Dynamic subTaskDeleteDynamic(Task parentTask, Task task, EffectivePerson effectivePerson) { String objectType = "TASK"; @@ -888,7 +896,7 @@ class DynamicService { /** * 工作任务附件上传操作动态信息 - * @param attachment + * @param object * @param effectivePerson * @return */ @@ -903,7 +911,7 @@ class DynamicService { /** * 工作任务附件下载操作动态信息 - * @param attachment + * @param object * @param effectivePerson * @return */ @@ -918,7 +926,7 @@ class DynamicService { /** * 工作任务附件删除操作动态信息 - * @param attachment + * @param object * @param effectivePerson * @return */ diff --git a/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/TaskPersistService.java b/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/TaskPersistService.java index 09a8c5da42adb38ef175e1fbda131713c02d906f..0d22c1b822f645aa2b8c0e5d12ce51372e9c5c64 100644 --- a/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/TaskPersistService.java +++ b/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/TaskPersistService.java @@ -190,7 +190,34 @@ public class TaskPersistService { throw e; } } - + + + /** + * 更新任务的上级任务ID信息 + * @param taskId + * @param parentId + * @param effectivePerson + * @throws Exception + */ + public void updateParentId( String taskId, String parentId, EffectivePerson effectivePerson) throws Exception { + + if( StringUtils.isEmpty( taskId )) { + throw new Exception("taskId can not empty in update parentId."); + } + try ( EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + Task task = emc.find( taskId, Task.class ); + if( task != null ){ + task.setParent( parentId ); + } + emc.beginTransaction( Task.class ); + emc.check( task, CheckPersistType.all ); + emc.commit(); + } catch (Exception e) { + throw e; + } + + } + /** * 查询用户是否拥有创建工作任务的权限 * @param effectivePerson @@ -588,5 +615,5 @@ public class TaskPersistService { } } - + } diff --git a/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/TaskQueryService.java b/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/TaskQueryService.java index 121fc366dd72496f027d647eebe5279f5aa83b66..faaec82262e4239c4dabd058915aa62a79211575 100644 --- a/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/TaskQueryService.java +++ b/o2server/x_teamwork_assemble_control/src/main/webapp/describe/sources/com/x/teamwork/assemble/control/service/TaskQueryService.java @@ -217,7 +217,9 @@ public class TaskQueryService { for( TaskListRele rele : taskListReles ) { task = emc.find( rele.getTaskId(), Task.class ); //只查询自己负责的任务 - if( personName.equalsIgnoreCase( task.getExecutor() )) { + if( personName.equalsIgnoreCase( task.getExecutor() ) || + ( task.getParticipantList() !=null && task.getParticipantList().contains( personName )) + ) { task.setOrder( rele.getOrder() ); resultList.add( task ); } @@ -252,7 +254,9 @@ public class TaskQueryService { if( ListTools.isNotEmpty( taskListTmp )) { for( Task _task : taskListTmp ) { //只查询自己负责的任务 - if( personName.equalsIgnoreCase( _task.getExecutor() )) { + if( personName.equalsIgnoreCase( _task.getExecutor() )|| + ( _task.getParticipantList() !=null && _task.getParticipantList().contains( personName ))) + { resultList.add( _task ); } } @@ -266,7 +270,6 @@ public class TaskQueryService { /** * 在人员的可见范围之类,根据指定的工作任务ID,查询子任务列表 - * @param project * @param taskId * @param effectivePerson * @return