Browse Source

催办功能、催办统计

master
fanzongzhe 2 years ago
parent
commit
95f89138d9
  1. 12
      message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageListDto.java
  2. 8
      message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeList.java
  3. 12
      message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeListFeign.java
  4. 13
      message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeListQuery.java
  5. 46
      message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeListVo.java
  6. 11
      message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListMapper.java
  7. 28
      message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListMapper.xml
  8. 14
      message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListRest.java
  9. 165
      message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListService.java
  10. 39
      message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/ScheduledMessageService.java

12
message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageListDto.java

@ -1,6 +1,7 @@
package com.yxt.messagecenter.api.messageurgeList;
import com.yxt.common.core.dto.Dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
@ -12,7 +13,7 @@ import lombok.Data;
public class MessageListDto implements Dto {
private static final long serialVersionUID = -1667937381274036191L;
private String proInstId;
private String procInstId;
private int type;
@ -21,4 +22,13 @@ public class MessageListDto implements Dto {
private String nodeName;
private String msgSid;
private String urgeType;
private String taskId;
@ApiModelProperty("系统催办时间间隔")
private String timeInterval;
@ApiModelProperty("催办内容")
private String urgeContent;
}

8
message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeList.java

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yxt.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @description:
@ -11,12 +12,13 @@ import io.swagger.annotations.ApiModelProperty;
* @date: 2023/9/9
**/
@TableName("message_urgeList")
@Data
public class MessageUrgeList extends BaseEntity {
private static final long serialVersionUID = 7667726702154027285L;
@ApiModelProperty("消息sid")
private String msgSid;
@ApiModelProperty("流程实例id")
private String proInstId;
private String procInstId;
@ApiModelProperty("催办类别:1系统,2人工")
private String urgeType;
@ApiModelProperty("被催办人")
@ -25,4 +27,8 @@ public class MessageUrgeList extends BaseEntity {
private String nodeName;
@ApiModelProperty("任务id")
private String taskId;
@ApiModelProperty("系统催办时间间隔")
private String timeInterval;
@ApiModelProperty("催办内容")
private String urgeContent;
}

12
message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeListFeign.java

@ -1,11 +1,15 @@
package com.yxt.messagecenter.api.messageurgeList;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.messagecenter.api.message.MessageFeignFallback;
import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
* @description:
@ -22,4 +26,10 @@ public interface MessageUrgeListFeign {
@ApiOperation("人工催办")
@PostMapping(value = "/manualReminder")
ResultBean manualReminder(@RequestBody UrgeDto dto);
@ApiOperation("催办统计")
@PostMapping(value = "/urgeCount")
@ResponseBody
ResultBean<PagerVo<MessageUrgeListVo>> urgeCount(@RequestBody PagerQuery<MessageUrgeListQuery> query);
}

13
message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeListQuery.java

@ -0,0 +1,13 @@
package com.yxt.messagecenter.api.messageurgeList;
import com.yxt.common.core.query.Query;
import lombok.Data;
/**
* @author Administrator
* @description
* @date 2023/10/8 15:34
*/
@Data
public class MessageUrgeListQuery implements Query {
}

46
message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeListVo.java

@ -0,0 +1,46 @@
package com.yxt.messagecenter.api.messageurgeList;
import com.yxt.common.core.vo.Vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author Administrator
* @description
* @date 2023/10/8 13:34
*/
@Data
public class MessageUrgeListVo implements Vo {
@ApiModelProperty("工作编号")
private String taskId;
@ApiModelProperty("工作名称")
private String taskName;
@ApiModelProperty("发起人")
private String applyName;
@ApiModelProperty("发起时间")
private String startTime;
@ApiModelProperty("结束时间")
private String endTime;
@ApiModelProperty("审批状态")
private String approvalState;
@ApiModelProperty("审批结果")
private String result;
@ApiModelProperty("审批人")
private String approvalName;
@ApiModelProperty("审批环节")
private String aspect;
@ApiModelProperty("审批接收时间")
private String receiveTime;
@ApiModelProperty("审批通过时间")
private String passTime;
@ApiModelProperty("审批用时(时分秒)")
private String approvalTime;
@ApiModelProperty("系统催办次数")
private String sysCount;
@ApiModelProperty("系统催办时间间隔")
private String timeInterval;
@ApiModelProperty("人工催办次数")
private String artificialCount;
private String procInstId;
}

11
message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListMapper.java

@ -1,9 +1,14 @@
package com.yxt.messagecenter.biz.messageurgeList;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.anrui.portal.api.sysparameter.SysParameter;
import com.yxt.anrui.portal.api.sysparameter.SysParameterVo;
import com.yxt.messagecenter.api.messagetype.MessageType;
import com.yxt.messagecenter.api.messageurgeList.MessageUrgeList;
import com.yxt.messagecenter.api.messageurgeList.MessageUrgeListVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -15,4 +20,10 @@ import java.util.List;
@Mapper
public interface MessageUrgeListMapper extends BaseMapper<MessageUrgeList> {
List<MessageUrgeList> selecct(String taskId);
IPage<MessageUrgeListVo> urgeCount(IPage<MessageUrgeList> page);
int selCuiBanCount(@Param("taskId") String taskId, @Param("procInstId") String procInstId, @Param("count") int count);
MessageUrgeList selecctOneBySys(@Param("taskId") String taskId, @Param("procInstId") String procInstId);
}

28
message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListMapper.xml

@ -2,6 +2,32 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yxt.messagecenter.biz.messageurgeList.MessageUrgeListMapper">
<select id="selecct" resultType="com.yxt.messagecenter.api.messageurgeList.MessageUrgeList">
select count(*) from message_urgelist where taskId = #{taskId}
select *
from message_urgelist
where taskId = #{taskId}
</select>
<select id="urgeCount" resultType="com.yxt.messagecenter.api.messageurgeList.MessageUrgeListVo">
SELECT taskId,
urgeName as approvalName,
procInstId,
urgeContent as taskName
FROM message_urgelist
GROUP BY taskId
order by createTime desc
</select>
<select id="selCuiBanCount" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM message_urgelist
WHERE procInstId = #{procInstId}
AND taskId = #{taskId}
AND urgeType = #{count}
</select>
<select id="selecctOneBySys" resultType="com.yxt.messagecenter.api.messageurgeList.MessageUrgeList">
SELECT *
FROM message_urgelist
WHERE procInstId = #{procInstId}
AND taskId = #{taskId}
AND urgeType = 1
order by id desc limit 1
</select>
</mapper>

14
message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListRest.java

@ -1,12 +1,18 @@
package com.yxt.messagecenter.biz.messageurgeList;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import com.yxt.messagecenter.api.messageurgeList.MessageUrgeListFeign;
import com.yxt.messagecenter.api.messageurgeList.MessageUrgeListQuery;
import com.yxt.messagecenter.api.messageurgeList.MessageUrgeListVo;
import com.yxt.messagecenter.api.messageurgeList.UrgeDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @description:
* @author: dimengzhe
@ -18,8 +24,16 @@ public class MessageUrgeListRest implements MessageUrgeListFeign {
@Autowired
private MessageUrgeListService messageUrgeListService;
@Override
public ResultBean manualReminder(UrgeDto dto) {
return messageUrgeListService.manualReminder(dto);
}
@Override
public ResultBean<PagerVo<MessageUrgeListVo>> urgeCount(PagerQuery<MessageUrgeListQuery> query) {
ResultBean<PagerVo<MessageUrgeListVo>> rb = ResultBean.fireFail();
PagerVo<MessageUrgeListVo> pv = messageUrgeListService.urgeCount(query);
return rb.success().setData(pv);
}
}

165
message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListService.java

@ -1,22 +1,33 @@
package com.yxt.messagecenter.biz.messageurgeList;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.anrui.flowable.api.flow.FlowSelectVo;
import com.yxt.anrui.flowable.api.flow.FlowableFeign;
import com.yxt.anrui.flowable.api.flow2.FlowFeign;
import com.yxt.anrui.flowable.api.flow2.FlowableMessageVo;
import com.yxt.anrui.flowable.api.flowtask.FlowTaskDto;
import com.yxt.anrui.portal.api.sysparameter.SysParameter;
import com.yxt.anrui.portal.api.sysparameter.SysParameterVo;
import com.yxt.anrui.portal.api.sysuser.SysUserFeign;
import com.yxt.anrui.portal.api.sysuser.SysUserVo;
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.PagerUtil;
import com.yxt.common.base.utils.StringUtils;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import com.yxt.messagecenter.api.message.PushMessageQuery;
import com.yxt.messagecenter.api.messagetype.MessageType;
import com.yxt.messagecenter.api.messageurgeList.MessageListDto;
import com.yxt.messagecenter.api.messageurgeList.MessageUrgeList;
import com.yxt.messagecenter.api.messageurgeList.UrgeDto;
import com.yxt.messagecenter.api.messageurgeList.*;
import com.yxt.messagecenter.biz.message.MessageService;
import com.yxt.messagecenter.biz.messagetype.MessageTypeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @description:
@ -32,7 +43,10 @@ public class MessageUrgeListService extends MybatisBaseService<MessageUrgeListMa
private MessageService messageService;
@Autowired
private MessageUrgeListService messageUrgeListService;
@Autowired
private SysUserFeign sysUserFeign;
@Autowired
private FlowableFeign flowableFeign;
ResultBean saveMessage(MessageListDto dto) {
ResultBean rb = ResultBean.fireFail();
@ -45,10 +59,11 @@ public class MessageUrgeListService extends MybatisBaseService<MessageUrgeListMa
public ResultBean manualReminder(UrgeDto dto) {
ResultBean rb = ResultBean.fireFail();
String proDefId = dto.getProDefId();
String proInstId = dto.getProInstId();
String proInstId = dto.getProcInstId();
ResultBean<FlowableMessageVo> resultBean = flowFeign.getMessageReminder(proDefId, proInstId);
if (resultBean.getData() != null) {
FlowableMessageVo flowableMessageVo = resultBean.getData();
String taskId = flowableMessageVo.getTaskId();
MessageListDto messageListDto = new MessageListDto();
BeanUtil.copyProperties(flowableMessageVo, messageListDto);
//===================================================
@ -64,6 +79,29 @@ public class MessageUrgeListService extends MybatisBaseService<MessageUrgeListMa
String msgSid = msgSidResultBean.getData();
messageListDto.setMsgSid(msgSid);
messageListDto.setType(2);
messageListDto.setUrgeType("2");
String urgeName = "";
if (StringUtils.isNotBlank(flowableMessageVo.getAssignee())) {
StringBuffer sb = new StringBuffer();
List<String> userSids = Arrays.asList(flowableMessageVo.getAssignee().split(","));
if (!userSids.isEmpty()) {
for (String userSid : userSids) {
ResultBean<SysUserVo> sysUserVoResultBean = sysUserFeign.fetchBySid(userSid);
if (sysUserVoResultBean.getData() != null) {
sb.append(sysUserVoResultBean.getData().getName()).append(",");
}
}
sb.delete(sb.length() - 1, sb.length());
urgeName = sb.toString();
}
}
messageListDto.setUrgeName(urgeName);
FlowTaskDto flowTaskDto = flowFeign.getTaskNameForUrgeCount(taskId, proInstId).getData();
if (null != flowTaskDto) {
if (StringUtils.isNotBlank(flowTaskDto.getProcDefName())) {
messageListDto.setUrgeContent(flowTaskDto.getProcDefName());
}
}
messageUrgeListService.saveMessage(messageListDto);
}
return rb.success();
@ -72,4 +110,117 @@ public class MessageUrgeListService extends MybatisBaseService<MessageUrgeListMa
public List<MessageUrgeList> selecct(String taskId) {
return baseMapper.selecct(taskId);
}
/**
* 催办统计
*
* @return
*/
public PagerVo<MessageUrgeListVo> urgeCount(PagerQuery<MessageUrgeListQuery> pagerQuery) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
IPage<MessageUrgeList> page = PagerUtil.queryToPage(pagerQuery);
IPage<MessageUrgeListVo> pagging = baseMapper.urgeCount(page);
List<MessageUrgeListVo> records = pagging.getRecords();
records.removeAll(Collections.singleton(null));
if (!records.isEmpty()) {
for (MessageUrgeListVo urgeVo : records) {
String taskId = urgeVo.getTaskId();
String procInstId = urgeVo.getProcInstId();
FlowableMessageVo flowableMessageVo = flowFeign.getApplicantInfoForUrgeCount(taskId, procInstId).getData();
if (null != flowableMessageVo) {
//发起人
if (StringUtils.isNotBlank(flowableMessageVo.getAssignee())) {
SysUserVo userVo = sysUserFeign.fetchBySid(flowableMessageVo.getAssignee()).getData();
if (null != userVo) {
urgeVo.setApplyName(userVo.getName());
}
}
//发起时间
if (StringUtils.isNotBlank(flowableMessageVo.getCreateTime())) {
try {
Date parseStartTime = sdf.parse(flowableMessageVo.getCreateTime());
urgeVo.setStartTime(sdf.format(parseStartTime));
} catch (ParseException e) {
e.printStackTrace();
}
}
String proDefId = flowableMessageVo.getProDefId();
//结束时间
//根据流程定义id以及实例id查询结束时间
ResultBean<FlowSelectVo> flowSelectVoResultBean = flowableFeign.selectFlows(proDefId, procInstId);
if (flowSelectVoResultBean.getData() != null) {
FlowSelectVo flowSelectVo = flowSelectVoResultBean.getData();
if (StringUtils.isNotBlank(flowSelectVo.getEndTime())) {
urgeVo.setEndTime(flowSelectVo.getEndTime());
}
}
}
FlowableMessageVo taskVo = flowFeign.getTask(taskId, procInstId).getData();
if (null != taskVo) {
//审批结果
String proDefId = taskVo.getProDefId();
FlowableMessageVo resultVo = flowFeign.getApprovalResult(proDefId, procInstId).getData();
if (null != resultVo) {
if (StringUtils.isNotBlank(resultVo.getResult())) {
urgeVo.setResult(resultVo.getResult());
}
}
//审批环节
if (StringUtils.isNotBlank(taskVo.getNodeName())) {
urgeVo.setAspect(taskVo.getNodeName());
}
//审批接收时间
String recTime = "";
if (StringUtils.isNotBlank(taskVo.getCreateTime())) {
recTime = taskVo.getCreateTime();
try {
Date parseRecTime = sdf.parse(recTime);
urgeVo.setReceiveTime(sdf.format(parseRecTime));
} catch (ParseException e) {
e.printStackTrace();
}
}
//审批通过时间
String endTime = "";
if (StringUtils.isNotBlank(taskVo.getEndTime())) {
endTime = taskVo.getEndTime();
try {
Date parseEndTime = sdf.parse(endTime);
Date parseRecTime = sdf.parse(recTime);
urgeVo.setPassTime(sdf.format(parseEndTime));
//审批用时
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");
long interval = parseEndTime.getTime() - parseRecTime.getTime();
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+00:00"));
String hms = simpleDateFormat.format(interval);
urgeVo.setApprovalTime(hms);
} catch (ParseException e) {
e.printStackTrace();
}
urgeVo.setApprovalState("已完成");
} else {
urgeVo.setApprovalState("未完成");
}
}
int count = 0;
//查询系统催办次数
count = 1;
int sysCount = baseMapper.selCuiBanCount(taskId, procInstId, count);
urgeVo.setSysCount(String.valueOf(sysCount));
//查询人工催办次数
count = 2;
int renGong = baseMapper.selCuiBanCount(taskId, procInstId, count);
urgeVo.setArtificialCount(String.valueOf(renGong));
//查询系统催办时间间隔
MessageUrgeList messageUrgeList = baseMapper.selecctOneBySys(taskId, procInstId);
if (null != messageUrgeList) {
if (StringUtils.isNotBlank(messageUrgeList.getTimeInterval())) {
urgeVo.setTimeInterval(messageUrgeList.getTimeInterval() + "分钟");
}
}
}
}
PagerVo<MessageUrgeListVo> p = PagerUtil.pageToVo(pagging, null);
return p;
}
}

39
message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/ScheduledMessageService.java

@ -3,6 +3,9 @@ package com.yxt.messagecenter.biz.messageurgeList;
import cn.hutool.core.bean.BeanUtil;
import com.yxt.anrui.flowable.api.flow2.FlowFeign;
import com.yxt.anrui.flowable.api.flow2.FlowableMessageVo;
import com.yxt.anrui.flowable.api.flowtask.FlowTaskDto;
import com.yxt.anrui.portal.api.sysuser.SysUserFeign;
import com.yxt.anrui.portal.api.sysuser.SysUserVo;
import com.yxt.anrui.portal.api.sysuser.UserQuery;
import com.yxt.common.base.utils.StringUtils;
import com.yxt.common.core.result.ResultBean;
@ -38,14 +41,14 @@ public class ScheduledMessageService {
private MessageService messageService;
@Autowired
private MessageRemindruleService messageRemindruleService;
@Autowired
private SysUserFeign sysUserFeign;
// @Scheduled(cron = "0 0 0 * * ?")
//@Scheduled(cron = "0 0 0 * * ?")
// @Scheduled(cron = "0 0/5 16 * * ?")
// @Scheduled(cron = "0/30 * * * * ?") //每30秒执行一次
// @Scheduled(cron = "0/30 * * * * ?") //每30秒执行一次
public void remindMessage() {
//查询规则
Date now = new Date();
//获取当前时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@ -72,7 +75,7 @@ public class ScheduledMessageService {
//超过次数后,不再推送消息
List<MessageUrgeList> messageUrgeListList = messageUrgeListService.selecct(flowableMessageVo.getTaskId());
messageUrgeListList.removeAll(Collections.singleton(null));
if (messageUrgeListList.size() > 0) {
if (messageUrgeListList.size() >= 0) {
if (num > messageUrgeListList.size()) {
MessageListDto messageListDto = new MessageListDto();
BeanUtil.copyProperties(flowableMessageVo, messageListDto);
@ -88,7 +91,31 @@ public class ScheduledMessageService {
ResultBean<String> msgSidResultBean = messageService.pushUrgeNoUriMessage(pushMessageQuery);
String msgSid = msgSidResultBean.getData();
messageListDto.setMsgSid(msgSid);
messageListDto.setType(1);
// messageListDto.setType(1);
messageListDto.setUrgeType("1");
String urgeName = "";
if (StringUtils.isNotBlank(flowableMessageVo.getAssignee())) {
StringBuffer sb = new StringBuffer();
List<String> userSids = Arrays.asList(flowableMessageVo.getAssignee().split(","));
if (!userSids.isEmpty()) {
for (String userSid : userSids) {
ResultBean<SysUserVo> sysUserVoResultBean = sysUserFeign.fetchBySid(userSid);
if (sysUserVoResultBean.getData() != null) {
sb.append(sysUserVoResultBean.getData().getName()).append(",");
}
}
sb.delete(sb.length() - 1, sb.length());
urgeName = sb.toString();
}
}
messageListDto.setTimeInterval(String.valueOf(minutes));
messageListDto.setUrgeName(urgeName);
FlowTaskDto flowTaskDto = flowFeign.getTaskNameForUrgeCount(flowableMessageVo.getTaskId(), flowableMessageVo.getProcInstId()).getData();
if (null != flowTaskDto) {
if (StringUtils.isNotBlank(flowTaskDto.getProcDefName())) {
messageListDto.setUrgeContent(flowTaskDto.getProcDefName());
}
}
messageUrgeListService.saveMessage(messageListDto);
}
}

Loading…
Cancel
Save