吴远 2 months ago
parent
commit
579001a1a8
  1. 6
      dk-api/api-system/src/main/java/org/dromara/system/api/model/LoginUser.java
  2. 2
      dk-auth/src/main/java/org/dromara/auth/DKAuthApplication.java
  3. 24
      dk-auth/src/main/java/org/dromara/auth/feign/FeignDeviceGroup.java
  4. 22
      dk-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java
  5. 1
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java
  6. 22
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java
  7. 1
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.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. 3
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java
  12. 5
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java
  13. 57
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java
  14. 129
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java
  15. 46
      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. 7
      dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/DeviceFlightRecordsMapper.java
  18. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java
  19. 45
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceFlightRecordsEntity.java
  20. 15
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceFlightRecordsService.java
  21. 58
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceFlightRecordsServiceImpl.java
  22. 144
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java
  23. 1
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java
  24. 1
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java
  25. 5
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java
  26. 2
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java
  27. 11
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java
  28. 14
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java
  29. 2
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineFileDTO.java
  30. 2
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineFileEntity.java
  31. 1
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java
  32. 4
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java
  33. 13
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java
  34. 9
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java
  35. 1
      dk-modules/sample/src/main/resources/mapper/AiCompareMapper.xml
  36. 8
      dk-modules/sample/src/main/resources/mapper/DeviceFlightRecordsMapper.xml

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;
/**
* 设备sn权限集合
*/
private List<String> deviceList;
/**
* 获取登录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.jdbc.DataSourceAutoConfiguration;
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
*/
@EnableDubbo
@EnableFeignClients
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class DKAuthApplication {
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.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.collection.ListUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.auth.domain.vo.LoginVo;
import org.dromara.auth.feign.FeignDeviceGroup;
import org.dromara.auth.form.PasswordLoginBody;
import org.dromara.auth.properties.CaptchaProperties;
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.domain.vo.RemoteClientVo;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* 密码认证策略
*
@ -45,6 +51,9 @@ public class PasswordAuthStrategy implements IAuthStrategy {
@DubboReference
private RemoteUserService remoteUserService;
@Autowired
FeignDeviceGroup feignDeviceGroup;
@Override
public LoginVo login(String body, RemoteClientVo client) {
PasswordLoginBody loginBody = JsonUtils.parseObject(body, PasswordLoginBody.class);
@ -73,6 +82,19 @@ public class PasswordAuthStrategy implements IAuthStrategy {
model.setTimeout(client.getTimeout());
model.setActiveTimeout(client.getActiveTimeout());
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
LoginHelper.login(loginUser, model);

1
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java

@ -48,6 +48,7 @@ public interface IHttpWaylineService {
HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylineList(
@Valid @ParameterObject GetWaylineListRequest request,
@PathVariable(name = "workspace_id") String workspaceId,
@PathVariable(name = "proId") Integer proId,
HttpServletRequest req, HttpServletResponse rsp);
/**

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

@ -1,5 +1,6 @@
package org.dromara.business.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
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.service.IBusinessAlertService;
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.TableDataInfo;
import org.dromara.common.web.core.BaseController;
@ -52,6 +55,25 @@ public class BusinessAlertController extends BaseController {
return R.ok(businessAlertService.getTodoBusinessAlert(alertId));
}
@Operation(summary ="根据经纬度获取历史预警",description = "根据经纬度获取历史预警")
@GetMapping("/alert/listHandleHistory")
public R<List<BusinessAlert>> listHandleHistory(
@RequestParam(value = "lng",required = false) String lng,
@RequestParam(value ="lat",required = false) String lat,
@RequestParam("createTime") String createTime) {
return R.ok(businessAlertService.listHandleHistory(lng,lat,createTime));
}
@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));
}
/**
* 查询全部预警/待办/已完成/忽略
*/

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

@ -177,6 +177,7 @@ public class BusinessAlertStatisticsController extends BaseController {
@Operation(summary="预警对比统计(预警状态)", description="预警对比统计(预警状态)")
@GetMapping(value = "/compare/status/count")
public R<List<Map<String, Object>>> countAlertStatusCompare(BusinessAlertBo businessAlertBo) {
return R.ok(statisticsService.countAlertStatusCompare(businessAlertBo));
}

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 java.util.List;
import java.util.Map;
@FeignClient(name = "gateway",path = "sample")
public interface FeignDeviceGroup {
@ -17,4 +18,8 @@ public interface FeignDeviceGroup {
@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();
}

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

@ -101,4 +101,7 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
Map<String, Object> listAppAlertCount(@Param("param") BusinessAlertBo businessAlertBo);
List<BusinessAlert> listHandleHistory(@Param("lng") String lng, @Param("lat") String lat,@Param("createTime") String createTime);
}

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

@ -84,4 +84,9 @@ public interface IBusinessAlertService {
List<BusinessAlert> listTodoAlert(BusinessAlertBo businessAlertBo);
BusinessAlert getTodoBusinessAlert(Long alertId);
Boolean deleteFalseAlert(Long alertId);
List<BusinessAlert> listHandleHistory(String lng, String lat, String createTime);
}

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

@ -21,6 +21,7 @@ import org.dromara.business.utils.BatchProcessorUtil;
import org.dromara.business.utils.MinioUntil;
import org.dromara.business.utils.constants.MinIOConstants;
import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.enums.FormatsType;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.MapstructUtils;
@ -119,6 +120,11 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
alert.setHandleType(BusinessStatusEnum.VERIFY.getStatus());
BeanUtils.copyProperties(alert, businessAlert);
//查询历史预警
List<BusinessAlert> businessAlertList = this.listHandleHistory(alert.getLng(), alert.getLat(), DateUtils.parseDateToStr(FormatsType.YYYY_MM_DD_HH_MM_SS, alert.getCreateTime()));
businessAlert.setHandleNum(businessAlertList.size());
return businessAlert;
}).toList();
@ -302,6 +308,24 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return TableDataInfo.build(page);
}
/**
* 查询当前用户待办预警
* @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);
}
/**
* 查询当前用户待办预警
@ -380,6 +404,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
//排除状态为验证状态预警
wrapper.ne("t.handle_type", BusinessStatusEnum.VERIFY.getStatus());
wrapper.eq("t.del_flag", 0);
if (ObjectUtil.isNotEmpty(bo.getHandleType())){
wrapper.eq("t.handle_type", bo.getHandleType());
@ -647,6 +672,38 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
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;
}
@Override
public List<BusinessAlert> listHandleHistory(String lng, String lat, String createTime) {
if (ObjectUtil.hasEmpty(lng, lat)) {
return ListUtil.empty();
}
List<BusinessAlert> businessAlerts = this.baseMapper.listHandleHistory(lng, lat, createTime);
try {
businessAlerts.forEach(businessAlert -> {
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());
}
});
} catch (Exception e) {
log.error(e.getMessage(),e);
}
return businessAlerts;
}
public static void main(String[] args) {
System.out.println(getLastSixDays());

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

@ -3,6 +3,7 @@ package org.dromara.business.service.impl;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.business.domain.BusinessAlert;
import org.dromara.business.domain.bo.BusinessAlertBo;
@ -12,6 +13,7 @@ import org.dromara.business.mapper.BusinessAlertMapper;
import org.dromara.business.service.IBusinessAlertService;
import org.dromara.business.service.IBusinessAlertStatisticsService;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.mybatis.enums.DataScopeType;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.RemoteDataScopeService;
@ -44,6 +46,7 @@ import static org.dromara.common.core.constant.Constants.FLY_COUNT;
*
*预警统计Service业务层处理
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatisticsService {
@ -186,57 +189,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中用户所拥有的设备
Map<String, Object> countMap = Optional.ofNullable(RedisUtils.getCacheMap(FLY_COUNT))
.map(map -> map.entrySet().stream()
.filter(entry -> deviceSnList.contains(entry.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)))
.orElse(new HashMap<>());
int flyCount;
if (ObjectUtil.isNotEmpty(countMap)){
flyCount = countMap.values().stream()
.filter(Objects::nonNull)
.mapToInt(value -> {
if (value instanceof Number) {
return ((Number) value).intValue();
}
return 0;
})
.sum();
} else {
flyCount = 0;
}
// Map<String, Object> countMap = Optional.ofNullable(RedisUtils.getCacheMap(FLY_COUNT))
// .map(map -> map.entrySet().stream()
// .filter(entry -> deviceSnList.contains(entry.getKey()))
// .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)))
// .orElse(new HashMap<>());
// int flyCount;
//
// if (ObjectUtil.isNotEmpty(countMap)){
// flyCount = countMap.values().stream()
// .filter(Objects::nonNull)
// .mapToInt(value -> {
// if (value instanceof Number) {
// return ((Number) value).intValue();
// }
// return 0;
// })
// .sum();
// } else {
// flyCount = 0;
// }
//过滤redis中用户所拥有的设备
Map<String, Object> accTimeMap = Optional.ofNullable(RedisUtils.getCacheMap(FLY_ACC_TIME))
.map(map -> map.entrySet().stream()
.filter(entry -> deviceSnList.contains(entry.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)))
.orElse(new HashMap<>());
double flyAccTime;
if (ObjectUtil.isNotEmpty(accTimeMap)) {
flyAccTime = accTimeMap.values().stream()
.filter(Objects::nonNull)
.mapToDouble(value -> {
if (value instanceof Number) {
return ((Number) value).doubleValue();
}
return 0.0;
})
.sum();
} else {
flyAccTime = 0.0;
}
// Map<String, Object> accTimeMap = Optional.ofNullable(RedisUtils.getCacheMap(FLY_ACC_TIME))
// .map(map -> map.entrySet().stream()
// .filter(entry -> deviceSnList.contains(entry.getKey()))
// .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)))
// .orElse(new HashMap<>());
//
//
// double flyAccTime;
//
// if (ObjectUtil.isNotEmpty(accTimeMap)) {
// flyAccTime = accTimeMap.values().stream()
// .filter(Objects::nonNull)
// .mapToDouble(value -> {
// if (value instanceof Number) {
// return ((Number) value).doubleValue();
// }
// return 0.0;
// })
// .sum();
// } else {
// flyAccTime = 0.0;
// }
//----------------------------------------------获取飞行总架次、总时长----------------------------------------------
Map<String, Integer> devices = feignDeviceGroup.getDevices();
Map<String, Object> panel = baseMapper.countPanelAlert(businessAlertBo);
@ -245,8 +249,8 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
ObjectUtil.isEmpty(panel.get("total"))?0:panel.get("total"),
ObjectUtil.isEmpty(panel.get("finishCount"))?0:panel.get("finishCount"),
ObjectUtil.isEmpty(panel.get("cancelCount"))?0:panel.get("cancelCount"),
flyCount,
flyAccTime);
ObjectUtil.isEmpty(devices.get("flyCount"))?0:devices.get("flyCount"),
ObjectUtil.isEmpty(devices.get("flyAccTime"))?0:devices.get("flyAccTime"));
}
@Override
@ -774,14 +778,12 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
}
private void createPermissions(BusinessAlertBo businessAlertBo) {
Long roleId = Optional.ofNullable(LoginHelper.getLoginUser())
.map(LoginUser::getRoles)
.filter(roles -> !roles.isEmpty())
.map(List::getFirst)
.map(RoleDTO::getRoleId)
.orElse(null);
String roleCustom = remoteDataScopeService.getRoleCustom(roleId);
try {
RoleDTO roleDTO = LoginHelper.getLoginUser().getRoles().getFirst();
//自定义权限
if (roleDTO.getDataScope().equalsIgnoreCase(DataScopeType.CUSTOM.getCode())){
String roleCustom = remoteDataScopeService.getRoleCustom(roleDTO.getRoleId());
if (roleCustom.equalsIgnoreCase("-1")){
businessAlertBo.setDeptIdList(ListUtil.empty());
}else {
@ -789,5 +791,24 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
.map(Long::parseLong)
.collect(Collectors.toList()));
}
} else if (roleDTO.getDataScope().equalsIgnoreCase(DataScopeType.DEPT_AND_CHILD.getCode())) {
//部门及其以下
String deptAndChild = remoteDataScopeService.getDeptAndChild(LoginHelper.getDeptId());
if (deptAndChild.equalsIgnoreCase("-1")){
businessAlertBo.setDeptIdList(ListUtil.empty());
}else {
businessAlertBo.setDeptIdList(Arrays.stream(deptAndChild.split(","))
.map(Long::parseLong)
.collect(Collectors.toList()));
}
} else if (roleDTO.getDataScope().equalsIgnoreCase(DataScopeType.DEPT.getCode())) {
//本部门
businessAlertBo.setDeptIdList(List.of(LoginHelper.getDeptId()));
}
} catch (Exception e) {
businessAlertBo.setDeptIdList(ListUtil.empty());
log.error(e.getMessage(),e);
}
}
}

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

@ -95,6 +95,42 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${ew.getCustomSqlSegment}
</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>
<select id="listMonthAlert" resultType="java.util.Map">
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL -11 MONTH), '%Y-%m') AS dateMonth,count(1) total from business_alert ba
where DATE_FORMAT(ba.create_time, '%Y-%m' ) = DATE_FORMAT(DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-01-01'), INTERVAL 0 MONTH), '%Y-%m')
@ -834,6 +870,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${ew.getCustomSqlSegment}
</select>
<select id="listHandleHistory" resultType="org.dromara.business.domain.BusinessAlert">
SELECT job_name,max_images,images,create_time,id,handle_type,del_flag,ST_Distance_Sphere(point(lng, lat), point(#{lng},#{lat})) AS distance,business_type
FROM business_alert
WHERE <![CDATA[ create_time >= DATE_SUB(#{createTime}, INTERVAL 60 DAY) ]]>
AND <![CDATA[ create_time < #{createTime} ]]>
and del_flag = 0
HAVING <![CDATA[ distance <= 30 ]]>
ORDER BY create_time desc
</select>
</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;
}
}

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> {
}

2
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java

@ -102,7 +102,7 @@ public class DeviceDTO {
private String tenantId;
@Schema(description = "项目ID")
private String proId;
private Integer proId;
@Schema(description = "项目ID")
private DeviceProEntity deviceProEntity;

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;
}

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(DeviceFlightRecordsEntity deviceFlightRecords);
Map<String,Integer> getDeviceFlightCount();
}

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

@ -0,0 +1,58 @@
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.scheduling.annotation.Async;
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(DeviceFlightRecordsEntity deviceFlightRecords) {
//查询之前的数据
DeviceFlightRecordsEntity deviceFlightRecordsEntities = this.baseMapper.selectOne(new LambdaQueryWrapper<DeviceFlightRecordsEntity>().eq(DeviceFlightRecordsEntity::getDeviceSn,deviceFlightRecords.getDeviceSn()));
if (ObjectUtil.isNotEmpty(deviceFlightRecordsEntities)) {
deviceFlightRecordsEntities.setFlyCount(deviceFlightRecordsEntities.getFlyCount() + deviceFlightRecords.getFlyCount());
deviceFlightRecordsEntities.setFlyAccTime(deviceFlightRecordsEntities.getFlyAccTime() + deviceFlightRecords.getFlyAccTime());
this.updateById(deviceFlightRecordsEntities);
}else {
this.save(deviceFlightRecords);
}
}
@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;
}
}

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

@ -88,7 +88,7 @@ public class DeviceProServiceImpl implements IDeviceProService {
@Autowired
private IDeviceProUserMapper deviceProUserMapper;
private final ObjectMapper objectMapper = new ObjectMapper();
// private final ObjectMapper objectMapper = new ObjectMapper();
@Override
public PaginationData<DeviceProEntity> listDeviceProEntityMap(Page page, DeviceProDTO deviceProDTO) {
@ -131,52 +131,52 @@ public class DeviceProServiceImpl implements IDeviceProService {
public Boolean updateDeviceProUser(List<DeviceProUserEntity> userEntity,Integer proId) {
try {
//获取项目组信息
DeviceProEntity deviceProEntity = deviceProMapper.selectOne(new LambdaQueryWrapper<DeviceProEntity>().eq(DeviceProEntity::getId, proId));
// 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<>();
// 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 = 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);
});
// 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);
// });
//--------------------------------------------缓存相关操作----------------------------------------------------------------
@ -188,18 +188,18 @@ public class DeviceProServiceImpl implements IDeviceProService {
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);
}
});
// 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;
@ -229,29 +229,31 @@ public class DeviceProServiceImpl implements IDeviceProService {
wrapper.set(DeviceEntity::getProId, proId);
wrapper.eq(DeviceEntity::getId, deviceId);
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);
}
});
}
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;
}
return true;
}
/**

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());
if(httpResultResponse.getCode() == 0){
deviceQrtzFileEntity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_2);
deviceQrtzFileEntity.setFlightDate(new Date());
deviceQrtzFileMapper.updateById(deviceQrtzFileEntity);
continue;
}

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

@ -710,6 +710,7 @@ public class DeviceServiceImpl implements IDeviceService {
.compatibleStatus(dto.getFirmwareStatus() == null ? null :
DeviceFirmwareStatusEnum.CONSISTENT_UPGRADE != dto.getFirmwareStatus())
.deviceDesc(dto.getDeviceDesc())
.proId(dto.getProId() == null ? null : dto.getProId())
.build();
}
}

5
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java

@ -2,6 +2,7 @@ package org.dromara.sample.manage.service.impl;
import cn.hutool.core.util.ObjectUtil;
import org.dromara.common.redis.utils.RedisOpsUtils;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.sdk.cloudapi.device.*;
import org.dromara.common.sdk.cloudapi.device.api.AbstractDeviceService;
import org.dromara.common.sdk.cloudapi.psdk.PsdkUiResource;
@ -30,12 +31,15 @@ import org.springframework.util.StringUtils;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import static org.dromara.common.core.constant.Constants.FLY_COUNT;
/**
* @author sean
* @version 1.7
@ -165,7 +169,6 @@ public class SDKDeviceService extends AbstractDeviceService {
&& request.getData().getDroneChargeState().getCapacityPercent() >= 80 && (remainUpload != null && remainUpload == 0)){
deviceQrtzService.getDeviceQrtzFileEntity(device);
}
deviceRedisService.setDeviceOnline(device);
fillDockOsd(from, request.getData());

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()))) {
if(CollectionUtils.isEmpty(deviceQrtzFileEntities)){
deviceQrtzFileEntities.stream().forEach(item->{
item.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_2);
item.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_3);
});
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) {
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));
}
/**
* 画框

14
dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java

@ -1,6 +1,7 @@
package org.dromara.sample.wayline.controller;
import io.seata.common.util.CollectionUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
@ -14,6 +15,8 @@ import org.dromara.common.sdk.cloudapi.wayline.*;
import org.dromara.common.sdk.cloudapi.wayline.api.IHttpWaylineService;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.manage.mapper.IDeviceProUserMapper;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.wayline.model.dto.WaylineFileDTO;
import org.dromara.sample.wayline.model.entity.AudioFileEntity;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
@ -46,6 +49,9 @@ public class WaylineFileController implements IHttpWaylineService {
@Autowired
private IWaylineFileService waylineFileService;
@Autowired
private IDeviceProService deviceProService;
/**
* 根据waylineID删除工作区中的wayline文件
* Delete the wayline file in the workspace according to the wayline id.
@ -67,13 +73,13 @@ public class WaylineFileController implements IHttpWaylineService {
*/
@PostMapping("${url.wayline.prefix}${url.wayline.version}/workspaces/{workspace_id}/waylines/file/{deviceSn}/upload")
@Operation(summary = "导入kmz航路文件。", description = "导入kmz航路文件。")
public HttpResultResponse importKmzFile(@PathVariable(name = "workspace_id") String workspaceId,HttpServletRequest request, MultipartFile file,@PathVariable(name = "deviceSn") String deviceSn) {
public HttpResultResponse importKmzFile(@PathVariable(name = "workspace_id") String workspaceId,HttpServletRequest request, MultipartFile file,@PathVariable(name = "deviceSn") String deviceSn,@PathVariable(name = "proId") Integer proId) {
if (Objects.isNull(file)) {
return HttpResultResponse.error("未收到文件。");
}
LoginUser loginUser = LoginHelper.getLoginUser();
String creator = loginUser.getUsername();
waylineFileService.importKmzFile(file, workspaceId, creator,deviceSn);
waylineFileService.importKmzFile(file, workspaceId, creator,deviceSn,proId);
return HttpResultResponse.success();
}
@ -86,8 +92,8 @@ public class WaylineFileController implements IHttpWaylineService {
* @return
*/
@Override
public HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylineList(@Valid GetWaylineListRequest request,String workspaceId, HttpServletRequest req, HttpServletResponse rsp) {
PaginationData<GetWaylineListResponse> data = waylineFileService.getWaylinesByParam(workspaceId, request);
public HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylineList(@Valid GetWaylineListRequest request,String workspaceId, Integer proId, HttpServletRequest req, HttpServletResponse rsp) {
PaginationData<GetWaylineListResponse> data = waylineFileService.getWaylinesByParam(workspaceId, request,proId);
return HttpResultResponse.success(data);
}

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

@ -47,4 +47,6 @@ public class WaylineFileDTO {
private Integer fileNo;
private Integer proId;
}

2
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineFileEntity.java

@ -69,4 +69,6 @@ public class WaylineFileEntity implements Serializable {
@TableField(exist = false)
private String deviceName;
@TableField("pro_id")
private Integer proId;
}

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 updateStatus(Long id);
AiCompareEntity getInfo(Long id);
List<AiCompareMediaFileDTO> queryById(Long id);

4
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java

@ -26,7 +26,7 @@ public interface IWaylineFileService {
* @param param
* @return
*/
PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param);
PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param,Integer proId);
/**
* Query the information of this wayline file according to the wayline file id.
@ -83,7 +83,7 @@ public interface IWaylineFileService {
* @param creator
* @return
*/
void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn);
void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn,Integer proId);
String getWaylineIdByFileId(Integer fileId);

13
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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -185,6 +186,17 @@ public class AiCompareServiceImpl implements IAiCompareService {
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
public AiCompareEntity getInfo(Long id) {
return aiCompareMapper.selectById(id);
@ -233,6 +245,7 @@ public class AiCompareServiceImpl implements IAiCompareService {
@Override
public Boolean alert(Map<String,Object>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();
return businessAlertService.saveBusinessAlert(handleList);
}

9
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java

@ -78,7 +78,7 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
private RemoteFileService remoteFileService;
@Override
public PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param) {
public PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param,Integer proId) {
// Paging Query
Page<WaylineFileEntity> page = mapper.selectPage(
new Page<WaylineFileEntity>(param.getPage(), param.getPageSize()),
@ -103,6 +103,9 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
.and(ObjectUtil.isNotEmpty(param.getDeviceSn()), wrapper -> {
wrapper.eq(WaylineFileEntity::getDeviceSn, param.getDeviceSn()).or();
})
.and(proId != null, wrapper -> {
wrapper.in(WaylineFileEntity::getProId, proId).or();
})
.like(Objects.nonNull(param.getKey()), WaylineFileEntity::getName, param.getKey())
// There is a risk of SQL injection
.last(Objects.nonNull(param.getOrderBy()), " order by " + param.getOrderBy().toString()));
@ -203,7 +206,7 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
}
@Override
public void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn) {
public void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn,Integer proId) {
Optional<WaylineFileDTO> waylineFileOpt = validKmzFile(file);
if (waylineFileOpt.isEmpty()) {
throw new RuntimeException("文件格式不正确。");
@ -230,6 +233,7 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
}else {
waylineFile.setFileNo(1);
}
waylineFile.setProId(proId);
this.saveWaylineFile(workspaceId, waylineFile);
} catch (IOException e) {
e.printStackTrace();
@ -466,6 +470,7 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
.favorited(file.getFavorited())
.sign(file.getSign())
.deviceSn(file.getDeviceSns().get(0))
.proId(file.getProId())
.build();
}

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

@ -10,6 +10,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="listMediaFile" resultType="org.dromara.sample.wayline.model.dto.AiCompareMediaFileDTO">
SELECT
ai.id as compareId,
mf.file_index,
mf.file_id,
mf.file_name,

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>
Loading…
Cancel
Save