add Hiwork统一待办集成、统一消息集成

This commit is contained in:
liao
2023-10-16 17:56:37 +08:00
parent 351aa42e9c
commit 7013181ab2
12 changed files with 669 additions and 1 deletions
@@ -0,0 +1,30 @@
package com.jero.modules.docking.hiwork.entity;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Author: liao
* @Date: 2023/10/13 17:49
* @Description: 统一消息集成-钉钉消息
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="统一消息集成-钉钉消息", description="统一消息集成-钉钉消息")
public class HiworkDingDingMsg {
@ApiModelProperty(value = "异构系统标识")
private String sysCode;
@ApiModelProperty(value = "发送人员Id")
private String useridList;
@ApiModelProperty(value = "发送部门id")
private String deptIdList;
@ApiModelProperty(value = "agentId")
private String agentId;
@ApiModelProperty(value = "消息体")
private JSONObject msg;
}
@@ -0,0 +1,27 @@
package com.jero.modules.docking.hiwork.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Author: liao
* @Date: 2023/10/13 14:39
* @Description: 统一待办集成返回
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="统一待办集成返回", description="统一待办集成返回")
public class HiworkResult {
@ApiModelProperty(value = "成功true,失败false")
private Boolean success;
@ApiModelProperty(value = "成功1,失败0")
private Integer code;
@ApiModelProperty(value = "消息")
private String msg;
@ApiModelProperty(value = "成功null,失败null")
private Object data;
}
@@ -0,0 +1,35 @@
package com.jero.modules.docking.hiwork.entity;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Author: liao
* @Date: 2023/10/13 17:49
* @Description: 统一消息集成-系统消息
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="统一消息集成-系统消息", description="统一消息集成-系统消息")
public class HiworkSystemMsg {
@ApiModelProperty(value = "异构系统标识")
private String sysCode;
@ApiModelProperty(value = "发送人员编号")
private String sendCode;
@ApiModelProperty(value = "发送人员姓名")
private String sendName;
@ApiModelProperty(value = "消息类型 字典")
private String messageType;
@ApiModelProperty(value = "消息标题")
private String title;
@ApiModelProperty(value = "消息接收人 集合")
private JSONArray receiverList;
@ApiModelProperty(value = "消息体")
private JSONObject msg;
}
@@ -0,0 +1,76 @@
package com.jero.modules.docking.hiwork.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.time.Instant;
/**
* @Author: liao
* @Date: 2023/10/13 14:22
* @Description: 待办
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="统一待办集成", description="统一待办集成")
public class HiworkTodo {
@ApiModelProperty(value = "异构系统标识")
private String sysCode;
@ApiModelProperty(value = "标题")
private String noticeTitle;
@ApiModelProperty(value = "描述")
private String noticeDescription;
@ApiModelProperty(value = "流程编号")
private String busiDefCode;
@ApiModelProperty(value = "流程实例id")
private String processId;
@ApiModelProperty(value = "流程实例名称")
private String processName;
@ApiModelProperty(value = "流程类型,字典")
private String processType;
@ApiModelProperty(value = "任务id")
private String taskId;
@ApiModelProperty(value = "节点名称")
private String taskName;
@ApiModelProperty(value = "是否会签")
private Integer multiInstance;
@ApiModelProperty(value = "节点编号")
private String nodeBusiCode;
@ApiModelProperty(value = "跳转链接")
private String businessLink;
@ApiModelProperty(value = "APP跳转链接")
private String appBusinessLink;
@ApiModelProperty(value = "创建人code")
private String createUserCode;
@ApiModelProperty(value = "创建人姓名")
private String createUserName;
@ApiModelProperty(value = "接收人id")
private String userId;
@ApiModelProperty(value = "接收人code")
private String userCode;
@ApiModelProperty(value = "接收人姓名")
private String userName;
@ApiModelProperty(value = "参与者id")
private String participantId;
@ApiModelProperty(value = "参与者编号")
private String participantCode;
@ApiModelProperty(value = "接收时间")
private Instant receiveTime;
@ApiModelProperty(value = "截止时间")
private Long dueTime;
@ApiModelProperty(value = "业务主键")
private String bid;
@ApiModelProperty(value = "待办、已办")
private String isTodo;
@ApiModelProperty(value = "是否展示在列表中")
private String isShow;
@ApiModelProperty(value = "优先级")
private String priority;
@ApiModelProperty(value = "是否通知消息")
private String notifyConfig;
}
@@ -0,0 +1,43 @@
package com.jero.modules.docking.hiwork.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Author: liao
* @Date: 2023/10/16 17:23
* @Description: 统一待办集成-添加
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="统一待办集成-添加", description="统一待办集成-添加")
public class HiworkTodoAdd {
@ApiModelProperty(value = "标题")
private String title;
@ApiModelProperty(value = "任务id")
private String taskId;
@ApiModelProperty(value = "流程类型,字典")
private String processType;
@ApiModelProperty(value = "是否会签")
private Integer isCounterSignature;
@ApiModelProperty(value = "节点编号")
private String nodeNumber;
@ApiModelProperty(value = "跳转链接")
private String jumpLink;
@ApiModelProperty(value = "APP跳转链接")
private String appJumpLink;
@ApiModelProperty(value = "创建人id")
private String creatorId;
@ApiModelProperty(value = "接收人id")
private String recipientId;
@ApiModelProperty(value = "截止时间")
private Long endTime;
@ApiModelProperty(value = "业务主键")
private String businessId;
@ApiModelProperty(value = "待办、已办(1、待办 2已办 3结束 6 删除)")
private String isTodo;
}
@@ -0,0 +1,25 @@
package com.jero.modules.docking.hiwork.enums;
/**
* @Author: liao
* @Date: 2023/10/13 15:05
* @Description: 待办、已办
*/
public enum IsTodoEnum {
TODO( "待办", "1"),
DONE("已办", "2"),
FINISH("结束", "3"),
DEL("删除", "6")
;
String name;
String value;
IsTodoEnum(String name, String value) {
this.name = name;
this.value = value;
}
public String getName() {return name;}
public String getValue() {return value;}
}
@@ -0,0 +1,32 @@
package com.jero.modules.docking.hiwork.service;
import java.util.List;
/**
* @Author: liao
* @Date: 2023/10/16 15:18
* @Description: 统一消息集成
*/
public interface IHiworkMsgService {
/**
* @Author: liao
* @Date: 2023/10/16 15:32
* @Description: 发送钉钉消息
* senderIdList:发送人员id集合
* content:文本内容
**/
void sendDingDingMsg(List<String> senderIdList, String content);
/**
* @Author: liao
* @Date: 2023/10/16 16:11
* @Description: 发送系统消息
* senderId:发送人员id
* receiverIdList:消息接收人id集合
* messageType:消息类型 字典
* title:消息标题
* content:消息内容
**/
void sendSystemMsg(String senderId, List<String> receiverIdList, String messageType, String title, String content);
}
@@ -0,0 +1,21 @@
package com.jero.modules.docking.hiwork.service;
import com.jero.modules.docking.hiwork.entity.HiworkTodoAdd;
import java.util.List;
/**
* @Author: liao
* @Date: 2023/10/13 14:23
* @Description: 待办
*/
public interface IHiworkTodoService {
/**
* @Author: liao
* @Date: 2023/10/13 15:12
* @Description: 统一待办集成
**/
void sendTodoTask(List<HiworkTodoAdd> hiworkTodoAddList);
}
@@ -0,0 +1,129 @@
package com.jero.modules.docking.hiwork.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.docking.hiwork.entity.HiworkDingDingMsg;
import com.jero.modules.docking.hiwork.entity.HiworkSystemMsg;
import com.jero.modules.docking.hiwork.service.IHiworkMsgService;
import com.jero.modules.docking.hiwork.util.HiworkPostUtil;
import com.jero.modules.laws.common.constant.ResultCommon;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author: liao
* @Date: 2023/10/16 15:18
* @Description: 统一消息集成
*/
@Service
public class HiworkMsgServiceImpl implements IHiworkMsgService {
@Autowired
private HiworkPostUtil hiworkPostUtil;
@Autowired
private ISysUserService sysUserService;
private final static String TEXT = "text"; // 消息类型-文本
private final static String MSG_TYPE = "msgtype"; // 消息类型
private final static String CONTENT = "content"; // 消息内容
/**
* @Author: liao
* @Date: 2023/10/16 15:32
* @Description: 发送钉钉消息
* senderIdList:发送人员id集合
* content:文本内容
**/
@Override
public void sendDingDingMsg(List<String> senderIdList, String content) {
HiworkDingDingMsg hiworkDingDingMsg = new HiworkDingDingMsg();
// 异步系统标识
hiworkDingDingMsg.setSysCode(HiworkPostUtil.getSysCode());
if (CollectionUtils.isEmpty(senderIdList)) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "senderIdList");
}
List<SysUser> senderUserList = sysUserService.listByIds(senderIdList);
List<String> usernameList = senderUserList.stream().map(SysUser::getUsername).collect(Collectors.toList());
// 发送人员id(工号以英文逗号分隔)
hiworkDingDingMsg.setUseridList(StringUtils.join(usernameList, ","));
// 消息体
JSONObject msgJsonObject = new JSONObject();
msgJsonObject.put(MSG_TYPE, TEXT);
JSONObject textJsonObject = new JSONObject();
textJsonObject.put(CONTENT, content);
msgJsonObject.put(TEXT, textJsonObject);
hiworkDingDingMsg.setMsg(msgJsonObject);
hiworkPostUtil.postDingDingMsg(hiworkDingDingMsg);
}
/**
* @Author: liao
* @Date: 2023/10/16 16:12
* @Description: 发送系统消息
* senderId:发送人员id
* receiverIdList:消息接收人id集合
* messageType:消息类型 字典
* title:消息标题
* content:消息内容
**/
@Override
public void sendSystemMsg(String senderId, List<String> receiverIdList, String messageType, String title, String content) {
HiworkSystemMsg hiworkSystemMsg = new HiworkSystemMsg();
// 异步系统标识
hiworkSystemMsg.setSysCode(HiworkPostUtil.getSysCode());
if (StringUtils.isBlank(senderId)) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "senderId");
}
SysUser senderUser = sysUserService.getById(senderId);
// 发送人员编号
hiworkSystemMsg.setSendCode(senderUser.getUsername());
// 发送人员姓名
hiworkSystemMsg.setSendName(senderUser.getRealname());
// 消息类型
hiworkSystemMsg.setMessageType(messageType);
// 消息标题
hiworkSystemMsg.setTitle(title);
if (CollectionUtils.isEmpty(receiverIdList)) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "receiverIdList");
}
List<SysUser> receiverUserList = sysUserService.listByIds(receiverIdList);
JSONArray jsonArray = new JSONArray();
receiverUserList.forEach(receiverUser -> {
Map<String, String> receiverMap = new HashMap<>();
// 人员编号
receiverMap.put("employeeNo", receiverUser.getUsername());
// 人员名称
receiverMap.put("userName", receiverUser.getRealname());
jsonArray.add(receiverMap);
});
// 消息接收人 集合
hiworkSystemMsg.setReceiverList(jsonArray);
// 消息体
JSONObject msgJsonObject = new JSONObject();
msgJsonObject.put(MSG_TYPE, TEXT);
JSONObject textJsonObject = new JSONObject();
textJsonObject.put(CONTENT, content);
msgJsonObject.put(TEXT, textJsonObject);
hiworkSystemMsg.setMsg(msgJsonObject);
hiworkPostUtil.postSystemMsg(hiworkSystemMsg);
}
}
@@ -0,0 +1,118 @@
package com.jero.modules.docking.hiwork.service.impl;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.docking.hiwork.entity.HiworkTodoAdd;
import com.jero.modules.docking.hiwork.service.IHiworkTodoService;
import com.jero.modules.docking.hiwork.util.HiworkPostUtil;
import com.jero.modules.docking.hiwork.entity.HiworkTodo;
import com.jero.modules.laws.common.constant.ResultCommon;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: liao
* @Date: 2023/10/13 14:23
* @Description: 待办
*/
@Service
public class HiworkTodoServiceImpl implements IHiworkTodoService {
@Autowired
private ISysUserService sysUserService;
@Autowired
private TaskService taskService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private HiworkPostUtil hiworkPostUtil;
/**
* @Author: liao
* @Date: 2023/10/13 15:12
* @Description: 统一待办集成
**/
@Override
public void sendTodoTask(List<HiworkTodoAdd> hiworkTodoAddList) {
if (CollectionUtils.isEmpty(hiworkTodoAddList)) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "hiworkTodoAddList");
}
List<HiworkTodo> hiworkTodoList = new ArrayList<>();
hiworkTodoAddList.forEach(hiworkTodoAdd -> {
HiworkTodo hiworkTodo = new HiworkTodo();
// 异步系统标识
hiworkTodo.setSysCode(HiworkPostUtil.getSysCode());
// 标题
hiworkTodo.setNoticeTitle(hiworkTodoAdd.getTitle());
if (StringUtils.isBlank(hiworkTodoAdd.getTaskId())) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "taskId");
}
Task task = taskService.createTaskQuery().taskId(hiworkTodoAdd.getTaskId()).singleResult();
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(task.getProcessInstanceId()).singleResult();
// 流程实例id
hiworkTodo.setProcessId(processInstance.getId());
// 流程实例名称
hiworkTodo.setProcessName(processInstance.getName());
// 流程类型,字典
hiworkTodo.setProcessType(hiworkTodoAdd.getProcessType());
// 任务id
hiworkTodo.setTaskId(hiworkTodoAdd.getTaskId());
// 节点名称
hiworkTodo.setTaskName(task.getName());
// 是否会签
hiworkTodo.setMultiInstance(hiworkTodoAdd.getIsCounterSignature());
// 节点编号
hiworkTodo.setNodeBusiCode(hiworkTodoAdd.getNodeNumber());
// 跳转链接
hiworkTodo.setBusinessLink(hiworkTodoAdd.getJumpLink());
// APP跳转链接
hiworkTodo.setAppBusinessLink(hiworkTodoAdd.getAppJumpLink());
if (StringUtils.isBlank(hiworkTodoAdd.getCreatorId())) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "creatorId");
}
SysUser creatorUser = sysUserService.getById(hiworkTodoAdd.getCreatorId());
// 创建人code
hiworkTodo.setCreateUserCode(creatorUser.getUsername());
// 创建人姓名
hiworkTodo.setCreateUserName(creatorUser.getRealname());
if (StringUtils.isBlank(hiworkTodoAdd.getRecipientId())) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "recipientId");
}
SysUser recipientUser = sysUserService.getById(hiworkTodoAdd.getRecipientId());
// 接收人id
hiworkTodo.setUserId(recipientUser.getId());
// 接收人code
hiworkTodo.setUserCode(recipientUser.getUsername());
// 接收人姓名
hiworkTodo.setUserName(recipientUser.getRealname());
// 截止时间
hiworkTodo.setDueTime(hiworkTodoAdd.getEndTime());
// 业务主键
hiworkTodo.setBid(hiworkTodoAdd.getBusinessId());
// 待办、已办
hiworkTodo.setIsTodo(hiworkTodoAdd.getIsTodo());
hiworkTodoList.add(hiworkTodo);
});
// 远程调用
hiworkPostUtil.postTodo(hiworkTodoList);
}
}
@@ -0,0 +1,122 @@
package com.jero.modules.docking.hiwork.util;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.docking.hiwork.entity.HiworkResult;
import com.jero.modules.docking.hiwork.entity.HiworkTodo;
import com.jero.modules.docking.hiwork.entity.HiworkDingDingMsg;
import com.jero.modules.docking.hiwork.entity.HiworkSystemMsg;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.List;
/**
* @Author: liao
* @Date: 2023/10/13 16:55
* @Description: Hiwork集成
*/
@Component
public class HiworkPostUtil {
@Autowired
private RestTemplate restTemplate;
@Value("${hiwork.ip}")
private String ip;
@Value("${hiwork.todoUrl}")
private String todoUrl;
@Value("${hiwork.messageUrl}")
private String messageUrl;
// 异构系统标识
private static String sysCode;
@Value("${hiwork.sysCode}")
public void setSysCode(String sysCode) {
HiworkPostUtil.sysCode = sysCode;
}
public static String getSysCode() {
return sysCode;
}
/**
* @Author: liao
* @Date: 2023/10/13 17:45
* @Description: 远程调用Hiwork
**/
private void postHiwork(String jsonString, String url) {
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> requestEntity = new HttpEntity<>(jsonString, headers);
// 发送 POST 请求并获取响应
ResponseEntity<HiworkResult> response = restTemplate.postForEntity(url, requestEntity, HiworkResult.class);
// 处理响应数据
if (response.getStatusCode().is2xxSuccessful()) {
HiworkResult hiworkResult = response.getBody();
if (!hiworkResult.getSuccess()) {
throw new JeroBootException("Hiwork:" + hiworkResult.getMsg());
}
} else {
throw new JeroBootException("Hiwork: request failed with status code: " + response.getStatusCode());
}
}
/**
* @Author: liao
* @Date: 2023/10/13 17:45
* @Description: 统一待办集成远程调用
**/
public void postTodo(List<HiworkTodo> hiworkTodoList) {
ObjectMapper objectMapper = new ObjectMapper();
String jsonString;
try {
jsonString = objectMapper.writeValueAsString(hiworkTodoList);
} catch (JsonProcessingException e) {
throw new JeroBootException("JSON string format conversion error");
}
postHiwork(jsonString, ip + todoUrl);
}
/**
* @Author: liao
* @Date: 2023/10/13 17:45
* @Description: 统一消息集成远程调用-钉钉消息
**/
public void postDingDingMsg(HiworkDingDingMsg hiworkDingDingMsg) {
ObjectMapper objectMapper = new ObjectMapper();
String jsonString;
try {
jsonString = objectMapper.writeValueAsString(hiworkDingDingMsg);
} catch (JsonProcessingException e) {
throw new JeroBootException("JSON string format conversion error");
}
postHiwork(jsonString, ip + messageUrl);
}
/**
* @Author: liao
* @Date: 2023/10/13 17:45
* @Description: 统一消息集成远程调用-系统消息
**/
public void postSystemMsg(HiworkSystemMsg hiworkSystemMsg) {
ObjectMapper objectMapper = new ObjectMapper();
String jsonString;
try {
jsonString = objectMapper.writeValueAsString(hiworkSystemMsg);
} catch (JsonProcessingException e) {
throw new JeroBootException("JSON string format conversion error");
}
postHiwork(jsonString, ip + messageUrl);
}
}