同步数据接口修改

This commit is contained in:
chenhaojie 2024-08-13 17:07:42 +08:00
parent 85d2ffa9c2
commit 6771ee6345
8 changed files with 84 additions and 53 deletions

View File

@ -14,7 +14,7 @@ import java.util.List;
*
* @author chenhaojie
*/
public interface SysAuthorityMapper extends BaseMapper<SysAuthority> {
public interface SysAuthorityMapper extends BaseMapperPlus<SysAuthority, SysAuthority> {
List<SysAuthority> selectByAuthorities(@Param("list")List<SysAuthority> list);

View File

@ -39,7 +39,7 @@ public class SysAuthorityServiceImpl implements SysAuthorityService {
// 批量插入不存在的权限
if (!list.isEmpty()) {
sysAuthorityMapper.batchInsert(list);
sysAuthorityMapper.insertOrUpdateBatch(list);
}
} catch (Exception e) {
// 异常处理记录日志或执行其他恢复策略

View File

@ -59,7 +59,7 @@ public class SysIotModelServiceImpl implements SysIotModelService {
BeanCopyUtils.copy(sysIotModelDto, sysIotModel);
QueryWrapper<SysIotModel> sysIotModelQueryWrapper = new QueryWrapper<>();
sysIotModelQueryWrapper.eq("iot_model_code", sysIotModelDto.getIotModelCode());
sysIotModelQueryWrapper.eq("iot_model_code", sysIotModelDto.getIotModelCode().toLowerCase());
SysIotModel sysIotModelQuery = sysIotModelMapper.selectOne(sysIotModelQueryWrapper);
if (!(sysIotModelQuery == null)) {
throw new ServiceException("物模型code已经存在");
@ -74,6 +74,7 @@ public class SysIotModelServiceImpl implements SysIotModelService {
sysIotModelMapper.insert(sysIotModel);
SysIotModelVo sysIotModelVo = new SysIotModelVo();
BeanCopyUtils.copy(sysIotModel, sysIotModelVo);
sysIotModelVo.setIotModelCode(sysIotModelDto.getIotModelCode().toLowerCase());
return sysIotModelVo;
}
@ -83,7 +84,7 @@ public class SysIotModelServiceImpl implements SysIotModelService {
SysUserVo sysUserVo = (SysUserVo) StpUtil.getTokenSession().get(SessionUtil.SESSION_USER_KEY);
sysIotModel.setUpdatedTime(new Date());
sysIotModel.setUpdatedBy(sysUserVo.getAccount());
// sysIotModel.setUpdatedBy("sysUserVo.getAccount()");
sysIotModel.setIotModelCode(sysIotModelDto.getIotModelCode().toLowerCase());
sysIotModelMapper.updateById(sysIotModel);
SysIotModelVo sysIotModelVo = new SysIotModelVo();
BeanCopyUtils.copy(sysIotModel, sysIotModelVo);
@ -136,7 +137,7 @@ public class SysIotModelServiceImpl implements SysIotModelService {
BeanCopyUtils.copy(sysIotModelFieldDto, sysIotModelField);
QueryWrapper<SysIotModelField> sysIotModelFieldQueryWrapper = new QueryWrapper<>();
sysIotModelFieldQueryWrapper.eq("attribute_code", sysIotModelFieldDto.getAttributeCode());
sysIotModelFieldQueryWrapper.eq("attribute_code", sysIotModelFieldDto.getAttributeCode().toLowerCase());
SysIotModelField sysIotModelFieldQuery = sysIotModelFieldMapper.selectOne(sysIotModelFieldQueryWrapper);
if (!(sysIotModelFieldQuery == null)) {
throw new ServiceException("物模型属性code已经存在");
@ -151,6 +152,7 @@ public class SysIotModelServiceImpl implements SysIotModelService {
sysIotModelFieldMapper.insert(sysIotModelField);
SysIotModelFieldVo sysIotModelFieldVo = new SysIotModelFieldVo();
BeanCopyUtils.copy(sysIotModelField, sysIotModelFieldVo);
sysIotModelFieldVo.setAttributeCode(sysIotModelFieldDto.getAttributeCode().toLowerCase());
return sysIotModelFieldVo;
}
@ -161,7 +163,7 @@ public class SysIotModelServiceImpl implements SysIotModelService {
SysUserVo sysUserVo = (SysUserVo) StpUtil.getTokenSession().get(SessionUtil.SESSION_USER_KEY);
sysIotModelField.setUpdatedTime(new Date());
sysIotModelField.setUpdatedBy(sysUserVo.getAccount());
// sysIotModelField.setUpdatedBy("sysUserVo.getAccount()");
sysIotModelField.setAttributeCode(sysIotModelFieldDto.getAttributeCode().toLowerCase());
sysIotModelFieldMapper.updateById(sysIotModelField);
SysIotModelFieldVo sysIotModelFieldVo = new SysIotModelFieldVo();
BeanCopyUtils.copy(sysIotModelField, sysIotModelFieldVo);
@ -188,7 +190,7 @@ public class SysIotModelServiceImpl implements SysIotModelService {
BeanCopyUtils.copy(sysIotModelServiceDto, sysIotModelServices);
QueryWrapper<SysIotModelServices> sysIotModelServiceQueryWrapper = new QueryWrapper<>();
sysIotModelServiceQueryWrapper.eq("service_code", sysIotModelServiceDto.getServiceCode());
sysIotModelServiceQueryWrapper.eq("service_code", sysIotModelServiceDto.getServiceCode().toLowerCase());
SysIotModelServices sysIotModelServiceQuery = sysIotModelServiceMapper.selectOne(sysIotModelServiceQueryWrapper);
if (!(sysIotModelServiceQuery == null)) {
throw new ServiceException("物模型动作code已经存在");
@ -203,6 +205,7 @@ public class SysIotModelServiceImpl implements SysIotModelService {
sysIotModelServiceMapper.insert(sysIotModelServices);
SysIotModelServiceVo sysIotModelServiceVo = new SysIotModelServiceVo();
BeanCopyUtils.copy(sysIotModelServices, sysIotModelServiceVo);
sysIotModelServiceVo.setServiceCode(sysIotModelServiceDto.getServiceCode().toLowerCase());
return sysIotModelServiceVo;
}
@ -213,7 +216,7 @@ public class SysIotModelServiceImpl implements SysIotModelService {
SysUserVo sysUserVo = (SysUserVo) StpUtil.getTokenSession().get(SessionUtil.SESSION_USER_KEY);
sysIotModelServices.setUpdatedTime(new Date());
sysIotModelServices.setUpdatedBy(sysUserVo.getAccount());
// sysIotModelServices.setUpdatedBy("sysUserVo.getAccount()");
sysIotModelServices.setServiceCode(sysIotModelServiceDto.getServiceCode().toLowerCase());
sysIotModelServiceMapper.updateById(sysIotModelServices);
SysIotModelServiceVo sysIotModelServiceVo = new SysIotModelServiceVo();
BeanCopyUtils.copy(sysIotModelServices, sysIotModelServiceVo);
@ -287,18 +290,23 @@ public class SysIotModelServiceImpl implements SysIotModelService {
for (List<Object> row : list) {
// 遍历sheet页中记录构造需要导入的对象
SysIotModelServices services = new SysIotModelServices();
services.setServiceCode(row.get(1).toString());
services.setServiceName(row.get(2).toString());
services.setServiceType(Integer.valueOf(row.get(3).toString()));
services.setPorder(Integer.valueOf(row.get(4).toString()));
services.setIotModelId(Long.valueOf(iotModelId));
services.setId(SequenceUtils.generateId());
services.setCreatedTime(new Date());
services.setUpdatedTime(new Date());
services.setRevision(1);
services.setCreatedBy(StpUtil.getLoginIdAsString());
services.setUpdatedBy(StpUtil.getLoginIdAsString());
sysIotModelServiceList.add(services);
QueryWrapper<SysIotModelServices> sysIotModelServiceQueryWrapper = new QueryWrapper<>();
sysIotModelServiceQueryWrapper.eq("service_code", row.get(1).toString().toLowerCase());
SysIotModelServices sysIotModelServiceQuery = sysIotModelServiceMapper.selectOne(sysIotModelServiceQueryWrapper);
if (sysIotModelServiceQuery == null) {
services.setServiceCode(row.get(1).toString().toLowerCase());
services.setServiceName(row.get(2).toString());
services.setServiceType(Integer.valueOf(row.get(3).toString()));
services.setPorder(Integer.valueOf(row.get(4).toString()));
services.setIotModelId(Long.valueOf(iotModelId));
services.setId(SequenceUtils.generateId());
services.setCreatedTime(new Date());
services.setUpdatedTime(new Date());
services.setRevision(1);
services.setCreatedBy(StpUtil.getLoginIdAsString());
services.setUpdatedBy(StpUtil.getLoginIdAsString());
sysIotModelServiceList.add(services);
}
}
sysIotModelServiceMapper.insertBatch(sysIotModelServiceList);
}
@ -309,18 +317,23 @@ public class SysIotModelServiceImpl implements SysIotModelService {
for (List<Object> row : list) {
// 遍历sheet页中记录构造需要导入的对象
SysIotModelField field = new SysIotModelField();
field.setAttributeCode(row.get(1).toString());
field.setAttributeName(row.get(2).toString());
field.setAttributeType(Integer.valueOf(row.get(3).toString()));
field.setPorder(Integer.valueOf(row.get(4).toString()));
field.setIotModelId(Long.valueOf(iotModelId));
field.setId(SequenceUtils.generateId());
field.setCreatedTime(new Date());
field.setUpdatedTime(new Date());
field.setRevision(1);
field.setCreatedBy(StpUtil.getLoginIdAsString());
field.setUpdatedBy(StpUtil.getLoginIdAsString());
sysIotModelFieldList.add(field);
QueryWrapper<SysIotModelField> sysIotModelFieldQueryWrapper = new QueryWrapper<>();
sysIotModelFieldQueryWrapper.eq("attribute_code", row.get(1).toString().toLowerCase());
SysIotModelField sysIotModelFieldQuery = sysIotModelFieldMapper.selectOne(sysIotModelFieldQueryWrapper);
if (sysIotModelFieldQuery == null) {
field.setAttributeCode(row.get(1).toString().toLowerCase());
field.setAttributeName(row.get(2).toString());
field.setAttributeType(Integer.valueOf(row.get(3).toString()));
field.setPorder(Integer.valueOf(row.get(4).toString()));
field.setIotModelId(Long.valueOf(iotModelId));
field.setId(SequenceUtils.generateId());
field.setCreatedTime(new Date());
field.setUpdatedTime(new Date());
field.setRevision(1);
field.setCreatedBy(StpUtil.getLoginIdAsString());
field.setUpdatedBy(StpUtil.getLoginIdAsString());
sysIotModelFieldList.add(field);
}
}
sysIotModelFieldMapper.insertBatch(sysIotModelFieldList);
}

View File

@ -8,9 +8,13 @@ import com.fasterxml.jackson.databind.JsonNode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.MessageFormat;
@Service(value = NodeConstant.HEARTBEAT)
public class HeartbeatCommand implements BaseCommand{
public static final String HEART_BEAT = "heartBeat:{0}";
@Autowired
AdminRedisTemplate adminRedisTemplate;
@Override
@ -22,17 +26,17 @@ public class HeartbeatCommand implements BaseCommand{
for (JsonNode fruitNode : linkNode) {
String linkId = fruitNode.get("linkId").asText();
String online = fruitNode.get("online").asText();
String key = MessageFormat.format(HEART_BEAT, linkId);
if (StringUtils.isEmpty(online)) {
adminRedisTemplate.set(linkId, 0);
adminRedisTemplate.set(key, 0);
} else {
if ("true".equals(online)) {
adminRedisTemplate.set(linkId, 1);
adminRedisTemplate.set(key, 1);
} else {
adminRedisTemplate.set(linkId, 0);
adminRedisTemplate.set(key, 0);
}
}
adminRedisTemplate.expire(linkId, 300L);
adminRedisTemplate.expire(key, 300L);
}
}
}

View File

@ -1,6 +1,5 @@
package com.das.modules.node.command;
import cn.hutool.core.collection.ListUtil;
import com.das.common.utils.AdminRedisTemplate;
import com.das.modules.node.constant.NodeConstant;
import com.das.modules.node.domain.bo.TerminalMessage;
@ -22,8 +21,9 @@ public class InitDeviceDataCommand implements BaseCommand{
JsonNode dataInfo = data.getData();
if (!dataInfo.isEmpty()) {
String deviceId = dataInfo.get("deviceId").asText();
JsonNode values = dataInfo.get("values");
// 存入redis
adminRedisTemplate.set(deviceId, ListUtil.toList(dataInfo.get("values").asText()));
adminRedisTemplate.set(deviceId, values);
}
}

View File

@ -1,6 +1,5 @@
package com.das.modules.node.service.impl;
import cn.hutool.core.collection.ListUtil;
import com.das.common.constant.BaseIotModelType;
import com.das.common.utils.AdminRedisTemplate;
import com.das.modules.equipment.domain.vo.IotModelFieldVo;
@ -15,7 +14,6 @@ import com.das.modules.node.mapper.SysCommunicationLinkMapper;
import com.das.modules.node.mapper.SysImptabmappingMapper;
import com.das.modules.node.service.DataService;
import com.das.modules.node.service.TDEngineService;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
@ -28,7 +26,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
@ -198,6 +195,16 @@ public class DataServiceImpl implements DataService {
configUpdateVo.setEquipments(equipments);
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.valueToTree(configUpdateVo);
long time = System.currentTimeMillis();
TerminalMessage configUpdate = TerminalMessage.builder()
.cmd("configUpdate")
.cmdId(String.valueOf(nodeId))
.time(time)
.data(jsonNode)
.build();
nodeMessageHandler.sendActionMessage(Long.valueOf(nodeId), configUpdate);
return jsonNode;
}
@ -219,25 +226,32 @@ public class DataServiceImpl implements DataService {
@Override
public void handleData(TerminalMessage data) {
// 先从redis里面获取设备的初始化数据
JsonNode jsonNode = data.getData();
String deviceId = jsonNode.get("deviceId").asText();
HashMap<String, Object> initValue = adminRedisTemplate.get(deviceId);
JsonNode values = jsonNode.get("values");
List<Map.Entry<String, Object>> entryList = new ArrayList<>(initValue.entrySet());
HashMap<String, Object> newHashMap = new HashMap<>();
for (Map.Entry<String, Object> entry : entryList) {
if(values.get(entry.getKey()) == null){
newHashMap.put(entry.getKey(), entry.getValue());
} else{
newHashMap.put(entry.getKey(), values.get(entry.getKey()).asDouble());
}
}
adminRedisTemplate.set(deviceId, newHashMap);
Long dataTime = data.getTime();
adminRedisTemplate.set(deviceId, ListUtil.toList(jsonNode.get("values").asText()));
// 存入td库
// 根据设备ID获取对应的物模型属性
String iotModelCode = sysIotModelMapper.getIotModel(jsonNode.get("deviceId").asLong());
JsonNode valueJsonNode = jsonNode.get("values");
Map<String, Object> resultMap = iotFieldMap.get(iotModelCode);
// 使用增强的 for 循环遍历键
for (String key : resultMap.keySet()) {
float value = (float) valueJsonNode.get(key).asDouble();
resultMap.put(key, value);
}
HashMap<String, Object> tdValues = adminRedisTemplate.get(deviceId);
List<RTData> list = new ArrayList<>();
RTData rtData = RTData.builder()
.dataTime(dataTime)
.deviceId(Long.valueOf(deviceId))
.values(resultMap)
.values(tdValues)
.build();
list.add(rtData);

View File

@ -51,7 +51,7 @@
<select id="getEquipmentId" resultType="java.lang.Long">
select si.equipment_id from sys_imptabmapping si
select distinct si.equipment_id from sys_imptabmapping si
left join sys_communicationlink sc on sc.id = si.link_id
where sc.id = #{linkId}
</select>

View File

@ -65,7 +65,7 @@
</select>
<select id="getAllIotModelField" resultType="java.lang.String">
select simf.attribute_code from sys_iot_model_field simf where simf.iot_model_id = #{id} order by simf.porder
select simf.attribute_code from sys_iot_model_field simf where simf.iot_model_id = #{id} order by simf.attribute_code
</select>