Browse Source

[feat]

1、增加预警管理根据标签查询
2、增加工作流动态增加处理人逻辑。
3、对接设备权限
wuyuan
杨威 2 months ago
parent
commit
8a664019af
  1. 4
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java
  2. 33
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceProController.java
  3. 6
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java
  4. 26
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java
  5. 3
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java
  6. 2
      dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java
  7. 1
      dk-modules/system/src/main/java/org/dromara/system/mapper/SysUserMapper.java
  8. 2
      dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java
  9. 8
      dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
  10. 14
      dk-modules/system/src/main/resources/mapper/system/SysUserMapper.xml
  11. 13
      dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java
  12. 2
      dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java
  13. 5
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java
  14. 79
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
  15. 2
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java
  16. 5
      dk-modules/workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml

4
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java

@ -432,6 +432,10 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
wrapper.like("t.job_name", bo.getJobName());
}
if (ObjectUtil.isNotEmpty(bo.getLabelEn())){
wrapper.eq("t.label_en", bo.getLabelEn());
}
if (ObjectUtil.isNotEmpty(bo.getStartTime()) && ObjectUtil.isNotEmpty(bo.getEndTime())){
wrapper.ge("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getStartTime());
wrapper.le("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getEndTime());

33
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceProController.java

@ -49,6 +49,17 @@ public class DeviceProController {
return HttpResultResponse.success(devices);
}
/**
* 查询项目组下拉列表
* @return
*/
@Operation(summary = "查询项目组下拉列表", description = "查询项目组下拉列表")
@GetMapping("/list")
public HttpResultResponse<List<DeviceProEntity>> listDevicePro(){
return HttpResultResponse.success(deviceProService.listDevicePro());
}
//2、添加项目组
/**
* 新增/更新项目
@ -89,6 +100,28 @@ public class DeviceProController {
return HttpResultResponse.success(deviceProService.updateDevice(dict));
}
/**
* 开启配置
* @param proId
* @return
*/
@Operation(summary = "开启配置", description = "开启配置")
@PostMapping("/enable/{proId}")
public HttpResultResponse<Boolean> enablePro(@PathVariable("proId") Integer proId) {
return HttpResultResponse.success(deviceProService.enablePro(proId));
}
/**
* 关闭配置
* @param proId
* @return
*/
@Operation(summary = "关闭配置", description = "关闭配置")
@PostMapping("/disable/{proId}")
public HttpResultResponse<Boolean> disablePro(@PathVariable("proId") Integer proId) {
return HttpResultResponse.success(deviceProService.disablePro(proId));
}
/**
* 根据人员获取项目组(feign调用接口)
*/

6
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java

@ -43,4 +43,10 @@ public interface IDeviceProService {
List<Integer> listDeviceGroup(Long userId);
List<String> listDevice(Long userId);
List<DeviceProEntity> listDevicePro();
Boolean enablePro(Integer proId);
Boolean disablePro(Integer proId);
}

26
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java

@ -297,6 +297,32 @@ public class DeviceProServiceImpl implements IDeviceProService {
return ListUtil.empty();
}
@Override
public List<DeviceProEntity> listDevicePro() {
return deviceProMapper.selectList(new LambdaQueryWrapper<DeviceProEntity>());
}
@Override
public Boolean enablePro(Integer proId) {
LambdaUpdateWrapper<DeviceProEntity> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(DeviceProEntity::getId, proId);
wrapper.set(DeviceProEntity::getBindType,1);
return this.deviceProMapper.update(wrapper) > 0;
}
@Override
public Boolean disablePro(Integer proId) {
LambdaUpdateWrapper<DeviceProEntity> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(DeviceProEntity::getId, proId);
wrapper.set(DeviceProEntity::getBindType,0);
return this.deviceProMapper.update(wrapper) > 0;
}
@Override
public Boolean saveAndUpdate(DeviceProEntity entity) {
boolean flag = true;

3
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java

@ -1,5 +1,6 @@
package org.dromara.sample.manage.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@ -404,7 +405,7 @@ public class DeviceServiceImpl implements IDeviceService {
.map(WorkspaceDTO::getWorkspaceName).orElse("") : "")
.firmwareStatus(DeviceFirmwareStatusEnum.NOT_UPGRADE)
.videoId(dockVideoId)
.thingVersion(entity.getVersion()).build();
.thingVersion(entity.getVersion()).proId(ObjectUtil.isNotEmpty(entity.getProId())?String.valueOf(entity.getProId()):"").build();
} catch (CloudSDKException e) {
log.error(e.getLocalizedMessage() + "Entity: {}", entity);
}

2
dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java

@ -309,7 +309,7 @@ public class RemoteUserServiceImpl implements RemoteUserService {
*/
@Override
public List<RemoteUserVo> selectListByIds(List<Long> userIds) {
List<SysUserVo> sysUserVos = userService.selectUserByIds(userIds, null);
List<SysUserVo> sysUserVos = userService.selectFlwByIds(userIds, null);
return MapstructUtils.convert(sysUserVos, RemoteUserVo.class);
}

1
dk-modules/system/src/main/java/org/dromara/system/mapper/SysUserMapper.java

@ -91,4 +91,5 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
})
int updateById(@Param(Constants.ENTITY) SysUser user);
List<SysUserVo> selectFlwByIds(@Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
}

2
dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java

@ -271,4 +271,6 @@ public interface ISysUserService {
List<SysUserVo> selectUserByUserIds(List<Long> userIds);
List<SysUserVo> assignUserSelect(Long deptId);
List<SysUserVo> selectFlwByIds(List<Long> userIds, Long deptId);
}

8
dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

@ -576,6 +576,14 @@ public class SysUserServiceImpl implements ISysUserService {
.in(ObjectUtil.isNotNull(departIdList), SysUser::getDeptId, departIdList));
}
@Override
public List<SysUserVo> selectFlwByIds(List<Long> userIds, Long deptId) {
return baseMapper.selectFlwByIds(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhonenumber).eq(SysUser::getStatus, UserConstants.USER_NORMAL)
.eq(ObjectUtil.isNotNull(deptId), SysUser::getDeptId, deptId)
.in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds));
}
/**
* 通过用户ID查询用户账户
*

14
dk-modules/system/src/main/resources/mapper/system/SysUserMapper.xml

@ -83,4 +83,18 @@
${ew.getCustomSqlSegment}
</select>
<select id="selectFlwByIds" resultMap="SysUserResult">
select
<if test="ew.getSqlSelect != null">
${ew.getSqlSelect}
</if>
<if test="ew.getSqlSelect == null">
u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex,
u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.product_name
</if>
from sys_user u
${ew.getCustomSqlSegment}
</select>
</mapper>

13
dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java

@ -1,5 +1,6 @@
package org.dromara.workflow.controller;
import cn.hutool.core.util.ObjectUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -50,6 +51,10 @@ public class FlwTaskController extends BaseController {
@PostMapping("/startWorkFlow")
public R<RemoteStartProcessReturn> startWorkFlow(@Validated(AddGroup.class) @RequestBody StartProcessBo startProcessBo) {
RemoteStartProcessReturn startProcessReturn = flwTaskService.startWorkFlow(startProcessBo);
//加签
flwTaskService.addSign(startProcessReturn.getProcessInstanceId());
return R.ok("提交成功", startProcessReturn);
}
@ -62,7 +67,13 @@ public class FlwTaskController extends BaseController {
@RepeatSubmit()
@PostMapping("/completeTask")
public R<Void> completeTask(@Validated(AddGroup.class) @RequestBody CompleteTaskBo completeTaskBo) {
return toAjax(flwTaskService.completeTask(completeTaskBo));
String instanceId = flwTaskService.completeTask(completeTaskBo);
if (ObjectUtil.isNotEmpty(instanceId)){
return toAjax(flwTaskService.addSign(Long.valueOf(instanceId)));
}
return toAjax(true);
}
/**

2
dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java

@ -57,4 +57,6 @@ public interface FlwTaskMapper {
*/
Page<FlowTaskVo> getTaskCopyByPage(@Param("page") Page<FlowTaskVo> page, @Param(Constants.WRAPPER) QueryWrapper<FlowTaskBo> queryWrapper);
List<String> getPermissionFlag(@Param("definitionId") Long definitionId,
@Param("nodeCode") String nodeCode, @Param("nodeType") Integer nodeType);
}

5
dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java

@ -37,7 +37,7 @@ public interface IFlwTaskService {
* @param completeTaskBo 办理任务参数
* @return 结果
*/
boolean completeTask(CompleteTaskBo completeTaskBo);
String completeTask(CompleteTaskBo completeTaskBo);
/**
* 查询当前用户的待办任务
@ -223,4 +223,7 @@ public interface IFlwTaskService {
* @return 节点
*/
FlowNode getByNodeCode(String nodeCode, Long definitionId);
Boolean addSign(Long instanceId);
}

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

@ -159,7 +159,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean completeTask(CompleteTaskBo completeTaskBo) {
public String completeTask(CompleteTaskBo completeTaskBo) {
try {
// 获取任务ID并查询对应的流程任务和实例信息
Long taskId = completeTaskBo.getTaskId();
@ -217,7 +217,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
}
//设置下一环节处理人
setNextHandler(ins.getId());
return true;
return String.valueOf(ins.getId());
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new ServiceException(e.getMessage());
@ -713,9 +713,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
Task task = taskService.getById(taskId);
FlowNode flowNode = getByNodeCode(task.getNodeCode(), task.getDefinitionId());
if ("addSignature".equals(taskOperation) || "reductionSignature".equals(taskOperation)) {
if (flowNode.getNodeRatio().compareTo(BigDecimal.ZERO) == 0) {
throw new ServiceException(task.getNodeName() + "不是会签节点!");
}
// if (flowNode.getNodeRatio().compareTo(BigDecimal.ZERO) == 0) {
// throw new ServiceException(task.getNodeName() + "不是会签节点!");
// }
}
// 设置任务状态并执行对应的任务操作
switch (taskOperation) {
@ -864,7 +864,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
completeTaskBo.setTaskId(taskId);
completeTaskBo.setMessageType(List.of(MessageTypeEnum.SYSTEM_MESSAGE.getCode()));
IFlwTaskService service = applicationContext.getBean(IFlwTaskService.class);
return service.completeTask(completeTaskBo);
service.completeTask(completeTaskBo);
return true;
}
/**
@ -880,4 +881,70 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
.eq(FlowNode::getDefinitionId, definitionId));
}
@Override
public Boolean addSign(Long instanceId) {
try {
List<FlowTask> flowTasks = selectByInstId(instanceId);
FlowTask flowTask1 = flowTasks.getFirst();
//判断是否有人员,进行加签
//获取当前任务的办理人
List<RemoteUserVo> currentTaskUser = currentTaskAllUser(flowTask1.getId());
FlowTask flowTask = flowTaskMapper.selectById(flowTask1.getId());
if (ObjectUtil.isNull(flowTask)) {
throw new ServiceException("流程任务不存在或任务已审批!");
}
Instance ins = insService.getById(flowTask.getInstanceId());
//根据配置的人员查询系统中的用户
Long definitionId = ins.getDefinitionId();
String nodeCode = ins.getNodeCode();
Integer nodeType = ins.getNodeType();
List<String> permissionUser = this.flwTaskMapper.getPermissionFlag(definitionId,nodeCode,nodeType);
String first = permissionUser.getFirst();
List<RemoteUserVo> totalUser = new ArrayList<>();
if (!first.contains("${handler}")){
String[] split = first.split("@@");
for (String handleFlag : split) {
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());
IFlwTaskService flwTaskService = applicationContext.getBean(IFlwTaskService.class);
flwTaskService.taskOperation(taskOperationBo,"addSignature");
}
return true;
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage(), e);
return false;
}
}
}

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

@ -136,7 +136,7 @@ public class WorkflowServiceImpl implements WorkflowService {
*/
@Override
public boolean completeTask(RemoteCompleteTask completeTask) {
return flwTaskService.completeTask(BeanUtil.toBean(completeTask, CompleteTaskBo.class));
return ObjectUtil.isNotEmpty(flwTaskService.completeTask(BeanUtil.toBean(completeTask, CompleteTaskBo.class)));
}
/**

5
dk-modules/workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml

@ -112,4 +112,9 @@
) t
${ew.getCustomSqlSegment}
</select>
<select id="getPermissionFlag" resultType="java.lang.String">
select fn.permission_flag from flow_node fn where fn.definition_id = #{definitionId} and fn.node_type = #{nodeType} and fn.node_code = #{nodeCode} and fn.del_flag = 0
</select>
</mapper>

Loading…
Cancel
Save