20260118:优化获取modbus首地址(从redis中获取)
This commit is contained in:
parent
d12016e04a
commit
271e2102db
@ -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";
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user