Browse Source

Merge branch 'pt' of dd.tall.wiki:ccsens_wiki/ccsenscloud into pt

recovery
zhizhi wu 4 years ago
parent
commit
d86241bc12
  1. 2
      tall/src/main/java/com/ccsens/tall/aspect/RobotAspect.java
  2. 21
      tall/src/main/java/com/ccsens/tall/bean/dto/InputDocDto.java
  3. 22
      tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java
  4. 11
      tall/src/main/java/com/ccsens/tall/bean/po/SysOperation.java
  5. 60
      tall/src/main/java/com/ccsens/tall/bean/po/SysOperationExample.java
  6. 15
      tall/src/main/java/com/ccsens/tall/bean/vo/InputDocVo.java
  7. 62
      tall/src/main/java/com/ccsens/tall/bean/vo/MessageVo.java
  8. 1
      tall/src/main/java/com/ccsens/tall/bean/vo/RoleVo.java
  9. 8
      tall/src/main/java/com/ccsens/tall/persist/dao/ProRoleDao.java
  10. 9
      tall/src/main/java/com/ccsens/tall/persist/dao/SysOperationDao.java
  11. 19
      tall/src/main/java/com/ccsens/tall/persist/dao/SysOperationMessageDao.java
  12. 3
      tall/src/main/java/com/ccsens/tall/persist/mapper/SysOperationMessageMapper.java
  13. 21
      tall/src/main/java/com/ccsens/tall/service/IInputDocService.java
  14. 29
      tall/src/main/java/com/ccsens/tall/service/IRobotService.java
  15. 158
      tall/src/main/java/com/ccsens/tall/service/InputDocService.java
  16. 36
      tall/src/main/java/com/ccsens/tall/service/ProRoleService.java
  17. 1
      tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java
  18. 1
      tall/src/main/java/com/ccsens/tall/service/ProjectMessageService.java
  19. 150
      tall/src/main/java/com/ccsens/tall/service/RobotService.java
  20. 21
      tall/src/main/java/com/ccsens/tall/service/SysPluginService.java
  21. 3
      tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java
  22. 2
      tall/src/main/java/com/ccsens/tall/util/RobotUtil.java
  23. 55
      tall/src/main/java/com/ccsens/tall/util/WxTemplateUtil.java
  24. 28
      tall/src/main/java/com/ccsens/tall/web/DeliverController.java
  25. 54
      tall/src/main/java/com/ccsens/tall/web/InputDocController.java
  26. 5
      tall/src/main/resources/mapper_dao/IInputDocDao.xml
  27. 34
      tall/src/main/resources/mapper_dao/ProRoleDao.xml
  28. 13
      tall/src/main/resources/mapper_dao/SysOperationDao.xml
  29. 18
      tall/src/main/resources/mapper_dao/SysOperationMessageDao.xml
  30. 2
      tall/src/main/resources/mapper_dao/TaskDetailDao.xml
  31. 27
      tall/src/main/resources/mapper_raw/SysOperationMapper.xml
  32. 3
      util/src/main/java/com/ccsens/util/RestTemplateUtil.java

2
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);

21
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;
}
}

22
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;
}

11
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();
}

60
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<Long> values) {
addCriterion("task_detail_id in", values, "taskDetailId");
return (Criteria) this;
}
public Criteria andTaskDetailIdNotIn(List<Long> 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 {

15
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<MessageVo.Message> messages;
}
}

62
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<Message> 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;
}
}

1
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;

8
tall/src/main/java/com/ccsens/tall/persist/dao/ProRoleDao.java

@ -17,6 +17,7 @@ public interface ProRoleDao extends ProRoleMapper{
List<ProRole> selectFirstRoleByProjectIdAndUserId(@Param("projectId") Long projectId, @Param("userId") Long userId);
List<ProjectVo.RoleInfo> selectSecondRolesByProjectId(@Param("projectId") Long projectId);
List<ProjectVo.RoleInfo> selectSecondRolesShowByProjectId(@Param("projectId") Long projectId);
List<Long> selectCareLessRoleByProjectIdAndUserId(@Param("projectId") Long projectId, @Param("userId") Long currentUserId);
@ -85,6 +86,13 @@ public interface ProRoleDao extends ProRoleMapper{
*/
List<RoleVo.JueSeByProId> queryRoleShowslistBefore(Long projectId, List<Long> listBeforeId);
/**
* 根据角色id查询要展示的角色
* @param projectId
* @return
*/
List<ProjectVo.RoleInfo> selectSecondRolesShowByRoleId(@Param("projectId") Long projectId,@Param("roleIdList") List<Long> roleIdList);
// /**
// * 查找项目下的所有成员的名字用“,”分隔
// * @param projectId 项目id

9
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<ProjectMessageVo.ProjectMsg> queryProjectMsg(ProjectMessageDto.ProjectMsg param);
/**
* 查询任务下的输入输入文档消息id
* @param taskId
* @return
*/
List<InputDocVo.DocRecordOfTask> findMessageByOperate(Long taskId);
}

19
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<MessageVo.Message> selectContentByOpId(Long operationId);
}

3
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);

21
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<InputDocVo.DocRecordOfTask> findDocRecordByTask(InputDocDto.FindDocRecordByTask param);
/**
* 删除输入文档下所有的文件
* @param param 输入文档id
*/
void delAllRecordOfTask(InputDocDto.DelAllRecordOfTask param);
}

29
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;
}

158
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<InputDocVo.DocOfTask> findDocByTask(InputDocDto.FindDocByTask param) {
List<InputDocVo.DocOfTask> 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<InputDocVo.DocOfTask> 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<InputDocVo.HistoryRecord> viewDocHistory(InputDocDto.ViewDocHistory param) {
List<InputDocVo.HistoryRecord> 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<ProTaskInputRecord> 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<ProTaskInputRecord> 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<InputDocVo.DocRecordOfTask> findDocRecordByTask(InputDocDto.FindDocRecordByTask param) {
PageHelper.startPage(param.getPageNum(),param.getPageSize());
List<InputDocVo.DocRecordOfTask> sysOperations = sysOperationDao.findMessageByOperate(param.getTaskId());
sysOperations.forEach(sysOperation -> {
List<MessageVo.Message> 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<ProTaskInputRecord> 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 文档 改回未上传状态
}
}

36
tall/src/main/java/com/ccsens/tall/service/ProRoleService.java

@ -97,7 +97,7 @@ public class ProRoleService implements IProRoleService {
//获取用户在项目中的角色
List<ProRole> 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<ProjectVo.RoleInfo> getRealMemberRolesShowByProjectId(Long projectId,Long userId) {
//返回的对象
List<ProjectVo.RoleInfo> 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<ProMember> 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<ProMemberRole> 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<ProjectVo.RoleInfo> memberRoleList;
memberRoleList = proRoleDao.selectSecondRolesShowByProjectId(projectId);
//TODO 查询项目配置,
if(CollectionUtil.isEmpty(memberRoleList)){
return memberRoleList;
//查看角色展示列表中是否有数据
ProMemberRoleShowExample proMemberRoleShowExampleNew=new ProMemberRoleShowExample();
proMemberRoleShowExampleNew.createCriteria().andMemberIdEqualTo(memberId);
List<ProMemberRoleShow> proMemberRoleShowsNew = proMemberRoleShowMapper.selectByExample(proMemberRoleShowExampleNew);
List<Long> roleIds = new ArrayList<>();
for (ProMemberRoleShow roleShow : proMemberRoleShowsNew) {
roleIds.add(roleShow.getRoleId());
}
//查询二级角色
memberRoleList = proRoleDao.selectSecondRolesShowByRoleId(projectId,roleIds);
//在show表查找可见的角色
return memberRoleList;
}

1
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;
}

1
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);
// 操作内容

150
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{
});
}
}
}

21
tall/src/main/java/com/ccsens/tall/service/SysPluginService.java

@ -95,7 +95,12 @@ public class SysPluginService implements ISysPluginService{
*/
@Override
public List<PluginVo.PluginByTaskAdded> findPluginOfAdded(PluginDto.FindPluginByTask param) {
List<PluginVo.PluginByTaskAdded> 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<PluginVo.PluginByTaskAdded> 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<PluginVo.PluginByTaskAdded> findPluginOfNoAdded(PluginDto.FindPluginByTaskNo param) {
//查找分解任务,通过分级任务找到任务详情
ProTaskSubTime proTaskSubTime = taskSubTimeDao.selectByPrimaryKey(param.getTaskId());
if (ObjectUtil.isNull(proTaskSubTime)){
throw new BaseException("获取任务信息错误");
}
PageHelper.startPage(param.getPageNum(),param.getPageSize());
List<PluginVo.PluginByTaskAdded> plugins = taskPluginDao.findPluginOfNoAdded(param.getTaskId(),param.getRoleId(),param.getPluginName(),param.getPluginType());
List<PluginVo.PluginByTaskAdded> 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("权限不足");
}

3
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());

2
tall/src/main/java/com/ccsens/tall/util/RobotUtil.java

@ -24,11 +24,13 @@ public class RobotUtil {
private List<String> mentionedMobileList = new ArrayList<>();
private boolean isAtAll = false;
private Long projectId;
private Long taskId;
private List<MessageVo.Message> params = new ArrayList<>();
public Message(){
}
public Message(String msgType,Long projectId){
this.msgType = msgType;
this.projectId = projectId;

55
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;
}
}

28
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<DeliverVo.DeliverInfo> 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<DeliverVo.DeliverInfo> 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 = "")

54
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<List<InputDocVo.DocOfTask>> findDocByTask(@ApiParam @Validated @RequestBody QueryDto<InputDocDto.FindDocByTask> 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<InputDocDto.UploadForDoc> params) {
public JsonResponse uploadForDoc(@ApiParam @Validated @RequestBody QueryDto<InputDocDto.UploadForDoc> 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<InputDocDto.ViewDocHistory> params) {
public JsonResponse<List<InputDocVo.HistoryRecord>> viewDocHistory(@ApiParam @Validated @RequestBody QueryDto<InputDocDto.ViewDocHistory> params) {
log.info("查看文档上传历史记录:{}",params);
List<InputDocVo.HistoryRecord> 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<InputDocDto.AddDoc> 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<InputDocDto.DeleteDoc> 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<InputDocDto.DeleteDocOfFile> params) {
public JsonResponse delDocOfFile(@ApiParam @Validated @RequestBody QueryDto<InputDocDto.DeleteDocOfFile> 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<InputDocDto.UpdateDocOfRemark> params) {
public JsonResponse updateDocOfRemark(@ApiParam @Validated @RequestBody QueryDto<InputDocDto.UpdateDocOfRemark> 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<PageInfo<InputDocVo.DocRecordOfTask>> findDocRecordByTask(@ApiParam @Validated @RequestBody QueryDto<InputDocDto.FindDocRecordByTask> params) {
log.info("查询输入文档上传记录:{}",params);
PageInfo<InputDocVo.DocRecordOfTask> 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<InputDocDto.DelAllRecordOfTask> params) {
log.info("删除输入文档下所有的文件:{}",params);
iInputDocService.delAllRecordOfTask(params.getParam());
log.info("删除输入文档下所有的文件");
return JsonResponse.newInstance().ok();
}
}

5
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
</select>
<select id="viewDocHistory" resultType="com.ccsens.tall.bean.vo.InputDocVo$HistoryRecord">

34
tall/src/main/resources/mapper_dao/ProRoleDao.xml

@ -124,6 +124,40 @@
AND (m.rec_status = 0 or m.rec_status is null)
</select>
<select id="selectSecondRolesShowByRoleId" parameterType="java.util.Map"
resultMap="resultMap_ProRoleInfo">
select
pr.id as rId,
pr.name as rName,
pr.parent_id as parentId,
m.id as mId,
m.nickname as mName,
m.phone as mPhone,
m.user_id as mUserId,
m.stakeholder_id as stakeholderId,
if((SELECT `name` FROM t_pro_role WHERE id = pr.parent_id) = 'ProjectVirtualRole',1,0) as projectRole,
pr.relevance_project_id as relevanceProjectId,
(SELECT `name` FROM t_sys_project WHERE id = pr.relevance_project_id) as relevanceProjectName
from
t_pro_role pr LEFT JOIN t_pro_member_role_show mr ON mr.role_id = pr.id
LEFT JOIN t_pro_member m ON mr.member_id = m.id
where
pr.project_id = #{projectId}
AND
pr.id in
<foreach collection="roleIdList" item="role" separator="," open="(" close=")">
#{role}
</foreach>
and
(SELECT name FROM t_pro_role r WHERE pr.parent_id = r.id) in ('PM','Member','ProjectVirtualRole')
AND
pr.name not IN ('全体成员','观众','MVP')
AND
pr.rec_status = 0
AND (mr.rec_status = 0 or mr.rec_status is null)
AND (m.rec_status = 0 or m.rec_status is null)
</select>
<select id="selectCareLessRoleByProjectIdAndUserId" parameterType="java.util.Map"
resultType="Long">
select

13
tall/src/main/resources/mapper_dao/SysOperationDao.xml

@ -76,4 +76,17 @@
o.project_id = #{projectId}
AND o.rec_status = 0
</select>
<select id="findMessageByOperate" resultType="com.ccsens.tall.bean.vo.InputDocVo$DocRecordOfTask">
SELECT
so.id AS operationId,
so.created_at AS createTime
FROM
t_sys_operation AS so
WHERE
so.task_detail_id = #{taskId}
AND so.operate_type IN (7, 8, 9, 14, 15, 16)
AND so.rec_status = 0
ORDER BY created_at DESC
</select>
</mapper>

18
tall/src/main/resources/mapper_dao/SysOperationMessageDao.xml

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.tall.persist.dao.SysOperationMessageDao">
<select id="selectContentByOpId" resultType="com.ccsens.tall.bean.vo.MessageVo$Message">
SELECT
som.content AS content,
som.type AS type,
som.settings AS settings
FROM
t_sys_operation_message AS som
WHERE
som.operation_id = #{operationId}
ORDER BY
som.sort
</select>
</mapper>

2
tall/src/main/resources/mapper_dao/TaskDetailDao.xml

@ -124,7 +124,7 @@
s.end_time &gt; #{startTime}
</if>
AND
d.Level in (2,3)
d.Level &gt; 1
AND
d.has_group = 0
AND

27
tall/src/main/resources/mapper_raw/SysOperationMapper.xml

@ -10,6 +10,7 @@
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
<result column="rec_status" jdbcType="TINYINT" property="recStatus" />
<result column="task_detail_id" jdbcType="BIGINT" property="taskDetailId" />
</resultMap>
<sql id="Example_Where_Clause">
<where>
@ -71,7 +72,7 @@
</sql>
<sql id="Base_Column_List">
id, operator_id, project_id, operate_type, operation_time, created_at, updated_at,
rec_status
rec_status, task_detail_id
</sql>
<select id="selectByExample" parameterType="com.ccsens.tall.bean.po.SysOperationExample" resultMap="BaseResultMap">
select
@ -106,10 +107,12 @@
<insert id="insert" parameterType="com.ccsens.tall.bean.po.SysOperation">
insert into t_sys_operation (id, operator_id, project_id,
operate_type, operation_time, created_at,
updated_at, rec_status)
updated_at, rec_status, task_detail_id
)
values (#{id,jdbcType=BIGINT}, #{operatorId,jdbcType=BIGINT}, #{projectId,jdbcType=BIGINT},
#{operateType,jdbcType=TINYINT}, #{operationTime,jdbcType=BIGINT}, #{createdAt,jdbcType=TIMESTAMP},
#{updatedAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT})
#{updatedAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT}, #{taskDetailId,jdbcType=BIGINT}
)
</insert>
<insert id="insertSelective" parameterType="com.ccsens.tall.bean.po.SysOperation">
insert into t_sys_operation
@ -138,6 +141,9 @@
<if test="recStatus != null">
rec_status,
</if>
<if test="taskDetailId != null">
task_detail_id,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
@ -164,6 +170,9 @@
<if test="recStatus != null">
#{recStatus,jdbcType=TINYINT},
</if>
<if test="taskDetailId != null">
#{taskDetailId,jdbcType=BIGINT},
</if>
</trim>
</insert>
<select id="countByExample" parameterType="com.ccsens.tall.bean.po.SysOperationExample" resultType="java.lang.Long">
@ -199,6 +208,9 @@
<if test="record.recStatus != null">
rec_status = #{record.recStatus,jdbcType=TINYINT},
</if>
<if test="record.taskDetailId != null">
task_detail_id = #{record.taskDetailId,jdbcType=BIGINT},
</if>
</set>
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
@ -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}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
@ -242,6 +255,9 @@
<if test="recStatus != null">
rec_status = #{recStatus,jdbcType=TINYINT},
</if>
<if test="taskDetailId != null">
task_detail_id = #{taskDetailId,jdbcType=BIGINT},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
@ -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}
</update>
</mapper>

3
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;

Loading…
Cancel
Save