20260118:优化获取modbus首地址(从redis中获取)

This commit is contained in:
George 2026-01-18 00:09:44 +08:00
parent d12016e04a
commit 271e2102db
4 changed files with 25 additions and 46 deletions

View File

@ -468,28 +468,18 @@ public class ModbusProtocol implements IProtocol {
* 获取寄存器最小modbus地址,从最小的寄存器地址开始解码 * 获取寄存器最小modbus地址,从最小的寄存器地址开始解码
*/ */
private String getCacheModbusAddress(Long productId, int salveId, int code) { private String getCacheModbusAddress(Long productId, int salveId, int code) {
// String key = RedisKeyBuilder.buildModbusRuntimeCacheKey(serialNumber); // 1、从modbus拿缓存
// Set<String> commandSet = redisCache.zRange(key, 0, -1); Map<Integer, List<ModbusConfig>> modbusConfigMap = modbusConfigCache.getModbusConfigCacheByProductId(productId);
// if (modbusConfigMap != null) {
// // 1. 遍历匹配指令 Integer addr = modbusConfigMap.keySet().stream().min(Integer::compare).orElse(-1);
// for (String command : commandSet) { if (addr >= 0) {
// try { log.debug("=>从缓存中获取最小modbus地址,产品:[{}],从机地址:[{}],功能码:[{}],地址:[{}]", productId, salveId, code, addr);
// Mparams params = ModbusUtils.getModbusParams(command); return String.valueOf(addr);
// redisCache.zRem(key, command); // 删除缓存 }
// if (params.getSlaveId() == salveId && params.getCode() == code) { }
// return String.valueOf(params.getAddress());
// }
// } catch (Exception e) {
// log.warn("解析指令异常: {}", e.getMessage());
// }
// }
// todo 拿缓存
// 2. 无匹配时查询数据库 // 2. 无匹配时查询数据库
try { try {
// Device device = deviceMapper.selectDeviceBySerialNumber(serialNumber);
// if (device == null) return "0";
List<ModbusConfig> configs = modbusConfigMapper.selectModbusConfigListByProductId(productId); List<ModbusConfig> configs = modbusConfigMapper.selectModbusConfigListByProductId(productId);
if (CollectionUtils.isEmpty(configs)) return "0"; if (CollectionUtils.isEmpty(configs)) return "0";

View File

@ -45,5 +45,5 @@ public interface IModbusConfigCache {
* @param identify 标识符 * @param identify 标识符
* @return ModbusConfig * @return ModbusConfig
*/ */
public List<ModbusConfig> getSingleModbusConfig(Long productId, String identify); List<ModbusConfig> getSingleModbusConfig(Long productId, String identify);
} }

View File

@ -41,16 +41,16 @@ public class ModbusConfigCacheImpl implements IModbusConfigCache {
*/ */
@Override @Override
public Map<Integer, List<ModbusConfig>> getModbusConfigCacheByProductId(Long productId) { public Map<Integer, List<ModbusConfig>> getModbusConfigCacheByProductId(Long productId) {
// Map<Integer, List<ModbusConfig>> resultMap = new HashMap<>(); Map<Integer, List<ModbusConfig>> resultMap = new HashMap<>();
// String modbusKey = RedisKeyBuilder.buildModbusKey(productId); String modbusKey = RedisKeyBuilder.buildModbusKey(productId);
// Map<String,String> map = redisCache.hashEntity(modbusKey); Map<String,String> map = redisCache.hashEntity(modbusKey);
// if (!CollectionUtils.isEmpty(map)){ if (!CollectionUtils.isEmpty(map)){
// for (Map.Entry<String, String> entry : map.entrySet()) { for (Map.Entry<String, String> entry : map.entrySet()) {
// List<ModbusConfig> modbusConfigList = JSON.parseArray(entry.getValue(), ModbusConfig.class); List<ModbusConfig> modbusConfigList = JSON.parseArray(entry.getValue(), ModbusConfig.class);
// resultMap.put(Integer.parseInt(entry.getKey()), modbusConfigList); resultMap.put(Integer.parseInt(entry.getKey()), modbusConfigList);
// } }
// return resultMap; return resultMap;
// } }
return setModbusConfigCacheByProductId(productId); return setModbusConfigCacheByProductId(productId);
} }

View File

@ -5,34 +5,23 @@ import com.fastbee.common.core.protocol.modbus.ModbusCode;
import com.fastbee.common.exception.ServiceException; import com.fastbee.common.exception.ServiceException;
import com.fastbee.common.utils.DateUtils; import com.fastbee.common.utils.DateUtils;
import com.fastbee.common.utils.SecurityUtils; import com.fastbee.common.utils.SecurityUtils;
import com.fastbee.common.utils.poi.ExcelUtil;
import com.fastbee.iot.cache.IModbusConfigCache; import com.fastbee.iot.cache.IModbusConfigCache;
import com.fastbee.iot.domain.DeviceJob;
import com.fastbee.iot.domain.ModbusConfig; import com.fastbee.iot.domain.ModbusConfig;
import com.fastbee.iot.domain.ThingsModel;
import com.fastbee.iot.mapper.ModbusConfigMapper; import com.fastbee.iot.mapper.ModbusConfigMapper;
import com.fastbee.iot.model.ThingsModels.PropertyDto;
import com.fastbee.iot.model.ThingsModels.ThingsModelValueItem; import com.fastbee.iot.model.ThingsModels.ThingsModelValueItem;
import com.fastbee.iot.model.modbus.ModbusDataImport; import com.fastbee.iot.model.modbus.ModbusDataImport;
import com.fastbee.iot.model.modbus.ModbusIoImport; import com.fastbee.iot.model.modbus.ModbusIoImport;
import com.fastbee.iot.service.IDeviceJobService;
import com.fastbee.iot.service.IModbusConfigService; import com.fastbee.iot.service.IModbusConfigService;
import com.fastbee.iot.service.IThingsModelService; import com.fastbee.iot.service.IThingsModelService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param;
import org.quartz.SchedulerException;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -106,8 +95,8 @@ public class ModbusConfigServiceImpl implements IModbusConfigService {
*/ */
@Override @Override
public void addOrUpModbusConfigBatch(List<ModbusConfig> modbusConfigList, Long productId, Long[] ids) { public void addOrUpModbusConfigBatch(List<ModbusConfig> modbusConfigList, Long productId, Long[] ids) {
assert !Objects.isNull(productId) : "产品id不能为空"; Assert.notNull(productId, "产品id不能为空");
assert !CollectionUtils.isEmpty(modbusConfigList) : "modbus配置数据不能为空"; Assert.isTrue(!CollectionUtils.isEmpty(modbusConfigList), "modbus配置数据不能为空");
if (!CollectionUtils.isEmpty(Arrays.asList(ids))) { if (!CollectionUtils.isEmpty(Arrays.asList(ids))) {
//要删除的id集合不为空,则先进行删除操作 //要删除的id集合不为空,则先进行删除操作
this.deleteModbusConfigByIds(ids); this.deleteModbusConfigByIds(ids);
@ -160,8 +149,8 @@ public class ModbusConfigServiceImpl implements IModbusConfigService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public AjaxResult importIOModbus(List<ModbusIoImport> list, Long productId, Integer type) { public AjaxResult importIOModbus(List<ModbusIoImport> list, Long productId, Integer type) {
assert !CollectionUtils.isEmpty(list) : "导入IO寄存器列表为空"; Assert.notNull(productId, "产品id为空");
assert !Objects.isNull(productId) : "产品id为空"; Assert.isTrue(!CollectionUtils.isEmpty(list), "导入IO寄存器列表为空");
int success = 0; int success = 0;
int failure = 0; int failure = 0;
StringBuilder succSb = new StringBuilder(); StringBuilder succSb = new StringBuilder();