20260118:优化获取modbus首地址(从redis中获取)
This commit is contained in:
parent
d12016e04a
commit
271e2102db
@ -468,28 +468,18 @@ public class ModbusProtocol implements IProtocol {
|
||||
* 获取寄存器最小modbus地址,从最小的寄存器地址开始解码
|
||||
*/
|
||||
private String getCacheModbusAddress(Long productId, int salveId, int code) {
|
||||
// String key = RedisKeyBuilder.buildModbusRuntimeCacheKey(serialNumber);
|
||||
// Set<String> commandSet = redisCache.zRange(key, 0, -1);
|
||||
//
|
||||
// // 1. 遍历匹配指令
|
||||
// for (String command : commandSet) {
|
||||
// try {
|
||||
// Mparams params = ModbusUtils.getModbusParams(command);
|
||||
// redisCache.zRem(key, command); // 删除缓存
|
||||
// if (params.getSlaveId() == salveId && params.getCode() == code) {
|
||||
// return String.valueOf(params.getAddress());
|
||||
// }
|
||||
// } catch (Exception e) {
|
||||
// log.warn("解析指令异常: {}", e.getMessage());
|
||||
// }
|
||||
// }
|
||||
// todo 拿缓存
|
||||
// 1、从modbus拿缓存
|
||||
Map<Integer, List<ModbusConfig>> modbusConfigMap = modbusConfigCache.getModbusConfigCacheByProductId(productId);
|
||||
if (modbusConfigMap != null) {
|
||||
Integer addr = modbusConfigMap.keySet().stream().min(Integer::compare).orElse(-1);
|
||||
if (addr >= 0) {
|
||||
log.debug("=>从缓存中获取最小modbus地址,产品:[{}],从机地址:[{}],功能码:[{}],地址:[{}]", productId, salveId, code, addr);
|
||||
return String.valueOf(addr);
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 无匹配时查询数据库
|
||||
try {
|
||||
// Device device = deviceMapper.selectDeviceBySerialNumber(serialNumber);
|
||||
// if (device == null) return "0";
|
||||
|
||||
List<ModbusConfig> configs = modbusConfigMapper.selectModbusConfigListByProductId(productId);
|
||||
if (CollectionUtils.isEmpty(configs)) return "0";
|
||||
|
||||
|
||||
@ -45,5 +45,5 @@ public interface IModbusConfigCache {
|
||||
* @param identify 标识符
|
||||
* @return ModbusConfig
|
||||
*/
|
||||
public List<ModbusConfig> getSingleModbusConfig(Long productId, String identify);
|
||||
List<ModbusConfig> getSingleModbusConfig(Long productId, String identify);
|
||||
}
|
||||
|
||||
@ -41,16 +41,16 @@ public class ModbusConfigCacheImpl implements IModbusConfigCache {
|
||||
*/
|
||||
@Override
|
||||
public Map<Integer, List<ModbusConfig>> getModbusConfigCacheByProductId(Long productId) {
|
||||
// Map<Integer, List<ModbusConfig>> resultMap = new HashMap<>();
|
||||
// String modbusKey = RedisKeyBuilder.buildModbusKey(productId);
|
||||
// Map<String,String> map = redisCache.hashEntity(modbusKey);
|
||||
// if (!CollectionUtils.isEmpty(map)){
|
||||
// for (Map.Entry<String, String> entry : map.entrySet()) {
|
||||
// List<ModbusConfig> modbusConfigList = JSON.parseArray(entry.getValue(), ModbusConfig.class);
|
||||
// resultMap.put(Integer.parseInt(entry.getKey()), modbusConfigList);
|
||||
// }
|
||||
// return resultMap;
|
||||
// }
|
||||
Map<Integer, List<ModbusConfig>> resultMap = new HashMap<>();
|
||||
String modbusKey = RedisKeyBuilder.buildModbusKey(productId);
|
||||
Map<String,String> map = redisCache.hashEntity(modbusKey);
|
||||
if (!CollectionUtils.isEmpty(map)){
|
||||
for (Map.Entry<String, String> entry : map.entrySet()) {
|
||||
List<ModbusConfig> modbusConfigList = JSON.parseArray(entry.getValue(), ModbusConfig.class);
|
||||
resultMap.put(Integer.parseInt(entry.getKey()), modbusConfigList);
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
return setModbusConfigCacheByProductId(productId);
|
||||
}
|
||||
|
||||
|
||||
@ -5,34 +5,23 @@ import com.fastbee.common.core.protocol.modbus.ModbusCode;
|
||||
import com.fastbee.common.exception.ServiceException;
|
||||
import com.fastbee.common.utils.DateUtils;
|
||||
import com.fastbee.common.utils.SecurityUtils;
|
||||
import com.fastbee.common.utils.poi.ExcelUtil;
|
||||
import com.fastbee.iot.cache.IModbusConfigCache;
|
||||
import com.fastbee.iot.domain.DeviceJob;
|
||||
import com.fastbee.iot.domain.ModbusConfig;
|
||||
import com.fastbee.iot.domain.ThingsModel;
|
||||
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.modbus.ModbusDataImport;
|
||||
import com.fastbee.iot.model.modbus.ModbusIoImport;
|
||||
import com.fastbee.iot.service.IDeviceJobService;
|
||||
import com.fastbee.iot.service.IModbusConfigService;
|
||||
import com.fastbee.iot.service.IThingsModelService;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.quartz.SchedulerException;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.Assert;
|
||||
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.servlet.http.HttpServletResponse;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -106,8 +95,8 @@ public class ModbusConfigServiceImpl implements IModbusConfigService {
|
||||
*/
|
||||
@Override
|
||||
public void addOrUpModbusConfigBatch(List<ModbusConfig> modbusConfigList, Long productId, Long[] ids) {
|
||||
assert !Objects.isNull(productId) : "产品id不能为空";
|
||||
assert !CollectionUtils.isEmpty(modbusConfigList) : "modbus配置数据不能为空";
|
||||
Assert.notNull(productId, "产品id不能为空");
|
||||
Assert.isTrue(!CollectionUtils.isEmpty(modbusConfigList), "modbus配置数据不能为空");
|
||||
if (!CollectionUtils.isEmpty(Arrays.asList(ids))) {
|
||||
//要删除的id集合不为空,则先进行删除操作
|
||||
this.deleteModbusConfigByIds(ids);
|
||||
@ -160,8 +149,8 @@ public class ModbusConfigServiceImpl implements IModbusConfigService {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public AjaxResult importIOModbus(List<ModbusIoImport> list, Long productId, Integer type) {
|
||||
assert !CollectionUtils.isEmpty(list) : "导入IO寄存器列表为空";
|
||||
assert !Objects.isNull(productId) : "产品id为空";
|
||||
Assert.notNull(productId, "产品id为空");
|
||||
Assert.isTrue(!CollectionUtils.isEmpty(list), "导入IO寄存器列表为空");
|
||||
int success = 0;
|
||||
int failure = 0;
|
||||
StringBuilder succSb = new StringBuilder();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user