diff --git a/fastbee-protocol/fastbee-protocol-collect/src/main/java/com/fastbee/modbus/codec/ModbusProtocol.java b/fastbee-protocol/fastbee-protocol-collect/src/main/java/com/fastbee/modbus/codec/ModbusProtocol.java index 6aa9e07c..0f61bd44 100644 --- a/fastbee-protocol/fastbee-protocol-collect/src/main/java/com/fastbee/modbus/codec/ModbusProtocol.java +++ b/fastbee-protocol/fastbee-protocol-collect/src/main/java/com/fastbee/modbus/codec/ModbusProtocol.java @@ -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 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> 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 configs = modbusConfigMapper.selectModbusConfigListByProductId(productId); if (CollectionUtils.isEmpty(configs)) return "0"; diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/cache/IModbusConfigCache.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/cache/IModbusConfigCache.java index 20bfdcad..8ac36d09 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/cache/IModbusConfigCache.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/cache/IModbusConfigCache.java @@ -45,5 +45,5 @@ public interface IModbusConfigCache { * @param identify 标识符 * @return ModbusConfig */ - public List getSingleModbusConfig(Long productId, String identify); + List getSingleModbusConfig(Long productId, String identify); } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/cache/impl/ModbusConfigCacheImpl.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/cache/impl/ModbusConfigCacheImpl.java index 971ca208..537d3433 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/cache/impl/ModbusConfigCacheImpl.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/cache/impl/ModbusConfigCacheImpl.java @@ -41,16 +41,16 @@ public class ModbusConfigCacheImpl implements IModbusConfigCache { */ @Override public Map> getModbusConfigCacheByProductId(Long productId) { -// Map> resultMap = new HashMap<>(); -// String modbusKey = RedisKeyBuilder.buildModbusKey(productId); -// Map map = redisCache.hashEntity(modbusKey); -// if (!CollectionUtils.isEmpty(map)){ -// for (Map.Entry entry : map.entrySet()) { -// List modbusConfigList = JSON.parseArray(entry.getValue(), ModbusConfig.class); -// resultMap.put(Integer.parseInt(entry.getKey()), modbusConfigList); -// } -// return resultMap; -// } + Map> resultMap = new HashMap<>(); + String modbusKey = RedisKeyBuilder.buildModbusKey(productId); + Map map = redisCache.hashEntity(modbusKey); + if (!CollectionUtils.isEmpty(map)){ + for (Map.Entry entry : map.entrySet()) { + List modbusConfigList = JSON.parseArray(entry.getValue(), ModbusConfig.class); + resultMap.put(Integer.parseInt(entry.getKey()), modbusConfigList); + } + return resultMap; + } return setModbusConfigCacheByProductId(productId); } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/ModbusConfigServiceImpl.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/ModbusConfigServiceImpl.java index d39cda66..df76cf49 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/ModbusConfigServiceImpl.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/ModbusConfigServiceImpl.java @@ -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 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 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();