Browse Source

机器人消息

master
zy_Java 5 years ago
parent
commit
7e3f424494
  1. 51
      tall/src/main/java/com/ccsens/tall/aspect/RobotAspect.java
  2. 12
      tall/src/main/java/com/ccsens/tall/bean/po/SysProjectRobotMessage.java
  3. 48
      tall/src/main/java/com/ccsens/tall/bean/po/SysProjectRobotMessageExample.java
  4. 2
      tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java
  5. 8
      tall/src/main/java/com/ccsens/tall/persist/dao/SysMessageTypeDao.java
  6. 8
      tall/src/main/java/com/ccsens/tall/persist/dao/SysProjectRobotDao.java
  7. 8
      tall/src/main/java/com/ccsens/tall/persist/dao/SysProjectRobotMessageDao.java
  8. 2
      tall/src/main/java/com/ccsens/tall/persist/dao/SysUserDao.java
  9. 28
      tall/src/main/java/com/ccsens/tall/service/AsyncService.java
  10. 7
      tall/src/main/java/com/ccsens/tall/service/ExportWbsService.java
  11. 11
      tall/src/main/java/com/ccsens/tall/service/IAsyncService.java
  12. 72
      tall/src/main/java/com/ccsens/tall/service/IRobotService.java
  13. 2
      tall/src/main/java/com/ccsens/tall/service/ITaskPluginService.java
  14. 2
      tall/src/main/java/com/ccsens/tall/service/IUserService.java
  15. 2
      tall/src/main/java/com/ccsens/tall/service/MessageService.java
  16. 29
      tall/src/main/java/com/ccsens/tall/service/ProRoleService.java
  17. 12
      tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java
  18. 316
      tall/src/main/java/com/ccsens/tall/service/RobotService.java
  19. 32
      tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java
  20. 23
      tall/src/main/java/com/ccsens/tall/service/TaskPluginService.java
  21. 23
      tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java
  22. 8
      tall/src/main/java/com/ccsens/tall/service/UserService.java
  23. 57
      tall/src/main/java/com/ccsens/tall/service/WbsSubSheetService.java
  24. 71
      tall/src/main/java/com/ccsens/tall/util/RobotUtil.java
  25. 17
      tall/src/main/java/com/ccsens/tall/util/TallConstant.java
  26. 4
      tall/src/main/java/com/ccsens/tall/web/DeliverController.java
  27. 6
      tall/src/main/java/com/ccsens/tall/web/TaskController.java
  28. 4
      tall/src/main/resources/application.yml
  29. 15
      tall/src/main/resources/mapper_dao/SysUserDao.xml
  30. 28
      tall/src/main/resources/mapper_raw/SysProjectRobotMessageMapper.xml
  31. 1
      util/src/main/java/com/ccsens/util/CodeEnum.java
  32. 16
      util/src/main/java/com/ccsens/util/annotation/OperateType.java
  33. 111
      util/src/main/java/com/ccsens/util/wx/WxRobotUtil.java

51
tall/src/main/java/com/ccsens/tall/aspect/RobotAspect.java

@ -0,0 +1,51 @@
package com.ccsens.tall.aspect;
import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.tall.service.IAsyncService;
import com.ccsens.tall.service.IRobotService;
import com.ccsens.tall.service.RobotService;
import com.ccsens.tall.util.RobotUtil;
import com.ccsens.util.annotation.OperateType;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.lang.reflect.Method;
@Order(2)
@Slf4j
@Aspect
@Component
public class RobotAspect {
@Autowired
private IRobotService robotService;
@Resource
private IAsyncService asyncService;
@Pointcut("@annotation(com.ccsens.util.annotation.OperateType)")
public void robotAdvice(){
}
@After("robotAdvice()")
public void robotMessageSend(JoinPoint joinPoint){
//1.获取方法类型Code
Signature signature = joinPoint.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
Method targetMethod = methodSignature.getMethod();
OperateType operateType = targetMethod.getAnnotation(OperateType.class);
//2.获取发送参数
RobotUtil.Message message = RobotUtil.get();
asyncService.sendRobotMessage(operateType,message);
}
}

12
tall/src/main/java/com/ccsens/tall/bean/po/SysProjectRobotMessage.java

@ -8,7 +8,7 @@ public class SysProjectRobotMessage implements Serializable {
private Long projectRobotId; private Long projectRobotId;
private Long messageId; private Byte operateType;
private Byte allMessage; private Byte allMessage;
@ -36,12 +36,12 @@ public class SysProjectRobotMessage implements Serializable {
this.projectRobotId = projectRobotId; this.projectRobotId = projectRobotId;
} }
public Long getMessageId() { public Byte getOperateType() {
return messageId; return operateType;
} }
public void setMessageId(Long messageId) { public void setOperateType(Byte operateType) {
this.messageId = messageId; this.operateType = operateType;
} }
public Byte getAllMessage() { public Byte getAllMessage() {
@ -84,7 +84,7 @@ public class SysProjectRobotMessage implements Serializable {
sb.append("Hash = ").append(hashCode()); sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id); sb.append(", id=").append(id);
sb.append(", projectRobotId=").append(projectRobotId); sb.append(", projectRobotId=").append(projectRobotId);
sb.append(", messageId=").append(messageId); sb.append(", operateType=").append(operateType);
sb.append(", allMessage=").append(allMessage); sb.append(", allMessage=").append(allMessage);
sb.append(", createdAt=").append(createdAt); sb.append(", createdAt=").append(createdAt);
sb.append(", updatedAt=").append(updatedAt); sb.append(", updatedAt=").append(updatedAt);

48
tall/src/main/java/com/ccsens/tall/bean/po/SysProjectRobotMessageExample.java

@ -225,63 +225,63 @@ public class SysProjectRobotMessageExample {
return (Criteria) this; return (Criteria) this;
} }
public Criteria andMessageIdIsNull() { public Criteria andOperateTypeIsNull() {
addCriterion("message_id is null"); addCriterion("operate_type is null");
return (Criteria) this; return (Criteria) this;
} }
public Criteria andMessageIdIsNotNull() { public Criteria andOperateTypeIsNotNull() {
addCriterion("message_id is not null"); addCriterion("operate_type is not null");
return (Criteria) this; return (Criteria) this;
} }
public Criteria andMessageIdEqualTo(Long value) { public Criteria andOperateTypeEqualTo(Byte value) {
addCriterion("message_id =", value, "messageId"); addCriterion("operate_type =", value, "operateType");
return (Criteria) this; return (Criteria) this;
} }
public Criteria andMessageIdNotEqualTo(Long value) { public Criteria andOperateTypeNotEqualTo(Byte value) {
addCriterion("message_id <>", value, "messageId"); addCriterion("operate_type <>", value, "operateType");
return (Criteria) this; return (Criteria) this;
} }
public Criteria andMessageIdGreaterThan(Long value) { public Criteria andOperateTypeGreaterThan(Byte value) {
addCriterion("message_id >", value, "messageId"); addCriterion("operate_type >", value, "operateType");
return (Criteria) this; return (Criteria) this;
} }
public Criteria andMessageIdGreaterThanOrEqualTo(Long value) { public Criteria andOperateTypeGreaterThanOrEqualTo(Byte value) {
addCriterion("message_id >=", value, "messageId"); addCriterion("operate_type >=", value, "operateType");
return (Criteria) this; return (Criteria) this;
} }
public Criteria andMessageIdLessThan(Long value) { public Criteria andOperateTypeLessThan(Byte value) {
addCriterion("message_id <", value, "messageId"); addCriterion("operate_type <", value, "operateType");
return (Criteria) this; return (Criteria) this;
} }
public Criteria andMessageIdLessThanOrEqualTo(Long value) { public Criteria andOperateTypeLessThanOrEqualTo(Byte value) {
addCriterion("message_id <=", value, "messageId"); addCriterion("operate_type <=", value, "operateType");
return (Criteria) this; return (Criteria) this;
} }
public Criteria andMessageIdIn(List<Long> values) { public Criteria andOperateTypeIn(List<Byte> values) {
addCriterion("message_id in", values, "messageId"); addCriterion("operate_type in", values, "operateType");
return (Criteria) this; return (Criteria) this;
} }
public Criteria andMessageIdNotIn(List<Long> values) { public Criteria andOperateTypeNotIn(List<Byte> values) {
addCriterion("message_id not in", values, "messageId"); addCriterion("operate_type not in", values, "operateType");
return (Criteria) this; return (Criteria) this;
} }
public Criteria andMessageIdBetween(Long value1, Long value2) { public Criteria andOperateTypeBetween(Byte value1, Byte value2) {
addCriterion("message_id between", value1, value2, "messageId"); addCriterion("operate_type between", value1, value2, "operateType");
return (Criteria) this; return (Criteria) this;
} }
public Criteria andMessageIdNotBetween(Long value1, Long value2) { public Criteria andOperateTypeNotBetween(Byte value1, Byte value2) {
addCriterion("message_id not between", value1, value2, "messageId"); addCriterion("operate_type not between", value1, value2, "operateType");
return (Criteria) this; return (Criteria) this;
} }

2
tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java

@ -88,7 +88,7 @@ public class TaskVo {
private String projectName; private String projectName;
@ApiModelProperty("负责人Id") @ApiModelProperty("负责人Id")
private Long executorRole; private Long executorRole;
@ApiModelProperty("负责人Id") @ApiModelProperty("负责人名称")
private String executorRoleName; private String executorRoleName;
@ApiModelProperty("开始时间") @ApiModelProperty("开始时间")
private Long beginTime; private Long beginTime;

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

@ -0,0 +1,8 @@
package com.ccsens.tall.persist.dao;
import com.ccsens.tall.persist.mapper.SysMessageTypeMapper;
import org.springframework.stereotype.Repository;
@Repository
public interface SysMessageTypeDao extends SysMessageTypeMapper {
}

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

@ -0,0 +1,8 @@
package com.ccsens.tall.persist.dao;
import com.ccsens.tall.persist.mapper.SysProjectRobotMapper;
import org.springframework.stereotype.Repository;
@Repository
public interface SysProjectRobotDao extends SysProjectRobotMapper {
}

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

@ -0,0 +1,8 @@
package com.ccsens.tall.persist.dao;
import com.ccsens.tall.persist.mapper.SysProjectRobotMessageMapper;
import org.springframework.stereotype.Repository;
@Repository
public interface SysProjectRobotMessageDao extends SysProjectRobotMessageMapper {
}

2
tall/src/main/java/com/ccsens/tall/persist/dao/SysUserDao.java

@ -20,4 +20,6 @@ public interface SysUserDao extends SysUserMapper {
void replaceDeliverPostLog(@Param("oldUserId") Long userId, @Param("newUserId") Long currentUserId); void replaceDeliverPostLog(@Param("oldUserId") Long userId, @Param("newUserId") Long currentUserId);
void replaceProLog(@Param("oldUserId") Long userId,@Param("newUserId") Long currentUserId); void replaceProLog(@Param("oldUserId") Long userId,@Param("newUserId") Long currentUserId);
String getUserNameByUserId(@Param("userId") Long userId);
} }

28
tall/src/main/java/com/ccsens/tall/service/AsyncService.java

@ -0,0 +1,28 @@
package com.ccsens.tall.service;
import com.ccsens.tall.util.RobotUtil;
import com.ccsens.util.annotation.OperateType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@Slf4j
@Async
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class AsyncService implements IAsyncService{
@Resource
private IRobotService robotService;
@Override
public void sendRobotMessage(OperateType operateType,RobotUtil.Message message) {
robotService.robotMessage(operateType,message);
}
}

7
tall/src/main/java/com/ccsens/tall/service/ExportWbsService.java

@ -125,11 +125,6 @@ public class ExportWbsService implements IExportWbsService{
Map<Long,WbsVo.SecondTask> secondTaskMap = new HashMap<>(); Map<Long,WbsVo.SecondTask> secondTaskMap = new HashMap<>();
//获取项目下所有任务
// ProTaskDetailExample proTaskDetailExample = new ProTaskDetailExample();
// proTaskDetailExample.createCriteria().andProjectIdEqualTo(projectId).andLevelNotEqualTo((byte) 0);
// proTaskDetailExample.setOrderByClause("level");
// List<ProTaskDetail> taskDetailList = taskDetailDao.selectByExample(proTaskDetailExample);
List<ProTaskDetail> taskDetailList = taskDetailDao.selectAllByProject(projectId); List<ProTaskDetail> taskDetailList = taskDetailDao.selectAllByProject(projectId);
if(CollectionUtil.isNotEmpty(taskDetailList)){ if(CollectionUtil.isNotEmpty(taskDetailList)){
for(ProTaskDetail taskDetail : taskDetailList){ for(ProTaskDetail taskDetail : taskDetailList){
@ -215,7 +210,7 @@ public class ExportWbsService implements IExportWbsService{
List<WbsVo.DeliverInfo> deliverInfoList = new ArrayList<>(); List<WbsVo.DeliverInfo> deliverInfoList = new ArrayList<>();
ProTaskDeliverExample deliverExample = new ProTaskDeliverExample(); ProTaskDeliverExample deliverExample = new ProTaskDeliverExample();
deliverExample.createCriteria().andTaskDetailIdEqualTo(taskId); deliverExample.createCriteria().andTaskDetailIdEqualTo(taskId).andIsInputEqualTo(0);
List<ProTaskDeliver> deliverList = taskDeliverDao.selectByExample(deliverExample); List<ProTaskDeliver> deliverList = taskDeliverDao.selectByExample(deliverExample);
if(CollectionUtil.isNotEmpty(deliverList)){ if(CollectionUtil.isNotEmpty(deliverList)){
for(ProTaskDeliver taskDeliver : deliverList){ for(ProTaskDeliver taskDeliver : deliverList){

11
tall/src/main/java/com/ccsens/tall/service/IAsyncService.java

@ -0,0 +1,11 @@
package com.ccsens.tall.service;
import com.ccsens.tall.util.RobotUtil;
import com.ccsens.util.annotation.OperateType;
/**
* 异步方法
*/
public interface IAsyncService {
void sendRobotMessage(OperateType operateType, RobotUtil.Message message);
}

72
tall/src/main/java/com/ccsens/tall/service/IRobotService.java

@ -0,0 +1,72 @@
package com.ccsens.tall.service;
import com.ccsens.tall.bean.po.ProTaskDetail;
import com.ccsens.tall.bean.po.SysProject;
import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.util.RobotUtil;
import com.ccsens.util.annotation.OperateType;
import java.util.Set;
public interface IRobotService {
void robotMessage(OperateType operateType, RobotUtil.Message message);
/**
* 完成任务消息
*/
void finishTaskRobotSend(Long currentUserId,Long projectId, String projectName, String name,Long executorRoleId ,int completedStatus)throws Exception;
/**
* 添加任务消息
* @param currentUserId
* @param project
* @param taskName
* @param executorId
*/
void addTaskRobotSend(Long currentUserId, SysProject project, String taskName, Long executorId) throws Exception;
/**
* 删除任务消息
* @param currentUserId
* @param taskDetail
*/
void deleteTaskRobotSend(Long currentUserId, ProTaskDetail taskDetail) throws Exception;
/**
* 修改任务信息
* @param currentUserId
* @param normalTask
*/
void changeTaskRobotSend(Long currentUserId, TaskVo.NormalTask normalTask) throws Exception;
/**
* 上传交付物信息
* @param currentUserId
* @param subTimeId
*/
void addDeliverRobotSend(Long currentUserId,String deliverName, Long subTimeId) throws Exception;
/**
* 删除交付物信息
* @param currentUserId
* @param name
* @param subTimeId
*/
void deleteDeliverRobotSend(Long currentUserId, String name, Long subTimeId) throws Exception;
/**
* 检查交付物信息
* @param currentUserId
* @param task
* @param userIdSet
* @param name
*/
void checkDeliverRobotSend(Long currentUserId, ProTaskDetail task, Long userIdSet, String name) throws Exception;
/**
* 评论任务信息
* @param userId
* @param proTaskDetail
*/
void addCommentRobotSend(Long userId, ProTaskDetail proTaskDetail) throws Exception;
}

2
tall/src/main/java/com/ccsens/tall/service/ITaskPluginService.java

@ -12,7 +12,7 @@ public interface ITaskPluginService {
List<TaskVo.PluginVo> getPluginByTask(Long taskId, Long userId) throws Exception; List<TaskVo.PluginVo> getPluginByTask(Long taskId, Long userId) throws Exception;
PluginVo.CommentInfo addComment(Long userId,PluginDto.AddCommentPlugin addCommentPlugin); PluginVo.CommentInfo addComment(Long userId,PluginDto.AddCommentPlugin addCommentPlugin) throws Exception;
List<PluginVo.CommentInfo> getComment(Long currentUserId, Long taskId); List<PluginVo.CommentInfo> getComment(Long currentUserId, Long taskId);

2
tall/src/main/java/com/ccsens/tall/service/IUserService.java

@ -78,4 +78,6 @@ public interface IUserService {
void mergeUserId(Long userId, Long uselessId); void mergeUserId(Long userId, Long uselessId);
UserVo.Account systemRegister(UserDto.UserSignupSystem userSignup); UserVo.Account systemRegister(UserDto.UserSignupSystem userSignup);
String getUserNameByUserId(Long userId);
} }

2
tall/src/main/java/com/ccsens/tall/service/MessageService.java

@ -96,4 +96,6 @@ public class MessageService implements IMessageService{
rabbitTemplate.convertAndSend(RabbitMQConfig.RabbitMQ_QUEUE_NAME , rabbitTemplate.convertAndSend(RabbitMQConfig.RabbitMQ_QUEUE_NAME ,
JacksonUtil.beanToJson(syncMessage)); JacksonUtil.beanToJson(syncMessage));
} }
} }

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

@ -203,14 +203,16 @@ public class ProRoleService implements IProRoleService {
public int selectPowerByRoleName(Long userId, Long projectId) { public int selectPowerByRoleName(Long userId, Long projectId) {
int power = 0; int power = 0;
SysProject project = projectDao.selectByPrimaryKey(projectId); SysProject project = projectDao.selectByPrimaryKey(projectId);
if (project.getCreatorId().longValue() == userId) { if(ObjectUtil.isNotNull(project)) {
power = 2; if (project.getCreatorId().longValue() == userId) {
} power = 2;
List<ProRole> roles = getProRoleByProjectIdAndUserId(projectId, userId); }
if (CollectionUtil.isNotEmpty(roles)) { List<ProRole> roles = getProRoleByProjectIdAndUserId(projectId, userId);
for (ProRole role : roles) { if (CollectionUtil.isNotEmpty(roles)) {
int i = proRoleDao.selectPowerByRoleName(role.getDescription()); for (ProRole role : roles) {
power = i > power ? i : power; int i = proRoleDao.selectPowerByRoleName(role.getDescription());
power = i > power ? i : power;
}
} }
} }
return power; return power;
@ -221,11 +223,14 @@ public class ProRoleService implements IProRoleService {
*/ */
@Override @Override
public TaskVo.RoleCheckList selectRoleByCheckOrExecutor(Long roleId) { public TaskVo.RoleCheckList selectRoleByCheckOrExecutor(Long roleId) {
TaskVo.RoleCheckList roleCheckList = new TaskVo.RoleCheckList(); TaskVo.RoleCheckList roleCheckList = null;
if (roleId != 0) { if (roleId != 0 || ObjectUtil.isNotNull(roleId)) {
ProRole role = proRoleDao.selectByPrimaryKey(roleId); ProRole role = proRoleDao.selectByPrimaryKey(roleId);
roleCheckList.setId(role.getId()); if(ObjectUtil.isNotNull(role)){
roleCheckList.setName(role.getName()); roleCheckList = new TaskVo.RoleCheckList();
roleCheckList.setId(role.getId());
roleCheckList.setName(role.getName());
}
} }
return roleCheckList; return roleCheckList;
} }

12
tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java

@ -14,6 +14,7 @@ import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.persist.dao.*; import com.ccsens.tall.persist.dao.*;
import com.ccsens.tall.persist.dao.ProTaskShowDao; import com.ccsens.tall.persist.dao.ProTaskShowDao;
import com.ccsens.tall.persist.mapper.ProPluginConfigMapper; import com.ccsens.tall.persist.mapper.ProPluginConfigMapper;
import com.ccsens.tall.util.RobotUtil;
import com.ccsens.tall.util.TaskUtil; import com.ccsens.tall.util.TaskUtil;
import com.ccsens.util.CodeEnum; import com.ccsens.util.CodeEnum;
import com.ccsens.util.DateUtil; import com.ccsens.util.DateUtil;
@ -30,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j @Slf4j
@ -47,7 +49,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
@Autowired @Autowired
private IProMemberService proMemberService; private IProMemberService proMemberService;
@Autowired @Autowired
private IProShowService proShowService; private IUserService userService;
@Autowired @Autowired
private ProTaskShowDao proTaskShowDao; private ProTaskShowDao proTaskShowDao;
@Autowired @Autowired
@ -72,6 +74,8 @@ public class ProTaskDetailService implements IProTaskDetailService {
private MtFeignClient mtFeignClient; private MtFeignClient mtFeignClient;
@Resource @Resource
private ProPluginConfigMapper proPluginConfigMapper; private ProPluginConfigMapper proPluginConfigMapper;
@Autowired
private IRobotService robotService;
@Override @Override
public void saveTaskDetail(ProTaskDetail taskDetail) { public void saveTaskDetail(ProTaskDetail taskDetail) {
@ -989,6 +993,9 @@ public class ProTaskDetailService implements IProTaskDetailService {
} else { } else {
taskDetail = taskDetailDao.selectByPrimaryKey(taskId); taskDetail = taskDetailDao.selectByPrimaryKey(taskId);
} }
if(ObjectUtil.isNull(taskDetail)){
throw new BaseException(CodeEnum.NOT_TASK);
}
// //本用户在项目中的角色 // //本用户在项目中的角色
// List<ProRole> proRoles = proRoleService.getProRoleByProjectIdAndUserId(taskDetail.getProjectId(), currentUserId); // List<ProRole> proRoles = proRoleService.getProRoleByProjectIdAndUserId(taskDetail.getProjectId(), currentUserId);
//用户在项目中的最高权限 //用户在项目中的最高权限
@ -1004,6 +1011,8 @@ public class ProTaskDetailService implements IProTaskDetailService {
} else { } else {
throw new BaseException(CodeEnum.NOT_POWER); throw new BaseException(CodeEnum.NOT_POWER);
} }
//通过智能助手发送消息
robotService.deleteTaskRobotSend(currentUserId,taskDetail);
} }
@Override @Override
@ -1119,6 +1128,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
}else { }else {
throw new BaseException(CodeEnum.NOT_TASK); throw new BaseException(CodeEnum.NOT_TASK);
} }
robotService.changeTaskRobotSend(currentUserId,normalTask);
return normalTask; return normalTask;
} }
private void changeTime(ProTaskDetail taskDetail,Long beginTime,Long endTime,SysProject project){ private void changeTime(ProTaskDetail taskDetail,Long beginTime,Long endTime,SysProject project){

316
tall/src/main/java/com/ccsens/tall/service/RobotService.java

@ -0,0 +1,316 @@
package com.ccsens.tall.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.ccsens.tall.bean.po.*;
import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.persist.dao.*;
import com.ccsens.tall.util.RobotUtil;
import com.ccsens.tall.util.TallConstant;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.RedisUtil;
import com.ccsens.util.annotation.OperateType;
import com.ccsens.util.exception.BaseException;
import com.ccsens.util.wx.WxRobotUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
public class RobotService implements IRobotService{
@Autowired
private SysProjectDao sysProjectDao;
@Autowired
private SysRobotDao sysRobotDao;
@Autowired
private SysProjectRobotDao sysProjectRobotDao;
@Autowired
private SysMessageTypeDao sysMessageTypeDao;
@Autowired
private SysProjectRobotMessageDao projectRobotMessageDao;
@Autowired
private RedisUtil redisUtil;
@Autowired
private IUserService userService;
@Autowired
private IProRoleService proRoleService;
@Autowired
private IProMemberService proMemberService;
@Autowired
private TaskDetailDao taskDetailDao;
@Autowired
private TaskSubTimeDao taskSubTimeDao;
@Override
public void robotMessage(OperateType operateType,RobotUtil.Message message){
//获取机器人信息
SysProjectRobotExample sysProjectRobotExample = new SysProjectRobotExample();
sysProjectRobotExample.createCriteria().andProjectIdEqualTo( message.getProjectId());
List<SysProjectRobot> sysProjectRobotList = sysProjectRobotDao.selectByExample(sysProjectRobotExample);
if(CollectionUtil.isNotEmpty(sysProjectRobotList)){
sysProjectRobotList.forEach(sysProjectRobot -> {
//检查接口是否需要发送消息
if(isSend(sysProjectRobot.getId(),operateType.value())){
String content = getRobotTemplate(operateType.value());
//获取发送参数
StringBuilder builder = new StringBuilder(content);
String replace = "{{}}";
message.getParams().forEach(param->{
int start = builder.indexOf(replace);
builder.replace(start, start + replace.length(),param);
});
//获取机器人信息
SysRobot sysRobot = sysRobotDao.selectByPrimaryKey(sysProjectRobot.getRobotId());
//4.发送消息
if(ObjectUtil.isNotNull(sysRobot)){
switch (sysRobot.getClientType()){
case 0://微信
try {
WxRobotUtil.sendRobotInfo(sysRobot.getWebHook(),builder,message.getMsgType(),message.getMentionedList(),message.getMentionedMobileList());
} catch (Exception e) {
e.printStackTrace();
}
//删除线程
RobotUtil.del();
break;
case 1://钉钉
//删除线程
RobotUtil.del();
break;
default:
//删除线程
RobotUtil.del();
}
}
}
});
}
}
private boolean isSend(Long projectRobotId,int operateType){
AtomicBoolean flag = new AtomicBoolean(false);
SysProjectRobotMessageExample messageExample = new SysProjectRobotMessageExample();
messageExample.createCriteria().andProjectRobotIdEqualTo(projectRobotId);
List<SysProjectRobotMessage> sysProjectRobotMessageList = projectRobotMessageDao.selectByExample(messageExample);
if(CollectionUtil.isNotEmpty(sysProjectRobotMessageList)){
sysProjectRobotMessageList.forEach(projectRobotMessage->{
if(projectRobotMessage.getAllMessage() == 1 || projectRobotMessage.getOperateType() == operateType){
flag.set(true);
}
});
}
return flag.get();
}
private String getRobotTemplate(int code){
String robotKey = TallConstant.getRobotTemplateKey(code);
String template = "";
template = (String)redisUtil.get(robotKey);
if(StrUtil.isEmpty(template)){
SysMessageTypeExample sysMessageTypeExample = new SysMessageTypeExample();
sysMessageTypeExample.createCriteria().andOperateTypeEqualTo((byte) code);
List<SysMessageType> sysMessageTypeList = sysMessageTypeDao.selectByExample(sysMessageTypeExample);
if(CollectionUtil.isNotEmpty(sysMessageTypeList)){
template = sysMessageTypeList.get(0).getTemplate();
redisUtil.set(robotKey,template);
}
}
return template;
}
private String[] getMemberPhonesByRoleId(Long roleId) throws Exception {
String[] memberPhone = new String[]{};
List<ProMember> memberList = proMemberService.selectByRole(roleId);
if(CollectionUtil.isNotEmpty(memberList)){
String[] phones = new String[memberList.size()];
AtomicInteger i = new AtomicInteger(0);
memberList.forEach(proMember -> {
if(StrUtil.isNotEmpty(proMember.getPhone())) {
phones[i.get()] = proMember.getPhone();
i.set(i.get() + 1);
}
});
memberPhone = phones;
}
return memberPhone;
}
@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 = "";
if(completedStatus == 2){
isFinish = "完成";
}else {
isFinish = "取消完成";
}
RobotUtil.Message message = new RobotUtil.Message(projectId);
message.appendParams(userName,projectName,isFinish,taskName);
//获取角色内成员的手机号
String[] memberPhone = getMemberPhonesByRoleId(executorRoleId);
if(memberPhone.length != 0){
message.appendMentionedMobileList(memberPhone);
}
RobotUtil.set(message);
}
@Override
public void addTaskRobotSend(Long currentUserId, SysProject project, String taskName, Long executorId) throws Exception {
String userName = userService.getUserNameByUserId(currentUserId);
String projectName = "";
String executorName = "";
TaskVo.RoleCheckList role = proRoleService.selectRoleByCheckOrExecutor(executorId);
if(ObjectUtil.isNotNull(role)){
executorName = role.getName();
}
if(ObjectUtil.isNotNull(project)){
projectName = project.getName();
}
RobotUtil.Message message = new RobotUtil.Message(project.getId());
message.appendParams(userName,projectName,taskName,executorName);
//获取角色内成员的手机号
String[] memberPhone = getMemberPhonesByRoleId(executorId);
if(memberPhone.length != 0){
message.appendMentionedMobileList(memberPhone);
}
RobotUtil.set(message);
}
@Override
public void deleteTaskRobotSend(Long currentUserId, ProTaskDetail taskDetail) throws Exception {
SysProject sysProject = sysProjectDao.selectByPrimaryKey(taskDetail.getProjectId());
String userName = userService.getUserNameByUserId(currentUserId);
String projectName = "";
if(ObjectUtil.isNotNull(sysProject)){
projectName = sysProject.getName();
}
RobotUtil.Message message = new RobotUtil.Message(sysProject.getId());
message.appendParams(userName,projectName,taskDetail.getName());
//获取角色内成员的手机号
String[] memberPhone = getMemberPhonesByRoleId(taskDetail.getExecutorRole());
if(memberPhone.length != 0){
message.appendMentionedMobileList(memberPhone);
}
RobotUtil.set(message);
}
@Override
public void changeTaskRobotSend(Long currentUserId, TaskVo.NormalTask normalTask) throws Exception {
String userName = userService.getUserNameByUserId(currentUserId);
RobotUtil.Message message = new RobotUtil.Message(normalTask.getProjectId());
message.appendParams(userName,normalTask.getProjectName(),normalTask.getName(),normalTask.getExecutorRoleName());
//获取角色内成员的手机号
String[] memberPhone = getMemberPhonesByRoleId(normalTask.getExecutorRole());
if(memberPhone.length != 0){
message.appendMentionedMobileList(memberPhone);
}
RobotUtil.set(message);
}
@Override
public void addDeliverRobotSend(Long currentUserId, String deliverName, Long subTimeId) throws Exception {
String userName = userService.getUserNameByUserId(currentUserId);
String projectName = "";
ProTaskSubTime proTaskSubTime = taskSubTimeDao.selectByPrimaryKey(subTimeId);
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);
}
SysProject project = sysProjectDao.selectByPrimaryKey(taskDetail.getProjectId());
if(ObjectUtil.isNotNull(project)){
projectName = project.getName();
}
//生成消息
RobotUtil.Message message = new RobotUtil.Message(project.getId());
message.appendParams(userName,projectName,taskDetail.getName(),deliverName);
//获取角色内成员的手机号
String[] memberPhone = getMemberPhonesByRoleId(taskDetail.getExecutorRole());
if(memberPhone.length != 0){
message.appendMentionedMobileList(memberPhone);
}
RobotUtil.set(message);
}
@Override
public void deleteDeliverRobotSend(Long currentUserId, String deliverName, Long subTimeId) throws Exception {
String userName = userService.getUserNameByUserId(currentUserId);
String projectName = "";
ProTaskSubTime proTaskSubTime = taskSubTimeDao.selectByPrimaryKey(subTimeId);
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);
}
SysProject project = sysProjectDao.selectByPrimaryKey(taskDetail.getProjectId());
if(ObjectUtil.isNotNull(project)){
projectName = project.getName();
}
//生成消息
RobotUtil.Message message = new RobotUtil.Message(project.getId());
message.appendParams(userName,projectName,taskDetail.getName(),deliverName);
//获取角色内成员的手机号
String[] memberPhone = getMemberPhonesByRoleId(taskDetail.getExecutorRole());
if(memberPhone.length != 0){
message.appendMentionedMobileList(memberPhone);
}
RobotUtil.set(message);
}
@Override
public void checkDeliverRobotSend(Long currentUserId, ProTaskDetail task, Long uploadUserId, String deliverName) throws Exception {
String userName = userService.getUserNameByUserId(currentUserId);
String uploadUserName = "";
if(ObjectUtil.isNotNull(uploadUserId)){
uploadUserName = userService.getUserNameByUserId(uploadUserId);
}
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(userName,uploadUserName,projectName,task.getName(),deliverName);
//获取角色内成员的手机号
String[] memberPhone = getMemberPhonesByRoleId(task.getExecutorRole());
if(memberPhone.length != 0){
message.appendMentionedMobileList(memberPhone);
}
RobotUtil.set(message);
}
@Override
public void addCommentRobotSend(Long userId, ProTaskDetail proTaskDetail) throws Exception {
String userName = userService.getUserNameByUserId(userId);
String projectName = "";
SysProject project = sysProjectDao.selectByPrimaryKey(proTaskDetail.getProjectId());
if(ObjectUtil.isNotNull(project)){
projectName = project.getName();
}
//生成消息
RobotUtil.Message message = new RobotUtil.Message(project.getId());
message.appendParams(userName,projectName,proTaskDetail.getName());
//获取角色内成员的手机号
String[] memberPhone = getMemberPhonesByRoleId(proTaskDetail.getExecutorRole());
if(memberPhone.length != 0){
message.appendMentionedMobileList(memberPhone);
}
RobotUtil.set(message);
}
}

32
tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java

@ -21,6 +21,7 @@ import com.ccsens.util.bean.message.common.MessageRule;
import com.ccsens.util.config.RabbitMQConfig; import com.ccsens.util.config.RabbitMQConfig;
import com.ccsens.util.exception.BaseException; import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.omg.CORBA.OBJ_ADAPTER;
import org.springframework.amqp.core.AmqpTemplate; import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -63,6 +64,8 @@ public class TaskDeliverService implements ITaskDeliverService {
private Snowflake snowflake; private Snowflake snowflake;
@Autowired @Autowired
private AmqpTemplate rabbitTemplate; private AmqpTemplate rabbitTemplate;
@Autowired
private IRobotService robotService;
@Override @Override
public void saveDeliver(ProTaskDeliver taskDeliver) { public void saveDeliver(ProTaskDeliver taskDeliver) {
@ -279,6 +282,8 @@ public class TaskDeliverService implements ITaskDeliverService {
} else { } else {
throw new BaseException(CodeEnum.IS_NOT_EXECUTOR); throw new BaseException(CodeEnum.IS_NOT_EXECUTOR);
} }
//用智能助手发送消息
robotService.addDeliverRobotSend(currentUserId,d.getName(),subTimeId);
return deliverInfo; return deliverInfo;
} }
@ -477,10 +482,17 @@ public class TaskDeliverService implements ITaskDeliverService {
BaseMessageDto.MessageUser messageUser = null; BaseMessageDto.MessageUser messageUser = null;
ProRole checkRole = null; ProRole checkRole = null;
Set<String> userIdSet = new HashSet<>(); Set<String> userIdSet = new HashSet<>();
Long uploadUserId = null;
//查找该用户在此项目的角色 //查找该用户在此项目的角色
ProTaskDeliver deliver = taskDeliverDao.selectByPrimaryKey(checkDeliver.getDeliverId()); ProTaskDeliver deliver = taskDeliverDao.selectByPrimaryKey(checkDeliver.getDeliverId());
if(ObjectUtil.isNull(deliver)){
throw new BaseException(CodeEnum.NOT_DELIVER);
}
ProTaskDetail task = taskDetailDao.selectByPrimaryKey(deliver.getTaskDetailId()); ProTaskDetail task = taskDetailDao.selectByPrimaryKey(deliver.getTaskDetailId());
if(ObjectUtil.isNull(task)){
throw new BaseException(CodeEnum.NOT_TASK);
}
ProRole proRole = proRoleDao.selectByPrimaryKey(task.getExecutorRole()); ProRole proRole = proRoleDao.selectByPrimaryKey(task.getExecutorRole());
List<ProRole> roleList = proMemberService.selectRolesByUserIdAndProjectId(currentUserId, task.getProjectId()); List<ProRole> roleList = proMemberService.selectRolesByUserIdAndProjectId(currentUserId, task.getProjectId());
if (CollectionUtil.isNotEmpty(roleList)) { if (CollectionUtil.isNotEmpty(roleList)) {
@ -510,6 +522,7 @@ public class TaskDeliverService implements ITaskDeliverService {
} }
} }
userIdSet.add(postLog.getUserId().toString()); userIdSet.add(postLog.getUserId().toString());
uploadUserId = postLog.getUserId();
checkRole = role; checkRole = role;
// } // }
} }
@ -523,7 +536,7 @@ public class TaskDeliverService implements ITaskDeliverService {
DeliverMessageWithCheckerDto checkerDto = new DeliverMessageWithCheckerDto(); DeliverMessageWithCheckerDto checkerDto = new DeliverMessageWithCheckerDto();
DeliverMessageWithCheckerDto.Data checkerDtoData = new DeliverMessageWithCheckerDto.Data(); DeliverMessageWithCheckerDto.Data checkerDtoData = new DeliverMessageWithCheckerDto.Data();
checkerDtoData.setProjectId(task.getProjectId()); checkerDtoData.setProjectId(task.getProjectId());
if (proRole.getName().equals(WebConstant.ROLE_NAME.AllMember.phase)) { if (ObjectUtil.isNotNull(proRole) && proRole.getName().equals(WebConstant.ROLE_NAME.AllMember.phase)) {
checkerDtoData.setRoleId(roleList.get(0).getId()); checkerDtoData.setRoleId(roleList.get(0).getId());
} else { } else {
checkerDtoData.setRoleId(task.getExecutorRole()); checkerDtoData.setRoleId(task.getExecutorRole());
@ -547,8 +560,11 @@ public class TaskDeliverService implements ITaskDeliverService {
//检查完,返回数据 //检查完,返回数据
DeliverVo.DeliverInfo deliverInfo = selectDeliverInfo(currentUserId, deliver.getId(), checkDeliver.getTaskId()); DeliverVo.DeliverInfo deliverInfo = selectDeliverInfo(currentUserId, deliver.getId(), checkDeliver.getTaskId());
//用智能助手发送消息
robotService.checkDeliverRobotSend(currentUserId,task,uploadUserId,deliver.getName());
return deliverInfo; return deliverInfo;
} }
/** /**
* 检查未通过将任务设为未完成 * 检查未通过将任务设为未完成
*/ */
@ -658,12 +674,14 @@ public class TaskDeliverService implements ITaskDeliverService {
@Override @Override
public void deleteDeliver(Long currentUserId, Long deliverId, Long taskId) throws Exception { public void deleteDeliver(Long currentUserId, Long deliverId, Long taskId) throws Exception {
ProTaskDeliver deliver = taskDeliverDao.selectByPrimaryKey(deliverId); ProTaskDeliver deliver = taskDeliverDao.selectByPrimaryKey(deliverId);
if(ObjectUtil.isNull(deliver)){
throw new BaseException(CodeEnum.NOT_DELIVER);
}
Long subTimeId = isTaskOrSubTime(taskId); Long subTimeId = isTaskOrSubTime(taskId);
//接受消息的角色 //接受消息的角色
List<BaseMessageDto.MessageUser> messageUserList = new ArrayList<>(); List<BaseMessageDto.MessageUser> messageUserList = new ArrayList<>();
BaseMessageDto.MessageUser messageUser = null; BaseMessageDto.MessageUser messageUser = null;
List<Long> userIdList = new ArrayList<>(); List<Long> userIdList = new ArrayList<>();
//同步锁,防止多个用户同时操作该数据 //同步锁,防止多个用户同时操作该数据
synchronized (this) { synchronized (this) {
//查找此交付物与文件的中间表 //查找此交付物与文件的中间表
@ -715,12 +733,7 @@ public class TaskDeliverService implements ITaskDeliverService {
DeliverMessageWithDeleteDto deleteMessage = new DeliverMessageWithDeleteDto(); DeliverMessageWithDeleteDto deleteMessage = new DeliverMessageWithDeleteDto();
DeliverMessageWithDeleteDto.Data deleteMessageData = new DeliverMessageWithDeleteDto.Data(); DeliverMessageWithDeleteDto.Data deleteMessageData = new DeliverMessageWithDeleteDto.Data();
deleteMessageData.setProjectId(task.getProjectId()); deleteMessageData.setProjectId(task.getProjectId());
// if (role.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.AllMember.phase)) {
// List<ProRole> roleList = memberService.selectRolesByUserIdAndProjectId(currentUserId, task.getProjectId());
// deleteMessageData.setRoleId(roleList.get(0).getId());
// } else {
//
// }
deleteMessageData.setRoleId(task.getExecutorRole()); deleteMessageData.setRoleId(task.getExecutorRole());
deleteMessageData.setTaskId(task.getId()); deleteMessageData.setTaskId(task.getId());
deleteMessageData.setDeliverId(deliverId); deleteMessageData.setDeliverId(deliverId);
@ -734,6 +747,9 @@ public class TaskDeliverService implements ITaskDeliverService {
InMessage inMessage = InMessage.newToUserMessage(currentUserId.toString(),userIdSet,null,messageRule,s); InMessage inMessage = InMessage.newToUserMessage(currentUserId.toString(),userIdSet,null,messageRule,s);
messageService.sendDeliverMessageWithDelete(inMessage); messageService.sendDeliverMessageWithDelete(inMessage);
//用智能助手发送消息
robotService.deleteDeliverRobotSend(currentUserId,deliver.getName(),subTimeId);
} }
} }

23
tall/src/main/java/com/ccsens/tall/service/TaskPluginService.java

@ -29,8 +29,12 @@ public class TaskPluginService implements ITaskPluginService{
@Autowired @Autowired
private TaskDetailDao taskDetailDao; private TaskDetailDao taskDetailDao;
@Autowired @Autowired
private TaskSubTimeDao taskSubTimeDao;
@Autowired
private SysPluginDao sysPluginDao; private SysPluginDao sysPluginDao;
@Autowired @Autowired
private SysProjectDao sysProjectDao;
@Autowired
private ProRoleDao roleDao; private ProRoleDao roleDao;
@Autowired @Autowired
private IProMemberService proMemberService; private IProMemberService proMemberService;
@ -44,6 +48,8 @@ public class TaskPluginService implements ITaskPluginService{
private SysAuthDao sysAuthDao; private SysAuthDao sysAuthDao;
@Autowired @Autowired
private IProRoleService proRoleService; private IProRoleService proRoleService;
@Autowired
private IRobotService robotService;
@Override @Override
public void savePlugin(ProTaskPlugin taskPlugin) { public void savePlugin(ProTaskPlugin taskPlugin) {
@ -101,7 +107,19 @@ public class TaskPluginService implements ITaskPluginService{
* @return * @return
*/ */
@Override @Override
public PluginVo.CommentInfo addComment(Long userId, PluginDto.AddCommentPlugin addCommentPlugin) { public PluginVo.CommentInfo addComment(Long userId, PluginDto.AddCommentPlugin addCommentPlugin) throws Exception {
ProTaskDetail proTaskDetail = null;
ProTaskSubTime subTime = taskSubTimeDao.selectByPrimaryKey(addCommentPlugin.getTaskId());
if(ObjectUtil.isNotNull(subTime)) {
proTaskDetail = taskDetailDao.selectByPrimaryKey(subTime.getTaskDetailId());
if (ObjectUtil.isNull(proTaskDetail)) {
throw new BaseException(CodeEnum.NOT_TASK);
}
}
SysProject sysProject = sysProjectDao.selectByPrimaryKey(proTaskDetail.getProjectId());
if(ObjectUtil.isNull(sysProject)){
throw new BaseException(CodeEnum.NOT_PROJECT);
}
//保存评论信息 //保存评论信息
ProTaskComment proTaskComment = new ProTaskComment(); ProTaskComment proTaskComment = new ProTaskComment();
proTaskComment.setId(snowflake.nextId()); proTaskComment.setId(snowflake.nextId());
@ -109,6 +127,7 @@ public class TaskPluginService implements ITaskPluginService{
proTaskComment.setTaskSubTimeId(addCommentPlugin.getTaskId()); proTaskComment.setTaskSubTimeId(addCommentPlugin.getTaskId());
proTaskComment.setDescription(addCommentPlugin.getDescription()); proTaskComment.setDescription(addCommentPlugin.getDescription());
proTaskComment.setTime(System.currentTimeMillis()); proTaskComment.setTime(System.currentTimeMillis());
proTaskComment.setProjectid(sysProject.getId());
proTaskCommentDao.insertSelective(proTaskComment); proTaskCommentDao.insertSelective(proTaskComment);
//返回发送的信息 //返回发送的信息
PluginVo.CommentInfo commentInfo = new PluginVo.CommentInfo(); PluginVo.CommentInfo commentInfo = new PluginVo.CommentInfo();
@ -132,6 +151,8 @@ public class TaskPluginService implements ITaskPluginService{
commentInfo.setUserName(sysAuthList.get(0).getIdentifier()); commentInfo.setUserName(sysAuthList.get(0).getIdentifier());
} }
} }
//用智能助手发送消息
robotService.addCommentRobotSend(userId,proTaskDetail);
return commentInfo; return commentInfo;
} }

23
tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java

@ -12,6 +12,7 @@ import com.ccsens.tall.bean.po.*;
import com.ccsens.tall.bean.vo.TaskVo; import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.persist.dao.*; import com.ccsens.tall.persist.dao.*;
import com.ccsens.tall.util.RobotUtil;
import com.ccsens.util.CodeEnum; import com.ccsens.util.CodeEnum;
import com.ccsens.util.WebConstant; import com.ccsens.util.WebConstant;
import com.ccsens.util.cron.CronConstant; import com.ccsens.util.cron.CronConstant;
@ -19,13 +20,17 @@ import com.ccsens.util.cron.NatureToDate;
import com.ccsens.util.exception.BaseException; import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j @Slf4j
@Service @Service
@ -42,7 +47,7 @@ public class TaskSubTimeService implements ITaskSubTimeService {
@Autowired @Autowired
private ProSubTimeMemberDao proSubTimeMemberDao; private ProSubTimeMemberDao proSubTimeMemberDao;
@Autowired @Autowired
private TaskMemberDao taskMemberDao; private IUserService userService;
@Autowired @Autowired
private ProTaskDeliverPostLogDao proTaskDeliverPostLogDao; private ProTaskDeliverPostLogDao proTaskDeliverPostLogDao;
@Autowired @Autowired
@ -54,6 +59,8 @@ public class TaskSubTimeService implements ITaskSubTimeService {
@Autowired @Autowired
private IProMemberService proMemberService; private IProMemberService proMemberService;
@Autowired @Autowired
private IProRoleService proRoleService;
@Autowired
private IProTaskDetailService taskDetailService; private IProTaskDetailService taskDetailService;
@Autowired @Autowired
private IMessageService messageService; private IMessageService messageService;
@ -61,6 +68,8 @@ public class TaskSubTimeService implements ITaskSubTimeService {
private IProLogService proLogService; private IProLogService proLogService;
@Autowired @Autowired
private Snowflake snowflake; private Snowflake snowflake;
@Autowired
private IRobotService robotService;
@Override @Override
public void saveProTaskSubTask(ProTaskSubTime proTaskSubTime) { public void saveProTaskSubTask(ProTaskSubTime proTaskSubTime) {
@ -162,8 +171,11 @@ public class TaskSubTimeService implements ITaskSubTimeService {
} }
//返回的任务详细信息 //返回的任务详细信息
TaskVo.NormalTask normalTask = taskDetailService.getTaskInfoByTaskId(currentUserId,taskDetail.getProjectId(),subTimeId.getId()); TaskVo.NormalTask normalTask = taskDetailService.getTaskInfoByTaskId(currentUserId,taskDetail.getProjectId(),subTimeId.getId());
//用智能助手发送消息
robotService.finishTaskRobotSend(currentUserId,normalTask.getProjectId(),normalTask.getProjectName(),normalTask.getName(),normalTask.getExecutorRole(),completedStatus);
return normalTask; return normalTask;
} }
/** /**
* 该成员是否完成了此任务(返回成员对任务的完成情况) * 该成员是否完成了此任务(返回成员对任务的完成情况)
*/ */
@ -290,8 +302,9 @@ public class TaskSubTimeService implements ITaskSubTimeService {
detail.setParentId(addTask.getParentTaskId()); detail.setParentId(addTask.getParentTaskId());
detail.setExecutorRole(addTask.getExecutorId()); detail.setExecutorRole(addTask.getExecutorId());
SysProject project = null;
if(ObjectUtil.isNotNull(addTask.getProjectId())){ if(ObjectUtil.isNotNull(addTask.getProjectId())){
SysProject project = sysProjectDao.selectByPrimaryKey(addTask.getProjectId()); project = sysProjectDao.selectByPrimaryKey(addTask.getProjectId());
if (ObjectUtil.isNotNull(project)) { if (ObjectUtil.isNotNull(project)) {
detail.setProjectId(addTask.getProjectId()); detail.setProjectId(addTask.getProjectId());
detail.setBeginTime(project.getBeginTime()); detail.setBeginTime(project.getBeginTime());
@ -330,7 +343,6 @@ public class TaskSubTimeService implements ITaskSubTimeService {
} }
taskDetailDao.insertSelective(detail); taskDetailDao.insertSelective(detail);
if(ObjectUtil.isNotNull(addTask.getProjectId())){ if(ObjectUtil.isNotNull(addTask.getProjectId())){
SysProject project = sysProjectDao.selectByPrimaryKey(addTask.getProjectId());
if(ObjectUtil.isNotNull(project)) { if(ObjectUtil.isNotNull(project)) {
if (detail.getBeginTime() < project.getBeginTime()) { if (detail.getBeginTime() < project.getBeginTime()) {
project.setBeginTime(detail.getBeginTime()); project.setBeginTime(detail.getBeginTime());
@ -372,7 +384,7 @@ public class TaskSubTimeService implements ITaskSubTimeService {
} }
} }
//交付物 //交付物
if(ObjectUtil.isNotNull(addTask.getTaskDeliver())){ if(StrUtil.isNotEmpty(addTask.getTaskDeliver())){
ProTaskDeliver deliver = new ProTaskDeliver(); ProTaskDeliver deliver = new ProTaskDeliver();
deliver.setId(snowflake.nextId()); deliver.setId(snowflake.nextId());
deliver.setTaskDetailId(detail.getId()); deliver.setTaskDetailId(detail.getId());
@ -400,9 +412,12 @@ public class TaskSubTimeService implements ITaskSubTimeService {
if(ObjectUtil.isNotNull(taskDetail)) { if(ObjectUtil.isNotNull(taskDetail)) {
taskDetailService.managePlugin(currentUserId, detail.getExecutorRole(), taskDetail); taskDetailService.managePlugin(currentUserId, detail.getExecutorRole(), taskDetail);
} }
//通过智能助手发送通知
robotService.addTaskRobotSend(currentUserId,project,addTask.getTaskName(),addTask.getExecutorId());
return taskDetail; return taskDetail;
} }
/** /**
* 清空项目下所有任务的实际开始结束时间和运行状态 * 清空项目下所有任务的实际开始结束时间和运行状态
* @param projectId * @param projectId

8
tall/src/main/java/com/ccsens/tall/service/UserService.java

@ -1533,4 +1533,12 @@ public class UserService implements IUserService {
account.setUsername(accountAuth.getIdentifier()); account.setUsername(accountAuth.getIdentifier());
return account; return account;
} }
/**
* 通过userId获取用户名
*/
@Override
public String getUserNameByUserId(Long userId) {
return userDao.getUserNameByUserId(userId);
}
} }

57
tall/src/main/java/com/ccsens/tall/service/WbsSubSheetService.java

@ -19,7 +19,6 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.sql.Struct;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -49,6 +48,12 @@ public class WbsSubSheetService implements IWbsSubSheetService {
private ProPluginConfigDao proPluginConfigDao; private ProPluginConfigDao proPluginConfigDao;
@Autowired @Autowired
private SysRobotDao sysRobotDao; private SysRobotDao sysRobotDao;
@Autowired
private SysProjectRobotDao sysProjectRobotDao;
@Autowired
private SysMessageTypeDao sysMessageTypeDao;
@Autowired
private SysProjectRobotMessageDao projectRobotMessageDao;
/** /**
* 读取子任务表 * 读取子任务表
@ -462,13 +467,17 @@ public class WbsSubSheetService implements IWbsSubSheetService {
*/ */
@Override @Override
public void getRoBotSheet(Long projectId, XSSFWorkbook xssfWorkbook) { public void getRoBotSheet(Long projectId, XSSFWorkbook xssfWorkbook) {
XSSFSheet robotSheet = xssfWorkbook.getSheet("插件配置"); XSSFSheet robotSheet = xssfWorkbook.getSheet("智能助手");
if(ObjectUtil.isNotNull(robotSheet)){ if(ObjectUtil.isNotNull(robotSheet)){
for (int i = 1; i <= robotSheet.getLastRowNum(); i++) { for (int i = 1; i <= robotSheet.getLastRowNum(); i++) {
//机器人与项目关联信息的id
Long projectRobotId = null;
String robotName = ExcelUtil.getCellValue(robotSheet.getRow(i).getCell(0)); String robotName = ExcelUtil.getCellValue(robotSheet.getRow(i).getCell(0));
String webHookPath = ExcelUtil.getCellValue(robotSheet.getRow(i).getCell(1)); String webHookPath = ExcelUtil.getCellValue(robotSheet.getRow(i).getCell(1));
String messageType = ExcelUtil.getCellValue(robotSheet.getRow(i).getCell(2)); String messageType = ExcelUtil.getCellValue(robotSheet.getRow(i).getCell(2));
String robotType = ExcelUtil.getCellValue(robotSheet.getRow(i).getCell(3));
if(StrUtil.isNotEmpty(webHookPath)){ if(StrUtil.isNotEmpty(webHookPath)){
//添加机器人并关联项目
SysRobotExample sysRobotExample = new SysRobotExample(); SysRobotExample sysRobotExample = new SysRobotExample();
sysRobotExample.createCriteria().andWebHookEqualTo(webHookPath); sysRobotExample.createCriteria().andWebHookEqualTo(webHookPath);
List<SysRobot> sysRobotList = sysRobotDao.selectByExample(sysRobotExample); List<SysRobot> sysRobotList = sysRobotDao.selectByExample(sysRobotExample);
@ -478,8 +487,50 @@ public class WbsSubSheetService implements IWbsSubSheetService {
sysProjectRobot.setId(snowflake.nextId()); sysProjectRobot.setId(snowflake.nextId());
sysProjectRobot.setRobotId(sysRobot.getId()); sysProjectRobot.setRobotId(sysRobot.getId());
sysProjectRobot.setProjectId(projectId); sysProjectRobot.setProjectId(projectId);
sysProjectRobotDao.insertSelective(sysProjectRobot);
projectRobotId = sysProjectRobot.getId();
}else { }else {
SysRobot sysRobot = new SysRobot();
sysRobot.setId(snowflake.nextId());
sysRobot.setName(robotName);
sysRobot.setWebHook(webHookPath);
sysRobot.setClientType(Byte.valueOf(robotType));
sysRobotDao.insertSelective(sysRobot);
SysProjectRobot sysProjectRobot = new SysProjectRobot();
sysProjectRobot.setId(snowflake.nextId());
sysProjectRobot.setRobotId(sysRobot.getId());
sysProjectRobot.setProjectId(projectId);
sysProjectRobotDao.insertSelective(sysProjectRobot);
projectRobotId = sysProjectRobot.getId();
}
}
if(ObjectUtil.isNotNull(projectRobotId)){
//将机器人关联接口
if(StrUtil.isNotEmpty(messageType) && !"全部".equalsIgnoreCase(messageType)){
messageType = StringUtil.replaceComma(messageType);
String[] messages = messageType.split(",");
for(int a = 0; a < messages.length; a++){
SysMessageTypeExample sysMessageTypeExample = new SysMessageTypeExample();
sysMessageTypeExample.createCriteria().andNameEqualTo(messages[a]);
List<SysMessageType> sysMessageTypeList = sysMessageTypeDao.selectByExample(sysMessageTypeExample);
if(CollectionUtil.isNotEmpty(sysMessageTypeList)){
SysMessageType sysMessageType = sysMessageTypeList.get(0);
SysProjectRobotMessage sysProjectRobotMessage = new SysProjectRobotMessage();
sysProjectRobotMessage.setId(snowflake.nextId());
sysProjectRobotMessage.setProjectRobotId(projectRobotId);
sysProjectRobotMessage.setOperateType(sysMessageType.getOperateType());
sysProjectRobotMessage.setAllMessage((byte) 0);
projectRobotMessageDao.insertSelective(sysProjectRobotMessage);
}else {
throw new BaseException(CodeEnum.NOT_MESSAGE_TYPE.addMsg(robotSheet.getSheetName() + i));
}
}
}else {
SysProjectRobotMessage sysProjectRobotMessage = new SysProjectRobotMessage();
sysProjectRobotMessage.setId(snowflake.nextId());
sysProjectRobotMessage.setProjectRobotId(projectRobotId);
sysProjectRobotMessage.setAllMessage((byte) 1);
projectRobotMessageDao.insertSelective(sysProjectRobotMessage);
} }
} }
} }

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

@ -0,0 +1,71 @@
package com.ccsens.tall.util;
import lombok.Data;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class RobotUtil {
@Data
public static class Message{
private String msgType = "text";
private List<String> mentionedList = new ArrayList<>();
private List<String> mentionedMobileList = new ArrayList<>();
private boolean isAtAll = false;
private Long projectId;
private List<String> params = new ArrayList<>();
public Message(){
}
public Message(String msgType,Long projectId){
this.msgType = msgType;
this.projectId = projectId;
}
public Message(Long projectId){
this.projectId = projectId;
}
public void appendMentionedList(String... mentionedList){
if(mentionedList == null || mentionedList.length == 0){
return;
}
this.mentionedList.addAll(Arrays.asList(mentionedList));
}
public void appendMentionedMobileList(String... mentionedMobileList){
if(mentionedMobileList == null || mentionedMobileList.length == 0){
return;
}
this.mentionedMobileList.addAll(Arrays.asList(mentionedMobileList));
}
public void appendParams(String... params){
if(params == null || params.length == 0){
return;
}
this.params.addAll(Arrays.asList(params));
}
}
static final ThreadLocal<Message> robotThreadLocal = new ThreadLocal<Message>();
public static Message get() {
return robotThreadLocal.get();
}
public static void set(Message message) {
robotThreadLocal.set(message);
}
public static void del() {
robotThreadLocal.remove();
}
}

17
tall/src/main/java/com/ccsens/tall/util/TallConstant.java

@ -0,0 +1,17 @@
package com.ccsens.tall.util;
/**
* @author
*/
public class TallConstant {
/**
* 接口发送的信息模板
* @param operateType 接口code
* @return
*/
public static String getRobotTemplateKey(int operateType) {
return "operate_type_" + operateType;
}
}

4
tall/src/main/java/com/ccsens/tall/web/DeliverController.java

@ -7,6 +7,7 @@ import com.ccsens.tall.service.ITaskDeliverService;
import com.ccsens.util.JsonResponse; import com.ccsens.util.JsonResponse;
import com.ccsens.util.UploadFileUtil_Servlet3; import com.ccsens.util.UploadFileUtil_Servlet3;
import com.ccsens.util.WebConstant; import com.ccsens.util.WebConstant;
import com.ccsens.util.annotation.OperateType;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -43,6 +44,7 @@ public class DeliverController {
return JsonResponse.newInstance().ok(dFile); return JsonResponse.newInstance().ok(dFile);
} }
@OperateType(value = 7)
@ApiOperation(value = "上传交付物信息", notes = "") @ApiOperation(value = "上传交付物信息", notes = "")
@ApiImplicitParams({ @ApiImplicitParams({
}) })
@ -94,6 +96,7 @@ public class DeliverController {
return JsonResponse.newInstance().ok(deliverInfo); return JsonResponse.newInstance().ok(deliverInfo);
} }
@OperateType(value = 9)
@ApiOperation(value = "检查人评价交付物",notes = "") @ApiOperation(value = "检查人评价交付物",notes = "")
@ApiImplicitParams({ @ApiImplicitParams({
}) })
@ -127,6 +130,7 @@ public class DeliverController {
return JsonResponse.newInstance().ok(deliverFileList); return JsonResponse.newInstance().ok(deliverFileList);
} }
@OperateType(value = 8)
@ApiOperation(value = "删除交付物",notes = "") @ApiOperation(value = "删除交付物",notes = "")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name="deliverId",value = "交付物Id",required = true,paramType = "query",dataType="String"), @ApiImplicitParam(name="deliverId",value = "交付物Id",required = true,paramType = "query",dataType="String"),

6
tall/src/main/java/com/ccsens/tall/web/TaskController.java

@ -7,6 +7,7 @@ import com.ccsens.tall.service.IProTaskDetailService;
import com.ccsens.tall.service.ITaskSubTimeService; import com.ccsens.tall.service.ITaskSubTimeService;
import com.ccsens.util.JsonResponse; import com.ccsens.util.JsonResponse;
import com.ccsens.util.WebConstant; import com.ccsens.util.WebConstant;
import com.ccsens.util.annotation.OperateType;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -25,6 +26,7 @@ public class TaskController {
@Autowired @Autowired
private IProTaskDetailService taskDetailService; private IProTaskDetailService taskDetailService;
@OperateType(value = 6)
@ApiOperation(value = "完成任务",notes = "") @ApiOperation(value = "完成任务",notes = "")
@ApiImplicitParams({ @ApiImplicitParams({
}) })
@ -122,6 +124,7 @@ public class TaskController {
//============================================================== //==============================================================
@OperateType(value = 3)
@ApiOperation(value = "添加清单(任务)",notes = "") @ApiOperation(value = "添加清单(任务)",notes = "")
@ApiImplicitParams({ @ApiImplicitParams({
}) })
@ -134,6 +137,7 @@ public class TaskController {
return JsonResponse.newInstance().ok(normalTask); return JsonResponse.newInstance().ok(normalTask);
} }
@OperateType(value = 4)
@ApiOperation(value = "删除任务",notes = "") @ApiOperation(value = "删除任务",notes = "")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "taskId", value = "任务id", required = true, paramType = "query") @ApiImplicitParam(name = "taskId", value = "任务id", required = true, paramType = "query")
@ -146,7 +150,7 @@ public class TaskController {
return JsonResponse.newInstance().ok(); return JsonResponse.newInstance().ok();
} }
@OperateType(value = 5)
@ApiOperation(value = "修改任务信息",notes = "") @ApiOperation(value = "修改任务信息",notes = "")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "taskId", value = "任务id", required = true, paramType = "query") @ApiImplicitParam(name = "taskId", value = "任务id", required = true, paramType = "query")

4
tall/src/main/resources/application.yml

@ -1,4 +1,4 @@
spring: spring:
profiles: profiles:
active: test active: dev
include: util-test,common include: util-dev,common

15
tall/src/main/resources/mapper_dao/SysUserDao.xml

@ -66,4 +66,19 @@
where where
user_id = #{oldUserId} user_id = #{oldUserId}
</update> </update>
<select id="getUserNameByUserId" parameterType="java.util.Map" resultType="java.lang.String">
SELECT
IF( u.nickname = '', a.identifier, u.nickname ) AS userName
FROM
t_sys_user u
LEFT JOIN t_sys_auth a ON u.id = a.user_id
AND a.identify_type = 3
WHERE
u.rec_status = 0
and
a.rec_status = 0
and
u.id = #{userId}
</select>
</mapper> </mapper>

28
tall/src/main/resources/mapper_raw/SysProjectRobotMessageMapper.xml

@ -4,7 +4,7 @@
<resultMap id="BaseResultMap" type="com.ccsens.tall.bean.po.SysProjectRobotMessage"> <resultMap id="BaseResultMap" type="com.ccsens.tall.bean.po.SysProjectRobotMessage">
<id column="id" jdbcType="BIGINT" property="id" /> <id column="id" jdbcType="BIGINT" property="id" />
<result column="project_robot_id" jdbcType="BIGINT" property="projectRobotId" /> <result column="project_robot_id" jdbcType="BIGINT" property="projectRobotId" />
<result column="message_id" jdbcType="BIGINT" property="messageId" /> <result column="operate_type" jdbcType="TINYINT" property="operateType" />
<result column="all_message" jdbcType="TINYINT" property="allMessage" /> <result column="all_message" jdbcType="TINYINT" property="allMessage" />
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" /> <result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" /> <result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
@ -69,7 +69,7 @@
</where> </where>
</sql> </sql>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, project_robot_id, message_id, all_message, created_at, updated_at, rec_status id, project_robot_id, operate_type, all_message, created_at, updated_at, rec_status
</sql> </sql>
<select id="selectByExample" parameterType="com.ccsens.tall.bean.po.SysProjectRobotMessageExample" resultMap="BaseResultMap"> <select id="selectByExample" parameterType="com.ccsens.tall.bean.po.SysProjectRobotMessageExample" resultMap="BaseResultMap">
select select
@ -102,10 +102,10 @@
</if> </if>
</delete> </delete>
<insert id="insert" parameterType="com.ccsens.tall.bean.po.SysProjectRobotMessage"> <insert id="insert" parameterType="com.ccsens.tall.bean.po.SysProjectRobotMessage">
insert into t_sys_project_robot_message (id, project_robot_id, message_id, insert into t_sys_project_robot_message (id, project_robot_id, operate_type,
all_message, created_at, updated_at, all_message, created_at, updated_at,
rec_status) rec_status)
values (#{id,jdbcType=BIGINT}, #{projectRobotId,jdbcType=BIGINT}, #{messageId,jdbcType=BIGINT}, values (#{id,jdbcType=BIGINT}, #{projectRobotId,jdbcType=BIGINT}, #{operateType,jdbcType=TINYINT},
#{allMessage,jdbcType=TINYINT}, #{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP}, #{allMessage,jdbcType=TINYINT}, #{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP},
#{recStatus,jdbcType=TINYINT}) #{recStatus,jdbcType=TINYINT})
</insert> </insert>
@ -118,8 +118,8 @@
<if test="projectRobotId != null"> <if test="projectRobotId != null">
project_robot_id, project_robot_id,
</if> </if>
<if test="messageId != null"> <if test="operateType != null">
message_id, operate_type,
</if> </if>
<if test="allMessage != null"> <if test="allMessage != null">
all_message, all_message,
@ -141,8 +141,8 @@
<if test="projectRobotId != null"> <if test="projectRobotId != null">
#{projectRobotId,jdbcType=BIGINT}, #{projectRobotId,jdbcType=BIGINT},
</if> </if>
<if test="messageId != null"> <if test="operateType != null">
#{messageId,jdbcType=BIGINT}, #{operateType,jdbcType=TINYINT},
</if> </if>
<if test="allMessage != null"> <if test="allMessage != null">
#{allMessage,jdbcType=TINYINT}, #{allMessage,jdbcType=TINYINT},
@ -173,8 +173,8 @@
<if test="record.projectRobotId != null"> <if test="record.projectRobotId != null">
project_robot_id = #{record.projectRobotId,jdbcType=BIGINT}, project_robot_id = #{record.projectRobotId,jdbcType=BIGINT},
</if> </if>
<if test="record.messageId != null"> <if test="record.operateType != null">
message_id = #{record.messageId,jdbcType=BIGINT}, operate_type = #{record.operateType,jdbcType=TINYINT},
</if> </if>
<if test="record.allMessage != null"> <if test="record.allMessage != null">
all_message = #{record.allMessage,jdbcType=TINYINT}, all_message = #{record.allMessage,jdbcType=TINYINT},
@ -197,7 +197,7 @@
update t_sys_project_robot_message update t_sys_project_robot_message
set id = #{record.id,jdbcType=BIGINT}, set id = #{record.id,jdbcType=BIGINT},
project_robot_id = #{record.projectRobotId,jdbcType=BIGINT}, project_robot_id = #{record.projectRobotId,jdbcType=BIGINT},
message_id = #{record.messageId,jdbcType=BIGINT}, operate_type = #{record.operateType,jdbcType=TINYINT},
all_message = #{record.allMessage,jdbcType=TINYINT}, all_message = #{record.allMessage,jdbcType=TINYINT},
created_at = #{record.createdAt,jdbcType=TIMESTAMP}, created_at = #{record.createdAt,jdbcType=TIMESTAMP},
updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, updated_at = #{record.updatedAt,jdbcType=TIMESTAMP},
@ -212,8 +212,8 @@
<if test="projectRobotId != null"> <if test="projectRobotId != null">
project_robot_id = #{projectRobotId,jdbcType=BIGINT}, project_robot_id = #{projectRobotId,jdbcType=BIGINT},
</if> </if>
<if test="messageId != null"> <if test="operateType != null">
message_id = #{messageId,jdbcType=BIGINT}, operate_type = #{operateType,jdbcType=TINYINT},
</if> </if>
<if test="allMessage != null"> <if test="allMessage != null">
all_message = #{allMessage,jdbcType=TINYINT}, all_message = #{allMessage,jdbcType=TINYINT},
@ -233,7 +233,7 @@
<update id="updateByPrimaryKey" parameterType="com.ccsens.tall.bean.po.SysProjectRobotMessage"> <update id="updateByPrimaryKey" parameterType="com.ccsens.tall.bean.po.SysProjectRobotMessage">
update t_sys_project_robot_message update t_sys_project_robot_message
set project_robot_id = #{projectRobotId,jdbcType=BIGINT}, set project_robot_id = #{projectRobotId,jdbcType=BIGINT},
message_id = #{messageId,jdbcType=BIGINT}, operate_type = #{operateType,jdbcType=TINYINT},
all_message = #{allMessage,jdbcType=TINYINT}, all_message = #{allMessage,jdbcType=TINYINT},
created_at = #{createdAt,jdbcType=TIMESTAMP}, created_at = #{createdAt,jdbcType=TIMESTAMP},
updated_at = #{updatedAt,jdbcType=TIMESTAMP}, updated_at = #{updatedAt,jdbcType=TIMESTAMP},

1
util/src/main/java/com/ccsens/util/CodeEnum.java

@ -114,6 +114,7 @@ public enum CodeEnum {
SELECT_TIME_ERROR(96,"请输入正确的查询时间",true), SELECT_TIME_ERROR(96,"请输入正确的查询时间",true),
TASK_PREPARATION(97,"任务已经开始了,请勿重复操作",true), TASK_PREPARATION(97,"任务已经开始了,请勿重复操作",true),
NOT_COMMENT(98,"该评论不存在",true), NOT_COMMENT(98,"该评论不存在",true),
NOT_MESSAGE_TYPE(99,"找不到消息类型,请检查名称是否正确",true),
; ;
public CodeEnum addMsg(String msg){ public CodeEnum addMsg(String msg){

16
util/src/main/java/com/ccsens/util/annotation/OperateType.java

@ -0,0 +1,16 @@
package com.ccsens.util.annotation;
import java.lang.annotation.*;
import java.util.List;
/**
* @author
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface OperateType {
public int value();
}

111
util/src/main/java/com/ccsens/util/wx/WxRobotUtil.java

@ -0,0 +1,111 @@
package com.ccsens.util.wx;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import com.ccsens.util.JacksonUtil;
import lombok.Data;
import org.json.JSONObject;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
public class WxRobotUtil {
@Data
public static class WxRobotVo{
private String msgtype;
private WxRobotText text;
private WxRobotMarkdown markdown;
}
@Data
public static class WxRobotText{
private StringBuilder content;
private List<String> mentioned_list;
private List<String> mentioned_mobile_list;
}
@Data
public static class WxRobotMarkdown{
private StringBuilder content;
}
public static void sendPost(String url, String param){
PrintWriter out = null;
BufferedReader in = null;
JSONObject jsonObject = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// conn.addRequestProperty("Cookie", "stay_login=1 smid=DumpWzWQSaLmKlFY1PgAtURdV_u3W3beoei96zsXkdSABwjVCRrnnNBsnH1wGWI0-VIflgvMaZAfli9H2NGtJg id=EtEWf1XZRLIwk1770NZN047804");//设置获取的cookie
// 获取URLConnection对象对应的输出流(设置请求编码为UTF-8)
out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 获取请求返回数据(设置返回数据编码为UTF-8)
in = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public static void sendRobotInfo(String webHook,StringBuilder content,String msgType,List<String> mentionedList,List<String> mentionedMobileList)throws Exception {
WxRobotVo wxRobotVo = new WxRobotVo();
wxRobotVo.setMsgtype(msgType);
if("text".equalsIgnoreCase(msgType)){
WxRobotText wxRobotText = new WxRobotText();
wxRobotText.setContent(content);
if(CollectionUtil.isNotEmpty(mentionedList)){
wxRobotText.setMentioned_list(mentionedList);
}
if(CollectionUtil.isNotEmpty(mentionedMobileList)){
wxRobotText.setMentioned_mobile_list(mentionedMobileList);
}
wxRobotVo.setText(wxRobotText);
}else if("markdown".equalsIgnoreCase(msgType)){
WxRobotMarkdown wxRobotMarkdown = new WxRobotMarkdown();
wxRobotMarkdown.setContent(content);
wxRobotVo.setMarkdown(wxRobotMarkdown);
}
String body = JacksonUtil.beanToJson(wxRobotVo);
System.out.println(body);
sendPost(webHook,body);
}
public static void main(String[] args) throws Exception {
// String path = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=7fbbd546-1c9b-47aa-bcf8-39d272bac87b";
// WxRobotVo wxRobotVo = new WxRobotVo();
// WxRobotText wxRobotText = new WxRobotText();
// wxRobotText.setContent(DateUtil.today());
// wxRobotVo.setMsgtype("text");
// wxRobotVo.setText(wxRobotText);
// String s = JacksonUtil.beanToJson(wxRobotVo);
// System.out.println(s);
// sendPost(path,s);
}
}
Loading…
Cancel
Save