Merge branch 'master' of http://47.109.37.87:3000/by2025/SmartParks
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run
This commit is contained in:
@@ -103,4 +103,13 @@ public class ServiceWorkOrdersTypeController extends BaseController {
|
|||||||
@PathVariable("ids") Long[] ids) {
|
@PathVariable("ids") Long[] ids) {
|
||||||
return toAjax(serviceWorkOrdersTypeService.deleteWithValidByIds(List.of(ids), true));
|
return toAjax(serviceWorkOrdersTypeService.deleteWithValidByIds(List.of(ids), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询【工单类型】树结构
|
||||||
|
*/
|
||||||
|
@SaCheckPermission("system:workOrdersType:list")
|
||||||
|
@GetMapping("/typeTree")
|
||||||
|
public R<List<ServiceWorkOrdersTypeVo>> typeTree() {
|
||||||
|
return R.ok(serviceWorkOrdersTypeService.typeTree()) ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -70,8 +70,10 @@ public class TbVisitorManagementController extends BaseController {
|
|||||||
*/
|
*/
|
||||||
@PostMapping("/getcode")
|
@PostMapping("/getcode")
|
||||||
public R<String> getcode(QrCodeInfo qrCodeInfo) {
|
public R<String> getcode(QrCodeInfo qrCodeInfo) {
|
||||||
Long string = (Long) StpUtil.getLoginId();
|
String userid =StpUtil.getLoginId().toString();
|
||||||
qrCodeInfo.setUserid(string);
|
String[] split = userid.split(":");
|
||||||
|
Long s1 = Long.valueOf(split[1]);
|
||||||
|
qrCodeInfo.setUserid(s1);
|
||||||
String s = remoteConfigService.selectQrTimeOut();
|
String s = remoteConfigService.selectQrTimeOut();
|
||||||
int i = Integer.parseInt(s);
|
int i = Integer.parseInt(s);
|
||||||
UUID value = UUID.randomUUID();
|
UUID value = UUID.randomUUID();
|
||||||
|
@@ -62,4 +62,9 @@ public class ServiceWorkOrdersType extends TenantEntity {
|
|||||||
*/
|
*/
|
||||||
private String searchValue;
|
private String searchValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*上级类型id
|
||||||
|
*/
|
||||||
|
private Long parentId;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -60,4 +60,9 @@ public class ServiceWorkOrdersTypeBo extends BaseEntity {
|
|||||||
*/
|
*/
|
||||||
private Integer isTransfers;
|
private Integer isTransfers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*上级类型id
|
||||||
|
*/
|
||||||
|
private Long parentId;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -8,7 +8,8 @@ import org.dromara.property.domain.ServiceWorkOrdersType;
|
|||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -75,4 +76,14 @@ public class ServiceWorkOrdersTypeVo implements Serializable {
|
|||||||
@ExcelProperty(value = "搜索值")
|
@ExcelProperty(value = "搜索值")
|
||||||
private String searchValue;
|
private String searchValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上级类型id
|
||||||
|
*/
|
||||||
|
private Long parentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 子级类型
|
||||||
|
*/
|
||||||
|
private List<ServiceWorkOrdersTypeVo> children = new ArrayList<>();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -65,4 +65,10 @@ public interface IServiceWorkOrdersTypeService {
|
|||||||
* @return 是否删除成功
|
* @return 是否删除成功
|
||||||
*/
|
*/
|
||||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询【工单类型】树结构
|
||||||
|
* @return 工单类型树结构
|
||||||
|
*/
|
||||||
|
List<ServiceWorkOrdersTypeVo> typeTree();
|
||||||
}
|
}
|
||||||
|
@@ -18,6 +18,7 @@ import org.dromara.property.service.IServiceWorkOrdersTypeService;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -138,4 +139,35 @@ public class ServiceWorkOrdersTypeServiceImpl implements IServiceWorkOrdersTypeS
|
|||||||
}
|
}
|
||||||
return baseMapper.deleteByIds(ids) > 0;
|
return baseMapper.deleteByIds(ids) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询【工单类型】树结构
|
||||||
|
* @return 工单类型树结构
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<ServiceWorkOrdersTypeVo> typeTree() {
|
||||||
|
List<ServiceWorkOrdersTypeVo> list = baseMapper.selectVoList();
|
||||||
|
return buildTree(list,null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 递归构建树结构
|
||||||
|
* @param types 所有类型列表
|
||||||
|
* @param parentId 父节点id
|
||||||
|
* @return 树结构列表
|
||||||
|
*/
|
||||||
|
public static List<ServiceWorkOrdersTypeVo> buildTree(List<ServiceWorkOrdersTypeVo> types, Long parentId) {
|
||||||
|
List<ServiceWorkOrdersTypeVo> tree = new ArrayList<>();
|
||||||
|
for (ServiceWorkOrdersTypeVo type : types) {
|
||||||
|
Long currentParentId = type.getParentId();
|
||||||
|
if ((parentId == null && currentParentId == null) ||
|
||||||
|
(parentId != null && parentId.equals(currentParentId))) {
|
||||||
|
List<ServiceWorkOrdersTypeVo> children = buildTree(types, type.getId());
|
||||||
|
type.getChildren().addAll(children);
|
||||||
|
tree.add(type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tree;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -118,6 +118,11 @@
|
|||||||
<version>2.4.0</version>
|
<version>2.4.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.rocketmq</groupId>
|
||||||
|
<artifactId>rocketmq-spring-boot-starter</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.hik</groupId>
|
<groupId>com.hik</groupId>
|
||||||
<artifactId>examples</artifactId>
|
<artifactId>examples</artifactId>
|
||||||
|
@@ -0,0 +1,60 @@
|
|||||||
|
package org.dromara.sis.consumer;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.rocketmq.common.message.MessageExt;
|
||||||
|
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
||||||
|
import org.apache.rocketmq.spring.core.RocketMQListener;
|
||||||
|
import org.dromara.sis.domain.vo.SisElevatorFloorRefVo;
|
||||||
|
import org.dromara.sis.domain.vo.SisElevatorInfoVo;
|
||||||
|
import org.dromara.sis.sdk.hik.HikApiService;
|
||||||
|
import org.dromara.sis.service.ISisElevatorFloorRefService;
|
||||||
|
import org.dromara.sis.service.ISisElevatorInfoService;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author lsm
|
||||||
|
* @apiNote CleanLiftAuthRocketConsumer
|
||||||
|
* @since 2025/8/5
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RocketMQMessageListener(topic = "lift-topic", consumerGroup = "lift-consumer-group")
|
||||||
|
public class CleanLiftAuthRocketConsumer implements RocketMQListener<MessageExt> {
|
||||||
|
|
||||||
|
private final ISisElevatorInfoService sisElevatorInfoService;
|
||||||
|
private final ISisElevatorFloorRefService sisElevatorFloorRefService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessage(MessageExt ext) {
|
||||||
|
log.info("【消费者】接收消息:消息体 => {}", new String(ext.getBody()));
|
||||||
|
|
||||||
|
Long deviceId = Long.parseLong(ext.getUserProperty("deviceId"));
|
||||||
|
Long groupId = Long.parseLong(ext.getUserProperty("groupId"));
|
||||||
|
Long deviceFloorId = Long.parseLong(ext.getUserProperty("deviceFloorId"));
|
||||||
|
|
||||||
|
// 获取当前电梯信息
|
||||||
|
SisElevatorInfoVo ele = sisElevatorInfoService.queryById(deviceId);
|
||||||
|
|
||||||
|
// 获取权限组下电梯⇄楼层关联信息
|
||||||
|
List<SisElevatorFloorRefVo> groupRef = sisElevatorFloorRefService.queryByAuthGroupId(groupId);
|
||||||
|
|
||||||
|
// 取出当前电梯的楼层授权信息
|
||||||
|
List<SisElevatorFloorRefVo> eleRef = groupRef.stream().filter(o -> Objects.equals(o.getElevatorId(), deviceId)).toList();
|
||||||
|
|
||||||
|
for (SisElevatorFloorRefVo ref : eleRef){
|
||||||
|
if (ref.getOutChannel() != null && Objects.equals(ref.getFloorId(), deviceFloorId)){
|
||||||
|
HikApiService.getInstance().controlGateway(ele.getControlIp(), ref.getOutChannel().intValue(), 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ref.getInChannel() != null && Objects.equals(ref.getFloorId(), deviceFloorId)){
|
||||||
|
HikApiService.getInstance().controlGateway(ele.getControlIp(), ref.getInChannel().intValue(), 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info("梯控清除权限完成");
|
||||||
|
}
|
||||||
|
}
|
@@ -18,6 +18,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|||||||
import org.dromara.common.web.core.BaseController;
|
import org.dromara.common.web.core.BaseController;
|
||||||
import org.dromara.sis.domain.bo.SisAccessControlBo;
|
import org.dromara.sis.domain.bo.SisAccessControlBo;
|
||||||
import org.dromara.sis.domain.vo.SisAccessControlVo;
|
import org.dromara.sis.domain.vo.SisAccessControlVo;
|
||||||
|
import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq;
|
||||||
import org.dromara.sis.service.ISisAccessControlService;
|
import org.dromara.sis.service.ISisAccessControlService;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
@@ -126,4 +127,16 @@ public class SisAccessControlController extends BaseController {
|
|||||||
return R.ok(sisAccessControlService.syncE8());
|
return R.ok(sisAccessControlService.syncE8());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 远程开门
|
||||||
|
*
|
||||||
|
* @param req 远程开门参数
|
||||||
|
*/
|
||||||
|
@PostMapping("/e8/remoteOpenDoor")
|
||||||
|
public R<Boolean> remoteOpenDoor(@RequestBody RemoteOpenDoorReq req) {
|
||||||
|
return R.ok(sisAccessControlService.remoteOpenDoor(req));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -45,5 +45,9 @@ public class SisDeviceBindRef extends TenantEntity {
|
|||||||
*/
|
*/
|
||||||
private Integer controlType;
|
private Integer controlType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 楼层id
|
||||||
|
*/
|
||||||
|
private Long deviceFloorId;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -80,4 +80,9 @@ public class SisDeviceManage extends BaseEntity {
|
|||||||
|
|
||||||
private String tenantId;
|
private String tenantId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 楼层id
|
||||||
|
*/
|
||||||
|
private Long floorId;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -46,5 +46,8 @@ public class SisDeviceBindRefBo extends BaseEntity {
|
|||||||
@NotNull(message = "控制类型(1:门禁,2:电梯呼梯,3:电梯梯控不能为空", groups = { AddGroup.class, EditGroup.class })
|
@NotNull(message = "控制类型(1:门禁,2:电梯呼梯,3:电梯梯控不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||||
private Integer controlType;
|
private Integer controlType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 楼层id
|
||||||
|
*/
|
||||||
|
private Long deviceFloorId;
|
||||||
}
|
}
|
||||||
|
@@ -62,6 +62,12 @@ public class SisDeviceManageBo extends BaseEntity {
|
|||||||
@NotBlank(message = "设备密码不能为空", groups = {AddGroup.class, EditGroup.class})
|
@NotBlank(message = "设备密码不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||||
private String devicePwd;
|
private String devicePwd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 楼层id
|
||||||
|
*/
|
||||||
|
@NotNull(message = "楼层id不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||||
|
private Long floorId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设备类型
|
* 设备类型
|
||||||
*/
|
*/
|
||||||
|
@@ -53,6 +53,9 @@ public class SisDeviceBindRefVo implements Serializable {
|
|||||||
@ExcelProperty(value = "控制类型(1:门禁,2:电梯呼梯,3:电梯梯控")
|
@ExcelProperty(value = "控制类型(1:门禁,2:电梯呼梯,3:电梯梯控")
|
||||||
private Integer controlType;
|
private Integer controlType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 楼层id
|
||||||
|
*/
|
||||||
|
private Long deviceFloorId;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -77,6 +77,11 @@ public class SisDeviceManageVo implements Serializable {
|
|||||||
@Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "deviceType", other = "sis_ipc_device_type")
|
@Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "deviceType", other = "sis_ipc_device_type")
|
||||||
private Integer deviceTypeName;
|
private Integer deviceTypeName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 楼层id
|
||||||
|
*/
|
||||||
|
private Long floorId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设备厂商编号
|
* 设备厂商编号
|
||||||
*/
|
*/
|
||||||
@@ -90,5 +95,4 @@ public class SisDeviceManageVo implements Serializable {
|
|||||||
private Long groupId;
|
private Long groupId;
|
||||||
|
|
||||||
private String groupName;
|
private String groupName;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -50,5 +50,14 @@ public class SisElevatorFloorRefVo implements Serializable {
|
|||||||
@ExcelProperty(value = "授权组id")
|
@ExcelProperty(value = "授权组id")
|
||||||
private Long authGroupId;
|
private Long authGroupId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 内部通道号
|
||||||
|
*/
|
||||||
|
private Long inChannel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 外部通道号
|
||||||
|
*/
|
||||||
|
private Long outChannel;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
package org.dromara.sis.mapper;
|
package org.dromara.sis.mapper;
|
||||||
|
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||||
import org.dromara.sis.domain.SisAccessControl;
|
import org.dromara.sis.domain.SisAccessControl;
|
||||||
import org.dromara.sis.domain.vo.SisAccessControlVo;
|
import org.dromara.sis.domain.vo.SisAccessControlVo;
|
||||||
@@ -8,8 +9,9 @@ import org.dromara.sis.domain.vo.SisAccessControlVo;
|
|||||||
* 门禁设备Mapper接口
|
* 门禁设备Mapper接口
|
||||||
*
|
*
|
||||||
* @author lxj
|
* @author lxj
|
||||||
* @date 2025-06-25
|
* @since 2025-06-25
|
||||||
*/
|
*/
|
||||||
|
@Mapper
|
||||||
public interface SisAccessControlMapper extends BaseMapperPlus<SisAccessControl, SisAccessControlVo> {
|
public interface SisAccessControlMapper extends BaseMapperPlus<SisAccessControl, SisAccessControlVo> {
|
||||||
|
|
||||||
SisAccessControlVo queryById(Long id);
|
SisAccessControlVo queryById(Long id);
|
||||||
|
@@ -0,0 +1,39 @@
|
|||||||
|
package org.dromara.sis.producer;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.rocketmq.common.message.Message;
|
||||||
|
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author lsm
|
||||||
|
* @apiNote CleanLiftAuthRocketProducer
|
||||||
|
* @since 2025/8/5
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class CleanLiftAuthRocketProducer {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RocketMQTemplate rocketMQTemplate;
|
||||||
|
|
||||||
|
public void sendMessage(Long deviceId, Long groupId, Long deviceFloorId, String info, Integer lay) {
|
||||||
|
// 发送延迟消息
|
||||||
|
// RocketMQ预定义了一些延迟等级,每个等级对应不同的延迟时间范围。这些等级从1到18,分别对应1s、5s、10s、30s、1m、2m、3m、4m、5m、6m、7m、8m、9m、10m、20m、30m、1h、2h的延迟时间。
|
||||||
|
org.apache.rocketmq.common.message.Message msg = new Message("lift-topic", "lift-tag", info.getBytes());
|
||||||
|
msg.putUserProperty("deviceId", deviceId.toString());
|
||||||
|
msg.putUserProperty("groupId", groupId.toString());
|
||||||
|
msg.putUserProperty("deviceFloorId", deviceFloorId.toString());
|
||||||
|
msg.setDelayTimeLevel(lay);
|
||||||
|
try {
|
||||||
|
rocketMQTemplate.getProducer().send(msg);
|
||||||
|
log.info("发送RocketMQ消息成功");
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("发送RocketMQ消息失败", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -2,6 +2,7 @@ package org.dromara.sis.sdk.e8.domain.accessControl.req;
|
|||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -27,6 +28,11 @@ public class RemoteOpenDoorReq {
|
|||||||
*/
|
*/
|
||||||
private Long operatorId;
|
private Long operatorId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 门禁IDs
|
||||||
|
*/
|
||||||
|
private Collection<Long> acIds;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 门操作数据
|
* 门操作数据
|
||||||
*/
|
*/
|
||||||
|
@@ -5,6 +5,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
|
|||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.sis.domain.bo.SisAccessControlBo;
|
import org.dromara.sis.domain.bo.SisAccessControlBo;
|
||||||
import org.dromara.sis.domain.vo.SisAccessControlVo;
|
import org.dromara.sis.domain.vo.SisAccessControlVo;
|
||||||
|
import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -78,7 +79,7 @@ public interface ISisAccessControlService {
|
|||||||
/**
|
/**
|
||||||
* 查询门禁树
|
* 查询门禁树
|
||||||
*
|
*
|
||||||
* @return
|
* @return 树
|
||||||
*/
|
*/
|
||||||
List<TreeNode<Long>> queryAcTree();
|
List<TreeNode<Long>> queryAcTree();
|
||||||
|
|
||||||
@@ -89,4 +90,11 @@ public interface ISisAccessControlService {
|
|||||||
*/
|
*/
|
||||||
Boolean syncE8();
|
Boolean syncE8();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 远程开门
|
||||||
|
*
|
||||||
|
* @param req 远程开门参数
|
||||||
|
*/
|
||||||
|
Boolean remoteOpenDoor(RemoteOpenDoorReq req);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -23,6 +23,7 @@ import org.dromara.sis.domain.vo.SisAccessControlVo;
|
|||||||
import org.dromara.sis.domain.vo.SisDeviceManageVo;
|
import org.dromara.sis.domain.vo.SisDeviceManageVo;
|
||||||
import org.dromara.sis.mapper.SisAccessControlMapper;
|
import org.dromara.sis.mapper.SisAccessControlMapper;
|
||||||
import org.dromara.sis.sdk.e8.E8PlatformApi;
|
import org.dromara.sis.sdk.e8.E8PlatformApi;
|
||||||
|
import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq;
|
||||||
import org.dromara.sis.sdk.e8.domain.door.res.AuthDoorDeviceFindRes;
|
import org.dromara.sis.sdk.e8.domain.door.res.AuthDoorDeviceFindRes;
|
||||||
import org.dromara.sis.service.ISisAccessControlService;
|
import org.dromara.sis.service.ISisAccessControlService;
|
||||||
import org.dromara.sis.service.ISisDeviceBindRefService;
|
import org.dromara.sis.service.ISisDeviceBindRefService;
|
||||||
@@ -50,6 +51,7 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService {
|
|||||||
private final E8PlatformApi e8PlatformApi;
|
private final E8PlatformApi e8PlatformApi;
|
||||||
private final ISisDeviceManageService sisDeviceManageService;
|
private final ISisDeviceManageService sisDeviceManageService;
|
||||||
private final ISisDeviceBindRefService sisDeviceBindRefService;
|
private final ISisDeviceBindRefService sisDeviceBindRefService;
|
||||||
|
|
||||||
@DubboReference
|
@DubboReference
|
||||||
private RemoteFloorService remoteFloorService;
|
private RemoteFloorService remoteFloorService;
|
||||||
|
|
||||||
@@ -141,6 +143,7 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService {
|
|||||||
SisDeviceBindRef sisDeviceBindRef = new SisDeviceBindRef();
|
SisDeviceBindRef sisDeviceBindRef = new SisDeviceBindRef();
|
||||||
sisDeviceBindRef.setDeviceId(sisDeviceManageVo.getId());
|
sisDeviceBindRef.setDeviceId(sisDeviceManageVo.getId());
|
||||||
sisDeviceBindRef.setDeviceIp(sisDeviceManageVo.getDeviceIp());
|
sisDeviceBindRef.setDeviceIp(sisDeviceManageVo.getDeviceIp());
|
||||||
|
sisDeviceBindRef.setDeviceFloorId(sisDeviceManageVo.getFloorId());
|
||||||
sisDeviceBindRef.setBindId(bo.getId());
|
sisDeviceBindRef.setBindId(bo.getId());
|
||||||
sisDeviceBindRef.setControlType(ControlTypeEnum.ACCESS_CONTROL.getCode());
|
sisDeviceBindRef.setControlType(ControlTypeEnum.ACCESS_CONTROL.getCode());
|
||||||
Boolean insert = sisDeviceBindRefService.insert(sisDeviceBindRef);
|
Boolean insert = sisDeviceBindRefService.insert(sisDeviceBindRef);
|
||||||
@@ -220,7 +223,7 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService {
|
|||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
Collection<SisAccessControl> sisACBos = new ArrayList<>();
|
Collection<SisAccessControl> sisACBos = new ArrayList<>();
|
||||||
for (AuthDoorDeviceFindRes res : filter){
|
for (AuthDoorDeviceFindRes res : filter) {
|
||||||
SisAccessControl ac = new SisAccessControl();
|
SisAccessControl ac = new SisAccessControl();
|
||||||
ac.setFactoryCode(res.getDeviceNo());
|
ac.setFactoryCode(res.getDeviceNo());
|
||||||
ac.setAccessCode(res.getDeviceId().toString());
|
ac.setAccessCode(res.getDeviceId().toString());
|
||||||
@@ -237,4 +240,24 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService {
|
|||||||
}
|
}
|
||||||
return baseMapper.insertBatch(sisACBos);
|
return baseMapper.insertBatch(sisACBos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 远程开门
|
||||||
|
*
|
||||||
|
* @param req 远程开门参数
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean remoteOpenDoor(RemoteOpenDoorReq req) {
|
||||||
|
List<SisAccessControlVo> vo = baseMapper.selectVoByIds(req.getAcIds());
|
||||||
|
|
||||||
|
List<RemoteOpenDoorReq.ControlData> list = new ArrayList<>();
|
||||||
|
for (SisAccessControlVo item : vo) {
|
||||||
|
RemoteOpenDoorReq.ControlData data = new RemoteOpenDoorReq.ControlData();
|
||||||
|
data.setDoorId(Long.parseLong(item.getOutDoorCode()));
|
||||||
|
data.setDeviceId(Long.parseLong(item.getOutCode()));
|
||||||
|
list.add(data);
|
||||||
|
}
|
||||||
|
req.setControlList(list);
|
||||||
|
return e8PlatformApi.remoteOpenDoor(req);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -50,7 +50,11 @@ public class SisDeviceManageServiceImpl implements ISisDeviceManageService {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public SisDeviceManageVo queryById(Long id) {
|
public SisDeviceManageVo queryById(Long id) {
|
||||||
return baseMapper.selectVoById(id);
|
SisDeviceManageVo deviceManageVo = baseMapper.selectVoById(id);
|
||||||
|
|
||||||
|
log.info("查询设备管理:{}", deviceManageVo);
|
||||||
|
|
||||||
|
return deviceManageVo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -20,12 +20,10 @@ import org.dromara.sis.domain.SisElevatorFloorChannelRef;
|
|||||||
import org.dromara.sis.domain.SisElevatorInfo;
|
import org.dromara.sis.domain.SisElevatorInfo;
|
||||||
import org.dromara.sis.domain.bo.SisElevatorInfoBo;
|
import org.dromara.sis.domain.bo.SisElevatorInfoBo;
|
||||||
import org.dromara.sis.domain.enums.ControlTypeEnum;
|
import org.dromara.sis.domain.enums.ControlTypeEnum;
|
||||||
|
import org.dromara.sis.domain.vo.SisDeviceManageVo;
|
||||||
import org.dromara.sis.domain.vo.SisElevatorInfoVo;
|
import org.dromara.sis.domain.vo.SisElevatorInfoVo;
|
||||||
import org.dromara.sis.mapper.SisElevatorInfoMapper;
|
import org.dromara.sis.mapper.SisElevatorInfoMapper;
|
||||||
import org.dromara.sis.service.ISisDeviceBindRefService;
|
import org.dromara.sis.service.*;
|
||||||
import org.dromara.sis.service.ISisElevatorFloorChannelRefService;
|
|
||||||
import org.dromara.sis.service.ISisElevatorFloorRefService;
|
|
||||||
import org.dromara.sis.service.ISisElevatorInfoService;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@@ -45,6 +43,7 @@ import static org.dromara.common.core.constant.CodePrefixConstants.ELEVATOR_CONT
|
|||||||
public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService {
|
public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService {
|
||||||
|
|
||||||
private final SisElevatorInfoMapper baseMapper;
|
private final SisElevatorInfoMapper baseMapper;
|
||||||
|
private final ISisDeviceManageService deviceManageService;
|
||||||
private final ISisDeviceBindRefService deviceBindRefService;
|
private final ISisDeviceBindRefService deviceBindRefService;
|
||||||
private final ISisElevatorFloorRefService elevatorFloorRefService;
|
private final ISisElevatorFloorRefService elevatorFloorRefService;
|
||||||
private final ISisElevatorFloorChannelRefService elevatorFloorChannelRefService;
|
private final ISisElevatorFloorChannelRefService elevatorFloorChannelRefService;
|
||||||
@@ -201,20 +200,26 @@ public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService {
|
|||||||
List<SisDeviceBindRef> ls = new ArrayList<>();
|
List<SisDeviceBindRef> ls = new ArrayList<>();
|
||||||
// 梯控
|
// 梯控
|
||||||
if (bo.getElevatorControlDeviceId() != null) {
|
if (bo.getElevatorControlDeviceId() != null) {
|
||||||
|
SisDeviceManageVo vo = deviceManageService.queryById(bo.getElevatorControlDeviceId().getDeviceId());
|
||||||
|
|
||||||
SisDeviceBindRef ref = new SisDeviceBindRef();
|
SisDeviceBindRef ref = new SisDeviceBindRef();
|
||||||
ref.setDeviceId(bo.getElevatorControlDeviceId().getDeviceId());
|
ref.setDeviceId(bo.getElevatorControlDeviceId().getDeviceId());
|
||||||
ref.setDeviceIp(bo.getElevatorControlDeviceId().getDeviceIp());
|
ref.setDeviceIp(bo.getElevatorControlDeviceId().getDeviceIp());
|
||||||
ref.setBindId(bo.getElevatorId());
|
ref.setBindId(bo.getElevatorId());
|
||||||
|
ref.setDeviceFloorId(vo.getFloorId());
|
||||||
ref.setControlType(ControlTypeEnum.ELEVATOR_CONTROL.getCode());
|
ref.setControlType(ControlTypeEnum.ELEVATOR_CONTROL.getCode());
|
||||||
ls.add(ref);
|
ls.add(ref);
|
||||||
}
|
}
|
||||||
// 远程呼叫
|
// 远程呼叫
|
||||||
if (bo.getRemoteCallElevatorDeviceId() != null && !bo.getRemoteCallElevatorDeviceId().isEmpty()) {
|
if (bo.getRemoteCallElevatorDeviceId() != null && !bo.getRemoteCallElevatorDeviceId().isEmpty()) {
|
||||||
for (SisElevatorInfoBo.DeviceInfo deviceInfo : bo.getRemoteCallElevatorDeviceId()) {
|
for (SisElevatorInfoBo.DeviceInfo deviceInfo : bo.getRemoteCallElevatorDeviceId()) {
|
||||||
|
SisDeviceManageVo vo = deviceManageService.queryById(deviceInfo.getDeviceId());
|
||||||
|
|
||||||
SisDeviceBindRef ref = new SisDeviceBindRef();
|
SisDeviceBindRef ref = new SisDeviceBindRef();
|
||||||
ref.setDeviceId(deviceInfo.getDeviceId());
|
ref.setDeviceId(deviceInfo.getDeviceId());
|
||||||
ref.setDeviceIp(deviceInfo.getDeviceIp());
|
ref.setDeviceIp(deviceInfo.getDeviceIp());
|
||||||
ref.setBindId(bo.getElevatorId());
|
ref.setBindId(bo.getElevatorId());
|
||||||
|
ref.setDeviceFloorId(vo.getFloorId());
|
||||||
ref.setControlType(ControlTypeEnum.REMOTE_CALL_ELEVATOR.getCode());
|
ref.setControlType(ControlTypeEnum.REMOTE_CALL_ELEVATOR.getCode());
|
||||||
ls.add(ref);
|
ls.add(ref);
|
||||||
}
|
}
|
||||||
|
@@ -43,4 +43,9 @@ spring:
|
|||||||
- optional:nacos:datasource.yml
|
- optional:nacos:datasource.yml
|
||||||
- optional:nacos:${spring.application.name}.yml
|
- optional:nacos:${spring.application.name}.yml
|
||||||
|
|
||||||
|
--- # rocketmq 配置
|
||||||
|
rocketmq:
|
||||||
|
name-server: 192.168.24.101:9876
|
||||||
|
producer:
|
||||||
|
# 生产者组
|
||||||
|
group: dist-test
|
||||||
|
@@ -6,11 +6,13 @@ import cn.hutool.core.util.ObjectUtil;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.dromara.common.core.domain.R;
|
import org.dromara.common.core.domain.R;
|
||||||
import org.dromara.common.core.validate.QueryGroup;
|
import org.dromara.common.core.validate.QueryGroup;
|
||||||
|
import org.dromara.common.redis.utils.RedisUtils;
|
||||||
import org.dromara.common.web.core.BaseController;
|
import org.dromara.common.web.core.BaseController;
|
||||||
import org.dromara.common.log.annotation.Log;
|
import org.dromara.common.log.annotation.Log;
|
||||||
import org.dromara.common.log.enums.BusinessType;
|
import org.dromara.common.log.enums.BusinessType;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
|
import org.dromara.resource.domain.QrCodeInfo;
|
||||||
import org.dromara.resource.domain.bo.SysOssBo;
|
import org.dromara.resource.domain.bo.SysOssBo;
|
||||||
import org.dromara.resource.domain.vo.SysOssUploadVo;
|
import org.dromara.resource.domain.vo.SysOssUploadVo;
|
||||||
import org.dromara.resource.domain.vo.SysOssVo;
|
import org.dromara.resource.domain.vo.SysOssVo;
|
||||||
@@ -80,6 +82,32 @@ public class SysOssController extends BaseController {
|
|||||||
return R.ok(uploadVo);
|
return R.ok(uploadVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传OSS对象存储
|
||||||
|
*
|
||||||
|
* @param file 文件
|
||||||
|
*/
|
||||||
|
@SaCheckPermission("system:oss:upload")
|
||||||
|
@Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
|
||||||
|
@PostMapping(value = "/qrupload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||||
|
public R<SysOssUploadVo> codeUpload(@RequestPart("file") MultipartFile file,String code) {
|
||||||
|
if (ObjectUtil.isNull(file)) {
|
||||||
|
return R.fail("上传文件不能为空");
|
||||||
|
}
|
||||||
|
QrCodeInfo info = RedisUtils.getCacheObject("Qrcode" + code);
|
||||||
|
if (info==null){
|
||||||
|
return R.fail("二维码已过期");
|
||||||
|
}
|
||||||
|
|
||||||
|
SysOssVo oss = iSysOssService.qrupload(file,info);
|
||||||
|
SysOssUploadVo uploadVo = new SysOssUploadVo();
|
||||||
|
uploadVo.setUrl(oss.getUrl());
|
||||||
|
uploadVo.setFileName(oss.getOriginalName());
|
||||||
|
uploadVo.setOssId(oss.getOssId().toString());
|
||||||
|
return R.ok(uploadVo);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 下载OSS对象存储
|
* 下载OSS对象存储
|
||||||
*
|
*
|
||||||
|
@@ -0,0 +1,10 @@
|
|||||||
|
package org.dromara.resource.domain;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class QrCodeInfo {
|
||||||
|
private String deviceCode; // 对应“设备码”
|
||||||
|
private String generateTime; // 对应“生成时间”
|
||||||
|
private String qrCodeId; // 对应“二维码ID”
|
||||||
|
private Long userid;
|
||||||
|
}
|
@@ -3,6 +3,7 @@ package org.dromara.resource.service;
|
|||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
|
import org.dromara.resource.domain.QrCodeInfo;
|
||||||
import org.dromara.resource.domain.bo.SysOssBo;
|
import org.dromara.resource.domain.bo.SysOssBo;
|
||||||
import org.dromara.resource.domain.vo.SysOssVo;
|
import org.dromara.resource.domain.vo.SysOssVo;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
@@ -60,6 +61,14 @@ public interface ISysOssService {
|
|||||||
*/
|
*/
|
||||||
SysOssVo upload(MultipartFile file);
|
SysOssVo upload(MultipartFile file);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传 MultipartFile 到对象存储服务,并保存文件信息到数据库
|
||||||
|
*
|
||||||
|
* @param file 要上传的 MultipartFile 对象
|
||||||
|
* @return 上传成功后的 SysOssVo 对象,包含文件信息
|
||||||
|
*/
|
||||||
|
SysOssVo qrupload(MultipartFile file, QrCodeInfo qrCodeInfo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 上传文件到对象存储服务,并保存文件信息到数据库
|
* 上传文件到对象存储服务,并保存文件信息到数据库
|
||||||
*
|
*
|
||||||
|
@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.dromara.common.core.constant.CacheNames;
|
import org.dromara.common.core.constant.CacheNames;
|
||||||
|
import org.dromara.common.core.domain.R;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
import org.dromara.common.core.exception.ServiceException;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
import org.dromara.common.core.utils.MapstructUtils;
|
||||||
import org.dromara.common.core.utils.SpringUtils;
|
import org.dromara.common.core.utils.SpringUtils;
|
||||||
@@ -20,6 +21,8 @@ import org.dromara.common.oss.core.OssClient;
|
|||||||
import org.dromara.common.oss.entity.UploadResult;
|
import org.dromara.common.oss.entity.UploadResult;
|
||||||
import org.dromara.common.oss.enums.AccessPolicyType;
|
import org.dromara.common.oss.enums.AccessPolicyType;
|
||||||
import org.dromara.common.oss.factory.OssFactory;
|
import org.dromara.common.oss.factory.OssFactory;
|
||||||
|
import org.dromara.common.redis.utils.RedisUtils;
|
||||||
|
import org.dromara.resource.domain.QrCodeInfo;
|
||||||
import org.dromara.resource.domain.SysOss;
|
import org.dromara.resource.domain.SysOss;
|
||||||
import org.dromara.resource.domain.bo.SysOssBo;
|
import org.dromara.resource.domain.bo.SysOssBo;
|
||||||
import org.dromara.resource.domain.vo.SysOssVo;
|
import org.dromara.resource.domain.vo.SysOssVo;
|
||||||
@@ -33,10 +36,7 @@ import org.springframework.web.multipart.MultipartFile;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -199,6 +199,21 @@ public class SysOssServiceImpl implements ISysOssService {
|
|||||||
return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult);
|
return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SysOssVo qrupload(MultipartFile file, QrCodeInfo info) {
|
||||||
|
String originalfileName = file.getOriginalFilename();
|
||||||
|
String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
|
||||||
|
OssClient storage = OssFactory.instance();
|
||||||
|
UploadResult uploadResult;
|
||||||
|
try {
|
||||||
|
uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType());
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ServiceException(e.getMessage());
|
||||||
|
}
|
||||||
|
// 保存文件信息
|
||||||
|
return buildResultEntityQr(originalfileName, suffix, storage.getConfigKey(), uploadResult,info);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 上传文件到对象存储服务,并保存文件信息到数据库
|
* 上传文件到对象存储服务,并保存文件信息到数据库
|
||||||
*
|
*
|
||||||
@@ -227,6 +242,20 @@ public class SysOssServiceImpl implements ISysOssService {
|
|||||||
return this.matchingUrl(sysOssVo);
|
return this.matchingUrl(sysOssVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private SysOssVo buildResultEntityQr(String originalfileName, String suffix, String configKey, UploadResult uploadResult,QrCodeInfo info) {
|
||||||
|
SysOss oss = new SysOss();
|
||||||
|
oss.setUrl(uploadResult.getUrl());
|
||||||
|
oss.setFileSuffix(suffix);
|
||||||
|
oss.setFileName(uploadResult.getFilename());
|
||||||
|
oss.setOriginalName(originalfileName);
|
||||||
|
oss.setService(configKey);
|
||||||
|
oss.setCreateBy(info.getUserid());
|
||||||
|
oss.setCreateTime(new Date());
|
||||||
|
baseMapper.insert(oss);
|
||||||
|
SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class);
|
||||||
|
return this.matchingUrl(sysOssVo);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增OSS对象存储
|
* 新增OSS对象存储
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user