E8门禁业务
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 7m18s

This commit is contained in:
2025-06-25 12:54:08 +08:00
parent 1a2524ce15
commit bd3ab40be6
15 changed files with 598 additions and 130 deletions

View File

@@ -1,64 +0,0 @@
package org.dromara.sis.controller;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.sis.sdk.e8.AccessControlService;
import org.dromara.sis.sdk.e8.domain.accesscontrol.req.RemoteOpenDoorReq;
import org.dromara.sis.sdk.e8.domain.accesscontrol.res.AccessRecordFindRes;
import org.dromara.sis.sdk.e8.domain.QueryDto;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author lsm
* @apiNote AccessControlController
* @since 2025/6/24
*/
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/e8accessControl")
public class AccessControlController {
private final AccessControlService accessControlService;
/**
* 远程开门
*
* @param req 传参
* @return Boolean
*/
@PostMapping("/remoteOpenDoor")
public R<Boolean> remoteOpenDoor(RemoteOpenDoorReq req) {
log.info("E8远程开门 入参:{}", req);
Boolean flag = accessControlService.remoteOpenDoor(req);
if (flag) {
return R.ok();
} else {
return R.fail("E8远程开门调用失败");
}
}
/**
* 获取门禁记录列表
*
* @param dto 查询参数
* @return IPage<AccessRecordFindRes>
*/
@PostMapping("/getPageAccessRecordList")
public R<TableDataInfo<AccessRecordFindRes>> getPageAccessRecordList(QueryDto dto) {
log.info("E8获取门禁记录列表 入参:{}", dto);
TableDataInfo<AccessRecordFindRes> page = accessControlService.getPageAccessRecordList(dto);
if (page == null) {
return R.fail("E8获取门禁记录列表调用失败");
} else {
return R.ok(page);
}
}
}

View File

@@ -0,0 +1,108 @@
package org.dromara.sis.controller.e8;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.sis.sdk.e8.AccessControlService;
import org.dromara.sis.sdk.e8.domain.accessControl.req.CustomerAuthAddReq;
import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq;
import org.dromara.sis.sdk.e8.domain.accessControl.res.AccessRecordFindRes;
import org.dromara.sis.sdk.e8.domain.QueryDto;
import org.dromara.sis.sdk.e8.domain.accessControl.res.CustomerAuthFindRes;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author lsm
* @apiNote AccessControlController
* @since 2025/6/24
*/
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/e8accessControl")
public class AccessControlController {
private final AccessControlService accessControlService;
/**
* 远程开门
*
* @param req 传参
* @return Boolean
*/
@PostMapping("/remoteOpenDoor")
public R<Boolean> remoteOpenDoor(@RequestBody RemoteOpenDoorReq req) {
log.info("E8远程开门 入参:{}", req);
Boolean flag = accessControlService.remoteOpenDoor(req);
if (flag) {
return R.ok();
} else {
return R.fail("E8远程开门调用失败");
}
}
/**
* 获取门禁记录列表
*
* @param dto 查询参数
* @return IPage<AccessRecordFindRes>
* @apiNote 获取参数示例 {"maxResultCount":10,"pageIndex":1,"queryDto":{"isViewFullData":false}}
*/
@PostMapping("/getPageAccessRecordList")
public R<TableDataInfo<AccessRecordFindRes>> getPageAccessRecordList(@RequestBody QueryDto dto) {
log.info("E8获取门禁记录列表 入参:{}", dto);
TableDataInfo<AccessRecordFindRes> page = accessControlService.getPageAccessRecordList(dto);
if (page == null) {
return R.fail("E8获取门禁记录列表调用失败");
} else {
return R.ok(page);
}
}
/**
* 人员授权
*
* @param req 传参
* @return Boolean
* @apiNote 参数示例 {"accessAuthModel":0,"authData":[{"floors":[],"gatewayType":1,"id":528705580163141,"type":0}],"authType":0,"elevatorAuthModel":1,"endTime":"2025-07-2511: 23: 39","personIds":[539696740646981],"scheduleId":1,"startTime":"2025-06-2511: 23: 39"}
*/
@PostMapping("/addCustomerAuth")
public R<Boolean> addCustomerAuth(@RequestBody CustomerAuthAddReq req) {
log.info("E8人员授权 入参:{}", req);
Boolean flag = accessControlService.addCustomerAuth(req);
if (flag) {
return R.ok();
} else {
return R.fail("E8人员授权调用失败");
}
}
/**
* 获取人员权限分页列表
*
* @param dto 获取参数
* @return TableDataInfo<CustomerAuthFindRes>
* @apiNote 获取参数示例 {"maxResultCount":10,"pageIndex":1,"queryDto":{"isViewFullData":false}}
*/
@PostMapping("getPageCustomerAuth")
public R<TableDataInfo<CustomerAuthFindRes>> getPageCustomerAuth(@RequestBody QueryDto dto) {
log.info("E8获取人员权限分页列表 入参:{}", dto);
TableDataInfo<CustomerAuthFindRes> page = accessControlService.getPageCustomerAuth(dto);
if (page == null) {
return R.fail("E8获取人员权限分页列表调用失败");
} else {
return R.ok(page);
}
}
}

View File

@@ -1,4 +1,4 @@
package org.dromara.sis.controller;
package org.dromara.sis.controller.e8;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -9,7 +9,6 @@ import org.dromara.sis.sdk.e8.domain.door.req.DoorDeviceAddReq;
import org.dromara.sis.sdk.e8.domain.door.req.DoorDeviceUpdateReq;
import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceAddRes;
import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceFindRes;
import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceUpdateRes;
import org.dromara.sis.sdk.e8.domain.QueryDto;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
@@ -70,15 +69,15 @@ public class DoorDeviceController {
* @return Boolean
*/
@PostMapping("/updateDoorDevice")
public R<DoorDeviceUpdateRes> updateDoorDevice(@RequestBody DoorDeviceUpdateReq updateReq) {
public R<Boolean> updateDoorDevice(@RequestBody DoorDeviceUpdateReq updateReq) {
log.info("E8接口门禁信息修改 入参={}", updateReq);
DoorDeviceUpdateRes doorDevice = doorDeviceService.updateDoorDevice(updateReq);
Boolean flag = doorDeviceService.updateDoorDevice(updateReq);
if (doorDevice == null) {
return R.fail("E8接口门禁信息修改调用失败");
if (flag) {
return R.ok();
} else {
return R.ok(doorDevice);
return R.fail("E8接口门禁信息修改调用失败");
}
}

View File

@@ -13,7 +13,6 @@ import java.io.Serializable;
import java.util.Date;
/**
* 宇视设备点位(通道)视图对象 sis_device_point
*
@@ -42,20 +41,17 @@ public class SisDevicePointVo implements Serializable {
/**
* 视频协议 1onvif 2
rtsp
* rtsp
*/
@ExcelProperty(value = "视频协议 1onvif 2
rtsp")
@ExcelProperty(value = "视频协议 1onvif 2rtsp")
private Long video;
/**
* 传输协议(AIBOX 需要,一
体机不需要) 1: tcp 2:
udp
* 体机不需要) 1: tcp 2:
* udp
*/
@ExcelProperty(value = "传输协议(AIBOX 需要,一
体机不需要) 1: tcp 2:
udp")
@ExcelProperty(value = "传输协议(AIBOX 需要,一体机不需要) 1:tcp 2:udp")
private Long transportType;
/**
@@ -66,11 +62,10 @@ udp")
/**
* rtsp 地址(当视频协议为
rtsp 时,该字段必填)
* rtsp 时,该字段必填)
*/
@ExcelProperty(value = "rtsp 地址", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "当=视频协议为
rtsp,时=,该字段必填")
@ExcelDictFormat(readConverterExp = "当=视频协议为rtsp, 时 =,该字段必填")
private String rtspAddr;
/**
@@ -99,24 +94,19 @@ rtsp,时=,该字段必填")
/**
* onvif 设备码流添加方
1主码流 2自定
义码流
1主码流 2自定
义码流
*/
@ExcelProperty(value = "onvif 设备码流添加方
1主码流 2自定
义码流")
@ExcelProperty(value = "onvif 设备码流添加方1主码流 2自定义码流")
private Long videoType;
/**
* 码流 id当选择自定义码
流时,该字段必填,值为
获取设备码流信息接口返
回的码流 id
流时,该字段必填,值为
获取设备码流信息接口返
回的码流 id
*/
@ExcelProperty(value = "码流 id当选择自定义码
流时,该字段必填,值为
获取设备码流信息接口返
回的码流 id")
@ExcelProperty(value = "码流 id当选择自定义码流时,该字段必填,值为获取设备码流信息接口返回的码流 id")
private Long videoId;
/**

View File

@@ -1,9 +1,12 @@
package org.dromara.sis.sdk.e8;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.sis.sdk.e8.domain.accesscontrol.req.RemoteOpenDoorReq;
import org.dromara.sis.sdk.e8.domain.accesscontrol.res.AccessRecordFindRes;
import org.dromara.sis.sdk.e8.domain.accessControl.req.CustomerAuthAddReq;
import org.dromara.sis.sdk.e8.domain.accessControl.req.CustomerAuthFindReq;
import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq;
import org.dromara.sis.sdk.e8.domain.accessControl.res.AccessRecordFindRes;
import org.dromara.sis.sdk.e8.domain.QueryDto;
import org.dromara.sis.sdk.e8.domain.accessControl.res.CustomerAuthFindRes;
/**
* @author lsm
@@ -29,19 +32,19 @@ public interface AccessControlService {
*/
TableDataInfo<AccessRecordFindRes> getPageAccessRecordList(QueryDto dto);
// /**
// * 人员授权
// *
// * @param imageFile 传参
// * @return Boolean
// */
// Boolean addCustomerAuth(Byte[] imageFile);
/**
* 人员授权
*
* @param req 传参
* @return Boolean
*/
Boolean addCustomerAuth(CustomerAuthAddReq req);
// /**
// * 获取人员权限分页列表
// *
// * @param dto 传参
// * @return
// */
// IPage getPageAccessControl(QueryDto dto);
/**
* 获取人员权限分页列表
*
* @param dto 传参
* @return TableDataInfo<CustomerAuthFindRes>
*/
TableDataInfo<CustomerAuthFindRes> getPageCustomerAuth(QueryDto dto);
}

View File

@@ -45,7 +45,7 @@ public interface DoorDeviceService {
* @param updateReq 入参
* @return DoorDeviceUpdateRes
*/
DoorDeviceUpdateRes updateDoorDevice(DoorDeviceUpdateReq updateReq);
Boolean updateDoorDevice(DoorDeviceUpdateReq updateReq);
/**
* 删除门禁信息

View File

@@ -1,4 +1,4 @@
package org.dromara.sis.sdk.e8.domain.accesscontrol.req;
package org.dromara.sis.sdk.e8.domain.accessControl.req;
import lombok.Data;

View File

@@ -0,0 +1,112 @@
package org.dromara.sis.sdk.e8.domain.accessControl.req;
import lombok.Data;
import java.util.List;
/**
* @author lsm
* @apiNote CustomerAuthAddReq
* @since 2025/6/25
*/
@Data
public class CustomerAuthAddReq {
/**
* 门禁授权类型 0:人员
*/
private Integer authType;
/**
* 时区ID
*/
private Long scheduleId;
/**
* 人员ID集合
*/
private List<Long> personIds;
/**
* 授权数据
*/
private List<AuthGroupData> authData;
/**
* 开始时间
*/
private String startTime;
/**
* 结束时间
*/
private String endTime;
/**
* 授权日期类型 0:默认 1:一月 2:半年 3:一年 4:三年 5:永久
*/
private Integer dateType;
@Data
public static class AuthGroupData {
/**
* 门/电梯ID
*/
private Long id;
/**
* 类型 0门 1电梯
*/
private Integer type;
/**
* 出入口类型 0:未知 1:入口 2:出口
*/
private Integer gatewayType;
/**
* 楼层
*/
private List<Floor> floors;
}
@Data
public static class Floor {
/**
* 楼层权限标识
*/
private Long floorId;
/**
* 楼层名称
*/
private String floorName;
/**
* 是否前门可用
*/
private Boolean isFrontDoor;
/**
* 是否后门可用
*/
private Boolean isBackDoor;
/**
* 是否选择前门
*/
private Boolean isSelectFrontDoor;
/**
* 是否选择后门
*/
private Boolean isSelectBackDoor;
/**
* 是否公共门
*/
private Boolean isCommonFloor;
}
}

View File

@@ -0,0 +1,52 @@
package org.dromara.sis.sdk.e8.domain.accessControl.req;
import lombok.Data;
/**
* @author lsm
* @apiNote CustomerAuthFindReq
* @since 2025/6/25
*/
@Data
public class CustomerAuthFindReq {
/**
* 是否脱敏 true脱敏敏感信息加***隐藏false完整显示
*/
private Boolean isViewFullData;
/**
* 客户编号
*/
private String customerNo;
/**
* 客户姓名
*/
private String customerName;
/**
* 客户手机号码
*/
private String customerMobile;
/**
* 组织ID
*/
private Long organId;
/**
* 门/电梯ID
*/
private Long itemId;
/**
* 授权开始时间
*/
private String authStartTime;
/**
* 授权结束时间
*/
private String authEndTime;
}

View File

@@ -1,4 +1,4 @@
package org.dromara.sis.sdk.e8.domain.accesscontrol.req;
package org.dromara.sis.sdk.e8.domain.accessControl.req;
import lombok.Data;

View File

@@ -1,4 +1,4 @@
package org.dromara.sis.sdk.e8.domain.accesscontrol.res;
package org.dromara.sis.sdk.e8.domain.accessControl.res;
import lombok.Data;

View File

@@ -0,0 +1,210 @@
package org.dromara.sis.sdk.e8.domain.accessControl.res;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* @author lsm
* @apiNote CustomerAuthFindRes
* @since 2025/6/25
*/
@Data
public class CustomerAuthFindRes {
/**
* 主键
*/
private Long id;
/**
* 创建时间
*/
private Date creationTime;
/**
* 创建人
*/
private String creatorId;
/**
* 最后修改时间
*/
private Date lastModificationTime;
/**
* 最后修改人
*/
private String lastModifierId;
/**
* 是否删除
*/
private Boolean isDeleted;
/**
* 删除人
*/
private String deleterId;
/**
* 删除时间
*/
private Date deletionTime;
/**
* 客户ID
*/
private Long personId;
/**
* 主设备ID
*/
private Long mainDeviceId;
/**
* 读头ID
*/
private Long readerId;
/**
* 组织ID
*/
private Long organId;
/**
* 组织名称
*/
private String orgName;
/**
* 区域ID
*/
private Long areaId;
/**
* 区域名称
*/
private String areaName;
/**
* 客户姓名
*/
private String customerName;
/**
* 客户编号
*/
private String customerNo;
/**
* 客户手机号码
*/
private String mobile;
/**
* 门/电梯名称
*/
private String itemName;
/**
* 是否显示敏感信息 true隐藏 false显示
*/
private Boolean isViewFullData;
/**
* 授权楼层字符串
*/
private String content;
/**
* 授权开始时间
*/
private Date startTime;
/**
* 授权结束时间
*/
private Date endTime;
/**
* 设施类型 0门禁 1电梯
*/
private Integer facilityType;
/**
* 时区ID
*/
private Long scheduleId;
/**
* 时区名称
*/
private String scheduleName;
/**
* 授权人
*/
private String authName;
/**
* 授权时间段
*/
private String duration;
/**
* 出入口类型 0:未知 1:入口 2:出口
*/
private Integer gatewayType;
/**
* 出入口类型描述
*/
private String gatewayTypeDesc;
/**
* 授权楼层
*/
private List<Floor> floors;
@Data
public static class Floor {
/**
* 楼层权限标识
*/
private Long floorId;
/**
* 楼层名称
*/
private String floorName;
/**
* 是否前门可用
*/
private Boolean isFrontDoor;
/**
* 是否后门可用
*/
private Boolean isBackDoor;
/**
* 是否选择前门
*/
private Boolean isSelectFrontDoor;
/**
* 是否选择后门
*/
private Boolean isSelectBackDoor;
/**
* 是否公共门
*/
private Boolean isCommonFloor;
}
}

View File

@@ -7,11 +7,14 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.sis.sdk.e8.AccessControlService;
import org.dromara.sis.sdk.e8.domain.accesscontrol.req.AccessRecordFindReq;
import org.dromara.sis.sdk.e8.domain.accesscontrol.req.RemoteOpenDoorReq;
import org.dromara.sis.sdk.e8.domain.accesscontrol.res.AccessRecordFindRes;
import org.dromara.sis.sdk.e8.domain.accessControl.req.AccessRecordFindReq;
import org.dromara.sis.sdk.e8.domain.accessControl.req.CustomerAuthAddReq;
import org.dromara.sis.sdk.e8.domain.accessControl.req.CustomerAuthFindReq;
import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq;
import org.dromara.sis.sdk.e8.domain.accessControl.res.AccessRecordFindRes;
import org.dromara.sis.sdk.e8.domain.ApiResp;
import org.dromara.sis.sdk.e8.domain.QueryDto;
import org.dromara.sis.sdk.e8.domain.accessControl.res.CustomerAuthFindRes;
import org.dromara.sis.sdk.e8.utils.E8ApiUtil;
import org.springframework.stereotype.Service;
@@ -100,8 +103,58 @@ public class AccessControlServiceImpl implements AccessControlService {
/**
* 人员授权
*
* @param imageFile 传参
* @param req 传参
* @return Boolean
*/
@Override
public Boolean addCustomerAuth(CustomerAuthAddReq req) {
// 创建一个参数映射用于存储API请求的参数
Map<String, Object> params = BeanUtil.beanToMap(req);
// 调用API工具类的POST方法传入参数和API路径获取API响应对象
ApiResp apiResp = e8ApiUtil.doPost(params, PERSON_AUTHORIZATION);
if (!apiResp.getSuccess()) log.error("调用E8人员授权失败errorMsg:{}", apiResp);
// 返回API调用是否成功
return apiResp.getSuccess();
}
/**
* 获取人员权限分页列表
*
* @param dto 传参
* @return TableDataInfo<CustomerAuthFindRes>
*/
@Override
public TableDataInfo<CustomerAuthFindRes> getPageCustomerAuth(QueryDto dto) {
// 创建一个参数映射用于存储API请求的参数
Map<String, Object> params = new HashMap<>();
// 将分页索引和最大结果数放入参数映射中
params.put("pageIndex", dto.getPageIndex());
params.put("maxResultCount", dto.getMaxResultCount());
// 将查询DTO转换为JSON字符串再转换为Map对象然后放入参数映射中
params.put("queryDto", JSONUtil.toBean(JSONUtil.toJsonStr(dto.getQueryDto()), CustomerAuthFindReq.class));
// 调用API工具类的POST方法传入参数和API路径获取API响应对象
ApiResp apiResp = e8ApiUtil.doPost(params, GET_PAGE_PERSON_AUTHORIZATION_PAGE_LIST);
// 如果API响应不成功则返回null
if (!apiResp.getSuccess()) {
log.error("调用E8获取人员权限分页列表失败errorMsg:{}", apiResp);
return null;
}
// 将API响应的结果转换为JSON字符串再转换为Map对象
Map<String, Object> result = JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), new TypeReference<>() {
}, false);
// 创建一个分页对象,传入分页索引和最大结果数
TableDataInfo<CustomerAuthFindRes> tableData = new TableDataInfo<>();
// 从结果映射中获取总记录数,转换为长整型后设置到分页对象中
tableData.setTotal(Long.parseLong(result.get("total").toString()));
// 从结果映射中获取项目列表,转换为访问记录信息列表后设置到分页对象中
tableData.setRows(JSONUtil.toList(JSONUtil.toJsonStr(result.get("item")), CustomerAuthFindRes.class));
// 返回填充了数据的分页对象
return tableData;
}
}

View File

@@ -13,7 +13,6 @@ import org.dromara.sis.sdk.e8.domain.door.req.DoorDeviceFindReq;
import org.dromara.sis.sdk.e8.domain.door.req.DoorDeviceUpdateReq;
import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceAddRes;
import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceFindRes;
import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceUpdateRes;
import org.dromara.sis.sdk.e8.domain.QueryDto;
import org.dromara.sis.sdk.e8.utils.E8ApiUtil;
import org.springframework.stereotype.Service;
@@ -135,7 +134,7 @@ public class DoorDeviceServiceImpl implements DoorDeviceService {
* @return DoorDeviceUpdateRes
*/
@Override
public DoorDeviceUpdateRes updateDoorDevice(DoorDeviceUpdateReq updateReq) {
public Boolean updateDoorDevice(DoorDeviceUpdateReq updateReq) {
// 构造门设备更新API的URL
String api = DOOR_DEVICE_UPDATE.replace("{id}", updateReq.getId().toString());
@@ -146,13 +145,9 @@ public class DoorDeviceServiceImpl implements DoorDeviceService {
// 调用API进行门设备信息更新
ApiResp apiResp = e8ApiUtil.doPost(params, api);
if (!apiResp.getSuccess()) {
log.error("修改E8门禁信息errorMsg:{}", apiResp);
// 如果响应不成功则返回null
return null;
}
if (!apiResp.getSuccess()) log.error("修改E8门禁信息errorMsg:{}", apiResp);
return JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), DoorDeviceUpdateRes.class);
return apiResp.getSuccess();
}
/**
@@ -170,9 +165,7 @@ public class DoorDeviceServiceImpl implements DoorDeviceService {
// 调用E8 API工具类进行HTTP DELETE请求参数为构造的API路径和null因为DELETE请求通常不需要请求体
ApiResp apiResp = e8ApiUtil.doGetOrDel(api, null, true);
if (!apiResp.getSuccess()) {
log.error("删除E8门禁信息errorMsg:{}", apiResp);
}
if (!apiResp.getSuccess()) log.error("删除E8门禁信息errorMsg:{}", apiResp);
// 返回API响应的成功标志
return apiResp.getSuccess();

View File

@@ -0,0 +1,12 @@
package org.dromara.sis.sdk.e8.impl;
import lombok.Data;
/**
* @author lsm
* @apiNote VoucherControlServiceImpl
* @since 2025/6/25
*/
@Data
public class VoucherControlServiceImpl {
}