Browse Source

Merge pull request 'dev' (#4) from dev into test

Reviewed-on: #4
test
袁强 2 months ago
parent
commit
03ef78ea14
  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. 22
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java
  6. 4
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java
  7. 4
      dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java
  8. 5
      dk-modules/business/src/main/java/org/dromara/business/feign/FeignDeviceGroup.java
  9. 16
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java
  10. 9
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java
  11. 81
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java
  12. 171
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java
  13. 49
      dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml
  14. 28
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceFlightRecordsController.java
  15. 7
      dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/DeviceFlightRecordsMapper.java
  16. 45
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceFlightRecordsEntity.java
  17. 15
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceFlightRecordsService.java
  18. 58
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceFlightRecordsServiceImpl.java
  19. 144
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java
  20. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java
  21. 2
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java
  22. 11
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java
  23. 1
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java
  24. 12
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java
  25. 1
      dk-modules/sample/src/main/resources/mapper/AiCompareMapper.xml
  26. 8
      dk-modules/sample/src/main/resources/mapper/DeviceFlightRecordsMapper.xml
  27. 16
      dk-modules/system/src/main/java/org/dromara/system/controller/system/SysRoleController.java
  28. 5
      dk-modules/system/src/main/java/org/dromara/system/mapper/SysRoleMapper.java
  29. 4
      dk-modules/system/src/main/java/org/dromara/system/service/ISysRoleService.java
  30. 2
      dk-modules/system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java
  31. 10
      dk-modules/system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java
  32. 21
      dk-modules/system/src/main/resources/mapper/system/SysRoleMapper.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; 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);

22
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;
@ -52,6 +55,25 @@ public class BusinessAlertController extends BaseController {
return R.ok(businessAlertService.getTodoBusinessAlert(alertId)); 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));
}
/** /**
* 查询全部预警/待办/已完成/忽略 * 查询全部预警/待办/已完成/忽略
*/ */

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

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

@ -29,7 +29,7 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
@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> pageBusinessAlertHandle(@Param("page") Page<BusinessAlert> page,@Param("ew") QueryWrapper<BusinessAlert> ew);
/** /**
* 处理中 * 处理中
@ -47,6 +47,13 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
) )
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);
@DataPermission(
@DataColumn(key = "deptName", value = "t.dept_id")
)
Page<BusinessAlert> pageBusinessAlertFinish(@Param("page") Page<BusinessAlert> page, @Param("ew") QueryWrapper<BusinessAlert> wrapper);
@DataPermission( @DataPermission(
@DataColumn(key = "deptName", value = "t.dept_id") @DataColumn(key = "deptName", value = "t.dept_id")
) )
@ -101,4 +108,11 @@ public interface BusinessAlertMapper extends BaseMapperPlus<BusinessAlert, Busin
Map<String, Object> listAppAlertCount(@Param("param") BusinessAlertBo businessAlertBo); Map<String, Object> listAppAlertCount(@Param("param") BusinessAlertBo businessAlertBo);
List<BusinessAlert> listHandleHistory(@Param("lng") String lng, @Param("lat") String lat,@Param("createTime") String createTime);
List<Map<String, Object>> listOneDepartAlert(@Param("param") BusinessAlertBo businessAlertBo);
List<Map<String, Object>> listOneDepartAlertStatus(@Param("param") BusinessAlertBo businessAlertBo);
} }

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

@ -22,11 +22,13 @@ public interface IBusinessAlertService {
TableDataInfo<BusinessAlert> pageBusinessAlertTodo(BusinessAlertBo bo, PageQuery pageQuery); TableDataInfo<BusinessAlert> pageBusinessAlertTodo(BusinessAlertBo bo, PageQuery pageQuery);
TableDataInfo<BusinessAlert> pageBusinessAlertFinish(BusinessAlertBo bo, PageQuery pageQuery); TableDataInfo<BusinessAlert> pageBusinessAlertHandle(BusinessAlertBo bo, PageQuery pageQuery);
TableDataInfo<BusinessAlert> pageBusinessAlertAll(BusinessAlertBo bo, PageQuery pageQuery); TableDataInfo<BusinessAlert> pageBusinessAlertAll(BusinessAlertBo bo, PageQuery pageQuery);
TableDataInfo<BusinessAlert> pageBusinessAlertCancel(BusinessAlertBo bo, PageQuery pageQuery); TableDataInfo<BusinessAlert> pageBusinessAlertCancel(BusinessAlertBo bo, PageQuery pageQuery);
TableDataInfo<BusinessAlert> pageBusinessAlertFinish(BusinessAlertBo bo, PageQuery pageQuery);
/** /**
* 新增预警任务 * 新增预警任务
* *
@ -84,4 +86,9 @@ public interface IBusinessAlertService {
List<BusinessAlert> listTodoAlert(BusinessAlertBo businessAlertBo); List<BusinessAlert> listTodoAlert(BusinessAlertBo businessAlertBo);
BusinessAlert getTodoBusinessAlert(Long alertId); BusinessAlert getTodoBusinessAlert(Long alertId);
Boolean deleteFalseAlert(Long alertId);
List<BusinessAlert> listHandleHistory(String lng, String lat, String createTime);
} }

81
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.MinioUntil;
import org.dromara.business.utils.constants.MinIOConstants; import org.dromara.business.utils.constants.MinIOConstants;
import org.dromara.common.core.enums.BusinessStatusEnum; 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.exception.ServiceException;
import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
@ -119,6 +120,11 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
alert.setHandleType(BusinessStatusEnum.VERIFY.getStatus()); alert.setHandleType(BusinessStatusEnum.VERIFY.getStatus());
BeanUtils.copyProperties(alert, businessAlert); 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; return businessAlert;
}).toList(); }).toList();
@ -278,11 +284,10 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return new TableDataInfo<>(); return new TableDataInfo<>();
} }
wrapper.notIn("t.flowStatus", BusinessStatusEnum.CANCEL.getStatus()); wrapper.eq("t.handle_type",BusinessStatusEnum.FINISH.getStatus());
wrapper.apply(" EXISTS(select * from dk_workflow.flow_his_task ht where ht.approver ='" + LoginHelper.getUserId() + "' and ht.instance_id = t.instanceId)");
Page<BusinessAlert> page = this.baseMapper.pageAlertFinish(pageQuery.build(), wrapper); Page<BusinessAlert> page = this.baseMapper.pageBusinessAlertFinish(pageQuery.build(), wrapper);
try { try {
page.getRecords().forEach(businessAlertVo->{ page.getRecords().forEach(businessAlertVo->{
@ -354,6 +359,39 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
@Override
public TableDataInfo<BusinessAlert> pageBusinessAlertHandle(BusinessAlertBo bo, PageQuery pageQuery) {
QueryWrapper<BusinessAlert> wrapper = buildQueryWrapper(bo);
if (ObjectUtil.isEmpty(wrapper)){
return new TableDataInfo<>();
}
wrapper.notIn("t.flowStatus", BusinessStatusEnum.CANCEL.getStatus());
wrapper.apply(" EXISTS(select * from dk_workflow.flow_his_task ht where ht.approver ='" + LoginHelper.getUserId() + "' and ht.instance_id = t.instanceId)");
Page<BusinessAlert> page = this.baseMapper.pageBusinessAlertHandle(pageQuery.build(), wrapper);
try {
page.getRecords().forEach(businessAlertVo->{
businessAlertVo.setHandleType(null);
if (businessAlertVo.getBusinessType() == 2){
businessAlertVo.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, businessAlertVo.getImages(), 3600).toString());
}else {
businessAlertVo.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_ALERT, businessAlertVo.getImages(), 3600).toString());
businessAlertVo.setMaxImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_ALERT, businessAlertVo.getMaxImages(), 3600).toString());
businessAlertVo.setMaxMateSourceImgUrl(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_ALERT, businessAlertVo.getMaxMateSourceImgUrl(), 3600).toString());
businessAlertVo.setMateSourceImgUrl(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_ALERT, businessAlertVo.getMateSourceImgUrl(), 3600).toString());
}
});
} catch (Exception e) {
log.error(e.getMessage(),e);
}
return TableDataInfo.build(page);
}
/** /**
* 构建wrapper * 构建wrapper
@ -380,11 +418,16 @@ 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());
} }
if (ObjectUtil.isNotEmpty(bo.getDeptId())){
wrapper.eq("t.dept_id", bo.getDeptId());
}
if (ObjectUtil.isNotEmpty(bo.getJobName())){ if (ObjectUtil.isNotEmpty(bo.getJobName())){
wrapper.like("t.job_name", bo.getJobName()); wrapper.like("t.job_name", bo.getJobName());
} }
@ -647,6 +690,38 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return businessAlert; 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) { public static void main(String[] args) {
System.out.println(getLastSixDays()); System.out.println(getLastSixDays());

171
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.collection.ListUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.business.domain.BusinessAlert; import org.dromara.business.domain.BusinessAlert;
import org.dromara.business.domain.bo.BusinessAlertBo; 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.IBusinessAlertService;
import org.dromara.business.service.IBusinessAlertStatisticsService; import org.dromara.business.service.IBusinessAlertStatisticsService;
import org.dromara.common.core.exception.ServiceException; 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.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.RemoteDataScopeService; import org.dromara.system.api.RemoteDataScopeService;
@ -44,6 +46,7 @@ import static org.dromara.common.core.constant.Constants.FLY_COUNT;
* *
*预警统计Service业务层处理 *预警统计Service业务层处理
*/ */
@Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatisticsService { public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatisticsService {
@ -97,8 +100,21 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
businessAlertBo.setDeptId(String.valueOf(LoginHelper.getDeptId())); businessAlertBo.setDeptId(String.valueOf(LoginHelper.getDeptId()));
businessAlertBo.setAiLabelEnList(getAiLabel(businessAlertBo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList())); businessAlertBo.setAiLabelEnList(getAiLabel(businessAlertBo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList()));
List<Map<String, Object>> mapList = baseMapper.listDepartAlert(businessAlertBo); //判断是否存在下级
Long deptId = LoginHelper.getDeptId();
List<RemoteDeptVo> remoteDeptVoList = Optional.ofNullable(remoteDeptService.selectListByParentId(String.valueOf(deptId)))
.orElse(Collections.emptyList())
.stream()
.filter(p -> !p.getDeptId().equals(deptId))
.collect(Collectors.toList());
//排除自己如果没有下级则默认使用下边的逻辑查询
if (ObjectUtil.isEmpty(remoteDeptVoList)) {
List<Map<String, Object>> mapList = baseMapper.listOneDepartAlert(businessAlertBo);
return mapList.stream().map(data -> new StatObj(data.get("deptName") + "", Long.parseLong(data.get("total") + ""),"deptId",data.get("deptId"))).collect(Collectors.toList());
}
//如果有则使用这个查询
List<Map<String, Object>> mapList = baseMapper.listDepartAlert(businessAlertBo);
return mapList.stream().map(data -> new StatObj(data.get("deptName") + "", Long.parseLong(data.get("total") + ""),"deptId",data.get("deptId"))).collect(Collectors.toList()); return mapList.stream().map(data -> new StatObj(data.get("deptName") + "", Long.parseLong(data.get("total") + ""),"deptId",data.get("deptId"))).collect(Collectors.toList());
} }
@ -131,6 +147,33 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
businessAlertBo.setDeptId(String.valueOf(LoginHelper.getDeptId())); businessAlertBo.setDeptId(String.valueOf(LoginHelper.getDeptId()));
businessAlertBo.setAiLabelEnList(getAiLabel(businessAlertBo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList())); businessAlertBo.setAiLabelEnList(getAiLabel(businessAlertBo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList()));
//判断是否存在下级
Long deptId = LoginHelper.getDeptId();
List<RemoteDeptVo> remoteDeptVoList = Optional.ofNullable(remoteDeptService.selectListByParentId(String.valueOf(deptId)))
.orElse(Collections.emptyList())
.stream()
.filter(p -> !p.getDeptId().equals(deptId))
.collect(Collectors.toList());
//排除自己如果没有下级则默认使用下边的逻辑查询
if (ObjectUtil.isEmpty(remoteDeptVoList)) {
List<Map<String, Object>> mapList = baseMapper.listOneDepartAlertStatus(businessAlertBo);
return mapList.stream()
.map(map -> new StatObj(
Objects.toString(map.get("deptName")),
List.of(
new StatObj("total", map.get("total")),
new StatObj("todoCount", map.get("todoCount")),
new StatObj("finishCount", map.get("finishCount")),
new StatObj("cancelCount", map.get("cancelCount"))
),"deptId",map.get("deptId")
))
.collect(Collectors.toList());
}
//如果有下级则使用下方方法
List<Map<String, Object>> mapList = baseMapper.listDepartAlertStatus(businessAlertBo); List<Map<String, Object>> mapList = baseMapper.listDepartAlertStatus(businessAlertBo);
return mapList.stream() return mapList.stream()
@ -186,57 +229,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);
@ -245,8 +289,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
@ -774,14 +818,12 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
} }
private void createPermissions(BusinessAlertBo businessAlertBo) { private void createPermissions(BusinessAlertBo businessAlertBo) {
Long roleId = Optional.ofNullable(LoginHelper.getLoginUser()) try {
.map(LoginUser::getRoles) RoleDTO roleDTO = LoginHelper.getLoginUser().getRoles().getFirst();
.filter(roles -> !roles.isEmpty())
.map(List::getFirst) //自定义权限
.map(RoleDTO::getRoleId) if (roleDTO.getDataScope().equalsIgnoreCase(DataScopeType.CUSTOM.getCode())){
.orElse(null); String roleCustom = remoteDataScopeService.getRoleCustom(roleDTO.getRoleId());
String roleCustom = remoteDataScopeService.getRoleCustom(roleId);
if (roleCustom.equalsIgnoreCase("-1")){ if (roleCustom.equalsIgnoreCase("-1")){
businessAlertBo.setDeptIdList(ListUtil.empty()); businessAlertBo.setDeptIdList(ListUtil.empty());
}else { }else {
@ -789,5 +831,24 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist
.map(Long::parseLong) .map(Long::parseLong)
.collect(Collectors.toList())); .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);
}
} }
} }

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

@ -6,6 +6,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="searchSql"> <sql id="searchSql">
and ba.handle_type != 'verify' and ba.handle_type != 'verify'
and ba.del_flag = '0'
<if test="param.aiLabelEnList != null and param.aiLabelEnList.size > 0"> <if test="param.aiLabelEnList != null and param.aiLabelEnList.size > 0">
and ba.label_en in and ba.label_en in
<foreach collection="param.aiLabelEnList" item="item" open="(" close=")" separator=","> <foreach collection="param.aiLabelEnList" item="item" open="(" close=")" separator=",">
@ -30,6 +31,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<select id="pageBusinessAlertFinish" resultType="org.dromara.business.domain.BusinessAlert">
select t.* from (select
ba.*
from dk_business.business_alert ba) t
${ew.getCustomSqlSegment}
</select>
<select id="pageBusinessAlertCancel" resultType="org.dromara.business.domain.BusinessAlert"> <select id="pageBusinessAlertCancel" resultType="org.dromara.business.domain.BusinessAlert">
select t.* from ( select t.* from (
select select
@ -43,7 +51,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<select id="pageAlertFinish" resultType="org.dromara.business.domain.BusinessAlert"> <select id="pageBusinessAlertHandle" resultType="org.dromara.business.domain.BusinessAlert">
select t.* from ( select t.* from (
select select
ba.*, ba.*,
@ -834,6 +842,45 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </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>
<select id="listOneDepartAlert" resultType="java.util.Map">
SELECT
dc.dept_id AS deptId,
dc.dept_name AS deptName,
COALESCE(COUNT(ba.id), 0) AS total
FROM
(select dept_id,dept_name from dk_cloud.sys_dept sd where sd.dept_id = #{param.deptId}) dc
LEFT JOIN business_alert ba ON ba.dept_id = dc.dept_id
<include refid="searchSql"></include>
GROUP BY
dc.dept_id,dc.dept_name
</select>
<select id="listOneDepartAlertStatus" resultType="java.util.Map">
SELECT
dc.dept_id AS deptId,
dc.dept_name AS deptName,
COALESCE(COUNT(ba.id), 0) AS total,
IFNULL(SUM(ba.handle_type = 'waiting'), 0) AS todoCount,
IFNULL(SUM(ba.handle_type = 'finish'), 0) AS finishCount,
IFNULL(SUM(ba.handle_type = 'cancel'), 0) AS cancelCount
FROM
(select dept_id,dept_name from dk_cloud.sys_dept sd where sd.dept_id = #{param.deptId}) dc
LEFT JOIN business_alert ba ON ba.dept_id = dc.dept_id
<include refid="searchSql"></include>
GROUP BY
dc.dept_id,dc.dept_name
</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;
}
}

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

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 @Autowired
private IDeviceProUserMapper deviceProUserMapper; private IDeviceProUserMapper deviceProUserMapper;
private final ObjectMapper objectMapper = new ObjectMapper(); // private final ObjectMapper objectMapper = new ObjectMapper();
@Override @Override
public PaginationData<DeviceProEntity> listDeviceProEntityMap(Page page, DeviceProDTO deviceProDTO) { 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) { public Boolean updateDeviceProUser(List<DeviceProUserEntity> userEntity,Integer proId) {
try { 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> proUserEntityList = deviceProUserMapper.selectList(new LambdaQueryWrapper<DeviceProUserEntity>().eq(DeviceProUserEntity::getDeviceProId, proId));
//
List<DeviceProUserEntity> difference = new ArrayList<>(); // List<DeviceProUserEntity> difference = new ArrayList<>();
// 判断两个集合的差值(基于 userId) // 判断两个集合的差值(基于 userId)
difference = proUserEntityList.stream() // difference = proUserEntityList.stream()
.filter(proUser -> userEntity.stream() // .filter(proUser -> userEntity.stream()
.noneMatch(user -> user.getUserId().equals(proUser.getUserId()))) // .noneMatch(user -> user.getUserId().equals(proUser.getUserId())))
.toList(); // .toList();
//--------------------------------------------缓存相关操作---------------------------------------------------------------- //--------------------------------------------缓存相关操作----------------------------------------------------------------
//人员如果解绑了项目删除缓存数据 //人员如果解绑了项目删除缓存数据
difference.forEach(proUserEntity -> { // difference.forEach(proUserEntity -> {
//删除人员项目组信息 // //删除人员项目组信息
List<Object> projects = RedisUtils.getCacheList(String.format(Constants.PRO_GROUP, proUserEntity.getUserId())); // List<Object> projects = RedisUtils.getCacheList(String.format(Constants.PRO_GROUP, proUserEntity.getUserId()));
List<Map> projectList = projects.stream() // List<Map> projectList = projects.stream()
.filter(Map.class::isInstance) // .filter(Map.class::isInstance)
.map(Map.class::cast) // .map(Map.class::cast)
.toList(); // .toList();
//
//删除人员中所拥有的当前的项目组,然后构建新的存入redis // //删除人员中所拥有的当前的项目组,然后构建新的存入redis
List<Map> deviceProEntities = projectList.stream().filter(p -> !Integer.valueOf(p.get("id") + "").equals(proId)).toList(); // 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.deleteObject(String.format(Constants.PRO_GROUP, proUserEntity.getUserId()));
//重新插入 // //重新插入
RedisUtils.setCacheList(String.format(Constants.PRO_GROUP, proUserEntity.getUserId()),deviceProEntities); // RedisUtils.setCacheList(String.format(Constants.PRO_GROUP, proUserEntity.getUserId()),deviceProEntities);
//
//
//删除人员所拥有的设备信息 // //删除人员所拥有的设备信息
List<Object> cacheList = RedisUtils.getCacheList(String.format(Constants.PRO_DEVICE, proUserEntity.getUserId())); // List<Object> cacheList = RedisUtils.getCacheList(String.format(Constants.PRO_DEVICE, proUserEntity.getUserId()));
List<Map> deviceList = cacheList.stream() // List<Map> deviceList = cacheList.stream()
.filter(Map.class::isInstance) // .filter(Map.class::isInstance)
.map(Map.class::cast) // .map(Map.class::cast)
.toList(); // .toList();
//
//过滤除了这个删除的项目组之外的设备 // //过滤除了这个删除的项目组之外的设备
deviceList = deviceList.stream().filter(p-> !Integer.valueOf(p.get("proId") + "").equals(proId)).toList(); // deviceList = deviceList.stream().filter(p-> !Integer.valueOf(p.get("proId") + "").equals(proId)).toList();
//删除 // //删除
RedisUtils.deleteObject(String.format(Constants.PRO_DEVICE, proUserEntity.getUserId())); // RedisUtils.deleteObject(String.format(Constants.PRO_DEVICE, proUserEntity.getUserId()));
//
RedisUtils.setCacheList(String.format(Constants.PRO_DEVICE, proUserEntity.getUserId()),deviceList); // RedisUtils.setCacheList(String.format(Constants.PRO_DEVICE, proUserEntity.getUserId()),deviceList);
}); // });
//--------------------------------------------缓存相关操作---------------------------------------------------------------- //--------------------------------------------缓存相关操作----------------------------------------------------------------
@ -188,18 +188,18 @@ public class DeviceProServiceImpl implements IDeviceProService {
deviceProUserMapper.insert(userEntity); deviceProUserMapper.insert(userEntity);
//更新缓存记录 //更新缓存记录
userEntity.forEach(proUserEntity -> { // userEntity.forEach(proUserEntity -> {
List<Object> projects = RedisUtils.getCacheList(String.format(Constants.PRO_GROUP, proUserEntity.getUserId())); // List<Object> projects = RedisUtils.getCacheList(String.format(Constants.PRO_GROUP, proUserEntity.getUserId()));
List<Map> projectList = projects.stream() // List<Map> projectList = projects.stream()
.filter(Map.class::isInstance) // .filter(Map.class::isInstance)
.map(Map.class::cast) // .map(Map.class::cast)
.toList(); // .toList();
//
if (!projectList.stream().anyMatch(p-> Integer.valueOf(p.get("id") + "").equals(proUserEntity.getDeviceProId()))){ // if (!projectList.stream().anyMatch(p-> Integer.valueOf(p.get("id") + "").equals(proUserEntity.getDeviceProId()))){
Map proMap = objectMapper.convertValue(deviceProEntity, Map.class); // Map proMap = objectMapper.convertValue(deviceProEntity, Map.class);
RedisUtils.addCacheList(String.format(Constants.PRO_GROUP, proUserEntity.getUserId()), proMap); // RedisUtils.addCacheList(String.format(Constants.PRO_GROUP, proUserEntity.getUserId()), proMap);
} // }
}); // });
} }
return true; return true;
@ -229,29 +229,31 @@ public class DeviceProServiceImpl implements IDeviceProService {
wrapper.set(DeviceEntity::getProId, proId); wrapper.set(DeviceEntity::getProId, proId);
wrapper.eq(DeviceEntity::getId, deviceId); wrapper.eq(DeviceEntity::getId, deviceId);
if (deviceMapper.update(wrapper) > 0) {
DeviceEntity deviceEntity = deviceMapper.selectOne(new LambdaQueryWrapper<DeviceEntity>().eq(DeviceEntity::getId, deviceId)); return deviceMapper.update(wrapper) > 0;
//根据proid获取人员用于存储人员的设备权限
List<DeviceProUserEntity> proUserEntityList = deviceProUserMapper.selectList(new LambdaQueryWrapper<DeviceProUserEntity>().eq(DeviceProUserEntity::getDeviceProId, proId));
proUserEntityList.forEach(deviceProUserEntity -> { // if (deviceMapper.update(wrapper) > 0) {
List<Object> devices = RedisUtils.getCacheList(String.format(Constants.PRO_DEVICE, deviceProUserEntity.getUserId())); // DeviceEntity deviceEntity = deviceMapper.selectOne(new LambdaQueryWrapper<DeviceEntity>().eq(DeviceEntity::getId, deviceId));
List<Map> deviceList = devices.stream() // //根据proid获取人员用于存储人员的设备权限
.filter(Map.class::isInstance) // List<DeviceProUserEntity> proUserEntityList = deviceProUserMapper.selectList(new LambdaQueryWrapper<DeviceProUserEntity>().eq(DeviceProUserEntity::getDeviceProId, proId));
.map(Map.class::cast) // proUserEntityList.forEach(deviceProUserEntity -> {
.toList(); // List<Object> devices = RedisUtils.getCacheList(String.format(Constants.PRO_DEVICE, deviceProUserEntity.getUserId()));
// List<Map> deviceList = devices.stream()
if (!deviceList.stream().anyMatch(p-> Integer.valueOf(p.get("id") + "").equals(deviceEntity.getId()))){ // .filter(Map.class::isInstance)
Map deviceMap = objectMapper.convertValue(deviceEntity, Map.class); // .map(Map.class::cast)
// .toList();
RedisUtils.addCacheList(String.format(Constants.PRO_DEVICE, deviceProUserEntity.getUserId()), deviceMap); //
} // if (!deviceList.stream().anyMatch(p-> Integer.valueOf(p.get("id") + "").equals(deviceEntity.getId()))){
}); // Map deviceMap = objectMapper.convertValue(deviceEntity, Map.class);
} //
// RedisUtils.addCacheList(String.format(Constants.PRO_DEVICE, deviceProUserEntity.getUserId()), deviceMap);
// }
// });
// }
} catch (Exception e) { } catch (Exception e) {
return false; return false;
} }
return true;
} }
/** /**

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

@ -239,6 +239,7 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService {
entity.setWaylineId(e.getWaylineId()); entity.setWaylineId(e.getWaylineId());
entity.setWaylineName(e.getWaylineName()); entity.setWaylineName(e.getWaylineName());
entity.setSort(e.getSort()); entity.setSort(e.getSort());
entity.setDeviceSn(e.getDeviceSn());
entity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_1); entity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_1);
entity.setExecDate(Convert.toDate(endDate)); entity.setExecDate(Convert.toDate(endDate));
LoginUser loginUser = LoginHelper.getLoginUser(); LoginUser loginUser = LoginHelper.getLoginUser();
@ -327,6 +328,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));
}
/** /**
* 画框 * 画框

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

12
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;
@ -185,6 +186,16 @@ public class AiCompareServiceImpl implements IAiCompareService {
return i>0; return i>0;
} }
@Override
public Boolean updateStatus(Long id) {
AiCompareEntity aiCompareEntity = aiCompareMapper.selectById(id);
if(aiCompareEntity!=null&& ObjectUtil.equals(aiCompareEntity.getStatus(),AiCompareStatusConstants.COMPARE_STATUS_2)){
aiCompareEntity.setStatus(AiCompareStatusConstants.COMPARE_STATUS_4);
return aiCompareMapper.updateById(aiCompareEntity)>0;
}
return true;
}
@Override @Override
public AiCompareEntity getInfo(Long id) { public AiCompareEntity getInfo(Long id) {
return aiCompareMapper.selectById(id); return aiCompareMapper.selectById(id);
@ -233,6 +244,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);
} }

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 id="listMediaFile" resultType="org.dromara.sample.wayline.model.dto.AiCompareMediaFileDTO">
SELECT SELECT
ai.id as compareId,
mf.file_index, mf.file_index,
mf.file_id, mf.file_id,
mf.file_name, 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>

16
dk-modules/system/src/main/java/org/dromara/system/controller/system/SysRoleController.java

@ -1,6 +1,7 @@
package org.dromara.system.controller.system; package org.dromara.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
@ -9,6 +10,8 @@ import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType; import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.SysRole;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.SysUserRole; import org.dromara.system.domain.SysUserRole;
import org.dromara.system.domain.bo.SysDeptBo; import org.dromara.system.domain.bo.SysDeptBo;
import org.dromara.system.domain.bo.SysRoleBo; import org.dromara.system.domain.bo.SysRoleBo;
@ -226,5 +229,18 @@ public class SysRoleController extends BaseController {
selectVo.setDepts(deptService.selectDeptTreeList(new SysDeptBo())); selectVo.setDepts(deptService.selectDeptTreeList(new SysDeptBo()));
return R.ok(selectVo); return R.ok(selectVo);
} }
/**
* 获取对应角色部门树列表
*
*/
@GetMapping(value = "/user/list")
public R<List<SysUser>> listRoleUser() {
String roleName = "dispose";
List<SysUser> userList = roleService.getUserIno(roleName);
return R.ok(userList);
}
} }

5
dk-modules/system/src/main/java/org/dromara/system/mapper/SysRoleMapper.java

@ -8,6 +8,7 @@ import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.domain.SysRole; import org.dromara.system.domain.SysRole;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.vo.SysRoleVo; import org.dromara.system.domain.vo.SysRoleVo;
import java.util.List; import java.util.List;
@ -59,4 +60,8 @@ public interface SysRoleMapper extends BaseMapperPlus<SysRole, SysRoleVo> {
*/ */
List<SysRoleVo> selectRolesByUserId(Long userId); List<SysRoleVo> selectRolesByUserId(Long userId);
@DataPermission({
@DataColumn(key = "deptName", value = "su.dept_id"),
})
List<SysUser> getUserIno(@Param("roleName") String roleName);
} }

4
dk-modules/system/src/main/java/org/dromara/system/service/ISysRoleService.java

@ -2,6 +2,8 @@ package org.dromara.system.service;
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.system.domain.SysRole;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.SysUserRole; import org.dromara.system.domain.SysUserRole;
import org.dromara.system.domain.bo.SysRoleBo; import org.dromara.system.domain.bo.SysRoleBo;
import org.dromara.system.domain.vo.SysRoleVo; import org.dromara.system.domain.vo.SysRoleVo;
@ -197,4 +199,6 @@ public interface ISysRoleService {
void cleanOnlineUserByRole(Long roleId); void cleanOnlineUserByRole(Long roleId);
List<SysUser> getUserIno(String roleName);
} }

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

@ -152,7 +152,7 @@ public class SysDeptServiceImpl implements ISysDeptService {
@Override @Override
public List<SysDeptVo> selectDeptByIds(List<Long> deptIds) { public List<SysDeptVo> selectDeptByIds(List<Long> deptIds) {
return baseMapper.selectDeptList(new LambdaQueryWrapper<SysDept>() return baseMapper.selectDeptList(new LambdaQueryWrapper<SysDept>()
.select(SysDept::getDeptId, SysDept::getDeptName, SysDept::getLeader) .select(SysDept::getDeptId, SysDept::getDeptName, SysDept::getLeader,SysDept::getParentId)
.eq(SysDept::getStatus, UserConstants.DEPT_NORMAL) .eq(SysDept::getStatus, UserConstants.DEPT_NORMAL)
.in(CollUtil.isNotEmpty(deptIds), SysDept::getDeptId, deptIds)); .in(CollUtil.isNotEmpty(deptIds), SysDept::getDeptId, deptIds));
} }

10
dk-modules/system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java

@ -22,10 +22,7 @@ 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.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.api.model.LoginUser; import org.dromara.system.api.model.LoginUser;
import org.dromara.system.domain.SysRole; import org.dromara.system.domain.*;
import org.dromara.system.domain.SysRoleDept;
import org.dromara.system.domain.SysRoleMenu;
import org.dromara.system.domain.SysUserRole;
import org.dromara.system.domain.bo.SysRoleBo; import org.dromara.system.domain.bo.SysRoleBo;
import org.dromara.system.domain.vo.SysRoleVo; import org.dromara.system.domain.vo.SysRoleVo;
import org.dromara.system.mapper.SysRoleDeptMapper; import org.dromara.system.mapper.SysRoleDeptMapper;
@ -511,4 +508,9 @@ public class SysRoleServiceImpl implements ISysRoleService {
} }
}); });
} }
@Override
public List<SysUser> getUserIno(String roleName) {
return this.baseMapper.getUserIno(roleName);
}
} }

21
dk-modules/system/src/main/resources/mapper/system/SysRoleMapper.xml

@ -56,4 +56,25 @@
WHERE r.del_flag = '0' and r.role_id = #{roleId} WHERE r.del_flag = '0' and r.role_id = #{roleId}
</select> </select>
<select id="getUserIno" resultType="org.dromara.system.domain.SysUser">
SELECT
su.*
FROM
sys_user su
WHERE
su.user_id IN (
SELECT
sur.user_id
FROM
sys_user_role sur
WHERE
sur.role_id IN (
SELECT
role_id
FROM
sys_role sr
WHERE
sr.role_key = #{roleName}))
</select>
</mapper> </mapper>

Loading…
Cancel
Save