diff --git a/snow-admin/src/main/java/com/snow/web/controller/system/SysOaTaskController.java b/snow-admin/src/main/java/com/snow/web/controller/system/SysOaTaskController.java index c6bb586..ac2678a 100644 --- a/snow-admin/src/main/java/com/snow/web/controller/system/SysOaTaskController.java +++ b/snow-admin/src/main/java/com/snow/web/controller/system/SysOaTaskController.java @@ -9,13 +9,16 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.google.common.collect.Lists; import com.snow.common.enums.DingFlowTaskType; +import com.snow.common.enums.DingTalkListenerType; import com.snow.framework.util.ShiroUtils; import com.snow.system.domain.*; import com.snow.system.domain.SysOaTaskDistribute; +import com.snow.system.event.SyncEvent; import com.snow.system.service.ISysOaTaskDistributeService; import com.snow.system.service.ISysUserService; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -52,6 +55,9 @@ public class SysOaTaskController extends BaseController @Autowired private ISysUserService sysUserService; + @Autowired + private ApplicationContext applicationContext; + @RequiresPermissions("system:task:view") @GetMapping() public String task() @@ -215,6 +221,9 @@ public class SysOaTaskController extends BaseController sysOaTaskDistribute.setTaskExecuteId(String.valueOf(ShiroUtils.getUserId())); sysOaTaskDistribute.setUpdateBy(String.valueOf(ShiroUtils.getUserId())); sysOaTaskDistribute.setTaskExecuteStatus(DingFlowTaskType.COMPLETED.getCode()); + //事件发送 + SyncEvent syncEvent = new SyncEvent(sysOaTaskDistribute, DingTalkListenerType.UPDATE_TODO_TASK_EXECUTOR_STATUS); + applicationContext.publishEvent(syncEvent); return toAjax(sysOaTaskDistributeService.updateSysOaTaskDistribute(sysOaTaskDistribute)); } /** diff --git a/snow-common/src/main/java/com/snow/common/enums/DingTalkListenerType.java b/snow-common/src/main/java/com/snow/common/enums/DingTalkListenerType.java index 473fe50..0e4f661 100644 --- a/snow-common/src/main/java/com/snow/common/enums/DingTalkListenerType.java +++ b/snow-common/src/main/java/com/snow/common/enums/DingTalkListenerType.java @@ -29,7 +29,7 @@ public enum DingTalkListenerType { GET_EXT_CONTACT_USER(5,3,"get_ext_contact_user"), - + //*******************回调 CALL_BACK_CHECK_URL(1,10, "回调check_url"), CALL_BACK_REGISTER(1,10, "回调注册"), @@ -40,6 +40,8 @@ public enum DingTalkListenerType { CALL_BACK_FAILED_RESULT(23,10, "获取回调失败结果"), + + //*****************待办 WORK_RECODE_CREATE(1,20, "创建待办"), GET_WORK_RECORD_USER(2,20,"获取用户待办"), @@ -48,6 +50,9 @@ public enum DingTalkListenerType { WORK_RECORD_DELETE(4,20,"删除待办"), + + UPDATE_TODO_TASK_EXECUTOR_STATUS(7,20,"更新任务执行状态"), + /** * 审批任务开始、结束、转交。 */ diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/WorkRecodeEventService.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/WorkRecodeEventService.java index 7e62e70..6198ded 100644 --- a/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/WorkRecodeEventService.java +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/WorkRecodeEventService.java @@ -1,11 +1,14 @@ package com.snow.dingtalk.listener; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.aliyun.dingtalktodo_1_0.models.GetTodoTaskBySourceIdResponseBody; import com.snow.common.enums.DingTalkListenerType; import com.snow.common.utils.spring.SpringUtils; import com.snow.dingtalk.service.impl.WorkRecodeServiceImpl; import com.snow.framework.web.domain.common.SysSendMessageDTO; import com.snow.system.domain.SysOaTask; +import com.snow.system.domain.SysOaTaskDistribute; import com.snow.system.event.SyncEvent; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -29,7 +32,7 @@ public class WorkRecodeEventService implements ISyncDingTalkInfo { Integer code = eventType.getCode(); //钉钉创建待办 if(code.equals(DingTalkListenerType.WORK_RECODE_CREATE.getCode())){ - SysOaTask sysOaTask=(SysOaTask)syncEvent.getSource(); + SysOaTaskDistribute sysOaTask=(SysOaTaskDistribute)syncEvent.getSource(); log.info("@@创建钉钉待办系统传入的参数:{}",JSON.toJSONString(sysOaTask)); workRecodeService.createTodoTask(sysOaTask); } @@ -45,6 +48,16 @@ public class WorkRecodeEventService implements ISyncDingTalkInfo { log.info("@@删除钉钉待办系统传入的参数:{}",JSON.toJSONString(taskId)); workRecodeService.deleteTodoTask(taskId); } + //更新任务状态 + if(code.equals(DingTalkListenerType.UPDATE_TODO_TASK_EXECUTOR_STATUS.getCode())){ + SysOaTaskDistribute sysOaTaskDistribute=(SysOaTaskDistribute)syncEvent.getSource(); + GetTodoTaskBySourceIdResponseBody body = workRecodeService.getTodoTaskByBusinessId(String.valueOf(sysOaTaskDistribute.getId())); + boolean isComplete=false; + if(ObjectUtil.isNotNull(sysOaTaskDistribute.getTaskCompleteTime())){ + isComplete=true; + } + workRecodeService.updateTodoTaskExecutorStatus(body.getId(),isComplete); + } //钉钉发送普通消息 else if(code.equals(DingTalkListenerType.ASYNCSEND_V2.getCode())){ diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/WorkRecodeService.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/WorkRecodeService.java index 67211c4..47efd5e 100644 --- a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/WorkRecodeService.java +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/WorkRecodeService.java @@ -6,6 +6,7 @@ import com.snow.dingtalk.model.request.WorkrecordAddRequest; import com.snow.dingtalk.model.request.WorkrecordGetbyuseridRequest; import com.snow.framework.web.domain.common.SysSendMessageDTO; import com.snow.system.domain.SysOaTask; +import com.snow.system.domain.SysOaTaskDistribute; import org.springframework.stereotype.Service; /** @@ -31,7 +32,7 @@ public interface WorkRecodeService { * @param sysOaTask * @return */ - String createTodoTask(SysOaTask sysOaTask); + String createTodoTask(SysOaTaskDistribute sysOaTaskDistribute); /** * 删除待办(新) diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/WorkRecodeServiceImpl.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/WorkRecodeServiceImpl.java index ecbf5e6..36a635e 100644 --- a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/WorkRecodeServiceImpl.java +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/WorkRecodeServiceImpl.java @@ -32,6 +32,7 @@ import com.snow.framework.util.ShiroUtils; import com.snow.framework.web.domain.common.SysSendMessageDTO; import com.snow.system.domain.SysMessageTemplate; import com.snow.system.domain.SysOaTask; +import com.snow.system.domain.SysOaTaskDistribute; import com.snow.system.service.ISysMessageTemplateService; import com.snow.system.service.ISysUserService; import com.snow.system.service.impl.SysConfigServiceImpl; @@ -92,7 +93,8 @@ public class WorkRecodeServiceImpl extends BaseService implements WorkRecodeServ } @Override - public String createTodoTask(SysOaTask sysOaTask) { + public String createTodoTask(SysOaTaskDistribute sysOaTaskDistribute) { + SysOaTask sysOaTask = sysOaTaskDistribute.getSysOaTask(); List taskDistributeId = sysOaTask.getTaskDistributeId(); CreateTodoTaskHeaders createTodoTaskHeaders = new CreateTodoTaskHeaders(); @@ -113,7 +115,7 @@ public class WorkRecodeServiceImpl extends BaseService implements WorkRecodeServ .setPriority(sysOaTask.getPriority()) .setNotifyConfigs(notifyConfigs); if (ObjectUtil.isNotNull(sysOaTask.getTaskCompleteTime())) { - createTodoTaskRequest.setDueTime(sysOaTask.getTaskCompleteTime().getTime()); + createTodoTaskRequest.setDueTime(sysOaTaskDistribute.getTaskCompleteTime().getTime()); } //执行者id if(CollUtil.isNotEmpty(taskDistributeId)){ @@ -184,7 +186,7 @@ public class WorkRecodeServiceImpl extends BaseService implements WorkRecodeServ .setId(taskId) .setIsDone(status); UpdateTodoTaskExecutorStatusRequest updateTodoTaskExecutorStatusRequest = new UpdateTodoTaskExecutorStatusRequest() - .setExecutorStatusList(java.util.Arrays.asList( + .setExecutorStatusList(Arrays.asList( executorStatusList0 )); try { diff --git a/snow-system/src/main/java/com/snow/system/service/impl/SysOaTaskServiceImpl.java b/snow-system/src/main/java/com/snow/system/service/impl/SysOaTaskServiceImpl.java index 3fa6274..e186df9 100644 --- a/snow-system/src/main/java/com/snow/system/service/impl/SysOaTaskServiceImpl.java +++ b/snow-system/src/main/java/com/snow/system/service/impl/SysOaTaskServiceImpl.java @@ -5,6 +5,7 @@ import com.snow.common.constant.SequenceConstants; import com.snow.common.core.text.Convert; import com.snow.common.enums.DingFlowTaskType; import com.snow.common.enums.DingTalkListenerType; +import com.snow.common.enums.TaskStatus; import com.snow.common.exception.BusinessException; import com.snow.common.utils.DateUtils; import com.snow.system.domain.SysOaTask; @@ -83,13 +84,9 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService sysOaTask.setCreateTime(DateUtils.getNowDate()); String newSequenceNo = sequenceService.getNewSequenceNo(SequenceConstants.OA_TASK_SEQUENCE); sysOaTask.setTaskNo(newSequenceNo); + sysOaTask.setTaskStatus(TaskStatus.UN_FINISH.getCode()); List taskDistributeIdList= sysOaTask.getTaskDistributeId(); - if(CollUtil.isEmpty(taskDistributeIdList)){ - //待完成 - sysOaTask.setTaskStatus(DingFlowTaskType.NEW.getCode()); - }else { - //已分配 - sysOaTask.setTaskStatus(DingFlowTaskType.RUNNING.getCode()); + if(CollUtil.isNotEmpty(taskDistributeIdList)){ taskDistributeIdList.forEach(t->{ SysOaTaskDistribute sysOaTaskDistribute=new SysOaTaskDistribute(); //任务分配人 @@ -98,11 +95,12 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService sysOaTaskDistribute.setTaskExecuteStatus(DingFlowTaskType.RUNNING.getCode()); sysOaTaskDistribute.setCreateBy(sysOaTask.getCreateBy()); sysOaTaskDistributeService.insertSysOaTaskDistribute(sysOaTaskDistribute); + sysOaTaskDistribute.setSysOaTask(sysOaTask); + //事件发送 + SyncEvent syncEvent = new SyncEvent(sysOaTaskDistribute, DingTalkListenerType.WORK_RECODE_CREATE); + applicationContext.publishEvent(syncEvent); }); } - //事件发送 - SyncEvent syncEvent = new SyncEvent(sysOaTask, DingTalkListenerType.WORK_RECODE_CREATE); - applicationContext.publishEvent(syncEvent); return sysOaTaskMapper.insertSysOaTask(sysOaTask); }