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 messageId;
private Byte operateType;
private Byte allMessage;
@ -36,12 +36,12 @@ public class SysProjectRobotMessage implements Serializable {
this.projectRobotId = projectRobotId;
}
public Long getMessageId() {
return messageId;
public Byte getOperateType() {
return operateType;
}
public void setMessageId(Long messageId) {
this.messageId = messageId;
public void setOperateType(Byte operateType) {
this.operateType = operateType;
}
public Byte getAllMessage() {
@ -84,7 +84,7 @@ public class SysProjectRobotMessage implements Serializable {
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", projectRobotId=").append(projectRobotId);
sb.append(", messageId=").append(messageId);
sb.append(", operateType=").append(operateType);
sb.append(", allMessage=").append(allMessage);
sb.append(", createdAt=").append(createdAt);
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;
}
public Criteria andMessageIdIsNull() {
addCriterion("message_id is null");
public Criteria andOperateTypeIsNull() {
addCriterion("operate_type is null");
return (Criteria) this;
}
public Criteria andMessageIdIsNotNull() {
addCriterion("message_id is not null");
public Criteria andOperateTypeIsNotNull() {
addCriterion("operate_type is not null");
return (Criteria) this;
}
public Criteria andMessageIdEqualTo(Long value) {
addCriterion("message_id =", value, "messageId");
public Criteria andOperateTypeEqualTo(Byte value) {
addCriterion("operate_type =", value, "operateType");
return (Criteria) this;
}
public Criteria andMessageIdNotEqualTo(Long value) {
addCriterion("message_id <>", value, "messageId");
public Criteria andOperateTypeNotEqualTo(Byte value) {
addCriterion("operate_type <>", value, "operateType");
return (Criteria) this;
}
public Criteria andMessageIdGreaterThan(Long value) {
addCriterion("message_id >", value, "messageId");
public Criteria andOperateTypeGreaterThan(Byte value) {
addCriterion("operate_type >", value, "operateType");
return (Criteria) this;
}
public Criteria andMessageIdGreaterThanOrEqualTo(Long value) {
addCriterion("message_id >=", value, "messageId");
public Criteria andOperateTypeGreaterThanOrEqualTo(Byte value) {
addCriterion("operate_type >=", value, "operateType");
return (Criteria) this;
}
public Criteria andMessageIdLessThan(Long value) {
addCriterion("message_id <", value, "messageId");
public Criteria andOperateTypeLessThan(Byte value) {
addCriterion("operate_type <", value, "operateType");
return (Criteria) this;
}
public Criteria andMessageIdLessThanOrEqualTo(Long value) {
addCriterion("message_id <=", value, "messageId");
public Criteria andOperateTypeLessThanOrEqualTo(Byte value) {
addCriterion("operate_type <=", value, "operateType");
return (Criteria) this;
}
public Criteria andMessageIdIn(List<Long> values) {
addCriterion("message_id in", values, "messageId");
public Criteria andOperateTypeIn(List<Byte> values) {
addCriterion("operate_type in", values, "operateType");
return (Criteria) this;
}
public Criteria andMessageIdNotIn(List<Long> values) {
addCriterion("message_id not in", values, "messageId");
public Criteria andOperateTypeNotIn(List<Byte> values) {
addCriterion("operate_type not in", values, "operateType");
return (Criteria) this;
}
public Criteria andMessageIdBetween(Long value1, Long value2) {
addCriterion("message_id between", value1, value2, "messageId");
public Criteria andOperateTypeBetween(Byte value1, Byte value2) {
addCriterion("operate_type between", value1, value2, "operateType");
return (Criteria) this;
}
public Criteria andMessageIdNotBetween(Long value1, Long value2) {
addCriterion("message_id not between", value1, value2, "messageId");
public Criteria andOperateTypeNotBetween(Byte value1, Byte value2) {
addCriterion("operate_type not between", value1, value2, "operateType");
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;
@ApiModelProperty("负责人Id")
private Long executorRole;
@ApiModelProperty("负责人Id")
@ApiModelProperty("负责人名称")
private String executorRoleName;
@ApiModelProperty("开始时间")
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 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<>();
//获取项目下所有任务
// 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);
if(CollectionUtil.isNotEmpty(taskDetailList)){
for(ProTaskDetail taskDetail : taskDetailList){
@ -215,7 +210,7 @@ public class ExportWbsService implements IExportWbsService{
List<WbsVo.DeliverInfo> deliverInfoList = new ArrayList<>();
ProTaskDeliverExample deliverExample = new ProTaskDeliverExample();
deliverExample.createCriteria().andTaskDetailIdEqualTo(taskId);
deliverExample.createCriteria().andTaskDetailIdEqualTo(taskId).andIsInputEqualTo(0);
List<ProTaskDeliver> deliverList = taskDeliverDao.selectByExample(deliverExample);
if(CollectionUtil.isNotEmpty(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;
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);

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

@ -78,4 +78,6 @@ public interface IUserService {
void mergeUserId(Long userId, Long uselessId);
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 ,
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) {
int power = 0;
SysProject project = projectDao.selectByPrimaryKey(projectId);
if (project.getCreatorId().longValue() == userId) {
power = 2;
}
List<ProRole> roles = getProRoleByProjectIdAndUserId(projectId, userId);
if (CollectionUtil.isNotEmpty(roles)) {
for (ProRole role : roles) {
int i = proRoleDao.selectPowerByRoleName(role.getDescription());
power = i > power ? i : power;
if(ObjectUtil.isNotNull(project)) {
if (project.getCreatorId().longValue() == userId) {
power = 2;
}
List<ProRole> roles = getProRoleByProjectIdAndUserId(projectId, userId);
if (CollectionUtil.isNotEmpty(roles)) {
for (ProRole role : roles) {
int i = proRoleDao.selectPowerByRoleName(role.getDescription());
power = i > power ? i : power;
}
}
}
return power;
@ -221,11 +223,14 @@ public class ProRoleService implements IProRoleService {
*/
@Override
public TaskVo.RoleCheckList selectRoleByCheckOrExecutor(Long roleId) {
TaskVo.RoleCheckList roleCheckList = new TaskVo.RoleCheckList();
if (roleId != 0) {
TaskVo.RoleCheckList roleCheckList = null;
if (roleId != 0 || ObjectUtil.isNotNull(roleId)) {
ProRole role = proRoleDao.selectByPrimaryKey(roleId);
roleCheckList.setId(role.getId());
roleCheckList.setName(role.getName());
if(ObjectUtil.isNotNull(role)){
roleCheckList = new TaskVo.RoleCheckList();
roleCheckList.setId(role.getId());
roleCheckList.setName(role.getName());
}
}
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.ProTaskShowDao;
import com.ccsens.tall.persist.mapper.ProPluginConfigMapper;
import com.ccsens.tall.util.RobotUtil;
import com.ccsens.tall.util.TaskUtil;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.DateUtil;
@ -30,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j
@ -47,7 +49,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
@Autowired
private IProMemberService proMemberService;
@Autowired
private IProShowService proShowService;
private IUserService userService;
@Autowired
private ProTaskShowDao proTaskShowDao;
@Autowired
@ -72,6 +74,8 @@ public class ProTaskDetailService implements IProTaskDetailService {
private MtFeignClient mtFeignClient;
@Resource
private ProPluginConfigMapper proPluginConfigMapper;
@Autowired
private IRobotService robotService;
@Override
public void saveTaskDetail(ProTaskDetail taskDetail) {
@ -989,6 +993,9 @@ public class ProTaskDetailService implements IProTaskDetailService {
} else {
taskDetail = taskDetailDao.selectByPrimaryKey(taskId);
}
if(ObjectUtil.isNull(taskDetail)){
throw new BaseException(CodeEnum.NOT_TASK);
}
// //本用户在项目中的角色
// List<ProRole> proRoles = proRoleService.getProRoleByProjectIdAndUserId(taskDetail.getProjectId(), currentUserId);
//用户在项目中的最高权限
@ -1004,6 +1011,8 @@ public class ProTaskDetailService implements IProTaskDetailService {
} else {
throw new BaseException(CodeEnum.NOT_POWER);
}
//通过智能助手发送消息
robotService.deleteTaskRobotSend(currentUserId,taskDetail);
}
@Override
@ -1119,6 +1128,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
}else {
throw new BaseException(CodeEnum.NOT_TASK);
}
robotService.changeTaskRobotSend(currentUserId,normalTask);
return normalTask;
}
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.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.omg.CORBA.OBJ_ADAPTER;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -63,6 +64,8 @@ public class TaskDeliverService implements ITaskDeliverService {
private Snowflake snowflake;
@Autowired
private AmqpTemplate rabbitTemplate;
@Autowired
private IRobotService robotService;
@Override
public void saveDeliver(ProTaskDeliver taskDeliver) {
@ -279,6 +282,8 @@ public class TaskDeliverService implements ITaskDeliverService {
} else {
throw new BaseException(CodeEnum.IS_NOT_EXECUTOR);
}
//用智能助手发送消息
robotService.addDeliverRobotSend(currentUserId,d.getName(),subTimeId);
return deliverInfo;
}
@ -477,10 +482,17 @@ public class TaskDeliverService implements ITaskDeliverService {
BaseMessageDto.MessageUser messageUser = null;
ProRole checkRole = null;
Set<String> userIdSet = new HashSet<>();
Long uploadUserId = null;
//查找该用户在此项目的角色
ProTaskDeliver deliver = taskDeliverDao.selectByPrimaryKey(checkDeliver.getDeliverId());
if(ObjectUtil.isNull(deliver)){
throw new BaseException(CodeEnum.NOT_DELIVER);
}
ProTaskDetail task = taskDetailDao.selectByPrimaryKey(deliver.getTaskDetailId());
if(ObjectUtil.isNull(task)){
throw new BaseException(CodeEnum.NOT_TASK);
}
ProRole proRole = proRoleDao.selectByPrimaryKey(task.getExecutorRole());
List<ProRole> roleList = proMemberService.selectRolesByUserIdAndProjectId(currentUserId, task.getProjectId());
if (CollectionUtil.isNotEmpty(roleList)) {
@ -510,6 +522,7 @@ public class TaskDeliverService implements ITaskDeliverService {
}
}
userIdSet.add(postLog.getUserId().toString());
uploadUserId = postLog.getUserId();
checkRole = role;
// }
}
@ -523,7 +536,7 @@ public class TaskDeliverService implements ITaskDeliverService {
DeliverMessageWithCheckerDto checkerDto = new DeliverMessageWithCheckerDto();
DeliverMessageWithCheckerDto.Data checkerDtoData = new DeliverMessageWithCheckerDto.Data();
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());
} else {
checkerDtoData.setRoleId(task.getExecutorRole());
@ -547,8 +560,11 @@ public class TaskDeliverService implements ITaskDeliverService {
//检查完,返回数据
DeliverVo.DeliverInfo deliverInfo = selectDeliverInfo(currentUserId, deliver.getId(), checkDeliver.getTaskId());
//用智能助手发送消息
robotService.checkDeliverRobotSend(currentUserId,task,uploadUserId,deliver.getName());
return deliverInfo;
}
/**
* 检查未通过将任务设为未完成
*/
@ -658,12 +674,14 @@ public class TaskDeliverService implements ITaskDeliverService {
@Override
public void deleteDeliver(Long currentUserId, Long deliverId, Long taskId) throws Exception {
ProTaskDeliver deliver = taskDeliverDao.selectByPrimaryKey(deliverId);
if(ObjectUtil.isNull(deliver)){
throw new BaseException(CodeEnum.NOT_DELIVER);
}
Long subTimeId = isTaskOrSubTime(taskId);
//接受消息的角色
List<BaseMessageDto.MessageUser> messageUserList = new ArrayList<>();
BaseMessageDto.MessageUser messageUser = null;
List<Long> userIdList = new ArrayList<>();
//同步锁,防止多个用户同时操作该数据
synchronized (this) {
//查找此交付物与文件的中间表
@ -715,12 +733,7 @@ public class TaskDeliverService implements ITaskDeliverService {
DeliverMessageWithDeleteDto deleteMessage = new DeliverMessageWithDeleteDto();
DeliverMessageWithDeleteDto.Data deleteMessageData = new DeliverMessageWithDeleteDto.Data();
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.setTaskId(task.getId());
deleteMessageData.setDeliverId(deliverId);
@ -734,6 +747,9 @@ public class TaskDeliverService implements ITaskDeliverService {
InMessage inMessage = InMessage.newToUserMessage(currentUserId.toString(),userIdSet,null,messageRule,s);
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
private TaskDetailDao taskDetailDao;
@Autowired
private TaskSubTimeDao taskSubTimeDao;
@Autowired
private SysPluginDao sysPluginDao;
@Autowired
private SysProjectDao sysProjectDao;
@Autowired
private ProRoleDao roleDao;
@Autowired
private IProMemberService proMemberService;
@ -44,6 +48,8 @@ public class TaskPluginService implements ITaskPluginService{
private SysAuthDao sysAuthDao;
@Autowired
private IProRoleService proRoleService;
@Autowired
private IRobotService robotService;
@Override
public void savePlugin(ProTaskPlugin taskPlugin) {
@ -101,7 +107,19 @@ public class TaskPluginService implements ITaskPluginService{
* @return
*/
@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.setId(snowflake.nextId());
@ -109,6 +127,7 @@ public class TaskPluginService implements ITaskPluginService{
proTaskComment.setTaskSubTimeId(addCommentPlugin.getTaskId());
proTaskComment.setDescription(addCommentPlugin.getDescription());
proTaskComment.setTime(System.currentTimeMillis());
proTaskComment.setProjectid(sysProject.getId());
proTaskCommentDao.insertSelective(proTaskComment);
//返回发送的信息
PluginVo.CommentInfo commentInfo = new PluginVo.CommentInfo();
@ -132,6 +151,8 @@ public class TaskPluginService implements ITaskPluginService{
commentInfo.setUserName(sysAuthList.get(0).getIdentifier());
}
}
//用智能助手发送消息
robotService.addCommentRobotSend(userId,proTaskDetail);
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.persist.dao.*;
import com.ccsens.tall.util.RobotUtil;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.WebConstant;
import com.ccsens.util.cron.CronConstant;
@ -19,13 +20,17 @@ import com.ccsens.util.cron.NatureToDate;
import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j
@Service
@ -42,7 +47,7 @@ public class TaskSubTimeService implements ITaskSubTimeService {
@Autowired
private ProSubTimeMemberDao proSubTimeMemberDao;
@Autowired
private TaskMemberDao taskMemberDao;
private IUserService userService;
@Autowired
private ProTaskDeliverPostLogDao proTaskDeliverPostLogDao;
@Autowired
@ -54,6 +59,8 @@ public class TaskSubTimeService implements ITaskSubTimeService {
@Autowired
private IProMemberService proMemberService;
@Autowired
private IProRoleService proRoleService;
@Autowired
private IProTaskDetailService taskDetailService;
@Autowired
private IMessageService messageService;
@ -61,6 +68,8 @@ public class TaskSubTimeService implements ITaskSubTimeService {
private IProLogService proLogService;
@Autowired
private Snowflake snowflake;
@Autowired
private IRobotService robotService;
@Override
public void saveProTaskSubTask(ProTaskSubTime proTaskSubTime) {
@ -162,8 +171,11 @@ public class TaskSubTimeService implements ITaskSubTimeService {
}
//返回的任务详细信息
TaskVo.NormalTask normalTask = taskDetailService.getTaskInfoByTaskId(currentUserId,taskDetail.getProjectId(),subTimeId.getId());
//用智能助手发送消息
robotService.finishTaskRobotSend(currentUserId,normalTask.getProjectId(),normalTask.getProjectName(),normalTask.getName(),normalTask.getExecutorRole(),completedStatus);
return normalTask;
}
/**
* 该成员是否完成了此任务(返回成员对任务的完成情况)
*/
@ -290,8 +302,9 @@ public class TaskSubTimeService implements ITaskSubTimeService {
detail.setParentId(addTask.getParentTaskId());
detail.setExecutorRole(addTask.getExecutorId());
SysProject project = null;
if(ObjectUtil.isNotNull(addTask.getProjectId())){
SysProject project = sysProjectDao.selectByPrimaryKey(addTask.getProjectId());
project = sysProjectDao.selectByPrimaryKey(addTask.getProjectId());
if (ObjectUtil.isNotNull(project)) {
detail.setProjectId(addTask.getProjectId());
detail.setBeginTime(project.getBeginTime());
@ -330,7 +343,6 @@ public class TaskSubTimeService implements ITaskSubTimeService {
}
taskDetailDao.insertSelective(detail);
if(ObjectUtil.isNotNull(addTask.getProjectId())){
SysProject project = sysProjectDao.selectByPrimaryKey(addTask.getProjectId());
if(ObjectUtil.isNotNull(project)) {
if (detail.getBeginTime() < project.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();
deliver.setId(snowflake.nextId());
deliver.setTaskDetailId(detail.getId());
@ -400,9 +412,12 @@ public class TaskSubTimeService implements ITaskSubTimeService {
if(ObjectUtil.isNotNull(taskDetail)) {
taskDetailService.managePlugin(currentUserId, detail.getExecutorRole(), taskDetail);
}
//通过智能助手发送通知
robotService.addTaskRobotSend(currentUserId,project,addTask.getTaskName(),addTask.getExecutorId());
return taskDetail;
}
/**
* 清空项目下所有任务的实际开始结束时间和运行状态
* @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());
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.stereotype.Service;
import java.sql.Struct;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -49,6 +48,12 @@ public class WbsSubSheetService implements IWbsSubSheetService {
private ProPluginConfigDao proPluginConfigDao;
@Autowired
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
public void getRoBotSheet(Long projectId, XSSFWorkbook xssfWorkbook) {
XSSFSheet robotSheet = xssfWorkbook.getSheet("插件配置");
XSSFSheet robotSheet = xssfWorkbook.getSheet("智能助手");
if(ObjectUtil.isNotNull(robotSheet)){
for (int i = 1; i <= robotSheet.getLastRowNum(); i++) {
//机器人与项目关联信息的id
Long projectRobotId = null;
String robotName = ExcelUtil.getCellValue(robotSheet.getRow(i).getCell(0));
String webHookPath = ExcelUtil.getCellValue(robotSheet.getRow(i).getCell(1));
String messageType = ExcelUtil.getCellValue(robotSheet.getRow(i).getCell(2));
String robotType = ExcelUtil.getCellValue(robotSheet.getRow(i).getCell(3));
if(StrUtil.isNotEmpty(webHookPath)){
//添加机器人并关联项目
SysRobotExample sysRobotExample = new SysRobotExample();
sysRobotExample.createCriteria().andWebHookEqualTo(webHookPath);
List<SysRobot> sysRobotList = sysRobotDao.selectByExample(sysRobotExample);
@ -478,8 +487,50 @@ public class WbsSubSheetService implements IWbsSubSheetService {
sysProjectRobot.setId(snowflake.nextId());
sysProjectRobot.setRobotId(sysRobot.getId());
sysProjectRobot.setProjectId(projectId);
sysProjectRobotDao.insertSelective(sysProjectRobot);
projectRobotId = sysProjectRobot.getId();
}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.UploadFileUtil_Servlet3;
import com.ccsens.util.WebConstant;
import com.ccsens.util.annotation.OperateType;
import io.jsonwebtoken.Claims;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
@ -43,6 +44,7 @@ public class DeliverController {
return JsonResponse.newInstance().ok(dFile);
}
@OperateType(value = 7)
@ApiOperation(value = "上传交付物信息", notes = "")
@ApiImplicitParams({
})
@ -94,6 +96,7 @@ public class DeliverController {
return JsonResponse.newInstance().ok(deliverInfo);
}
@OperateType(value = 9)
@ApiOperation(value = "检查人评价交付物",notes = "")
@ApiImplicitParams({
})
@ -127,6 +130,7 @@ public class DeliverController {
return JsonResponse.newInstance().ok(deliverFileList);
}
@OperateType(value = 8)
@ApiOperation(value = "删除交付物",notes = "")
@ApiImplicitParams({
@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.util.JsonResponse;
import com.ccsens.util.WebConstant;
import com.ccsens.util.annotation.OperateType;
import io.jsonwebtoken.Claims;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
@ -25,6 +26,7 @@ public class TaskController {
@Autowired
private IProTaskDetailService taskDetailService;
@OperateType(value = 6)
@ApiOperation(value = "完成任务",notes = "")
@ApiImplicitParams({
})
@ -122,6 +124,7 @@ public class TaskController {
//==============================================================
@OperateType(value = 3)
@ApiOperation(value = "添加清单(任务)",notes = "")
@ApiImplicitParams({
})
@ -134,6 +137,7 @@ public class TaskController {
return JsonResponse.newInstance().ok(normalTask);
}
@OperateType(value = 4)
@ApiOperation(value = "删除任务",notes = "")
@ApiImplicitParams({
@ApiImplicitParam(name = "taskId", value = "任务id", required = true, paramType = "query")
@ -146,7 +150,7 @@ public class TaskController {
return JsonResponse.newInstance().ok();
}
@OperateType(value = 5)
@ApiOperation(value = "修改任务信息",notes = "")
@ApiImplicitParams({
@ApiImplicitParam(name = "taskId", value = "任务id", required = true, paramType = "query")

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

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

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

@ -66,4 +66,19 @@
where
user_id = #{oldUserId}
</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>

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

@ -4,7 +4,7 @@
<resultMap id="BaseResultMap" type="com.ccsens.tall.bean.po.SysProjectRobotMessage">
<id column="id" jdbcType="BIGINT" property="id" />
<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="created_at" jdbcType="TIMESTAMP" property="createdAt" />
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
@ -69,7 +69,7 @@
</where>
</sql>
<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>
<select id="selectByExample" parameterType="com.ccsens.tall.bean.po.SysProjectRobotMessageExample" resultMap="BaseResultMap">
select
@ -102,10 +102,10 @@
</if>
</delete>
<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,
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},
#{recStatus,jdbcType=TINYINT})
</insert>
@ -118,8 +118,8 @@
<if test="projectRobotId != null">
project_robot_id,
</if>
<if test="messageId != null">
message_id,
<if test="operateType != null">
operate_type,
</if>
<if test="allMessage != null">
all_message,
@ -141,8 +141,8 @@
<if test="projectRobotId != null">
#{projectRobotId,jdbcType=BIGINT},
</if>
<if test="messageId != null">
#{messageId,jdbcType=BIGINT},
<if test="operateType != null">
#{operateType,jdbcType=TINYINT},
</if>
<if test="allMessage != null">
#{allMessage,jdbcType=TINYINT},
@ -173,8 +173,8 @@
<if test="record.projectRobotId != null">
project_robot_id = #{record.projectRobotId,jdbcType=BIGINT},
</if>
<if test="record.messageId != null">
message_id = #{record.messageId,jdbcType=BIGINT},
<if test="record.operateType != null">
operate_type = #{record.operateType,jdbcType=TINYINT},
</if>
<if test="record.allMessage != null">
all_message = #{record.allMessage,jdbcType=TINYINT},
@ -197,7 +197,7 @@
update t_sys_project_robot_message
set id = #{record.id,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},
created_at = #{record.createdAt,jdbcType=TIMESTAMP},
updated_at = #{record.updatedAt,jdbcType=TIMESTAMP},
@ -212,8 +212,8 @@
<if test="projectRobotId != null">
project_robot_id = #{projectRobotId,jdbcType=BIGINT},
</if>
<if test="messageId != null">
message_id = #{messageId,jdbcType=BIGINT},
<if test="operateType != null">
operate_type = #{operateType,jdbcType=TINYINT},
</if>
<if test="allMessage != null">
all_message = #{allMessage,jdbcType=TINYINT},
@ -233,7 +233,7 @@
<update id="updateByPrimaryKey" parameterType="com.ccsens.tall.bean.po.SysProjectRobotMessage">
update t_sys_project_robot_message
set project_robot_id = #{projectRobotId,jdbcType=BIGINT},
message_id = #{messageId,jdbcType=BIGINT},
operate_type = #{operateType,jdbcType=TINYINT},
all_message = #{allMessage,jdbcType=TINYINT},
created_at = #{createdAt,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),
TASK_PREPARATION(97,"任务已经开始了,请勿重复操作",true),
NOT_COMMENT(98,"该评论不存在",true),
NOT_MESSAGE_TYPE(99,"找不到消息类型,请检查名称是否正确",true),
;
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