diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteNoticeService.java b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteNoticeService.java new file mode 100644 index 0000000..af7661f --- /dev/null +++ b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteNoticeService.java @@ -0,0 +1,10 @@ +package org.dromara.system.api; + +import org.dromara.system.api.domain.bo.RemoteNoticeBo; +import org.dromara.system.api.domain.vo.RemotePostVo; + +import java.util.List; + +public interface RemoteNoticeService { + int saveNotice(RemoteNoticeBo bo); +} diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteNoticeBo.java b/dk-api/api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteNoticeBo.java new file mode 100644 index 0000000..9ff720f --- /dev/null +++ b/dk-api/api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteNoticeBo.java @@ -0,0 +1,74 @@ +package org.dromara.system.api.domain.bo; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * 操作日志记录表 oper_log + * + * @author Lion Li + */ +@Data +@NoArgsConstructor +public class RemoteNoticeBo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long noticeId; + + + /** + * 公告标题 + */ + private String noticeTitle; + + /** + * 公告类型(1通知 2公告) + */ + private String noticeType; + + /** + * 公告内容 + */ + private String noticeContent; + + /** + * 公告状态(0正常 1关闭) + */ + private String status; + + /** + * 备注 + */ + private String remark; + + private Integer isRead; + /** + * 创建部门 + */ + + private Long createDept; + + /** + * 创建者 + */ + + private Long createBy; + private String deviceSn; + + /** + * 创建时间 + */ + private Date createTime; + + private String param; + + +} diff --git a/dk-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java b/dk-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java index 3b7efe8..e8cb35b 100644 --- a/dk-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java +++ b/dk-auth/src/main/java/org/dromara/auth/service/impl/PasswordAuthStrategy.java @@ -83,18 +83,6 @@ public class PasswordAuthStrategy implements IAuthStrategy { model.setActiveTimeout(client.getActiveTimeout()); model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId()); - //获取设备权限 - List 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); diff --git a/dk-common/common-encrypt/src/main/java/org/dromara/common/encrypt/utils/EncryptUtils.java b/dk-common/common-encrypt/src/main/java/org/dromara/common/encrypt/utils/EncryptUtils.java index 8e34843..bc7628e 100644 --- a/dk-common/common-encrypt/src/main/java/org/dromara/common/encrypt/utils/EncryptUtils.java +++ b/dk-common/common-encrypt/src/main/java/org/dromara/common/encrypt/utils/EncryptUtils.java @@ -175,6 +175,10 @@ public class EncryptUtils { return keyMap; } + public static void main(String[] args) { + Map map = generateRsaKey(); + System.out.println(map); + } /** * sm2公钥加密 * diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java index 229dba3..d3f2659 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java @@ -1,6 +1,7 @@ package org.dromara.business.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import com.alibaba.fastjson.JSON; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -9,17 +10,22 @@ import org.dromara.business.domain.BusinessAlert; import org.dromara.business.domain.bo.BusinessAlertBo; import org.dromara.business.domain.vo.BusinessAlertVo; import org.dromara.business.service.IBusinessAlertService; +import org.dromara.business.utils.MinioUntil; +import org.dromara.business.utils.constants.MinIOConstants; import org.dromara.common.core.domain.R; import org.dromara.common.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; +import org.dromara.system.api.RemoteNoticeService; +import org.dromara.system.api.domain.bo.RemoteNoticeBo; import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.domain.RemoteStartProcess; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.Date; import java.util.List; /** @@ -39,6 +45,8 @@ public class BusinessAlertController extends BaseController { private final IBusinessAlertService businessAlertService; @DubboReference(timeout = 30000) private RemoteWorkflowService remoteWorkflowService; + @DubboReference(timeout = 30000) + private RemoteNoticeService remoteNoticeService; /** * 查询全部预警/待办/已完成/忽略 @@ -79,13 +87,28 @@ public class BusinessAlertController extends BaseController { */ @Operation(summary ="ai实时流预警保存",description = "ai实时流预警保存") @PostMapping("/saveAlert") - public void saveAlert(BusinessAlertVo vo) { + public void saveAlert(@RequestBody BusinessAlertVo vo) { vo.setBusinessType(2); BusinessAlert businessAlert = businessAlertService.addBusinessAlert(vo); RemoteStartProcess startProcess = new RemoteStartProcess(); startProcess.setBusinessId(String.valueOf(businessAlert.getId())); startProcess.setFlowCode("alertChz"); remoteWorkflowService.startWorkFlowBatch(List.of(startProcess)); + RemoteNoticeBo remoteNoticeBo = new RemoteNoticeBo(); + remoteNoticeBo.setNoticeTitle(vo.getDeptName()+"产生预警,预警类型["+vo.getLabelCn()+"],请立即查看"); + remoteNoticeBo.setNoticeType("3"); + remoteNoticeBo.setNoticeContent(vo.getDeptName()+"产生预警,预警类型["+vo.getLabelCn()+"],请立即查看"); + remoteNoticeBo.setStatus("0"); + remoteNoticeBo.setIsRead(0); + remoteNoticeBo.setCreateBy(1L); + remoteNoticeBo.setCreateDept(1L); + remoteNoticeBo.setCreateTime(new Date()); + if (vo.getBusinessType() == 2){ + vo.setImages(MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, vo.getImages(), 3600).toString()); + } + remoteNoticeBo.setDeviceSn(vo.getDeviceSn()); + remoteNoticeBo.setParam(JSON.toJSONString(vo)); + remoteNoticeService.saveNotice(remoteNoticeBo); } diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java index 1bb1ff3..be9c2c6 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java @@ -142,6 +142,27 @@ public class BusinessAlertStatisticsController extends BaseController { return R.ok(businessAlertService.cityListAlert(businessAlertBo)); } + /** + * 预警信息-资规/农水-热力图 + * @param businessAlertBo + * @return + */ + @Operation(summary="预警信息-资规/农水-标签分组", description="预警信息-资规/农水-标签分组") + @GetMapping(value = "/alert/heatList") + public R> heatList(BusinessAlertBo businessAlertBo) { + return R.ok(businessAlertService.heatList(businessAlertBo)); + } + + /** + * 预警信息-城管/环保-热力图 + * @param businessAlertBo + * @return + */ + @Operation(summary="预警信息-城管/环保/住建-标签分组", description="预警信息-城管/环保/住建-标签分组") + @GetMapping(value = "/city/alert/heatList") + public R> cityHeatList(BusinessAlertBo businessAlertBo) { + return R.ok(businessAlertService.cityHeatList(businessAlertBo)); + } //饼图显示每个月根据部门 @Operation(summary="根据月份显示预警个数", description="根据月份显示预警个数") diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java index 946e59a..d1967dd 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java @@ -11,6 +11,7 @@ import lombok.extern.slf4j.Slf4j; import org.dromara.business.domain.bo.BusinessTaskBo; import org.dromara.business.domain.vo.BusinessTaskVo; import org.dromara.business.service.IBusinessTaskService; +import org.dromara.common.encrypt.annotation.ApiEncrypt; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -45,6 +46,7 @@ public class BusinessTaskController extends BaseController { /** * 查询工单预约列表 */ + @ApiEncrypt(response=true) @SaCheckPermission("business:task:list") @GetMapping("/list") public TableDataInfo list(BusinessTaskBo bo, PageQuery pageQuery) { diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java index 6f34cbf..db985fa 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java @@ -41,6 +41,9 @@ public class BusinessAlertBo { */ private String images; + private String startTime; + + private String endTime; /** * 预警类型 @@ -235,9 +238,6 @@ public class BusinessAlertBo { */ private Integer dateType; - private String startTime; - - private String endTime; private String aiName; private Integer businessType; diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java index ce203d9..bc23174 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java @@ -190,6 +190,7 @@ public class BusinessAlertVo implements Serializable { * 忽略原因 */ private String ignoringCause; + private Integer value; /** * 来源:0:平台 1:小程序 @@ -204,4 +205,5 @@ public class BusinessAlertVo implements Serializable { private Date createTime; //1:图片比对预警 2:AI实时预警 private Integer businessType; + private String deviceSn; } diff --git a/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java index 74dbd6d..138c33b 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java +++ b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java @@ -96,6 +96,7 @@ public interface BusinessAlertMapper extends BaseMapperPlus listAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime); + List heatList(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime); List> countStreetRateAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List deptIdList); Map streetRateTopAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("deptIdList") List deptIdList); diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java index becd098..df8ba7b 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java @@ -74,9 +74,11 @@ public interface IBusinessAlertService { TableDataInfo getInfo(BusinessAlertBo bo, PageQuery pageQuery, String alertCode); Map listAlert(BusinessAlertBo businessAlertBo); - + Map heatList(BusinessAlertBo businessAlertBo); Map cityListAlert(BusinessAlertBo businessAlertBo); + Map cityHeatList(BusinessAlertBo businessAlertBo); + List listVerifyAlert(RemoteBusinessAlertBo businessAlertBo); Boolean deleteAlert(List alertIdList); diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java index 7a8622a..6afe490 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java @@ -537,6 +537,32 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { } + @Override + public Map heatList(BusinessAlertBo businessAlertBo) { + Map result = new HashMap<>(); +/* //生成近一周开始时间、结束时间 + List dayList = getLastSixDays(); + String startTime = dayList.get(dayList.size() - 1); + String endTime = dayList.get(0); + + result.put("date", startTime + "~" + endTime);*/ + + //查看的是总览的预警信息 + if (ObjectUtil.isEmpty(businessAlertBo.getPostCode())) { + + List businessAlerts = this.baseMapper.heatList(businessAlertBo, businessAlertBo.getStartTime(), businessAlertBo.getEndTime()); + Map> listMap = businessAlerts.stream().collect(Collectors.groupingBy(BusinessAlertVo::getLabelCn)); + result.putAll(listMap); + return result; + } + //不是空的话查看是对应各局的 + businessAlertBo.setAiLabelEnList(List.of(businessAlertBo.getLabelEn())); + List alertList = this.baseMapper.heatList(businessAlertBo,businessAlertBo.getStartTime(), businessAlertBo.getEndTime()); + Map> listMap = alertList.stream().collect(Collectors.groupingBy(BusinessAlertVo::getLabelCn)); + result.putAll(listMap); + return result; + } + @Override public Map cityListAlert(BusinessAlertBo businessAlertBo) { if (ObjectUtil.hasEmpty(businessAlertBo.getPostCode(),businessAlertBo.getAiName())) { @@ -603,6 +629,28 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { return infoMap; } + @Override + public Map cityHeatList(BusinessAlertBo businessAlertBo) { + if (ObjectUtil.hasEmpty(businessAlertBo.getPostCode(),businessAlertBo.getAiName())) { + throw new ServiceException("参数为空!"); + } + Map infoMap = new HashMap<>(); + + //不是空的话查看是对应各局的 + List postVoList = remoteLablePostService.selectLabelByList(businessAlertBo.getPostCode(), LoginHelper.getDeptId()); + + Map> aiNameMap = postVoList.stream().collect(Collectors.groupingBy(RemoteAiLabelPostVo::getAiName)); + + if (ObjectUtil.isEmpty(postVoList)){ + return infoMap; + } + businessAlertBo.setAiLabelEnList(aiNameMap.get(businessAlertBo.getAiName()).stream().map(RemoteAiLabelPostVo::getLabelEn).distinct().toList()); + List alertList = this.baseMapper.heatList(businessAlertBo, businessAlertBo.getStartTime(), businessAlertBo.getEndTime()); + Map> listMap = alertList.stream().collect(Collectors.groupingBy(BusinessAlertVo::getLabelCn)); + infoMap.putAll(listMap); + return infoMap; + } + @Override public List listVerifyAlert(RemoteBusinessAlertBo businessAlertBo) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java index dd924c0..6847651 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java @@ -640,14 +640,15 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist switch (dateType) { case 0: - LocalDate today = LocalDate.now(); - LocalDate startDate = today.minusMonths(6) - .with(TemporalAdjusters.firstDayOfMonth()); + // 获取当前日期 + LocalDate localDate = LocalDate.now(); - LocalDate endDate = today.with(TemporalAdjusters.lastDayOfMonth()); + // 计算当前日期的六个月前的日期 + LocalDate sixMonthsAgo = localDate.minusMonths(6); + + result.put("startTime", sixMonthsAgo.format(formatter)); + result.put("endTime", localDate.format(formatter)); - result.put("startTime",startDate.format(formatter)); - result.put("endTime",endDate.format(formatter)); break; case 1: // 年 LocalDate currentDate = LocalDate.now(); diff --git a/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml index e28d333..3d5c716 100644 --- a/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml +++ b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml @@ -16,6 +16,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and DATE_FORMAT(ba.create_time,'%Y-%m-%d') = #{param.createTime} + + and = #{param.startTime} ]]> + + + and + and ba.dept_id in @@ -443,8 +449,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" COUNT(DISTINCT ba.id) AS total from business_alert ba where 1=1 - and = '2024' ]]> - and + and ba.handle_type = 'finish' @@ -526,6 +531,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" warning_summary ws LEFT JOIN business_alert ba ON ws.label_en = ba.label_en and ba.handle_type != 'verify' + and ba.del_flag = '0' and = #{startTime} ]]> and and ws.label_en in @@ -880,7 +886,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" GROUP BY dc.dept_id,dc.dept_name - + diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/feign/BusinessTaskFeign.java b/dk-modules/sample/src/main/java/org/dromara/sample/feign/BusinessTaskFeign.java deleted file mode 100644 index c0c87d3..0000000 --- a/dk-modules/sample/src/main/java/org/dromara/sample/feign/BusinessTaskFeign.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.dromara.sample.feign; - -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestParam; - -@FeignClient(name = "gateway",path = "business") -public interface BusinessTaskFeign { - - @PostMapping("/update/status") - void updateTaskStatus(@RequestParam String waylineId, - @RequestParam String status, - @RequestParam(required = false) String jobId, - @RequestParam(required = false) String jobName); -} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/fegin/RemoteBusinessTaskFeign.java b/dk-modules/sample/src/main/java/org/dromara/sample/feign/RemoteBusinessTaskFeign.java similarity index 95% rename from dk-modules/sample/src/main/java/org/dromara/sample/fegin/RemoteBusinessTaskFeign.java rename to dk-modules/sample/src/main/java/org/dromara/sample/feign/RemoteBusinessTaskFeign.java index 836db17..45ce390 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/fegin/RemoteBusinessTaskFeign.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/feign/RemoteBusinessTaskFeign.java @@ -1,4 +1,4 @@ -package org.dromara.sample.fegin; +package org.dromara.sample.feign; import org.dromara.common.core.domain.R; import org.springframework.cloud.openfeign.FeignClient; diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceProController.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceProController.java index 52bce09..7cae641 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceProController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceProController.java @@ -76,8 +76,8 @@ public class DeviceProController { //3、删除项目组 @Operation(summary = "删除项目组。", description = "删除项目组。") @DeleteMapping("/delete") - public HttpResultResponse deleteDevicePro(@RequestBody List ids) { - return HttpResultResponse.success(deviceProService.deleteIds(ids)); + public HttpResultResponse deleteDevicePro(Integer id) { + return HttpResultResponse.success(deviceProService.deleteIds(List.of(id))); } /** @@ -91,15 +91,25 @@ public class DeviceProController { return HttpResultResponse.success(deviceProService.updateDeviceProUser(userEntity,proId)); } - /** - * 设备绑定项目组 - */ - @Operation(summary = "设备绑定项目组", description = "设备绑定项目组") - @PostMapping("/bind") - public HttpResultResponse updateDevice(@RequestBody Dict dict) { - return HttpResultResponse.success(deviceProService.updateDevice(dict)); + + @Operation(summary = "查询项目人员。", description = "查询项目人员") + @GetMapping("/{proId}/user/page") + public HttpResultResponse> pageProUser(@PathVariable Integer proId, + @RequestParam(value = "searchValue",required = false) String searchValue, + @RequestParam(name = "pageNum", defaultValue = "1") Long page, + @RequestParam(name = "pageSize", defaultValue = "10") Long pageSize) { + Page pageQuery = new Page<>(page, pageSize); + return HttpResultResponse.success(deviceProService.pageProUser(searchValue,proId,pageQuery)); + } + + @Operation(summary = "删除项目人员", description = "删除项目人员") + @DeleteMapping("/{proId}/{proUserId}/user/delete") + public HttpResultResponse deleteProUser(@PathVariable Integer proId, + @PathVariable Long proUserId) { + return HttpResultResponse.success(deviceProService.deleteProUser(proUserId,proId)); } + /** * 开启配置 * @param proId @@ -123,25 +133,20 @@ public class DeviceProController { } /** - * 根据人员获取项目组(feign调用接口) + * 根据人员获取项目组 */ - @GetMapping("/list/pro") - public R> listDeviceGroup(@RequestParam("userId") Long userId) { - log.info("----------------------------开始调用feign接口查询项目组----------------------------"); - List result = deviceProService.listDeviceGroup(userId); - log.info("----------------------------调用feign接口查询项目组结束----------------------------"); - return R.ok(result); - } +// @GetMapping("/list/pro") +// public HttpResultResponse> listDeviceGroup(@RequestParam("userId") Long userId) { +// List result = deviceProService.listDeviceGroup(userId); +// return HttpResultResponse.success(result); +// } /** - * 根据人员获取当前人员所拥有的机场(feign调用接口) + * 根据人员获取项目组 */ - @GetMapping("/feign/device") - public List listDevice(@RequestParam("userId") Long userId) { - log.info("----------------------------开始调用feign接口查询项目所属机场----------------------------"); - List result = deviceProService.listDevice(userId); - log.info("----------------------------调用feign接口查询项目组所属机场----------------------------"); - return result; + @GetMapping("/list/user/pro") + public HttpResultResponse> listUserGroup() { + List result = deviceProService.listUserGroup(); + return HttpResultResponse.success(result); } - } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceProDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceProDTO.java index 7283c78..35d9c7e 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceProDTO.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceProDTO.java @@ -43,5 +43,15 @@ public class DeviceProDTO { /** 分配人员 */ - private Integer userId; + private Long userId; + + /** + * 设备组编码 + */ + private String bind_code; + + /** + * 设备组名称 + */ + private String pro_name; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProEntity.java index a7b67f3..691b7df 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProEntity.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProEntity.java @@ -37,7 +37,7 @@ public class DeviceProEntity extends BaseEntity implements Serializable { private String bindCode; @TableField(value = "bind_type") - private Integer bindType; + private Boolean bindType; @TableField(value = "workspace_id") private String workspaceId; diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java index df2f3ba..6e6c321 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java @@ -49,4 +49,11 @@ public interface IDeviceProService { Boolean enablePro(Integer proId); Boolean disablePro(Integer proId); + + PaginationData pageProUser(String searchValue, Integer proId,Page pageQuery); + + Boolean deleteProUser(Long proUserId, Integer proId); + + List listUserGroup(); + } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java index 1962460..fcec254 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java @@ -58,7 +58,9 @@ import org.dromara.sample.manage.model.param.DeviceQueryParam; import org.dromara.sample.manage.model.receiver.BasicDeviceProperty; import org.dromara.sample.manage.service.*; import org.dromara.sample.websocket.service.IWebSocketMessageService; +import org.dromara.system.api.domain.vo.RemoteUserVo; import org.dromara.system.api.model.LoginUser; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -88,7 +90,6 @@ public class DeviceProServiceImpl implements IDeviceProService { @Autowired private IDeviceProUserMapper deviceProUserMapper; -// private final ObjectMapper objectMapper = new ObjectMapper(); @Override public PaginationData listDeviceProEntityMap(Page page, DeviceProDTO deviceProDTO) { @@ -100,10 +101,13 @@ public class DeviceProServiceImpl implements IDeviceProService { @Override public Boolean updateDevicePro(DeviceProEntity deviceProEntity) { if(ObjectUtil.isNotEmpty(deviceProEntity.getId())){ + DeviceProEntity devicePro = deviceProMapper.selectById(deviceProEntity.getId()); + BeanUtils.copyProperties(deviceProEntity, devicePro); + return deviceProMapper.updateById(deviceProEntity) > 0 ; }else { deviceProEntity.setDeptName(LoginHelper.getDeptName()); - deviceProEntity.setNickName(LoginHelper.getUsername()); + deviceProEntity.setNickName(LoginHelper.getLoginUser().getNickname()); return deviceProMapper.insert(deviceProEntity) > 0; } } @@ -119,10 +123,6 @@ public class DeviceProServiceImpl implements IDeviceProService { }); - //todo人员是否要删除 - List proUserEntityList = deviceProUserMapper.selectList(new LambdaQueryWrapper().in(DeviceProUserEntity::getDeviceProId, ids)); - - return deviceProMapper.deleteByIds(ids)>0; } @@ -130,76 +130,16 @@ public class DeviceProServiceImpl implements IDeviceProService { @Transactional(rollbackFor = Exception.class) public Boolean updateDeviceProUser(List userEntity,Integer proId) { try { - //获取项目组信息 -// DeviceProEntity deviceProEntity = deviceProMapper.selectOne(new LambdaQueryWrapper().eq(DeviceProEntity::getId, proId)); - - //查询之前项目所属的人员信息 -// List proUserEntityList = deviceProUserMapper.selectList(new LambdaQueryWrapper().eq(DeviceProUserEntity::getDeviceProId, proId)); -// -// List difference = new ArrayList<>(); - - // 判断两个集合的差值(基于 userId) -// difference = proUserEntityList.stream() -// .filter(proUser -> userEntity.stream() -// .noneMatch(user -> user.getUserId().equals(proUser.getUserId()))) -// .toList(); - - //--------------------------------------------缓存相关操作---------------------------------------------------------------- - - //人员如果解绑了项目删除缓存数据 -// difference.forEach(proUserEntity -> { -// //删除人员项目组信息 -// List projects = RedisUtils.getCacheList(String.format(Constants.PRO_GROUP, proUserEntity.getUserId())); -// List projectList = projects.stream() -// .filter(Map.class::isInstance) -// .map(Map.class::cast) -// .toList(); -// -// //删除人员中所拥有的当前的项目组,然后构建新的存入redis -// List 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 cacheList = RedisUtils.getCacheList(String.format(Constants.PRO_DEVICE, proUserEntity.getUserId())); -// List deviceList = cacheList.stream() -// .filter(Map.class::isInstance) -// .map(Map.class::cast) -// .toList(); -// -// //过滤除了这个删除的项目组之外的设备 -// deviceList = deviceList.stream().filter(p-> !Integer.valueOf(p.get("proId") + "").equals(proId)).toList(); -// //删除 -// RedisUtils.deleteObject(String.format(Constants.PRO_DEVICE, proUserEntity.getUserId())); -// -// RedisUtils.setCacheList(String.format(Constants.PRO_DEVICE, proUserEntity.getUserId()),deviceList); -// }); - - //--------------------------------------------缓存相关操作---------------------------------------------------------------- - - //先清除原来的项目组成员 - deviceProUserMapper.delete(new LambdaQueryWrapper().eq(DeviceProUserEntity::getDeviceProId, proId)); - - if (ObjectUtil.isNotEmpty(userEntity)) { + List proUserEntityList = deviceProUserMapper.selectList(new LambdaQueryWrapper().eq(DeviceProUserEntity::getDeviceProId, proId)); + + List different = userEntity.stream() + .filter(user -> proUserEntityList.stream().noneMatch(u -> u.getUserId().equals(user.getUserId()))) + .toList(); + + + if (ObjectUtil.isNotEmpty(different)){ //添加新的项目组成员 - deviceProUserMapper.insert(userEntity); - - //更新缓存记录 -// userEntity.forEach(proUserEntity -> { -// List projects = RedisUtils.getCacheList(String.format(Constants.PRO_GROUP, proUserEntity.getUserId())); -// List 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); -// } -// }); + deviceProUserMapper.insert(different); } return true; @@ -229,28 +169,8 @@ public class DeviceProServiceImpl implements IDeviceProService { wrapper.set(DeviceEntity::getProId, proId); wrapper.eq(DeviceEntity::getId, deviceId); - return deviceMapper.update(wrapper) > 0; - -// if (deviceMapper.update(wrapper) > 0) { -// DeviceEntity deviceEntity = deviceMapper.selectOne(new LambdaQueryWrapper().eq(DeviceEntity::getId, deviceId)); -// //根据proid获取人员用于存储人员的设备权限 -// List proUserEntityList = deviceProUserMapper.selectList(new LambdaQueryWrapper().eq(DeviceProUserEntity::getDeviceProId, proId)); -// proUserEntityList.forEach(deviceProUserEntity -> { -// List devices = RedisUtils.getCacheList(String.format(Constants.PRO_DEVICE, deviceProUserEntity.getUserId())); -// List 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; } @@ -270,6 +190,8 @@ public class DeviceProServiceImpl implements IDeviceProService { List proIdList = proUserEntityList.stream().map(DeviceProUserEntity::getDeviceProId).distinct().toList(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(DeviceProEntity::getId, proIdList); + //查询是否启用的设备组 + queryWrapper.eq(DeviceProEntity::getBindType,1); return deviceProMapper.selectList(queryWrapper).stream().map(DeviceProEntity::getId).distinct().toList(); } @@ -323,6 +245,47 @@ public class DeviceProServiceImpl implements IDeviceProService { return this.deviceProMapper.update(wrapper) > 0; } + @Override + public PaginationData pageProUser(String searchValue, Integer proId,Page pageQuery) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DeviceProUserEntity::getDeviceProId,proId); + + if (ObjectUtil.isNotEmpty(searchValue)){ + wrapper.like(DeviceProUserEntity::getNickName,searchValue); + } + + Page pagination = deviceProUserMapper.selectPage(pageQuery, wrapper); + + return new PaginationData(pagination.getRecords(), new Pagination(pagination.getCurrent(), pagination.getSize(), pagination.getTotal())); + + } + + @Override + public Boolean deleteProUser(Long proUserId, Integer proId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DeviceProUserEntity::getDeviceProId,proId); + wrapper.eq(DeviceProUserEntity::getId,proUserId); + return deviceProUserMapper.delete(wrapper) > 0; + } + + @Override + public List listUserGroup() { + Long userId = LoginHelper.getUserId(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DeviceProUserEntity::getUserId,userId); + List proUserEntityList = deviceProUserMapper.selectList(wrapper); + if (ObjectUtil.isNotEmpty(proUserEntityList)){ + List proIdList = proUserEntityList.stream().map(DeviceProUserEntity::getDeviceProId).distinct().toList(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(DeviceProEntity::getId, proIdList); + //查询是否启用的设备组 + queryWrapper.eq(DeviceProEntity::getBindType,1); + return deviceProMapper.selectList(queryWrapper); + } + + return ListUtil.empty(); + } + @Override public Boolean saveAndUpdate(DeviceProEntity entity) { boolean flag = true; diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java index 430a1be..ed730c3 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java @@ -13,7 +13,7 @@ import org.dromara.common.redis.utils.RedisOpsUtils; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.sdk.cloudapi.wayline.*; import org.dromara.common.sdk.common.HttpResultResponse; -import org.dromara.sample.fegin.RemoteBusinessTaskFeign; +import org.dromara.sample.feign.RemoteBusinessTaskFeign; import org.dromara.sample.manage.mapper.IDeviceQrtzDateMapper; import org.dromara.sample.manage.mapper.IDeviceQrtzFileMapper; import org.dromara.sample.manage.mapper.IDeviceQrtzMapper; diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java index c7df333..a28e0a5 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java @@ -3,25 +3,33 @@ package org.dromara.sample.wayline.controller; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo; import org.dromara.common.core.domain.R; import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.sdk.cloudapi.wayline.FlighttaskProgress; import org.dromara.common.sdk.cloudapi.wayline.WaylineJobTypeEnum; import org.dromara.common.sdk.common.HttpResultResponse; import org.dromara.common.sdk.common.PaginationData; +import org.dromara.sample.component.mqtt.model.EventsReceiver; import org.dromara.sample.media.model.MediaFileDTO; import org.dromara.sample.wayline.model.dto.WaylineJobDTO; import org.dromara.sample.wayline.model.param.CreateJobParam; import org.dromara.sample.wayline.model.param.UpdateJobParam; import org.dromara.sample.wayline.service.IFlightTaskService; +import org.dromara.sample.wayline.service.IWaylineFileService; import org.dromara.sample.wayline.service.IWaylineJobService; +import org.dromara.sample.wayline.service.IWaylineRedisService; import org.dromara.system.api.model.LoginUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.io.IOException; +import java.net.URL; import java.sql.SQLException; import java.util.List; +import java.util.Optional; import java.util.Set; @@ -41,6 +49,11 @@ public class WaylineJobController { @Autowired private IFlightTaskService flighttaskService; + @Autowired + private IWaylineRedisService waylineRedisService; + + @Autowired + private IWaylineFileService waylineFileService; /** * Create a wayline task for the Dock. * @param request @@ -108,6 +121,21 @@ public class WaylineJobController { } - + @GetMapping("/{workspace_id}/getJobFileUrlByDeviceSn") + @Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。") + public void getJobFileUrlByDeviceSn(@PathVariable(name = "workspace_id") String workspaceId, + @RequestParam(name = "device_sn") String deviceSn, HttpServletRequest req, HttpServletResponse rsp) { + try { + Optional> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceSn); + if(runningWaylineJob.isEmpty())return; + String jobId = runningWaylineJob.get().getOutput().getExt().getFlightId(); + Optional waylineJobDTO = waylineJobService.getJobByJobId(workspaceId, jobId); + if(waylineJobDTO.isEmpty())return; + URL url = waylineFileService.getObjectUrl(workspaceId, waylineJobDTO.get().getFileId()); + rsp.sendRedirect(url.toString()); + } catch (IOException | SQLException e) { + e.printStackTrace(); + } + } } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareQueueServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareQueueServiceImpl.java index 58f9153..cd9d295 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareQueueServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareQueueServiceImpl.java @@ -1,43 +1,28 @@ package org.dromara.sample.wayline.service.impl; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.tdunning.math.stats.Sort; -import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.dubbo.config.annotation.DubboReference; -import org.apache.poi.ss.formula.functions.T; -import org.dromara.business.api.RemoteBusinessTaskService; import org.dromara.common.core.constant.AiCompareStatusConstants; import org.dromara.common.core.constant.BusinessConstants; import org.dromara.common.core.utils.DateUtils; -import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.sample.fegin.RemoteBusinessTaskFeign; +import org.dromara.sample.feign.RemoteBusinessTaskFeign; import org.dromara.sample.media.mapper.IFileMapper; import org.dromara.sample.media.model.MediaFileEntity; import org.dromara.sample.wayline.mapper.IAiCompareQueueMapper; import org.dromara.sample.wayline.mapper.IWaylineJobMapper; -import org.dromara.sample.wayline.model.dto.AiCompareDTO; import org.dromara.sample.wayline.model.dto.AiCompareQueueDTO; -import org.dromara.sample.wayline.model.entity.AiCompareEntity; import org.dromara.sample.wayline.model.entity.AiCompareQueueEntity; import org.dromara.sample.wayline.model.entity.WaylineJobEntity; import org.dromara.sample.wayline.service.IAiCompareQueueService; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.Date; import java.util.List; -import java.util.Map; /** * @auther yq diff --git a/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml b/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml index ba1fa69..d685b89 100644 --- a/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml +++ b/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml @@ -4,15 +4,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - + + + + + + - + @@ -33,10 +35,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" dp.pro_name, dp.bind_code, dp.bind_type, - dpu.user_id pro_user_id, + dp.nick_name, + dp.create_time, + dpu.id pro_user_id, dpu.device_pro_id, dpu.user_id, - dpu.nick_name, + dpu.user_name, d.id device_id, d.device_sn, d.device_name, @@ -52,17 +56,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" LEFT JOIN manage_device d ON dp.id = d.pro_id LEFT JOIN manage_device_pro_user dpu ON dp.id = dpu.device_pro_id - - and d.device_sn like concat(concat('%',#{condition.deviceSn}),'%') + + and dp.bind_code like concat(concat('%',#{condition.bind_code}),'%') - - and d.device_name like concat(concat('%',#{condition.deviceName}),'%') - - - and dpu.nickname like concat(concat('%',#{condition.nickname}),'%') - - - and dpu.user_id = #{condition.userId} + + and dp.pro_name like concat(concat('%',#{condition.pro_name}),'%') diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysMenuController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysMenuController.java index bfb4b82..d03d784 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysMenuController.java +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysMenuController.java @@ -9,6 +9,7 @@ import org.dromara.common.core.constant.TenantConstants; import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.domain.R; import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.encrypt.annotation.ApiEncrypt; import org.dromara.common.web.core.BaseController; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; @@ -42,8 +43,9 @@ public class SysMenuController extends BaseController { * * @return 路由信息 */ +// @ApiEncrypt(response=true) @GetMapping("/{platformType}/getRouters") - public R> getRouters(@PathVariable String platformType) { + public R> getRouters(@PathVariable String platformType) { List menus = menuService.selectMenuTreeByUserId(LoginHelper.getUserId(),platformType); return R.ok(menuService.buildMenus(menus)); } diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysUserController.java index f063cc8..89c13d4 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysUserController.java +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/system/SysUserController.java @@ -64,6 +64,16 @@ public class SysUserController extends BaseController { return userService.selectPageUserList(user, pageQuery); } + /** + * 查询全部用户不分页 + * @param user + * @return + */ + @GetMapping("/all/list") + public R> allList(SysUserBo user) { + return R.ok(userService.allList(user)); + } + /** * 导出用户列表 */ diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/SysNotice.java b/dk-modules/system/src/main/java/org/dromara/system/domain/SysNotice.java index fb1df87..8d57adb 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/domain/SysNotice.java +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/SysNotice.java @@ -48,4 +48,5 @@ public class SysNotice extends TenantEntity { */ private String remark; + private Integer isRead; } diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysUserProVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysUserProVo.java new file mode 100644 index 0000000..ae7c0b4 --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysUserProVo.java @@ -0,0 +1,99 @@ +package org.dromara.system.domain.vo; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.sensitive.annotation.Sensitive; +import org.dromara.common.sensitive.core.SensitiveStrategy; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.system.domain.SysUser; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 用户信息视图对象 sys_user + * + * @author Michelle.Chung + */ +@Data +public class SysUserProVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + private Long userId; + + /** + * 租户ID + */ + private String tenantId; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 用户账号 + */ + private String userName; + + /** + * 用户昵称 + */ + private String nickName; + + /** + * 用户类型(sys_user系统用户) + */ + private String userType; + + + /** + * 手机号码 + */ + private String phonenumber; + + /** + * 用户性别(0男 1女 2未知) + */ + private String sex; + + + /** + * 帐号状态(0正常 1停用) + */ + private String status; + + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 部门名 + */ + private String deptName; + + + /** + * 平台名称 + */ + private String productName; + +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteNoticeServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteNoticeServiceImpl.java new file mode 100644 index 0000000..981c85a --- /dev/null +++ b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteNoticeServiceImpl.java @@ -0,0 +1,38 @@ +package org.dromara.system.dubbo; + +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.common.core.service.DictService; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.resource.api.RemoteMessageService; +import org.dromara.system.api.RemoteNoticeService; +import org.dromara.system.api.domain.bo.RemoteNoticeBo; +import org.dromara.system.domain.SysNotice; +import org.dromara.system.mapper.SysNoticeMapper; +import org.springframework.stereotype.Service; + + + +/** + * @author sean + * @version 1.1 + * @date 2022/6/1 + */ +@RequiredArgsConstructor +@Service +@DubboService +public class RemoteNoticeServiceImpl implements RemoteNoticeService { + private final DictService dictService; + private final SysNoticeMapper sysNoticeMapper; + @DubboReference + private final RemoteMessageService remoteMessageService; + + @Override + public int saveNotice(RemoteNoticeBo bo) { + SysNotice notice = MapstructUtils.convert(bo, SysNotice.class); + /*String type = dictService.getDictLabel("sys_notice_type", notice.getNoticeType());*/ + remoteMessageService.publishAll(bo.getParam()); + return sysNoticeMapper.insert(notice); + } +} diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/SysUserMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysUserMapper.java index 18b4813..c3dd489 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/mapper/SysUserMapper.java +++ b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysUserMapper.java @@ -9,6 +9,7 @@ import org.dromara.common.mybatis.annotation.DataColumn; import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.system.domain.SysUser; +import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysUserExportVo; import org.dromara.system.domain.vo.SysUserVo; @@ -92,4 +93,6 @@ public interface SysUserMapper extends BaseMapperPlus { int updateById(@Param(Constants.ENTITY) SysUser user); List selectFlwByIds(@Param(Constants.WRAPPER) Wrapper queryWrapper); + + List allList(@Param("param") SysUserBo user); } diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java index ed56653..8f5e0d6 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/ISysUserService.java @@ -273,4 +273,6 @@ public interface ISysUserService { List assignUserSelect(Long deptId); List selectFlwByIds(List userIds, Long deptId); + + List allList(SysUserBo user); } diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index 0a151b9..aae5b7b 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -584,6 +584,11 @@ public class SysUserServiceImpl implements ISysUserService { .in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds)); } + @Override + public List allList(SysUserBo user) { + return baseMapper.allList(user); + } + /** * 通过用户ID查询用户账户 * diff --git a/dk-modules/system/src/main/resources/mapper/system/SysUserMapper.xml b/dk-modules/system/src/main/resources/mapper/system/SysUserMapper.xml index 93513f2..4b35648 100644 --- a/dk-modules/system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/dk-modules/system/src/main/resources/mapper/system/SysUserMapper.xml @@ -96,5 +96,24 @@ ${ew.getCustomSqlSegment} + + diff --git a/dk-modules/workflow/pom.xml b/dk-modules/workflow/pom.xml index c0160e2..85fc4d6 100644 --- a/dk-modules/workflow/pom.xml +++ b/dk-modules/workflow/pom.xml @@ -118,6 +118,11 @@ api-system + + org.dromara + common-encrypt + + diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceMapper.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceMapper.java index 92809c8..e71fd57 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceMapper.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceMapper.java @@ -7,6 +7,8 @@ import org.apache.ibatis.annotations.Param; import org.dromara.workflow.domain.bo.FlowInstanceBo; import org.dromara.workflow.domain.vo.FlowInstanceVo; +import java.util.List; + /** * 实例信息Mapper接口 * @@ -24,4 +26,6 @@ public interface FlwInstanceMapper { */ Page selectInstanceList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + + List listInsByDefinition(@Param("definitionId") Long definitionId); } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java index 99729c2..89eaafc 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java @@ -156,4 +156,6 @@ public interface IFlwInstanceService { * @return 结果 */ boolean processInvalid(FlowInvalidBo bo); + + Boolean batchAddSign(Long definitionId); } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java index 137ec97..f32008c 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java @@ -46,15 +46,19 @@ import org.dromara.workflow.common.enums.TaskStatusEnum; import org.dromara.workflow.domain.bo.FlowCancelBo; import org.dromara.workflow.domain.bo.FlowInstanceBo; import org.dromara.workflow.domain.bo.FlowInvalidBo; +import org.dromara.workflow.domain.bo.TaskOperationBo; import org.dromara.workflow.domain.vo.FlowHisTaskVo; import org.dromara.workflow.domain.vo.FlowInstanceVo; import org.dromara.workflow.domain.vo.FlowVariableVo; import org.dromara.workflow.handler.FlowProcessEventHandler; import org.dromara.workflow.mapper.FlwCategoryMapper; import org.dromara.workflow.mapper.FlwInstanceMapper; +import org.dromara.workflow.mapper.FlwTaskMapper; import org.dromara.workflow.service.IFlwCommonService; import org.dromara.workflow.service.IFlwInstanceService; +import org.dromara.workflow.service.IFlwTaskAssigneeService; import org.dromara.workflow.service.IFlwTaskService; +import org.dromara.workflow.utils.BatchProcessorUtil; import org.dromara.workflow.utils.MinioUntil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -78,12 +82,14 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { private final ChartService chartService; private final TaskService taskService; private final FlowHisTaskMapper flowHisTaskMapper; + private final FlwTaskMapper flwTaskMapper; private final FlowInstanceMapper flowInstanceMapper; private final FlowProcessEventHandler flowProcessEventHandler; private final IFlwTaskService flwTaskService; private final FlwInstanceMapper flwInstanceMapper; private final FlwCategoryMapper flwCategoryMapper; private final IFlwCommonService flwCommonService; + private final IFlwTaskAssigneeService flwTaskAssigneeService; @DubboReference private RemoteFileService remoteFileService; @@ -460,4 +466,77 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { throw new ServiceException(e.getMessage()); } } + + @Override + public Boolean batchAddSign(Long definitionId) { + try { + List instanceList = flwInstanceMapper.listInsByDefinition(definitionId); + + if (ObjectUtil.isEmpty(instanceList)) { + return true; + } + + //根据实例id查询所有的可执行的任务 + List insIdList = instanceList.stream().map(FlowInstanceVo::getId).distinct().toList(); + List flowTasks = flwTaskService.selectByInstIdList(insIdList); + + //拿到任务之后进行批量加签 + int startIndex = 0; + int batchSize = 1000; + boolean flag = BatchProcessorUtil.processBatches(flowTasks, batchSize, startIndex, batch -> { + batch.forEach(flowTask1 -> { + + //判断是否有人员,进行加签 + //获取当前任务的办理人 + List currentTaskUser = flwTaskService.currentTaskAllUser(flowTask1.getId()); + + Instance ins = insService.getById(flowTask1.getInstanceId()); + + //根据配置的人员查询系统中的用户 + String nodeCode = ins.getNodeCode(); + Integer nodeType = ins.getNodeType(); + List permissionUser = flwTaskMapper.getPermissionFlag(definitionId,nodeCode,nodeType); + String first = permissionUser.getFirst(); + + List totalUser = new ArrayList<>(); + + if (ObjectUtil.isNotEmpty(first)){ + String[] split = first.split("@@"); + for (String handleFlag : split) { + if (!handleFlag.equals("${handler}")){ + List remoteUserVos = flwTaskAssigneeService.fetchUsersByStorageId(handleFlag); + totalUser.addAll(remoteUserVos); + } + } + } + + //比较差值 + List different = totalUser.stream() + .filter(user -> currentTaskUser.stream().noneMatch(u -> u.getUserId().equals(user.getUserId()))) + .toList(); + + List userIds = different.stream() + .map(RemoteUserVo::getUserId) + .distinct() + .map(String::valueOf) + .toList(); + + //加签 + if (ObjectUtil.isNotEmpty(userIds)){ + TaskOperationBo taskOperationBo = new TaskOperationBo(); + taskOperationBo.setUserIds(userIds); + taskOperationBo.setTaskId(flowTask1.getId()); + + flwTaskService.taskOperation(taskOperationBo,"addSignature"); + } + }); + }); + + return flag; + } catch (Exception e) { + e.printStackTrace(); + log.error(e.getMessage(), e); + return false; + } + } } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java index 85a0841..ffcc856 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java @@ -160,7 +160,10 @@ public class WorkflowServiceImpl implements WorkflowService { public Boolean startWorkFlowBatch(List startProcess) { try { startProcess.forEach(startProcessBo -> { - flwTaskService.startWorkFlow(BeanUtil.toBean(startProcessBo, StartProcessBo.class)); + RemoteStartProcessReturn startProcessReturn = flwTaskService.startWorkFlow(BeanUtil.toBean(startProcessBo, StartProcessBo.class)); + + //加签 + flwTaskService.addSign(startProcessReturn.getProcessInstanceId()); }); } catch (Exception e) { return false; diff --git a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwInstanceMapper.xml b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwInstanceMapper.xml index 30e2267..deb702b 100644 --- a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwInstanceMapper.xml +++ b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwInstanceMapper.xml @@ -33,4 +33,24 @@ ${ew.getCustomSqlSegment} + +