Browse Source

Merge branch 'dev' of http://106.13.50.125:13000/yuanqiang/dk_cloud_drone

# Conflicts:
#	dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java
#	dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java
wuyuan
吴远 2 months ago
parent
commit
97895d4aef
  1. 2
      dk-api/api-system/src/main/java/org/dromara/system/api/RemotePostService.java
  2. 6
      dk-api/api-system/src/main/java/org/dromara/system/api/model/LoginUser.java
  3. 2
      dk-auth/src/main/java/org/dromara/auth/DKAuthApplication.java
  4. 24
      dk-auth/src/main/java/org/dromara/auth/feign/FeignDeviceGroup.java
  5. 22
      dk-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java
  6. 13
      dk-common/common-core/src/main/java/org/dromara/common/core/constant/Constants.java
  7. 19
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java
  8. 4
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java
  9. 4
      dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java
  10. 5
      dk-modules/business/src/main/java/org/dromara/business/feign/FeignDeviceGroup.java
  11. 4
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java
  12. 3
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java
  13. 61
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java
  14. 94
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java
  15. 37
      dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml
  16. 28
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceFlightRecordsController.java
  17. 4
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceProController.java
  18. 7
      dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/DeviceFlightRecordsMapper.java
  19. 45
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceFlightRecordsEntity.java
  20. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProEntity.java
  21. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProUserEntity.java
  22. 15
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceFlightRecordsService.java
  23. 4
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java
  24. 59
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceFlightRecordsServiceImpl.java
  25. 116
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java
  26. 1
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java
  27. 2
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java
  28. 11
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java
  29. 2
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareDTO.java
  30. 1
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java
  31. 20
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java
  32. 23
      dk-modules/sample/src/main/resources/mapper/AiCompareMapper.xml
  33. 8
      dk-modules/sample/src/main/resources/mapper/DeviceFlightRecordsMapper.xml
  34. 5
      dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java
  35. 2
      dk-modules/system/src/main/java/org/dromara/system/mapper/SysPostMapper.java
  36. 2
      dk-modules/system/src/main/java/org/dromara/system/service/ISysPostService.java
  37. 5
      dk-modules/system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java
  38. 22
      dk-modules/system/src/main/resources/mapper/system/SysPostMapper.xml
  39. 20
      dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java
  40. 8
      dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwCategoryMapper.java
  41. 3
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java
  42. 20
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java
  43. 4
      dk-modules/workflow/src/main/resources/mapper/workflow/FlwCategoryMapper.xml

2
dk-api/api-system/src/main/java/org/dromara/system/api/RemotePostService.java

@ -10,4 +10,6 @@ public interface RemotePostService {
String getPostCode(String labelCode); String getPostCode(String labelCode);
String getFlowCode(String labelCode); String getFlowCode(String labelCode);
List<String> listPostCode(String labelCode);
} }

6
dk-api/api-system/src/main/java/org/dromara/system/api/model/LoginUser.java

@ -135,6 +135,12 @@ public class LoginUser implements Serializable {
*/ */
private List<PostDTO> posts; private List<PostDTO> posts;
/**
* 设备sn权限集合
*/
private List<String> deviceList;
/** /**
* 获取登录id * 获取登录id
*/ */

2
dk-auth/src/main/java/org/dromara/auth/DKAuthApplication.java

@ -5,6 +5,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup; import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
import org.springframework.cloud.openfeign.EnableFeignClients;
/** /**
* 认证授权中心 * 认证授权中心
@ -12,6 +13,7 @@ import org.springframework.boot.context.metrics.buffering.BufferingApplicationSt
* @author ruoyi * @author ruoyi
*/ */
@EnableDubbo @EnableDubbo
@EnableFeignClients
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class DKAuthApplication { public class DKAuthApplication {
public static void main(String[] args) { public static void main(String[] args) {

24
dk-auth/src/main/java/org/dromara/auth/feign/FeignDeviceGroup.java

@ -0,0 +1,24 @@
package org.dromara.auth.feign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
@FeignClient(name = "gateway",path = "sample")
public interface FeignDeviceGroup {
@GetMapping("/manage/api/v1/device/group/feign/user")
public List<Integer> listDeviceGroup(@RequestParam("userId") Long userId);
@GetMapping("/manage/api/v1/device/group/feign/device")
public List<String> listDevice(@RequestParam("userId") Long userId);
@GetMapping("/device/flight/count")
public Map<String,Integer> getDevices();
}

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

@ -3,10 +3,12 @@ package org.dromara.auth.service.impl;
import cn.dev33.satoken.secure.BCrypt; import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.stp.SaLoginModel; import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.collection.ListUtil;
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.dubbo.config.annotation.DubboReference;
import org.dromara.auth.domain.vo.LoginVo; import org.dromara.auth.domain.vo.LoginVo;
import org.dromara.auth.feign.FeignDeviceGroup;
import org.dromara.auth.form.PasswordLoginBody; import org.dromara.auth.form.PasswordLoginBody;
import org.dromara.auth.properties.CaptchaProperties; import org.dromara.auth.properties.CaptchaProperties;
import org.dromara.auth.service.IAuthStrategy; import org.dromara.auth.service.IAuthStrategy;
@ -26,8 +28,12 @@ import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.system.api.RemoteUserService; import org.dromara.system.api.RemoteUserService;
import org.dromara.system.api.domain.vo.RemoteClientVo; import org.dromara.system.api.domain.vo.RemoteClientVo;
import org.dromara.system.api.model.LoginUser; import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/** /**
* 密码认证策略 * 密码认证策略
* *
@ -45,6 +51,9 @@ public class PasswordAuthStrategy implements IAuthStrategy {
@DubboReference @DubboReference
private RemoteUserService remoteUserService; private RemoteUserService remoteUserService;
@Autowired
FeignDeviceGroup feignDeviceGroup;
@Override @Override
public LoginVo login(String body, RemoteClientVo client) { public LoginVo login(String body, RemoteClientVo client) {
PasswordLoginBody loginBody = JsonUtils.parseObject(body, PasswordLoginBody.class); PasswordLoginBody loginBody = JsonUtils.parseObject(body, PasswordLoginBody.class);
@ -73,6 +82,19 @@ public class PasswordAuthStrategy implements IAuthStrategy {
model.setTimeout(client.getTimeout()); model.setTimeout(client.getTimeout());
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);

13
dk-common/common-core/src/main/java/org/dromara/common/core/constant/Constants.java

@ -86,5 +86,18 @@ public interface Constants {
* 飞行总时长 * 飞行总时长
*/ */
String FLY_ACC_TIME = "fly_accTime"; String FLY_ACC_TIME = "fly_accTime";
/**
* 项目组存储key例如:pro_group_项目组id_用户id
*/
String PRO_GROUP = "pro_group_%s";
/**
* 设备存储key例如:pro_device_项目组id_用户id
*/
String PRO_DEVICE = "pro_device_%s";
} }

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

@ -1,5 +1,6 @@
package org.dromara.business.controller; package org.dromara.business.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
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,6 +10,8 @@ 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.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.log.annotation.Log;
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;
@ -46,6 +49,21 @@ public class BusinessAlertController extends BaseController {
return businessAlertService.getInfo(bo,pageQuery,alertCode); return businessAlertService.getInfo(bo,pageQuery,alertCode);
} }
@Operation(summary ="app获取单个预警信息",description = "app获取单个预警信息")
@GetMapping("/alert/app/todo/{alertId}")
public R<BusinessAlert> getTodoBusinessAlert(@PathVariable("alertId") Long alertId) {
return R.ok(businessAlertService.getTodoBusinessAlert(alertId));
}
@SaCheckPermission("business:alert:delete")
@Log(title = "删除预警", businessType = BusinessType.DELETE)
@Operation(summary ="删除预警",description = "删除预警")
@GetMapping("/alert/{alertId}/delete")
public R<Boolean> deleteFalseAlert(@PathVariable("alertId") Long alertId) {
return R.ok(businessAlertService.deleteFalseAlert(alertId));
}
/** /**
* 查询全部预警/待办/已完成/忽略 * 查询全部预警/待办/已完成/忽略
*/ */
@ -67,6 +85,7 @@ public class BusinessAlertController extends BaseController {
@Operation(summary ="ai实时流预警保存",description = "ai实时流预警保存") @Operation(summary ="ai实时流预警保存",description = "ai实时流预警保存")
@PostMapping("/saveAlertList") @PostMapping("/saveAlertList")
public R saveAlert(@RequestBody List<BusinessAlertVo> alertVoList) { public R saveAlert(@RequestBody List<BusinessAlertVo> alertVoList) {
businessAlertService.addBusinessAlertList(alertVoList); businessAlertService.addBusinessAlertList(alertVoList);
return R.ok(); return R.ok();
} }

4
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java

@ -59,12 +59,12 @@ public class BusinessAlert {
/** /**
* 纬度 * 纬度
*/ */
private Float lat; private String lat;
/** /**
* 精度 * 精度
*/ */
private Float lng; private String lng;
/** /**
* 标签名- * 标签名-

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

@ -63,12 +63,12 @@ public class BusinessAlertVo implements Serializable {
/** /**
* 纬度 * 纬度
*/ */
private Float lat; private String lat;
/** /**
* 精度 * 精度
*/ */
private Float lng; private String lng;
/** /**
* 标签名- * 标签名-

5
dk-modules/business/src/main/java/org/dromara/business/feign/FeignDeviceGroup.java

@ -6,6 +6,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import java.util.List; import java.util.List;
import java.util.Map;
@FeignClient(name = "gateway",path = "sample") @FeignClient(name = "gateway",path = "sample")
public interface FeignDeviceGroup { public interface FeignDeviceGroup {
@ -17,4 +18,8 @@ public interface FeignDeviceGroup {
@GetMapping("/manage/api/v1/device/group/feign/device") @GetMapping("/manage/api/v1/device/group/feign/device")
public List<String> listDevice(@RequestParam("userId") Long userId); public List<String> listDevice(@RequestParam("userId") Long userId);
@GetMapping("/device/flight/count")
public Map<String,Integer> getDevices();
} }

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

@ -26,7 +26,7 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
) )
Page<BusinessAlert> pageBusinessAlert(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew); Page<BusinessAlert> pageBusinessAlert(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew);
@DataPermission( @DataPermission(
@DataColumn(key = "deptName", value = "t.dept_id") @DataColumn(key = "deptName", value = "t.dept_id")
) )
Page<BusinessAlert> pageAlertFinish(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew); Page<BusinessAlert> pageAlertFinish(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew);
@ -42,7 +42,7 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
) )
Page<BusinessAlert> pageAlertTodo(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew); Page<BusinessAlert> pageAlertTodo(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew);
@DataPermission( @DataPermission(
@DataColumn(key = "deptName", value = "t.dept_id") @DataColumn(key = "deptName", value = "t.dept_id")
) )
Page<BusinessAlert> pageBusinessAlertCancel(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew); Page<BusinessAlert> pageBusinessAlertCancel(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew);

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

@ -83,4 +83,7 @@ public interface IBusinessAlertService {
List<BusinessAlert> listTodoAlert(BusinessAlertBo businessAlertBo); List<BusinessAlert> listTodoAlert(BusinessAlertBo businessAlertBo);
BusinessAlert getTodoBusinessAlert(Long alertId);
Boolean deleteFalseAlert(Long alertId);
} }

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

@ -398,6 +398,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
//排除状态为验证状态预警 //排除状态为验证状态预警
wrapper.ne("t.handle_type", BusinessStatusEnum.VERIFY.getStatus()); wrapper.ne("t.handle_type", BusinessStatusEnum.VERIFY.getStatus());
wrapper.eq("t.del_flag", 0);
if (ObjectUtil.isNotEmpty(bo.getHandleType())){ if (ObjectUtil.isNotEmpty(bo.getHandleType())){
wrapper.eq("t.handle_type", bo.getHandleType()); wrapper.eq("t.handle_type", bo.getHandleType());
@ -614,6 +615,66 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return days; return days;
} }
/**
* 查询当前用户待办预警
* @return
*/
@Override
public List<BusinessAlert> listTodoAlert(BusinessAlertBo businessAlertBo) {
QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(businessAlertBo);
if (ObjectUtil.isEmpty(wrapper)){
return ListUtil.empty();
}
wrapper.eq("t.node_type", 1);
wrapper.in("t.approver", remoteWorkflowService.getPermissions());
wrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
return this.baseMapper.listTodoAlert(wrapper);
}
/**
* 获取单个预警信息
* @param alertId
* @return
*/
@Override
public BusinessAlert getTodoBusinessAlert(Long alertId) {
QueryWrapper<BusinessAlert> wrapper = new QueryWrapper<>();
wrapper.eq("t.node_type", 1);
wrapper.in("t.approver", remoteWorkflowService.getPermissions());
wrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
List<BusinessAlert> businessAlerts = this.baseMapper.listTodoAlert(wrapper);
BusinessAlert businessAlert = businessAlerts.stream().filter(p -> p.getId().equals(alertId)).findFirst().get();
try {
if (businessAlert.getBusinessType() == 2){
businessAlert.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, businessAlert.getImages(), 3600).toString());
}else {
businessAlert.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_ALERT, businessAlert.getImages(), 3600).toString());
businessAlert.setMaxImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_ALERT, businessAlert.getMaxImages(), 3600).toString());
businessAlert.setMaxMateSourceImgUrl(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_ALERT, businessAlert.getMaxMateSourceImgUrl(), 3600).toString());
businessAlert.setMateSourceImgUrl(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_ALERT, businessAlert.getMateSourceImgUrl(), 3600).toString());
}
} catch (Exception e) {
log.error(e.getMessage(),e);
}
return businessAlert;
}
@Override
public Boolean deleteFalseAlert(Long alertId) {
LambdaUpdateWrapper<BusinessAlert> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(BusinessAlert::getId, alertId);
wrapper.set(BusinessAlert::getDelFlag,1);
return this.baseMapper.update(wrapper) > 0;
}
public static void main(String[] args) { public static void main(String[] args) {
System.out.println(getLastSixDays()); System.out.println(getLastSixDays());
} }

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

@ -67,7 +67,6 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
private final IBusinessAlertService businessAlertService; private final IBusinessAlertService businessAlertService;
/** /**
* 按照月份分类预警数量 * 按照月份分类预警数量
* @param businessAlertBo * @param businessAlertBo
@ -187,57 +186,58 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
//----------------------------------------------获取飞行总架次、总时长---------------------------------------------- //----------------------------------------------获取飞行总架次、总时长----------------------------------------------
//获取飞行总架次、总时长 //获取飞行总架次、总时长
//获取机场信息根据当前登录人 //获取机场信息根据当前登录人
List<String> deviceSnList = ObjectUtil.isNotEmpty(feignDeviceGroup.listDevice(LoginHelper.getUserId()))?feignDeviceGroup.listDevice(LoginHelper.getUserId()):ListUtil.empty(); // List<String> deviceSnList = ObjectUtil.isNotEmpty(feignDeviceGroup.listDevice(LoginHelper.getUserId()))?feignDeviceGroup.listDevice(LoginHelper.getUserId()):ListUtil.empty();
//过滤redis中用户所拥有的设备 //过滤redis中用户所拥有的设备
Map<String, Object> countMap = Optional.ofNullable(RedisUtils.getCacheMap(FLY_COUNT)) // Map<String, Object> countMap = Optional.ofNullable(RedisUtils.getCacheMap(FLY_COUNT))
.map(map -> map.entrySet().stream() // .map(map -> map.entrySet().stream()
.filter(entry -> deviceSnList.contains(entry.getKey())) // .filter(entry -> deviceSnList.contains(entry.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))) // .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)))
.orElse(new HashMap<>()); // .orElse(new HashMap<>());
int flyCount; // int flyCount;
//
if (ObjectUtil.isNotEmpty(countMap)){ // if (ObjectUtil.isNotEmpty(countMap)){
flyCount = countMap.values().stream() // flyCount = countMap.values().stream()
.filter(Objects::nonNull) // .filter(Objects::nonNull)
.mapToInt(value -> { // .mapToInt(value -> {
if (value instanceof Number) { // if (value instanceof Number) {
return ((Number) value).intValue(); // return ((Number) value).intValue();
} // }
return 0; // return 0;
}) // })
.sum(); // .sum();
} else { // } else {
flyCount = 0; // flyCount = 0;
} // }
//过滤redis中用户所拥有的设备 //过滤redis中用户所拥有的设备
Map<String, Object> accTimeMap = Optional.ofNullable(RedisUtils.getCacheMap(FLY_ACC_TIME)) // Map<String, Object> accTimeMap = Optional.ofNullable(RedisUtils.getCacheMap(FLY_ACC_TIME))
.map(map -> map.entrySet().stream() // .map(map -> map.entrySet().stream()
.filter(entry -> deviceSnList.contains(entry.getKey())) // .filter(entry -> deviceSnList.contains(entry.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))) // .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)))
.orElse(new HashMap<>()); // .orElse(new HashMap<>());
//
//
double flyAccTime; // double flyAccTime;
//
if (ObjectUtil.isNotEmpty(accTimeMap)) { // if (ObjectUtil.isNotEmpty(accTimeMap)) {
flyAccTime = accTimeMap.values().stream() // flyAccTime = accTimeMap.values().stream()
.filter(Objects::nonNull) // .filter(Objects::nonNull)
.mapToDouble(value -> { // .mapToDouble(value -> {
if (value instanceof Number) { // if (value instanceof Number) {
return ((Number) value).doubleValue(); // return ((Number) value).doubleValue();
} // }
return 0.0; // return 0.0;
}) // })
.sum(); // .sum();
} else { // } else {
flyAccTime = 0.0; // flyAccTime = 0.0;
} // }
//----------------------------------------------获取飞行总架次、总时长---------------------------------------------- //----------------------------------------------获取飞行总架次、总时长----------------------------------------------
Map<String, Integer> devices = feignDeviceGroup.getDevices();
Map<String, Object> panel = baseMapper.countPanelAlert(businessAlertBo); Map<String, Object> panel = baseMapper.countPanelAlert(businessAlertBo);
@ -246,8 +246,8 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
ObjectUtil.isEmpty(panel.get("total"))?0:panel.get("total"), ObjectUtil.isEmpty(panel.get("total"))?0:panel.get("total"),
ObjectUtil.isEmpty(panel.get("finishCount"))?0:panel.get("finishCount"), ObjectUtil.isEmpty(panel.get("finishCount"))?0:panel.get("finishCount"),
ObjectUtil.isEmpty(panel.get("cancelCount"))?0:panel.get("cancelCount"), ObjectUtil.isEmpty(panel.get("cancelCount"))?0:panel.get("cancelCount"),
flyCount, ObjectUtil.isEmpty(devices.get("flyCount"))?0:devices.get("flyCount"),
flyAccTime); ObjectUtil.isEmpty(devices.get("flyAccTime"))?0:devices.get("flyAccTime"));
} }
@Override @Override

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

@ -834,5 +834,42 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="searchSql"></include> <include refid="searchSql"></include>
</select> </select>
<select id="listTodoAlert" resultType="org.dromara.business.domain.BusinessAlert">
select t.* from (
select
ba.*,
b.flow_status,
b.business_id,
uu.processed_by approver,
a.id flowTaskId,
b.id instanceId,
a.node_type,
fnData.buttonPermission,
fnData.permissions
from dk_business.business_alert ba
inner join dk_workflow.flow_instance b on ba.id = b.business_id
left join dk_workflow.flow_task a on a.instance_id = b.id
left join dk_workflow.flow_user uu on uu.associated = a.id
left join dk_workflow.flow_definition c on a.definition_id = c.id
LEFT JOIN LATERAL (
SELECT
JSON_UNQUOTE(JSON_EXTRACT(fn.ext, '$[0].value')) AS buttonPermission,
fn.permissions
FROM dk_workflow.flow_node fn
WHERE
fn.node_code = b.node_code
and fn.definition_id = c.id
and fn.del_flag = '0'
LIMIT 1
) AS fnData ON TRUE
where a.node_type = 1
and a.del_flag = '0'
and uu.del_flag = '0'
and uu.type in ('1','2','3')
) t
${ew.getCustomSqlSegment}
</select>
</mapper> </mapper>

28
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceFlightRecordsController.java

@ -0,0 +1,28 @@
package org.dromara.sample.manage.controller;
import lombok.extern.slf4j.Slf4j;
import org.dromara.sample.manage.service.IDeviceFlightRecordsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
@Slf4j
@RequestMapping("/device/flight")
public class DeviceFlightRecordsController {
@Autowired
private IDeviceFlightRecordsService deviceFlightRecordsService;
@GetMapping("/count")
public Map<String,Integer> getDevices() {
log.info("----------------------------开始调用feign接口查询项目组----------------------------");
Map<String, Integer> deviceFlightCount = deviceFlightRecordsService.getDeviceFlightCount();
log.info("----------------------------调用feign接口查询项目组结束----------------------------");
return deviceFlightCount;
}
}

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

@ -65,7 +65,7 @@ public class DeviceProController {
//3、删除项目组 //3、删除项目组
@Operation(summary = "删除项目组。", description = "删除项目组。") @Operation(summary = "删除项目组。", description = "删除项目组。")
@DeleteMapping("/delete") @DeleteMapping("/delete")
public HttpResultResponse<Boolean> deleteDevicePro(@RequestBody List<Long> ids) { public HttpResultResponse<Boolean> deleteDevicePro(@RequestBody List<Integer> ids) {
return HttpResultResponse.success(deviceProService.deleteIds(ids)); return HttpResultResponse.success(deviceProService.deleteIds(ids));
} }
@ -76,7 +76,7 @@ public class DeviceProController {
*/ */
@Operation(summary = "新增/更新项目人员。", description = "新增/更新项目人员。") @Operation(summary = "新增/更新项目人员。", description = "新增/更新项目人员。")
@PostMapping("/{proId}/update") @PostMapping("/{proId}/update")
public HttpResultResponse<Boolean> updateDeviceProUser(@RequestBody List<DeviceProUserEntity> userEntity,@PathVariable Long proId) { public HttpResultResponse<Boolean> updateDeviceProUser(@RequestBody List<DeviceProUserEntity> userEntity,@PathVariable Integer proId) {
return HttpResultResponse.success(deviceProService.updateDeviceProUser(userEntity,proId)); return HttpResultResponse.success(deviceProService.updateDeviceProUser(userEntity,proId));
} }

7
dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/DeviceFlightRecordsMapper.java

@ -0,0 +1,7 @@
package org.dromara.sample.manage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.dromara.sample.manage.model.entity.DeviceFlightRecordsEntity;
public interface DeviceFlightRecordsMapper extends BaseMapper<DeviceFlightRecordsEntity> {
}

45
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceFlightRecordsEntity.java

@ -0,0 +1,45 @@
package org.dromara.sample.manage.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "device_flight_records")
public class DeviceFlightRecordsEntity {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 机场sn
*/
private String deviceSn;
/**
* 飞行总架次
*/
private Integer flyCount;
/**
* 飞行总时长
*/
private Integer flyAccTime;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
}

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

@ -27,7 +27,7 @@ import java.util.List;
@TableName(value = "manage_device_pro") @TableName(value = "manage_device_pro")
public class DeviceProEntity extends BaseEntity implements Serializable { public class DeviceProEntity extends BaseEntity implements Serializable {
@TableId(type = IdType.ASSIGN_ID) @TableId(type = IdType.AUTO)
private Integer id; private Integer id;
@TableField(value = "pro_name") @TableField(value = "pro_name")

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

@ -26,7 +26,7 @@ import java.io.Serializable;
@TableName(value = "manage_device_pro_user") @TableName(value = "manage_device_pro_user")
public class DeviceProUserEntity extends BaseEntity implements Serializable { public class DeviceProUserEntity extends BaseEntity implements Serializable {
@TableId(type = IdType.ASSIGN_ID) @TableId(type = IdType.AUTO)
private Integer id; private Integer id;
@TableField(value = "device_pro_id") @TableField(value = "device_pro_id")

15
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceFlightRecordsService.java

@ -0,0 +1,15 @@
package org.dromara.sample.manage.service;
import org.dromara.sample.manage.model.entity.DeviceFlightRecordsEntity;
import java.util.List;
import java.util.Map;
public interface IDeviceFlightRecordsService {
void saveDeviceFlight(List<DeviceFlightRecordsEntity> deviceFlightRecords);
Map<String,Integer> getDeviceFlightCount();
}

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

@ -32,11 +32,11 @@ public interface IDeviceProService {
Boolean saveAndUpdate(DeviceProEntity deviceProEntity); Boolean saveAndUpdate(DeviceProEntity deviceProEntity);
Boolean deleteIds(List<Long> ids); Boolean deleteIds(List<Integer> ids);
Boolean updateDevicePro(DeviceProEntity deviceProEntity); Boolean updateDevicePro(DeviceProEntity deviceProEntity);
Boolean updateDeviceProUser(List<DeviceProUserEntity> userEntity,Long proId); Boolean updateDeviceProUser(List<DeviceProUserEntity> userEntity,Integer proId);
Boolean updateDevice(Dict dict); Boolean updateDevice(Dict dict);

59
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceFlightRecordsServiceImpl.java

@ -0,0 +1,59 @@
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.extension.service.impl.ServiceImpl;
import org.dromara.sample.manage.mapper.DeviceFlightRecordsMapper;
import org.dromara.sample.manage.model.entity.DeviceFlightRecordsEntity;
import org.dromara.sample.manage.service.IDeviceFlightRecordsService;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class DeviceFlightRecordsServiceImpl extends ServiceImpl<DeviceFlightRecordsMapper,DeviceFlightRecordsEntity> implements IDeviceFlightRecordsService {
@Override
public void saveDeviceFlight(List<DeviceFlightRecordsEntity> deviceFlightRecords) {
deviceFlightRecords.forEach(deviceFlightRecord -> {
//查询之前的数据
DeviceFlightRecordsEntity deviceFlightRecordsEntities = this.baseMapper.selectOne(new LambdaQueryWrapper<DeviceFlightRecordsEntity>().eq(DeviceFlightRecordsEntity::getDeviceSn,deviceFlightRecord.getDeviceSn()));
if (ObjectUtil.isNotEmpty(deviceFlightRecordsEntities)) {
deviceFlightRecordsEntities.setFlyCount(deviceFlightRecordsEntities.getFlyCount() + deviceFlightRecord.getFlyCount());
deviceFlightRecordsEntities.setFlyAccTime(deviceFlightRecordsEntities.getFlyAccTime() + deviceFlightRecord.getFlyAccTime());
this.updateById(deviceFlightRecordsEntities);
}else {
this.save(deviceFlightRecord);
}
});
}
@Override
public Map<String,Integer> getDeviceFlightCount() {
Map<String,Integer> resultMap = new HashMap<>();
List<DeviceFlightRecordsEntity> deviceFlightRecordsEntities = this.baseMapper.selectList(new LambdaQueryWrapper<>());
int flyCount = deviceFlightRecordsEntities.stream()
.map(DeviceFlightRecordsEntity::getFlyCount)
.reduce(0, Integer::sum);
int flyAccTime = deviceFlightRecordsEntities.stream()
.map(DeviceFlightRecordsEntity::getFlyAccTime)
.reduce(0, Integer::sum);
resultMap.put("flyCount",flyCount);
resultMap.put("flyAccTime",flyAccTime);
return resultMap;
}
}

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

@ -11,7 +11,10 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.executor.BatchResult; import org.apache.ibatis.executor.BatchResult;
import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.redis.utils.RedisOpsUtils;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.device.*; import org.dromara.common.sdk.cloudapi.device.*;
import org.dromara.common.sdk.cloudapi.firmware.*; import org.dromara.common.sdk.cloudapi.firmware.*;
@ -34,6 +37,7 @@ import org.dromara.common.sdk.mqtt.services.ServicesSubscribe;
import org.dromara.common.sdk.mqtt.services.TopicServicesResponse; import org.dromara.common.sdk.mqtt.services.TopicServicesResponse;
import org.dromara.common.sdk.mqtt.state.StateSubscribe; import org.dromara.common.sdk.mqtt.state.StateSubscribe;
import org.dromara.common.sdk.mqtt.status.StatusSubscribe; import org.dromara.common.sdk.mqtt.status.StatusSubscribe;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.common.websocket.dto.BizCodeEnum; import org.dromara.common.websocket.dto.BizCodeEnum;
import org.dromara.sample.common.error.CommonErrorEnum; import org.dromara.sample.common.error.CommonErrorEnum;
import org.dromara.sample.component.mqtt.model.EventsReceiver; import org.dromara.sample.component.mqtt.model.EventsReceiver;
@ -62,10 +66,7 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Collection; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -87,6 +88,8 @@ 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) {
Page<DeviceProEntity> pagination = deviceProMapper.listDeviceProEntityMap(page, deviceProDTO); Page<DeviceProEntity> pagination = deviceProMapper.listDeviceProEntityMap(page, deviceProDTO);
@ -107,7 +110,7 @@ public class DeviceProServiceImpl implements IDeviceProService {
@Override @Override
public Boolean deleteIds(List<Long> ids) { public Boolean deleteIds(List<Integer> ids) {
List<DeviceEntity> deviceEntityList = deviceMapper.selectList(new LambdaQueryWrapper<DeviceEntity>().in(DeviceEntity::getProId, ids)); List<DeviceEntity> deviceEntityList = deviceMapper.selectList(new LambdaQueryWrapper<DeviceEntity>().in(DeviceEntity::getProId, ids));
@ -125,14 +128,78 @@ public class DeviceProServiceImpl implements IDeviceProService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean updateDeviceProUser(List<DeviceProUserEntity> userEntity,Long proId) { public Boolean updateDeviceProUser(List<DeviceProUserEntity> userEntity,Integer proId) {
try { try {
//获取项目组信息
// DeviceProEntity deviceProEntity = deviceProMapper.selectOne(new LambdaQueryWrapper<DeviceProEntity>().eq(DeviceProEntity::getId, proId));
//查询之前项目所属的人员信息
// List<DeviceProUserEntity> proUserEntityList = deviceProUserMapper.selectList(new LambdaQueryWrapper<DeviceProUserEntity>().eq(DeviceProUserEntity::getDeviceProId, proId));
//
// List<DeviceProUserEntity> difference = new ArrayList<>();
// 判断两个集合的差值(基于 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)); deviceProUserMapper.delete(new LambdaQueryWrapper<DeviceProUserEntity>().eq(DeviceProUserEntity::getDeviceProId, proId));
if (ObjectUtil.isNotEmpty(userEntity)) { if (ObjectUtil.isNotEmpty(userEntity)) {
//添加新的项目组成员 //添加新的项目组成员
deviceProUserMapper.insert(userEntity); deviceProUserMapper.insert(userEntity);
//更新缓存记录
// 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;
@ -150,18 +217,43 @@ public class DeviceProServiceImpl implements IDeviceProService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean updateDevice(Dict dict) { public Boolean updateDevice(Dict dict) {
Long deviceId = dict.getLong("deviceId"); Integer deviceId = dict.getInt("deviceId");
Long proId = dict.getLong("proId"); Integer proId = dict.getInt("proId");
if (ObjectUtil.hasEmpty(deviceId, proId)) { if (ObjectUtil.hasEmpty(deviceId, proId)) {
throw new ServiceException("【deviceId】或【proId】参数为空!"); throw new ServiceException("【deviceId】或【proId】参数为空!");
} }
LambdaUpdateWrapper<DeviceEntity> wrapper = new LambdaUpdateWrapper<>(); try {
wrapper.set(DeviceEntity::getProId, proId); LambdaUpdateWrapper<DeviceEntity> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(DeviceEntity::getId, deviceId); wrapper.set(DeviceEntity::getProId, proId);
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) {
return false;
}
} }
/** /**

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

@ -327,6 +327,7 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService {
HttpResultResponse httpResultResponse = flightTaskService.publishFlightTask(device.getWorkspaceId(), createJobParam, deviceQrtzFileEntity.getNickName()); HttpResultResponse httpResultResponse = flightTaskService.publishFlightTask(device.getWorkspaceId(), createJobParam, deviceQrtzFileEntity.getNickName());
if(httpResultResponse.getCode() == 0){ if(httpResultResponse.getCode() == 0){
deviceQrtzFileEntity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_2); deviceQrtzFileEntity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_2);
deviceQrtzFileEntity.setFlightDate(new Date());
deviceQrtzFileMapper.updateById(deviceQrtzFileEntity); deviceQrtzFileMapper.updateById(deviceQrtzFileEntity);
continue; continue;
} }

2
dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java

@ -122,7 +122,7 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
&& request.getTid().equals(mediaFileCount.getTid()))) { && request.getTid().equals(mediaFileCount.getTid()))) {
if(CollectionUtils.isEmpty(deviceQrtzFileEntities)){ if(CollectionUtils.isEmpty(deviceQrtzFileEntities)){
deviceQrtzFileEntities.stream().forEach(item->{ deviceQrtzFileEntities.stream().forEach(item->{
item.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_2); item.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_3);
}); });
deviceQrtzFileMapper.updateById(deviceQrtzFileEntities,100); deviceQrtzFileMapper.updateById(deviceQrtzFileEntities,100);
} }

11
dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java

@ -136,7 +136,16 @@ public class AiCompareController extends BaseController {
public R<Void> edit(@Validated(EditGroup.class) @RequestBody Map<String,Object> bo) { public R<Void> edit(@Validated(EditGroup.class) @RequestBody Map<String,Object> bo) {
return toAjax(aiCompareService.update(bo)); return toAjax(aiCompareService.update(bo));
} }
/**
* 状态更改
*/
@SaCheckPermission("sample:compare:add")
@Log(title = "状态更改", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@GetMapping("/updateStatus")
public R<Void> updateStatus(Long id) {
return toAjax(aiCompareService.updateStatus(id));
}
/** /**
* 画框 * 画框

2
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareDTO.java

@ -95,7 +95,7 @@ public class AiCompareDTO implements Serializable {
* 创建者 * 创建者
*/ */
private Long createId; private Long createBy;
/** /**
*用户昵称 *用户昵称
* */ * */

1
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java

@ -23,6 +23,7 @@ public interface IAiCompareService {
Boolean update(Map<String,Object> compareDTO); Boolean update(Map<String,Object> compareDTO);
Boolean updateStatus(Long id);
AiCompareEntity getInfo(Long id); AiCompareEntity getInfo(Long id);
List<AiCompareMediaFileDTO> queryById(Long id); List<AiCompareMediaFileDTO> queryById(Long id);

20
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java

@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
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.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -83,7 +84,7 @@ public class AiCompareServiceImpl implements IAiCompareService {
QueryWrapper<AiCompareEntity> wrapper = Wrappers.query(); QueryWrapper<AiCompareEntity> wrapper = Wrappers.query();
wrapper wrapper
.eq(StringUtils.isNotEmpty(bo.getStatus()), "status",bo.getStatus()) .eq(StringUtils.isNotEmpty(bo.getStatus()), "status",bo.getStatus())
.eq(ObjectUtil.isNotEmpty(bo.getCreateId()), "create_by",bo.getCreateId()) .eq(ObjectUtil.isNotEmpty(bo.getCreateBy()), "create_id",bo.getCreateBy())
.like(StringUtils.isNotBlank(bo.getDeptName()), "lower(dept_name)", StringUtils.lowerCase(bo.getDeptName())) .like(StringUtils.isNotBlank(bo.getDeptName()), "lower(dept_name)", StringUtils.lowerCase(bo.getDeptName()))
.like(StringUtils.isNotBlank(bo.getJobName()), "lower(job_name)", StringUtils.lowerCase(bo.getJobName())) .like(StringUtils.isNotBlank(bo.getJobName()), "lower(job_name)", StringUtils.lowerCase(bo.getJobName()))
.between(params.get("beginTime") != null && params.get("endTime") != null, .between(params.get("beginTime") != null && params.get("endTime") != null,
@ -156,7 +157,10 @@ public class AiCompareServiceImpl implements IAiCompareService {
if(isIllegal){ if(isIllegal){
QueryWrapper<AiComparePlateEntity> queryWrapper = new QueryWrapper<AiComparePlateEntity>().eq("file_id", e.getFileId()); QueryWrapper<AiComparePlateEntity> queryWrapper = new QueryWrapper<AiComparePlateEntity>().eq("file_id", e.getFileId());
AiComparePlateEntity plateEntity = aiComparePlateMapper.selectOne(queryWrapper); AiComparePlateEntity plateEntity = aiComparePlateMapper.selectOne(queryWrapper);
e.setPatternUrl(fileService.getObjectUrlOne(MinIOConstants.BUCKET_ALERT,plateEntity.getPatternName(),seconds).toString()); if(plateEntity != null){
e.setPatternUrl(fileService.getObjectUrlOne(MinIOConstants.BUCKET_ALERT,plateEntity.getPatternName(),seconds).toString());
}
} }
}); });
} }
@ -182,6 +186,17 @@ public class AiCompareServiceImpl implements IAiCompareService {
return i>0; return i>0;
} }
@Override
public Boolean updateStatus(Long id) {
AiCompareEntity aiCompareEntity = aiCompareMapper.selectById(id);
Boolean falg=false;
if(aiCompareEntity!=null&& ObjectUtil.equals(aiCompareEntity.getStatus(),AiCompareStatusConstants.COMPARE_STATUS_2)){
aiCompareEntity.setStatus(AiCompareStatusConstants.COMPARE_STATUS_4);
falg= aiCompareMapper.updateById(aiCompareEntity)>0;
}
return falg;
}
@Override @Override
public AiCompareEntity getInfo(Long id) { public AiCompareEntity getInfo(Long id) {
return aiCompareMapper.selectById(id); return aiCompareMapper.selectById(id);
@ -230,6 +245,7 @@ public class AiCompareServiceImpl implements IAiCompareService {
@Override @Override
public Boolean alert(Map<String,Object>map) { public Boolean alert(Map<String,Object>map) {
AiCompareAlertDTO compareAlertDTO = Convert.convert(AiCompareAlertDTO.class,map); AiCompareAlertDTO compareAlertDTO = Convert.convert(AiCompareAlertDTO.class,map);
aiComparePlateMapper.update(new LambdaUpdateWrapper<AiComparePlateEntity>().eq(AiComparePlateEntity::getFileId,compareAlertDTO.getFileId()).set(AiComparePlateEntity::getPatternName,compareAlertDTO.getDiscernImgUrl()));
List<RemoteBusinessAlertVo> handleList = compareAlertDTO.getHandleList(); List<RemoteBusinessAlertVo> handleList = compareAlertDTO.getHandleList();
return businessAlertService.saveBusinessAlert(handleList); return businessAlertService.saveBusinessAlert(handleList);
} }

23
dk-modules/sample/src/main/resources/mapper/AiCompareMapper.xml

@ -16,22 +16,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
mf.file_name, mf.file_name,
mf.object_key, mf.object_key,
mf.job_id, mf.job_id,
mfi.file_id as mateFileId, mfi.file_id AS mateFileId,
mfi.file_name as mateFileName, mfi.file_name AS mateFileName,
mfi.object_key AS mateObjectKey, mfi.object_key AS mateObjectKey,
mfi.file_index AS mateFileIndex, mfi.file_index AS mateFileIndex,
mfi.create_time AS mateFileDate mfi.create_time AS mateFileDate
FROM FROM
media_file AS mf media_file mf
JOIN JOIN media_file mfi ON mf.file_index = mfi.file_index
media_file AS mfi
ON
mf.file_index = mfi.file_index and mf.file_type='jpeg' and mfi.file_type='jpeg'
JOIN ai_compare ai ON ai.template_id = mfi.job_id JOIN ai_compare ai ON ai.template_id = mfi.job_id
WHERE WHERE
mf.job_id = #{jobId} and ai.id=#{compareId} mf.file_status = mfi.file_status
AND mf.file_id != mfi.file_id
AND mf.file_index = mfi.file_index
AND mf.file_type = 'jpeg'
AND mfi.file_type = 'jpeg'
AND mf.job_id = #{jobId}
AND ai.id = #{compareId}
ORDER BY ORDER BY
mf.file_index; mf.file_index,
mf.file_status;
</select> </select>
</mapper> </mapper>

8
dk-modules/sample/src/main/resources/mapper/DeviceFlightRecordsMapper.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.sample.manage.mapper.DeviceFlightRecordsMapper">
</mapper>

5
dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java

@ -54,4 +54,9 @@ public class RemotePostServiceImpl implements RemotePostService {
public String getFlowCode(String labelCode) { public String getFlowCode(String labelCode) {
return aiLabelService.getFlowCode(labelCode); return aiLabelService.getFlowCode(labelCode);
} }
@Override
public List<String> listPostCode(String labelCode) {
return sysPostService.listPostCode(labelCode);
}
} }

2
dk-modules/system/src/main/java/org/dromara/system/mapper/SysPostMapper.java

@ -36,4 +36,6 @@ public interface SysPostMapper extends BaseMapperPlus<SysPost, SysPostVo> {
SysPostVo selectLableByList(@Param("postCode") String postCode, @Param("deptId") Long deptId); SysPostVo selectLableByList(@Param("postCode") String postCode, @Param("deptId") Long deptId);
String getPostCode(@Param("labelCode") String labelCode); String getPostCode(@Param("labelCode") String labelCode);
List<String> listPostCode(@Param("labelCode") String labelCode);
} }

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

@ -134,4 +134,6 @@ public interface ISysPostService {
SysPostVo selectLableByList(String post_code, Long dept_id); SysPostVo selectLableByList(String post_code, Long dept_id);
String getPostCode(String labelCode); String getPostCode(String labelCode);
List<String> listPostCode(String labelCode);
} }

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

@ -279,4 +279,9 @@ public class SysPostServiceImpl implements ISysPostService {
public String getPostCode(String labelCode) { public String getPostCode(String labelCode) {
return baseMapper.getPostCode(labelCode); return baseMapper.getPostCode(labelCode);
} }
@Override
public List<String> listPostCode(String labelCode) {
return baseMapper.listPostCode(labelCode);
}
} }

22
dk-modules/system/src/main/resources/mapper/system/SysPostMapper.xml

@ -54,4 +54,26 @@
al.label_en =#{labelCode})) al.label_en =#{labelCode}))
</select> </select>
<select id="listPostCode" resultType="java.lang.String">
SELECT
post_code
FROM
sys_post sp
WHERE
sp.post_id in (
SELECT
alp.post_id
FROM
ai_label_post alp
WHERE
alp.label_id in (
SELECT
al.label_id
FROM
ai_label al
WHERE
al.label_en =#{labelCode}))
</select>
</mapper> </mapper>

20
dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDefinitionController.java

@ -4,6 +4,7 @@ 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.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log; import org.dromara.common.log.annotation.Log;
@ -11,6 +12,7 @@ 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.RemotePostService;
import org.dromara.warm.flow.core.entity.Definition; import org.dromara.warm.flow.core.entity.Definition;
import org.dromara.warm.flow.core.service.DefService; import org.dromara.warm.flow.core.service.DefService;
import org.dromara.warm.flow.orm.entity.FlowDefinition; import org.dromara.warm.flow.orm.entity.FlowDefinition;
@ -24,6 +26,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 流程定义管理 控制层 * 流程定义管理 控制层
@ -40,6 +43,9 @@ public class FlwDefinitionController extends BaseController {
private final DefService defService; private final DefService defService;
private final IFlwDefinitionService flwDefinitionService; private final IFlwDefinitionService flwDefinitionService;
@DubboReference
private RemotePostService remotePostService;
/** /**
* 查询流程定义列表 * 查询流程定义列表
* *
@ -193,4 +199,18 @@ public class FlwDefinitionController extends BaseController {
return R.ok(active ? defService.active(id) : defService.unActive(id)); return R.ok(active ? defService.active(id) : defService.unActive(id));
} }
/**
* 检查当前标签有几个流程
* @return
*/
@GetMapping("/check/flow")
public R<List<Map<String,String>>> checkWorkFlow(@RequestParam("labelCode") String labelCode) {
//获取这个标签下的所有岗位编码
List<String> postCodeList = remotePostService.listPostCode(labelCode);
List<Map<String,String>> result = flwDefinitionService.listFlowCode(postCodeList);
return R.ok(result);
}
} }

8
dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwCategoryMapper.java

@ -8,6 +8,7 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.helper.DataBaseHelper; import org.dromara.common.mybatis.helper.DataBaseHelper;
import org.dromara.workflow.domain.FlowCategory; import org.dromara.workflow.domain.FlowCategory;
import org.dromara.workflow.domain.vo.FlowCategoryVo; import org.dromara.workflow.domain.vo.FlowCategoryVo;
import org.dromara.workflow.domain.vo.FlowDefinitionVo;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -59,4 +60,11 @@ public interface FlwCategoryMapper extends BaseMapperPlus<FlowCategory, FlowCate
} }
String getFlowCode(@Param("postCode") String postCode); String getFlowCode(@Param("postCode") String postCode);
/**
* 根据当前岗位编码查询流程
* @param postCode
* @return
*/
FlowDefinitionVo getDefinition(String postCode);
} }

3
dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java

@ -9,6 +9,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 流程定义 服务层 * 流程定义 服务层
@ -79,4 +80,6 @@ public interface IFlwDefinitionService {
String getFlowCode(String postCode); String getFlowCode(String postCode);
List<Map<String, String>> listFlowCode(List<String> postCodeList);
} }

20
dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java

@ -41,9 +41,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.List;
import static org.dromara.common.core.constant.TenantConstants.DEFAULT_TENANT_ID; import static org.dromara.common.core.constant.TenantConstants.DEFAULT_TENANT_ID;
@ -274,4 +272,20 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
public String getFlowCode(String postCode) { public String getFlowCode(String postCode) {
return flwCategoryMapper.getFlowCode(postCode); return flwCategoryMapper.getFlowCode(postCode);
} }
@Override
public List<Map<String, String>> listFlowCode(List<String> postCodeList) {
List<Map<String, String>> result = new ArrayList<>();
postCodeList.forEach(postCode -> {
Map<String,String> map = new HashMap<>();
FlowDefinitionVo definitionVo = flwCategoryMapper.getDefinition(postCode);
map.put("name",definitionVo.getFlowName());
map.put("flowCode",definitionVo.getFlowCode());
result.add(map);
});
return result;
}
} }

4
dk-modules/workflow/src/main/resources/mapper/workflow/FlwCategoryMapper.xml

@ -12,4 +12,8 @@
select flow_code from flow_definition fd where fd.remark like concat('%',#{postCode},'%') and fd.is_publish = '1' select flow_code from flow_definition fd where fd.remark like concat('%',#{postCode},'%') and fd.is_publish = '1'
</select> </select>
<select id="getDefinition" resultType="org.dromara.workflow.domain.vo.FlowDefinitionVo">
select fd.* from flow_definition fd where fd.remark like concat('%',#{postCode},'%') and fd.is_publish = '1'
</select>
</mapper> </mapper>

Loading…
Cancel
Save