diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteHikDeviceService.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteHikDeviceService.java new file mode 100644 index 0000000..0baa565 --- /dev/null +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteHikDeviceService.java @@ -0,0 +1,38 @@ +package org.dromara.sis.api; + +import org.dromara.sis.api.domain.RemoteSisDeviceChannel; +import org.dromara.sis.api.domain.RemoteSisDeviceManage; + +import java.util.List; + +public interface RemoteHikDeviceService { + + + /** + * 查询所有的海康设备信息 + * @return 返回海康设备列表 + */ + List queryHikDevices(); + + + /** + * 更新设备在线状态 + * @param item 设备信息 + * @return 返回是否操作成功 + */ + Boolean updateDeviceState(RemoteSisDeviceManage item); + + /** + * 查询设备通道信息 + * @param deviceIp 设备ip + * @return 返回通道列表 + */ + List queryDeviceChannels(String deviceIp); + + /** + * 更新设备通道在线状态 + * @param deviceIp 设备ip + * @return 返回是否成功 + */ + Boolean updateDeviceChannelState(String deviceIp, Integer onLineState); +} diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteHikSdkService.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteHikSdkService.java new file mode 100644 index 0000000..4fa8400 --- /dev/null +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteHikSdkService.java @@ -0,0 +1,23 @@ +package org.dromara.sis.api; + +import org.dromara.sis.api.domain.RemoteSdkChannel; +import org.dromara.sis.api.domain.RemoteSisDeviceManage; + +import java.util.List; + +public interface RemoteHikSdkService { + + /** + * 海康sdk 登录操作 + * @param item 登录参数 + * @return 是否登录成功 + */ + Boolean deviceLogin(RemoteSisDeviceManage item); + + /** + * 获取nvr设备通道信息 + * @param deviceIp 设备ip + * @return 返回通道信息 + */ + List getDeviceChannel(String deviceIp); +} diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSdkChannel.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSdkChannel.java new file mode 100644 index 0000000..a2ab7a4 --- /dev/null +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSdkChannel.java @@ -0,0 +1,43 @@ +package org.dromara.sis.api.domain; + +import lombok.Data; + +@Data +public class RemoteSdkChannel { + + /** + * 通道id + */ + private Integer channelId; + + /** + * 通道名称 + */ + private String channelName; + + /** + * 通道设备ip + */ + private String channelIp; + + /** + * 通道设备端口 + */ + private Short channelPort; + + /** + * 通道账号 + */ + private String channelAccount; + + /** + * 通道密码 + */ + private String channelPwd; + + /** + * 通过状态 1: 在线,2:离线 + */ + private Integer channelStatus; + +} diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSisDeviceChannel.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSisDeviceChannel.java new file mode 100644 index 0000000..29bcb9d --- /dev/null +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSisDeviceChannel.java @@ -0,0 +1,95 @@ +package org.dromara.sis.api.domain; + +import lombok.Data; + +@Data +public class RemoteSisDeviceChannel { + + /** + * 主键id + */ + private Long id; + + /** + * 设备id + */ + private Long deviceId; + + /** + * 设备名称 + */ + private String channelName; + + /** + * 通道分组组id + */ + private Long groupId; + + /** + * 设备ip + */ + private String deviceIp; + + /** + * 设备端口 + */ + private Integer devicePort; + + private String factoryNo; + + /** + * 设备账号 + */ + private String deviceAccount; + + /** + * 设备密码 + */ + private String devicePwd; + + /** + * 设备 + */ + private String deviceMac; + + /** + * 设备通道编号 + */ + private String channelNo; + + /** + * 通道状态.0-离线;1-在线 + */ + private Integer channelState; + + /** + * nvr 设备厂商编号 + */ + private String nvrFactoryNo; + + /** + * nvr设备ip + */ + private String nvrIp; + + /** + * nvr 端口 + */ + private Integer nvrPort; + + /** + * nvr 账号 + */ + private String nvrAccount; + + /** + * nvr 密码 + */ + private String nvrPwd; + + /** + * nvr 通道编号 + */ + private String nvrChannelNo; + +} diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSisDeviceManage.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSisDeviceManage.java new file mode 100644 index 0000000..02253ef --- /dev/null +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteSisDeviceManage.java @@ -0,0 +1,65 @@ +package org.dromara.sis.api.domain; + +import lombok.Data; + +/** + * 设备远程调用对象 + */ +@Data +public class RemoteSisDeviceManage { + + /** + * 主键id + */ + private Long id; + + /** + * 设备名称 + */ + private String deviceName; + + /** + * 设备ip + */ + private String deviceIp; + + /** + * 设备端口 + */ + private Integer devicePort; + + /** + * 设备 + */ + private String deviceMac; + + /** + * 设备在线状态 0:离线 1:在线 2:未知 + */ + private Integer deviceStatus; + + /** + * 设备账号 + */ + private String deviceAccount; + + /** + * 设备密码 + */ + private String devicePwd; + + /** + * 设备类型 + */ + private Integer deviceType; + + /** + * 设备厂商编号 + */ + private String factoryNo; + + /** + * 设备组id + */ + private Long groupId; +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/DeviceTypeEnum.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/enums/DeviceTypeEnum.java similarity index 86% rename from ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/DeviceTypeEnum.java rename to ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/enums/DeviceTypeEnum.java index 1698477..1292d03 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/DeviceTypeEnum.java +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/enums/DeviceTypeEnum.java @@ -1,4 +1,4 @@ -package org.dromara.sis.domain.enums; +package org.dromara.sis.api.enums; import lombok.Getter; diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/FactoryNoEnum.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/enums/FactoryNoEnum.java similarity index 86% rename from ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/FactoryNoEnum.java rename to ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/enums/FactoryNoEnum.java index a27ba12..5322b35 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/FactoryNoEnum.java +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/enums/FactoryNoEnum.java @@ -1,4 +1,4 @@ -package org.dromara.sis.domain.enums; +package org.dromara.sis.api.enums; import lombok.Getter; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java index 1c4e647..e073bac 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java @@ -1,29 +1,25 @@ package org.dromara.property.controller; -import java.time.LocalDate; -import java.util.List; - -import cn.hutool.core.date.DateTime; -import lombok.RequiredArgsConstructor; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; -import org.springframework.format.annotation.DateTimeFormat; -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.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.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.property.domain.vo.AttendanceArrangementVo; -import org.dromara.property.domain.bo.AttendanceArrangementBo; -import org.dromara.property.service.IAttendanceArrangementService; +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.AttendanceArrangementBo; +import org.dromara.property.domain.vo.AttendanceArrangementVo; +import org.dromara.property.service.IAttendanceArrangementService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * 排班 @@ -41,7 +37,7 @@ public class AttendanceArrangementController extends BaseController { private final IAttendanceArrangementService attendanceArrangementService; /** - * 查询排班列表 + * 查询排班详情列表 */ @SaCheckPermission("Property:arrangement:list") @GetMapping("/list") @@ -50,16 +46,25 @@ public class AttendanceArrangementController extends BaseController { } /** - * 导出排班列表 + * 查询某个月的日历排班信息的排班列表 */ - @SaCheckPermission("Property:arrangement:export") - @Log(title = "排班", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(AttendanceArrangementBo bo, HttpServletResponse response) { - List list = attendanceArrangementService.queryList(bo); - ExcelUtil.exportExcel(list, "排班", AttendanceArrangementVo.class, response); + @SaCheckPermission("Property:arrangement:explore") + @GetMapping("/explore") + public List list(AttendanceArrangementBo bo) { + return attendanceArrangementService.queryList(bo); } +// /** +// * 导出排班列表 +// */ +// @SaCheckPermission("Property:arrangement:export") +// @Log(title = "排班", businessType = BusinessType.EXPORT) +// @PostMapping("/export") +// public void export(AttendanceArrangementBo bo, HttpServletResponse response) { +// List list = attendanceArrangementService.queryList(bo); +// ExcelUtil.exportExcel(list, "排班", AttendanceArrangementVo.class, response); +// } + /** * 获取排班详细信息 * diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementGroupController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementGroupController.java new file mode 100644 index 0000000..7b6d553 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementGroupController.java @@ -0,0 +1,22 @@ +package org.dromara.property.controller; + +import lombok.RequiredArgsConstructor; +import org.dromara.common.web.core.BaseController; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 排班考勤组的中间表控制层 + * 前端访问路由地址为:/Property/arrangementGroup + * + * @author mocheng + * @date 2025-07-15 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/arrangementGroup") +public class AttendanceArrangementGroupController extends BaseController { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceFixedScheduleController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceFixedScheduleController.java index 1a00104..6df6a50 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceFixedScheduleController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceFixedScheduleController.java @@ -1,26 +1,27 @@ 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 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.AttendanceFixedScheduleVo; -import org.dromara.property.domain.bo.AttendanceFixedScheduleBo; -import org.dromara.property.service.IAttendanceFixedScheduleService; +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.AttendanceFixedScheduleBo; +import org.dromara.property.domain.vo.AttendanceFixedScheduleVo; +import org.dromara.property.service.IAttendanceFixedScheduleService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * 固定班制表 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbCommunityController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbCommunityController.java index 3bcd85d..bba1bb7 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbCommunityController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbCommunityController.java @@ -66,7 +66,8 @@ public class TbCommunityController extends BaseController { LoginUser loginUser = LoginHelper.getLoginUser(); Assert.notNull(loginUser, "获取账户信息失败!"); Assert.notEmpty(loginUser.getTenantId(), "获取租户信息失败"); - return R.ok(tbCommunityService.tree(level, loginUser.getTenantId())); + List> tree = tbCommunityService.tree(level, loginUser.getTenantId()); + return R.ok(tree); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangement.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangement.java index fb83467..77c7a7d 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangement.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangement.java @@ -1,16 +1,13 @@ package org.dromara.property.domain; -import cn.hutool.core.date.DateTime; -import org.dromara.common.tenant.core.TenantEntity; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.common.tenant.core.TenantEntity; import java.io.Serial; +import java.util.Date; /** * 排班对象 attendance_arrangement diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangementGroup.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangementGroup.java new file mode 100644 index 0000000..7439ef8 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangementGroup.java @@ -0,0 +1,35 @@ +package org.dromara.property.domain; + +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; + +/** + * 考勤排班组中间表对象 attendance_arrangement_group + * + * @author ruoyi + * @date 2025-07-30 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("attendance_arrangement_group") +public class AttendanceArrangementGroup extends TenantEntity +{ + + @Serial + private static final long serialVersionUID = 1L; + /** 主键ID */ + private Long id; + + /** 排班id */ + private Long arrangementId; + + /** 考勤组ID */ + private Long groupId; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java index f935281..a8a6fde 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java @@ -1,19 +1,18 @@ package org.dromara.property.domain.bo; -import cn.hutool.core.date.DateTime; -import org.dromara.property.domain.AttendanceArrangement; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; +import com.fasterxml.jackson.annotation.JsonFormat; import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.property.domain.AttendanceArrangement; import org.dromara.property.domain.AttendanceScheduleCycle; import org.dromara.property.domain.AttendanceUserGroup; import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDate; +import java.time.YearMonth; import java.util.Date; import java.util.List; @@ -67,16 +66,16 @@ public class AttendanceArrangementBo extends BaseEntity { @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endDate; - /** - * 前端传日历的开始时间和结束时间 - */ - private Date calendarStartDate; - private Date calendarEndTimeDate; /** * 前端传某天的当前日期 */ private Date currentDate; + /** + * 日期月份 + */ + @JsonFormat(pattern = "yyyy-MM") + private YearMonth month; /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementGroupBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementGroupBo.java new file mode 100644 index 0000000..af5efea --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementGroupBo.java @@ -0,0 +1,54 @@ +package org.dromara.property.domain.bo; + +import cn.hutool.core.date.DateTime; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.property.domain.AttendanceArrangementGroup; +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.*; +import org.dromara.property.domain.AttendanceScheduleCycle; +import org.dromara.property.domain.AttendanceUserGroup; +import org.dromara.property.domain.AttendanceWeekSet; +import org.dromara.property.domain.AttendanceShift; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; +import java.time.YearMonth; +import java.util.Date; +import java.util.List; + +/** + * 考勤排班组业务对象 attendance_arrangement_group + * + * @author mocheng + * @date 2025-07-30 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = AttendanceArrangementGroup.class, reverseConvertGenerate = false) +public class AttendanceArrangementGroupBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 排班名称 + */ + @NotBlank(message = "排班id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long arrangementId; + + /** + * 考勤组ID + */ + @NotNull(message = "考勤组ID不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long groupId; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java index 65e65bc..2e4ecae 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java @@ -27,11 +27,10 @@ public class TbFloorBo extends BaseEntity { private Long id; /** - * 单元编码 + * 建筑编码 */ - @NotNull(message = "单元编码不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long unitId; - + @NotNull(message = "建筑编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long buildingId; /** * 楼层数名称 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java index 9e26f81..f6466cd 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java @@ -52,7 +52,7 @@ public class TbVisitorManagementBo extends BaseEntity { @NotBlank(message = "拜访事由不能为空", groups = { AddGroup.class, EditGroup.class }) private String visitingReason; - @NotBlank(message = "类型不能为空", groups = { AddGroup.class, EditGroup.class }) + //@NotNull(message = "类型不能为空", groups = { AddGroup.class, EditGroup.class }) private Integer type; /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementGroupVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementGroupVo.java new file mode 100644 index 0000000..116b52b --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementGroupVo.java @@ -0,0 +1,46 @@ +package org.dromara.property.domain.vo; + +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.domain.*; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.List; + +/** + * 考勤排班组视图对象 attendance_arrangement_group + * + * @author mocheng + * @date 2025-07-30 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = AttendanceArrangementGroup.class) +public class AttendanceArrangementGroupVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 排班名称 + */ + @ExcelProperty(value = "排班id") + private Long arrangementId; + + /** + * 考勤组ID + */ + @ExcelProperty(value = "考勤组ID") + private Long groupId; + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementVo.java index 9f9fc29..c6ca7b0 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementVo.java @@ -8,7 +8,7 @@ import org.dromara.property.domain.*; import java.io.Serial; import java.io.Serializable; -import java.util.Date; +import java.time.LocalDate; import java.util.List; @@ -60,13 +60,13 @@ public class AttendanceArrangementVo implements Serializable { * 开始日期 */ @ExcelProperty(value = "开始日期") - private Date startDate; + private LocalDate startDate; /** * 结束日期(仅date_type=3时有效) */ @ExcelProperty(value = "结束日期(仅date_type=3时有效)") - private Date endDate; + private LocalDate endDate; /** * 状态:0-未生效,1-已生效 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceArrangementGroupMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceArrangementGroupMapper.java new file mode 100644 index 0000000..a4fa14f --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceArrangementGroupMapper.java @@ -0,0 +1,16 @@ +package org.dromara.property.mapper; + +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.property.domain.AttendanceArrangementGroup; +import org.dromara.property.domain.vo.AttendanceArrangementGroupVo; + +/** + * 排班Mapper接口 + * + * @author mocheng + * @date 2025-07-15 + */ +public interface AttendanceArrangementGroupMapper extends BaseMapperPlus { + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceArrangementMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceArrangementMapper.java index 97efb77..9940f93 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceArrangementMapper.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceArrangementMapper.java @@ -1,16 +1,12 @@ package org.dromara.property.mapper; -import cn.hutool.core.date.DateTime; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; -import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.property.domain.AttendanceArrangement; -import org.dromara.property.domain.bo.AttendanceArrangementBo; import org.dromara.property.domain.vo.AttendanceArrangementVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import java.time.LocalDate; +import java.util.Date; import java.util.List; /** @@ -22,7 +18,7 @@ import java.util.List; public interface AttendanceArrangementMapper extends BaseMapperPlus { @Select("SELECT * FROM attendance_arrangement WHERE start_date <= #{startTime} AND end_date >= #{startTime}") - AttendanceArrangementVo selectVoByTime(LocalDate startTime); + AttendanceArrangementVo selectVoByTime(Date startTime); List selectArrangementList(LocalDate calendarStartDate, LocalDate calendarEndTimeDate); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/MachineMaintainTaskDetailMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/MachineMaintainTaskDetailMapper.java index b4b2e4d..6ec74be 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/MachineMaintainTaskDetailMapper.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/MachineMaintainTaskDetailMapper.java @@ -1,19 +1,15 @@ package org.dromara.property.mapper; -import com.github.yulichang.base.MPJBaseMapper; -import org.apache.ibatis.annotations.Mapper; import org.dromara.property.domain.MachineMaintainTaskDetail; import org.dromara.property.domain.vo.MachineMaintainTaskDetailVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - /** - * 设备保养任务明细Mapper接口 + * 保养明细Mapper接口 * * @author mocheng - * @date 2025-07-16 + * @date 2025-07-30 */ -@Mapper -public interface MachineMaintainTaskDetailMapper extends MPJBaseMapper { +public interface MachineMaintainTaskDetailMapper extends BaseMapperPlus { } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementGroupService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementGroupService.java new file mode 100644 index 0000000..0e5d6d9 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementGroupService.java @@ -0,0 +1,12 @@ +package org.dromara.property.service; + +/** + * 排班Service接口 + * + * @author mocheng + * @date 2025-07-15 + */ +public interface IAttendanceArrangementGroupService { + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java index 5b659c7..ce48d6f 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java @@ -1,13 +1,10 @@ package org.dromara.property.service; -import cn.hutool.core.date.DateTime; -import org.dromara.property.domain.AttendanceArrangement; -import org.dromara.property.domain.vo.AttendanceArrangementVo; -import org.dromara.property.domain.bo.AttendanceArrangementBo; -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.bo.AttendanceArrangementBo; +import org.dromara.property.domain.vo.AttendanceArrangementVo; -import java.time.LocalDate; import java.util.Collection; import java.util.List; @@ -28,7 +25,7 @@ public interface IAttendanceArrangementService { AttendanceArrangementVo queryById(Long id); /** - * 分页查询排班列表 + * 分页查询排班详情列表 * * @param bo 查询条件 * @param pageQuery 分页参数 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementGroupServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementGroupServiceImpl.java new file mode 100644 index 0000000..a4a6be1 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementGroupServiceImpl.java @@ -0,0 +1,40 @@ +package org.dromara.property.service.impl; + +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; +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.property.domain.*; +import org.dromara.property.domain.bo.AttendanceArrangementBo; +import org.dromara.property.domain.constant.StatusConstant; +import org.dromara.property.domain.vo.AttendanceArrangementVo; +import org.dromara.property.mapper.*; +import org.dromara.property.service.IAttendanceArrangementGroupService; +import org.dromara.property.service.IAttendanceArrangementService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 排班Service业务层处理 + * + * @author mocheng + * @date 2025-07-15 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class AttendanceArrangementGroupServiceImpl implements IAttendanceArrangementGroupService { + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java index 2271d73..c0c9a82 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java @@ -41,9 +41,11 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS private final AttendanceGroupMapper attendanceGroupMapper; - private final AttendanceWeekSetMapper weekSetMapper; + private final AttendanceArrangementGroupMapper arrangementGroupMapper; - private final AttendanceShiftMapper attendanceShiftMapper; + private final AttendanceWeekSetMapper weekSetMapper; + + private final AttendanceShiftMapper attendanceShiftMapper; private final AttendanceScheduleCycleMapper scheduleCycleMapper; @@ -66,7 +68,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS } /** - * 分页查询排班列表 + * 分页查询排班详情列表 * * @param bo 查询条件 * @param pageQuery 分页参数 @@ -79,94 +81,87 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS Page attendanceArrangementVoPage = result.setRecords(result.getRecords().stream().peek(vo -> { + //1.根据当前日期查询在开始时间和结束时间之间的排班信息 + //查询指定日期在哪些排班中 + List arrangementList = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate()).le(AttendanceArrangement::getEndDate, bo.getCurrentDate())); + //根据排班查询出考勤组id + List groupIds = arrangementList.stream().map(AttendanceArrangement::getGroupId).distinct().toList(); - //1.如:在2号到10号有固定班制和排班制,根据当前日期查询出所有的考勤组id - //查询指定日期在哪些排班中 - List arrangementList = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate()).le(AttendanceArrangement::getEndDate, bo.getCurrentDate())); - //根据排班查询出考勤组id - List groupIds = arrangementList.stream().map(AttendanceArrangement::getGroupId).distinct().toList(); + // 2.循环将所有的考勤组id设置到考勤组中 + //循环groupIds,循环和AttendanceGroup中的id做对比,如果有相同的,则取出attendanceGroup中的所有数据 + groupIds.forEach( + groupId -> { + //从数据库查询出当前考勤组的所有数据 + AttendanceGroup group = attendanceGroupMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceGroup::getId, groupId)); - // 2.循环将所有的考勤组id设置到考勤组中 - //循环groupIds,循环和AttendanceGroup中的id做对比,如果有相同的,则取出attendanceGroup中的所有数据 - groupIds.forEach( - groupId -> { - //从数据库查询出当前考勤组的所有数据 - AttendanceGroup group = attendanceGroupMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceGroup::getId, groupId)); + // 3.查询出当前考勤组的所有数据,从考勤组判断当前id是固定班制还是排班制 + if (group.getAttendanceType().equals(StatusConstant.FIXEDSCHEDULE)) { + // 3.1固定班制:将当前的日期转为周几,然后与数据库中的班次周数作对比,取出当前日期的班次信息 + //将传来的日期参数转为周几 + int week = DateUtil.dayOfWeek(bo.getCurrentDate()); + //取出当前日期的周数,与数据库中的班次周数作对比,取出当前日期的班次信息 + AttendanceWeekSet weekSet = weekSetMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceWeekSet::getGroupId, groupId).eq(AttendanceWeekSet::getDayOfWeek, week)); + //将weekSet存到结果中 + AttendanceArrangementVo arrangementVo = new AttendanceArrangementVo(); + arrangementVo.setWeekSet(weekSet); + //根据weekSet取出id,根据id查询出attendanceWeekSetShift表中的shiftId + Long shiftId = weekSet.getId(); + //根据shiftId查询attendanceShift表中对应的id的数据 + AttendanceShift shift = attendanceShiftMapper.selectById(shiftId); + //将shift存到结果中 + arrangementVo.setShift(shift); - // 3.查询出当前考勤组的所有数据,从考勤组判断当前id是固定班制还是排班制 - if (group.getAttendanceType().equals(StatusConstant.FIXEDSCHEDULE)) { - // 3.1固定班制:将当前的日期转为周几,然后与数据库中的班次周数作对比,取出当前日期的班次信息 - //将传来的日期参数转为周几 - int week = DateUtil.dayOfWeek(bo.getCurrentDate()); - //取出当前日期的周数,与数据库中的班次周数作对比,取出当前日期的班次信息 - AttendanceWeekSet weekSet = weekSetMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceWeekSet::getGroupId, groupId).eq(AttendanceWeekSet::getDayOfWeek, week)); - //将weekSet存到结果中 - AttendanceArrangementVo arrangementVo = new AttendanceArrangementVo(); - arrangementVo.setWeekSet(weekSet); - //根据weekSet取出id,根据id查询出attendanceWeekSetShift表中的shiftId - Long shiftId = weekSet.getId(); - //根据shiftId查询attendanceShift表中对应的id的数据 - AttendanceShift shift = attendanceShiftMapper.selectById(shiftId); - //将shift存到结果中 - arrangementVo.setShift(shift); - - } else if (group.getAttendanceType().equals(StatusConstant.SHIFTSCHEDULE)) { - // 3.2排班制:判断第一天是从几号开始,循环判断,判断当前是循环中的第几天,取出当前天数的班次信息。 - //取出排班中的开始时间和结束时间 - Date startDate = bo.getStartDate(); - Date endDate = bo.getEndDate(); - Date currentDate = bo.getCurrentDate(); - //取出attendanceScheduleCycle表中的天数 - Integer cycleDays = scheduleCycleMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId)).getDayNumber(); - //在startDate和endDate之间循环,判端当前日期是cycleDays中的第几天 - int cycleDay = 0; - while (startDate.before(currentDate) || endDate.after(currentDate)) { - cycleDay++; - startDate = DateUtil.offsetDay(startDate, 1); - //判断当前日期是clcleDays中的第几天 - if (cycleDay > cycleDays) { - cycleDay = 1; - } + } else if (group.getAttendanceType().equals(StatusConstant.SHIFTSCHEDULE)) { + // 3.2排班制:判断第一天是从几号开始,循环判断,判断当前是循环中的第几天,取出当前天数的班次信息。 + //取出排班中的开始时间和结束时间 + Date startDate = bo.getStartDate(); + Date endDate = bo.getEndDate(); + Date currentDate = bo.getCurrentDate(); + //取出attendanceScheduleCycle表中的天数 + Integer cycleDays = scheduleCycleMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId)).getDayNumber(); + //在startDate和endDate之间循环,判端当前日期是cycleDays中的第几天 + int cycleDay = 0; + while (startDate.before(currentDate) || endDate.after(currentDate)) { + cycleDay++; + startDate = DateUtil.offsetDay(startDate, 1); + //判断当前日期是clcleDays中的第几天 + if (cycleDay > cycleDays) { + cycleDay = 1; } - //根据cycleDay查询出当前日期的班次信息 - AttendanceScheduleCycle cycle = scheduleCycleMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId).eq(AttendanceScheduleCycle::getDayNumber, cycleDay)); - //将cycle存到结果中 - AttendanceArrangementVo arrangementVo = new AttendanceArrangementVo(); - arrangementVo.setCycle(cycle); - } + //根据cycleDay查询出当前日期的班次信息 + AttendanceScheduleCycle cycle = scheduleCycleMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId).eq(AttendanceScheduleCycle::getDayNumber, cycleDay)); + //将cycle存到结果中 + AttendanceArrangementVo arrangementVo = new AttendanceArrangementVo(); + arrangementVo.setCycle(cycle); + } - ); - }).collect(Collectors.toList())); + } + ); -// //1.根据当前日期查询出排班信息 -// AttendanceArrangementVo arrangementvo = baseMapper.selectVoByTime(bo.getCurrentDate()); -// //2.查询人员组的信息 -// //根据开始时间查询出所有的排班id -// List scheduleIdList = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate())).stream().map(AttendanceArrangement::getId).collect(Collectors.toList()); -// //根据排班的id查询出排班的人员详细信息 -// List userGroupList = userGroupMapper.selectList(Wrappers.lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList)); -// //将排班人员信息添加到排班信息中 -// arrangementvo.setUserGroupList(userGroupList); +// AttendanceArrangementVo arrangementvo = baseMapper.selectVoByTime(bo.getCurrentDate()); +// //2.查询人员组的信息 +// //根据开始时间查询出所有的排班id +// List scheduleIdList = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate())).stream().map(AttendanceArrangement::getId).collect(Collectors.toList()); +// //根据排班的id查询出排班的人员详细信息 +// List userGroupList = userGroupMapper.selectList(Wrappers.lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList)); +// //将排班人员信息添加到排班信息中 +// arrangementvo.setUserGroupList(userGroupList); // -// //3.根据排班的id查询出排班的考勤组id -// List groupIds = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate())).stream().map(AttendanceArrangement::getGroupId).distinct().collect(Collectors.toList()); -// //判断考勤组是排班制还是固定班制 -// if (arrangementvo.getScheduleType().equals(StatusConstant.FIXEDSCHEDULE)) { -// //排班制 -// //根据排班的id查询出排班的考勤组id -// List weekSetList = weekSetMapper.selectList(Wrappers.lambdaQuery().in(AttendanceWeekSet::getGroupId, groupIds)); -// } +// //3.根据排班的id查询出排班的考勤组id +// List groupIds = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate())).stream().map(AttendanceArrangement::getGroupId).distinct().collect(Collectors.toList()); +// //判断考勤组是排班制还是固定班制 + }).collect(Collectors.toList())); return TableDataInfo.build(attendanceArrangementVoPage); } /** - * 查询符合条件的排班列表 + * 查询某个月的日历排班信息的排班列表 * * @param bo 查询条件 * @return 排班列表 @@ -174,60 +169,66 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS @Override public List queryList(AttendanceArrangementBo bo) { - Date startDate = bo.getStartDate(); - Date endDate = bo.getEndDate(); - Date calendarStartDate = bo.getCalendarStartDate(); - Date calendarEndTimeDate = bo.getCalendarEndTimeDate(); + LocalDate month = bo.getMonth().atEndOfMonth(); + // 1. 拿到日历的开始时间和结束时间 + LocalDate calendarStartDate = month.withDayOfMonth(1); + LocalDate calendarEndDate = month.withDayOfMonth(calendarStartDate.lengthOfMonth()); + + // 2. 根据日历的开始时间和结束时间查询出每一天的排班信息 + // 2.1 循环日历的开始时间和结束时间,判断 calendarStartDate 在哪些排班中 + List result = new ArrayList<>(); + + for (LocalDate date = calendarStartDate; date.isBefore(calendarEndDate); date = date.plusDays(1)) { + // 查询指定日期在哪些排班中 + List arrangementList = baseMapper.selectList( + Wrappers.lambdaQuery() + .ge(AttendanceArrangement::getStartDate, date.atStartOfDay(ZoneId.systemDefault()).toInstant()) + .le(AttendanceArrangement::getEndDate, date.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1)) + ); + + // 根据排班查询出考勤组id + List groupIds = arrangementList.stream() + .map(AttendanceArrangement::getGroupId) + .distinct() + .toList(); + + // 如果当前日期没有排班,则跳过当前日期 + if (groupIds.isEmpty()) { + continue; + } + + // 循环 groupIds,循环和 AttendanceGroup 中的 id 做对比,如果有相同的,则取出 attendanceGroup 中的所有数据 + for (Long groupId : groupIds) { + AttendanceGroup attendanceGroup = attendanceGroupMapper.selectById(groupId); + if (attendanceGroup != null) { + // 创建 AttendanceArrangementVo 对象并设置属性 + AttendanceArrangementVo vo = new AttendanceArrangementVo(); + vo.setStartDate(LocalDate.from(date.atStartOfDay(ZoneId.systemDefault()))); + vo.setEndDate(LocalDate.from(date.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1))); + // 设置其他属性... + result.add(vo); + } + } + + // 如果 collected 不为空,则返回 result + if (!result.isEmpty()) { + return result; + } + } + + // 循环结束后如果 result 仍为空,则返回空列表 + return Collections.emptyList(); + +// // 计算交集的开始时间(取较晚的开始时间)和结束时间(取较早的结束时间) +// Date overlapStart = calendarStartDate.after(startDate) +// ? calendarStartDate : startDate; +// Date overlapEnd = calendarEndTimeDate.before(endDate) +// ? calendarEndTimeDate : endDate; + + //根据交集的时间范围查询排班信息 - - - //1.根据日历的开始时间和日历的结束时间查询所有的排班信息 - List arrangementList = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCalendarStartDate()).le(AttendanceArrangement::getEndDate, bo.getCalendarEndTimeDate())); - //2.查询人员组的信息 - //根据开始时间查询排班的id - List scheduleIdList = arrangementList.stream().map(AttendanceArrangement::getId).collect(Collectors.toList()); - //根据排班的id查询出排班的人员详细信息 - List userGroupList = userGroupMapper.selectList(Wrappers.lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList)); - //3.将排班人员信息添加到排班信息中 - - return arrangementList.stream().map(arrangement -> { - AttendanceArrangementVo vo = MapstructUtils.convert(arrangement, AttendanceArrangementVo.class); - assert vo != null; - vo.setUserGroupList(userGroupList.stream().filter(userGroup -> userGroup.getScheduleId().equals(arrangement.getId())).collect(Collectors.toList())); - return vo; - }).collect(Collectors.toList()); - - -// //判断参数是固定排班制还是排班制 -// if (Objects.equals(bo.getScheduleType(), StatusConstant.FIXEDSCHEDULE)) { -// //固定班制 -// //获取所有的排班信息 -// List arrangementList = baseMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceArrangement::getScheduleType, StatusConstant.FIXEDSCHEDULE)); -// //判断排班信息是否在日历的开始时间和结束时间之间 -// List filterList = arrangementList.stream().filter(arrangement -> { -// LocalDate startDate = arrangement.getStartDate(); -// LocalDate endDate = arrangement.getEndDate(); -// return startDate.isAfter(calendarStartDate) && endDate.isBefore(calendarEndTimeDate); -// }).toList(); -// -// //在日历的开始日期和结束日期之间,则获取所有固定班次的考勤组id -// List groupIds = filterList.stream().map(AttendanceArrangement::getGroupId).distinct().collect(Collectors.toList()); -// //根据考勤组id查询所有的固定班制 -// List weekSetList = weekSetMapper.selectList(Wrappers.lambdaQuery().in(AttendanceWeekSet::getGroupId, groupIds)); -// -// //根据固定班制的groupId查询出week_set_shift表中的数据 -// List shiftList = weekSetList.stream().flatMap(weekSet -> weekSet.getWeeksetShiftList().stream()).toList(); -// -// } else if (Objects.equals(bo.getScheduleType(), StatusConstant.SHIFTSCHEDULE)) { -// //排班制 -// //获取所有的排班信息 -// List arrangementList = baseMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceArrangement::getScheduleType, StatusConstant.SHIFTSCHEDULE)); -// } - - -// return voList; } @@ -264,6 +265,11 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS judgeDate(bo, add); + AttendanceArrangementGroup attendanceArrangementGroup = new AttendanceArrangementGroup(); + //向排班和考勤组中间表中插入数据 + attendanceArrangementGroup.setGroupId(add.getGroupId()); + attendanceArrangementGroup.setArrangementId(bo.getId()); + arrangementGroupMapper.insert(attendanceArrangementGroup); //取出当前新增的排班的id Long ArrangementId = add.getId(); @@ -290,7 +296,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS LocalDate longTimeEndDate = LocalDate.of(2099, 12, 31); add.setEndDate(Date.from(longTimeEndDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); } - if (bo.getDateType().equals(StatusConstant.SHORTTIME)){ + if (bo.getDateType().equals(StatusConstant.SHORTTIME)) { add.setEndDate(bo.getEndDate()); } } @@ -343,6 +349,10 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS //获取当前排班的id List idList = new ArrayList<>(ids); + + //根据当前排班的id 删除attendanceArrangementGroup表中的数据 + arrangementGroupMapper.delete(Wrappers.lambdaQuery().in(AttendanceArrangementGroup::getArrangementId, idList)); + //根据获取的id删除attendanceUserGroup表中的数据 userGroupMapper.delete(Wrappers.lambdaQuery().in(AttendanceUserGroup::getScheduleId, idList)); return baseMapper.deleteByIds(ids) > 0; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainTaskDetailServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainTaskDetailServiceImpl.java index d088e18..2f6988a 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainTaskDetailServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainTaskDetailServiceImpl.java @@ -1,9 +1,5 @@ package org.dromara.property.service.impl; -import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.github.yulichang.query.MPJLambdaQueryWrapper; -import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -13,7 +9,6 @@ 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.dromara.property.domain.MachineMaintainTask; import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.MachineMaintainTaskDetailBo; import org.dromara.property.domain.vo.MachineMaintainTaskDetailVo; @@ -26,10 +21,10 @@ import java.util.Map; import java.util.Collection; /** - * 设备保养任务明细Service业务层处理 + * 保养明细Service业务层处理 * * @author mocheng - * @date 2025-07-16 + * @date 2025-07-30 */ @Slf4j @RequiredArgsConstructor @@ -39,70 +34,66 @@ public class MachineMaintainTaskDetailServiceImpl implements IMachineMaintainTas private final MachineMaintainTaskDetailMapper baseMapper; /** - * 查询设备保养任务明细 + * 查询保养明细 * * @param id 主键 - * @return 设备保养任务明细 + * @return 保养明细 */ @Override public MachineMaintainTaskDetailVo queryById(Long id){ - MachineMaintainTaskDetail machineMaintainTaskDetail = baseMapper.selectById(id); - MachineMaintainTaskDetailVo machineMaintainTaskDetailVo = BeanUtil.copyProperties(machineMaintainTaskDetail, MachineMaintainTaskDetailVo.class); - return machineMaintainTaskDetailVo; + return baseMapper.selectVoById(id); } /** - * 分页查询设备保养任务明细列表 + * 分页查询保养明细列表 * * @param bo 查询条件 * @param pageQuery 分页参数 - * @return 设备保养任务明细分页列表 + * @return 保养明细分页列表 */ @Override public TableDataInfo queryPageList(MachineMaintainTaskDetailBo bo, PageQuery pageQuery) { - MPJLambdaWrapper lqw = buildQueryWrapper(bo); - IPage result = baseMapper.selectJoinPage(pageQuery.build(),MachineMaintainTaskDetailVo.class, lqw); + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); - } /** - * 查询符合条件的设备保养任务明细列表 + * 查询符合条件的保养明细列表 * * @param bo 查询条件 - * @return 设备保养任务明细列表 + * @return 保养明细列表 */ @Override public List queryList(MachineMaintainTaskDetailBo bo) { - MPJLambdaWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectJoinList(MachineMaintainTaskDetailVo.class, lqw); + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); } - private MPJLambdaWrapper buildQueryWrapper(MachineMaintainTaskDetailBo bo) { - return new MPJLambdaWrapper() - .orderByAsc(MachineMaintainTaskDetail::getId) - .eq(bo.getTaskId() != null, MachineMaintainTaskDetail::getTaskId, bo.getTaskId()) - .eq(bo.getMachineId() != null, MachineMaintainTaskDetail::getMachineId, bo.getMachineId()) - .eq(StringUtils.isNotBlank(bo.getSendFlag()), MachineMaintainTaskDetail::getSendFlag, bo.getSendFlag()) - .eq(bo.getSortNumber() != null, MachineMaintainTaskDetail::getSortNumber, bo.getSortNumber()) - .eq(StringUtils.isNotBlank(bo.getState()), MachineMaintainTaskDetail::getState, bo.getState()) - .eq(StringUtils.isNotBlank(bo.getSearchValue()), MachineMaintainTaskDetail::getSearchValue, bo.getSearchValue()) - .selectAll(MachineMaintainTaskDetail.class) - .select(MachineMaintainTask::getMaintainTaskNo) - .leftJoin(MachineMaintainTask.class, MachineMaintainTask::getId, MachineMaintainTaskDetail::getTaskId); + private LambdaQueryWrapper buildQueryWrapper(MachineMaintainTaskDetailBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(MachineMaintainTaskDetail::getId); + lqw.eq(bo.getTaskId() != null, MachineMaintainTaskDetail::getTaskId, bo.getTaskId()); + lqw.eq(bo.getMachineId() != null, MachineMaintainTaskDetail::getMachineId, bo.getMachineId()); + lqw.eq(StringUtils.isNotBlank(bo.getSendFlag()), MachineMaintainTaskDetail::getSendFlag, bo.getSendFlag()); + lqw.eq(bo.getSortNumber() != null, MachineMaintainTaskDetail::getSortNumber, bo.getSortNumber()); + lqw.eq(StringUtils.isNotBlank(bo.getState()), MachineMaintainTaskDetail::getState, bo.getState()); + lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), MachineMaintainTaskDetail::getSearchValue, bo.getSearchValue()); + return lqw; } /** - * 新增设备保养任务明细 + * 新增保养明细 * - * @param bo 设备保养任务明细 + * @param bo 保养明细 * @return 是否新增成功 */ @Override public Boolean insertByBo(MachineMaintainTaskDetailBo bo) { MachineMaintainTaskDetail add = MapstructUtils.convert(bo, MachineMaintainTaskDetail.class); validEntityBeforeSave(add); - boolean flag = this.insertByBo(bo); + boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); } @@ -110,16 +101,16 @@ public class MachineMaintainTaskDetailServiceImpl implements IMachineMaintainTas } /** - * 修改设备保养任务明细 + * 修改保养明细 * - * @param bo 设备保养任务明细 + * @param bo 保养明细 * @return 是否修改成功 */ @Override public Boolean updateByBo(MachineMaintainTaskDetailBo bo) { MachineMaintainTaskDetail update = MapstructUtils.convert(bo, MachineMaintainTaskDetail.class); validEntityBeforeSave(update); - return baseMapper.updateById(update)>0; + return baseMapper.updateById(update) > 0; } /** @@ -130,7 +121,7 @@ public class MachineMaintainTaskDetailServiceImpl implements IMachineMaintainTas } /** - * 校验并批量删除设备保养任务明细信息 + * 校验并批量删除保养明细信息 * * @param ids 待删除的主键集合 * @param isValid 是否进行有效性校验 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java index adf8c12..ca7db91 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.property.service.impl; +import cn.hutool.core.util.IdUtil; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -92,6 +93,7 @@ public class ServiceWorkOrdersTypeServiceImpl implements IServiceWorkOrdersTypeS @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(ServiceWorkOrdersTypeBo bo) { ServiceWorkOrdersType add = MapstructUtils.convert(bo, ServiceWorkOrdersType.class); + add.setOrderTypeNo("TD" + IdUtil.getSnowflakeNextIdStr()); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java index 81aae67..61ad865 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java @@ -1,6 +1,5 @@ package org.dromara.property.service.impl; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -76,22 +75,22 @@ public class TbCommunityServiceImpl implements ITbCommunityService { community.addAll(list); } } + //if (level >= 4) { + // List vos = unitService.queryAll(); + // if (vos != null && !vos.isEmpty()) { + // List> list = vos.stream().map(item -> { + // TreeNode node = new TreeNode<>(); + // node.setChildren(new ArrayList<>()); + // node.setCode(item.getId()); + // node.setLabel(item.getUnitName()); + // node.setParentCode(item.getBuildingId()); + // node.setLevel(3); + // return node; + // }).toList(); + // community.addAll(list); + // } + //} if (level >= 3) { - List vos = unitService.queryAll(); - if (vos != null && !vos.isEmpty()) { - List> list = vos.stream().map(item -> { - TreeNode node = new TreeNode<>(); - node.setChildren(new ArrayList<>()); - node.setCode(item.getId()); - node.setLabel(item.getUnitName()); - node.setParentCode(item.getBuildingId()); - node.setLevel(3); - return node; - }).toList(); - community.addAll(list); - } - } - if (level >= 4) { List vos = floorService.queryAll(); if (vos != null && !vos.isEmpty()) { List> list = vos.stream().map(item -> { @@ -99,15 +98,15 @@ public class TbCommunityServiceImpl implements ITbCommunityService { node.setChildren(new ArrayList<>()); node.setCode(item.getId()); node.setLabel(item.getFloorName()); - node.setParentCode(item.getUnitId()); - node.setLevel(4); + node.setParentCode(item.getBuildingId()); + node.setLevel(3); return node; }).toList(); community.addAll(list); } } - if (level >= 5) { + if (level >= 4) { List vos = roomService.queryAll(); if (vos != null && !vos.isEmpty()) { List> list = vos.stream().map(item -> { @@ -116,7 +115,7 @@ public class TbCommunityServiceImpl implements ITbCommunityService { node.setCode(item.getId()); node.setLabel(item.getRoomNumber()); node.setParentCode(item.getFloorId()); - node.setLevel(5); + node.setLevel(4); return node; }).toList(); community.addAll(list); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java index e7a4794..549616a 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java @@ -12,9 +12,10 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.property.domain.TbFloor; import org.dromara.property.domain.bo.TbFloorBo; +import org.dromara.property.domain.vo.TbBuildingVo; import org.dromara.property.domain.vo.TbFloorVo; -import org.dromara.property.domain.vo.TbUnitVo; import org.dromara.property.mapper.TbFloorMapper; +import org.dromara.property.service.ITbBuildingService; import org.dromara.property.service.ITbFloorService; import org.dromara.property.service.ITbUnitService; import org.springframework.stereotype.Service; @@ -37,6 +38,7 @@ public class TbFloorServiceImpl implements ITbFloorService { private final TbFloorMapper baseMapper; private final ITbUnitService tbUnitService; + private final ITbBuildingService iTbBuildingService; /** * 查询楼层 @@ -81,7 +83,7 @@ public class TbFloorServiceImpl implements ITbFloorService { lqw.orderByAsc(TbFloor::getId); lqw.like(StringUtils.isNotBlank(bo.getFloorName()), TbFloor::getFloorName, bo.getFloorName()); lqw.eq(bo.getFloorNumber() != null, TbFloor::getFloorNumber, bo.getFloorNumber()); - lqw.eq(bo.getUnitId() != null, TbFloor::getUnitId, bo.getUnitId()); + lqw.eq(bo.getBuildingId()!= null, TbFloor::getUnitId, bo.getBuildingId()); lqw.eq(bo.getFloorType() != null, TbFloor::getFloorType, bo.getFloorType()); lqw.eq(bo.getRoomCount() != null, TbFloor::getRoomCount, bo.getRoomCount()); lqw.eq(bo.getFloorHeight() != null, TbFloor::getFloorHeight, bo.getFloorHeight()); @@ -98,19 +100,19 @@ public class TbFloorServiceImpl implements ITbFloorService { @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(TbFloorBo bo) { // 验证单元是否存在 - TbUnitVo tbUnitVo = tbUnitService.queryById(bo.getUnitId()); - Assert.notNull(tbUnitVo, "单元:{},不存在。", bo.getUnitId()); + TbBuildingVo tbBuildingVo = iTbBuildingService.queryById(bo.getBuildingId()); + Assert.notNull(tbBuildingVo, "建筑:{},不存在。", tbBuildingVo); // 验证同一单元楼层是否已经存在 LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(TbFloor::getUnitId, bo.getUnitId()) + lqw.eq(TbFloor::getBuildingId, bo.getBuildingId()) .eq(TbFloor::getFloorNumber, bo.getFloorNumber()); boolean numberExists = baseMapper.selectCount(lqw) > 0; - Assert.isFalse(numberExists, "单元:{},楼层:{}已存在。", bo.getUnitId(), bo.getFloorNumber()); + Assert.isFalse(numberExists, "单元:{},建筑:{}已存在。", bo.getBuildingId(), bo.getFloorNumber()); TbFloor add = MapstructUtils.convert(bo, TbFloor.class); - add.setCommunityId(tbUnitVo.getCommunityId()); - add.setBuildingId(tbUnitVo.getBuildingId()); + add.setCommunityId(tbBuildingVo.getCommunityId()); + add.setBuildingId(tbBuildingVo.getId()); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; Assert.isTrue(flag, "新增楼层失败"); diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/AttendanceArrangementGroupMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/AttendanceArrangementGroupMapper.xml new file mode 100644 index 0000000..afa306e --- /dev/null +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/AttendanceArrangementGroupMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/zkmedia/ZKLmediaController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/zkmedia/ZKLmediaController.java index 2760b02..db73d17 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/zkmedia/ZKLmediaController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/zkmedia/ZKLmediaController.java @@ -1,11 +1,9 @@ package org.dromara.sis.controller.zkmedia; import cn.hutool.core.util.IdUtil; -import cn.hutool.crypto.SecureUtil; -import cn.hutool.crypto.digest.MD5; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.R; -import org.dromara.sis.domain.enums.FactoryNoEnum; +import org.dromara.sis.api.enums.FactoryNoEnum; import org.dromara.sis.sdk.zkmedia.MediaServerUtils; import org.dromara.sis.sdk.zkmedia.ZLMediaKitService; import org.dromara.sis.sdk.zkmedia.model.AddStreamProxy; @@ -52,7 +50,8 @@ public class ZKLmediaController { proxy.setApp("realtime"); // 实时流不用每次都去拉流,流不存在的情况下在拉取 String streanStr = data.getVideoIp() + "_" + data.getChannelId(); - proxy.setStream(SecureUtil.md5(streanStr)); +// proxy.setStream(SecureUtil.md5(streanStr)); + proxy.setStream(IdUtil.fastSimpleUUID()); if (FactoryNoEnum.HIK.getCode().equals(data.getFactoryNo())) { proxy.setUrl(String.format(HIK_REALTIME_RTSP_TEMPLATE, data.getAccount(), data.getPwd(), data.getVideoIp(), data.getVideoPort(), data.getChannelId())); } else if (FactoryNoEnum.DAHUA.getCode().equals(data.getFactoryNo())) { diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceChannel.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceChannel.java index 183bb89..2b125e7 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceChannel.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceChannel.java @@ -1,9 +1,10 @@ package org.dromara.sis.domain; -import org.dromara.common.tenant.core.TenantEntity; -import com.baomidou.mybatisplus.annotation.*; +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; @@ -74,6 +75,11 @@ public class SisDeviceChannel extends TenantEntity { */ private String channelNo; + /** + * 通道状态.0-离线;1-在线 + */ + private Integer channelState; + /** * nvr 设备厂商编号 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java index 658b358..10ef03e 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java @@ -41,7 +41,7 @@ public class SisDeviceManage extends BaseEntity { /** * 设备端口 */ - private Long devicePort; + private Integer devicePort; /** * 设备 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/covert/CommonBeanCovert.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/covert/CommonBeanCovert.java new file mode 100644 index 0000000..cabe53b --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/covert/CommonBeanCovert.java @@ -0,0 +1,27 @@ +package org.dromara.sis.domain.covert; + +import org.dromara.sis.api.domain.RemoteSdkChannel; +import org.dromara.sis.api.domain.RemoteSisDeviceChannel; +import org.dromara.sis.api.domain.RemoteSisDeviceManage; +import org.dromara.sis.domain.SisDeviceChannel; +import org.dromara.sis.domain.SisDeviceManage; +import org.dromara.sis.sdk.hik.model.DeviceInfo; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper(componentModel = "spring") +public interface CommonBeanCovert { + + CommonBeanCovert INSTANCE = Mappers.getMapper(CommonBeanCovert.class); + + List entity2Remote(List sisDeviceManage); + + SisDeviceManage Remote2Entity(RemoteSisDeviceManage remoteSisDeviceManage); + + List channelEntity2Remote(List channels); + + List sdkChannelEntity2Remote(List sdkChannels); + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteHikDeviceServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteHikDeviceServiceImpl.java new file mode 100644 index 0000000..a5944f8 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteHikDeviceServiceImpl.java @@ -0,0 +1,51 @@ +package org.dromara.sis.dubbo; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.sis.api.RemoteHikDeviceService; +import org.dromara.sis.api.domain.RemoteSisDeviceChannel; +import org.dromara.sis.api.domain.RemoteSisDeviceManage; +import org.dromara.sis.domain.SisDeviceChannel; +import org.dromara.sis.domain.SisDeviceManage; +import org.dromara.sis.domain.covert.CommonBeanCovert; +import org.dromara.sis.service.ISisDeviceChannelService; +import org.dromara.sis.service.ISisDeviceManageService; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 海康设备远程服务调用 + * + * @author lxj + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class RemoteHikDeviceServiceImpl implements RemoteHikDeviceService { + + private final ISisDeviceManageService deviceManageService; + private final ISisDeviceChannelService deviceChannelService; + + @Override + public List queryHikDevices() { + List sisDeviceManages = deviceManageService.queryHikDevices(); + return CommonBeanCovert.INSTANCE.entity2Remote(sisDeviceManages); + } + + @Override + public Boolean updateDeviceState(RemoteSisDeviceManage item) { + return deviceManageService.updateDeviceState(CommonBeanCovert.INSTANCE.Remote2Entity(item)); + } + + @Override + public List queryDeviceChannels(String deviceIp) { + List channels = deviceChannelService.queryByDeviceIp(deviceIp); + return CommonBeanCovert.INSTANCE.channelEntity2Remote(channels); + } + + @Override + public Boolean updateDeviceChannelState(String deviceIp, Integer onLineState) { + return deviceChannelService.updateDeviceChannelState(deviceIp, onLineState); + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSdkServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSdkServiceImpl.java new file mode 100644 index 0000000..88a8c53 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSdkServiceImpl.java @@ -0,0 +1,41 @@ +package org.dromara.sis.dubbo; + +import cn.hutool.core.collection.CollUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.sis.api.RemoteHikSdkService; +import org.dromara.sis.api.domain.RemoteSdkChannel; +import org.dromara.sis.api.domain.RemoteSisDeviceManage; +import org.dromara.sis.domain.covert.CommonBeanCovert; +import org.dromara.sis.sdk.hik.HikApiService; +import org.dromara.sis.sdk.hik.model.DeviceInfo; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Slf4j +@RequiredArgsConstructor +@Component +public class RemoteSdkServiceImpl implements RemoteHikSdkService { + + @Override + public Boolean deviceLogin(RemoteSisDeviceManage item) { + if (item == null) { + throw new RuntimeException("设备信息为null"); + } + return HikApiService.getInstance().login(item.getDeviceIp(), item.getDevicePort().shortValue(), item.getDevicePwd(), item.getDeviceAccount()); + } + + @Override + public List getDeviceChannel(String deviceIp) { + DeviceInfo channelInfo = HikApiService.getInstance().getChannelInfo(deviceIp); + if (channelInfo == null) { + return List.of(); + } + + if (CollUtil.isEmpty(channelInfo.getChannelInfo())) { + return List.of(); + } + return CommonBeanCovert.INSTANCE.sdkChannelEntity2Remote(channelInfo.getChannelInfo()); + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java index 29db790..1e33a7e 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HikApiService.java @@ -1,6 +1,5 @@ package org.dromara.sis.sdk.hik; -import com.alibaba.fastjson2.JSONObject; import lombok.extern.slf4j.Slf4j; import org.dromara.sis.sdk.hik.model.DeviceInfo; import org.dromara.sis.sdk.hik.service.CamearService; @@ -58,7 +57,13 @@ public class HikApiService { int i = LoginService.loginDevice(ip, port, user, psw); boolean result = (i != SdkBaseServer.LOGIN_FAIL_CODE); if (result) { + // 上次登录信息依然存在 + if (CACHE.get(ip) != null && CACHE.get(ip) != i) { + loginOut(ip); + } CACHE.put(ip, i); + } else { + CACHE.remove(ip); } return result; } @@ -146,25 +151,4 @@ public class HikApiService { Integer lHandel = CACHE.get(deviceIp); return CamearService.getDeviceChannelInfo(lHandel); } - - - public static void main(String[] args) { -// String ip ="192.168.10.253"; -// short port = 8000; -// String user = "admin"; -// String wd ="ncqzfdl123"; - - String ip = "192.168.24.251"; - short port = 8000; - String user = "admin"; - String wd = "hik12345+"; - - SdkBaseServer.initSdk(); - getInstance().login(ip, port, user, wd); - Integer lHandel = CACHE.get(ip); - DeviceInfo deviceChannelInfo = CamearService.getDeviceChannelInfo(lHandel); - System.out.println(JSONObject.toJSONString(deviceChannelInfo)); - } - - } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/model/DeviceInfo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/model/DeviceInfo.java index 2341826..2e89de3 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/model/DeviceInfo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/model/DeviceInfo.java @@ -1,7 +1,7 @@ package org.dromara.sis.sdk.hik.model; import lombok.Data; -import org.dromara.sis.domain.enums.FactoryNoEnum; +import org.dromara.sis.api.enums.FactoryNoEnum; import java.util.List; @@ -65,7 +65,7 @@ public class DeviceInfo { private String channelPwd; /** - * 通过状态 + * 通过状态 1: 在线,2:离线 */ private Integer channelStatus; diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/CamearService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/CamearService.java index c31d4fd..2f66f9f 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/CamearService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/service/CamearService.java @@ -40,6 +40,7 @@ public class CamearService extends SdkBaseServer { deviceInfo.setChannelInfo(channelInfo); int num = 0; for (int i = 0; i < lpOutBuffer.dwDChanNum; i++) { + HCNetSDK.NET_DVR_PICCFG_V30 dvrPiccfgV30 = new HCNetSDK.NET_DVR_PICCFG_V30(); dvrPiccfgV30.dwSize = dvrPiccfgV30.size(); IntByReference lpBytesReturned = new IntByReference(0); @@ -59,13 +60,16 @@ public class CamearService extends SdkBaseServer { short wDVRPort = netDvrIpdevinfoV31.wDVRPort; DeviceInfo.DeviceChannelInfo deviceChannelInfo = new DeviceInfo.DeviceChannelInfo(); - deviceChannelInfo.setChannelId( channelNum); + deviceChannelInfo.setChannelId(channelNum); deviceChannelInfo.setChannelName(channelName); deviceChannelInfo.setChannelIp(ip); deviceChannelInfo.setChannelPort(wDVRPort); deviceChannelInfo.setChannelAccount(sUserName); deviceChannelInfo.setChannelPwd(sPassword); deviceChannelInfo.setChannelStatus(0); + // 通道是否在线 + byte byEnable = lpOutBuffer.struStreamMode[i].uGetStream.struChanInfo.byEnable; + deviceChannelInfo.setChannelStatus((int) byEnable); channelInfo.add(deviceChannelInfo); num++; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceChannelService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceChannelService.java index c186913..5bb6b36 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceChannelService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceChannelService.java @@ -7,7 +7,6 @@ import org.dromara.sis.domain.SisDeviceChannel; import org.dromara.sis.domain.bo.SisDeviceChannelBo; import org.dromara.sis.domain.bo.SisDeviceManageBo; import org.dromara.sis.domain.vo.SisDeviceChannelVo; -import org.springframework.web.context.request.RequestAttributes; import java.util.Collection; import java.util.List; @@ -98,4 +97,18 @@ public interface ISisDeviceChannelService { SisDeviceChannel queryByChannelIp(String channelIp); + /** + * 通过设备ip查询设备通道信息 + * + * @param deviceIp 设备ip + * @return 返回通道列表 + */ + List queryByDeviceIp(String deviceIp); + + /** + * 更新设备状态 + * @param deviceIp 设备ip + * @return 返回是否操作成功 + */ + Boolean updateDeviceChannelState(String deviceIp, Integer onLineState); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceManageService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceManageService.java index 218b1b0..0525b34 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceManageService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceManageService.java @@ -90,4 +90,17 @@ public interface ISisDeviceManageService { * @return 返回设备报表 */ List queryByIds(List deviceIds); + + /** + * 查询所有的海康设备 + * @return 返回海康设备列表 + */ + List queryHikDevices(); + + /** + * 更新设备状态信息 + * @param sisDeviceManage 设备信息 + * @return 是否操作成功 + */ + Boolean updateDeviceState(SisDeviceManage sisDeviceManage); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java index de6f6f1..f09bfe0 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java @@ -3,6 +3,7 @@ package org.dromara.sis.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; @@ -13,10 +14,10 @@ import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.TreeUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.sis.api.enums.DeviceTypeEnum; import org.dromara.sis.domain.SisDeviceChannel; import org.dromara.sis.domain.bo.SisDeviceChannelBo; import org.dromara.sis.domain.bo.SisDeviceManageBo; -import org.dromara.sis.domain.enums.DeviceTypeEnum; import org.dromara.sis.domain.vo.SisDeviceChannelVo; import org.dromara.sis.domain.vo.SisDeviceGroupVo; import org.dromara.sis.mapper.SisDeviceChannelMapper; @@ -221,6 +222,8 @@ public class SisDeviceChannelServiceImpl implements ISisDeviceChannelService { channel.setDeviceMac(bo.getDeviceMac()); channel.setChannelNo(HikSdkConstans.DEFAULT_CHANNEL); channel.setTenantId(bo.getTenantId()); + // 默认设备在线 + channel.setChannelState(1); Boolean insert = this.insert(channel); log.info("设备[{}]通道添加完成,result={}", bo.getDeviceIp(), insert); } else { @@ -244,6 +247,8 @@ public class SisDeviceChannelServiceImpl implements ISisDeviceChannelService { channel.setDevicePort(Integer.valueOf(item.getChannelPort())); channel.setDeviceAccount(item.getChannelAccount()); channel.setFactoryNo(channelInfo.getFactoryNo()); + channel.setChannelNo(HikSdkConstans.DEFAULT_CHANNEL); + channel.setChannelState(item.getChannelStatus()); if (StrUtil.isNotEmpty(item.getChannelPwd())) { channel.setDevicePwd(item.getChannelPwd()); } @@ -297,4 +302,18 @@ public class SisDeviceChannelServiceImpl implements ISisDeviceChannelService { return baseMapper.delete(lqw); } + @Override + public List queryByDeviceIp(String deviceIp) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(SisDeviceChannel::getDeviceIp, deviceIp); + return baseMapper.selectList(lqw); + } + + @Override + public Boolean updateDeviceChannelState(String deviceIp, Integer onLineState) { + LambdaUpdateWrapper lqw = new LambdaUpdateWrapper<>(); + lqw.set(SisDeviceChannel::getChannelState, onLineState); + lqw.eq(SisDeviceChannel::getDeviceIp, deviceIp); + return baseMapper.update(lqw) > 0; + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java index 5b93e49..7ac272b 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java @@ -2,6 +2,7 @@ package org.dromara.sis.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; @@ -12,9 +13,9 @@ import org.dromara.common.core.utils.SpringUtils; 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.api.enums.FactoryNoEnum; import org.dromara.sis.domain.SisDeviceManage; import org.dromara.sis.domain.bo.SisDeviceManageBo; -import org.dromara.sis.domain.enums.FactoryNoEnum; import org.dromara.sis.domain.vo.SisDeviceManageVo; import org.dromara.sis.mapper.SisDeviceManageMapper; import org.dromara.sis.sdk.hik.HikApiService; @@ -23,8 +24,6 @@ import org.dromara.sis.service.ISisDeviceManageService; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.context.request.RequestAttributes; -import org.springframework.web.context.request.RequestContextHolder; import java.util.*; @@ -207,4 +206,19 @@ public class SisDeviceManageServiceImpl implements ISisDeviceManageService { public List queryByIds(List deviceIds) { return baseMapper.selectByIds(deviceIds); } + + @Override + public List queryHikDevices() { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SisDeviceManage::getFactoryNo, FactoryNoEnum.HIK.getCode()); + return baseMapper.selectList(lqw); + } + + @Override + public Boolean updateDeviceState(SisDeviceManage sisDeviceManage) { + LambdaUpdateWrapper lqw = Wrappers.lambdaUpdate(); + lqw.set(SisDeviceManage::getDeviceStatus, sisDeviceManage.getDeviceStatus()) + .eq(SisDeviceManage::getId, sisDeviceManage.getId()); + return baseMapper.update(lqw) > 0; + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/task/DataSyncTask.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/task/DataSyncTask.java index 438e9c1..1aef66a 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/task/DataSyncTask.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/task/DataSyncTask.java @@ -36,7 +36,7 @@ public class DataSyncTask { /** * 定时同步报警记录数据 */ - @Scheduled(fixedRate = 60 * 1000) // 每分钟执行一次 +// @Scheduled(fixedRate = 60 * 1000) // 每分钟执行一次 public void syncAlarmRecords() { log.info("开始同步报警记录数据..."); diff --git a/ruoyi-modules/ruoyi-job/pom.xml b/ruoyi-modules/ruoyi-job/pom.xml index ab2e869..a630212 100644 --- a/ruoyi-modules/ruoyi-job/pom.xml +++ b/ruoyi-modules/ruoyi-job/pom.xml @@ -69,6 +69,12 @@ org.dromara ruoyi-api-system + + org.dromara + sis-api + 2.4.0 + compile + diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/SummaryBillTask.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/SummaryBillTask.java index bff15f9..313e76c 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/SummaryBillTask.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/SummaryBillTask.java @@ -5,6 +5,7 @@ import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; import com.aizuda.snailjob.client.job.core.dto.JobArgs; import com.aizuda.snailjob.client.model.ExecuteResult; import com.aizuda.snailjob.common.log.SnailJobLog; +import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.json.utils.JsonUtils; import org.dromara.job.entity.BillDto; import org.springframework.stereotype.Component; diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/HikDeviceCheckStateTask.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/HikDeviceCheckStateTask.java new file mode 100644 index 0000000..4c0ba39 --- /dev/null +++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/sis/HikDeviceCheckStateTask.java @@ -0,0 +1,119 @@ +package org.dromara.job.snailjob.sis; + +import cn.hutool.core.collection.CollUtil; +import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; +import com.aizuda.snailjob.client.job.core.dto.JobArgs; +import com.aizuda.snailjob.client.model.ExecuteResult; +import com.aizuda.snailjob.common.log.SnailJobLog; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.sis.api.RemoteHikDeviceService; +import org.dromara.sis.api.RemoteHikSdkService; +import org.dromara.sis.api.domain.RemoteSdkChannel; +import org.dromara.sis.api.domain.RemoteSisDeviceChannel; +import org.dromara.sis.api.domain.RemoteSisDeviceManage; +import org.dromara.sis.api.enums.DeviceTypeEnum; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 海康设备定时监测状态任务 + * 执行时间为每5分钟执行一次 + * + * @author lxj + */ +@Component +@RequiredArgsConstructor +@JobExecutor(name = "hikDeviceCheckStateTask") +public class HikDeviceCheckStateTask { + + @DubboReference + private RemoteHikDeviceService remoteHikDeviceService; + @DubboReference + private RemoteHikSdkService remoteHikSdkService; + + + /** + * 海康设备定时监测状态任务 + * + * @param jobArgs 任务执行参数 + * @return 返回是否执行成功 + * @throws InterruptedException + */ + public ExecuteResult jobExecute(JobArgs jobArgs) throws InterruptedException { + List device = remoteHikDeviceService.queryHikDevices(); + if (CollUtil.isEmpty(device)) { + SnailJobLog.REMOTE.info("需要同步的hik设备数量为0,任务执行结束"); + return ExecuteResult.success(); + } + SnailJobLog.REMOTE.info("需要同步状态的设备数量", device.size()); + device.forEach(item -> { + // ipc + if (DeviceTypeEnum.IPC.getType().equals(item.getDeviceType())) { + updateDeviceStatus(item); + } + + if (DeviceTypeEnum.NVR.getType().equals(item.getDeviceType())) { + // 设备状态更新完成 + boolean b = updateDeviceStatus(item); + if (b) { + updateDeviceChannelStatus(item); + } + } + + }); + return ExecuteResult.success(); + } + + /** + * 更新nvr设备通道信息 + * + * @param sisDeviceManage 设备信息 + * @return + */ + private void updateDeviceChannelStatus(RemoteSisDeviceManage sisDeviceManage) { + // 查询设备通道信息 + List ls = remoteHikDeviceService.queryDeviceChannels(sisDeviceManage.getDeviceIp()); + SnailJobLog.REMOTE.info("设备[{}]本地通道数量={}", sisDeviceManage.getDeviceIp(), ls.size()); + List sdkChannels = remoteHikSdkService.getDeviceChannel(sisDeviceManage.getDeviceIp()); + SnailJobLog.REMOTE.info("设备[{}]sdk通道数量={}", sisDeviceManage.getDeviceIp(), sdkChannels.size()); + + Map data1 = ls.stream().collect(Collectors.toMap(RemoteSisDeviceChannel::getDeviceIp, item -> item)); + Map data2 = sdkChannels.stream().collect(Collectors.toMap(RemoteSdkChannel::getChannelIp, item -> item)); + + + + + + } + + + /** + * 更新设备状态 + * + * @param item 设备信息 + * @return 返回设备是否在线 + */ + private boolean updateDeviceStatus(RemoteSisDeviceManage item) { + // 调用设备登录验证次设备在线 + Boolean isLogin = remoteHikSdkService.deviceLogin(item); + int onLineState = isLogin ? 1 : 0; + if (item.getDeviceStatus() != onLineState) { + SnailJobLog.REMOTE.info("设备[{}]在线状态变更,开始更新状态。 old={},new ={} ", item.getDeviceIp(), item.getDeviceStatus(), onLineState); + item.setDeviceStatus(onLineState); + Boolean result = remoteHikDeviceService.updateDeviceState(item); + SnailJobLog.REMOTE.info("设备[{}]在线状态变更,状态更新完成。 result={} ", item.getDeviceIp(), result); + + // 监测当前设备是否存在通道,如果有则跟新通道信息 + List ls = remoteHikDeviceService.queryDeviceChannels(item.getDeviceIp()); + if (CollUtil.isNotEmpty(ls)) { + Boolean r1 = remoteHikDeviceService.updateDeviceChannelState(item.getDeviceIp(), onLineState); + SnailJobLog.REMOTE.info("设备通道[{}]在线状态变更,状态更新完成。 result={} ", item.getDeviceIp(), r1); + } + } + return isLogin; + } +}