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 @@ + + + + +