add 对接oa

This commit is contained in:
lijiarao
2024-07-12 15:49:18 +08:00
parent a4d1925ee2
commit 7b2c0dcdcf
17 changed files with 733 additions and 415 deletions
@@ -0,0 +1,158 @@
package com.jero.modules.docking.hiwork.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.common.system.base.controller.JeroController;
import com.jero.common.system.query.QueryGenerator;
import com.jero.modules.docking.hiwork.entity.LawsUnifiedTodoLog;
import com.jero.modules.docking.hiwork.service.LawsUnifiedTodoLogService;
import com.jero.modules.system.vo.IdMapBody;
import com.jero.modules.system.vo.IdsMapBody;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
/**
* 统一代办推送日志表(laws_unified_todo_log)表控制层
*
* @author xxxxx
*/
@Slf4j
@Api(tags = "统一代办推送日志表")
@RestController
@RequestMapping("LawsUnifiedTodoLog")
public class LawsUnifiedTodoLogController extends JeroController<LawsUnifiedTodoLog, LawsUnifiedTodoLogService> {
/**
* 服务对象
*/
@Resource
private LawsUnifiedTodoLogService lawsUnifiedTodoLogService;
/**
* 分页列表查询
*/
@ApiOperation(value = "统一代办推送日志表-分页列表查询", notes = "统一代办推送日志表-分页列表查询")
@GetMapping(value = "/page")
public Result<IPage<LawsUnifiedTodoLog>> queryPageList(LawsUnifiedTodoLog lawsUnifiedTodoLog,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<LawsUnifiedTodoLog> queryWrapper = QueryGenerator.initQueryWrapper(lawsUnifiedTodoLog, req.getParameterMap());
Page<LawsUnifiedTodoLog> page = new Page<>(pageNo, pageSize);
IPage<LawsUnifiedTodoLog> pageList = lawsUnifiedTodoLogService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 列表查询
*/
@ApiOperation(value = "统一代办推送日志表-列表查询", notes = "统一代办推送日志表-列表查询")
@GetMapping(value = "/list")
public Result<List<LawsUnifiedTodoLog>> queryList(LawsUnifiedTodoLog lawsUnifiedTodoLog,
HttpServletRequest req) {
QueryWrapper<LawsUnifiedTodoLog> queryWrapper = QueryGenerator.initQueryWrapper(lawsUnifiedTodoLog, req.getParameterMap());
List<LawsUnifiedTodoLog> list = lawsUnifiedTodoLogService.list(queryWrapper);
return Result.OK(list);
}
/**
* 添加
*/
@AutoLog(value = "统一代办推送日志表-添加")
@ApiOperation(value = "统一代办推送日志表-添加", notes = "统一代办推送日志表-添加")
@PostMapping(value = "/add")
public Result<String> add(@Validated @RequestBody LawsUnifiedTodoLog lawsUnifiedTodoLog) {
lawsUnifiedTodoLogService.add(lawsUnifiedTodoLog);
return Result.OK(ResultCommon.OK);
}
/**
* 编辑
*/
@AutoLog(value = "统一代办推送日志表-编辑")
@ApiOperation(value = "统一代办推送日志表-编辑", notes = "统一代办推送日志表-编辑")
@PostMapping(value = "/edit")
public Result<String> edit(@Validated @RequestBody LawsUnifiedTodoLog lawsUnifiedTodoLog) {
lawsUnifiedTodoLogService.editById(lawsUnifiedTodoLog);
return Result.OK(ResultCommon.EDIT_OK);
}
/**
* 通过id删除
*/
@AutoLog(value = "统一代办推送日志表-通过id删除")
@ApiOperation(value = "统一代办推送日志表-通过id删除", notes = "统一代办推送日志表-通过id删除")
@PostMapping(value = "/delete")
public Result<String> delete(@RequestBody IdMapBody map) {
String id = map.getId();
if (StringUtils.isBlank(id)) {
return Result.error(ResultCommon.PLEASE_SELECT_DATA);
}
lawsUnifiedTodoLogService.deleteById(id);
return Result.OK(ResultCommon.SUCCESSFULLY_DELETED);
}
/**
* 批量删除
*/
@AutoLog(value = "统一代办推送日志表-批量删除")
@ApiOperation(value = "统一代办推送日志表-批量删除", notes = "统一代办推送日志表-批量删除")
@PostMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestBody IdsMapBody map) {
String ids = map.getIds();
if (StringUtils.isBlank(ids)) {
return Result.error(ResultCommon.PLEASE_SELECT_DATA);
}
List<String> idList = Arrays.asList(map.getIds().split(","));
this.lawsUnifiedTodoLogService.deleteByIds(idList);
return Result.OK(ResultCommon.SUCCESSFULLY_DELETED_IN_BULK);
}
/**
* 通过id查询
*/
@AutoLog(value = "统一代办推送日志表-通过id查询")
@ApiOperation(value = "统一代办推送日志表-通过id查询", notes = "统一代办推送日志表-通过id查询")
@GetMapping(value = "/queryById")
public Result<LawsUnifiedTodoLog> queryById(@RequestParam(name = "id") String id) {
LawsUnifiedTodoLog lawsUnifiedTodoLog = lawsUnifiedTodoLogService.queryById(id);
if (lawsUnifiedTodoLog == null) {
return Result.error(ResultCommon.NO_CORRESPONDING_DATA_FOUND);
}
return Result.OK(lawsUnifiedTodoLog);
}
/**
* 导出excel
*/
@ApiOperation(value = "统一代办推送日志表-导出excel")
@GetMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, LawsUnifiedTodoLog lawsUnifiedTodoLog) {
return super.exportXls(request, lawsUnifiedTodoLog, LawsUnifiedTodoLog.class, "统一代办推送日志表");
}
/**
* 通过excel导入数据
*/
@ApiOperation(value = "统一代办推送日志表-通过excel导入数据")
@PostMapping(value = "/importExcel")
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, LawsUnifiedTodoLog.class);
}
}
@@ -1,78 +0,0 @@
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 flowid;
@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 = "是否进入下一节点(0是 1不是)")
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,81 @@
package com.jero.modules.docking.hiwork.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
*统一代办推送日志表
*@author liJiaRao
*@date 2024-07-12 14:02
*/
@Data
@ApiModel(description="统一代办推送日志表")
@TableName(value = "laws_unified_todo_log")
public class LawsUnifiedTodoLog {
@TableId(value = "id", type = IdType.INPUT)
@ApiModelProperty(value="")
private String id;
/**
* 推送地址
*/
@TableField(value = "url")
@ApiModelProperty(value="推送地址")
private String url;
/**
* 推送内容
*/
@TableField(value = "json_str")
@ApiModelProperty(value="推送内容")
private String jsonStr;
/**
* 返回内容
*/
@TableField(value = "response_body")
@ApiModelProperty(value="返回内容")
private String responseBody;
/**
* 状态1成功,2失败
*/
@TableField(value = "`state`")
@ApiModelProperty(value="状态1成功,2失败")
private Integer state;
/**
* 创建人
*/
@TableField(value = "create_by")
@ApiModelProperty(value="创建人")
private String createBy;
/**
* 创建时间
*/
@TableField(value = "create_time")
@ApiModelProperty(value="创建时间")
private Date createTime;
/**
* 更新人
*/
@TableField(value = "update_by")
@ApiModelProperty(value="更新人")
private String updateBy;
/**
* 更新时间
*/
@TableField(value = "update_time")
@ApiModelProperty(value="更新时间")
private Date updateTime;
}
@@ -0,0 +1,53 @@
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 UnifiedTodo {
@ApiModelProperty(value = "异构系统标识")
private String sysCode;
@ApiModelProperty(value = "流程id")
private String flowid;
@ApiModelProperty(value = "标题")
private String requestname;
@ApiModelProperty(value = "流程类型名称")
private String workflowname;
@ApiModelProperty(value = "步骤名称(节点名称)")
private String nodename;
@ApiModelProperty(value = "PC地址")
private String pcurl;
@ApiModelProperty(value = "APP地址")
private String appurl;
@ApiModelProperty(value = "0:待办,2:已办,4:办结,8:待阅,10:已阅")
private String isremark;
@ApiModelProperty(value = "流程查看状态0:未读1:已读;")
private String viewtype;
@ApiModelProperty(value = "创建人code")
private String creator;
@ApiModelProperty(value = "接收人code")
private String receiver;
@ApiModelProperty(value = "创建日期时间")
private String createdatetime;
@ApiModelProperty(value = "接收日期时间")
private String receivedatetime;
@ApiModelProperty(value = "时间戳字段")
private String receivets;
@ApiModelProperty(value = "缓急值0正常,2紧急")
private String requestlevel;
}
@@ -0,0 +1,12 @@
package com.jero.modules.docking.hiwork.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.docking.hiwork.entity.LawsUnifiedTodoLog;
/**
*
*@author liJiaRao
*@date 2024-07-12 14:02
*/
public interface LawsUnifiedTodoLogMapper extends BaseMapper<LawsUnifiedTodoLog> {
}
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.modules.docking.hiwork.mapper.LawsUnifiedTodoLogMapper">
<resultMap id="BaseResultMap" type="com.jero.modules.docking.hiwork.entity.LawsUnifiedTodoLog">
<!--@mbg.generated-->
<!--@Table laws_unified_todo_log-->
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="url" jdbcType="VARCHAR" property="url" />
<result column="type" jdbcType="INTEGER" property="type" />
<result column="json_str" jdbcType="VARCHAR" property="jsonStr" />
<result column="state" jdbcType="INTEGER" property="state" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_by" jdbcType="VARCHAR" property="updateBy" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, url, `type`, json_str, `state`, create_by, create_time, update_by, update_time
</sql>
</mapper>
@@ -1,7 +1,7 @@
package com.jero.modules.docking.hiwork.service;
import com.jero.common.api.dto.message.HiworkTodoAdd;
import com.jero.common.api.dto.message.UnifiedTodoVO;
import java.util.List;
@@ -17,6 +17,6 @@ public interface IHiworkTodoService {
* @Date: 2023/10/13 15:12
* @Description: 统一待办集成
**/
void sendTodoTask(List<HiworkTodoAdd> hiworkTodoAddList);
void sendTodoTask(List<UnifiedTodoVO> unifiedTodoVOList);
}
@@ -0,0 +1,38 @@
package com.jero.modules.docking.hiwork.service;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.modules.docking.hiwork.entity.LawsUnifiedTodoLog;
import com.jero.modules.docking.hiwork.mapper.LawsUnifiedTodoLogMapper;
/**
*
*@author liJiaRao
*@date 2024-07-12 14:02
*/
@Service
public class LawsUnifiedTodoLogService extends ServiceImpl<LawsUnifiedTodoLogMapper, LawsUnifiedTodoLog> {
public void add(LawsUnifiedTodoLog lawsUnifiedTodoLog) {
this.save(lawsUnifiedTodoLog);
}
public void editById(LawsUnifiedTodoLog lawsUnifiedTodoLog) {
this.updateById(lawsUnifiedTodoLog);
}
public void deleteById(String id) {
this.removeById(id);
}
public void deleteByIds(List<String> idList) {
for (String id : idList) {
deleteById(id);
}
}
public LawsUnifiedTodoLog queryById(String id) {
LawsUnifiedTodoLog lawsUnifiedTodoLog = this.getById(id);
return lawsUnifiedTodoLog;
}
}
@@ -1,275 +0,0 @@
package com.jero.modules.docking.hiwork.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.PushWorkflowIntegrationAPI;
import com.jero.common.api.dto.message.HiworkTodoAdd;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.entity.ProcessNode;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.activiti.service.ProcessNodeService;
import com.jero.modules.docking.hiwork.entity.HiworkTodo;
import com.jero.modules.docking.hiwork.util.HiworkPostUtil;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.shiro.SecurityUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* @Author: liao
* @Date: 2023/10/13 14:23
* @Description: 待办
*/
@Slf4j
@Service
public class HiworkTodoServiceImpl implements PushWorkflowIntegrationAPI {
@Resource
private ISysUserService sysUserService;
@Resource
private ProcessApprovalRecordService processApprovalRecordService;
@Resource
private HiworkPostUtil hiworkPostUtil;
@Resource
private ProcessNodeService processNodeService;
@Resource
private ProcessAllService processAllService;
@Resource
private RestTemplate restTemplate;
@Value("${hiwork.ip}")
private String ip;
@Value("${hiwork.todoUrl}")
private String todoUrl;
@Value("${hiwork.isWorkflow}")
private boolean isWorkflow;
@Value("${hiwork.sysCode}")
private String hiworkSysCode;
@Value("${hiwork.url}")
private String hiworkUrl;
@Value("${hiwork.fontUrl}")
private String hiworkFontUrl;
@Value("${hiwork.fontAppUrl}")
private String hiworkFontAppUrl;
private static final String PROCESS_TYPE = "srms";
private static final String TODO_TYPE_2 = "2";
private static final String TODO_TYPE_3 = "3";
private static final String TODO_TYPE_6 = "6";
/**
* @Author: liao
* @Date: 2023/10/13 15:12
* @Description: 统一待办集成
**/
@Override
public void sendTodoTask(List<HiworkTodoAdd> hiworkTodoAddList) {
if(!isWorkflow){
return;
}
if (CollectionUtils.isEmpty(hiworkTodoAddList)) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "hiworkTodoAddList");
}
try {
List<HiworkTodo> hiworkTodoList = getHiworkTodos(hiworkTodoAddList);
log.info("统一待办推送入参" + JSON.toJSONString(hiworkTodoList));
log.info("统一待办推送url" + ip + todoUrl);
// 远程调用
JSONObject json = restTemplate.postForObject(ip + todoUrl,hiworkTodoList, JSONObject.class);
if(!Objects.isNull(json) && json.containsKey("success") && Objects.equals("true",json.getString("success"))){
log.info("统一待办推送成功");
}else{
log.info("统一待办推送失败{}",json);
}
}catch (Exception e){
log.error("统一待办推送异常",e);
}
}
@Override
public void sendActivityComplete(List<HiworkTodoAdd> hiworkTodoAddList) {
if(!isWorkflow){
return;
}
try {
for (HiworkTodoAdd hiworkTodoAdd : hiworkTodoAddList) {
hiworkTodoAdd.setType(TODO_TYPE_3);
}
List<HiworkTodo> hiworkTodoList = getHiworkTodos(hiworkTodoAddList);
log.info("统一待办推送入参" + JSON.toJSONString(hiworkTodoList));
log.info("统一待办推送url" + ip + todoUrl);
// 远程调用
JSONObject json = restTemplate.postForObject(ip + todoUrl,hiworkTodoList, JSONObject.class);
if(!Objects.isNull(json) && json.containsKey("success") && Objects.equals("true",json.getString("success"))){
log.info("统一待办推送成功");
}else{
log.info("统一待办推送失败{}",json);
}
}catch (Exception e){
log.error("统一待办推送异常",e);
}
}
@Override
public void sendDeleteTask(List<HiworkTodoAdd> hiworkTodoAddList) {
if(!isWorkflow){
return;
}
try {
for (HiworkTodoAdd hiworkTodoAdd : hiworkTodoAddList) {
hiworkTodoAdd.setType(TODO_TYPE_6);
}
List<HiworkTodo> hiworkTodoList = getHiworkTodos(hiworkTodoAddList);
log.info("统一待办删除推送入参" + JSON.toJSONString(hiworkTodoList));
log.info("统一待办推送url" + ip + todoUrl);
// 远程调用
JSONObject json = restTemplate.postForObject(ip + todoUrl,hiworkTodoList, JSONObject.class);
if(!Objects.isNull(json) && json.containsKey("success") && Objects.equals("true",json.getString("success"))){
log.info("统一待办删除推送成功");
}else{
log.info("统一待办删除推送失败{}",json);
}
}catch (Exception e){
log.error("统一待办删除推送异常",e);
}
}
@NotNull
private List<HiworkTodo> getHiworkTodos(List<HiworkTodoAdd> hiworkTodoAddList) {
List<HiworkTodo> hiworkTodoList = new ArrayList<>();
for (HiworkTodoAdd hiworkTodoAdd : hiworkTodoAddList) {
String recordId = hiworkTodoAdd.getRecordId();
String processDefinitionId = hiworkTodoAdd.getProcessDefinitionId();
String type = hiworkTodoAdd.getType();
ProcessApprovalRecord processApprovalRecord = processApprovalRecordService.getById(recordId);
if(Objects.isNull(processApprovalRecord)){
continue;
}
HiworkTodo hiworkTodo = new HiworkTodo();
hiworkTodo.setSysCode(hiworkSysCode);
String date = DateUtil.formatDateTime(new Date());
String taskId = processApprovalRecord.getTaskId();
hiworkTodo.setFlowid(processApprovalRecord.getProcessInstanceId());
hiworkTodo.setProcessId(taskId);
hiworkTodo.setProcessType(PROCESS_TYPE);
hiworkTodo.setTaskId(taskId);
hiworkTodo.setTaskName(processApprovalRecord.getTaskName());
LambdaQueryWrapper<ProcessNode> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessNode::getProcessDefinitionId,processDefinitionId);
wrapper.eq(ProcessNode::getNodeName,processApprovalRecord.getTaskName());
wrapper.eq(ProcessNode::getIsView, YesOrNoEnum.YES.getValue());
ProcessNode processNode = processNodeService.getOne(wrapper,false);
if(!Objects.isNull(processNode)){
if(processNode.getNodeName().contains("会签")){
}
hiworkTodo.setNodeBusiCode(processNode.getXmlNodeId());
// 是否显示(0否,1是)
hiworkTodo.setIsShow(String.valueOf(processNode.getIsView()));
}
String userId;
if (hiworkTodoAdd.getToUserId() == null){
userId = processApprovalRecord.getUserId();
}else {
userId = hiworkTodoAdd.getToUserId();
}
SysUser sysUser = sysUserService.getById(userId);
String noticeTitle = processApprovalRecord.getTaskName() + "(" + sysUser.getRealname() + " " + date + ")";
LambdaQueryWrapper<ProcessAll> queryProcessAll = new LambdaQueryWrapper<>();
queryProcessAll.eq(ProcessAll::getProcessInstanceId,processApprovalRecord.getProcessInstanceId());
ProcessAll processAll = processAllService.getOne(queryProcessAll);
if(!Objects.isNull(processAll)){
String processName = ProcessTypeEnum.getNameByValue(processAll.getPrcType());
noticeTitle = processName + "(" + sysUser.getRealname() + " " + date + ")";
hiworkTodo.setProcessName(processName);
SysUser createUser = sysUserService.getById(processAll.getCreateUserId());
if(!Objects.isNull(createUser)){
hiworkTodo.setCreateUserCode(createUser.getUsername());
hiworkTodo.setCreateUserName(createUser.getRealname());
}
if(!Objects.isNull(processAll.getDueTime())){
hiworkTodo.setDueTime(processAll.getDueTime().getTime());
}
String projectId = "";
if (StrUtil.isNotBlank(processAll.getProjectId())){
projectId = processAll.getProjectId();
}
hiworkTodo.setBid(projectId);
String url = hiworkFontUrl
//.replaceAll("&","%26")
//.replaceAll("\\?","%3F")
.replace("{projectId}",projectId)
.replace("{taskName}",processApprovalRecord.getTaskName())
.replace("{taskId}", taskId)
.replace("{processInstanceId}",processApprovalRecord.getProcessInstanceId())
.replace("{nodeId}",processApprovalRecord.getNodeId());
// 跳转链接
String businessLink = Objects.requireNonNull(ProcessTypeEnum.getFontReturnUrlPc(processAll.getPrcType())) + url;
hiworkTodo.setBusinessLink(businessLink);
// APP跳转链接
String appUrl = hiworkFontAppUrl
//.replaceAll("&","%26")
//.replaceAll("\\?","%3F")
.replace("{projectId}",projectId)
.replace("{taskName}",processApprovalRecord.getTaskName())
.replace("{taskId}", taskId)
.replace("{processInstanceId}",processApprovalRecord.getProcessInstanceId())
.replace("{nodeId}",processApprovalRecord.getNodeId());
String appBusinessLink = appUrl.replace("{url}", Objects.requireNonNull(ProcessTypeEnum.getFontReturnUrlPc(processAll.getPrcType())));
hiworkTodo.setAppBusinessLink(appBusinessLink);
}
hiworkTodo.setNoticeTitle(noticeTitle);
hiworkTodo.setUserId(userId);
hiworkTodo.setUserCode(sysUser.getUsername());
hiworkTodo.setUserName(sysUser.getRealname());
hiworkTodo.setReceiveTime(Instant.now());
//2已完成时进入下一节点
Integer finishFlag = processApprovalRecord.getFinishFlag();
if (finishFlag.equals(2)){
hiworkTodo.setMultiInstance(0);
}else {
hiworkTodo.setMultiInstance(1);
}
if (TODO_TYPE_3.equals(type)){
hiworkTodo.setIsTodo(TODO_TYPE_3);
}else if (TODO_TYPE_6.equals(type)){
hiworkTodo.setIsTodo(TODO_TYPE_6);
}else if (TODO_TYPE_2.equals(type)){
hiworkTodo.setIsTodo(TODO_TYPE_2);
}else {
hiworkTodo.setIsTodo(String.valueOf(finishFlag));
}
hiworkTodoList.add(hiworkTodo);
}
return hiworkTodoList;
}
}
@@ -0,0 +1,229 @@
package com.jero.modules.docking.hiwork.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.PushWorkflowIntegrationAPI;
import com.jero.common.api.dto.message.UnifiedTodoVO;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.activiti.service.ProcessNodeService;
import com.jero.modules.docking.hiwork.entity.LawsUnifiedTodoLog;
import com.jero.modules.docking.hiwork.entity.UnifiedTodo;
import com.jero.modules.docking.hiwork.service.LawsUnifiedTodoLogService;
import com.jero.modules.docking.hiwork.util.HiworkPostUtil;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* @Author: liao
* @Date: 2023/10/13 14:23
* @Description: 待办
*/
@Slf4j
@Service
public class UnifiedTodoServiceImpl implements PushWorkflowIntegrationAPI {
@Resource
private ISysUserService sysUserService;
@Resource
private ProcessApprovalRecordService processApprovalRecordService;
@Resource
private HiworkPostUtil hiworkPostUtil;
@Resource
private ProcessNodeService processNodeService;
@Resource
private ProcessAllService processAllService;
@Resource
private RestTemplate restTemplate;
@Resource
private LawsUnifiedTodoLogService unifiedTodoLogService;
@Value("${hiwork.ip}")
private String ip;
@Value("${hiwork.todoUrl}")
private String todoUrl;
@Value("${hiwork.isWorkflow}")
private boolean isWorkflow;
@Value("${hiwork.sysCode}")
private String hiworkSysCode;
@Value("${hiwork.url}")
private String hiworkUrl;
@Value("${hiwork.fontUrl}")
private String hiworkFontUrl;
@Value("${hiwork.fontAppUrl}")
private String hiworkFontAppUrl;
/**
* @Author: liao
* @Date: 2023/10/13 15:12
* @Description: 统一待办集成
*
* @return*/
@Override
public void sendTodoTask(List<UnifiedTodoVO> unifiedTodoVOList) {
if(!isWorkflow){
return;
}
boolean successFlag = true;
if (CollectionUtils.isEmpty(unifiedTodoVOList)) {
throw new JeroBootException(ResultCommon.EMPTY_COMMON, "unifiedTodoVOList");
}
String newDate = DateUtil.formatDateTime(new Date());
for (UnifiedTodoVO unifiedTodoVO : unifiedTodoVOList) {
String date = unifiedTodoVO.getDate();
if (StringUtils.isBlank(date)){
unifiedTodoVO.setDate(newDate);
}
}
try {
List<UnifiedTodo> unifiedTodoList = getHiworkTodos(unifiedTodoVOList);
String jsonString = JSONObject.toJSONString(unifiedTodoList);
log.info("统一待办推送入参" + jsonString);
push(ip + todoUrl,jsonString);
}catch (Exception e){
log.error("统一待办推送异常",e);
}
}
private void push(String url, String jsonString) {
// 设置最大重试次数
int maxRetries = 3;
// 当前重试次数
int retries = 0;
LawsUnifiedTodoLog lawsUnifiedTodoLog = new LawsUnifiedTodoLog();
while (retries < maxRetries) {
// 远程调用
HttpResponse execute = HttpRequest.post(url)
.header(Header.CONTENT_TYPE, "application/json;charset=UTF-8")
.body(jsonString)//表单内容
.timeout(3000)//超时,毫秒
.execute();
if (execute.isOk()) {
log.info("统一待办推送成功");
String body = execute.body();
lawsUnifiedTodoLog.setResponseBody(body);
break;
}else {
String body = execute.body();
lawsUnifiedTodoLog.setResponseBody(body);
JSONObject jsonObject = JSONObject.parseObject(body);
String operResult = jsonObject.getString("operResult");
if ("1".equals(operResult)){
log.info("统一待办推送成功");
break;
}
log.info("统一待办推送失败{}",jsonObject);
retries++;
}
}
lawsUnifiedTodoLog.setUrl(url);
lawsUnifiedTodoLog.setJsonStr(jsonString);
if (retries == maxRetries){
lawsUnifiedTodoLog.setState(2);
}else {
lawsUnifiedTodoLog.setState(1);
}
unifiedTodoLogService.add(lawsUnifiedTodoLog);
}
@NotNull
private List<UnifiedTodo> getHiworkTodos(List<UnifiedTodoVO> unifiedTodoVOList) {
List<UnifiedTodo> unifiedTodoList = new ArrayList<>();
for (UnifiedTodoVO unifiedTodoVO : unifiedTodoVOList) {
String recordId = unifiedTodoVO.getRecordId();
String processDefinitionId = unifiedTodoVO.getProcessDefinitionId();
String isremark = unifiedTodoVO.getIsRemark();
String date = unifiedTodoVO.getDate();
ProcessApprovalRecord processApprovalRecord = processApprovalRecordService.getById(recordId);
if(Objects.isNull(processApprovalRecord)){
continue;
}
UnifiedTodo unifiedTodo = new UnifiedTodo();
unifiedTodo.setSysCode(hiworkSysCode);
String taskId = processApprovalRecord.getTaskId();
unifiedTodo.setFlowid(processApprovalRecord.getProcessInstanceId());
unifiedTodo.setNodename(processApprovalRecord.getTaskName());
String userId;
if (unifiedTodoVO.getToUserId() == null){
userId = processApprovalRecord.getUserId();
}else {
userId = unifiedTodoVO.getToUserId();
}
SysUser sysUser = sysUserService.getById(userId);
String noticeTitle = processApprovalRecord.getTaskName() + "(" + sysUser.getRealname() + " " + date + ")";
LambdaQueryWrapper<ProcessAll> queryProcessAll = new LambdaQueryWrapper<>();
queryProcessAll.eq(ProcessAll::getProcessInstanceId,processApprovalRecord.getProcessInstanceId());
ProcessAll processAll = processAllService.getOne(queryProcessAll);
if(!Objects.isNull(processAll)){
String processName = ProcessTypeEnum.getNameByValue(processAll.getPrcType());
noticeTitle = processName + "(" + sysUser.getRealname() + " " + date + ")";
unifiedTodo.setWorkflowname(processName);
SysUser createUser = sysUserService.getById(processAll.getCreateUserId());
if(!Objects.isNull(createUser)){
unifiedTodo.setCreator(createUser.getUsername());
}
String projectId = "";
if (StrUtil.isNotBlank(processAll.getProjectId())){
projectId = processAll.getProjectId();
}
String url = hiworkFontUrl
.replace("{projectId}",projectId)
.replace("{taskName}",processApprovalRecord.getTaskName())
.replace("{taskId}", taskId)
.replace("{processInstanceId}",processApprovalRecord.getProcessInstanceId())
.replace("{nodeId}",processApprovalRecord.getNodeId());
// 跳转链接
String businessLink = Objects.requireNonNull(ProcessTypeEnum.getFontReturnUrlPc(processAll.getPrcType())) + url;
unifiedTodo.setPcurl(businessLink);
// APP跳转链接
String appUrl = hiworkFontAppUrl
.replace("{projectId}",projectId)
.replace("{taskName}",processApprovalRecord.getTaskName())
.replace("{taskId}", taskId)
.replace("{processInstanceId}",processApprovalRecord.getProcessInstanceId())
.replace("{nodeId}",processApprovalRecord.getNodeId());
String appBusinessLink = appUrl.replace("{url}", Objects.requireNonNull(ProcessTypeEnum.getFontReturnUrlPc(processAll.getPrcType())));
unifiedTodo.setAppurl(appBusinessLink);
}
unifiedTodo.setRequestname(noticeTitle);
unifiedTodo.setReceiver(sysUser.getUsername());
unifiedTodo.setReceivedatetime(date);
unifiedTodo.setIsremark(isremark);
unifiedTodo.setReceivets(String.valueOf(System.currentTimeMillis()));
unifiedTodo.setRequestlevel("0");
unifiedTodoList.add(unifiedTodo);
}
return unifiedTodoList;
}
}
@@ -8,7 +8,7 @@ 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.UnifiedTodo;
import com.jero.modules.docking.hiwork.entity.HiworkDingDingMsg;
import com.jero.modules.docking.hiwork.entity.HiworkSystemMsg;
import lombok.extern.slf4j.Slf4j;
@@ -17,14 +17,11 @@ 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;
import static net.sf.jsqlparser.parser.feature.Feature.execute;
/**
* @Author: liao
* @Date: 2023/10/13 16:55
@@ -102,11 +99,11 @@ public class HiworkPostUtil {
* @Date: 2023/10/13 17:45
* @Description: 统一待办集成远程调用
**/
public void postTodo(List<HiworkTodo> hiworkTodoList) {
public void postTodo(List<UnifiedTodo> unifiedTodoList) {
ObjectMapper objectMapper = new ObjectMapper();
String jsonString;
try {
jsonString = objectMapper.writeValueAsString(hiworkTodoList);
jsonString = objectMapper.writeValueAsString(unifiedTodoList);
} catch (JsonProcessingException e) {
throw new JeroBootException("JSON string format conversion error");
}