diff --git a/message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageListDto.java b/message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageListDto.java index cbeb5ab..9a61e14 100644 --- a/message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageListDto.java +++ b/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; } diff --git a/message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeList.java b/message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeList.java index 5a5e085..3f26be6 100644 --- a/message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeList.java +++ b/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; } diff --git a/message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeListFeign.java b/message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeListFeign.java index 1b87037..7a8938f 100644 --- a/message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeListFeign.java +++ b/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> urgeCount(@RequestBody PagerQuery query); } diff --git a/message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeListQuery.java b/message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeListQuery.java new file mode 100644 index 0000000..a863654 --- /dev/null +++ b/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 { +} diff --git a/message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeListVo.java b/message-center-api/src/main/java/com/yxt/messagecenter/api/messageurgeList/MessageUrgeListVo.java new file mode 100644 index 0000000..7a58221 --- /dev/null +++ b/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; + +} diff --git a/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListMapper.java b/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListMapper.java index c4ee68f..bc000c6 100644 --- a/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListMapper.java +++ b/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 { List selecct(String taskId); + + IPage urgeCount(IPage 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); } diff --git a/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListMapper.xml b/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListMapper.xml index 5af4953..1363e64 100644 --- a/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListMapper.xml +++ b/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListMapper.xml @@ -2,6 +2,32 @@ + + + \ No newline at end of file diff --git a/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListRest.java b/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListRest.java index d06453c..fbc9af8 100644 --- a/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListRest.java +++ b/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> urgeCount(PagerQuery query) { + ResultBean> rb = ResultBean.fireFail(); + PagerVo pv = messageUrgeListService.urgeCount(query); + return rb.success().setData(pv); + } } diff --git a/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListService.java b/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListService.java index b8ed00b..2a7a52b 100644 --- a/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/MessageUrgeListService.java +++ b/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 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 userSids = Arrays.asList(flowableMessageVo.getAssignee().split(",")); + if (!userSids.isEmpty()) { + for (String userSid : userSids) { + ResultBean 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 selecct(String taskId) { return baseMapper.selecct(taskId); } + + /** + * 催办统计 + * + * @return + */ + public PagerVo urgeCount(PagerQuery pagerQuery) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + IPage page = PagerUtil.queryToPage(pagerQuery); + IPage pagging = baseMapper.urgeCount(page); + List 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 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 p = PagerUtil.pageToVo(pagging, null); + return p; + } } diff --git a/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/ScheduledMessageService.java b/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/ScheduledMessageService.java index d3d02cf..fcd7de4 100644 --- a/message-center-biz/src/main/java/com/yxt/messagecenter/biz/messageurgeList/ScheduledMessageService.java +++ b/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 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 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 userSids = Arrays.asList(flowableMessageVo.getAssignee().split(",")); + if (!userSids.isEmpty()) { + for (String userSid : userSids) { + ResultBean 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); } }