diff --git a/pom.xml b/pom.xml index 31374a7..12792e2 100644 --- a/pom.xml +++ b/pom.xml @@ -74,10 +74,8 @@ dev - - - 47.109.37.87:8848 - 47.109.37.87:4560 + 127.0.0.1:8848 + 127.0.0.1:4560 DEFAULT_GROUP DEFAULT_GROUP nacos diff --git a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteUnitService.java b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteUnitService.java new file mode 100644 index 0000000..175b9b0 --- /dev/null +++ b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteUnitService.java @@ -0,0 +1,13 @@ +package org.dromara.property.api; + +import org.dromara.property.api.domain.vo.RemoteUnitVo; + +/** + * 物业楼层远程服务 + * @author lxj + */ +public interface RemoteUnitService { + + RemoteUnitVo queryUnitById(Long id); + +} diff --git a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteUnitVo.java b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteUnitVo.java new file mode 100644 index 0000000..97b6e0b --- /dev/null +++ b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteUnitVo.java @@ -0,0 +1,51 @@ +package org.dromara.property.api.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 单元信息 + * + * @author lxj + */ +@Data +public class RemoteUnitVo implements Serializable { + + @Serial + private static final long serialVersionUID = -11L; + + /** + * 主键id + */ + private Long id; + + private Long communityId; + + /** + * 建筑名称 + */ + private Long buildingId; + + /** + * 单元名称 + */ + private String unitName; + + /** + * 单元层数 + */ + private Integer floorCount; + + /** + * 单元户数 + */ + private Integer householdCount; + + /** + * 楼梯数量 + */ + private Integer stairCount; + +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CodePrefixConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CodePrefixConstants.java index 5588b19..7d1e158 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CodePrefixConstants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CodePrefixConstants.java @@ -15,4 +15,8 @@ public interface CodePrefixConstants { * 人像编码前缀 */ String PERSON_LIB_IMAGE_CODE_PREFIX = "102"; + + String ELEVATOR_CONTROL_CODE_PREFIX = "E01"; + + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java index 69802b6..b4735df 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java @@ -26,7 +26,7 @@ import java.util.Date; public class TbFloorVo implements Serializable { @Serial - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = -1L; /** * diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteUnitServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteUnitServiceImpl.java new file mode 100644 index 0000000..7016393 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteUnitServiceImpl.java @@ -0,0 +1,39 @@ +package org.dromara.property.dubbo; + +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.property.api.RemoteUnitService; +import org.dromara.property.api.domain.vo.RemoteUnitVo; +import org.dromara.property.domain.vo.TbUnitVo; +import org.dromara.property.service.ITbUnitService; + +/** + * 对外提供的远程服务调用 + * + * @author lxj + */ +@DubboService +@RequiredArgsConstructor +public class RemoteUnitServiceImpl implements RemoteUnitService { + + private final ITbUnitService tbUnitService; + + + @Override + public RemoteUnitVo queryUnitById(Long id) { + TbUnitVo tbUnitVo = tbUnitService.queryById(id); + if(tbUnitVo == null) { + return null; + } + RemoteUnitVo remoteUnitVo = new RemoteUnitVo(); + remoteUnitVo.setId(tbUnitVo.getId()); + remoteUnitVo.setCommunityId(tbUnitVo.getCommunityId()); + remoteUnitVo.setBuildingId(tbUnitVo.getBuildingId()); + remoteUnitVo.setUnitName(tbUnitVo.getUnitName()); + remoteUnitVo.setFloorCount(tbUnitVo.getFloorCount()); + remoteUnitVo.setHouseholdCount(tbUnitVo.getHouseholdCount()); + remoteUnitVo.setStairCount(tbUnitVo.getStairCount()); + return remoteUnitVo; + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisElevatorInfoController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisElevatorInfoController.java new file mode 100644 index 0000000..c96c39e --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisElevatorInfoController.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.SisElevatorInfoVo; +import org.dromara.sis.domain.bo.SisElevatorInfoBo; +import org.dromara.sis.service.ISisElevatorInfoService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 电梯基本信息 + * 前端访问路由地址为:/sis/elevatorInfo + * + * @author lxj + * @date 2025-07-10 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/elevatorInfo") +public class SisElevatorInfoController extends BaseController { + + private final ISisElevatorInfoService sisElevatorInfoService; + + /** + * 查询电梯基本信息列表 + */ + @SaCheckPermission("sis:elevatorInfo:list") + @GetMapping("/list") + public TableDataInfo list(SisElevatorInfoBo bo, PageQuery pageQuery) { + return sisElevatorInfoService.queryPageList(bo, pageQuery); + } + + /** + * 导出电梯基本信息列表 + */ + @SaCheckPermission("sis:elevatorInfo:export") + @Log(title = "电梯基本信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SisElevatorInfoBo bo, HttpServletResponse response) { + List list = sisElevatorInfoService.queryList(bo); + ExcelUtil.exportExcel(list, "电梯基本信息", SisElevatorInfoVo.class, response); + } + + /** + * 获取电梯基本信息详细信息 + * + * @param elevatorId 主键 + */ + @SaCheckPermission("sis:elevatorInfo:query") + @GetMapping("/{elevatorId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("elevatorId") Long elevatorId) { + return R.ok(sisElevatorInfoService.queryById(elevatorId)); + } + + /** + * 新增电梯基本信息 + */ + @SaCheckPermission("sis:elevatorInfo:add") + @Log(title = "电梯基本信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SisElevatorInfoBo bo) { + return toAjax(sisElevatorInfoService.insertByBo(bo)); + } + + /** + * 修改电梯基本信息 + */ + @SaCheckPermission("sis:elevatorInfo:edit") + @Log(title = "电梯基本信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SisElevatorInfoBo bo) { + return toAjax(sisElevatorInfoService.updateByBo(bo)); + } + + /** + * 删除电梯基本信息 + * + * @param elevatorIds 主键串 + */ + @SaCheckPermission("sis:elevatorInfo:remove") + @Log(title = "电梯基本信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{elevatorIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("elevatorIds") Long[] elevatorIds) { + return toAjax(sisElevatorInfoService.deleteWithValidByIds(List.of(elevatorIds), true)); + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorInfo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorInfo.java new file mode 100644 index 0000000..822333f --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorInfo.java @@ -0,0 +1,138 @@ +package org.dromara.sis.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 电梯基本信息对象 sis_elevator_info + * + * @author lxj + * @date 2025-07-10 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sis_elevator_info") +public class SisElevatorInfo extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId(value = "elevator_id") + private Long elevatorId; + + /** + * 电梯编号 + */ + private String elevatorCode; + + /** + * 电梯名称 + */ + private String elevatorName; + + /** + * 安装位置 + */ + private String location; + + /** + * 品牌 + */ + private String brand; + + /** + * 型号 + */ + private String model; + + /** + * 生产日期 + */ + private Date manufactureDate; + + /** + * 安装日期 + */ + private Date installationDate; + + /** + * 最大载重(kg) + */ + private Long maxLoad; + + /** + * 服务楼层数 + */ + private Long floorsServed; + + /** + * 维保公司 + */ + private String maintenanceCompany; + + /** + * 维保电话 + */ + private String maintenancePhone; + + /** + * 上次年检日期 + */ + private Date lastInspectionDate; + + /** + * 下次年检日期 + */ + private Date nextInspectionDate; + + /** + * 梯控厂商 + */ + private String controlFactory; + + /** + * 梯控设备ip + */ + private String controlIp; + + /** + * 梯控设备编码 + */ + private Long controlPort; + + /** + * 梯控设备登录账号 + */ + private String controlAccount; + + /** + * 梯控设备登录密码 + */ + private String controlPwd; + + + /** + * 园区id + */ + private Long communityId; + + /** + * 建筑id + */ + private Long buildingId; + + /** + * 单元编码 + */ + private Long unitId; + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisElevatorInfoBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisElevatorInfoBo.java new file mode 100644 index 0000000..accc46a --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisElevatorInfoBo.java @@ -0,0 +1,144 @@ +package org.dromara.sis.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +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.SisElevatorInfo; + +import java.util.Date; + +/** + * 电梯基本信息业务对象 sis_elevator_info + * + * @author lxj + * @date 2025-07-10 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SisElevatorInfo.class, reverseConvertGenerate = false) +public class SisElevatorInfoBo extends BaseEntity { + + /** + * + */ + @NotNull(message = "电梯id不能为空", groups = {EditGroup.class}) + private Long elevatorId; + + /** + * 电梯编号 + */ +// @NotBlank(message = "电梯编号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String elevatorCode; + + /** + * 电梯名称 + */ + @NotBlank(message = "电梯名称不能为空", groups = {AddGroup.class, EditGroup.class}) + private String elevatorName; + + /** + * 安装位置 + */ + @NotBlank(message = "安装位置不能为空", groups = {AddGroup.class, EditGroup.class}) + private String location; + + /** + * 品牌 + */ + private String brand; + + /** + * 型号 + */ + private String model; + + /** + * 生产日期 + */ + private Date manufactureDate; + + /** + * 安装日期 + */ + private Date installationDate; + + /** + * 最大载重(kg) + */ + private Long maxLoad; + + /** + * 服务楼层数 + */ + private Long floorsServed; + + /** + * 维保公司 + */ + private String maintenanceCompany; + + /** + * 维保电话 + */ + private String maintenancePhone; + + /** + * 上次年检日期 + */ + private Date lastInspectionDate; + + /** + * 下次年检日期 + */ + private Date nextInspectionDate; + + /** + * 梯控厂商 + */ + @NotBlank(message = "梯控厂商不能为空", groups = {AddGroup.class, EditGroup.class}) + private String controlFactory; + + /** + * 梯控设备ip + */ + @NotBlank(message = "梯控设备ip不能为空", groups = {AddGroup.class, EditGroup.class}) + private String controlIp; + + /** + * 梯控设备编码 + */ + @NotNull(message = "梯控设备编码不能为空", groups = {AddGroup.class, EditGroup.class}) + private Integer controlPort; + + /** + * 梯控设备登录账号 + */ + private String controlAccount; + + /** + * 梯控设备登录密码 + */ + private String controlPwd; + + + /** + * 园区id + */ + private Long communityId; + + /** + * 建筑id + */ + private Long buildingId; + + /** + * 单元编码 + */ + @NotNull(message = "不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long unitId; +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorInfoVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorInfoVo.java new file mode 100644 index 0000000..308aebf --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorInfoVo.java @@ -0,0 +1,162 @@ +package org.dromara.sis.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.sis.domain.SisElevatorInfo; +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_elevator_info + * + * @author lxj + * @date 2025-07-10 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SisElevatorInfo.class) +public class SisElevatorInfoVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "电梯id") + private Long elevatorId; + + /** + * 电梯编号 + */ + @ExcelProperty(value = "电梯编号") + private String elevatorCode; + + /** + * 电梯名称 + */ + @ExcelProperty(value = "电梯名称") + private String elevatorName; + + /** + * 安装位置 + */ + @ExcelProperty(value = "安装位置") + private String location; + + /** + * 品牌 + */ + @ExcelProperty(value = "品牌") + private String brand; + + /** + * 型号 + */ + @ExcelProperty(value = "型号") + private String model; + + /** + * 生产日期 + */ + @ExcelProperty(value = "生产日期") + private Date manufactureDate; + + /** + * 安装日期 + */ + @ExcelProperty(value = "安装日期") + private Date installationDate; + + /** + * 最大载重(kg) + */ + @ExcelProperty(value = "最大载重(kg)") + private Long maxLoad; + + /** + * 服务楼层数 + */ + @ExcelProperty(value = "服务楼层数") + private Long floorsServed; + + /** + * 维保公司 + */ + @ExcelProperty(value = "维保公司") + private String maintenanceCompany; + + /** + * 维保电话 + */ + @ExcelProperty(value = "维保电话") + private String maintenancePhone; + + /** + * 上次年检日期 + */ + @ExcelProperty(value = "上次年检日期") + private Date lastInspectionDate; + + /** + * 下次年检日期 + */ + @ExcelProperty(value = "下次年检日期") + private Date nextInspectionDate; + + /** + * 梯控厂商 + */ + @ExcelProperty(value = "梯控厂商") + private String controlFactory; + + /** + * 梯控设备ip + */ + @ExcelProperty(value = "梯控设备ip") + private String controlIp; + + /** + * 梯控设备编码 + */ + @ExcelProperty(value = "梯控设备编码") + private Long controlPort; + + /** + * 梯控设备登录账号 + */ + @ExcelProperty(value = "梯控设备登录账号") + private String controlAccount; + + /** + * 梯控设备登录密码 + */ + @ExcelProperty(value = "梯控设备登录密码") + private String controlPwd; + + + /** + * 园区id + */ + private Long communityId; + + /** + * 建筑id + */ + private Long buildingId; + + /** + * 单元编码 + */ + private Long unitId; +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisElevatorInfoMapper.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisElevatorInfoMapper.java new file mode 100644 index 0000000..59339c0 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/mapper/SisElevatorInfoMapper.java @@ -0,0 +1,15 @@ +package org.dromara.sis.mapper; + +import org.dromara.sis.domain.SisElevatorInfo; +import org.dromara.sis.domain.vo.SisElevatorInfoVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 电梯基本信息Mapper接口 + * + * @author lxj + * @date 2025-07-10 + */ +public interface SisElevatorInfoMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java new file mode 100644 index 0000000..5adfabe --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java @@ -0,0 +1,36 @@ +package org.dromara.sis.runner; + +import cn.hutool.core.collection.CollUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.sis.domain.vo.SisElevatorInfoVo; +import org.dromara.sis.sdk.hik.HikApiService; +import org.dromara.sis.service.ISisElevatorInfoService; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Slf4j +@RequiredArgsConstructor +@Component +public class HikDeviceApplicationRunner implements ApplicationRunner { + + private final ISisElevatorInfoService elevatorInfoService; + + + @Override + public void run(ApplicationArguments args) throws Exception { + // 现在查询全部,后面要更具需要查询指定厂商的设备 + List sisElevatorInfoVos = elevatorInfoService.queryAll(); + if (CollUtil.isNotEmpty(sisElevatorInfoVos)) { + sisElevatorInfoVos.forEach(item -> { + // 执行设备登录操作 + HikApiService.getInstance().login(item.getControlIp(), item.getControlPort().shortValue(), item.getControlAccount(), item.getControlPwd()); + // todo 更新设备心跳信息 + }); + } + + } +} 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 7985b4f..f4003e9 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 @@ -7,14 +7,24 @@ import org.dromara.sis.sdk.hik.service.SdkBaseServer; import java.util.concurrent.ConcurrentHashMap; +/** + * 海康sdk 接口服务 + * + * @author lxj + * @since 25-07-10 + */ @Slf4j public class HikApiService { + /** + * 缓存设备登录句柄的map + */ + private static final ConcurrentHashMap CACHE = new ConcurrentHashMap<>(16); + private HikApiService() { } private static volatile HikApiService instance; - public static HikApiService getInstance() { if (instance == null) { synchronized (HikApiService.class) { @@ -26,10 +36,7 @@ public class HikApiService { return instance; } - /** - * 缓存设备登录句柄的map - */ - private static final ConcurrentHashMap CACHE = new ConcurrentHashMap<>(16); + /** * 执行hiksdk登录 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorInfoService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorInfoService.java new file mode 100644 index 0000000..657bc1d --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorInfoService.java @@ -0,0 +1,74 @@ +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.SisElevatorInfoBo; +import org.dromara.sis.domain.vo.SisElevatorInfoVo; + +import java.util.Collection; +import java.util.List; + +/** + * 电梯基本信息Service接口 + * + * @author lxj + * @date 2025-07-10 + */ +public interface ISisElevatorInfoService { + + /** + * 查询电梯基本信息 + * + * @param elevatorId 主键 + * @return 电梯基本信息 + */ + SisElevatorInfoVo queryById(Long elevatorId); + + /** + * 分页查询电梯基本信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 电梯基本信息分页列表 + */ + TableDataInfo queryPageList(SisElevatorInfoBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的电梯基本信息列表 + * + * @param bo 查询条件 + * @return 电梯基本信息列表 + */ + List queryList(SisElevatorInfoBo bo); + + /** + * 新增电梯基本信息 + * + * @param bo 电梯基本信息 + * @return 是否新增成功 + */ + Boolean insertByBo(SisElevatorInfoBo bo); + + /** + * 修改电梯基本信息 + * + * @param bo 电梯基本信息 + * @return 是否修改成功 + */ + Boolean updateByBo(SisElevatorInfoBo bo); + + /** + * 校验并批量删除电梯基本信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 查询所有的电梯信息 + * @return 返回电梯列表 + */ + List queryAll(); +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java new file mode 100644 index 0000000..432f35a --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java @@ -0,0 +1,182 @@ +package org.dromara.sis.service.impl; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.IdUtil; +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.apache.dubbo.config.annotation.DubboReference; +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.api.RemoteUnitService; +import org.dromara.property.api.domain.vo.RemoteUnitVo; +import org.dromara.sis.domain.SisElevatorInfo; +import org.dromara.sis.domain.bo.SisElevatorInfoBo; +import org.dromara.sis.domain.vo.SisElevatorInfoVo; +import org.dromara.sis.mapper.SisElevatorInfoMapper; +import org.dromara.sis.service.ISisElevatorInfoService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import static org.dromara.common.core.constant.CodePrefixConstants.ELEVATOR_CONTROL_CODE_PREFIX; + +/** + * 电梯基本信息Service业务层处理 + * + * @author lxj + * @date 2025-07-10 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService { + + private final SisElevatorInfoMapper baseMapper; + + @DubboReference + private RemoteUnitService remoteUnitService; + + /** + * 查询电梯基本信息 + * + * @param elevatorId 主键 + * @return 电梯基本信息 + */ + @Override + public SisElevatorInfoVo queryById(Long elevatorId) { + return baseMapper.selectVoById(elevatorId); + } + + /** + * 分页查询电梯基本信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 电梯基本信息分页列表 + */ + @Override + public TableDataInfo queryPageList(SisElevatorInfoBo 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(SisElevatorInfoBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SisElevatorInfoBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(SisElevatorInfo::getElevatorId); + lqw.eq(StringUtils.isNotBlank(bo.getElevatorCode()), SisElevatorInfo::getElevatorCode, bo.getElevatorCode()); + lqw.like(StringUtils.isNotBlank(bo.getElevatorName()), SisElevatorInfo::getElevatorName, bo.getElevatorName()); + lqw.eq(StringUtils.isNotBlank(bo.getLocation()), SisElevatorInfo::getLocation, bo.getLocation()); + lqw.eq(StringUtils.isNotBlank(bo.getBrand()), SisElevatorInfo::getBrand, bo.getBrand()); + lqw.eq(StringUtils.isNotBlank(bo.getModel()), SisElevatorInfo::getModel, bo.getModel()); + lqw.eq(bo.getManufactureDate() != null, SisElevatorInfo::getManufactureDate, bo.getManufactureDate()); + lqw.eq(bo.getInstallationDate() != null, SisElevatorInfo::getInstallationDate, bo.getInstallationDate()); + lqw.eq(bo.getMaxLoad() != null, SisElevatorInfo::getMaxLoad, bo.getMaxLoad()); + lqw.eq(bo.getFloorsServed() != null, SisElevatorInfo::getFloorsServed, bo.getFloorsServed()); + lqw.eq(StringUtils.isNotBlank(bo.getMaintenanceCompany()), SisElevatorInfo::getMaintenanceCompany, bo.getMaintenanceCompany()); + lqw.eq(StringUtils.isNotBlank(bo.getMaintenancePhone()), SisElevatorInfo::getMaintenancePhone, bo.getMaintenancePhone()); + lqw.eq(bo.getLastInspectionDate() != null, SisElevatorInfo::getLastInspectionDate, bo.getLastInspectionDate()); + lqw.eq(bo.getNextInspectionDate() != null, SisElevatorInfo::getNextInspectionDate, bo.getNextInspectionDate()); + lqw.eq(StringUtils.isNotBlank(bo.getControlFactory()), SisElevatorInfo::getControlFactory, bo.getControlFactory()); + lqw.eq(StringUtils.isNotBlank(bo.getControlIp()), SisElevatorInfo::getControlIp, bo.getControlIp()); + lqw.eq(bo.getControlPort() != null, SisElevatorInfo::getControlPort, bo.getControlPort()); + lqw.eq(StringUtils.isNotBlank(bo.getControlAccount()), SisElevatorInfo::getControlAccount, bo.getControlAccount()); + lqw.eq(StringUtils.isNotBlank(bo.getControlPwd()), SisElevatorInfo::getControlPwd, bo.getControlPwd()); + return lqw; + } + + /** + * 新增电梯基本信息 + * + * @param bo 电梯基本信息 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(SisElevatorInfoBo bo) { + // 验证单元是否存在 + RemoteUnitVo remoteUnitVo = remoteUnitService.queryUnitById(bo.getUnitId()); + Assert.notNull(remoteUnitVo, "社区单元信息不存在。"); + SisElevatorInfo add = MapstructUtils.convert(bo, SisElevatorInfo.class); + Assert.notNull(add, "电梯信息处理失败。"); + add.setCommunityId(remoteUnitVo.getCommunityId()); + add.setBuildingId(remoteUnitVo.getBuildingId()); + // 生成电梯编码 + String code = ELEVATOR_CONTROL_CODE_PREFIX + IdUtil.getSnowflakeNextIdStr(); + add.setElevatorCode(code); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setElevatorId(add.getElevatorId()); + // sdk 链接设备 +// short port = bo.getControlPort().shortValue(); +// Boolean isLogin = HikApiService.getInstance().login(bo.getControlIp(), port, bo.getControlAccount(), bo.getControlPwd()); +// if (!isLogin) { +// throw new RuntimeException("电梯添加失败, 发起梯控设备连接失败."); +// } + // todo 发起电梯楼层信息同步 + } + return flag; + } + + /** + * 修改电梯基本信息 + * + * @param bo 电梯基本信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SisElevatorInfoBo bo) { + SisElevatorInfo update = MapstructUtils.convert(bo, SisElevatorInfo.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SisElevatorInfo 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 List queryAll() { + return baseMapper.selectVoList(); + } +} diff --git a/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisElevatorInfoMapper.xml b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisElevatorInfoMapper.xml new file mode 100644 index 0000000..2ae1b71 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisElevatorInfoMapper.xml @@ -0,0 +1,7 @@ + + + + +