Browse Source

Merge remote-tracking branch 'origin/dev' into dev

nantong
时子升 1 month ago
parent
commit
e2ec21d429
  1. 10
      dk-api/api-system/src/main/java/org/dromara/system/api/RemoteNoticeService.java
  2. 74
      dk-api/api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteNoticeBo.java
  3. 12
      dk-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java
  4. 4
      dk-common/common-encrypt/src/main/java/org/dromara/common/encrypt/utils/EncryptUtils.java
  5. 25
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java
  6. 21
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java
  7. 2
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java
  8. 6
      dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java
  9. 2
      dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java
  10. 1
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java
  11. 4
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java
  12. 48
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java
  13. 13
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java
  14. 39
      dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml
  15. 15
      dk-modules/sample/src/main/java/org/dromara/sample/feign/BusinessTaskFeign.java
  16. 2
      dk-modules/sample/src/main/java/org/dromara/sample/feign/RemoteBusinessTaskFeign.java
  17. 55
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceProController.java
  18. 12
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceProDTO.java
  19. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProEntity.java
  20. 7
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java
  21. 153
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java
  22. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java
  23. 30
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java
  24. 17
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareQueueServiceImpl.java
  25. 32
      dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml
  26. 4
      dk-modules/system/src/main/java/org/dromara/system/controller/system/SysMenuController.java
  27. 10
      dk-modules/system/src/main/java/org/dromara/system/controller/system/SysUserController.java
  28. 1
      dk-modules/system/src/main/java/org/dromara/system/domain/SysNotice.java
  29. 99
      dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysUserProVo.java
  30. 38
      dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteNoticeServiceImpl.java
  31. 3
      dk-modules/system/src/main/java/org/dromara/system/mapper/SysUserMapper.java
  32. 2
      dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java
  33. 5
      dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
  34. 19
      dk-modules/system/src/main/resources/mapper/system/SysUserMapper.xml
  35. 5
      dk-modules/workflow/pom.xml
  36. 4
      dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceMapper.java
  37. 2
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java
  38. 79
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java
  39. 5
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java
  40. 20
      dk-modules/workflow/src/main/resources/mapper/workflow/FlwInstanceMapper.xml

10
dk-api/api-system/src/main/java/org/dromara/system/api/RemoteNoticeService.java

@ -0,0 +1,10 @@
package org.dromara.system.api;
import org.dromara.system.api.domain.bo.RemoteNoticeBo;
import org.dromara.system.api.domain.vo.RemotePostVo;
import java.util.List;
public interface RemoteNoticeService {
int saveNotice(RemoteNoticeBo bo);
}

74
dk-api/api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteNoticeBo.java

@ -0,0 +1,74 @@
package org.dromara.system.api.domain.bo;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 操作日志记录表 oper_log
*
* @author Lion Li
*/
@Data
@NoArgsConstructor
public class RemoteNoticeBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private Long noticeId;
/**
* 公告标题
*/
private String noticeTitle;
/**
* 公告类型1通知 2公告
*/
private String noticeType;
/**
* 公告内容
*/
private String noticeContent;
/**
* 公告状态0正常 1关闭
*/
private String status;
/**
* 备注
*/
private String remark;
private Integer isRead;
/**
* 创建部门
*/
private Long createDept;
/**
* 创建者
*/
private Long createBy;
private String deviceSn;
/**
* 创建时间
*/
private Date createTime;
private String param;
}

12
dk-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java

@ -83,18 +83,6 @@ public class PasswordAuthStrategy implements IAuthStrategy {
model.setActiveTimeout(client.getActiveTimeout()); model.setActiveTimeout(client.getActiveTimeout());
model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId()); model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId());
//获取设备权限
List<String> deviceList = new ArrayList<>();
try {
deviceList = feignDeviceGroup.listDevice(loginUser.getUserId());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
loginUser.setDeviceList(deviceList);
// 生成token // 生成token
LoginHelper.login(loginUser, model); LoginHelper.login(loginUser, model);

4
dk-common/common-encrypt/src/main/java/org/dromara/common/encrypt/utils/EncryptUtils.java

@ -175,6 +175,10 @@ public class EncryptUtils {
return keyMap; return keyMap;
} }
public static void main(String[] args) {
Map<String, String> map = generateRsaKey();
System.out.println(map);
}
/** /**
* sm2公钥加密 * sm2公钥加密
* *

25
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java

@ -1,6 +1,7 @@
package org.dromara.business.controller; package org.dromara.business.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import com.alibaba.fastjson.JSON;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -9,17 +10,22 @@ import org.dromara.business.domain.BusinessAlert;
import org.dromara.business.domain.bo.BusinessAlertBo; import org.dromara.business.domain.bo.BusinessAlertBo;
import org.dromara.business.domain.vo.BusinessAlertVo; import org.dromara.business.domain.vo.BusinessAlertVo;
import org.dromara.business.service.IBusinessAlertService; import org.dromara.business.service.IBusinessAlertService;
import org.dromara.business.utils.MinioUntil;
import org.dromara.business.utils.constants.MinIOConstants;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.log.annotation.Log; import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType; import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.system.api.RemoteNoticeService;
import org.dromara.system.api.domain.bo.RemoteNoticeBo;
import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -39,6 +45,8 @@ public class BusinessAlertController extends BaseController {
private final IBusinessAlertService businessAlertService; private final IBusinessAlertService businessAlertService;
@DubboReference(timeout = 30000) @DubboReference(timeout = 30000)
private RemoteWorkflowService remoteWorkflowService; private RemoteWorkflowService remoteWorkflowService;
@DubboReference(timeout = 30000)
private RemoteNoticeService remoteNoticeService;
/** /**
* 查询全部预警/待办/已完成/忽略 * 查询全部预警/待办/已完成/忽略
@ -79,13 +87,28 @@ public class BusinessAlertController extends BaseController {
*/ */
@Operation(summary ="ai实时流预警保存",description = "ai实时流预警保存") @Operation(summary ="ai实时流预警保存",description = "ai实时流预警保存")
@PostMapping("/saveAlert") @PostMapping("/saveAlert")
public void saveAlert(BusinessAlertVo vo) { public void saveAlert(@RequestBody BusinessAlertVo vo) {
vo.setBusinessType(2); vo.setBusinessType(2);
BusinessAlert businessAlert = businessAlertService.addBusinessAlert(vo); BusinessAlert businessAlert = businessAlertService.addBusinessAlert(vo);
RemoteStartProcess startProcess = new RemoteStartProcess(); RemoteStartProcess startProcess = new RemoteStartProcess();
startProcess.setBusinessId(String.valueOf(businessAlert.getId())); startProcess.setBusinessId(String.valueOf(businessAlert.getId()));
startProcess.setFlowCode("alertChz"); startProcess.setFlowCode("alertChz");
remoteWorkflowService.startWorkFlowBatch(List.of(startProcess)); remoteWorkflowService.startWorkFlowBatch(List.of(startProcess));
RemoteNoticeBo remoteNoticeBo = new RemoteNoticeBo();
remoteNoticeBo.setNoticeTitle(vo.getDeptName()+"产生预警,预警类型["+vo.getLabelCn()+"],请立即查看");
remoteNoticeBo.setNoticeType("3");
remoteNoticeBo.setNoticeContent(vo.getDeptName()+"产生预警,预警类型["+vo.getLabelCn()+"],请立即查看");
remoteNoticeBo.setStatus("0");
remoteNoticeBo.setIsRead(0);
remoteNoticeBo.setCreateBy(1L);
remoteNoticeBo.setCreateDept(1L);
remoteNoticeBo.setCreateTime(new Date());
if (vo.getBusinessType() == 2){
vo.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, vo.getImages(), 3600).toString());
}
remoteNoticeBo.setDeviceSn(vo.getDeviceSn());
remoteNoticeBo.setParam(JSON.toJSONString(vo));
remoteNoticeService.saveNotice(remoteNoticeBo);
} }

21
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java

@ -142,6 +142,27 @@ public class BusinessAlertStatisticsController extends BaseController {
return R.ok(businessAlertService.cityListAlert(businessAlertBo)); return R.ok(businessAlertService.cityListAlert(businessAlertBo));
} }
/**
* 预警信息-资规/农水-热力图
* @param businessAlertBo
* @return
*/
@Operation(summary="预警信息-资规/农水-标签分组", description="预警信息-资规/农水-标签分组")
@GetMapping(value = "/alert/heatList")
public R<Map<String,Object>> heatList(BusinessAlertBo businessAlertBo) {
return R.ok(businessAlertService.heatList(businessAlertBo));
}
/**
* 预警信息-城管/环保-热力图
* @param businessAlertBo
* @return
*/
@Operation(summary="预警信息-城管/环保/住建-标签分组", description="预警信息-城管/环保/住建-标签分组")
@GetMapping(value = "/city/alert/heatList")
public R<Map<String, Object>> cityHeatList(BusinessAlertBo businessAlertBo) {
return R.ok(businessAlertService.cityHeatList(businessAlertBo));
}
//饼图显示每个月根据部门 //饼图显示每个月根据部门
@Operation(summary="根据月份显示预警个数", description="根据月份显示预警个数") @Operation(summary="根据月份显示预警个数", description="根据月份显示预警个数")

2
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java

@ -11,6 +11,7 @@ import lombok.extern.slf4j.Slf4j;
import org.dromara.business.domain.bo.BusinessTaskBo; import org.dromara.business.domain.bo.BusinessTaskBo;
import org.dromara.business.domain.vo.BusinessTaskVo; import org.dromara.business.domain.vo.BusinessTaskVo;
import org.dromara.business.service.IBusinessTaskService; import org.dromara.business.service.IBusinessTaskService;
import org.dromara.common.encrypt.annotation.ApiEncrypt;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -45,6 +46,7 @@ public class BusinessTaskController extends BaseController {
/** /**
* 查询工单预约列表 * 查询工单预约列表
*/ */
@ApiEncrypt(response=true)
@SaCheckPermission("business:task:list") @SaCheckPermission("business:task:list")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<BusinessTaskVo> list(BusinessTaskBo bo, PageQuery pageQuery) { public TableDataInfo<BusinessTaskVo> list(BusinessTaskBo bo, PageQuery pageQuery) {

6
dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java

@ -41,6 +41,9 @@ public class BusinessAlertBo {
*/ */
private String images; private String images;
private String startTime;
private String endTime;
/** /**
* 预警类型 * 预警类型
@ -235,9 +238,6 @@ public class BusinessAlertBo {
*/ */
private Integer dateType; private Integer dateType;
private String startTime;
private String endTime;
private String aiName; private String aiName;
private Integer businessType; private Integer businessType;

2
dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java

@ -190,6 +190,7 @@ public class BusinessAlertVo implements Serializable {
* 忽略原因 * 忽略原因
*/ */
private String ignoringCause; private String ignoringCause;
private Integer value;
/** /**
* 来源0平台 1小程序 * 来源0平台 1小程序
@ -204,4 +205,5 @@ public class BusinessAlertVo implements Serializable {
private Date createTime; private Date createTime;
//1:图片比对预警 2:AI实时预警 //1:图片比对预警 2:AI实时预警
private Integer businessType; private Integer businessType;
private String deviceSn;
} }

1
dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java

@ -96,6 +96,7 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
List<BusinessAlert> listAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime); List<BusinessAlert> listAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime);
List<BusinessAlertVo> heatList(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime);
List<Map<String,Object>> countStreetRateAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List<Long> deptIdList); List<Map<String,Object>> countStreetRateAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List<Long> deptIdList);
Map<String, Object> streetRateTopAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List<Long> deptIdList); Map<String, Object> streetRateTopAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List<Long> deptIdList);

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

@ -74,9 +74,11 @@ public interface IBusinessAlertService {
TableDataInfo<BusinessAlert> getInfo(BusinessAlertBo bo, PageQuery pageQuery, String alertCode); TableDataInfo<BusinessAlert> getInfo(BusinessAlertBo bo, PageQuery pageQuery, String alertCode);
Map<String,Object> listAlert(BusinessAlertBo businessAlertBo); Map<String,Object> listAlert(BusinessAlertBo businessAlertBo);
Map<String,Object> heatList(BusinessAlertBo businessAlertBo);
Map<String, Object> cityListAlert(BusinessAlertBo businessAlertBo); Map<String, Object> cityListAlert(BusinessAlertBo businessAlertBo);
Map<String, Object> cityHeatList(BusinessAlertBo businessAlertBo);
List<BusinessAlertVo> listVerifyAlert(RemoteBusinessAlertBo businessAlertBo); List<BusinessAlertVo> listVerifyAlert(RemoteBusinessAlertBo businessAlertBo);
Boolean deleteAlert(List<Long> alertIdList); Boolean deleteAlert(List<Long> alertIdList);

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

@ -537,6 +537,32 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
} }
@Override
public Map<String, Object> heatList(BusinessAlertBo businessAlertBo) {
Map<String,Object> result = new HashMap<>();
/* //生成近一周开始时间、结束时间
List<String> dayList = getLastSixDays();
String startTime = dayList.get(dayList.size() - 1);
String endTime = dayList.get(0);
result.put("date", startTime + "~" + endTime);*/
//查看的是总览的预警信息
if (ObjectUtil.isEmpty(businessAlertBo.getPostCode())) {
List<BusinessAlertVo> businessAlerts = this.baseMapper.heatList(businessAlertBo, businessAlertBo.getStartTime(), businessAlertBo.getEndTime());
Map<String, List<BusinessAlertVo>> listMap = businessAlerts.stream().collect(Collectors.groupingBy(BusinessAlertVo::getLabelCn));
result.putAll(listMap);
return result;
}
//不是空的话查看是对应各局的
businessAlertBo.setAiLabelEnList(List.of(businessAlertBo.getLabelEn()));
List<BusinessAlertVo> alertList = this.baseMapper.heatList(businessAlertBo,businessAlertBo.getStartTime(), businessAlertBo.getEndTime());
Map<String, List<BusinessAlertVo>> listMap = alertList.stream().collect(Collectors.groupingBy(BusinessAlertVo::getLabelCn));
result.putAll(listMap);
return result;
}
@Override @Override
public Map<String, Object> cityListAlert(BusinessAlertBo businessAlertBo) { public Map<String, Object> cityListAlert(BusinessAlertBo businessAlertBo) {
if (ObjectUtil.hasEmpty(businessAlertBo.getPostCode(),businessAlertBo.getAiName())) { if (ObjectUtil.hasEmpty(businessAlertBo.getPostCode(),businessAlertBo.getAiName())) {
@ -603,6 +629,28 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return infoMap; return infoMap;
} }
@Override
public Map<String, Object> cityHeatList(BusinessAlertBo businessAlertBo) {
if (ObjectUtil.hasEmpty(businessAlertBo.getPostCode(),businessAlertBo.getAiName())) {
throw new ServiceException("参数为空!");
}
Map<String,Object> infoMap = new HashMap<>();
//不是空的话查看是对应各局的
List<RemoteAiLabelPostVo> postVoList = remoteLablePostService.selectLabelByList(businessAlertBo.getPostCode(), LoginHelper.getDeptId());
Map<String, List<RemoteAiLabelPostVo>> aiNameMap = postVoList.stream().collect(Collectors.groupingBy(RemoteAiLabelPostVo::getAiName));
if (ObjectUtil.isEmpty(postVoList)){
return infoMap;
}
businessAlertBo.setAiLabelEnList(aiNameMap.get(businessAlertBo.getAiName()).stream().map(RemoteAiLabelPostVo::getLabelEn).distinct().toList());
List<BusinessAlertVo> alertList = this.baseMapper.heatList(businessAlertBo, businessAlertBo.getStartTime(), businessAlertBo.getEndTime());
Map<String, List<BusinessAlertVo>> listMap = alertList.stream().collect(Collectors.groupingBy(BusinessAlertVo::getLabelCn));
infoMap.putAll(listMap);
return infoMap;
}
@Override @Override
public List<BusinessAlertVo> listVerifyAlert(RemoteBusinessAlertBo businessAlertBo) { public List<BusinessAlertVo> listVerifyAlert(RemoteBusinessAlertBo businessAlertBo) {
LambdaQueryWrapper<BusinessAlert> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<BusinessAlert> wrapper = new LambdaQueryWrapper<>();

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) { switch (dateType) {
case 0: case 0:
LocalDate today = LocalDate.now(); // 获取当前日期
LocalDate startDate = today.minusMonths(6) LocalDate localDate = LocalDate.now();
.with(TemporalAdjusters.firstDayOfMonth());
LocalDate endDate = today.with(TemporalAdjusters.lastDayOfMonth()); // 计算当前日期的六个月前的日期
LocalDate sixMonthsAgo = localDate.minusMonths(6);
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; break;
case 1: // 年 case 1: // 年
LocalDate currentDate = LocalDate.now(); LocalDate currentDate = LocalDate.now();

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

@ -16,6 +16,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="param.createTime != null and param.createTime != ''"> <if test="param.createTime != null and param.createTime != ''">
and DATE_FORMAT(ba.create_time,'%Y-%m-%d') = #{param.createTime} and DATE_FORMAT(ba.create_time,'%Y-%m-%d') = #{param.createTime}
</if> </if>
<if test="param.startTime != null and param.startTime != ''">
and <![CDATA[ DATE_FORMAT(ba.create_time, '%Y-%m-%d') >= #{param.startTime} ]]>
</if>
<if test="param.endTime != null and param.endTime != ''">
and <![CDATA[ DATE_FORMAT(ba.create_time, '%Y-%m-%d') <= #{param.endTime} ]]>
</if>
<if test="param.deptIdList != null and param.deptIdList.size > 0"> <if test="param.deptIdList != null and param.deptIdList.size > 0">
and ba.dept_id in and ba.dept_id in
<foreach collection="param.deptIdList" item="item" open="(" close=")" separator=","> <foreach collection="param.deptIdList" item="item" open="(" close=")" separator=",">
@ -443,8 +449,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
COUNT(DISTINCT ba.id) AS total COUNT(DISTINCT ba.id) AS total
from business_alert ba from business_alert ba
where 1=1 where 1=1
and <![CDATA[ DATE_FORMAT(ba.create_time, '%Y') >= '2024' ]]> and ba.handle_type = 'finish'
and <![CDATA[ DATE_FORMAT(ba.create_time, '%Y') <= DATE_FORMAT(now(), '%Y') ]]>
<include refid="searchSql"></include> <include refid="searchSql"></include>
</select> </select>
@ -526,6 +531,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
warning_summary ws warning_summary ws
LEFT JOIN business_alert ba ON ws.label_en = ba.label_en LEFT JOIN business_alert ba ON ws.label_en = ba.label_en
and ba.handle_type != 'verify' 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') >= #{startTime} ]]>
and <![CDATA[ DATE_FORMAT(ba.create_time, '%Y-%m-%d') <= #{endTime} ]]> and <![CDATA[ DATE_FORMAT(ba.create_time, '%Y-%m-%d') <= #{endTime} ]]>
and ws.label_en in and ws.label_en in
@ -880,7 +886,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY GROUP BY
dc.dept_id,dc.dept_name dc.dept_id,dc.dept_name
</select> </select>
<select id="heatList" resultType="org.dromara.business.domain.vo.BusinessAlertVo">
SELECT
temp.label_en AS labelEn,
temp.label_cn as labelCn,
bl.lat AS lat,
bl.lng AS lng,
COUNT(*) AS value
FROM
(
SELECT
ba.label_en,
ba.label_cn
FROM
dk_business.business_alert ba
GROUP BY
ba.label_en, ba.label_cn
) temp
INNER JOIN
business_alert bl ON temp.label_en = bl.label_en
AND bl.lat IS NOT NULL
<where>
<include refid="searchSql"></include>
</where>
GROUP BY
temp.label_en,temp.label_cn, bl.lat, bl.lng
HAVING
<![CDATA[ ST_Distance_Sphere(POINT(lng, lat), POINT(bl.lng, bl.lat)) <= 30 ]]>
</select>
</mapper> </mapper>

15
dk-modules/sample/src/main/java/org/dromara/sample/feign/BusinessTaskFeign.java

@ -1,15 +0,0 @@
package org.dromara.sample.feign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name = "gateway",path = "business")
public interface BusinessTaskFeign {
@PostMapping("/update/status")
void updateTaskStatus(@RequestParam String waylineId,
@RequestParam String status,
@RequestParam(required = false) String jobId,
@RequestParam(required = false) String jobName);
}

2
dk-modules/sample/src/main/java/org/dromara/sample/fegin/RemoteBusinessTaskFeign.java → dk-modules/sample/src/main/java/org/dromara/sample/feign/RemoteBusinessTaskFeign.java

@ -1,4 +1,4 @@
package org.dromara.sample.fegin; package org.dromara.sample.feign;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;

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

@ -76,8 +76,8 @@ public class DeviceProController {
//3、删除项目组 //3、删除项目组
@Operation(summary = "删除项目组。", description = "删除项目组。") @Operation(summary = "删除项目组。", description = "删除项目组。")
@DeleteMapping("/delete") @DeleteMapping("/delete")
public HttpResultResponse<Boolean> deleteDevicePro(@RequestBody List<Integer> ids) { public HttpResultResponse<Boolean> deleteDevicePro(Integer id) {
return HttpResultResponse.success(deviceProService.deleteIds(ids)); return HttpResultResponse.success(deviceProService.deleteIds(List.of(id)));
} }
/** /**
@ -91,15 +91,25 @@ public class DeviceProController {
return HttpResultResponse.success(deviceProService.updateDeviceProUser(userEntity,proId)); return HttpResultResponse.success(deviceProService.updateDeviceProUser(userEntity,proId));
} }
/**
* 设备绑定项目组 @Operation(summary = "查询项目人员。", description = "查询项目人员")
*/ @GetMapping("/{proId}/user/page")
@Operation(summary = "设备绑定项目组", description = "设备绑定项目组") public HttpResultResponse<PaginationData<DeviceProUserEntity>> pageProUser(@PathVariable Integer proId,
@PostMapping("/bind") @RequestParam(value = "searchValue",required = false) String searchValue,
public HttpResultResponse<Boolean> updateDevice(@RequestBody Dict dict) { @RequestParam(name = "pageNum", defaultValue = "1") Long page,
return HttpResultResponse.success(deviceProService.updateDevice(dict)); @RequestParam(name = "pageSize", defaultValue = "10") Long pageSize) {
Page<DeviceProUserEntity> pageQuery = new Page<>(page, pageSize);
return HttpResultResponse.success(deviceProService.pageProUser(searchValue,proId,pageQuery));
}
@Operation(summary = "删除项目人员", description = "删除项目人员")
@DeleteMapping("/{proId}/{proUserId}/user/delete")
public HttpResultResponse<Boolean> deleteProUser(@PathVariable Integer proId,
@PathVariable Long proUserId) {
return HttpResultResponse.success(deviceProService.deleteProUser(proUserId,proId));
} }
/** /**
* 开启配置 * 开启配置
* @param proId * @param proId
@ -123,25 +133,20 @@ public class DeviceProController {
} }
/** /**
* 根据人员获取项目组(feign调用接口) * 根据人员获取项目组
*/ */
@GetMapping("/list/pro") // @GetMapping("/list/pro")
public R<List<Integer>> listDeviceGroup(@RequestParam("userId") Long userId) { // public HttpResultResponse<List<Integer>> listDeviceGroup(@RequestParam("userId") Long userId) {
log.info("----------------------------开始调用feign接口查询项目组----------------------------"); // List<Integer> result = deviceProService.listDeviceGroup(userId);
List<Integer> result = deviceProService.listDeviceGroup(userId); // return HttpResultResponse.success(result);
log.info("----------------------------调用feign接口查询项目组结束----------------------------"); // }
return R.ok(result);
}
/** /**
* 根据人员获取当前人员所拥有的机场(feign调用接口) * 根据人员获取项目组
*/ */
@GetMapping("/feign/device") @GetMapping("/list/user/pro")
public List<String> listDevice(@RequestParam("userId") Long userId) { public HttpResultResponse<List<DeviceProEntity>> listUserGroup() {
log.info("----------------------------开始调用feign接口查询项目所属机场----------------------------"); List<DeviceProEntity> result = deviceProService.listUserGroup();
List<String> result = deviceProService.listDevice(userId); return HttpResultResponse.success(result);
log.info("----------------------------调用feign接口查询项目组所属机场----------------------------");
return result;
} }
} }

12
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceProDTO.java

@ -43,5 +43,15 @@ public class DeviceProDTO {
/** /**
分配人员 分配人员
*/ */
private Integer userId; private Long userId;
/**
* 设备组编码
*/
private String bind_code;
/**
* 设备组名称
*/
private String pro_name;
} }

2
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProEntity.java

@ -37,7 +37,7 @@ public class DeviceProEntity extends BaseEntity implements Serializable {
private String bindCode; private String bindCode;
@TableField(value = "bind_type") @TableField(value = "bind_type")
private Integer bindType; private Boolean bindType;
@TableField(value = "workspace_id") @TableField(value = "workspace_id")
private String workspaceId; private String workspaceId;

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

@ -49,4 +49,11 @@ public interface IDeviceProService {
Boolean enablePro(Integer proId); Boolean enablePro(Integer proId);
Boolean disablePro(Integer proId); Boolean disablePro(Integer proId);
PaginationData<DeviceProUserEntity> pageProUser(String searchValue, Integer proId,Page<DeviceProUserEntity> pageQuery);
Boolean deleteProUser(Long proUserId, Integer proId);
List<DeviceProEntity> listUserGroup();
} }

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

@ -58,7 +58,9 @@ import org.dromara.sample.manage.model.param.DeviceQueryParam;
import org.dromara.sample.manage.model.receiver.BasicDeviceProperty; import org.dromara.sample.manage.model.receiver.BasicDeviceProperty;
import org.dromara.sample.manage.service.*; import org.dromara.sample.manage.service.*;
import org.dromara.sample.websocket.service.IWebSocketMessageService; import org.dromara.sample.websocket.service.IWebSocketMessageService;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.system.api.model.LoginUser; import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -88,7 +90,6 @@ public class DeviceProServiceImpl implements IDeviceProService {
@Autowired @Autowired
private IDeviceProUserMapper deviceProUserMapper; private IDeviceProUserMapper deviceProUserMapper;
// private final ObjectMapper objectMapper = new ObjectMapper();
@Override @Override
public PaginationData<DeviceProEntity> listDeviceProEntityMap(Page page, DeviceProDTO deviceProDTO) { public PaginationData<DeviceProEntity> listDeviceProEntityMap(Page page, DeviceProDTO deviceProDTO) {
@ -100,10 +101,13 @@ public class DeviceProServiceImpl implements IDeviceProService {
@Override @Override
public Boolean updateDevicePro(DeviceProEntity deviceProEntity) { public Boolean updateDevicePro(DeviceProEntity deviceProEntity) {
if(ObjectUtil.isNotEmpty(deviceProEntity.getId())){ if(ObjectUtil.isNotEmpty(deviceProEntity.getId())){
DeviceProEntity devicePro = deviceProMapper.selectById(deviceProEntity.getId());
BeanUtils.copyProperties(deviceProEntity, devicePro);
return deviceProMapper.updateById(deviceProEntity) > 0 ; return deviceProMapper.updateById(deviceProEntity) > 0 ;
}else { }else {
deviceProEntity.setDeptName(LoginHelper.getDeptName()); deviceProEntity.setDeptName(LoginHelper.getDeptName());
deviceProEntity.setNickName(LoginHelper.getUsername()); deviceProEntity.setNickName(LoginHelper.getLoginUser().getNickname());
return deviceProMapper.insert(deviceProEntity) > 0; return deviceProMapper.insert(deviceProEntity) > 0;
} }
} }
@ -119,10 +123,6 @@ public class DeviceProServiceImpl implements IDeviceProService {
}); });
//todo人员是否要删除
List<DeviceProUserEntity> proUserEntityList = deviceProUserMapper.selectList(new LambdaQueryWrapper<DeviceProUserEntity>().in(DeviceProUserEntity::getDeviceProId, ids));
return deviceProMapper.deleteByIds(ids)>0; return deviceProMapper.deleteByIds(ids)>0;
} }
@ -130,76 +130,16 @@ public class DeviceProServiceImpl implements IDeviceProService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean updateDeviceProUser(List<DeviceProUserEntity> userEntity,Integer proId) { public Boolean updateDeviceProUser(List<DeviceProUserEntity> userEntity,Integer proId) {
try { try {
//获取项目组信息 List<DeviceProUserEntity> proUserEntityList = deviceProUserMapper.selectList(new LambdaQueryWrapper<DeviceProUserEntity>().eq(DeviceProUserEntity::getDeviceProId, proId));
// DeviceProEntity deviceProEntity = deviceProMapper.selectOne(new LambdaQueryWrapper<DeviceProEntity>().eq(DeviceProEntity::getId, proId));
List<DeviceProUserEntity> different = userEntity.stream()
//查询之前项目所属的人员信息 .filter(user -> proUserEntityList.stream().noneMatch(u -> u.getUserId().equals(user.getUserId())))
// List<DeviceProUserEntity> proUserEntityList = deviceProUserMapper.selectList(new LambdaQueryWrapper<DeviceProUserEntity>().eq(DeviceProUserEntity::getDeviceProId, proId)); .toList();
//
// List<DeviceProUserEntity> difference = new ArrayList<>();
if (ObjectUtil.isNotEmpty(different)){
// 判断两个集合的差值(基于 userId)
// difference = proUserEntityList.stream()
// .filter(proUser -> userEntity.stream()
// .noneMatch(user -> user.getUserId().equals(proUser.getUserId())))
// .toList();
//--------------------------------------------缓存相关操作----------------------------------------------------------------
//人员如果解绑了项目删除缓存数据
// difference.forEach(proUserEntity -> {
// //删除人员项目组信息
// List<Object> projects = RedisUtils.getCacheList(String.format(Constants.PRO_GROUP, proUserEntity.getUserId()));
// List<Map> projectList = projects.stream()
// .filter(Map.class::isInstance)
// .map(Map.class::cast)
// .toList();
//
// //删除人员中所拥有的当前的项目组,然后构建新的存入redis
// List<Map> deviceProEntities = projectList.stream().filter(p -> !Integer.valueOf(p.get("id") + "").equals(proId)).toList();
// //删除
// RedisUtils.deleteObject(String.format(Constants.PRO_GROUP, proUserEntity.getUserId()));
// //重新插入
// RedisUtils.setCacheList(String.format(Constants.PRO_GROUP, proUserEntity.getUserId()),deviceProEntities);
//
//
// //删除人员所拥有的设备信息
// List<Object> cacheList = RedisUtils.getCacheList(String.format(Constants.PRO_DEVICE, proUserEntity.getUserId()));
// List<Map> deviceList = cacheList.stream()
// .filter(Map.class::isInstance)
// .map(Map.class::cast)
// .toList();
//
// //过滤除了这个删除的项目组之外的设备
// deviceList = deviceList.stream().filter(p-> !Integer.valueOf(p.get("proId") + "").equals(proId)).toList();
// //删除
// RedisUtils.deleteObject(String.format(Constants.PRO_DEVICE, proUserEntity.getUserId()));
//
// RedisUtils.setCacheList(String.format(Constants.PRO_DEVICE, proUserEntity.getUserId()),deviceList);
// });
//--------------------------------------------缓存相关操作----------------------------------------------------------------
//先清除原来的项目组成员
deviceProUserMapper.delete(new LambdaQueryWrapper<DeviceProUserEntity>().eq(DeviceProUserEntity::getDeviceProId, proId));
if (ObjectUtil.isNotEmpty(userEntity)) {
//添加新的项目组成员 //添加新的项目组成员
deviceProUserMapper.insert(userEntity); deviceProUserMapper.insert(different);
//更新缓存记录
// userEntity.forEach(proUserEntity -> {
// List<Object> projects = RedisUtils.getCacheList(String.format(Constants.PRO_GROUP, proUserEntity.getUserId()));
// List<Map> projectList = projects.stream()
// .filter(Map.class::isInstance)
// .map(Map.class::cast)
// .toList();
//
// if (!projectList.stream().anyMatch(p-> Integer.valueOf(p.get("id") + "").equals(proUserEntity.getDeviceProId()))){
// Map proMap = objectMapper.convertValue(deviceProEntity, Map.class);
// RedisUtils.addCacheList(String.format(Constants.PRO_GROUP, proUserEntity.getUserId()), proMap);
// }
// });
} }
return true; return true;
@ -229,28 +169,8 @@ public class DeviceProServiceImpl implements IDeviceProService {
wrapper.set(DeviceEntity::getProId, proId); wrapper.set(DeviceEntity::getProId, proId);
wrapper.eq(DeviceEntity::getId, deviceId); wrapper.eq(DeviceEntity::getId, deviceId);
return deviceMapper.update(wrapper) > 0; return deviceMapper.update(wrapper) > 0;
// if (deviceMapper.update(wrapper) > 0) {
// DeviceEntity deviceEntity = deviceMapper.selectOne(new LambdaQueryWrapper<DeviceEntity>().eq(DeviceEntity::getId, deviceId));
// //根据proid获取人员用于存储人员的设备权限
// List<DeviceProUserEntity> proUserEntityList = deviceProUserMapper.selectList(new LambdaQueryWrapper<DeviceProUserEntity>().eq(DeviceProUserEntity::getDeviceProId, proId));
// proUserEntityList.forEach(deviceProUserEntity -> {
// List<Object> devices = RedisUtils.getCacheList(String.format(Constants.PRO_DEVICE, deviceProUserEntity.getUserId()));
// List<Map> deviceList = devices.stream()
// .filter(Map.class::isInstance)
// .map(Map.class::cast)
// .toList();
//
// if (!deviceList.stream().anyMatch(p-> Integer.valueOf(p.get("id") + "").equals(deviceEntity.getId()))){
// Map deviceMap = objectMapper.convertValue(deviceEntity, Map.class);
//
// RedisUtils.addCacheList(String.format(Constants.PRO_DEVICE, deviceProUserEntity.getUserId()), deviceMap);
// }
// });
// }
} catch (Exception e) { } catch (Exception e) {
return false; return false;
} }
@ -270,6 +190,8 @@ public class DeviceProServiceImpl implements IDeviceProService {
List<Integer> proIdList = proUserEntityList.stream().map(DeviceProUserEntity::getDeviceProId).distinct().toList(); List<Integer> proIdList = proUserEntityList.stream().map(DeviceProUserEntity::getDeviceProId).distinct().toList();
LambdaQueryWrapper<DeviceProEntity> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<DeviceProEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(DeviceProEntity::getId, proIdList); queryWrapper.in(DeviceProEntity::getId, proIdList);
//查询是否启用的设备组
queryWrapper.eq(DeviceProEntity::getBindType,1);
return deviceProMapper.selectList(queryWrapper).stream().map(DeviceProEntity::getId).distinct().toList(); return deviceProMapper.selectList(queryWrapper).stream().map(DeviceProEntity::getId).distinct().toList();
} }
@ -323,6 +245,47 @@ public class DeviceProServiceImpl implements IDeviceProService {
return this.deviceProMapper.update(wrapper) > 0; return this.deviceProMapper.update(wrapper) > 0;
} }
@Override
public PaginationData<DeviceProUserEntity> pageProUser(String searchValue, Integer proId,Page<DeviceProUserEntity> pageQuery) {
LambdaQueryWrapper<DeviceProUserEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(DeviceProUserEntity::getDeviceProId,proId);
if (ObjectUtil.isNotEmpty(searchValue)){
wrapper.like(DeviceProUserEntity::getNickName,searchValue);
}
Page<DeviceProUserEntity> pagination = deviceProUserMapper.selectPage(pageQuery, wrapper);
return new PaginationData<DeviceProUserEntity>(pagination.getRecords(), new Pagination(pagination.getCurrent(), pagination.getSize(), pagination.getTotal()));
}
@Override
public Boolean deleteProUser(Long proUserId, Integer proId) {
LambdaQueryWrapper<DeviceProUserEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(DeviceProUserEntity::getDeviceProId,proId);
wrapper.eq(DeviceProUserEntity::getId,proUserId);
return deviceProUserMapper.delete(wrapper) > 0;
}
@Override
public List<DeviceProEntity> listUserGroup() {
Long userId = LoginHelper.getUserId();
LambdaQueryWrapper<DeviceProUserEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(DeviceProUserEntity::getUserId,userId);
List<DeviceProUserEntity> proUserEntityList = deviceProUserMapper.selectList(wrapper);
if (ObjectUtil.isNotEmpty(proUserEntityList)){
List<Integer> proIdList = proUserEntityList.stream().map(DeviceProUserEntity::getDeviceProId).distinct().toList();
LambdaQueryWrapper<DeviceProEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(DeviceProEntity::getId, proIdList);
//查询是否启用的设备组
queryWrapper.eq(DeviceProEntity::getBindType,1);
return deviceProMapper.selectList(queryWrapper);
}
return ListUtil.empty();
}
@Override @Override
public Boolean saveAndUpdate(DeviceProEntity entity) { public Boolean saveAndUpdate(DeviceProEntity entity) {
boolean flag = true; boolean flag = true;

2
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java

@ -13,7 +13,7 @@ import org.dromara.common.redis.utils.RedisOpsUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.wayline.*; import org.dromara.common.sdk.cloudapi.wayline.*;
import org.dromara.common.sdk.common.HttpResultResponse; import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.sample.fegin.RemoteBusinessTaskFeign; import org.dromara.sample.feign.RemoteBusinessTaskFeign;
import org.dromara.sample.manage.mapper.IDeviceQrtzDateMapper; import org.dromara.sample.manage.mapper.IDeviceQrtzDateMapper;
import org.dromara.sample.manage.mapper.IDeviceQrtzFileMapper; import org.dromara.sample.manage.mapper.IDeviceQrtzFileMapper;
import org.dromara.sample.manage.mapper.IDeviceQrtzMapper; import org.dromara.sample.manage.mapper.IDeviceQrtzMapper;

30
dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java

@ -3,25 +3,33 @@ package org.dromara.sample.wayline.controller;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo; import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.wayline.FlighttaskProgress;
import org.dromara.common.sdk.cloudapi.wayline.WaylineJobTypeEnum; import org.dromara.common.sdk.cloudapi.wayline.WaylineJobTypeEnum;
import org.dromara.common.sdk.common.HttpResultResponse; import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.media.model.MediaFileDTO; import org.dromara.sample.media.model.MediaFileDTO;
import org.dromara.sample.wayline.model.dto.WaylineJobDTO; import org.dromara.sample.wayline.model.dto.WaylineJobDTO;
import org.dromara.sample.wayline.model.param.CreateJobParam; import org.dromara.sample.wayline.model.param.CreateJobParam;
import org.dromara.sample.wayline.model.param.UpdateJobParam; import org.dromara.sample.wayline.model.param.UpdateJobParam;
import org.dromara.sample.wayline.service.IFlightTaskService; import org.dromara.sample.wayline.service.IFlightTaskService;
import org.dromara.sample.wayline.service.IWaylineFileService;
import org.dromara.sample.wayline.service.IWaylineJobService; import org.dromara.sample.wayline.service.IWaylineJobService;
import org.dromara.sample.wayline.service.IWaylineRedisService;
import org.dromara.system.api.model.LoginUser; import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.net.URL;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.Set; import java.util.Set;
@ -41,6 +49,11 @@ public class WaylineJobController {
@Autowired @Autowired
private IFlightTaskService flighttaskService; private IFlightTaskService flighttaskService;
@Autowired
private IWaylineRedisService waylineRedisService;
@Autowired
private IWaylineFileService waylineFileService;
/** /**
* Create a wayline task for the Dock. * Create a wayline task for the Dock.
* @param request * @param request
@ -108,6 +121,21 @@ public class WaylineJobController {
} }
@GetMapping("/{workspace_id}/getJobFileUrlByDeviceSn")
@Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。")
public void getJobFileUrlByDeviceSn(@PathVariable(name = "workspace_id") String workspaceId,
@RequestParam(name = "device_sn") String deviceSn, HttpServletRequest req, HttpServletResponse rsp) {
try {
Optional<EventsReceiver<FlighttaskProgress>> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceSn);
if(runningWaylineJob.isEmpty())return;
String jobId = runningWaylineJob.get().getOutput().getExt().getFlightId();
Optional<WaylineJobDTO> waylineJobDTO = waylineJobService.getJobByJobId(workspaceId, jobId);
if(waylineJobDTO.isEmpty())return;
URL url = waylineFileService.getObjectUrl(workspaceId, waylineJobDTO.get().getFileId());
rsp.sendRedirect(url.toString());
} catch (IOException | SQLException e) {
e.printStackTrace();
}
}
} }

17
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareQueueServiceImpl.java

@ -1,43 +1,28 @@
package org.dromara.sample.wayline.service.impl; package org.dromara.sample.wayline.service.impl;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
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.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.tdunning.math.stats.Sort;
import lombok.Data;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.poi.ss.formula.functions.T;
import org.dromara.business.api.RemoteBusinessTaskService;
import org.dromara.common.core.constant.AiCompareStatusConstants; import org.dromara.common.core.constant.AiCompareStatusConstants;
import org.dromara.common.core.constant.BusinessConstants; import org.dromara.common.core.constant.BusinessConstants;
import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.sample.fegin.RemoteBusinessTaskFeign; import org.dromara.sample.feign.RemoteBusinessTaskFeign;
import org.dromara.sample.media.mapper.IFileMapper; import org.dromara.sample.media.mapper.IFileMapper;
import org.dromara.sample.media.model.MediaFileEntity; import org.dromara.sample.media.model.MediaFileEntity;
import org.dromara.sample.wayline.mapper.IAiCompareQueueMapper; import org.dromara.sample.wayline.mapper.IAiCompareQueueMapper;
import org.dromara.sample.wayline.mapper.IWaylineJobMapper; import org.dromara.sample.wayline.mapper.IWaylineJobMapper;
import org.dromara.sample.wayline.model.dto.AiCompareDTO;
import org.dromara.sample.wayline.model.dto.AiCompareQueueDTO; import org.dromara.sample.wayline.model.dto.AiCompareQueueDTO;
import org.dromara.sample.wayline.model.entity.AiCompareEntity;
import org.dromara.sample.wayline.model.entity.AiCompareQueueEntity; import org.dromara.sample.wayline.model.entity.AiCompareQueueEntity;
import org.dromara.sample.wayline.model.entity.WaylineJobEntity; import org.dromara.sample.wayline.model.entity.WaylineJobEntity;
import org.dromara.sample.wayline.service.IAiCompareQueueService; import org.dromara.sample.wayline.service.IAiCompareQueueService;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @auther yq * @auther yq

32
dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml

@ -4,15 +4,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.sample.manage.mapper.IDeviceProMapper"> <mapper namespace="org.dromara.sample.manage.mapper.IDeviceProMapper">
<resultMap id="listDeviceProEntityMap" type="org.dromara.sample.manage.model.entity.DeviceProEntity"> <resultMap id="listDeviceProEntityMap" type="org.dromara.sample.manage.model.entity.DeviceProEntity">
<result column="pro_id" property="id" jdbcType="VARCHAR"/> <result column="pro_id" property="id"/>
<result column="pro_name" property="proName" jdbcType="VARCHAR"/> <result column="pro_name" property="proName"/>
<result column="bind_code" property="bindCode" jdbcType="VARCHAR"/> <result column="bind_code" property="bindCode"/>
<result column="bind_type" property="bindType" jdbcType="VARCHAR"/> <result column="bind_type" property="bindType"/>
<result column="nick_name" property="nickName"/>
<result column="create_time" property="createTime"/>
<collection property="deviceProUserEntityList" ofType="org.dromara.sample.manage.model.entity.DeviceProUserEntity"> <collection property="deviceProUserEntityList" ofType="org.dromara.sample.manage.model.entity.DeviceProUserEntity">
<result column="pro_user_id" property="id"/> <result column="pro_user_id" property="id"/>
<result column="device_pro_id" property="deviceProId"/> <result column="device_pro_id" property="deviceProId"/>
<result column="user_id" property="userId"/> <result column="user_id" property="userId"/>
<result column="nick_name" property="nickName"/> <result column="user_name" property="userName"/>
</collection> </collection>
<collection property="deviceEntityList" ofType="org.dromara.sample.manage.model.entity.DeviceEntity"> <collection property="deviceEntityList" ofType="org.dromara.sample.manage.model.entity.DeviceEntity">
<result column="device_id" property="id"/> <result column="device_id" property="id"/>
@ -33,10 +35,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
dp.pro_name, dp.pro_name,
dp.bind_code, dp.bind_code,
dp.bind_type, dp.bind_type,
dpu.user_id pro_user_id, dp.nick_name,
dp.create_time,
dpu.id pro_user_id,
dpu.device_pro_id, dpu.device_pro_id,
dpu.user_id, dpu.user_id,
dpu.nick_name, dpu.user_name,
d.id device_id, d.id device_id,
d.device_sn, d.device_sn,
d.device_name, d.device_name,
@ -52,17 +56,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LEFT JOIN manage_device d ON dp.id = d.pro_id LEFT JOIN manage_device d ON dp.id = d.pro_id
LEFT JOIN manage_device_pro_user dpu ON dp.id = dpu.device_pro_id LEFT JOIN manage_device_pro_user dpu ON dp.id = dpu.device_pro_id
<where> <where>
<if test="condition.deviceSn != null and condition.deviceSn != ''"> <if test="condition.bind_code != null and condition.bind_code != ''">
and d.device_sn like concat(concat('%',#{condition.deviceSn}),'%') and dp.bind_code like concat(concat('%',#{condition.bind_code}),'%')
</if> </if>
<if test="condition.deviceName != null and condition.deviceName != ''"> <if test="condition.pro_name != null and condition.pro_name != ''">
and d.device_name like concat(concat('%',#{condition.deviceName}),'%') and dp.pro_name like concat(concat('%',#{condition.pro_name}),'%')
</if>
<if test="condition.nickname != null and condition.nickname != ''">
and dpu.nickname like concat(concat('%',#{condition.nickname}),'%')
</if>
<if test="condition.userId != null and condition.userId != ''">
and dpu.user_id = #{condition.userId}
</if> </if>
</where> </where>
</select> </select>

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

@ -9,6 +9,7 @@ import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.encrypt.annotation.ApiEncrypt;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.common.log.annotation.Log; import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType; import org.dromara.common.log.enums.BusinessType;
@ -42,8 +43,9 @@ public class SysMenuController extends BaseController {
* *
* @return 路由信息 * @return 路由信息
*/ */
// @ApiEncrypt(response=true)
@GetMapping("/{platformType}/getRouters") @GetMapping("/{platformType}/getRouters")
public R<List<RouterVo>> getRouters(@PathVariable String platformType) { public R<List<RouterVo>> getRouters(@PathVariable String platformType) {
List<SysMenu> menus = menuService.selectMenuTreeByUserId(LoginHelper.getUserId(),platformType); List<SysMenu> menus = menuService.selectMenuTreeByUserId(LoginHelper.getUserId(),platformType);
return R.ok(menuService.buildMenus(menus)); return R.ok(menuService.buildMenus(menus));
} }

10
dk-modules/system/src/main/java/org/dromara/system/controller/system/SysUserController.java

@ -64,6 +64,16 @@ public class SysUserController extends BaseController {
return userService.selectPageUserList(user, pageQuery); return userService.selectPageUserList(user, pageQuery);
} }
/**
* 查询全部用户不分页
* @param user
* @return
*/
@GetMapping("/all/list")
public R<List<SysUserVo>> allList(SysUserBo user) {
return R.ok(userService.allList(user));
}
/** /**
* 导出用户列表 * 导出用户列表
*/ */

1
dk-modules/system/src/main/java/org/dromara/system/domain/SysNotice.java

@ -48,4 +48,5 @@ public class SysNotice extends TenantEntity {
*/ */
private String remark; private String remark;
private Integer isRead;
} }

99
dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysUserProVo.java

@ -0,0 +1,99 @@
package org.dromara.system.domain.vo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.sensitive.annotation.Sensitive;
import org.dromara.common.sensitive.core.SensitiveStrategy;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.system.domain.SysUser;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 用户信息视图对象 sys_user
*
* @author Michelle.Chung
*/
@Data
public class SysUserProVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
private Long userId;
/**
* 租户ID
*/
private String tenantId;
/**
* 部门ID
*/
private Long deptId;
/**
* 用户账号
*/
private String userName;
/**
* 用户昵称
*/
private String nickName;
/**
* 用户类型sys_user系统用户
*/
private String userType;
/**
* 手机号码
*/
private String phonenumber;
/**
* 用户性别0男 1女 2未知
*/
private String sex;
/**
* 帐号状态0正常 1停用
*/
private String status;
/**
* 备注
*/
private String remark;
/**
* 创建时间
*/
private Date createTime;
/**
* 部门名
*/
private String deptName;
/**
* 平台名称
*/
private String productName;
}

38
dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteNoticeServiceImpl.java

@ -0,0 +1,38 @@
package org.dromara.system.dubbo;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.config.annotation.DubboService;
import org.dromara.common.core.service.DictService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.resource.api.RemoteMessageService;
import org.dromara.system.api.RemoteNoticeService;
import org.dromara.system.api.domain.bo.RemoteNoticeBo;
import org.dromara.system.domain.SysNotice;
import org.dromara.system.mapper.SysNoticeMapper;
import org.springframework.stereotype.Service;
/**
* @author sean
* @version 1.1
* @date 2022/6/1
*/
@RequiredArgsConstructor
@Service
@DubboService
public class RemoteNoticeServiceImpl implements RemoteNoticeService {
private final DictService dictService;
private final SysNoticeMapper sysNoticeMapper;
@DubboReference
private final RemoteMessageService remoteMessageService;
@Override
public int saveNotice(RemoteNoticeBo bo) {
SysNotice notice = MapstructUtils.convert(bo, SysNotice.class);
/*String type = dictService.getDictLabel("sys_notice_type", notice.getNoticeType());*/
remoteMessageService.publishAll(bo.getParam());
return sysNoticeMapper.insert(notice);
}
}

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

@ -9,6 +9,7 @@ import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysUserExportVo; import org.dromara.system.domain.vo.SysUserExportVo;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
@ -92,4 +93,6 @@ 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); List<SysUserVo> selectFlwByIds(@Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
List<SysUserVo> allList(@Param("param") SysUserBo user);
} }

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

@ -273,4 +273,6 @@ public interface ISysUserService {
List<SysUserVo> assignUserSelect(Long deptId); List<SysUserVo> assignUserSelect(Long deptId);
List<SysUserVo> selectFlwByIds(List<Long> userIds, Long deptId); List<SysUserVo> selectFlwByIds(List<Long> userIds, Long deptId);
List<SysUserVo> allList(SysUserBo user);
} }

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

@ -584,6 +584,11 @@ public class SysUserServiceImpl implements ISysUserService {
.in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds)); .in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds));
} }
@Override
public List<SysUserVo> allList(SysUserBo user) {
return baseMapper.allList(user);
}
/** /**
* 通过用户ID查询用户账户 * 通过用户ID查询用户账户
* *

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

@ -96,5 +96,24 @@
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<select id="allList" resultType="org.dromara.system.domain.vo.SysUserProVo">
select
u.user_id as userId, u.dept_id as deptId, u.nick_name as nickName, u.user_name as userName, u.email as email, u.phonenumber, u.sex,
u.status , u.create_by as createBy, u.create_time as createTime, u.remark,sd.dept_name deptName
from sys_user u left JOIN sys_dept sd on u.dept_id = sd.dept_id
<where>
u.del_flag = '0'
<if test="param.nickName != null and param.nickName != ''">
and u.nick_name like concat('%',#{param.nickName},'%')
</if>
<if test="param.userName != null and param.userName != ''">
and u.user_name like concat('%',#{param.userName},'%')
</if>
<if test="param.deptId != null and param.deptId != ''">
and u.dept_id = #{param.deptId}
</if>
</where>
</select>
</mapper> </mapper>

5
dk-modules/workflow/pom.xml

@ -118,6 +118,11 @@
<artifactId>api-system</artifactId> <artifactId>api-system</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-encrypt</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <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.bo.FlowInstanceBo;
import org.dromara.workflow.domain.vo.FlowInstanceVo; import org.dromara.workflow.domain.vo.FlowInstanceVo;
import java.util.List;
/** /**
* 实例信息Mapper接口 * 实例信息Mapper接口
* *
@ -24,4 +26,6 @@ public interface FlwInstanceMapper {
*/ */
Page<FlowInstanceVo> selectInstanceList(@Param("page") Page<FlowInstanceVo> page, @Param(Constants.WRAPPER) Wrapper<FlowInstanceBo> queryWrapper); 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 结果 * @return 结果
*/ */
boolean processInvalid(FlowInvalidBo bo); 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.FlowCancelBo;
import org.dromara.workflow.domain.bo.FlowInstanceBo; import org.dromara.workflow.domain.bo.FlowInstanceBo;
import org.dromara.workflow.domain.bo.FlowInvalidBo; 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.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowInstanceVo; import org.dromara.workflow.domain.vo.FlowInstanceVo;
import org.dromara.workflow.domain.vo.FlowVariableVo; import org.dromara.workflow.domain.vo.FlowVariableVo;
import org.dromara.workflow.handler.FlowProcessEventHandler; import org.dromara.workflow.handler.FlowProcessEventHandler;
import org.dromara.workflow.mapper.FlwCategoryMapper; import org.dromara.workflow.mapper.FlwCategoryMapper;
import org.dromara.workflow.mapper.FlwInstanceMapper; import org.dromara.workflow.mapper.FlwInstanceMapper;
import org.dromara.workflow.mapper.FlwTaskMapper;
import org.dromara.workflow.service.IFlwCommonService; import org.dromara.workflow.service.IFlwCommonService;
import org.dromara.workflow.service.IFlwInstanceService; import org.dromara.workflow.service.IFlwInstanceService;
import org.dromara.workflow.service.IFlwTaskAssigneeService;
import org.dromara.workflow.service.IFlwTaskService; import org.dromara.workflow.service.IFlwTaskService;
import org.dromara.workflow.utils.BatchProcessorUtil;
import org.dromara.workflow.utils.MinioUntil; import org.dromara.workflow.utils.MinioUntil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -78,12 +82,14 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
private final ChartService chartService; private final ChartService chartService;
private final TaskService taskService; private final TaskService taskService;
private final FlowHisTaskMapper flowHisTaskMapper; private final FlowHisTaskMapper flowHisTaskMapper;
private final FlwTaskMapper flwTaskMapper;
private final FlowInstanceMapper flowInstanceMapper; private final FlowInstanceMapper flowInstanceMapper;
private final FlowProcessEventHandler flowProcessEventHandler; private final FlowProcessEventHandler flowProcessEventHandler;
private final IFlwTaskService flwTaskService; private final IFlwTaskService flwTaskService;
private final FlwInstanceMapper flwInstanceMapper; private final FlwInstanceMapper flwInstanceMapper;
private final FlwCategoryMapper flwCategoryMapper; private final FlwCategoryMapper flwCategoryMapper;
private final IFlwCommonService flwCommonService; private final IFlwCommonService flwCommonService;
private final IFlwTaskAssigneeService flwTaskAssigneeService;
@DubboReference @DubboReference
private RemoteFileService remoteFileService; private RemoteFileService remoteFileService;
@ -460,4 +466,77 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
throw new ServiceException(e.getMessage()); 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;
}
}
} }

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

@ -160,7 +160,10 @@ public class WorkflowServiceImpl implements WorkflowService {
public Boolean startWorkFlowBatch(List<RemoteStartProcess> startProcess) { public Boolean startWorkFlowBatch(List<RemoteStartProcess> startProcess) {
try { try {
startProcess.forEach(startProcessBo -> { startProcess.forEach(startProcessBo -> {
flwTaskService.startWorkFlow(BeanUtil.toBean(startProcessBo, StartProcessBo.class)); RemoteStartProcessReturn startProcessReturn = flwTaskService.startWorkFlow(BeanUtil.toBean(startProcessBo, StartProcessBo.class));
//加签
flwTaskService.addSign(startProcessReturn.getProcessInstanceId());
}); });
} catch (Exception e) { } catch (Exception e) {
return false; return false;

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

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

Loading…
Cancel
Save