Browse Source

[feat]

1、修改预警查询问题。
2、增加工作流批量加签功能。
wuyuan
杨威 3 months ago
parent
commit
2651bfdeaa
  1. 13
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java
  2. 1
      dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml
  3. 2
      dk-modules/system/src/main/java/org/dromara/system/controller/system/SysMenuController.java
  4. 5
      dk-modules/workflow/pom.xml
  5. 4
      dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceMapper.java
  6. 2
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java
  7. 79
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java
  8. 20
      dk-modules/workflow/src/main/resources/mapper/workflow/FlwInstanceMapper.xml

13
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java

@ -640,14 +640,15 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
switch (dateType) {
case 0:
LocalDate today = LocalDate.now();
LocalDate startDate = today.minusMonths(6)
.with(TemporalAdjusters.firstDayOfMonth());
// 获取当前日期
LocalDate localDate = LocalDate.now();
// 计算当前日期的六个月前的日期
LocalDate sixMonthsAgo = localDate.minusMonths(6);
LocalDate endDate = today.with(TemporalAdjusters.lastDayOfMonth());
result.put("startTime", sixMonthsAgo.format(formatter));
result.put("endTime", localDate.format(formatter));
result.put("startTime",startDate.format(formatter));
result.put("endTime",endDate.format(formatter));
break;
case 1: // 年
LocalDate currentDate = LocalDate.now();

1
dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml

@ -532,6 +532,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
warning_summary ws
LEFT JOIN business_alert ba ON ws.label_en = ba.label_en
and ba.handle_type != 'verify'
and ba.del_flag = '0'
and <![CDATA[ DATE_FORMAT(ba.create_time, '%Y-%m-%d') >= #{startTime} ]]>
and <![CDATA[ DATE_FORMAT(ba.create_time, '%Y-%m-%d') <= #{endTime} ]]>
and ws.label_en in

2
dk-modules/system/src/main/java/org/dromara/system/controller/system/SysMenuController.java

@ -43,7 +43,7 @@ public class SysMenuController extends BaseController {
*
* @return 路由信息
*/
@ApiEncrypt(response=true)
// @ApiEncrypt(response=true)
@GetMapping("/{platformType}/getRouters")
public R<List<RouterVo>> getRouters(@PathVariable String platformType) {
List<SysMenu> menus = menuService.selectMenuTreeByUserId(LoginHelper.getUserId(),platformType);

5
dk-modules/workflow/pom.xml

@ -118,6 +118,11 @@
<artifactId>api-system</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-encrypt</artifactId>
</dependency>
</dependencies>
<build>

4
dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceMapper.java

@ -7,6 +7,8 @@ import org.apache.ibatis.annotations.Param;
import org.dromara.workflow.domain.bo.FlowInstanceBo;
import org.dromara.workflow.domain.vo.FlowInstanceVo;
import java.util.List;
/**
* 实例信息Mapper接口
*
@ -24,4 +26,6 @@ public interface FlwInstanceMapper {
*/
Page<FlowInstanceVo> selectInstanceList(@Param("page") Page<FlowInstanceVo> page, @Param(Constants.WRAPPER) Wrapper<FlowInstanceBo> queryWrapper);
List<FlowInstanceVo> listInsByDefinition(@Param("definitionId") Long definitionId);
}

2
dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java

@ -156,4 +156,6 @@ public interface IFlwInstanceService {
* @return 结果
*/
boolean processInvalid(FlowInvalidBo bo);
Boolean batchAddSign(Long definitionId);
}

79
dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java

@ -46,15 +46,19 @@ import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.bo.FlowCancelBo;
import org.dromara.workflow.domain.bo.FlowInstanceBo;
import org.dromara.workflow.domain.bo.FlowInvalidBo;
import org.dromara.workflow.domain.bo.TaskOperationBo;
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowInstanceVo;
import org.dromara.workflow.domain.vo.FlowVariableVo;
import org.dromara.workflow.handler.FlowProcessEventHandler;
import org.dromara.workflow.mapper.FlwCategoryMapper;
import org.dromara.workflow.mapper.FlwInstanceMapper;
import org.dromara.workflow.mapper.FlwTaskMapper;
import org.dromara.workflow.service.IFlwCommonService;
import org.dromara.workflow.service.IFlwInstanceService;
import org.dromara.workflow.service.IFlwTaskAssigneeService;
import org.dromara.workflow.service.IFlwTaskService;
import org.dromara.workflow.utils.BatchProcessorUtil;
import org.dromara.workflow.utils.MinioUntil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -78,12 +82,14 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
private final ChartService chartService;
private final TaskService taskService;
private final FlowHisTaskMapper flowHisTaskMapper;
private final FlwTaskMapper flwTaskMapper;
private final FlowInstanceMapper flowInstanceMapper;
private final FlowProcessEventHandler flowProcessEventHandler;
private final IFlwTaskService flwTaskService;
private final FlwInstanceMapper flwInstanceMapper;
private final FlwCategoryMapper flwCategoryMapper;
private final IFlwCommonService flwCommonService;
private final IFlwTaskAssigneeService flwTaskAssigneeService;
@DubboReference
private RemoteFileService remoteFileService;
@ -460,4 +466,77 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
throw new ServiceException(e.getMessage());
}
}
@Override
public Boolean batchAddSign(Long definitionId) {
try {
List<FlowInstanceVo> instanceList = flwInstanceMapper.listInsByDefinition(definitionId);
if (ObjectUtil.isEmpty(instanceList)) {
return true;
}
//根据实例id查询所有的可执行的任务
List<Long> insIdList = instanceList.stream().map(FlowInstanceVo::getId).distinct().toList();
List<FlowTask> flowTasks = flwTaskService.selectByInstIdList(insIdList);
//拿到任务之后进行批量加签
int startIndex = 0;
int batchSize = 1000;
boolean flag = BatchProcessorUtil.processBatches(flowTasks, batchSize, startIndex, batch -> {
batch.forEach(flowTask1 -> {
//判断是否有人员,进行加签
//获取当前任务的办理人
List<RemoteUserVo> currentTaskUser = flwTaskService.currentTaskAllUser(flowTask1.getId());
Instance ins = insService.getById(flowTask1.getInstanceId());
//根据配置的人员查询系统中的用户
String nodeCode = ins.getNodeCode();
Integer nodeType = ins.getNodeType();
List<String> permissionUser = flwTaskMapper.getPermissionFlag(definitionId,nodeCode,nodeType);
String first = permissionUser.getFirst();
List<RemoteUserVo> totalUser = new ArrayList<>();
if (ObjectUtil.isNotEmpty(first)){
String[] split = first.split("@@");
for (String handleFlag : split) {
if (!handleFlag.equals("${handler}")){
List<RemoteUserVo> remoteUserVos = flwTaskAssigneeService.fetchUsersByStorageId(handleFlag);
totalUser.addAll(remoteUserVos);
}
}
}
//比较差值
List<RemoteUserVo> different = totalUser.stream()
.filter(user -> currentTaskUser.stream().noneMatch(u -> u.getUserId().equals(user.getUserId())))
.toList();
List<String> userIds = different.stream()
.map(RemoteUserVo::getUserId)
.distinct()
.map(String::valueOf)
.toList();
//加签
if (ObjectUtil.isNotEmpty(userIds)){
TaskOperationBo taskOperationBo = new TaskOperationBo();
taskOperationBo.setUserIds(userIds);
taskOperationBo.setTaskId(flowTask1.getId());
flwTaskService.taskOperation(taskOperationBo,"addSignature");
}
});
});
return flag;
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage(), e);
return false;
}
}
}

20
dk-modules/workflow/src/main/resources/mapper/workflow/FlwInstanceMapper.xml

@ -33,4 +33,24 @@
${ew.getCustomSqlSegment}
</select>
<select id="listInsByDefinition" resultMap="FlowInstanceResult">
select fi.id,
fi.create_time,
fi.update_time,
fi.tenant_id,
fi.del_flag,
fi.definition_id,
fi.business_id,
fi.node_type,
fi.node_code,
fi.node_name,
fi.variable,
fi.flow_status,
fi.activity_status,
fi.create_by,
fi.ext
from flow_instance fi
where fi.definition_id = #{definitionId}
</select>
</mapper>

Loading…
Cancel
Save