From 5a9cc744055b423028a13eb7cee45d4b5703ba68 Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Fri, 15 Aug 2025 17:21:59 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E8=B0=83?= =?UTF-8?q?=E6=9F=A5=E9=97=AE=E5=8D=B7bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/QuestionnaireController.java | 2 +- .../property/domain/Questionnaire.java | 2 - .../property/domain/bo/QuestionnaireBo.java | 2 - .../domain/vo/QuestionnaireQuestionVo.java | 8 ++- .../property/domain/vo/QuestionnaireVo.java | 7 ++- .../impl/QuestionnaireServiceImpl.java | 56 ++++++++++++++++++- 6 files changed, 66 insertions(+), 11 deletions(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/QuestionnaireController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/QuestionnaireController.java index a54cdfe7..dc7072c5 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/QuestionnaireController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/QuestionnaireController.java @@ -51,7 +51,7 @@ public class QuestionnaireController extends BaseController { * * @param id 主键 */ - @SaCheckPermission("property:questionnaire:query") + // @SaCheckPermission("property:questionnaire:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable("id") Long id) { diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Questionnaire.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Questionnaire.java index f27003c2..4636b4af 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Questionnaire.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Questionnaire.java @@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; import java.io.Serial; @@ -59,5 +58,4 @@ public class Questionnaire extends TenantEntity { */ private String status; - } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QuestionnaireBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QuestionnaireBo.java index 9ef514d2..51970335 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QuestionnaireBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QuestionnaireBo.java @@ -11,8 +11,6 @@ import jakarta.validation.constraints.*; import java.util.Date; import java.util.List; -import com.fasterxml.jackson.annotation.JsonFormat; - /** * 调查问卷业务对象 questionnaire * diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireQuestionVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireQuestionVo.java index 964bf8ec..aa0a209f 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireQuestionVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireQuestionVo.java @@ -7,11 +7,12 @@ import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.dromara.property.domain.QuestionnaireQuestionItem; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -70,5 +71,8 @@ public class QuestionnaireQuestionVo implements Serializable { @ExcelProperty(value = "排序") private Long sort; - + /** + * 问题列表 + */ + private List questionnaireQuestionItemVos; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireVo.java index b50fe3c8..24503771 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireVo.java @@ -13,7 +13,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -72,5 +72,8 @@ public class QuestionnaireVo implements Serializable { @ExcelProperty(value = "状态(1草稿2已发布3未发布)") private String status; - + /** + * 问题列表 + */ + private List questionnaireQuestionVos; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/QuestionnaireServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/QuestionnaireServiceImpl.java index 01df710b..08de4aaf 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/QuestionnaireServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/QuestionnaireServiceImpl.java @@ -16,6 +16,8 @@ import org.dromara.property.domain.QuestionnaireQuestion; import org.dromara.property.domain.QuestionnaireQuestionItem; import org.dromara.property.domain.bo.QuestionnaireQuestionBo; import org.dromara.property.domain.bo.QuestionnaireQuestionItemBo; +import org.dromara.property.domain.vo.QuestionnaireQuestionItemVo; +import org.dromara.property.domain.vo.QuestionnaireQuestionVo; import org.dromara.property.mapper.QuestionnaireQuestionItemMapper; import org.dromara.property.mapper.QuestionnaireQuestionMapper; import org.springframework.stereotype.Service; @@ -53,7 +55,9 @@ public class QuestionnaireServiceImpl implements IQuestionnaireService { */ @Override public QuestionnaireVo queryById(Long id) { - return baseMapper.selectVoById(id); + QuestionnaireVo questionnaireVo = baseMapper.selectVoById(id); + processingData(questionnaireVo,null, null); + return questionnaireVo; } /** @@ -67,6 +71,23 @@ public class QuestionnaireServiceImpl implements IQuestionnaireService { public TableDataInfo queryPageList(QuestionnaireBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + if (CollUtil.isNotEmpty(result.getRecords())) { + //收集所有的问卷id + List questionnaireIds = result.getRecords().stream().map(QuestionnaireVo::getId).toList(); + // 一次性查询所有问题 + LambdaQueryWrapper questionQueryWrapper = Wrappers.lambdaQuery(); + questionQueryWrapper.in(QuestionnaireQuestion::getQuestionnaireId, questionnaireIds); + List questionnaireQuestionVos = questionnaireQuestionMapper.selectVoList(questionQueryWrapper); + //收集所有问题id + List idList = questionnaireQuestionVos.stream().map(QuestionnaireQuestionVo::getId).toList(); + //查询所有问题选项 + LambdaQueryWrapper questionItemQueryWrapper = Wrappers.lambdaQuery(); + questionItemQueryWrapper.in(QuestionnaireQuestionItem::getQuestionId, idList); + List questionnaireQuestionItemVos = questionnaireQuestionItemMapper.selectVoList(questionItemQueryWrapper); + result.getRecords().stream().forEach(questionnaireVo -> { + processingData(questionnaireVo, questionnaireQuestionVos, questionnaireQuestionItemVos); + }); + } return TableDataInfo.build(result); } @@ -91,6 +112,37 @@ public class QuestionnaireServiceImpl implements IQuestionnaireService { return lqw; } + /** + * 处理数据 + */ + private void processingData(QuestionnaireVo questionnaireVo, List questionnaireQuestionVos, List questionnaireQuestionItemVos) { + // 在此处添加您选中的代码来获取问卷问题列表 + if (CollUtil.isEmpty(questionnaireQuestionVos)) { + LambdaQueryWrapper questionQueryWrapper = Wrappers.lambdaQuery(); + questionQueryWrapper.eq(QuestionnaireQuestion::getQuestionnaireId, questionnaireVo.getId()); + questionnaireQuestionVos = questionnaireQuestionMapper.selectVoList(questionQueryWrapper); + if (CollUtil.isEmpty(questionnaireQuestionItemVos)) { + //收集所有问题id + List idList = questionnaireQuestionVos.stream().map(QuestionnaireQuestionVo::getId).toList(); + //查询所有问题选项 + LambdaQueryWrapper questionItemQueryWrapper = Wrappers.lambdaQuery(); + questionItemQueryWrapper.in(QuestionnaireQuestionItem::getQuestionId, idList); + questionnaireQuestionItemVos = questionnaireQuestionItemMapper.selectVoList(questionItemQueryWrapper); + } + } + if (CollUtil.isNotEmpty(questionnaireQuestionVos)) { + List finalQuestionnaireQuestionItemVos = questionnaireQuestionItemVos; + questionnaireQuestionVos.stream().forEach(questionnaireQuestionVo -> { + //筛选出属于当前问题的问题项返回list + List list = finalQuestionnaireQuestionItemVos.stream().filter(questionnaireQuestionItemVo -> questionnaireQuestionItemVo.getQuestionId().equals(questionnaireQuestionVo.getId())).toList(); + questionnaireQuestionVo.setQuestionnaireQuestionItemVos(list); + }); + } + questionnaireVo.setQuestionnaireQuestionVos(questionnaireQuestionVos); + } + + ; + /** * 新增调查问卷 * @@ -191,7 +243,7 @@ public class QuestionnaireServiceImpl implements IQuestionnaireService { @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { boolean flag = baseMapper.deleteByIds(ids) > 0; - if(flag){ + if (flag) { ids.stream().forEach(id -> { //查询问题 List questionnaireQuestionList = questionnaireQuestionMapper.selectList(new LambdaUpdateWrapper().eq(QuestionnaireQuestion::getQuestionnaireId, id)); From 785f903e2a36deac4f46e068e3df0fa9d5b0aabf Mon Sep 17 00:00:00 2001 From: mocheng <3057647414@qq.com> Date: Fri, 15 Aug 2025 19:44:00 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E7=89=A9=E4=B8=9A=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 ++-- .../ruoyi-nacos/src/main/resources/application.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index e599e58c..08b4c075 100644 --- a/pom.xml +++ b/pom.xml @@ -74,8 +74,8 @@ dev - 127.0.0.1:8848 - 127.0.0.1:4560 + 10.20.1.65:8848 + 10.20.1.65:4560 DEFAULT_GROUP DEFAULT_GROUP nacos diff --git a/ruoyi-visual/ruoyi-nacos/src/main/resources/application.properties b/ruoyi-visual/ruoyi-nacos/src/main/resources/application.properties index 2537a968..ef3ece6a 100644 --- a/ruoyi-visual/ruoyi-nacos/src/main/resources/application.properties +++ b/ruoyi-visual/ruoyi-nacos/src/main/resources/application.properties @@ -40,7 +40,7 @@ spring.sql.init.platform=mysql db.num=1 ### Connect URL of DB: -db.url.0=jdbc:mysql://127.0.0.1:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true +db.url.0=jdbc:mysql://10.20.1.65:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true db.user.0=root db.password.0=By@2025! From 27163247349973748c135f6b23f1b357fb403460 Mon Sep 17 00:00:00 2001 From: 15683799673 Date: Sun, 17 Aug 2025 07:02:49 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E6=8C=87=E6=B4=BE=20?= =?UTF-8?q?=E5=AE=8C=E6=88=90=20,=E6=9F=A5=E8=AF=A2=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=91=8A=E8=AD=A6=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../property/api/RemoteAttendanceService.java | 23 +++ .../vo/RemoteAttendanceUserGroupVo.java | 53 +++++++ .../AttendanceUserGroupController.java | 49 +++--- .../domain/vo/AttendanceUserGroupVo.java | 24 ++- .../dubbo/RemoteAttendanceServiceImpl.java | 37 +++++ .../service/IAttendanceUserGroupService.java | 17 ++- .../impl/AttendanceUserGroupServiceImpl.java | 8 + .../SisAccessControlController.java | 1 + .../SisAlarmEventAttachmentsController.java | 12 +- .../SisAlarmEventProcessController.java | 106 +++++++++++++ .../controller/SisAlarmEventsController.java | 73 +++++++-- .../sis/domain/SisAlarmEventProcess.java | 68 +++++++++ .../dromara/sis/domain/SisAlarmEvents.java | 32 +++- .../sis/domain/bo/SisAlarmEventProcessBo.java | 70 +++++++++ .../sis/domain/bo/SisAlarmEventsBo.java | 31 +++- .../domain/bo/alarm/AlarmAssignmentBo.java | 51 +++++++ .../sis/domain/bo/alarm/AlarmCompleteBo.java | 29 ++++ .../domain/vo/SisAlarmEventAttachmentsVo.java | 6 + .../sis/domain/vo/SisAlarmEventProcessVo.java | 80 ++++++++++ .../sis/domain/vo/SisAlarmEventsVo.java | 31 +++- .../mapper/SisAlarmEventProcessMapper.java | 15 ++ .../ISisAlarmEventAttachmentsService.java | 7 + .../service/ISisAlarmEventProcessService.java | 77 ++++++++++ .../sis/service/ISisAlarmEventsService.java | 23 +++ .../SisAlarmEventAttachmentsServiceImpl.java | 8 + .../impl/SisAlarmEventProcessServiceImpl.java | 142 ++++++++++++++++++ .../impl/SisAlarmEventsServiceImpl.java | 121 ++++++++++++++- .../mapper/sis/SisAlarmEventProcessMapper.xml | 7 + 28 files changed, 1141 insertions(+), 60 deletions(-) create mode 100644 ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteAttendanceService.java create mode 100644 ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteAttendanceUserGroupVo.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteAttendanceServiceImpl.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventProcessController.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEventProcess.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventProcessBo.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmAssignmentBo.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmCompleteBo.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventProcessVo.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAlarmEventProcessMapper.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventProcessService.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventProcessServiceImpl.java create mode 100644 ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAlarmEventProcessMapper.xml diff --git a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteAttendanceService.java b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteAttendanceService.java new file mode 100644 index 00000000..94e6e2a8 --- /dev/null +++ b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteAttendanceService.java @@ -0,0 +1,23 @@ +package org.dromara.property.api; + +import org.dromara.property.api.domain.vo.RemoteAttendanceUserGroupVo; + +import java.util.Date; +import java.util.List; + +/** + * 排班远程服务调用 + * + * @author lxj + */ +public interface RemoteAttendanceService { + + /** + * 查询指定天数的排班信息 + * + * @param date 查询时间 + * @return 返回排班人员信息 + */ + public List queryAttendPersonInfo(Date date); + +} diff --git a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteAttendanceUserGroupVo.java b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteAttendanceUserGroupVo.java new file mode 100644 index 00000000..1146533a --- /dev/null +++ b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteAttendanceUserGroupVo.java @@ -0,0 +1,53 @@ +package org.dromara.property.api.domain.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDate; + +/** + * 排班人员信息 + * + * @author lxj + * @since 2025-08-17 + */ +@Data +public class RemoteAttendanceUserGroupVo implements Serializable { + + /** + * 排班ID + */ + private Long scheduleId; + + /** + * 员工ID + */ + private Long employeeId; + + /** + * 员工姓名 + */ + private String employeeName; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 开始日期 + */ + private LocalDate startDate; + + /** + * 结束日期(仅date_type=3时有效) + */ + private LocalDate endDate; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceUserGroupController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceUserGroupController.java index 58ffb3b0..9410a024 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceUserGroupController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceUserGroupController.java @@ -1,28 +1,28 @@ package org.dromara.property.controller; -import java.util.List; - -import lombok.RequiredArgsConstructor; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; -import org.dromara.property.domain.bo.AttendanceArrangementBo; -import org.dromara.property.domain.vo.AttendanceArrangementVo; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.mybatis.core.page.PageQuery; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.property.domain.vo.AttendanceUserGroupVo; -import org.dromara.property.domain.bo.AttendanceUserGroupBo; -import org.dromara.property.service.IAttendanceUserGroupService; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +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.property.domain.bo.AttendanceUserGroupBo; +import org.dromara.property.domain.vo.AttendanceUserGroupVo; +import org.dromara.property.service.IAttendanceUserGroupService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 排班明细 @@ -67,7 +67,7 @@ public class AttendanceUserGroupController extends BaseController { @SaCheckPermission("Property:userGroup:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable("id") Long id) { + @PathVariable("id") Long id) { return R.ok(attendanceUserGroupService.queryById(id)); } @@ -114,4 +114,17 @@ public class AttendanceUserGroupController extends BaseController { public TableDataInfo queryScheduleView(AttendanceUserGroupBo bo, PageQuery pageQuery) { return attendanceUserGroupService.queryScheduleView(bo, pageQuery); } + + /** + * 查询今天的排班人员信息 + * + * @return 返回排班人员信息 + */ + @RepeatSubmit() + @GetMapping("/query/currentDay") + public R> queryCurrentSchedu() { + return R.ok(attendanceUserGroupService.queryAttendPersonInfo(new Date())); + } + + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceUserGroupVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceUserGroupVo.java index ffc3f24a..2451103f 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceUserGroupVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceUserGroupVo.java @@ -4,7 +4,6 @@ import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; -import org.dromara.property.api.domain.vo.RemoteBuildingVo; import org.dromara.property.domain.*; import org.dromara.system.api.domain.vo.RemoteUserVo; import org.springframework.format.annotation.DateTimeFormat; @@ -14,7 +13,6 @@ import java.io.Serializable; import java.time.LocalDate; - /** * 排班明细视图对象 attendance_user_group * @@ -47,11 +45,11 @@ public class AttendanceUserGroupVo implements Serializable { @ExcelProperty(value = "员工ID") private Long employeeId; -// /** -// * 员工姓名 -// */ -// @ExcelProperty(value = "员工姓名") -// private String employeeName; + /** + * 员工姓名 + */ + @ExcelProperty(value = "员工姓名") + private String employeeName; /** * 部门ID @@ -59,11 +57,11 @@ public class AttendanceUserGroupVo implements Serializable { @ExcelProperty(value = "部门ID") private Long deptId; -// /** -// * 部门名称 -// */ -// @ExcelProperty(value = "部门名称") -// private String deptName; + /** + * 部门名称 + */ + @ExcelProperty(value = "部门名称") + private String deptName; /** * 开始日期 @@ -89,8 +87,6 @@ public class AttendanceUserGroupVo implements Serializable { private RemoteUserVo remoteUserVo; - private String deptName; - private AttendanceArea attendanceArea; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteAttendanceServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteAttendanceServiceImpl.java new file mode 100644 index 00000000..c1db0d99 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteAttendanceServiceImpl.java @@ -0,0 +1,37 @@ +package org.dromara.property.dubbo; + +import cn.hutool.core.collection.CollUtil; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.property.api.RemoteAttendanceService; +import org.dromara.property.api.domain.vo.RemoteAttendanceUserGroupVo; +import org.dromara.property.domain.vo.AttendanceUserGroupVo; +import org.dromara.property.service.IAttendanceUserGroupService; + +import java.util.Date; +import java.util.List; + +/** + * 排班远程服务调用实现 + * + * @author lxj + */ +@DubboService +@RequiredArgsConstructor +public class RemoteAttendanceServiceImpl implements RemoteAttendanceService { + + + private final IAttendanceUserGroupService attendanceUserGroupService; + + + public List queryAttendPersonInfo(Date date) { + List ls = attendanceUserGroupService.queryAttendPersonInfo(date); + if (CollUtil.isNotEmpty(ls)) { + return MapstructUtils.convert(ls, RemoteAttendanceUserGroupVo.class); + } + return null; + } + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceUserGroupService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceUserGroupService.java index 0c800425..5ba95298 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceUserGroupService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceUserGroupService.java @@ -1,11 +1,13 @@ package org.dromara.property.service; -import org.dromara.property.domain.vo.AttendanceUserGroupVo; -import org.dromara.property.domain.bo.AttendanceUserGroupBo; -import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.property.domain.AttendanceUserGroup; +import org.dromara.property.domain.bo.AttendanceUserGroupBo; +import org.dromara.property.domain.vo.AttendanceUserGroupVo; import java.util.Collection; +import java.util.Date; import java.util.List; /** @@ -66,5 +68,14 @@ public interface IAttendanceUserGroupService { */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + /** + * 根据日期查询人员排班信息 + * + * @param date 日期 + * @return 返回排班人员信息 + */ + List queryAttendPersonInfo(Date date); + TableDataInfo queryScheduleView(AttendanceUserGroupBo bo, PageQuery pageQuery); + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java index b7535a88..32c89821 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java @@ -158,6 +158,14 @@ public class AttendanceUserGroupServiceImpl implements IAttendanceUserGroupServi return baseMapper.deleteByIds(ids) > 0; } + @Override + public List queryAttendPersonInfo(Date date) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.le(AttendanceUserGroup::getStartDate, date) + .ge(AttendanceUserGroup::getEndDate, date); + // 如果今天存在排班信息。那么处理排班人员信息 + return this.baseMapper.selectVoList(lqw); + } /** * 查询排班的班表视图 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlController.java index 54c80725..e2c62bc6 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAccessControlController.java @@ -139,4 +139,5 @@ public class SisAccessControlController extends BaseController { } + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventAttachmentsController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventAttachmentsController.java index a5191f88..aee89761 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventAttachmentsController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventAttachmentsController.java @@ -47,6 +47,16 @@ public class SisAlarmEventAttachmentsController extends BaseController { return sisAlarmEventAttachmentsService.queryPageList(bo, pageQuery); } + /** + * 查询【请填写功能名称】列表 + */ + @SaCheckPermission("system:alarmEventAttachments:list") + @GetMapping("/query/{alarmId}") + public R> queryListByAlarmId(@PathVariable("alarmId") String alarmId) { + return R.ok(sisAlarmEventAttachmentsService.queryListByAlarmId(alarmId)); + } + + /** * 导出【请填写功能名称】列表 */ @@ -66,7 +76,7 @@ public class SisAlarmEventAttachmentsController extends BaseController { @SaCheckPermission("system:alarmEventAttachments:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable("id") Long id) { + @PathVariable("id") Long id) { return R.ok(sisAlarmEventAttachmentsService.queryById(id)); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventProcessController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventProcessController.java new file mode 100644 index 00000000..516ea44f --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventProcessController.java @@ -0,0 +1,106 @@ +package org.dromara.sis.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.sis.domain.vo.SisAlarmEventProcessVo; +import org.dromara.sis.domain.bo.SisAlarmEventProcessBo; +import org.dromara.sis.service.ISisAlarmEventProcessService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 告警信息处理流程记录 + * 前端访问路由地址为:/sis/alarmEventProcess + * + * @author lxj + * @date 2025-08-17 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/alarmEventProcess") +public class SisAlarmEventProcessController extends BaseController { + + private final ISisAlarmEventProcessService sisAlarmEventProcessService; + + /** + * 查询告警信息处理流程记录列表 + */ + @SaCheckPermission("sis:alarmEventProcess:list") + @GetMapping("/list") + public TableDataInfo list(SisAlarmEventProcessBo bo, PageQuery pageQuery) { + return sisAlarmEventProcessService.queryPageList(bo, pageQuery); + } + + /** + * 导出告警信息处理流程记录列表 + */ + @SaCheckPermission("sis:alarmEventProcess:export") + @Log(title = "告警信息处理流程记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SisAlarmEventProcessBo bo, HttpServletResponse response) { + List list = sisAlarmEventProcessService.queryList(bo); + ExcelUtil.exportExcel(list, "告警信息处理流程记录", SisAlarmEventProcessVo.class, response); + } + + /** + * 获取告警信息处理流程记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("sis:alarmEventProcess:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(sisAlarmEventProcessService.queryById(id)); + } + + /** + * 新增告警信息处理流程记录 + */ + @SaCheckPermission("sis:alarmEventProcess:add") + @Log(title = "告警信息处理流程记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SisAlarmEventProcessBo bo) { + return toAjax(sisAlarmEventProcessService.insertByBo(bo)); + } + + /** + * 修改告警信息处理流程记录 + */ + @SaCheckPermission("sis:alarmEventProcess:edit") + @Log(title = "告警信息处理流程记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SisAlarmEventProcessBo bo) { + return toAjax(sisAlarmEventProcessService.updateByBo(bo)); + } + + /** + * 删除告警信息处理流程记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("sis:alarmEventProcess:remove") + @Log(title = "告警信息处理流程记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(sisAlarmEventProcessService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventsController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventsController.java index 97d28cfa..378b771a 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventsController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventsController.java @@ -1,26 +1,29 @@ package org.dromara.sis.controller; -import java.util.List; - -import lombok.RequiredArgsConstructor; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.mybatis.core.page.PageQuery; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.sis.domain.vo.SisAlarmEventsVo; -import org.dromara.sis.domain.bo.SisAlarmEventsBo; -import org.dromara.sis.service.ISisAlarmEventsService; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +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.sis.domain.bo.SisAlarmEventsBo; +import org.dromara.sis.domain.bo.alarm.AlarmAssignmentBo; +import org.dromara.sis.domain.bo.alarm.AlarmCompleteBo; +import org.dromara.sis.domain.vo.SisAlarmEventsVo; +import org.dromara.sis.service.ISisAlarmEventsService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * 告警 @@ -65,7 +68,7 @@ public class SisAlarmEventsController extends BaseController { @SaCheckPermission("sis:alarmEvents:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable("id") Long id) { + @PathVariable("id") Long id) { return R.ok(sisAlarmEventsService.queryById(id)); } @@ -103,4 +106,42 @@ public class SisAlarmEventsController extends BaseController { @PathVariable("ids") Long[] ids) { return toAjax(sisAlarmEventsService.deleteWithValidByIds(List.of(ids), true)); } + + + /** + * 告警任务指派 + */ + @SaCheckPermission("sis:alarmEvents:edit") + @Log(title = "告警任务指派", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/assignment") + public R taskAssignment(@Validated @RequestBody AlarmAssignmentBo bo) { + return toAjax(sisAlarmEventsService.taskAssignment(bo)); + } + + /** + * 告警任务指派 + */ + @SaCheckPermission("sis:alarmEvents:edit") + @Log(title = "告警任务指派", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/complete") + public R complete(@Validated @RequestBody AlarmCompleteBo bo) { + return toAjax(sisAlarmEventsService.complete(bo)); + } + + + /** + * 分页查询当前用的告警处理任务 + * + * @param bo 查询参数 + * @return 返回当前用户要处理的告警任务 + */ + @RepeatSubmit() + @PutMapping("/query/curr/assignment") + public TableDataInfo queryCurrAssignment(@Validated @RequestBody SisAlarmEventsBo bo, PageQuery pageQuery) { + return sisAlarmEventsService.queryCurrAssignment(bo, pageQuery); + } + + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEventProcess.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEventProcess.java new file mode 100644 index 00000000..c411c04a --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEventProcess.java @@ -0,0 +1,68 @@ +package org.dromara.sis.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.tenant.core.TenantEntity; + +import java.io.Serial; +import java.util.Date; + +/** + * 告警信息处理流程记录对象 sis_alarm_event_process + * + * @author lxj + * @date 2025-08-17 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sis_alarm_event_process") +public class SisAlarmEventProcess extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 告警记录主键id + */ + private Long alarmId; + + /** + * 指派人员id + */ + private Long solveId; + + /** + * 指派人员名称 + */ + private String solveName; + + /** + * 此次处理的状态码 + */ + private Integer state; + + /** + * 工单问题回复内容 + */ + private String workReply; + + /** + * 处理时间 + */ + private Date workReplyTime; + + /** + * 是否已接受任务 0:未接收;1:已接收 + */ + private Long receiveTaskTag; + + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEvents.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEvents.java index 7ac7a648..1eba9208 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEvents.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEvents.java @@ -72,12 +72,12 @@ public class SisAlarmEvents extends TenantEntity { /** * 开始处理时间 */ - private Date processSt; + private Date servBeginTime; /** * 结束处理时间 */ - private Date processEt; + private Date servEndTime; /** * 事件状态 @@ -89,4 +89,32 @@ public class SisAlarmEvents extends TenantEntity { */ private Long workOrderId; + /** + * 当前处理人id + */ + private Long solveId; + + /** + * 当前处理人名称 + */ + private String solveName; + + /** + * 任务接受时间 + */ + private Date acceptTime; + + /** + * 任务处理时间 + */ + private Date solveTime; + + + /** + * 任务完成时间 + */ + private Date finishTime; + + private String description; + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventProcessBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventProcessBo.java new file mode 100644 index 00000000..cdb672d8 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventProcessBo.java @@ -0,0 +1,70 @@ +package org.dromara.sis.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.sis.domain.SisAlarmEventProcess; + +import java.util.Date; + +/** + * 告警信息处理流程记录业务对象 sis_alarm_event_process + * + * @author lxj + * @date 2025-08-17 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SisAlarmEventProcess.class, reverseConvertGenerate = false) +public class SisAlarmEventProcessBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 告警记录主键id + */ + @NotNull(message = "告警记录主键id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long alarmId; + + /** + * 指派人员id + */ + @NotNull(message = "指派人员id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long solveId; + + /** + * 指派人员名称 + */ + private String solveName; + + /** + * 工单问题回复内容 + */ + private String workReply; + + /** + * 处理时间 + */ + private Date workReplyTime; + + /** + * 是否已接受任务 0:未接收;1:已接收 + */ + @NotNull(message = "是否已接受任务 0:未接收;1:已接收不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long receiveTaskTag; + + /** + * 此次处理的状态码 + */ + private Integer state; + + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventsBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventsBo.java index caf430bf..d2252b99 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventsBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventsBo.java @@ -73,12 +73,12 @@ public class SisAlarmEventsBo extends BaseEntity { /** * 开始处理时间 */ - private Date processSt; + private Date servBeginTime; /** * 结束处理时间 */ - private Date processEt; + private Date servEndTime; /** @@ -91,4 +91,31 @@ public class SisAlarmEventsBo extends BaseEntity { */ private Long workOrderId; + /** + * 当前处理人id + */ + private Long solveId; + + /** + * 当前处理人名称 + */ + private String solveName; + + /** + * 任务接受时间 + */ + private Date acceptTime; + + /** + * 任务处理时间 + */ + private Date solveTime; + + + /** + * 任务完成时间 + */ + private Date finishTime; + + private String description; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmAssignmentBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmAssignmentBo.java new file mode 100644 index 00000000..cbb93f44 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmAssignmentBo.java @@ -0,0 +1,51 @@ +package org.dromara.sis.domain.bo.alarm; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * 任务指派参数 + * + * @author lxj + */ +@Data +public class AlarmAssignmentBo { + + /** + * 告警任务id + */ + @NotNull + private Long alarmId; + + + /** + * 处理人id + */ + @NotNull + private Long solveId; + + /** + * 指派人员信息 + */ + private String solveName; + + /** + * 指派备注 + */ + private String remark; + + /** + * 任务指派操作人员id + */ + private Long modifyUserId; + + /** + * 任务指派操作人员姓名 + */ + private String modifyUserName; + + /** + * 任务指派操作人员部门id + */ + private Long modifyDeptId; +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmCompleteBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmCompleteBo.java new file mode 100644 index 00000000..f5deaa1d --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmCompleteBo.java @@ -0,0 +1,29 @@ +package org.dromara.sis.domain.bo.alarm; + + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; + +@Data +public class AlarmCompleteBo { + + /** + * 告警任务id + */ + @NotNull + private Long alarmId; + + /** + * 任务备注信息 + */ + private String remark; + + /** + * 附件信息(任务完成上传的图片或者文件) + */ + private List attachments; + + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventAttachmentsVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventAttachmentsVo.java index 0cf84127..f1b965aa 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventAttachmentsVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventAttachmentsVo.java @@ -4,6 +4,8 @@ import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; import org.dromara.sis.domain.SisAlarmEventAttachments; import java.io.Serial; @@ -42,6 +44,10 @@ public class SisAlarmEventAttachmentsVo implements Serializable { @ExcelProperty(value = "时间图片id") private Long ossId; + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "ossId") + private String imagePath; + + /** * 1:图片,2:文件;3视频 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventProcessVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventProcessVo.java new file mode 100644 index 00000000..a3180795 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventProcessVo.java @@ -0,0 +1,80 @@ +package org.dromara.sis.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.sis.domain.SisAlarmEventProcess; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 告警信息处理流程记录视图对象 sis_alarm_event_process + * + * @author lxj + * @date 2025-08-17 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SisAlarmEventProcess.class) +public class SisAlarmEventProcessVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 告警记录主键id + */ + @ExcelProperty(value = "告警记录主键id") + private Long alarmId; + + /** + * 指派人员id + */ + @ExcelProperty(value = "指派人员id") + private Long solveId; + + /** + * 指派人员名称 + */ + @ExcelProperty(value = "指派人员名称") + private String solveName; + + /** + * 工单问题回复内容 + */ + @ExcelProperty(value = "工单问题回复内容") + private String workReply; + + /** + * 处理时间 + */ + @ExcelProperty(value = "处理时间") + private Date workReplyTime; + + /** + * 是否已接受任务 0:未接收;1:已接收 + */ + @ExcelProperty(value = "是否已接受任务 0:未接收;1:已接收") + private Long receiveTaskTag; + + /** + * 此次处理的状态码 + */ + private Integer state; + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventsVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventsVo.java index 6f79c62e..ef5d4766 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventsVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventsVo.java @@ -92,12 +92,12 @@ public class SisAlarmEventsVo implements Serializable { /** * 开始处理时间 */ - private Date processSt; + private Date servBeginTime; /** * 结束处理时间 */ - private Date processEt; + private Date servEndTime; /** * 事件状态 @@ -111,4 +111,31 @@ public class SisAlarmEventsVo implements Serializable { * 工单id */ private Long workOrderId; + + /** + * 当前处理人id + */ + private Long solveId; + + /** + * 当前处理人名称 + */ + private String solveName; + + /** + * 任务接受时间 + */ + private Date acceptTime; + + /** + * 任务处理时间 + */ + private Date solveTime; + + /** + * 任务完成时间 + */ + private Date finishTime; + + private String description; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAlarmEventProcessMapper.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAlarmEventProcessMapper.java new file mode 100644 index 00000000..01ee9666 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisAlarmEventProcessMapper.java @@ -0,0 +1,15 @@ +package org.dromara.sis.mapper; + +import org.dromara.sis.domain.SisAlarmEventProcess; +import org.dromara.sis.domain.vo.SisAlarmEventProcessVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 告警信息处理流程记录Mapper接口 + * + * @author lxj + * @date 2025-08-17 + */ +public interface SisAlarmEventProcessMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventAttachmentsService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventAttachmentsService.java index ec99b37d..e47f8dce 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventAttachmentsService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventAttachmentsService.java @@ -75,4 +75,11 @@ public interface ISisAlarmEventAttachmentsService { */ Boolean batchInsert(List ls); + /** + * 通过告警id 查询告警附件信息 + * @param alarmId 告警id + * @return 返回附件列表 + */ + List queryListByAlarmId(String alarmId); + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventProcessService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventProcessService.java new file mode 100644 index 00000000..c3e886ee --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventProcessService.java @@ -0,0 +1,77 @@ +package org.dromara.sis.service; + +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.sis.domain.SisAlarmEventProcess; +import org.dromara.sis.domain.bo.SisAlarmEventProcessBo; +import org.dromara.sis.domain.vo.SisAlarmEventProcessVo; + +import java.util.Collection; +import java.util.List; + +/** + * 告警信息处理流程记录Service接口 + * + * @author lxj + * @date 2025-08-17 + */ +public interface ISisAlarmEventProcessService { + + /** + * 查询告警信息处理流程记录 + * + * @param id 主键 + * @return 告警信息处理流程记录 + */ + SisAlarmEventProcessVo queryById(Long id); + + /** + * 分页查询告警信息处理流程记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 告警信息处理流程记录分页列表 + */ + TableDataInfo queryPageList(SisAlarmEventProcessBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的告警信息处理流程记录列表 + * + * @param bo 查询条件 + * @return 告警信息处理流程记录列表 + */ + List queryList(SisAlarmEventProcessBo bo); + + /** + * 新增告警信息处理流程记录 + * + * @param bo 告警信息处理流程记录 + * @return 是否新增成功 + */ + Boolean insertByBo(SisAlarmEventProcessBo bo); + + /** + * 修改告警信息处理流程记录 + * + * @param bo 告警信息处理流程记录 + * @return 是否修改成功 + */ + Boolean updateByBo(SisAlarmEventProcessBo bo); + + /** + * 校验并批量删除告警信息处理流程记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 新增处理信息 + * + * @param process 处理信息 + * @return 返回是否写入成功 + */ + Boolean insert(SisAlarmEventProcess process); +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java index 5184d126..121a2902 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java @@ -3,6 +3,8 @@ package org.dromara.sis.service; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.sis.domain.bo.SisAlarmEventsBo; +import org.dromara.sis.domain.bo.alarm.AlarmAssignmentBo; +import org.dromara.sis.domain.bo.alarm.AlarmCompleteBo; import org.dromara.sis.domain.vo.SisAlarmEventsVo; import java.util.Collection; @@ -71,4 +73,25 @@ public interface ISisAlarmEventsService { */ void createAlarmRecord(String deviceIp, Integer level, Integer type, String msg, byte[] smallImg, byte[] bigImg); + /** + * 任务分配操作 + * @param bo 分配参数 + * @return 返回是否分配成功 + */ + Boolean taskAssignment(AlarmAssignmentBo bo); + + /** + * 查询当前用户的告警处理任务 + * @param bo 查询参数 + * @param pageQuery 分页参数 + * @return 返回任务列表 + */ + TableDataInfo queryCurrAssignment(SisAlarmEventsBo bo, PageQuery pageQuery); + + /** + * 任务完成 + * @param bo 任务完成参数 + * @return 返回是否成功 + */ + Boolean complete(AlarmCompleteBo bo); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventAttachmentsServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventAttachmentsServiceImpl.java index 1440804d..f355b8af 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventAttachmentsServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventAttachmentsServiceImpl.java @@ -135,4 +135,12 @@ public class SisAlarmEventAttachmentsServiceImpl implements ISisAlarmEventAttach public Boolean batchInsert(List ls) { return baseMapper.insertBatch(ls); } + + + @Override + public List queryListByAlarmId(String alarmId) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SisAlarmEventAttachments::getEventId, alarmId); + return baseMapper.selectVoList(lqw); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventProcessServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventProcessServiceImpl.java new file mode 100644 index 00000000..486466b1 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventProcessServiceImpl.java @@ -0,0 +1,142 @@ +package org.dromara.sis.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +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.sis.domain.SisAlarmEventProcess; +import org.dromara.sis.domain.bo.SisAlarmEventProcessBo; +import org.dromara.sis.domain.vo.SisAlarmEventProcessVo; +import org.dromara.sis.mapper.SisAlarmEventProcessMapper; +import org.dromara.sis.service.ISisAlarmEventProcessService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 告警信息处理流程记录Service业务层处理 + * + * @author lxj + * @date 2025-08-17 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class SisAlarmEventProcessServiceImpl implements ISisAlarmEventProcessService { + + private final SisAlarmEventProcessMapper baseMapper; + + /** + * 查询告警信息处理流程记录 + * + * @param id 主键 + * @return 告警信息处理流程记录 + */ + @Override + public SisAlarmEventProcessVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询告警信息处理流程记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 告警信息处理流程记录分页列表 + */ + @Override + public TableDataInfo queryPageList(SisAlarmEventProcessBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的告警信息处理流程记录列表 + * + * @param bo 查询条件 + * @return 告警信息处理流程记录列表 + */ + @Override + public List queryList(SisAlarmEventProcessBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SisAlarmEventProcessBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(SisAlarmEventProcess::getId); + lqw.eq(bo.getAlarmId() != null, SisAlarmEventProcess::getAlarmId, bo.getAlarmId()); + lqw.eq(bo.getSolveId() != null, SisAlarmEventProcess::getSolveId, bo.getSolveId()); + lqw.like(StringUtils.isNotBlank(bo.getSolveName()), SisAlarmEventProcess::getSolveName, bo.getSolveName()); + lqw.eq(StringUtils.isNotBlank(bo.getWorkReply()), SisAlarmEventProcess::getWorkReply, bo.getWorkReply()); + lqw.eq(bo.getWorkReplyTime() != null, SisAlarmEventProcess::getWorkReplyTime, bo.getWorkReplyTime()); + lqw.eq(bo.getReceiveTaskTag() != null, SisAlarmEventProcess::getReceiveTaskTag, bo.getReceiveTaskTag()); + return lqw; + } + + /** + * 新增告警信息处理流程记录 + * + * @param bo 告警信息处理流程记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(SisAlarmEventProcessBo bo) { + SisAlarmEventProcess add = MapstructUtils.convert(bo, SisAlarmEventProcess.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改告警信息处理流程记录 + * + * @param bo 告警信息处理流程记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SisAlarmEventProcessBo bo) { + SisAlarmEventProcess update = MapstructUtils.convert(bo, SisAlarmEventProcess.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SisAlarmEventProcess entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除告警信息处理流程记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public Boolean insert(SisAlarmEventProcess process) { + return baseMapper.insert(process) > 0; + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java index 6810a8cb..507769a7 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java @@ -1,6 +1,9 @@ package org.dromara.sis.service.impl; import cn.dev33.satoken.context.mock.SaTokenContextMockUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -11,20 +14,28 @@ 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.common.satoken.utils.LoginHelper; +import org.dromara.property.api.RemoteAttendanceService; +import org.dromara.property.api.domain.vo.RemoteAttendanceUserGroupVo; import org.dromara.resource.api.RemoteFileService; import org.dromara.resource.api.domain.RemoteFile; import org.dromara.sis.domain.SisAlarmEventAttachments; +import org.dromara.sis.domain.SisAlarmEventProcess; import org.dromara.sis.domain.SisAlarmEvents; import org.dromara.sis.domain.SisDeviceManage; import org.dromara.sis.domain.bo.SisAlarmEventsBo; +import org.dromara.sis.domain.bo.alarm.AlarmAssignmentBo; +import org.dromara.sis.domain.bo.alarm.AlarmCompleteBo; import org.dromara.sis.domain.enums.AlarmStatus; import org.dromara.sis.domain.enums.EventBigTypeEnum; import org.dromara.sis.domain.enums.EventSmallTypeEnum; import org.dromara.sis.domain.vo.SisAlarmEventsVo; import org.dromara.sis.mapper.SisAlarmEventsMapper; import org.dromara.sis.service.ISisAlarmEventAttachmentsService; +import org.dromara.sis.service.ISisAlarmEventProcessService; import org.dromara.sis.service.ISisAlarmEventsService; import org.dromara.sis.service.ISisDeviceManageService; +import org.dromara.system.api.model.LoginUser; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -45,9 +56,12 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { private final SisAlarmEventsMapper baseMapper; private final ISisDeviceManageService deviceManageService; private final ISisAlarmEventAttachmentsService alarmEventAttachmentsService; + private final ISisAlarmEventProcessService alarmEventProcessService; @DubboReference private RemoteFileService remoteFileService; + @DubboReference + private RemoteAttendanceService remoteAttendanceService; /** * 查询告警 @@ -91,6 +105,7 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByAsc(SisAlarmEvents::getId); lqw.eq(bo.getLevel() != null, SisAlarmEvents::getLevel, bo.getLevel()); + lqw.eq(bo.getSolveId() != null, SisAlarmEvents::getSolveId, bo.getSolveId()); lqw.eq(StringUtils.isNotBlank(bo.getDeviceIp()), SisAlarmEvents::getDeviceIp, bo.getDeviceIp()); lqw.like(StringUtils.isNotBlank(bo.getDeviceName()), SisAlarmEvents::getDeviceName, bo.getDeviceName()); lqw.eq(bo.getDeviceGroupId() != null, SisAlarmEvents::getDeviceGroupId, bo.getDeviceGroupId()); @@ -162,18 +177,24 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { return; } // 生成时间信息 + Date now = new Date(); SisAlarmEvents alarmEvents = new SisAlarmEvents(); alarmEvents.setBigType(EventBigTypeEnum.EQUIPMENT_UP.getCode()); - //TODO 处理上报小类型 alarmEvents.setSmallType(EventSmallTypeEnum.EQP_REPORT_SBSB.getCode()); alarmEvents.setLevel(Long.valueOf(level)); alarmEvents.setDeviceIp(deviceIp); alarmEvents.setDeviceName(sisDeviceManage.getDeviceName()); alarmEvents.setDeviceGroupId(sisDeviceManage.getId()); - alarmEvents.setReportTime(new Date()); + alarmEvents.setReportTime(now); alarmEvents.setState(AlarmStatus.REPORTED.getCode()); alarmEvents.setTenantId(sisDeviceManage.getTenantId()); alarmEvents.setCreateDept(sisDeviceManage.getCreateDept()); + + // 默认服务时间为2个小时 + alarmEvents.setServBeginTime(now); + alarmEvents.setServEndTime(DateUtil.offset(now, DateField.HOUR, 2)); + + int insert = this.baseMapper.insert(alarmEvents); log.info("写入报警事件表完成,num={}", insert); // 写入附件表 @@ -200,4 +221,100 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { attachments.setCreateDept(sisDeviceManage.getCreateDept()); return attachments; } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean taskAssignment(AlarmAssignmentBo bo) { + // 验证工单状态 + SisAlarmEventsVo sisAlarmEventsVo = this.baseMapper.selectVoById(bo.getAlarmId()); + if (sisAlarmEventsVo == null) { + throw new RuntimeException("工单信息不存在!"); + } + if (sisAlarmEventsVo.getState().equals(AlarmStatus.REPORTED.getCode())) { + throw new RuntimeException("当前工单已指派,请刷新后重新指派!"); + } + + Date now = new Date(); + List remoteAttendanceUserGroupVos = remoteAttendanceService.queryAttendPersonInfo(now); + if (CollUtil.isEmpty(remoteAttendanceUserGroupVos)) { + throw new RuntimeException("当前排无排班人员."); + } + // 验证当前人员是否为排班人员 + RemoteAttendanceUserGroupVo attendInfo = null; + for (RemoteAttendanceUserGroupVo item : remoteAttendanceUserGroupVos) { + if (bo.getSolveId().equals(item.getEmployeeId())) { + attendInfo = item; + break; + } + } + if (attendInfo == null) { + throw new RuntimeException("当前人员不在今天排班计划内."); + } + + SisAlarmEvents events = new SisAlarmEvents(); + events.setId(sisAlarmEventsVo.getId()); + sisAlarmEventsVo.setSolveId(bo.getAlarmId()); + sisAlarmEventsVo.setSolveName(bo.getSolveName()); + sisAlarmEventsVo.setSolveTime(now); + sisAlarmEventsVo.setState(AlarmStatus.CONFIRMED.getCode()); + this.baseMapper.updateById(events); + // 写入处理流程 + SisAlarmEventProcess process = new SisAlarmEventProcess(); + process.setAlarmId(sisAlarmEventsVo.getId()); + process.setSolveId(attendInfo.getEmployeeId()); + process.setSolveName(attendInfo.getEmployeeName()); + process.setWorkReply(bo.getRemark()); + process.setState(events.getState()); + process.setWorkReplyTime(now); + process.setReceiveTaskTag(0L); + Boolean insert = alarmEventProcessService.insert(process); + log.info("事件处理信息写入完成,result= {}", insert); + //TODO 推送到执行客户端 + return true; + } + + @Override + public TableDataInfo queryCurrAssignment(SisAlarmEventsBo bo, PageQuery pageQuery) { + LoginUser loginUser = LoginHelper.getLoginUser(); + bo.setSolveId(loginUser.getUserId()); + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Boolean complete(AlarmCompleteBo bo) { + LoginUser loginUser = LoginHelper.getLoginUser(); + // 验证工单状态 + SisAlarmEventsVo sisAlarmEventsVo = this.baseMapper.selectVoById(bo.getAlarmId()); + if (sisAlarmEventsVo == null) { + throw new RuntimeException("工单信息不存在!"); + } + if (sisAlarmEventsVo.getState().equals(AlarmStatus.REPORTED.getCode())) { + throw new RuntimeException("当前工单已指派,请刷新后重新指派!"); + } + Date now = new Date(); + SisAlarmEvents events = new SisAlarmEvents(); + events.setId(sisAlarmEventsVo.getId()); + sisAlarmEventsVo.setSolveId(bo.getAlarmId()); + sisAlarmEventsVo.setFinishTime(now); + sisAlarmEventsVo.setSolveId(loginUser.getUserId()); + sisAlarmEventsVo.setSolveName(loginUser.getUsername()); + sisAlarmEventsVo.setState(AlarmStatus.RESOLVED.getCode()); + this.baseMapper.updateById(events); + + // 写入处理流程 + SisAlarmEventProcess process = new SisAlarmEventProcess(); + process.setAlarmId(sisAlarmEventsVo.getId()); + process.setSolveId(loginUser.getUserId()); + process.setSolveName(loginUser.getUsername()); + process.setWorkReply(bo.getRemark()); + process.setState(events.getState()); + process.setWorkReplyTime(now); + process.setReceiveTaskTag(0L); + Boolean insert = alarmEventProcessService.insert(process); + log.info("事件处理信息写入完成,result= {}", insert); + return true; + } } diff --git a/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAlarmEventProcessMapper.xml b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAlarmEventProcessMapper.xml new file mode 100644 index 00000000..42485eeb --- /dev/null +++ b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAlarmEventProcessMapper.xml @@ -0,0 +1,7 @@ + + + + + From 5e164ae2ac7bfbc353000e55dd94d1b0fc62c90a Mon Sep 17 00:00:00 2001 From: 15683799673 Date: Mon, 18 Aug 2025 09:07:17 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E5=A4=84=E7=90=86?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/system/api/RemoteDeptService.java | 6 +++ .../AttendanceUserGroupController.java | 1 - .../dubbo/RemoteAttendanceServiceImpl.java | 4 +- .../impl/AttendanceUserGroupServiceImpl.java | 15 ++++++- .../controller/SisAlarmEventsController.java | 26 ++++++++++-- .../dromara/sis/domain/SisAlarmEvents.java | 10 +++++ .../sis/domain/bo/SisAlarmEventsBo.java | 5 +++ .../domain/bo/alarm/AlarmAssignmentBo.java | 11 ++++- .../sis/domain/vo/SisAlarmEventsVo.java | 25 +++++++---- .../sis/service/ISisAlarmEventsService.java | 9 ++++ .../impl/SisAlarmEventsServiceImpl.java | 42 +++++++++++++------ .../system/dubbo/RemoteDeptServiceImpl.java | 6 +++ 12 files changed, 129 insertions(+), 31 deletions(-) diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java index 2ece9281..bd27cbbc 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java @@ -34,4 +34,10 @@ public interface RemoteDeptService { */ List selectDeptsByList(); + /** + * 根据部门id查询部门信息 + * @param deptId 部门id + * @return 返回部门信息 + */ + RemoteDeptVo selectDeptVoById(Long deptId); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceUserGroupController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceUserGroupController.java index 9410a024..a933eb1c 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceUserGroupController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceUserGroupController.java @@ -120,7 +120,6 @@ public class AttendanceUserGroupController extends BaseController { * * @return 返回排班人员信息 */ - @RepeatSubmit() @GetMapping("/query/currentDay") public R> queryCurrentSchedu() { return R.ok(attendanceUserGroupService.queryAttendPersonInfo(new Date())); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteAttendanceServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteAttendanceServiceImpl.java index c1db0d99..c3955a05 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteAttendanceServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteAttendanceServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.property.dubbo; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import lombok.RequiredArgsConstructor; import org.apache.dubbo.config.annotation.DubboService; @@ -28,10 +29,9 @@ public class RemoteAttendanceServiceImpl implements RemoteAttendanceService { public List queryAttendPersonInfo(Date date) { List ls = attendanceUserGroupService.queryAttendPersonInfo(date); if (CollUtil.isNotEmpty(ls)) { - return MapstructUtils.convert(ls, RemoteAttendanceUserGroupVo.class); + return BeanUtil.copyToList(ls, RemoteAttendanceUserGroupVo.class); } return null; } - } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java index d7030487..83a0b007 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.property.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -17,6 +18,7 @@ import org.dromara.property.mapper.*; import org.dromara.property.service.IAttendanceUserGroupService; import org.dromara.system.api.RemoteDeptService; import org.dromara.system.api.RemoteUserService; +import org.dromara.system.api.domain.vo.RemoteDeptVo; import org.dromara.system.api.domain.vo.RemoteUserVo; import org.springframework.stereotype.Service; @@ -164,7 +166,18 @@ public class AttendanceUserGroupServiceImpl implements IAttendanceUserGroupServi lqw.le(AttendanceUserGroup::getStartDate, date) .ge(AttendanceUserGroup::getEndDate, date); // 如果今天存在排班信息。那么处理排班人员信息 - return this.baseMapper.selectVoList(lqw); + List attendanceUserGroupVos = this.baseMapper.selectVoList(lqw); + if (CollUtil.isNotEmpty(attendanceUserGroupVos)) { + attendanceUserGroupVos.forEach(attendanceUserGroupVo -> { + // 查询排班人员信息 + RemoteUserVo remoteUserVo = remoteUserService.getUserInfoById(attendanceUserGroupVo.getEmployeeId()); + attendanceUserGroupVo.setRemoteUserVo(remoteUserVo); + // todo 当表冗余了部门信息,以下反查操作可以去掉 + RemoteDeptVo dept = remoteDeptService.selectDeptVoById(attendanceUserGroupVo.getDeptId()); + attendanceUserGroupVo.setDeptName(dept.getDeptName()); + }); + } + return attendanceUserGroupVos; } /** diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventsController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventsController.java index 378b771a..3c164ae2 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventsController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAlarmEventsController.java @@ -14,12 +14,14 @@ 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.satoken.utils.LoginHelper; import org.dromara.common.web.core.BaseController; import org.dromara.sis.domain.bo.SisAlarmEventsBo; import org.dromara.sis.domain.bo.alarm.AlarmAssignmentBo; import org.dromara.sis.domain.bo.alarm.AlarmCompleteBo; import org.dromara.sis.domain.vo.SisAlarmEventsVo; import org.dromara.sis.service.ISisAlarmEventsService; +import org.dromara.system.api.model.LoginUser; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -49,6 +51,18 @@ public class SisAlarmEventsController extends BaseController { return sisAlarmEventsService.queryPageList(bo, pageQuery); } + /** + * 查询告警列表 + */ + @SaCheckPermission("sis:alarmEvents:list") + @GetMapping("/list/curr") + public TableDataInfo listCurr(SisAlarmEventsBo bo, PageQuery pageQuery) { + LoginUser loginUser = LoginHelper.getLoginUser(); + bo.setSolveId(loginUser.getUserId()); + return sisAlarmEventsService.queryPageListCurr(bo, pageQuery); + } + + /** * 导出告警列表 */ @@ -110,22 +124,26 @@ public class SisAlarmEventsController extends BaseController { /** * 告警任务指派 + * + * @param bo 指派参数 */ @SaCheckPermission("sis:alarmEvents:edit") @Log(title = "告警任务指派", businessType = BusinessType.UPDATE) @RepeatSubmit() - @PutMapping("/assignment") + @PostMapping("/assignment") public R taskAssignment(@Validated @RequestBody AlarmAssignmentBo bo) { return toAjax(sisAlarmEventsService.taskAssignment(bo)); } /** - * 告警任务指派 + * 告警处理完成 + * + * @param bo 完成参数 */ @SaCheckPermission("sis:alarmEvents:edit") - @Log(title = "告警任务指派", businessType = BusinessType.UPDATE) + @Log(title = "告警处理完成", businessType = BusinessType.UPDATE) @RepeatSubmit() - @PutMapping("/complete") + @PostMapping("/complete") public R complete(@Validated @RequestBody AlarmCompleteBo bo) { return toAjax(sisAlarmEventsService.complete(bo)); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEvents.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEvents.java index 1eba9208..bda09312 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEvents.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEvents.java @@ -99,6 +99,16 @@ public class SisAlarmEvents extends TenantEntity { */ private String solveName; + /** + * 处理人电话 + */ + private String solvePhone; + + /** + * 处理人邮箱 + */ + private String solveEmail; + /** * 任务接受时间 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventsBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventsBo.java index d2252b99..b2497060 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventsBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventsBo.java @@ -10,6 +10,7 @@ import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.sis.domain.SisAlarmEvents; import java.util.Date; +import java.util.List; /** * 告警业务对象 sis_alarm_events @@ -86,6 +87,10 @@ public class SisAlarmEventsBo extends BaseEntity { */ private Integer state; + /** + * 状态列表 + */ + private List states; /** * 工单id */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmAssignmentBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmAssignmentBo.java index cbb93f44..23099980 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmAssignmentBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/alarm/AlarmAssignmentBo.java @@ -17,7 +17,6 @@ public class AlarmAssignmentBo { @NotNull private Long alarmId; - /** * 处理人id */ @@ -29,6 +28,16 @@ public class AlarmAssignmentBo { */ private String solveName; + /** + * 处理人电话 + */ + private String solvePhone; + + /** + * 处理人邮箱 + */ + private String solveEmail; + /** * 指派备注 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventsVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventsVo.java index ef5d4766..5c82c3a7 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventsVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventsVo.java @@ -1,23 +1,18 @@ package org.dromara.sis.domain.vo; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; import org.dromara.common.translation.annotation.Translation; import org.dromara.common.translation.constant.TransConstant; import org.dromara.sis.domain.SisAlarmEvents; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; - /** * 告警视图对象 sis_alarm_events * @@ -122,6 +117,16 @@ public class SisAlarmEventsVo implements Serializable { */ private String solveName; + /** + * 处理人电话 + */ + private String solvePhone; + + /** + * 处理人邮箱 + */ + private String solveEmail; + /** * 任务接受时间 */ @@ -132,6 +137,8 @@ public class SisAlarmEventsVo implements Serializable { */ private Date solveTime; + private Date createTime; + /** * 任务完成时间 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java index 121a2902..768ccfff 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java @@ -35,6 +35,13 @@ public interface ISisAlarmEventsService { */ TableDataInfo queryPageList(SisAlarmEventsBo bo, PageQuery pageQuery); + /** + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 告警分页列表 + */ + TableDataInfo queryPageListCurr(SisAlarmEventsBo bo, PageQuery pageQuery); + /** * 查询符合条件的告警列表 * @@ -94,4 +101,6 @@ public interface ISisAlarmEventsService { * @return 返回是否成功 */ Boolean complete(AlarmCompleteBo bo); + + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java index 507769a7..faf78855 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java @@ -2,6 +2,7 @@ package org.dromara.sis.service.impl; import cn.dev33.satoken.context.mock.SaTokenContextMockUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -40,7 +41,10 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.List; /** * 告警Service业务层处理 @@ -84,6 +88,15 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { @Override public TableDataInfo queryPageList(SisAlarmEventsBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); + lqw.orderByDesc(SisAlarmEvents::getId); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public TableDataInfo queryPageListCurr(SisAlarmEventsBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + lqw.orderByDesc(SisAlarmEvents::getSolveTime); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); } @@ -101,11 +114,11 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { } private LambdaQueryWrapper buildQueryWrapper(SisAlarmEventsBo bo) { - Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.orderByAsc(SisAlarmEvents::getId); lqw.eq(bo.getLevel() != null, SisAlarmEvents::getLevel, bo.getLevel()); lqw.eq(bo.getSolveId() != null, SisAlarmEvents::getSolveId, bo.getSolveId()); + lqw.eq(bo.getState() != null, SisAlarmEvents::getState, bo.getState()); + lqw.in(CollectionUtil.isNotEmpty(bo.getStates()), SisAlarmEvents::getState, bo.getStates()); lqw.eq(StringUtils.isNotBlank(bo.getDeviceIp()), SisAlarmEvents::getDeviceIp, bo.getDeviceIp()); lqw.like(StringUtils.isNotBlank(bo.getDeviceName()), SisAlarmEvents::getDeviceName, bo.getDeviceName()); lqw.eq(bo.getDeviceGroupId() != null, SisAlarmEvents::getDeviceGroupId, bo.getDeviceGroupId()); @@ -230,7 +243,7 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { if (sisAlarmEventsVo == null) { throw new RuntimeException("工单信息不存在!"); } - if (sisAlarmEventsVo.getState().equals(AlarmStatus.REPORTED.getCode())) { + if (!sisAlarmEventsVo.getState().equals(AlarmStatus.REPORTED.getCode())) { throw new RuntimeException("当前工单已指派,请刷新后重新指派!"); } @@ -253,10 +266,13 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { SisAlarmEvents events = new SisAlarmEvents(); events.setId(sisAlarmEventsVo.getId()); - sisAlarmEventsVo.setSolveId(bo.getAlarmId()); - sisAlarmEventsVo.setSolveName(bo.getSolveName()); - sisAlarmEventsVo.setSolveTime(now); - sisAlarmEventsVo.setState(AlarmStatus.CONFIRMED.getCode()); + events.setSolveId(bo.getSolveId()); + events.setSolveName(bo.getSolveName()); + events.setSolvePhone(bo.getSolvePhone()); + events.setSolveEmail(bo.getSolveEmail()); + events.setSolveName(bo.getSolveName()); + events.setSolveTime(now); + events.setState(AlarmStatus.CONFIRMED.getCode()); this.baseMapper.updateById(events); // 写入处理流程 SisAlarmEventProcess process = new SisAlarmEventProcess(); @@ -297,11 +313,11 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { Date now = new Date(); SisAlarmEvents events = new SisAlarmEvents(); events.setId(sisAlarmEventsVo.getId()); - sisAlarmEventsVo.setSolveId(bo.getAlarmId()); - sisAlarmEventsVo.setFinishTime(now); - sisAlarmEventsVo.setSolveId(loginUser.getUserId()); - sisAlarmEventsVo.setSolveName(loginUser.getUsername()); - sisAlarmEventsVo.setState(AlarmStatus.RESOLVED.getCode()); + events.setSolveId(bo.getAlarmId()); + events.setFinishTime(now); + events.setSolveId(loginUser.getUserId()); + events.setSolveName(loginUser.getUsername()); + events.setState(AlarmStatus.RESOLVED.getCode()); this.baseMapper.updateById(events); // 写入处理流程 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java index 892d4692..56609546 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java @@ -3,6 +3,7 @@ package org.dromara.system.dubbo; import cn.hutool.core.bean.BeanUtil; import lombok.RequiredArgsConstructor; import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.common.core.utils.MapstructUtils; import org.dromara.system.api.RemoteDeptService; import org.dromara.system.api.domain.vo.RemoteDeptVo; import org.dromara.system.domain.vo.SysDeptVo; @@ -57,4 +58,9 @@ public class RemoteDeptServiceImpl implements RemoteDeptService { return BeanUtil.copyToList(list, RemoteDeptVo.class); } + @Override + public RemoteDeptVo selectDeptVoById(Long deptId) { + SysDeptVo sysDeptVo = sysDeptService.selectDeptById(deptId); + return BeanUtil.copyProperties(sysDeptVo, RemoteDeptVo.class); + } } From be5d00040d77d79f2c251a0927eaf6e67efd35fa Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Mon, 18 Aug 2025 11:30:01 +0800 Subject: [PATCH 05/10] =?UTF-8?q?refactor(sis):=20=E5=B0=86=20remoteHWId?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E4=B8=BA=20remoteHwId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/dromara/sis/domain/SisPersonLibImg.java | 2 +- .../java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java | 4 +--- .../java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java | 3 +-- .../java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java | 2 +- .../dromara/sis/service/impl/SisPersonLibImgServiceImpl.java | 4 ++-- 5 files changed, 6 insertions(+), 9 deletions(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java index 9174de0d..30cee049 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java @@ -71,7 +71,7 @@ public class SisPersonLibImg extends TenantEntity { /** * 远程库图像ID */ - private Long remoteHWId; + private Long remoteHwId; /** * 入驻员工id diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java index 3b118a91..7a407e27 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java @@ -9,8 +9,6 @@ import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; -import java.util.Collection; - /** * 人像信息业务对象 tb_person_lib_img * @@ -79,7 +77,7 @@ public class SisPersonLibImgBo extends BaseEntity { /** * 远程库图像ID */ - private Long remoteHWId; + private Long remoteHwId; /** * 入驻员工id diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java index cfb82d28..0d9ac89a 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java @@ -8,7 +8,6 @@ import org.dromara.sis.domain.SisPersonLibImg; import java.io.Serial; import java.io.Serializable; -import java.util.Collection; /** @@ -83,7 +82,7 @@ public class SisPersonLibImgVo implements Serializable { * 远程库图像ID */ @ExcelProperty(value = "远程库图像ID") - private Long remoteHWId; + private Long remoteHwId; /** * 入驻员工id diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java index fdf22fe0..e524d900 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java @@ -93,7 +93,7 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { @Override public Long queryHuaweiBoxIdByImgMd5(String imgMd5) { SisPersonLibImgVo vo = sisPersonLibImgService.queryByImgMd5(imgMd5); - return vo != null ? vo.getRemoteHWId() : null; + return vo != null ? vo.getRemoteHwId() : null; } /** diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java index def0feb6..5ce974c4 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java @@ -143,7 +143,7 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { @Transactional(rollbackFor = Exception.class) public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { List list = this.queryListByIds(ids); - Collection remoteIds = list.stream().map(SisPersonLibImgVo::getRemoteHWId).toList(); + Collection remoteIds = list.stream().map(SisPersonLibImgVo::getRemoteHwId).toList(); if (!remoteIds.isEmpty()) { Boolean flag = huaWeiBoxApi.deletePerson(remoteIds); @@ -180,7 +180,7 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(SisPersonLibImg::getResidentPersonId, personId); SisPersonLibImg update = new SisPersonLibImg(); - update.setRemoteHWId(huaweiBoxId); + update.setRemoteHwId(huaweiBoxId); update.setImgMd5Value(imgMd5); return baseMapper.update(update, lqw) > 0; } From fea2972dd025603cc16be08249dd88cd2a170189 Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Mon, 18 Aug 2025 14:13:43 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E8=B0=83?= =?UTF-8?q?=E6=9F=A5=E9=97=AE=E5=8D=B7bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../property/service/impl/ServiceWorkOrdersServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java index 814caacf..764e6889 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java @@ -168,11 +168,12 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { .map(ServiceWorkOrdersType::getId) .collect(Collectors.toList()); typeIds.add(bo.getType()); + List statusList = Arrays.asList(bo.getStatus().split(",")); Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByAsc(ServiceWorkOrders::getId); lqw.eq(StringUtils.isNotBlank(bo.getOrderNo()), ServiceWorkOrders::getOrderNo, bo.getOrderNo()); - lqw.eq(StringUtils.isNotBlank(bo.getStatus()), ServiceWorkOrders::getStatus, bo.getStatus()); + lqw.in(CollUtil.isNotEmpty(statusList), ServiceWorkOrders::getStatus, statusList); lqw.like(StringUtils.isNotBlank(bo.getOrderName()), ServiceWorkOrders::getOrderName, bo.getOrderName()); lqw.eq(bo.getDispatchTime() != null, ServiceWorkOrders::getDispatchTime, bo.getDispatchTime()); lqw.like(StringUtils.isNotBlank(bo.getInitiatorName()), ServiceWorkOrders::getInitiatorPeople, bo.getInitiatorName()); From 8849b1d889aef6a6832fa9160a710bbde614d9e0 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Mon, 18 Aug 2025 16:54:10 +0800 Subject: [PATCH 07/10] =?UTF-8?q?feat(property):=20=E8=AE=BF=E5=AE=A2?= =?UTF-8?q?=E7=99=BB=E8=AE=B0=E5=90=8C=E6=AD=A5=20E8=20=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E9=97=A8=E7=A6=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/sis/api/RemoteVisitorService.java | 19 ++++++ .../dromara/sis/api/domain/RemoteVisitor.java | 48 +++++++++++++++ .../property/domain/TbVisitorManagement.java | 5 +- .../impl/TbVisitorManagementServiceImpl.java | 50 +++++++++++++--- .../sis/dubbo/RemoteSisAuthServiceImpl.java | 1 - .../sis/dubbo/RemoteVisitorServiceImpl.java | 60 +++++++++++++++++++ .../dromara/sis/runner/ElevatorTcpRunner.java | 5 +- .../e8/domain/visitors/req/VisitorAddReq.java | 5 ++ .../sis/sdk/hik/calback/HikAlarmCallBack.java | 8 +-- .../impl/ZeroSensationPassageServiceImpl.java | 12 ++-- 10 files changed, 188 insertions(+), 25 deletions(-) create mode 100644 ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteVisitorService.java create mode 100644 ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteVisitor.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteVisitorServiceImpl.java diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteVisitorService.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteVisitorService.java new file mode 100644 index 00000000..9e105a96 --- /dev/null +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteVisitorService.java @@ -0,0 +1,19 @@ +package org.dromara.sis.api; + +import org.dromara.sis.api.domain.RemoteVisitor; + +/** + * @author lsm + * @apiNote RemoteVisitorService + * @since 2025/8/18 + */ +public interface RemoteVisitorService { + + /** + * 访客信息写入E8平台 + * + * @param visitor 访客信息 + * @return 访客ID + */ + Long syncE8PlatVisitor(RemoteVisitor visitor); +} diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteVisitor.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteVisitor.java new file mode 100644 index 00000000..7acf9346 --- /dev/null +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteVisitor.java @@ -0,0 +1,48 @@ +package org.dromara.sis.api.domain; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lsm + * @apiNote RemoteVisitor + * @since 2025/8/18 + */ +@Data +public class RemoteVisitor implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 访客名称 + */ + private String visitorName; + + /** + * 手机号码 + */ + private String mobilePhone; + + /** + * 被访人手机号 + */ + private String intervieweeMobile; + + /** + * 授权开始时间 + */ + private String visitorStartTime; + + /** + * 授权结束时间 + */ + private String vistorEndTime; + + /** + * 访客人脸照 + */ + private String visitorFaceImg; +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbVisitorManagement.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbVisitorManagement.java index 391a472b..296098a1 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbVisitorManagement.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbVisitorManagement.java @@ -118,5 +118,8 @@ public class TbVisitorManagement extends TenantEntity { */ private String searchValue; - + /** + * e8平台id + */ + private Long eEightId; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbVisitorManagementServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbVisitorManagementServiceImpl.java index 63dd52d0..060cb46c 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbVisitorManagementServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbVisitorManagementServiceImpl.java @@ -1,6 +1,8 @@ package org.dromara.property.service.impl; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -13,6 +15,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.redis.utils.RedisUtils; import org.dromara.property.domain.bo.QrCodeInfo; +import org.dromara.sis.api.RemoteVisitorService; +import org.dromara.sis.api.domain.RemoteVisitor; import org.dromara.system.api.RemoteUserService; import org.dromara.system.api.domain.vo.RemoteUserVo; import org.springframework.stereotype.Service; @@ -30,7 +34,7 @@ import java.util.Collection; * 访客管理Service业务层处理 * * @author mocheng - * @date 2025-06-19 + * @since 2025-06-19 */ @Slf4j @RequiredArgsConstructor @@ -38,7 +42,12 @@ import java.util.Collection; public class TbVisitorManagementServiceImpl implements ITbVisitorManagementService { private final TbVisitorManagementMapper baseMapper; - private final RemoteUserService remoteUserService; + + @DubboReference + private RemoteUserService remoteUserService; + + @DubboReference + private RemoteVisitorService remoteVisitorService; /** * 查询访客管理 @@ -47,7 +56,7 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi * @return 访客管理 */ @Override - public TbVisitorManagementVo queryById(Long id){ + public TbVisitorManagementVo queryById(Long id) { return baseMapper.selectVoById(id); } @@ -104,10 +113,11 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi */ @Override public Boolean insertByBo(TbVisitorManagementBo bo) { - QrCodeInfo info = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY +"Qrcode" + bo.getQrCodeId()); - RedisUtils.deleteKeys(GlobalConstants.CAPTCHA_CODE_KEY +"Qrcode" + bo.getQrCodeId()); + QrCodeInfo info = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + "Qrcode" + bo.getQrCodeId()); + RedisUtils.deleteKeys(GlobalConstants.CAPTCHA_CODE_KEY + "Qrcode" + bo.getQrCodeId()); TbVisitorManagement add = MapstructUtils.convert(bo, TbVisitorManagement.class); validEntityBeforeSave(add); + assert add != null; add.setCreateById(info.getUserid()); RemoteUserVo userInfoById = remoteUserService.getUserInfoById(info.getUserid()); add.setTenantId(userInfoById.getTenantId()); @@ -116,8 +126,12 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi add.setUpdateBy(userInfoById.getUserId()); add.setCreateDept(userInfoById.getDeptId()); boolean flag = baseMapper.insert(add) > 0; + if (flag) { bo.setId(add.getId()); + Long e8Id = syncE8PlatVisitor(bo); + add.setEEightId(e8Id); + baseMapper.updateById(add); } return flag; } @@ -137,11 +151,33 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi // add.setCreateById(info.getUserid()); boolean flag = baseMapper.insert(add) > 0; if (flag) { + assert add != null; bo.setId(add.getId()); + Long e8Id = syncE8PlatVisitor(bo); + add.setEEightId(e8Id); + baseMapper.updateById(add); } return flag; } + + /** + * 访客登记同步E8平台门禁 + * + * @param visitor 访客信息 + * @return E8平台访客ID + */ + private Long syncE8PlatVisitor(TbVisitorManagementBo visitor) { + RemoteVisitor remoteVisitor = new RemoteVisitor(); + remoteVisitor.setVisitorName(visitor.getVisitorName()); + remoteVisitor.setMobilePhone(visitor.getVisitorPhone()); + remoteVisitor.setIntervieweeMobile(visitor.getInterviewedPhone()); + remoteVisitor.setVisitorStartTime(DateUtil.format(visitor.getVisitingBeginTime(), "yyyy-MM-dd HH:mm:ss")); + remoteVisitor.setVistorEndTime(DateUtil.format(visitor.getVisitingEndTime(), "yyyy-MM-dd HH:mm:ss")); + remoteVisitor.setVisitorFaceImg(visitor.getFacePictures()); + return remoteVisitorService.syncE8PlatVisitor(remoteVisitor); + } + /** * 修改访客管理 * @@ -158,7 +194,7 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi /** * 保存前的数据校验 */ - private void validEntityBeforeSave(TbVisitorManagement entity){ + private void validEntityBeforeSave(TbVisitorManagement entity) { //TODO 做一些数据校验,如唯一约束 } @@ -171,7 +207,7 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java index e524d900..46a2adfb 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java @@ -70,7 +70,6 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { return sisAuthRecordService.deleteByPersonIds(ids, e8Ids); } - /** * 查询人员授权信息 * diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteVisitorServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteVisitorServiceImpl.java new file mode 100644 index 00000000..400f3cb3 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteVisitorServiceImpl.java @@ -0,0 +1,60 @@ +package org.dromara.sis.dubbo; + +import cn.hutool.core.lang.Assert; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; +import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.resource.api.RemoteFileService; +import org.dromara.sis.api.RemoteVisitorService; +import org.dromara.sis.api.domain.RemoteVisitor; +import org.dromara.sis.sdk.e8.E8PlatformApi; +import org.dromara.sis.sdk.e8.domain.visitors.req.VisitorAddReq; +import org.dromara.sis.sdk.e8.domain.visitors.res.VisitorAddRes; + +/** + * @author lsm + * @apiNote RemoteVisitorServiceImpl + * @since 2025/8/18 + */ +@Slf4j +@DubboService +@RequiredArgsConstructor +public class RemoteVisitorServiceImpl implements RemoteVisitorService { + + private final E8PlatformApi e8PlatformApi; + + @DubboReference + private RemoteFileService fileService; + + /** + * 访客信息写入E8平台 + * + * @param visitor 访客信息 + * @return 访客ID + */ + @Override + public Long syncE8PlatVisitor(RemoteVisitor visitor) { + try { + byte[] imgByte = fileService.downloadToByteArray(Long.parseLong(visitor.getVisitorFaceImg())); + Assert.notNull(imgByte,"下载访客照片失败"); + + String imgUrl = e8PlatformApi.uploadFace(imgByte); + Assert.notNull(imgUrl, "e8平台上传访客照片失败"); + + VisitorAddReq req = new VisitorAddReq(); + req.setVisitorName(visitor.getVisitorName()); + req.setMobilePhone(visitor.getMobilePhone()); + req.setIntervieweeMobile(visitor.getIntervieweeMobile()); + req.setVisitorStartTime(visitor.getVisitorStartTime()); + req.setVistorEndTime(visitor.getVistorEndTime()); + req.setVisitorFaceImg(imgUrl); + VisitorAddRes res = e8PlatformApi.addVisitor(req); + Assert.notNull(res, "e8平台新增访客登记失败"); + return res.getId(); + } catch (Exception e) { + log.info(e.getMessage()); + return null; + } + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/ElevatorTcpRunner.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/ElevatorTcpRunner.java index 832cba7a..b6379264 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/ElevatorTcpRunner.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/ElevatorTcpRunner.java @@ -14,10 +14,7 @@ import java.io.IOException; * @since 2025/8/8 */ @Slf4j -@Component -public class ElevatorTcpRunner implements ApplicationRunner { - - @Override +public class ElevatorTcpRunner{ public void run(ApplicationArguments args) { // 获取单例实例 ElevatorControlTcpUtil elevatorHelper = ElevatorControlTcpUtil.getInstance(); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/visitors/req/VisitorAddReq.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/visitors/req/VisitorAddReq.java index b31020f2..01c22337 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/visitors/req/VisitorAddReq.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/visitors/req/VisitorAddReq.java @@ -35,6 +35,11 @@ public class VisitorAddReq { */ private String vistorEndTime; + /** + * 访客人脸照 + */ + private String visitorFaceImg; + /** * 访客登记类型 0:登记 1:邀请 2:预约 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java index f5996122..27aac3d9 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java @@ -280,11 +280,8 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 { buffers1.get(bigImg); //设备ip String sAlarmInfo = new String(pAlarmer.sDeviceIP).trim(); - SisDeviceManage device = sisDeviceManageService.queryByDeviceIp(sAlarmInfo); - if (!device.getIsComparison()) { - log.info("海康设备告警信息上传,设备={}, 人脸图片大小={}, 背景图片大小={}", sAlarmInfo, smallImg.length, bigImg.length); - zeroSensationPassageService.pass(sAlarmInfo, smallImg, bigImg); - } + log.info("海康设备告警信息上传,设备={}, 人脸图片大小={}, 背景图片大小={}", sAlarmInfo, smallImg.length, bigImg.length); + zeroSensationPassageService.pass(sAlarmInfo, smallImg, bigImg); } /** @@ -320,7 +317,6 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 { log.info("比对结果:{},相似度:{},人员:{},id:{}", compareResults, similarity, name, pid); log.info("处理前置人脸比对结果,耗时:{}", interval.interval()); - zeroSensationPassageService.handleEleOut(new String(pAlarmer.sDeviceIP).trim()); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java index df8540a6..c705d7d7 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java @@ -65,7 +65,7 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer if (result.getCode() != 200) { log.info("华为盒子比对失败,msg={}", result.getMessage()); // 产生告警数据 - alarmEventsService.createAlarmRecord(deviceIp, 1, 1, "人脸比对失败", smallImg, bigImg); +// alarmEventsService.createAlarmRecord(deviceIp, 1, 1, "人脸比对失败", smallImg, bigImg); return; } log.info("人脸比对执行完成,耗时:{}ms", interval.intervalMs()); @@ -81,14 +81,14 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer } else { if (Objects.equals(authRecord.getRosterType(), RosterTypeEnum.BLACK_LIST.getCode())) { log.info("人员[{}]在黑名单中,暂不处理。", person); - alarmEventsService.createAlarmRecord(deviceIp, 3, 1, "黑名单人员入内", smallImg, bigImg); +// alarmEventsService.createAlarmRecord(deviceIp, 3, 1, "黑名单人员入内", smallImg, bigImg); return; } } Date now = new Date(); if (DateUtil.compare(now, authRecord.getEndDate()) > 0) { - alarmEventsService.createAlarmRecord(deviceIp, 3, 1, "人员授权信息已过期", smallImg, bigImg); +// alarmEventsService.createAlarmRecord(deviceIp, 3, 1, "人员授权信息已过期", smallImg, bigImg); log.info("当前人脸已过期,暂不处理。"); return; } @@ -119,9 +119,9 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer if (Objects.equals(item.getControlType(), ControlTypeEnum.ACCESS_CONTROL.getCode())) { // 门禁 handleAc(item.getBindId()); } else if (item.getControlType().equals(ControlTypeEnum.ELEVATOR_OUT_CONTROL.getCode())) { // 电梯外面面板权限 - handleEle(item.getBindId(), r.getAuthGroupId(), ControlTypeEnum.ELEVATOR_OUT_CONTROL.getCode(), item.getDeviceFloorId()); +// handleEle(item.getBindId(), r.getAuthGroupId(), ControlTypeEnum.ELEVATOR_OUT_CONTROL.getCode(), item.getDeviceFloorId()); } else if (item.getControlType().equals(ControlTypeEnum.ELEVATOR_IN_CONTROL.getCode())) { // 电梯里面的面板 - handleEle(item.getBindId(), r.getAuthGroupId(), ControlTypeEnum.ELEVATOR_IN_CONTROL.getCode(), 0L); +// handleEle(item.getBindId(), r.getAuthGroupId(), ControlTypeEnum.ELEVATOR_IN_CONTROL.getCode(), 0L); } else { log.info("设备绑定了未知的控制类型[{}],不处理", item.getControlType()); } @@ -166,7 +166,7 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer * 生成告警事件 */ public void createAlarmRecord(String deviceIp, Integer level, Integer type, String msg, byte[] smallImg, byte[] bigImg) { - alarmEventsService.createAlarmRecord(deviceIp, level, type, msg, smallImg, bigImg); +// alarmEventsService.createAlarmRecord(deviceIp, level, type, msg, smallImg, bigImg); } /** From 50ddc1e9549ce462e024f0a25c94b1f6bd0175cf Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Mon, 18 Aug 2025 17:24:05 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=B8=B8=E8=A7=81?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 +- .../controller/FaqManagementController.java | 106 ++++++++++++++ .../property/domain/FaqManagement.java | 61 ++++++++ .../property/domain/bo/FaqManagementBo.java | 64 ++++++++ .../property/domain/vo/FaqManagementVo.java | 86 +++++++++++ .../property/mapper/FaqManagementMapper.java | 17 +++ .../service/IFaqManagementService.java | 69 +++++++++ .../impl/FaqManagementServiceImpl.java | 137 ++++++++++++++++++ .../mapper/Property/FaqManagementMapper.xml | 7 + .../service/impl/SysDictTypeServiceImpl.java | 2 +- .../src/main/resources/application.properties | 4 +- 11 files changed, 552 insertions(+), 5 deletions(-) create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/FaqManagementController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/FaqManagement.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/FaqManagementBo.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/FaqManagementVo.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/FaqManagementMapper.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/service/IFaqManagementService.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/FaqManagementServiceImpl.java create mode 100644 ruoyi-modules/Property/src/main/resources/mapper/Property/FaqManagementMapper.xml diff --git a/pom.xml b/pom.xml index 08b4c075..b1e680ad 100644 --- a/pom.xml +++ b/pom.xml @@ -91,8 +91,8 @@ dev - 10.20.1.60:8848 - 10.20.1.60:4560 + 127.0.0.1:8848 + 127.0.0.1:4560 DEFAULT_GROUP DEFAULT_GROUP nacos diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/FaqManagementController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/FaqManagementController.java new file mode 100644 index 00000000..8420db8b --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/FaqManagementController.java @@ -0,0 +1,106 @@ +package org.dromara.property.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.property.domain.vo.FaqManagementVo; +import org.dromara.property.domain.bo.FaqManagementBo; +import org.dromara.property.service.IFaqManagementService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 常见问题管理 + * 前端访问路由地址为:/property/faqManagement + * + * @author LionLi + * @date 2025-08-18 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/faqManagement") +public class FaqManagementController extends BaseController { + + private final IFaqManagementService faqManagementService; + + /** + * 查询常见问题管理列表 + */ + @SaCheckPermission("property:faqManagement:list") + @GetMapping("/list") + public TableDataInfo list(FaqManagementBo bo, PageQuery pageQuery) { + return faqManagementService.queryPageList(bo, pageQuery); + } + + /** + * 导出常见问题管理列表 + */ + @SaCheckPermission("property:faqManagement:export") + @Log(title = "常见问题管理", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(FaqManagementBo bo, HttpServletResponse response) { + List list = faqManagementService.queryList(bo); + ExcelUtil.exportExcel(list, "常见问题管理", FaqManagementVo.class, response); + } + + /** + * 获取常见问题管理详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("property:faqManagement:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(faqManagementService.queryById(id)); + } + + /** + * 新增常见问题管理 + */ + @SaCheckPermission("property:faqManagement:add") + @Log(title = "常见问题管理", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody FaqManagementBo bo) { + return toAjax(faqManagementService.insertByBo(bo)); + } + + /** + * 修改常见问题管理 + */ + @SaCheckPermission("property:faqManagement:edit") + @Log(title = "常见问题管理", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody FaqManagementBo bo) { + return toAjax(faqManagementService.updateByBo(bo)); + } + + /** + * 删除常见问题管理 + * + * @param ids 主键串 + */ + @SaCheckPermission("property:faqManagement:remove") + @Log(title = "常见问题管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(faqManagementService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/FaqManagement.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/FaqManagement.java new file mode 100644 index 00000000..8c304da2 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/FaqManagement.java @@ -0,0 +1,61 @@ +package org.dromara.property.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 常见问题管理对象 faq_management + * + * @author LionLi + * @date 2025-08-18 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("faq_management") +public class FaqManagement extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 标题 + */ + private String head; + + /** + * 分类 + */ + private String type; + + /** + * 浏览量 + */ + private Long pageView; + + /** + * 内容 + */ + private String contents; + + /** + * 状态(1草稿 2已发布) + */ + private String status; + + /** + * 搜索值 + */ + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/FaqManagementBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/FaqManagementBo.java new file mode 100644 index 00000000..5d3cab2c --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/FaqManagementBo.java @@ -0,0 +1,64 @@ +package org.dromara.property.domain.bo; + +import org.dromara.property.domain.FaqManagement; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 常见问题管理业务对象 faq_management + * + * @author LionLi + * @date 2025-08-18 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = FaqManagement.class, reverseConvertGenerate = false) +public class FaqManagementBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 标题 + */ + @NotBlank(message = "标题不能为空", groups = { AddGroup.class, EditGroup.class }) + private String head; + + /** + * 分类 + */ + @NotBlank(message = "分类不能为空", groups = { AddGroup.class, EditGroup.class }) + private String type; + + /** + * 浏览量 + */ + private Long pageView; + + /** + * 内容 + */ + @NotBlank(message = "内容不能为空", groups = { AddGroup.class, EditGroup.class }) + private String contents; + + /** + * 状态(1草稿 2已发布) + */ + @NotBlank(message = "状态(1草稿 2已发布)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String status; + + /** + * 搜索值 + */ + private String searchValue; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/FaqManagementVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/FaqManagementVo.java new file mode 100644 index 00000000..8d805d1b --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/FaqManagementVo.java @@ -0,0 +1,86 @@ +package org.dromara.property.domain.vo; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import org.dromara.property.domain.FaqManagement; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 常见问题管理视图对象 faq_management + * + * @author LionLi + * @date 2025-08-18 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = FaqManagement.class) +public class FaqManagementVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 标题 + */ + @ExcelProperty(value = "标题") + private String head; + + /** + * 分类 + */ + @ExcelProperty(value = "分类") + private String type; + + /** + * 浏览量 + */ + @ExcelProperty(value = "浏览量") + private Long pageView; + + /** + * 内容 + */ + @ExcelProperty(value = "内容") + private String contents; + + /** + * 状态(1草稿 2已发布) + */ + @ExcelProperty(value = "状态(1草稿 2已发布)") + private String status; + + /** + * 搜索值 + */ + @ExcelProperty(value = "搜索值") + private String searchValue; + + /** + * 创建时间 + */ + + private Date createTime; + + + /** + * 更新时间 + */ + private Date updateTime; +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/FaqManagementMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/FaqManagementMapper.java new file mode 100644 index 00000000..39acebd8 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/FaqManagementMapper.java @@ -0,0 +1,17 @@ +package org.dromara.property.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.dromara.property.domain.FaqManagement; +import org.dromara.property.domain.vo.FaqManagementVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 常见问题管理Mapper接口 + * + * @author LionLi + * @date 2025-08-18 + */ +@Mapper +public interface FaqManagementMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IFaqManagementService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IFaqManagementService.java new file mode 100644 index 00000000..0658d696 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IFaqManagementService.java @@ -0,0 +1,69 @@ +package org.dromara.property.service; + +import org.dromara.property.domain.FaqManagement; +import org.dromara.property.domain.vo.FaqManagementVo; +import org.dromara.property.domain.bo.FaqManagementBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 常见问题管理Service接口 + * + * @author LionLi + * @date 2025-08-18 + */ +public interface IFaqManagementService { + + /** + * 查询常见问题管理 + * + * @param id 主键 + * @return 常见问题管理 + */ + FaqManagementVo queryById(Long id); + + /** + * 分页查询常见问题管理列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 常见问题管理分页列表 + */ + TableDataInfo queryPageList(FaqManagementBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的常见问题管理列表 + * + * @param bo 查询条件 + * @return 常见问题管理列表 + */ + List queryList(FaqManagementBo bo); + + /** + * 新增常见问题管理 + * + * @param bo 常见问题管理 + * @return 是否新增成功 + */ + Boolean insertByBo(FaqManagementBo bo); + + /** + * 修改常见问题管理 + * + * @param bo 常见问题管理 + * @return 是否修改成功 + */ + Boolean updateByBo(FaqManagementBo bo); + + /** + * 校验并批量删除常见问题管理信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/FaqManagementServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/FaqManagementServiceImpl.java new file mode 100644 index 00000000..b0ae90fc --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/FaqManagementServiceImpl.java @@ -0,0 +1,137 @@ +package org.dromara.property.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.dromara.property.domain.bo.FaqManagementBo; +import org.dromara.property.domain.vo.FaqManagementVo; +import org.dromara.property.domain.FaqManagement; +import org.dromara.property.mapper.FaqManagementMapper; +import org.dromara.property.service.IFaqManagementService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 常见问题管理Service业务层处理 + * + * @author LionLi + * @date 2025-08-18 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class FaqManagementServiceImpl implements IFaqManagementService { + + private final FaqManagementMapper baseMapper; + + /** + * 查询常见问题管理 + * + * @param id 主键 + * @return 常见问题管理 + */ + @Override + public FaqManagementVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询常见问题管理列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 常见问题管理分页列表 + */ + @Override + public TableDataInfo queryPageList(FaqManagementBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的常见问题管理列表 + * + * @param bo 查询条件 + * @return 常见问题管理列表 + */ + @Override + public List queryList(FaqManagementBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(FaqManagementBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(FaqManagement::getId); + lqw.like(StringUtils.isNotBlank(bo.getHead()), FaqManagement::getHead, bo.getHead()); + lqw.eq(StringUtils.isNotBlank(bo.getType()), FaqManagement::getType, bo.getType()); + lqw.eq(bo.getPageView() != null, FaqManagement::getPageView, bo.getPageView()); + lqw.eq(StringUtils.isNotBlank(bo.getContents()), FaqManagement::getContents, bo.getContents()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), FaqManagement::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), FaqManagement::getSearchValue, bo.getSearchValue()); + return lqw; + } + + /** + * 新增常见问题管理 + * + * @param bo 常见问题管理 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(FaqManagementBo bo) { + FaqManagement add = MapstructUtils.convert(bo, FaqManagement.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改常见问题管理 + * + * @param bo 常见问题管理 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(FaqManagementBo bo) { + FaqManagement update = MapstructUtils.convert(bo, FaqManagement.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(FaqManagement entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除常见问题管理信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/FaqManagementMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/FaqManagementMapper.xml new file mode 100644 index 00000000..1452bd05 --- /dev/null +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/FaqManagementMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java index fa505951..20571ce3 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java @@ -90,7 +90,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService { * @param dictType 字典类型 * @return 字典数据集合信息 */ - @Cacheable(cacheNames = CacheNames.SYS_DICT, key = "#dictType") + // @Cacheable(cacheNames = CacheNames.SYS_DICT, key = "#dictType") @Override public List selectDictDataByType(String dictType) { List dictDatas = dictDataMapper.selectDictDataByType(dictType); diff --git a/ruoyi-visual/ruoyi-nacos/src/main/resources/application.properties b/ruoyi-visual/ruoyi-nacos/src/main/resources/application.properties index ef3ece6a..5aa89231 100644 --- a/ruoyi-visual/ruoyi-nacos/src/main/resources/application.properties +++ b/ruoyi-visual/ruoyi-nacos/src/main/resources/application.properties @@ -40,9 +40,9 @@ spring.sql.init.platform=mysql db.num=1 ### Connect URL of DB: -db.url.0=jdbc:mysql://10.20.1.65:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true +db.url.0=jdbc:mysql://127.0.0.1:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true db.user.0=root -db.password.0=By@2025! +db.password.0=123456 ### the maximum retry times for push nacos.config.push.maxRetryTime=50 From 06ab323f211defcfb55843bfea87f28736449fbd Mon Sep 17 00:00:00 2001 From: mocheng <3057647414@qq.com> Date: Mon, 18 Aug 2025 17:59:39 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=AE=BF=E5=AE=A2?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/resource/controller/SysOssController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/controller/SysOssController.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/controller/SysOssController.java index 764fb569..8d6a8849 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/controller/SysOssController.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/controller/SysOssController.java @@ -4,6 +4,7 @@ package org.dromara.resource.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; +import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.domain.R; import org.dromara.common.core.validate.QueryGroup; import org.dromara.common.redis.utils.RedisUtils; @@ -95,7 +96,7 @@ public class SysOssController extends BaseController { if (ObjectUtil.isNull(file)) { return R.fail("上传文件不能为空"); } - QrCodeInfo info = RedisUtils.getCacheObject("Qrcode" + code); + QrCodeInfo info = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY+"Qrcode" + code); if (info==null){ return R.fail("二维码已过期"); } From 38e75e6b6b81cf551f57fbb8da42dc43438e17b1 Mon Sep 17 00:00:00 2001 From: mocheng <3057647414@qq.com> Date: Mon, 18 Aug 2025 19:46:03 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=AE=BF=E5=AE=A2?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/RemoteVisitoreGetCodeInfoService.java | 5 +++++ .../dubbo/RemoteVisitoreGetCodeInfo.java | 19 +++++++++++++++++++ ruoyi-modules/ruoyi-resource/pom.xml | 4 ++++ .../resource/controller/SysOssController.java | 13 +++++++++---- .../resource/service/ISysOssService.java | 2 +- .../service/impl/SysOssServiceImpl.java | 6 +++--- 6 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteVisitoreGetCodeInfoService.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteVisitoreGetCodeInfo.java diff --git a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteVisitoreGetCodeInfoService.java b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteVisitoreGetCodeInfoService.java new file mode 100644 index 00000000..255df77f --- /dev/null +++ b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteVisitoreGetCodeInfoService.java @@ -0,0 +1,5 @@ +package org.dromara.property.api; + +public interface RemoteVisitoreGetCodeInfoService { + String getCodeInfo(String code); +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteVisitoreGetCodeInfo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteVisitoreGetCodeInfo.java new file mode 100644 index 00000000..726ab370 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteVisitoreGetCodeInfo.java @@ -0,0 +1,19 @@ +package org.dromara.property.dubbo; + +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.common.core.constant.GlobalConstants; +import org.dromara.common.redis.utils.RedisUtils; +import org.dromara.property.api.RemoteVisitoreGetCodeInfoService; +import org.dromara.property.domain.bo.QrCodeInfo; + +@DubboService +@RequiredArgsConstructor +public class RemoteVisitoreGetCodeInfo implements RemoteVisitoreGetCodeInfoService { + + @Override + public String getCodeInfo(String code) { + QrCodeInfo info = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY +"Qrcode" +code); + return info.getUserid().toString(); + } +} diff --git a/ruoyi-modules/ruoyi-resource/pom.xml b/ruoyi-modules/ruoyi-resource/pom.xml index 90e4b66e..13bc9242 100644 --- a/ruoyi-modules/ruoyi-resource/pom.xml +++ b/ruoyi-modules/ruoyi-resource/pom.xml @@ -117,6 +117,10 @@ org.dromara ruoyi-api-resource + + org.dromara + property-api + diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/controller/SysOssController.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/controller/SysOssController.java index 8d6a8849..231e3dc3 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/controller/SysOssController.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/controller/SysOssController.java @@ -4,6 +4,8 @@ package org.dromara.resource.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.apache.dubbo.config.annotation.DubboService; import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.domain.R; import org.dromara.common.core.validate.QueryGroup; @@ -13,6 +15,7 @@ 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.property.api.RemoteVisitoreGetCodeInfoService; import org.dromara.resource.domain.QrCodeInfo; import org.dromara.resource.domain.bo.SysOssBo; import org.dromara.resource.domain.vo.SysOssUploadVo; @@ -41,7 +44,8 @@ import java.util.List; public class SysOssController extends BaseController { private final ISysOssService iSysOssService; - + @DubboReference + private RemoteVisitoreGetCodeInfoService remoteVisitoreGetCodeInfoService; /** * 查询OSS对象存储列表 */ @@ -96,12 +100,13 @@ public class SysOssController extends BaseController { if (ObjectUtil.isNull(file)) { return R.fail("上传文件不能为空"); } - QrCodeInfo info = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY+"Qrcode" + code); - if (info==null){ + String codeInfo = remoteVisitoreGetCodeInfoService.getCodeInfo(code); +// QrCodeInfo info = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY+"Qrcode" + code); + if (codeInfo.isBlank()){ return R.fail("二维码已过期"); } - SysOssVo oss = iSysOssService.qrupload(file,info); + SysOssVo oss = iSysOssService.qrupload(file,codeInfo); SysOssUploadVo uploadVo = new SysOssUploadVo(); uploadVo.setUrl(oss.getUrl()); uploadVo.setFileName(oss.getOriginalName()); diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssService.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssService.java index 22472437..1b2a2b9c 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssService.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssService.java @@ -67,7 +67,7 @@ public interface ISysOssService { * @param file 要上传的 MultipartFile 对象 * @return 上传成功后的 SysOssVo 对象,包含文件信息 */ - SysOssVo qrupload(MultipartFile file, QrCodeInfo qrCodeInfo); + SysOssVo qrupload(MultipartFile file, String qrCodeInfo); /** * 上传文件到对象存储服务,并保存文件信息到数据库 diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java index 6069bc5d..48ab3a39 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java @@ -200,7 +200,7 @@ public class SysOssServiceImpl implements ISysOssService { } @Override - public SysOssVo qrupload(MultipartFile file, QrCodeInfo info) { + public SysOssVo qrupload(MultipartFile file, String info) { String originalfileName = file.getOriginalFilename(); String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); OssClient storage = OssFactory.instance(); @@ -242,14 +242,14 @@ public class SysOssServiceImpl implements ISysOssService { return this.matchingUrl(sysOssVo); } - private SysOssVo buildResultEntityQr(String originalfileName, String suffix, String configKey, UploadResult uploadResult,QrCodeInfo info) { + private SysOssVo buildResultEntityQr(String originalfileName, String suffix, String configKey, UploadResult uploadResult,String info) { SysOss oss = new SysOss(); oss.setUrl(uploadResult.getUrl()); oss.setFileSuffix(suffix); oss.setFileName(uploadResult.getFilename()); oss.setOriginalName(originalfileName); oss.setService(configKey); - oss.setCreateBy(info.getUserid()); + oss.setCreateBy(Long.valueOf(info)); oss.setCreateTime(new Date()); baseMapper.insert(oss); SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class);