Browse Source

第三方设备管理(device_payload_custom)

dev
时子升 6 months ago
parent
commit
624b28fa08
  1. 113
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/ManageDevicePayloadCustomController.java
  2. 110
      dk-modules/sample/src/main/java/org/dromara/sample/manage/domain/ManageDevicePayloadCustom.java
  3. 99
      dk-modules/sample/src/main/java/org/dromara/sample/manage/domain/bo/ManageDevicePayloadCustomBo.java
  4. 100
      dk-modules/sample/src/main/java/org/dromara/sample/manage/domain/vo/ManageDevicePayloadCustomVo.java
  5. 15
      dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/ManageDevicePayloadCustomMapper.java
  6. 17
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/param/DeviceSubscribeParam.java
  7. 68
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IManageDevicePayloadCustomService.java
  8. 139
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/ManageDevicePayloadCustomServiceImpl.java
  9. 104
      dk-modules/sample/src/main/java/org/dromara/sample/websocket/config/WebSocketSubscriptionManager.java
  10. 7
      dk-modules/sample/src/main/resources/mapper/ManageDevicePayloadCustomMapper.xml

113
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/ManageDevicePayloadCustomController.java

@ -0,0 +1,113 @@
package org.dromara.sample.manage.controller;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.sample.manage.domain.vo.ManageDevicePayloadCustomVo;
import org.dromara.sample.manage.domain.bo.ManageDevicePayloadCustomBo;
import org.dromara.sample.manage.service.IManageDevicePayloadCustomService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 设备自定义/第三方载荷信息
* 前端访问路由地址为:/sample/DevicePayloadCustom
*
* @author szs
* @date 2025-06-18
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/DevicePayloadCustom")
public class ManageDevicePayloadCustomController extends BaseController {
private final IManageDevicePayloadCustomService manageDevicePayloadCustomService;
/**
* 查询设备自定义/第三方载荷信息列表
*/
@SaCheckPermission("sample:DevicePayloadCustom:list")
@GetMapping("/list")
public TableDataInfo<ManageDevicePayloadCustomVo> list(ManageDevicePayloadCustomBo bo, PageQuery pageQuery) {
return manageDevicePayloadCustomService.queryPageList(bo, pageQuery);
}
@SaCheckPermission("sample:DevicePayloadCustom:list")
@GetMapping("/listAll")
public List<ManageDevicePayloadCustomVo> listAll(ManageDevicePayloadCustomBo bo) {
return manageDevicePayloadCustomService.queryList(bo);
}
/**
* 导出设备自定义/第三方载荷信息列表
*/
@SaCheckPermission("sample:DevicePayloadCustom:export")
@Log(title = "设备自定义/第三方载荷信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ManageDevicePayloadCustomBo bo, HttpServletResponse response) {
List<ManageDevicePayloadCustomVo> list = manageDevicePayloadCustomService.queryList(bo);
ExcelUtil.exportExcel(list, "设备自定义/第三方载荷信息", ManageDevicePayloadCustomVo.class, response);
}
/**
* 获取设备自定义/第三方载荷信息详细信息
*
* @param id 主键
*/
@SaCheckPermission("sample:DevicePayloadCustom:query")
@GetMapping("/{id}")
public R<ManageDevicePayloadCustomVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(manageDevicePayloadCustomService.queryById(id));
}
/**
* 新增设备自定义/第三方载荷信息
*/
@SaCheckPermission("sample:DevicePayloadCustom:add")
@Log(title = "设备自定义/第三方载荷信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ManageDevicePayloadCustomBo bo) {
return toAjax(manageDevicePayloadCustomService.insertByBo(bo));
}
/**
* 修改设备自定义/第三方载荷信息
*/
@SaCheckPermission("sample:DevicePayloadCustom:edit")
@Log(title = "设备自定义/第三方载荷信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ManageDevicePayloadCustomBo bo) {
return toAjax(manageDevicePayloadCustomService.updateByBo(bo));
}
/**
* 删除设备自定义/第三方载荷信息
*
* @param ids 主键串
*/
@SaCheckPermission("sample:DevicePayloadCustom:remove")
@Log(title = "设备自定义/第三方载荷信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(manageDevicePayloadCustomService.deleteWithValidByIds(List.of(ids), true));
}
}

110
dk-modules/sample/src/main/java/org/dromara/sample/manage/domain/ManageDevicePayloadCustom.java

@ -0,0 +1,110 @@
package org.dromara.sample.manage.domain;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import org.apache.ibatis.type.Alias;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 设备自定义/第三方载荷信息对象 manage_device_payload_custom
*
* @author szs
* @date 2025-06-18
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("manage_device_payload_custom")
public class ManageDevicePayloadCustom implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId(value = "id")
private Long id;
/**
* 载荷sn码
*/
@TableField("payload_sn")
private String payloadSn;
/**
* 载荷名称
*/
@TableField("payload_name")
private String payloadName;
/**
* 载荷类型
*/
@TableField("payload_type")
private String payloadType;
/**
* 父级Id
*/
@TableField("parent_id")
private Long parentId;
/**
* 设备版本
*/
@TableField("firmware_version")
private String firmwareVersion;
/**
* 所属机场
*/
@TableField("dock_sn")
private String dockSn;
/**
* 所属设备
*/
@TableField("device_sn")
private String deviceSn;
/**
* 所属无人机
*/
@TableField("drone_sn")
private String droneSn;
/**
* 设备中位置编号
*/
@TableField("payload_index")
private Long payloadIndex;
/**
* 是否启动(1启用0关闭)
*/
@TableField("enable_flag")
private Long enableFlag;
/**
* 设备描述
*/
@TableField("payload_desc")
private String payloadDesc;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}

99
dk-modules/sample/src/main/java/org/dromara/sample/manage/domain/bo/ManageDevicePayloadCustomBo.java

@ -0,0 +1,99 @@
package org.dromara.sample.manage.domain.bo;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonValue;
import org.dromara.sample.manage.domain.ManageDevicePayloadCustom;
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.*;
/**
* 设备自定义/第三方载荷信息业务对象 manage_device_payload_custom
*
* @author szs
* @date 2025-06-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ManageDevicePayloadCustom.class, reverseConvertGenerate = false)
public class ManageDevicePayloadCustomBo extends BaseEntity {
/**
* ID
*/
// @NotNull(message = "ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 载荷sn码
*/
// @NotBlank(message = "载荷sn码不能为空", groups = { AddGroup.class, EditGroup.class })
// @JsonValue("payloadSn")
@JsonAlias({"payload_sn"})
private String payloadSn;
/**
* 载荷名称
*/
// @NotBlank(message = "载荷名称不能为空", groups = { AddGroup.class, EditGroup.class })
@JsonAlias({"payload_name"})
private String payloadName;
/**
* 载荷类型
*/
// @NotBlank(message = "载荷类型不能为空", groups = { AddGroup.class, EditGroup.class })
@JsonAlias({"payload_type"})
private String payloadType;
/**
* 父级Id
*/
@JsonAlias({"parent_id"})
private Long parentId;
/**
* 设备版本
*/
@JsonAlias({"firmware_version"})
private String firmwareVersion;
/**
* 所属机场
*/
// @NotBlank(message = "所属机场不能为空", groups = { AddGroup.class, EditGroup.class })
@JsonAlias({"dock_sn"})
private String dockSn;
/**
* 所属设备
*/
@JsonAlias({"device_sn"})
private String deviceSn;
/**
* 所属无人机
*/
private String droneSn;
/**
* 设备中位置编号
*/
private Long payloadIndex;
/**
* 是否启动(1启用0关闭)
*/
private Long enableFlag;
/**
* 设备描述
*/
private String payloadDesc;
}

100
dk-modules/sample/src/main/java/org/dromara/sample/manage/domain/vo/ManageDevicePayloadCustomVo.java

@ -0,0 +1,100 @@
package org.dromara.sample.manage.domain.vo;
import org.dromara.sample.manage.domain.ManageDevicePayloadCustom;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 设备自定义/第三方载荷信息视图对象 manage_device_payload_custom
*
* @author szs
* @date 2025-06-18
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ManageDevicePayloadCustom.class)
public class ManageDevicePayloadCustomVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "ID")
private Long id;
/**
* 载荷sn码
*/
@ExcelProperty(value = "载荷sn码")
private String payloadSn;
/**
* 载荷名称
*/
@ExcelProperty(value = "载荷名称")
private String payloadName;
/**
* 载荷类型
*/
@ExcelProperty(value = "载荷类型")
private String payloadType;
/**
* 父级Id
*/
@ExcelProperty(value = "父级Id")
private Long parentId;
/**
* 设备版本
*/
@ExcelProperty(value = "设备版本")
private String firmwareVersion;
/**
* 所属机场
*/
@ExcelProperty(value = "所属机场")
private String dockSn;
/**
* 所属设备
*/
@ExcelProperty(value = "所属设备")
private String deviceSn;
/**
* 所属无人机
*/
@ExcelProperty(value = "所属无人机")
private String droneSn;
/**
* 设备中位置编号
*/
@ExcelProperty(value = "设备中位置编号")
private Long payloadIndex;
/**
* 是否启动(1启用0关闭)
*/
@ExcelProperty(value = "是否启动(1启用,0关闭)")
private Long enableFlag;
/**
* 设备描述
*/
@ExcelProperty(value = "设备描述")
private String payloadDesc;
}

15
dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/ManageDevicePayloadCustomMapper.java

@ -0,0 +1,15 @@
package org.dromara.sample.manage.mapper;
import org.dromara.sample.manage.domain.ManageDevicePayloadCustom;
import org.dromara.sample.manage.domain.vo.ManageDevicePayloadCustomVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 设备自定义/第三方载荷信息Mapper接口
*
* @author szs
* @date 2025-06-18
*/
public interface ManageDevicePayloadCustomMapper extends BaseMapperPlus<ManageDevicePayloadCustom, ManageDevicePayloadCustomVo> {
}

17
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/param/DeviceSubscribeParam.java

@ -0,0 +1,17 @@
package org.dromara.sample.manage.model.param;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import org.springframework.web.bind.annotation.RequestParam;
@Data
public class DeviceSubscribeParam {
@JsonProperty("action")
private String action;
@JsonProperty("token")
private String token;
@JsonProperty("dock_sn")
private String dockSn;
}

68
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IManageDevicePayloadCustomService.java

@ -0,0 +1,68 @@
package org.dromara.sample.manage.service;
import org.dromara.sample.manage.domain.vo.ManageDevicePayloadCustomVo;
import org.dromara.sample.manage.domain.bo.ManageDevicePayloadCustomBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 设备自定义/第三方载荷信息Service接口
*
* @author szs
* @date 2025-06-18
*/
public interface IManageDevicePayloadCustomService {
/**
* 查询设备自定义/第三方载荷信息
*
* @param id 主键
* @return 设备自定义/第三方载荷信息
*/
ManageDevicePayloadCustomVo queryById(Long id);
/**
* 分页查询设备自定义/第三方载荷信息列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 设备自定义/第三方载荷信息分页列表
*/
TableDataInfo<ManageDevicePayloadCustomVo> queryPageList(ManageDevicePayloadCustomBo bo, PageQuery pageQuery);
/**
* 查询符合条件的设备自定义/第三方载荷信息列表
*
* @param bo 查询条件
* @return 设备自定义/第三方载荷信息列表
*/
List<ManageDevicePayloadCustomVo> queryList(ManageDevicePayloadCustomBo bo);
/**
* 新增设备自定义/第三方载荷信息
*
* @param bo 设备自定义/第三方载荷信息
* @return 是否新增成功
*/
Boolean insertByBo(ManageDevicePayloadCustomBo bo);
/**
* 修改设备自定义/第三方载荷信息
*
* @param bo 设备自定义/第三方载荷信息
* @return 是否修改成功
*/
Boolean updateByBo(ManageDevicePayloadCustomBo bo);
/**
* 校验并批量删除设备自定义/第三方载荷信息信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

139
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/ManageDevicePayloadCustomServiceImpl.java

@ -0,0 +1,139 @@
package org.dromara.sample.manage.service.impl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.sample.manage.domain.bo.ManageDevicePayloadCustomBo;
import org.dromara.sample.manage.domain.vo.ManageDevicePayloadCustomVo;
import org.dromara.sample.manage.domain.ManageDevicePayloadCustom;
import org.dromara.sample.manage.mapper.ManageDevicePayloadCustomMapper;
import org.dromara.sample.manage.service.IManageDevicePayloadCustomService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 设备自定义/第三方载荷信息Service业务层处理
*
* @author szs
* @date 2025-06-18
*/
@RequiredArgsConstructor
@Service
public class ManageDevicePayloadCustomServiceImpl implements IManageDevicePayloadCustomService {
private final ManageDevicePayloadCustomMapper baseMapper;
/**
* 查询设备自定义/第三方载荷信息
*
* @param id 主键
* @return 设备自定义/第三方载荷信息
*/
@Override
public ManageDevicePayloadCustomVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询设备自定义/第三方载荷信息列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 设备自定义/第三方载荷信息分页列表
*/
@Override
public TableDataInfo<ManageDevicePayloadCustomVo> queryPageList(ManageDevicePayloadCustomBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ManageDevicePayloadCustom> lqw = buildQueryWrapper(bo);
Page<ManageDevicePayloadCustomVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的设备自定义/第三方载荷信息列表
*
* @param bo 查询条件
* @return 设备自定义/第三方载荷信息列表
*/
@Override
public List<ManageDevicePayloadCustomVo> queryList(ManageDevicePayloadCustomBo bo) {
LambdaQueryWrapper<ManageDevicePayloadCustom> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<ManageDevicePayloadCustom> buildQueryWrapper(ManageDevicePayloadCustomBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ManageDevicePayloadCustom> lqw = Wrappers.lambdaQuery();
lqw.eq(StringUtils.isNotBlank(bo.getPayloadSn()), ManageDevicePayloadCustom::getPayloadSn, bo.getPayloadSn());
lqw.like(StringUtils.isNotBlank(bo.getPayloadName()), ManageDevicePayloadCustom::getPayloadName, bo.getPayloadName());
lqw.eq(StringUtils.isNotBlank(bo.getPayloadType()), ManageDevicePayloadCustom::getPayloadType, bo.getPayloadType());
lqw.eq(bo.getParentId() != null, ManageDevicePayloadCustom::getParentId, bo.getParentId());
lqw.eq(StringUtils.isNotBlank(bo.getFirmwareVersion()), ManageDevicePayloadCustom::getFirmwareVersion, bo.getFirmwareVersion());
lqw.eq(StringUtils.isNotBlank(bo.getDockSn()), ManageDevicePayloadCustom::getDockSn, bo.getDockSn());
lqw.eq(StringUtils.isNotBlank(bo.getDeviceSn()), ManageDevicePayloadCustom::getDeviceSn, bo.getDeviceSn());
lqw.eq(StringUtils.isNotBlank(bo.getDroneSn()), ManageDevicePayloadCustom::getDroneSn, bo.getDroneSn());
lqw.eq(bo.getPayloadIndex() != null, ManageDevicePayloadCustom::getPayloadIndex, bo.getPayloadIndex());
lqw.eq(bo.getEnableFlag() != null, ManageDevicePayloadCustom::getEnableFlag, bo.getEnableFlag());
lqw.eq(StringUtils.isNotBlank(bo.getPayloadDesc()), ManageDevicePayloadCustom::getPayloadDesc, bo.getPayloadDesc());
return lqw;
}
/**
* 新增设备自定义/第三方载荷信息
*
* @param bo 设备自定义/第三方载荷信息
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(ManageDevicePayloadCustomBo bo) {
ManageDevicePayloadCustom add = MapstructUtils.convert(bo, ManageDevicePayloadCustom.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改设备自定义/第三方载荷信息
*
* @param bo 设备自定义/第三方载荷信息
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(ManageDevicePayloadCustomBo bo) {
ManageDevicePayloadCustom update = MapstructUtils.convert(bo, ManageDevicePayloadCustom.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(ManageDevicePayloadCustom entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除设备自定义/第三方载荷信息信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

104
dk-modules/sample/src/main/java/org/dromara/sample/websocket/config/WebSocketSubscriptionManager.java

@ -0,0 +1,104 @@
package org.dromara.sample.websocket.config;
import org.dromara.common.redis.config.RedisConst;
import org.dromara.common.redis.utils.RedisOpsUtils;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@Component
public class WebSocketSubscriptionManager {
/**
* 存储结构
* key = bizCode + ":" + dockSn
* 内部Map = token -> (sessionId -> session)
*/
// private final ConcurrentHashMap<String, ConcurrentHashMap<String, ConcurrentHashMap<String, MyConcurrentWebSocketSession>> > subs = new ConcurrentHashMap<>();
// token -> Set<dockSn>
private final ConcurrentHashMap<String, Set<String>> tokenToDockSet = new ConcurrentHashMap<>();
// token -> sessionId -> session
private final ConcurrentHashMap<String, ConcurrentHashMap<String, MyConcurrentWebSocketSession>> tokenSessions = new ConcurrentHashMap<>();
private String buildOuterKey(String bizCode, String dockSn) {
return bizCode + ":" + dockSn;
}
/** 订阅设备 */
public void subscribe(String token, String dockSn, MyConcurrentWebSocketSession session) {
// 保存用户到redis,案例数据: <onlineuser:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ, 7CTDM7H00BQ6W3> ,超时:30分钟
String key = RedisConst.DEVICE_ONLINE_USER_PREFIX + token;
RedisOpsUtils.setWithExpire(key, dockSn ,RedisConst.ONLINE_REDIS_USER_ALIVE_SECOND);
// tokenToDockSet.computeIfAbsent(token, k -> ConcurrentHashMap.newKeySet()).add(dockSn);
// tokenSessions.computeIfAbsent(key, k -> new ConcurrentHashMap<>()).put(session.getId(), session);
}
/** 取消订阅设备 */
public void unsubscribe(String token, String dockSn, String sessionId) {
RedisOpsUtils.del(RedisConst.DEVICE_ONLINE_USER_PREFIX+token);
// Set<String> docks = tokenToDockSet.get(token);
// if (docks != null) {
// docks.remove(dockSn);
// if (docks.isEmpty()) {
// tokenToDockSet.remove(token);
// }
// }
//
// var sessionMap = tokenSessions.get(token);
// if (sessionMap != null) {
// sessionMap.remove(sessionId);
// if (sessionMap.isEmpty()) {
// tokenSessions.remove(token);
// }
// }
}
/** 获取所有订阅了该 dockSn 的用户的 session */
public Collection<MyConcurrentWebSocketSession> getSessionsForDock(String dockSn) {
List<MyConcurrentWebSocketSession> result = new ArrayList<>();
for (Map.Entry<String, Set<String>> entry : tokenToDockSet.entrySet()) {
String token = entry.getKey();
Set<String> dockSnSet = entry.getValue();
if (dockSnSet.contains(dockSn)) {
var sessionMap = tokenSessions.get(token);
if (sessionMap != null) {
result.addAll(sessionMap.values());
}
}
}
return result;
}
// bizCode -> sessionId -> MyConcurrentWebSocketSession
// private final ConcurrentHashMap<String, ConcurrentHashMap<String, MyConcurrentWebSocketSession>> subs = new ConcurrentHashMap<>();
// /** 订阅 */
// public void subscribe(String bizCode, MyConcurrentWebSocketSession session) {
// subs.computeIfAbsent(bizCode, k -> new ConcurrentHashMap<>())
// .put(session.getId(), session);
// }
//
// /** 取消订阅 */
// public void unsubscribe(String bizCode, String sessionId) {
// var map = subs.get(bizCode);
// if (map != null) {
// map.remove(sessionId);
// if (map.isEmpty()) subs.remove(bizCode);
// }
// }
//
// /** 获取所有对该 bizCode 感兴趣的 sessions */
// public Collection<MyConcurrentWebSocketSession> getSubscribers(String bizCode) {
// var map = subs.get(bizCode);
// return map == null ? Collections.emptyList() : map.values();
// }
}

7
dk-modules/sample/src/main/resources/mapper/ManageDevicePayloadCustomMapper.xml

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.sample.manage.mapper.ManageDevicePayloadCustomMapper">
</mapper>
Loading…
Cancel
Save