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()); 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())){ if (ObjectUtil.isNotEmpty(bo.getStartTime()) && ObjectUtil.isNotEmpty(bo.getEndTime())){
wrapper.ge("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getStartTime()); wrapper.ge("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getStartTime());
wrapper.le("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getEndTime()); 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 HttpResultResponse.success(devices);
} }
/**
* 查询项目组下拉列表
* @return
*/
@Operation(summary = "查询项目组下拉列表", description = "查询项目组下拉列表")
@GetMapping("/list")
public HttpResultResponse<List<DeviceProEntity>> listDevicePro(){
return HttpResultResponse.success(deviceProService.listDevicePro());
}
//2、添加项目组 //2、添加项目组
/** /**
* 新增/更新项目 * 新增/更新项目
@ -89,6 +100,28 @@ public class DeviceProController {
return HttpResultResponse.success(deviceProService.updateDevice(dict)); 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调用接口) * 根据人员获取项目组(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<Integer> listDeviceGroup(Long userId);
List<String> listDevice(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(); 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 @Override
public Boolean saveAndUpdate(DeviceProEntity entity) { public Boolean saveAndUpdate(DeviceProEntity entity) {
boolean flag = true; 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; 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.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@ -404,7 +405,7 @@ public class DeviceServiceImpl implements IDeviceService {
.map(WorkspaceDTO::getWorkspaceName).orElse("") : "") .map(WorkspaceDTO::getWorkspaceName).orElse("") : "")
.firmwareStatus(DeviceFirmwareStatusEnum.NOT_UPGRADE) .firmwareStatus(DeviceFirmwareStatusEnum.NOT_UPGRADE)
.videoId(dockVideoId) .videoId(dockVideoId)
.thingVersion(entity.getVersion()).build(); .thingVersion(entity.getVersion()).proId(ObjectUtil.isNotEmpty(entity.getProId())?String.valueOf(entity.getProId()):"").build();
} catch (CloudSDKException e) { } catch (CloudSDKException e) {
log.error(e.getLocalizedMessage() + "Entity: {}", entity); 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 @Override
public List<RemoteUserVo> selectListByIds(List<Long> userIds) { 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); 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); 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> selectUserByUserIds(List<Long> userIds);
List<SysUserVo> assignUserSelect(Long deptId); 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)); .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查询用户账户 * 通过用户ID查询用户账户
* *

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

@ -83,4 +83,18 @@
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </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> </mapper>

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

@ -1,5 +1,6 @@
package org.dromara.workflow.controller; package org.dromara.workflow.controller;
import cn.hutool.core.util.ObjectUtil;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -50,6 +51,10 @@ public class FlwTaskController extends BaseController {
@PostMapping("/startWorkFlow") @PostMapping("/startWorkFlow")
public R<RemoteStartProcessReturn> startWorkFlow(@Validated(AddGroup.class) @RequestBody StartProcessBo startProcessBo) { public R<RemoteStartProcessReturn> startWorkFlow(@Validated(AddGroup.class) @RequestBody StartProcessBo startProcessBo) {
RemoteStartProcessReturn startProcessReturn = flwTaskService.startWorkFlow(startProcessBo); RemoteStartProcessReturn startProcessReturn = flwTaskService.startWorkFlow(startProcessBo);
//加签
flwTaskService.addSign(startProcessReturn.getProcessInstanceId());
return R.ok("提交成功", startProcessReturn); return R.ok("提交成功", startProcessReturn);
} }
@ -62,7 +67,13 @@ public class FlwTaskController extends BaseController {
@RepeatSubmit() @RepeatSubmit()
@PostMapping("/completeTask") @PostMapping("/completeTask")
public R<Void> completeTask(@Validated(AddGroup.class) @RequestBody CompleteTaskBo completeTaskBo) { 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); 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 办理任务参数 * @param completeTaskBo 办理任务参数
* @return 结果 * @return 结果
*/ */
boolean completeTask(CompleteTaskBo completeTaskBo); String completeTask(CompleteTaskBo completeTaskBo);
/** /**
* 查询当前用户的待办任务 * 查询当前用户的待办任务
@ -223,4 +223,7 @@ public interface IFlwTaskService {
* @return 节点 * @return 节点
*/ */
FlowNode getByNodeCode(String nodeCode, Long definitionId); 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 @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean completeTask(CompleteTaskBo completeTaskBo) { public String completeTask(CompleteTaskBo completeTaskBo) {
try { try {
// 获取任务ID并查询对应的流程任务和实例信息 // 获取任务ID并查询对应的流程任务和实例信息
Long taskId = completeTaskBo.getTaskId(); Long taskId = completeTaskBo.getTaskId();
@ -217,7 +217,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
} }
//设置下一环节处理人 //设置下一环节处理人
setNextHandler(ins.getId()); setNextHandler(ins.getId());
return true; return String.valueOf(ins.getId());
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
throw new ServiceException(e.getMessage()); throw new ServiceException(e.getMessage());
@ -713,9 +713,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
Task task = taskService.getById(taskId); Task task = taskService.getById(taskId);
FlowNode flowNode = getByNodeCode(task.getNodeCode(), task.getDefinitionId()); FlowNode flowNode = getByNodeCode(task.getNodeCode(), task.getDefinitionId());
if ("addSignature".equals(taskOperation) || "reductionSignature".equals(taskOperation)) { if ("addSignature".equals(taskOperation) || "reductionSignature".equals(taskOperation)) {
if (flowNode.getNodeRatio().compareTo(BigDecimal.ZERO) == 0) { // if (flowNode.getNodeRatio().compareTo(BigDecimal.ZERO) == 0) {
throw new ServiceException(task.getNodeName() + "不是会签节点!"); // throw new ServiceException(task.getNodeName() + "不是会签节点!");
} // }
} }
// 设置任务状态并执行对应的任务操作 // 设置任务状态并执行对应的任务操作
switch (taskOperation) { switch (taskOperation) {
@ -864,7 +864,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
completeTaskBo.setTaskId(taskId); completeTaskBo.setTaskId(taskId);
completeTaskBo.setMessageType(List.of(MessageTypeEnum.SYSTEM_MESSAGE.getCode())); completeTaskBo.setMessageType(List.of(MessageTypeEnum.SYSTEM_MESSAGE.getCode()));
IFlwTaskService service = applicationContext.getBean(IFlwTaskService.class); 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)); .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 @Override
public boolean completeTask(RemoteCompleteTask completeTask) { 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 ) t
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </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> </mapper>

Loading…
Cancel
Save