diff --git a/tall/src/main/java/com/ccsens/tall/aspect/RobotAspect.java b/tall/src/main/java/com/ccsens/tall/aspect/RobotAspect.java index 32dc3edb..4bbd4c16 100644 --- a/tall/src/main/java/com/ccsens/tall/aspect/RobotAspect.java +++ b/tall/src/main/java/com/ccsens/tall/aspect/RobotAspect.java @@ -44,7 +44,7 @@ public class RobotAspect { RobotUtil.Message message = RobotUtil.getRobotMessage(); MessageVo.Inform inform = RobotUtil.getInform(); WxTemplateMessage wxTemplate = RobotUtil.getWxTemplate(); - // 3.机器人通知 + // 3.企业微信群机器人通知 asyncService.sendRobotMessage(operateType,message); // 4.ws和公众号通知 asyncService.sendMessage(operateType, inform, wxTemplate); diff --git a/tall/src/main/java/com/ccsens/tall/bean/dto/InputDocDto.java b/tall/src/main/java/com/ccsens/tall/bean/dto/InputDocDto.java index 2d44b92c..099f2890 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/dto/InputDocDto.java +++ b/tall/src/main/java/com/ccsens/tall/bean/dto/InputDocDto.java @@ -100,5 +100,26 @@ public class InputDocDto { private String remark; } + @Data + @ApiModel("根据任务id查询文档上传记录") + public static class FindDocRecordByTask{ + @NotNull(message = "请选择任务") + @ApiModelProperty("任务详情id") + private Long taskId; + @ApiModelProperty("页码") + private Integer pageNum = 1; + @ApiModelProperty("分页大小") + private Integer PageSize = 10; + + } + + @Data + @ApiModel("删除输入文档下所有的文件") + public static class DelAllRecordOfTask{ + @NotNull(message = "请选择输入文档") + @ApiModelProperty("输入文档id") + private Long docId; + } + } diff --git a/tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java b/tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java index c4474a31..29dab668 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java +++ b/tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java @@ -85,20 +85,20 @@ public class TaskDto { @Data @ApiModel("添加时设置任务提醒") public static class TaskRemindByAdd{ - @ApiModelProperty("提醒时机 0不提醒 1开始前,2开始时,3开始后,4结束前,5结束时,6结束后,7自定义时间") - private Byte remindTiming; + @ApiModelProperty("提醒时机 0不提醒 1开始前,2开始时,3开始后,4结束前,5结束时,6结束后") + private Byte remindTiming = 0; @ApiModelProperty("时长 提醒时机是“开始时”或“结束时”可以为空") private Long duration = 0L; - @ApiModelProperty("时间单位 0分钟 1小时 2天") + @ApiModelProperty("时间单位 0分钟 1小时 2天 3秒") private Byte unit; public Long getDuration(){ if(ObjectUtil.isNull(unit)) { throw new BaseException("时间单位不能为空"); } - if(remindTiming == 7){ - return duration; - } +// if(remindTiming == 7){ +// return duration; +// } switch (unit) { case 0: return duration * 60 * 1000L; @@ -106,6 +106,8 @@ public class TaskDto { return duration * 60 * 60 * 1000L; case 2: return duration * 24 * 60 * 60 * 1000L; + case 3: + return duration * 1000L; default: return duration; } @@ -321,9 +323,9 @@ public class TaskDto { if(ObjectUtil.isNull(unit)) { throw new BaseException("时间单位不能为空"); } - if(remindTiming == 7){ - return duration; - } +// if(remindTiming == 7){ +// return duration; +// } switch (unit) { case 0: return duration * 60 * 1000L; @@ -331,6 +333,8 @@ public class TaskDto { return duration * 60 * 60 * 1000L; case 2: return duration * 24 * 60 * 60 * 1000L; + case 3: + return duration * 1000L; default: return duration; } diff --git a/tall/src/main/java/com/ccsens/tall/bean/po/SysOperation.java b/tall/src/main/java/com/ccsens/tall/bean/po/SysOperation.java index 5a9bca1c..3fcceaee 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/po/SysOperation.java +++ b/tall/src/main/java/com/ccsens/tall/bean/po/SysOperation.java @@ -20,6 +20,8 @@ public class SysOperation implements Serializable { private Byte recStatus; + private Long taskDetailId; + private static final long serialVersionUID = 1L; public Long getId() { @@ -86,6 +88,14 @@ public class SysOperation implements Serializable { this.recStatus = recStatus; } + public Long getTaskDetailId() { + return taskDetailId; + } + + public void setTaskDetailId(Long taskDetailId) { + this.taskDetailId = taskDetailId; + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -100,6 +110,7 @@ public class SysOperation implements Serializable { sb.append(", createdAt=").append(createdAt); sb.append(", updatedAt=").append(updatedAt); sb.append(", recStatus=").append(recStatus); + sb.append(", taskDetailId=").append(taskDetailId); sb.append("]"); return sb.toString(); } diff --git a/tall/src/main/java/com/ccsens/tall/bean/po/SysOperationExample.java b/tall/src/main/java/com/ccsens/tall/bean/po/SysOperationExample.java index d37f5397..fe396c2d 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/po/SysOperationExample.java +++ b/tall/src/main/java/com/ccsens/tall/bean/po/SysOperationExample.java @@ -584,6 +584,66 @@ public class SysOperationExample { addCriterion("rec_status not between", value1, value2, "recStatus"); return (Criteria) this; } + + public Criteria andTaskDetailIdIsNull() { + addCriterion("task_detail_id is null"); + return (Criteria) this; + } + + public Criteria andTaskDetailIdIsNotNull() { + addCriterion("task_detail_id is not null"); + return (Criteria) this; + } + + public Criteria andTaskDetailIdEqualTo(Long value) { + addCriterion("task_detail_id =", value, "taskDetailId"); + return (Criteria) this; + } + + public Criteria andTaskDetailIdNotEqualTo(Long value) { + addCriterion("task_detail_id <>", value, "taskDetailId"); + return (Criteria) this; + } + + public Criteria andTaskDetailIdGreaterThan(Long value) { + addCriterion("task_detail_id >", value, "taskDetailId"); + return (Criteria) this; + } + + public Criteria andTaskDetailIdGreaterThanOrEqualTo(Long value) { + addCriterion("task_detail_id >=", value, "taskDetailId"); + return (Criteria) this; + } + + public Criteria andTaskDetailIdLessThan(Long value) { + addCriterion("task_detail_id <", value, "taskDetailId"); + return (Criteria) this; + } + + public Criteria andTaskDetailIdLessThanOrEqualTo(Long value) { + addCriterion("task_detail_id <=", value, "taskDetailId"); + return (Criteria) this; + } + + public Criteria andTaskDetailIdIn(List values) { + addCriterion("task_detail_id in", values, "taskDetailId"); + return (Criteria) this; + } + + public Criteria andTaskDetailIdNotIn(List values) { + addCriterion("task_detail_id not in", values, "taskDetailId"); + return (Criteria) this; + } + + public Criteria andTaskDetailIdBetween(Long value1, Long value2) { + addCriterion("task_detail_id between", value1, value2, "taskDetailId"); + return (Criteria) this; + } + + public Criteria andTaskDetailIdNotBetween(Long value1, Long value2) { + addCriterion("task_detail_id not between", value1, value2, "taskDetailId"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/tall/src/main/java/com/ccsens/tall/bean/vo/InputDocVo.java b/tall/src/main/java/com/ccsens/tall/bean/vo/InputDocVo.java index 89d5ffb1..fe7cbb96 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/vo/InputDocVo.java +++ b/tall/src/main/java/com/ccsens/tall/bean/vo/InputDocVo.java @@ -1,11 +1,13 @@ package com.ccsens.tall.bean.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -62,5 +64,18 @@ public class InputDocVo { private String status; } + @Data + @ApiModel("根据任务id查看输入输出文档记录") + public static class DocRecordOfTask{ + @JsonIgnore + @ApiModelProperty("消息操作ID") + private Long operationId; + @JsonFormat(pattern="yyyy-MM-dd HH:mm") + @ApiModelProperty("发送时间") + private Date createTime; + @ApiModelProperty("文件名称") + List messages; + } + } diff --git a/tall/src/main/java/com/ccsens/tall/bean/vo/MessageVo.java b/tall/src/main/java/com/ccsens/tall/bean/vo/MessageVo.java index a09d3c7d..efe3218f 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/vo/MessageVo.java +++ b/tall/src/main/java/com/ccsens/tall/bean/vo/MessageVo.java @@ -36,6 +36,8 @@ public class MessageVo { private Long projectId; @ApiModelProperty("操作者ID") private Long operatorId; + @ApiModelProperty("任务id") + private Long taskId; @ApiModelProperty("消息列表") private List messages = new ArrayList<>(); @@ -47,6 +49,12 @@ public class MessageVo { this.operatorId = operatorId; } + public Inform(Long projectId, Long operatorId, Long taskId) { + this.projectId = projectId; + this.operatorId = operatorId; + this.taskId = taskId; + } + public Inform appendMessage(Message message) { messages.add(message); return this; @@ -204,4 +212,58 @@ public class MessageVo { .appendMessage(new MessageVo.Message(WebConstant.TemplateParam.TaskName.value,taskName)); return inform; } + + /** + * 上传输入文档 + * @param userId + * @param userName + * @param projectId + * @param projectName + * @param taskName + * @return + */ + public static Inform uploadForDocComment(Long userId, String userName, Long projectId, String projectName, String taskName,String deliverName,Long taskId) { + MessageVo.Inform inform = new MessageVo.Inform(projectId, userId,taskId); + inform.appendMessage(new MessageVo.Message(WebConstant.TemplateParam.Operator.value, userName)) + .appendMessage(new MessageVo.Message(WebConstant.TemplateParam.ProjectName.value, projectName, WebConstant.Message.TYPE_LINK, Message.getProjectSettings(projectId))) + .appendMessage(new MessageVo.Message(WebConstant.TemplateParam.TaskName.value,taskName)) + .appendMessage(new MessageVo.Message(WebConstant.TemplateParam.Deliverable.value,deliverName)); + return inform; + } + + /** + * 删除输入文档 + * @param userId + * @param userName + * @param projectId + * @param projectName + * @param taskName + * @return + */ + public static Inform delDocComment(Long userId, String userName, Long projectId, String projectName, String taskName,String deliverName,Long taskId) { + MessageVo.Inform inform = new MessageVo.Inform(projectId, userId,taskId); + inform.appendMessage(new MessageVo.Message(WebConstant.TemplateParam.Operator.value, userName)) + .appendMessage(new MessageVo.Message(WebConstant.TemplateParam.ProjectName.value, projectName, WebConstant.Message.TYPE_LINK, Message.getProjectSettings(projectId))) + .appendMessage(new MessageVo.Message(WebConstant.TemplateParam.TaskName.value,taskName)) + .appendMessage(new MessageVo.Message(WebConstant.TemplateParam.Deliverable.value,deliverName)); + return inform; + } + + /** + * 修改输入文档 + * @param userId + * @param userName + * @param projectId + * @param projectName + * @param taskName + * @return + */ + public static Inform updateDocRemarkComment(Long userId, String userName, Long projectId, String projectName, String taskName,String deliverName,Long taskId) { + MessageVo.Inform inform = new MessageVo.Inform(projectId, userId,taskId); + inform.appendMessage(new MessageVo.Message(WebConstant.TemplateParam.Operator.value, userName)) + .appendMessage(new MessageVo.Message(WebConstant.TemplateParam.ProjectName.value, projectName, WebConstant.Message.TYPE_LINK, Message.getProjectSettings(projectId))) + .appendMessage(new MessageVo.Message(WebConstant.TemplateParam.TaskName.value,taskName)) + .appendMessage(new MessageVo.Message(WebConstant.TemplateParam.Deliverable.value,deliverName)); + return inform; + } } diff --git a/tall/src/main/java/com/ccsens/tall/bean/vo/RoleVo.java b/tall/src/main/java/com/ccsens/tall/bean/vo/RoleVo.java index e28a5382..81364a5c 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/vo/RoleVo.java +++ b/tall/src/main/java/com/ccsens/tall/bean/vo/RoleVo.java @@ -1,6 +1,5 @@ package com.ccsens.tall.bean.vo; -import com.sun.org.apache.xpath.internal.operations.Bool; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/tall/src/main/java/com/ccsens/tall/persist/dao/ProRoleDao.java b/tall/src/main/java/com/ccsens/tall/persist/dao/ProRoleDao.java index ca3fe9e5..fa532290 100644 --- a/tall/src/main/java/com/ccsens/tall/persist/dao/ProRoleDao.java +++ b/tall/src/main/java/com/ccsens/tall/persist/dao/ProRoleDao.java @@ -17,6 +17,7 @@ public interface ProRoleDao extends ProRoleMapper{ List selectFirstRoleByProjectIdAndUserId(@Param("projectId") Long projectId, @Param("userId") Long userId); List selectSecondRolesByProjectId(@Param("projectId") Long projectId); + List selectSecondRolesShowByProjectId(@Param("projectId") Long projectId); List selectCareLessRoleByProjectIdAndUserId(@Param("projectId") Long projectId, @Param("userId") Long currentUserId); @@ -85,6 +86,13 @@ public interface ProRoleDao extends ProRoleMapper{ */ List queryRoleShowslistBefore(Long projectId, List listBeforeId); + /** + * 根据角色id查询要展示的角色 + * @param projectId + * @return + */ + List selectSecondRolesShowByRoleId(@Param("projectId") Long projectId,@Param("roleIdList") List roleIdList); + // /** // * 查找项目下的所有成员的名字用“,”分隔 // * @param projectId 项目id diff --git a/tall/src/main/java/com/ccsens/tall/persist/dao/SysOperationDao.java b/tall/src/main/java/com/ccsens/tall/persist/dao/SysOperationDao.java index c63a9009..83968aea 100644 --- a/tall/src/main/java/com/ccsens/tall/persist/dao/SysOperationDao.java +++ b/tall/src/main/java/com/ccsens/tall/persist/dao/SysOperationDao.java @@ -1,6 +1,8 @@ package com.ccsens.tall.persist.dao; import com.ccsens.tall.bean.dto.ProjectMessageDto; +import com.ccsens.tall.bean.po.SysOperation; +import com.ccsens.tall.bean.vo.InputDocVo; import com.ccsens.tall.bean.vo.MessageVo; import com.ccsens.tall.bean.vo.ProjectMessageVo; import com.ccsens.tall.persist.mapper.SysOperationMapper; @@ -39,4 +41,11 @@ public interface SysOperationDao extends SysOperationMapper { * @return */ List queryProjectMsg(ProjectMessageDto.ProjectMsg param); + + /** + * 查询任务下的输入输入文档消息id + * @param taskId + * @return + */ + List findMessageByOperate(Long taskId); } diff --git a/tall/src/main/java/com/ccsens/tall/persist/dao/SysOperationMessageDao.java b/tall/src/main/java/com/ccsens/tall/persist/dao/SysOperationMessageDao.java new file mode 100644 index 00000000..5f3c02e3 --- /dev/null +++ b/tall/src/main/java/com/ccsens/tall/persist/dao/SysOperationMessageDao.java @@ -0,0 +1,19 @@ +package com.ccsens.tall.persist.dao; + +import com.ccsens.tall.bean.vo.MessageVo; +import com.ccsens.tall.persist.mapper.SysOperationMessageMapper; + +import java.util.List; + +/** + * @author mz + */ +public interface SysOperationMessageDao extends SysOperationMessageMapper { + + /** + * 查看消息内容 + * @param operationId 操作id + * @return + */ + List selectContentByOpId(Long operationId); +} diff --git a/tall/src/main/java/com/ccsens/tall/persist/mapper/SysOperationMessageMapper.java b/tall/src/main/java/com/ccsens/tall/persist/mapper/SysOperationMessageMapper.java index e6d044c0..13ae174e 100644 --- a/tall/src/main/java/com/ccsens/tall/persist/mapper/SysOperationMessageMapper.java +++ b/tall/src/main/java/com/ccsens/tall/persist/mapper/SysOperationMessageMapper.java @@ -2,9 +2,10 @@ package com.ccsens.tall.persist.mapper; import com.ccsens.tall.bean.po.SysOperationMessage; import com.ccsens.tall.bean.po.SysOperationMessageExample; -import java.util.List; import org.apache.ibatis.annotations.Param; +import java.util.List; + public interface SysOperationMessageMapper { long countByExample(SysOperationMessageExample example); diff --git a/tall/src/main/java/com/ccsens/tall/service/IInputDocService.java b/tall/src/main/java/com/ccsens/tall/service/IInputDocService.java index c9c0dddc..2d769a92 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IInputDocService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IInputDocService.java @@ -6,6 +6,8 @@ import com.ccsens.tall.bean.vo.InputDocVo; import com.ccsens.tall.bean.vo.LwbsVo; import com.ccsens.tall.bean.vo.TaskVo; import com.ccsens.util.bean.dto.QueryDto; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageInfo; import java.util.List; @@ -45,7 +47,7 @@ public interface IInputDocService { * @param param docId 文档id * fileId 文件id */ - void uploadForDoc(InputDocDto.UploadForDoc param,Long userId); + void uploadForDoc(InputDocDto.UploadForDoc param,Long userId) throws Exception; /** * 查看文档文件上传记录 @@ -76,11 +78,24 @@ public interface IInputDocService { * 删除输入文档中的文件 * @param param */ - void delDocOfFile(InputDocDto.DeleteDocOfFile param); + void delDocOfFile(InputDocDto.DeleteDocOfFile param,Long userId) throws Exception; /** * 修改上传文件的备注信息 * @param param */ - void updateDocOfRemark(InputDocDto.UpdateDocOfRemark param); + void updateDocOfRemark(InputDocDto.UpdateDocOfRemark param,Long userId) throws Exception; + + /** + * 查询历史记录(根据任务id) + * @param param + * @return + */ + PageInfo findDocRecordByTask(InputDocDto.FindDocRecordByTask param); + + /** + * 删除输入文档下所有的文件 + * @param param 输入文档id + */ + void delAllRecordOfTask(InputDocDto.DelAllRecordOfTask param); } diff --git a/tall/src/main/java/com/ccsens/tall/service/IRobotService.java b/tall/src/main/java/com/ccsens/tall/service/IRobotService.java index dab530d2..060b8303 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IRobotService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IRobotService.java @@ -70,6 +70,33 @@ public interface IRobotService { */ void addCommentRobotSend(Long userId, ProTaskDetail proTaskDetail) throws Exception; + /** + * 上传输入文档的文件消息记录 + * @param currentUserId + * @param task + * @param deliverable + * @throws Exception + */ + void uploadForDocRobotSend(Long currentUserId,ProTaskDetail task,String deliverable) throws Exception; + + /** + * 删除输入文档中的文件消息记录 + * @param userId + * @param taskDetail + * @param name + * @throws Exception + */ + void delDocRobotSend(Long userId, ProTaskDetail taskDetail, String name) throws Exception; + + /** + * 修改输入文档中的备注 消息记录 + * @param userId + * @param taskDetail + * @param name + * @throws Exception + */ + void updateRemarkRobotSend(Long userId, ProTaskDetail taskDetail, String name) throws Exception; + /** * 查询模板 * @param code @@ -82,4 +109,6 @@ public interface IRobotService { * @param taskRemind 需要发送的任务信息 */ void sendRemindByRobot(TaskVo.RemindTask taskRemind,String content) throws Exception; + + } diff --git a/tall/src/main/java/com/ccsens/tall/service/InputDocService.java b/tall/src/main/java/com/ccsens/tall/service/InputDocService.java index e27f4d0c..8d8e1ae7 100644 --- a/tall/src/main/java/com/ccsens/tall/service/InputDocService.java +++ b/tall/src/main/java/com/ccsens/tall/service/InputDocService.java @@ -13,11 +13,8 @@ import com.ccsens.tall.bean.dto.InputDocDto; import com.ccsens.tall.bean.dto.LwbsDto; import com.ccsens.tall.bean.po.*; -import com.ccsens.tall.bean.vo.FileVo; -import com.ccsens.tall.bean.vo.InputDocVo; -import com.ccsens.tall.bean.vo.LwbsVo; -import com.ccsens.tall.bean.vo.TaskVo; -import com.ccsens.tall.persist.dao.IInputDocDao; +import com.ccsens.tall.bean.vo.*; +import com.ccsens.tall.persist.dao.*; import com.ccsens.tall.persist.mapper.*; import com.ccsens.tall.util.TaskUtil; @@ -27,6 +24,9 @@ import com.ccsens.util.JsonResponse; import com.ccsens.util.PropUtil; import com.ccsens.util.RestTemplateUtil; import com.ccsens.util.exception.BaseException; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; @@ -52,7 +52,17 @@ public class InputDocService implements IInputDocService { @Resource private Snowflake snowflake; @Resource - private FileMapper fileMapper; + private TaskDetailDao taskDetailDao; + @Resource + private TaskSubTimeDao taskSubTimeDao; + @Resource + private RobotService robotService; + @Resource + private ProTaskDetailMapper proTaskDetailMapper; + @Resource + private SysOperationDao sysOperationDao; + @Resource + private SysOperationMessageDao sysOperationMessageDao; @@ -173,7 +183,17 @@ public class InputDocService implements IInputDocService { */ @Override public List findDocByTask(InputDocDto.FindDocByTask param) { - List docByTasks = iInputDocDao.findDocByTask(param.getTaskId()); + //查询任务分解后 + ProTaskSubTime proTaskSubTime = taskSubTimeDao.selectByPrimaryKey(param.getTaskId()); + if(ObjectUtil.isNull(proTaskSubTime)){ + throw new BaseException(CodeEnum.NOT_TASK); + } + //查询任务详情 + ProTaskDetail taskDetail = taskDetailDao.selectByPrimaryKey(proTaskSubTime.getTaskDetailId()); + if(ObjectUtil.isNull(taskDetail)){ + throw new BaseException(CodeEnum.NOT_TASK); + } + List docByTasks = iInputDocDao.findDocByTask(taskDetail.getId()); for (InputDocVo.DocOfTask docs:docByTasks){ for (InputDocVo.Record record:docs.getRecords()){ if(ObjectUtil.isNotNull(record.getFileIds())) { @@ -198,26 +218,6 @@ public class InputDocService implements IInputDocService { } -// if (record.getFileIds().contains(",")){ -// String[] split = record.getFileIds().split(","); -// for (int i = 0; i < split.length; i++) { -// -// -//// File file = fileMapper.selectByPrimaryKey(Long.valueOf(split[i])); -//// InputDocVo.File nowFile = new InputDocVo.File(); -//// nowFile.setFileName(file.getFileName()); -//// nowFile.setFileUrl(file.getVisitLocation()); -//// record.getFileList().add(nowFile); -// } -// }else{ -// if (StrUtil.isNotBlank(record.getFileIds())){ -//// File file = fileMapper.selectByPrimaryKey(Long.valueOf(record.getFileIds())); -//// InputDocVo.File nowFile = new InputDocVo.File(); -//// nowFile.setFileName(file.getFileName()); -//// nowFile.setFileUrl(file.getVisitLocation()); -//// record.getFileList().add(nowFile); -// } -// } } } return docByTasks; @@ -228,17 +228,13 @@ public class InputDocService implements IInputDocService { * @param param docId 文档id */ @Override - public void uploadForDoc(InputDocDto.UploadForDoc param,Long userId) { - //将之前的文件设置为不使用 -// ProTaskInputRecordExample proTaskInputRecordExample = new ProTaskInputRecordExample(); -// proTaskInputRecordExample.createCriteria().andInputDocIdEqualTo(param.getDocId()); -// ProTaskInputRecord newProTaskInputRecord = new ProTaskInputRecord(); -// newProTaskInputRecord.setStatus((byte)0); -// proTaskInputRecordMapper.updateByExampleSelective(newProTaskInputRecord,proTaskInputRecordExample); + public void uploadForDoc(InputDocDto.UploadForDoc param,Long userId) throws Exception{ + if (ArrayUtil.isEmpty(param.getFileIds()) && StrUtil.isBlank(param.getRemark())){ throw new BaseException("请上传文件或填写备注信息"); } - if (ObjectUtil.isNull(proTaskInputDocMapper.selectByPrimaryKey(param.getDocId()))){ + ProTaskInputDoc doc = proTaskInputDocMapper.selectByPrimaryKey(param.getDocId()); + if (ObjectUtil.isNull(doc)){ throw new BaseException("输入文档不存在或已删除"); } //多文件添加 @@ -265,7 +261,7 @@ public class InputDocService implements IInputDocService { } //如果备注信息不为空 - if (!StrUtil.isBlank(param.getRemark())){ + if (!StrUtil.isBlank(param.getRemark()) && ArrayUtil.isEmpty(param.getFileIds())){ ProTaskInputRecord proTaskInputRecord = new ProTaskInputRecord(); proTaskInputRecord.setInputDocId(param.getDocId()); proTaskInputRecord.setStatus((byte)1); @@ -281,6 +277,11 @@ public class InputDocService implements IInputDocService { proTaskInputDocMapper.updateByPrimaryKeySelective(proTaskInputDoc); } + //TODO 发送消息 + ProTaskDetail taskDetail = proTaskDetailMapper.selectByPrimaryKey(doc.getTaskDetailId()); + if (ObjectUtil.isNotNull(taskDetail)){ + robotService.uploadForDocRobotSend(userId,taskDetail,doc.getName()); + } } @@ -292,8 +293,7 @@ public class InputDocService implements IInputDocService { */ @Override public List viewDocHistory(InputDocDto.ViewDocHistory param) { - List historyRecords = iInputDocDao.viewDocHistory(param.getDocId()); - return historyRecords; + return iInputDocDao.viewDocHistory(param.getDocId()); } /** @@ -350,19 +350,6 @@ public class InputDocService implements IInputDocService { } } - //删除记录表中已上传的文档 -// if (1 == proTaskInputDoc.getIsUpload()){ -// ProTaskInputRecordExample proTaskInputRecordExample = new ProTaskInputRecordExample(); -// proTaskInputRecordExample.createCriteria().andInputDocIdEqualTo(param.getDocId()); -// List proTaskInputRecords = proTaskInputRecordMapper.selectByExample(proTaskInputRecordExample); -// for (ProTaskInputRecord record:proTaskInputRecords){ -// ProTaskInputRecord inputRecord = new ProTaskInputRecord(); -// inputRecord.setId(record.getId()); -// inputRecord.setStatus((byte)0); -// inputRecord.setRecStatus((byte)2); -// proTaskInputRecordMapper.updateByPrimaryKeySelective(inputRecord); -// } -// } //修改数据 ProTaskInputDoc newDoc = new ProTaskInputDoc(); @@ -396,6 +383,8 @@ public class InputDocService implements IInputDocService { proTaskInputDoc.setId(param.getDocId()); proTaskInputDoc.setRecStatus((byte)2); proTaskInputDocMapper.updateByPrimaryKeySelective(proTaskInputDoc); + + } /** @@ -403,9 +392,15 @@ public class InputDocService implements IInputDocService { * @param param */ @Override - public void delDocOfFile(InputDocDto.DeleteDocOfFile param) { + public void delDocOfFile(InputDocDto.DeleteDocOfFile param,Long userId) throws Exception{ //查看该输入文档下是否还有正在使用的文件 ProTaskInputRecord proTaskInputRecord = proTaskInputRecordMapper.selectByPrimaryKey(param.getRecordId()); + if (ObjectUtil.isNull(proTaskInputRecord)){ + throw new BaseException(CodeEnum.FILE_NOT_FOUND); + } + //查出文档信息找到任务信息 + ProTaskInputDoc doc = proTaskInputDocMapper.selectByPrimaryKey(proTaskInputRecord.getInputDocId()); + //删除输入文档中的文件 ProTaskInputRecord record = new ProTaskInputRecord(); @@ -414,7 +409,7 @@ public class InputDocService implements IInputDocService { proTaskInputRecordMapper.updateByPrimaryKeySelective(record); ProTaskInputRecordExample proTaskInputRecordExample = new ProTaskInputRecordExample(); - proTaskInputRecordExample.createCriteria().andRecStatusEqualTo((byte)1) + proTaskInputRecordExample.createCriteria().andRecStatusEqualTo((byte)0) .andInputDocIdEqualTo(proTaskInputRecord.getInputDocId()); List proTaskInputRecords = proTaskInputRecordMapper.selectByExample(proTaskInputRecordExample); //如果没有将输入文档状态改为未上传 @@ -425,6 +420,12 @@ public class InputDocService implements IInputDocService { proTaskInputDocMapper.updateByPrimaryKeySelective(proTaskInputDoc); } + //TODO 发送消息 + ProTaskDetail taskDetail = proTaskDetailMapper.selectByPrimaryKey(doc.getTaskDetailId()); + if (ObjectUtil.isNotNull(taskDetail)){ + robotService.delDocRobotSend(userId,taskDetail,doc.getName()); + } + } /** @@ -432,13 +433,62 @@ public class InputDocService implements IInputDocService { * @param param */ @Override - public void updateDocOfRemark(InputDocDto.UpdateDocOfRemark param) { + public void updateDocOfRemark(InputDocDto.UpdateDocOfRemark param,Long userId) throws Exception{ ProTaskInputRecord record = new ProTaskInputRecord(); record.setId(param.getRecordId()); if (StrUtil.isNotBlank(param.getRemark())){ record.setRemark(param.getRemark()); } proTaskInputRecordMapper.updateByPrimaryKeySelective(record); + + //TODO 发送消息 + ProTaskInputRecord inputRecord = proTaskInputRecordMapper.selectByPrimaryKey(record.getId()); + if (ObjectUtil.isNull(inputRecord)){ + throw new BaseException(CodeEnum.FILE_NOT_FOUND); + } + ProTaskInputDoc doc = proTaskInputDocMapper.selectByPrimaryKey(inputRecord.getInputDocId()); + ProTaskDetail taskDetail = proTaskDetailMapper.selectByPrimaryKey(doc.getTaskDetailId()); + if (ObjectUtil.isNotNull(taskDetail)){ + robotService.updateRemarkRobotSend(userId,taskDetail,doc.getName()); + } + } + + /** + * 查询历史记录(根据任务id) + * @param param + * @return + */ + @Override + public PageInfo findDocRecordByTask(InputDocDto.FindDocRecordByTask param) { + PageHelper.startPage(param.getPageNum(),param.getPageSize()); + + List sysOperations = sysOperationDao.findMessageByOperate(param.getTaskId()); + sysOperations.forEach(sysOperation -> { + List sysOperationMessages = sysOperationMessageDao.selectContentByOpId(sysOperation.getOperationId()); + sysOperation.setMessages(sysOperationMessages); + }); + + return new PageInfo<>(sysOperations); + } + + /** + * 删除输入文档下所有的文件 + * @param param 输入文档id + */ + @Override + public void delAllRecordOfTask(InputDocDto.DelAllRecordOfTask param) { + ProTaskInputRecordExample example = new ProTaskInputRecordExample(); + example.createCriteria().andInputDocIdEqualTo(param.getDocId()).andRecStatusEqualTo((byte)0); + List records = proTaskInputRecordMapper.selectByExample(example); + if (ObjectUtil.isNotNull(records)){ + ProTaskInputRecordExample example2 = new ProTaskInputRecordExample(); + example2.createCriteria().andInputDocIdEqualTo(param.getDocId()); + ProTaskInputRecord proTaskInputRecord = new ProTaskInputRecord(); + proTaskInputRecord.setRecStatus((byte)2); + proTaskInputRecordMapper.updateByExampleSelective(proTaskInputRecord,example2); + } + //TODO 文档 改回未上传状态 + } } diff --git a/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java b/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java index 008bf71a..0d8ae289 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java @@ -97,7 +97,7 @@ public class ProRoleService implements IProRoleService { //获取用户在项目中的角色 List roleList = proMemberService.selectRolesByUserIdAndProjectId(currentUserId, projectId, imitation); - //1.查询二级角色(项目经理+项目成员+mvp) + //1.查询二级角色(项目经理+项目成员+mvp)(所有二级角色) memberRoleList = getRealMemberRolesShowByProjectId(projectId,currentUserId); if (CollectionUtil.isNotEmpty(memberRoleList)) { @@ -253,16 +253,21 @@ public class ProRoleService implements IProRoleService { } @Override public List getRealMemberRolesShowByProjectId(Long projectId,Long userId) { + //返回的对象 + List memberRoleList; + //先从userid和项目id获取当前用户的成员id,查看role-show里面是否有这个成员的数据 ProMemberExample proMemberExample=new ProMemberExample(); - proMemberExample.createCriteria().andUserIdEqualTo(userId).andProjectIdEqualTo(projectId).andRecStatusEqualTo((byte)0); + proMemberExample.createCriteria().andUserIdEqualTo(userId).andProjectIdEqualTo(projectId); List proMembers = proMemberMapper.selectByExample(proMemberExample); Long memberId=0L; - if(CollectionUtil.isNotEmpty(proMembers)&&proMembers.size()==1){ + if(CollectionUtil.isNotEmpty(proMembers)){ memberId=proMembers.get(0).getId(); }else { - throw new BaseException(CodeEnum.CHONGFU); + memberRoleList = proRoleDao.selectSecondRolesByProjectId(projectId); + return memberRoleList; } + //查看角色展示列表中是否有数据 ProMemberRoleShowExample proMemberRoleShowExample=new ProMemberRoleShowExample(); proMemberRoleShowExample.createCriteria().andMemberIdEqualTo(memberId).andRecStatusEqualTo((byte)0); @@ -285,9 +290,8 @@ public class ProRoleService implements IProRoleService { proMemberRoleShowMapper.insertSelective(proMemberRoleShow); }); } - //这里插入项目经理 - + //这里插入项目经理 //查一下项目经理的角色id, ProRoleExample proRoleExample=new ProRoleExample(); proRoleExample.createCriteria().andRecStatusEqualTo((byte)0).andNameEqualTo(WebConstant.ROLE_NAME.PM.value).andParentIdEqualTo(0L).andProjectIdEqualTo(projectId); @@ -309,11 +313,12 @@ public class ProRoleService implements IProRoleService { //判断该成员是不是项目经理 ProMemberRoleExample proMemberRoleExample1=new ProMemberRoleExample(); - proMemberRoleExample.createCriteria().andRecStatusEqualTo((byte)0).andMemberIdEqualTo(memberId).andRoleIdEqualTo(jili1.get(0)); + proMemberRoleExample1.createCriteria().andRecStatusEqualTo((byte)0).andMemberIdEqualTo(memberId).andRoleIdEqualTo(jili1.get(0)); List proMemberRoles1 = proMemberRoleMapper.selectByExample(proMemberRoleExample1); if(CollectionUtil.isEmpty(proMemberRoles1)){ isPm[0]=false; }else { + isPm[0]=true; } @@ -348,14 +353,19 @@ public class ProRoleService implements IProRoleService { } } } - //查询二级角色 - List memberRoleList; - memberRoleList = proRoleDao.selectSecondRolesShowByProjectId(projectId); - //TODO 查询项目配置, - if(CollectionUtil.isEmpty(memberRoleList)){ - return memberRoleList; + //查看角色展示列表中是否有数据 + ProMemberRoleShowExample proMemberRoleShowExampleNew=new ProMemberRoleShowExample(); + proMemberRoleShowExampleNew.createCriteria().andMemberIdEqualTo(memberId); + List proMemberRoleShowsNew = proMemberRoleShowMapper.selectByExample(proMemberRoleShowExampleNew); + + List roleIds = new ArrayList<>(); + for (ProMemberRoleShow roleShow : proMemberRoleShowsNew) { + roleIds.add(roleShow.getRoleId()); } + //查询二级角色 + memberRoleList = proRoleDao.selectSecondRolesShowByRoleId(projectId,roleIds); + //在show表查找可见的角色 return memberRoleList; } diff --git a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java index 6a46754c..be43e90d 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java @@ -1473,6 +1473,7 @@ public class ProTaskDetailService implements IProTaskDetailService { } else { throw new BaseException(CodeEnum.NOT_TASK); } + //发送消息 robotService.changeTaskRobotSend(currentUserId, normalTask); return normalTask; } diff --git a/tall/src/main/java/com/ccsens/tall/service/ProjectMessageService.java b/tall/src/main/java/com/ccsens/tall/service/ProjectMessageService.java index 683c5981..7d2758e5 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProjectMessageService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProjectMessageService.java @@ -197,6 +197,7 @@ public class ProjectMessageService implements IProjectMessageService { operation.setProjectId(inform.getProjectId()); operation.setOperatorId(inform.getOperatorId()); operation.setOperateType((byte)operateType.value()); + operation.setTaskDetailId(inform.getTaskId()); log.info("保存操作记录:{}", operation); sysOperationDao.insertSelective(operation); // 操作内容 diff --git a/tall/src/main/java/com/ccsens/tall/service/RobotService.java b/tall/src/main/java/com/ccsens/tall/service/RobotService.java index a94a4cdc..10474ee1 100644 --- a/tall/src/main/java/com/ccsens/tall/service/RobotService.java +++ b/tall/src/main/java/com/ccsens/tall/service/RobotService.java @@ -22,6 +22,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -31,27 +32,27 @@ import java.util.concurrent.atomic.AtomicInteger; @Service @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class) public class RobotService implements IRobotService{ - @Autowired + @Resource private SysProjectDao sysProjectDao; - @Autowired + @Resource private SysRobotDao sysRobotDao; - @Autowired + @Resource private SysProjectRobotDao sysProjectRobotDao; - @Autowired + @Resource private SysMessageTypeDao sysMessageTypeDao; - @Autowired + @Resource private SysProjectRobotMessageDao projectRobotMessageDao; - @Autowired + @Resource private RedisUtil redisUtil; - @Autowired + @Resource private IUserService userService; - @Autowired + @Resource private IProRoleService proRoleService; - @Autowired + @Resource private IProMemberService proMemberService; - @Autowired + @Resource private TaskDetailDao taskDetailDao; - @Autowired + @Resource private TaskSubTimeDao taskSubTimeDao; @Override @@ -67,9 +68,7 @@ public class RobotService implements IRobotService{ String content = getRobotTemplate(operateType.value()); //获取发送参数 final String[] builder = {content}; - message.getParams().forEach(param->{ - builder[0] = builder[0].replace(param.getName(),param.getContent()); - }); + message.getParams().forEach(param-> builder[0] = builder[0].replace(param.getName(),param.getContent())); //获取机器人信息 SysRobot sysRobot = sysRobotDao.selectByPrimaryKey(sysProjectRobot.getRobotId()); @@ -111,7 +110,7 @@ public class RobotService implements IRobotService{ @Override public String getRobotTemplate(int code){ String robotKey = TallConstant.getRobotTemplateKey(code); - String template = ""; + String template; template = (String)redisUtil.get(robotKey); if(StrUtil.isEmpty(template)){ SysMessageTypeExample sysMessageTypeExample = new SysMessageTypeExample(); @@ -145,7 +144,7 @@ public class RobotService implements IRobotService{ @Override public void finishTaskRobotSend(Long currentUserId,Long projectId, String projectName, String taskName,Long executorRoleId , int completedStatus) throws Exception { String userName = userService.getUserNameByUserId(currentUserId); - String isFinish = ""; + String isFinish; if(completedStatus == 2){ isFinish = "完成"; }else { @@ -173,18 +172,18 @@ public class RobotService implements IRobotService{ @Override public void addTaskRobotSend(Long currentUserId, SysProject project, String taskName, Long executorId) throws Exception { - + //通过userID获取用户名 String userName = userService.getUserNameByUserId(currentUserId); String projectName = ""; - + //获取项目名 if(ObjectUtil.isNotNull(project)){ projectName = project.getName(); } // 获取角色名 TaskVo.RoleCheckList role = proRoleService.selectRoleByCheckOrExecutor(executorId); String executorName = ObjectUtil.isNotNull(role) ? role.getName() : ""; - + //将需填充的信息放到消息内 RobotUtil.Message message = new RobotUtil.Message(project.getId()); message.appendParams( new MessageVo.Message(WebConstant.TemplateParam.Operator.value, userName), @@ -252,7 +251,6 @@ public class RobotService implements IRobotService{ RobotUtil.setWxTemplate(WxTemplateUtil.getChangeTask(normalTask.getProjectId(), userName, normalTask.getName())); } - @Override public void addDeliverRobotSend(Long currentUserId, String deliverName, Long subTimeId,SysProject project) throws Exception { String userName = userService.getUserNameByUserId(currentUserId); @@ -388,7 +386,116 @@ public class RobotService implements IRobotService{ RobotUtil.setWxTemplate(WxTemplateUtil.getAddComment(project.getId(), userName)); } + /** + *上传输入文档文件 系统消息 + */ + @Override + public void uploadForDocRobotSend(Long currentUserId, ProTaskDetail task, String deliverable) throws Exception { + String userName = userService.getUserNameByUserId(currentUserId); + String projectName = ""; + SysProject project = sysProjectDao.selectByPrimaryKey(task.getProjectId()); + if (ObjectUtil.isNotNull(project)){ + projectName = project.getName(); + } + + //生成消息 + RobotUtil.Message message = new RobotUtil.Message(project.getId()); + message.appendParams( + new MessageVo.Message(WebConstant.TemplateParam.Operator.value,userName), + new MessageVo.Message(WebConstant.TemplateParam.ProjectName.value,projectName), + new MessageVo.Message(WebConstant.TemplateParam.TaskName.value,task.getName()), + new MessageVo.Message(WebConstant.TemplateParam.Deliverable.value,deliverable) + ); + //获取角色内成员的手机号 + String[] memberPhone = getMemberPhonesByRoleId(task.getExecutorRole()); + if(memberPhone.length != 0){ + message.appendMentionedMobileList(memberPhone); + } + RobotUtil.setRobotMessage(message); + + MessageVo.Inform inform = MessageVo.uploadForDocComment(currentUserId, userName, project.getId(), project.getName(), task.getName(),deliverable,task.getId()); + RobotUtil.setInform(inform); + // 添加wx消息通知 + RobotUtil.setWxTemplate(WxTemplateUtil.uploadFileForDoc(project.getId(), userName,project.getName(),task.getName(),deliverable)); + + } + + /** + * 删除输入文档中的文件 + * @param userId 当前用户id + * @param taskDetail 任务详情对象 + * @param name 文档名称 + */ + @Override + public void delDocRobotSend(Long userId, ProTaskDetail taskDetail, String name) throws Exception{ + String userName = userService.getUserNameByUserId(userId); + String projectName = ""; + SysProject project = sysProjectDao.selectByPrimaryKey(taskDetail.getProjectId()); + if (ObjectUtil.isNotNull(project)){ + projectName = project.getName(); + } + + //生成消息 + RobotUtil.Message message = new RobotUtil.Message(project.getId()); + message.appendParams( + new MessageVo.Message(WebConstant.TemplateParam.Operator.value,userName), + new MessageVo.Message(WebConstant.TemplateParam.ProjectName.value,projectName), + new MessageVo.Message(WebConstant.TemplateParam.TaskName.value,taskDetail.getName()), + new MessageVo.Message(WebConstant.TemplateParam.Deliverable.value,name) + ); + //获取角色内成员的手机号 + String[] memberPhone = getMemberPhonesByRoleId(taskDetail.getExecutorRole()); + if(memberPhone.length != 0){ + message.appendMentionedMobileList(memberPhone); + } + RobotUtil.setRobotMessage(message); + + MessageVo.Inform inform = MessageVo.delDocComment(userId, userName, project.getId(), project.getName(), taskDetail.getName(),name,taskDetail.getId()); + RobotUtil.setInform(inform); + // 添加wx消息通知 + RobotUtil.setWxTemplate(WxTemplateUtil.delFileForDoc(project.getId(), userName,project.getName(),taskDetail.getName(),name)); + } + + /** + * 修改输入文档备注 消息记录 + * @param userId + * @param taskDetail + * @param name + * @throws Exception + */ + @Override + public void updateRemarkRobotSend(Long userId, ProTaskDetail taskDetail, String name) throws Exception { + String userName = userService.getUserNameByUserId(userId); + String projectName = ""; + SysProject project = sysProjectDao.selectByPrimaryKey(taskDetail.getProjectId()); + if (ObjectUtil.isNotNull(project)){ + projectName = project.getName(); + } + + //生成消息 + RobotUtil.Message message = new RobotUtil.Message(project.getId()); + message.appendParams( + new MessageVo.Message(WebConstant.TemplateParam.Operator.value,userName), + new MessageVo.Message(WebConstant.TemplateParam.ProjectName.value,projectName), + new MessageVo.Message(WebConstant.TemplateParam.TaskName.value,taskDetail.getName()), + new MessageVo.Message(WebConstant.TemplateParam.Deliverable.value,name) + ); + //获取角色内成员的手机号 + String[] memberPhone = getMemberPhonesByRoleId(taskDetail.getExecutorRole()); + if(memberPhone.length != 0){ + message.appendMentionedMobileList(memberPhone); + } + RobotUtil.setRobotMessage(message); + MessageVo.Inform inform = MessageVo.updateDocRemarkComment(userId, userName, project.getId(), project.getName(), taskDetail.getName(),name,taskDetail.getId()); + RobotUtil.setInform(inform); + // 添加wx消息通知 + RobotUtil.setWxTemplate(WxTemplateUtil.updateDocRemark(project.getId(), userName,project.getName(),taskDetail.getName(),name)); + } + + /** + * 通过机器人发送提醒消息 + */ @Override public void sendRemindByRobot(TaskVo.RemindTask taskRemind,String content) throws Exception { String[] rolePhone = getMemberPhonesByRoleId(taskRemind.getExecutorRole()); @@ -419,4 +526,7 @@ public class RobotService implements IRobotService{ }); } } + + + } diff --git a/tall/src/main/java/com/ccsens/tall/service/SysPluginService.java b/tall/src/main/java/com/ccsens/tall/service/SysPluginService.java index 820249d2..0c2110f4 100644 --- a/tall/src/main/java/com/ccsens/tall/service/SysPluginService.java +++ b/tall/src/main/java/com/ccsens/tall/service/SysPluginService.java @@ -95,7 +95,12 @@ public class SysPluginService implements ISysPluginService{ */ @Override public List findPluginOfAdded(PluginDto.FindPluginByTask param) { - List plugins = taskPluginDao.findPluginOfAdded(param.getTaskId(),param.getRoleId(),param.getPluginName(),param.getPluginType()); + //查找分解任务,通过分级任务找到任务详情 + ProTaskSubTime proTaskSubTime = taskSubTimeDao.selectByPrimaryKey(param.getTaskId()); + if (ObjectUtil.isNull(proTaskSubTime)){ + throw new BaseException("获取任务信息错误"); + } + List plugins = taskPluginDao.findPluginOfAdded(proTaskSubTime.getTaskDetailId(),param.getRoleId(),param.getPluginName(),param.getPluginType()); plugins.forEach(plugin -> { if (plugin.getFileIdList().contains(",")){ String[] split = plugin.getFileIdList().split(","); @@ -143,8 +148,14 @@ public class SysPluginService implements ISysPluginService{ */ @Override public PageInfo findPluginOfNoAdded(PluginDto.FindPluginByTaskNo param) { + //查找分解任务,通过分级任务找到任务详情 + ProTaskSubTime proTaskSubTime = taskSubTimeDao.selectByPrimaryKey(param.getTaskId()); + if (ObjectUtil.isNull(proTaskSubTime)){ + throw new BaseException("获取任务信息错误"); + } + PageHelper.startPage(param.getPageNum(),param.getPageSize()); - List plugins = taskPluginDao.findPluginOfNoAdded(param.getTaskId(),param.getRoleId(),param.getPluginName(),param.getPluginType()); + List plugins = taskPluginDao.findPluginOfNoAdded(proTaskSubTime.getTaskDetailId(),param.getRoleId(),param.getPluginName(),param.getPluginType()); plugins.forEach(plugin -> { if (plugin.getFileIdList().contains(",")){ String[] split = plugin.getFileIdList().split(","); @@ -277,8 +288,10 @@ public class SysPluginService implements ISysPluginService{ ProTaskPluginExample taskPluginExample = new ProTaskPluginExample(); taskPluginExample.createCriteria().andPluginIdEqualTo(param.getPluginId()) .andTaskDetailIdEqualTo(taskDetail.getId()) - .andMemberRoleIdNotEqualTo(param.getRoleId()); - taskPluginDao.deleteByExample(taskPluginExample); + .andMemberRoleIdEqualTo(param.getRoleId()); + ProTaskPlugin taskPlugin = new ProTaskPlugin(); + taskPlugin.setRecStatus((byte)2); + taskPluginDao.updateByExampleSelective(taskPlugin,taskPluginExample); }else { throw new BaseException("权限不足"); } diff --git a/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java b/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java index 6f8ca570..6fe29624 100644 --- a/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java +++ b/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java @@ -468,7 +468,8 @@ public class TaskDeliverService implements ITaskDeliverService { if("1".equalsIgnoreCase(filePath.getIsHistory())){ filePath.setDeleteTime(filePath.getUpdateTime().getTime()); } - //修改文件路径为可下载路径 + // TODO 修改文件路径为可下载路径 + if(StrUtil.isNotEmpty(filePath.getUrl())) { // filePath.setUrl(WebConstant.TEST_URL_BASE + filePath.getUrl()); filePath.setUrl(PropUtil.imgDomain + "/" + filePath.getUrl()); diff --git a/tall/src/main/java/com/ccsens/tall/util/RobotUtil.java b/tall/src/main/java/com/ccsens/tall/util/RobotUtil.java index db391727..0b53d544 100644 --- a/tall/src/main/java/com/ccsens/tall/util/RobotUtil.java +++ b/tall/src/main/java/com/ccsens/tall/util/RobotUtil.java @@ -24,11 +24,13 @@ public class RobotUtil { private List mentionedMobileList = new ArrayList<>(); private boolean isAtAll = false; private Long projectId; + private Long taskId; private List params = new ArrayList<>(); public Message(){ } + public Message(String msgType,Long projectId){ this.msgType = msgType; this.projectId = projectId; diff --git a/tall/src/main/java/com/ccsens/tall/util/WxTemplateUtil.java b/tall/src/main/java/com/ccsens/tall/util/WxTemplateUtil.java index a1a37e2c..533a99cf 100644 --- a/tall/src/main/java/com/ccsens/tall/util/WxTemplateUtil.java +++ b/tall/src/main/java/com/ccsens/tall/util/WxTemplateUtil.java @@ -3,6 +3,7 @@ package com.ccsens.tall.util; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; +import com.ccsens.tall.bean.po.ProTaskDetail; import com.ccsens.util.WechatUtil; import com.ccsens.util.wx.WxGzhUtil; import com.ccsens.util.wx.WxTemplateMessage; @@ -166,4 +167,58 @@ public class WxTemplateUtil { message.setData(data); return message; } + + /** + * 给输入文档上传文件 + * @param projectId + * @param userName + * @param deliverName + * @return + */ + public static WxTemplateMessage uploadFileForDoc(Long projectId, String userName,String projectName, String taskName, String deliverName) { + WxTemplateMessage message = getWxTemplateMessage(projectId); + message.setTemplate_id(WxGzhUtil.Template.TASK_PROGRESS.templateId); + WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData(); + data.setFirst(new WxTemplateMessage.TemplateSettings("")); + data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName + "在项目《"+projectName+"》内的"+taskName+"任务上传了输入文档:" + deliverName)); + data.setKeyword2(new WxTemplateMessage.TemplateSettings("上传交付物")); + message.setData(data); + return message; + } + + /** + * 删除输入文档中的文件 + * @param projectId + * @param userName + * @param deliverName + * @return + */ + public static WxTemplateMessage delFileForDoc(Long projectId, String userName,String projectName, String taskName, String deliverName) { + WxTemplateMessage message = getWxTemplateMessage(projectId); + message.setTemplate_id(WxGzhUtil.Template.TASK_PROGRESS.templateId); + WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData(); + data.setFirst(new WxTemplateMessage.TemplateSettings("")); + data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName + "删除了项目《"+projectName+"》内的"+taskName+"任务的输入文档:" + deliverName)); + data.setKeyword2(new WxTemplateMessage.TemplateSettings("删除交付物")); + message.setData(data); + return message; + } + + /** + * 修改输入文档中的备注 + * @param projectId + * @param userName + * @param deliverName + * @return + */ + public static WxTemplateMessage updateDocRemark(Long projectId, String userName,String projectName, String taskName, String deliverName) { + WxTemplateMessage message = getWxTemplateMessage(projectId); + message.setTemplate_id(WxGzhUtil.Template.TASK_PROGRESS.templateId); + WxTemplateMessage.TemplateData data = new WxTemplateMessage.TemplateData(); + data.setFirst(new WxTemplateMessage.TemplateSettings("")); + data.setKeyword1(new WxTemplateMessage.TemplateSettings(userName + "修改了项目《"+projectName+"》内的"+taskName+"任务的交付物:" + deliverName+"的备注")); + data.setKeyword2(new WxTemplateMessage.TemplateSettings("修改交付物备注")); + message.setData(data); + return message; + } } diff --git a/tall/src/main/java/com/ccsens/tall/web/DeliverController.java b/tall/src/main/java/com/ccsens/tall/web/DeliverController.java index eceabb0b..265bb901 100644 --- a/tall/src/main/java/com/ccsens/tall/web/DeliverController.java +++ b/tall/src/main/java/com/ccsens/tall/web/DeliverController.java @@ -91,20 +91,20 @@ public class DeliverController { return JsonResponse.newInstance().ok(deliverInfo); } - @ApiOperation(value = "查看输入文档的详细信息",notes = "") - @ApiImplicitParams({ - @ApiImplicitParam(name="inputId",value = "输入文档Id",required = true,paramType = "query",dataType="String"), - @ApiImplicitParam(name="taskId",value = "任务Id",required = true,paramType = "query",dataType="String") - }) - @RequestMapping(value = "input", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) - public JsonResponse selectInput(HttpServletRequest request, - @RequestParam(required = true)Long inputId, Long taskId) throws Exception { - Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); - String authHeader = request.getHeader(WebConstant.HEADER_KEY_TOKEN); - String token = authHeader.substring(WebConstant.HEADER_KEY_TOKEN_PREFIX.length()); - DeliverVo.DeliverInfo deliverInfo = deliverService.selectDeliverInfo(currentUserId,inputId,taskId,token); - return JsonResponse.newInstance().ok(deliverInfo); - } +// @ApiOperation(value = "查看输入文档的详细信息",notes = "") +// @ApiImplicitParams({ +// @ApiImplicitParam(name="inputId",value = "输入文档Id",required = true,paramType = "query",dataType="String"), +// @ApiImplicitParam(name="taskId",value = "任务Id",required = true,paramType = "query",dataType="String") +// }) +// @RequestMapping(value = "input", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) +// public JsonResponse selectInput(HttpServletRequest request, +// @RequestParam(required = true)Long inputId, Long taskId) throws Exception { +// Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); +// String authHeader = request.getHeader(WebConstant.HEADER_KEY_TOKEN); +// String token = authHeader.substring(WebConstant.HEADER_KEY_TOKEN_PREFIX.length()); +// DeliverVo.DeliverInfo deliverInfo = deliverService.selectDeliverInfo(currentUserId,inputId,taskId,token); +// return JsonResponse.newInstance().ok(deliverInfo); +// } @OperateType(value = 9) @ApiOperation(value = "检查人评价交付物",notes = "") diff --git a/tall/src/main/java/com/ccsens/tall/web/InputDocController.java b/tall/src/main/java/com/ccsens/tall/web/InputDocController.java index c44a22f4..556bd62e 100644 --- a/tall/src/main/java/com/ccsens/tall/web/InputDocController.java +++ b/tall/src/main/java/com/ccsens/tall/web/InputDocController.java @@ -9,7 +9,10 @@ import com.ccsens.tall.bean.vo.LabelVo; import com.ccsens.tall.service.IInputDocService; import com.ccsens.util.JsonResponse; import com.ccsens.util.WebConstant; +import com.ccsens.util.annotation.OperateType; import com.ccsens.util.bean.dto.QueryDto; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageInfo; import io.jsonwebtoken.Claims; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -31,7 +34,7 @@ import java.util.List; @RequestMapping("/inputDoc") public class InputDocController { - @Autowired + @Resource private IInputDocService iInputDocService; /*@MustLogin @@ -44,7 +47,7 @@ public class InputDocController { return JsonResponse.newInstance().ok(); }*/ - @MustLogin + @MustLoginTall @ApiOperation(value = "通过任务id查询输入文档", notes = "1007:通过任务id查询输入文档") @RequestMapping(value = "/docByTask", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public JsonResponse> findDocByTask(@ApiParam @Validated @RequestBody QueryDto params) { @@ -54,27 +57,28 @@ public class InputDocController { return JsonResponse.newInstance().ok(docByTask); } - @MustLogin + @OperateType(value = 15) + @MustLoginTall @ApiOperation(value = "给输入文档上传文件", notes = "1007:给输入文档上传文件") @RequestMapping(value = "/uploadForDoc", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse uploadForDoc(@ApiParam @Validated @RequestBody QueryDto params) { + public JsonResponse uploadForDoc(@ApiParam @Validated @RequestBody QueryDto params) throws Exception{ log.info("给输入文档上传文件:{}",params); iInputDocService.uploadForDoc(params.getParam(),params.getUserId()); log.info("给输入文档上传文件"); return JsonResponse.newInstance().ok(); } - @MustLogin + @MustLoginTall @ApiOperation(value = "查看文档上传历史记录", notes = "1007:查看文档上传历史记录") @RequestMapping(value = "/viewDocHistory", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse viewDocHistory(@ApiParam @Validated @RequestBody QueryDto params) { + public JsonResponse> viewDocHistory(@ApiParam @Validated @RequestBody QueryDto params) { log.info("查看文档上传历史记录:{}",params); List historyRecords = iInputDocService.viewDocHistory(params.getParam()); log.info("查看文档上传历史记录"); return JsonResponse.newInstance().ok(historyRecords); } - @MustLogin + @MustLoginTall @ApiOperation(value = "添加输入文档", notes = "1007:添加输入文档") @RequestMapping(value = "/addDoc", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public JsonResponse addDoc(@ApiParam @Validated @RequestBody QueryDto params) { @@ -94,7 +98,7 @@ public class InputDocController { return JsonResponse.newInstance().ok(); } - @MustLogin + @MustLoginTall @ApiOperation(value = "删除输入文档", notes = "1007:删除输入文档") @RequestMapping(value = "/delDoc", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public JsonResponse delDoc(@ApiParam @Validated @RequestBody QueryDto params) { @@ -104,24 +108,46 @@ public class InputDocController { return JsonResponse.newInstance().ok(); } - @MustLogin + @OperateType(value = 16) + @MustLoginTall @ApiOperation(value = "删除输入文档中的文件", notes = "1007:删除输入文档中的文件") @RequestMapping(value = "/delDocOfFile", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse delDocOfFile(@ApiParam @Validated @RequestBody QueryDto params) { + public JsonResponse delDocOfFile(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { log.info("删除输入文档中的文件:{}",params); - iInputDocService.delDocOfFile(params.getParam()); + iInputDocService.delDocOfFile(params.getParam(),params.getUserId()); log.info("删除输入文档中的文件"); return JsonResponse.newInstance().ok(); } - @MustLogin + @OperateType(value = 14) + @MustLoginTall @ApiOperation(value = "修改上传文件的备注信息", notes = "1007:修改上传文件的备注信息") @RequestMapping(value = "/updateDocOfRemark", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse updateDocOfRemark(@ApiParam @Validated @RequestBody QueryDto params) { + public JsonResponse updateDocOfRemark(@ApiParam @Validated @RequestBody QueryDto params) throws Exception{ log.info("修改上传文件的备注信息:{}",params); - iInputDocService.updateDocOfRemark(params.getParam()); + iInputDocService.updateDocOfRemark(params.getParam(),params.getUserId()); log.info("修改上传文件的备注信息"); return JsonResponse.newInstance().ok(); } + @MustLoginTall + @ApiOperation(value = "查询历史记录(根据任务id)", notes = "1007:查询输入文档上传记录") + @RequestMapping(value = "/docRecordByTask", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse> findDocRecordByTask(@ApiParam @Validated @RequestBody QueryDto params) { + log.info("查询输入文档上传记录:{}",params); + PageInfo docRecordByTask = iInputDocService.findDocRecordByTask(params.getParam()); + log.info("查询输入文档上传记录"); + return JsonResponse.newInstance().ok(docRecordByTask); + } + + @MustLoginTall + @ApiOperation(value = "删除输入文档下所有的文件", notes = "1007:删除输入文档下所有的文件") + @RequestMapping(value = "/delAllRecordOfTask", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse delAllRecordOfTask(@ApiParam @Validated @RequestBody QueryDto params) { + log.info("删除输入文档下所有的文件:{}",params); + iInputDocService.delAllRecordOfTask(params.getParam()); + log.info("删除输入文档下所有的文件"); + return JsonResponse.newInstance().ok(); + } + } diff --git a/tall/src/main/resources/mapper_dao/IInputDocDao.xml b/tall/src/main/resources/mapper_dao/IInputDocDao.xml index 367191cb..560b5867 100644 --- a/tall/src/main/resources/mapper_dao/IInputDocDao.xml +++ b/tall/src/main/resources/mapper_dao/IInputDocDao.xml @@ -159,12 +159,11 @@ tir.remark AS remark FROM t_pro_task_input_doc AS tid - LEFT JOIN t_pro_task_input_record AS tir ON tid.id = tir.input_doc_id + LEFT JOIN t_pro_task_input_record AS tir ON tid.id = tir.input_doc_id and tir.rec_status = 0 WHERE tid.task_detail_id = #{taskId} - AND tid.is_upload = 1 AND tid.rec_status = 0 - AND tir.rec_status = 0 + + + + + \ No newline at end of file diff --git a/tall/src/main/resources/mapper_dao/SysOperationMessageDao.xml b/tall/src/main/resources/mapper_dao/SysOperationMessageDao.xml new file mode 100644 index 00000000..2d178cc9 --- /dev/null +++ b/tall/src/main/resources/mapper_dao/SysOperationMessageDao.xml @@ -0,0 +1,18 @@ + + + + + + + \ No newline at end of file diff --git a/tall/src/main/resources/mapper_dao/TaskDetailDao.xml b/tall/src/main/resources/mapper_dao/TaskDetailDao.xml index 0712033c..da132cda 100644 --- a/tall/src/main/resources/mapper_dao/TaskDetailDao.xml +++ b/tall/src/main/resources/mapper_dao/TaskDetailDao.xml @@ -124,7 +124,7 @@ s.end_time > #{startTime} AND - d.Level in (2,3) + d.Level > 1 AND d.has_group = 0 AND diff --git a/tall/src/main/resources/mapper_raw/SysOperationMapper.xml b/tall/src/main/resources/mapper_raw/SysOperationMapper.xml index bc28230a..2f541658 100644 --- a/tall/src/main/resources/mapper_raw/SysOperationMapper.xml +++ b/tall/src/main/resources/mapper_raw/SysOperationMapper.xml @@ -10,6 +10,7 @@ + @@ -71,7 +72,7 @@ id, operator_id, project_id, operate_type, operation_time, created_at, updated_at, - rec_status + rec_status, task_detail_id @@ -199,6 +208,9 @@ rec_status = #{record.recStatus,jdbcType=TINYINT}, + + task_detail_id = #{record.taskDetailId,jdbcType=BIGINT}, + @@ -213,7 +225,8 @@ operation_time = #{record.operationTime,jdbcType=BIGINT}, created_at = #{record.createdAt,jdbcType=TIMESTAMP}, updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, - rec_status = #{record.recStatus,jdbcType=TINYINT} + rec_status = #{record.recStatus,jdbcType=TINYINT}, + task_detail_id = #{record.taskDetailId,jdbcType=BIGINT} @@ -242,6 +255,9 @@ rec_status = #{recStatus,jdbcType=TINYINT}, + + task_detail_id = #{taskDetailId,jdbcType=BIGINT}, + where id = #{id,jdbcType=BIGINT} @@ -253,7 +269,8 @@ operation_time = #{operationTime,jdbcType=BIGINT}, created_at = #{createdAt,jdbcType=TIMESTAMP}, updated_at = #{updatedAt,jdbcType=TIMESTAMP}, - rec_status = #{recStatus,jdbcType=TINYINT} + rec_status = #{recStatus,jdbcType=TINYINT}, + task_detail_id = #{taskDetailId,jdbcType=BIGINT} where id = #{id,jdbcType=BIGINT} \ No newline at end of file diff --git a/util/src/main/java/com/ccsens/util/RestTemplateUtil.java b/util/src/main/java/com/ccsens/util/RestTemplateUtil.java index d870ddf2..89ad9df5 100644 --- a/util/src/main/java/com/ccsens/util/RestTemplateUtil.java +++ b/util/src/main/java/com/ccsens/util/RestTemplateUtil.java @@ -18,6 +18,7 @@ import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import javax.annotation.PostConstruct; +import javax.annotation.Resource; import java.net.URI; import java.net.URISyntaxException; import java.util.List; @@ -27,7 +28,7 @@ import java.util.Map; @Component public class RestTemplateUtil { - @Autowired + @Resource private RestTemplate restTemplate; private static RestTemplateUtil util;