目录
3. 新增时 , 可先关注核心基础数据 ( 复杂数据以修改形式完善 )
6. 需要对接多模块的通用字段设计 : String ( 推荐 )
1. 资产结构数据边界 : tenantId , 但 tenantId=1系统租户查看所有
2. 多对象接受 [ ] 时 , query 无法传递 数组问题 : String 中转接收
1. 主体 paret_relation 字段 , 存放 Json 数组 ( 解析 )
11. 前后端交互 : 入参数据结构演进 ( 单 转 多 ) ~ pic
1. 经验 experience
1. 无多大价值 , 停留数据展示层面
2. 保证数据一致性问题
保证数据一致性问题:
1、数据存 id
2、数据源唯一
3. 新增时 , 可先关注核心基础数据 ( 复杂数据以修改形式完善 )
4. 新增 / 修改 ( 幂等性处理 )
5. 增 / 删 / 改 添加日志 , 查询无需日志
6. 需要对接多模块的通用字段设计 : String ( 推荐 )
锚点模块 , MachineId
1、对接 设备;锚点 type = 0 时 , MachineId 是 设备ID
2、对接 摄像头;锚点 type = 1 时 , MachineId 是 摄像头ID (坑 , 仅此处ID是 极长的 String 类型)
3、对接 公司;锚点 type = 2 时 , MachineId 是 公司ID
导致:
对接 摄像头数据 , 可能需要大量修改锚点基础数据 - 20.08.04 待处理
7. 参数转换器
1. 资产结构数据边界 : tenantId , 但 tenantId=1系统租户查看所有
/**
* 将 tenantId == 1 的系统租户 , 处理为无 tenantId 的情况 - 20.10.12
* @param iotStructureDTO 入参
* @return IotStructureDTO 处理后的入参
*/
private IotStructureDTO dealParam(IotStructureDTO iotStructureDTO) {
if(iotStructureDTO.getTenantId() == 1){
iotStructureDTO.setTenantId(null);
return iotStructureDTO;
}
return iotStructureDTO;
}
2. 多对象接受 [ ] 时 , query 无法传递 数组问题 : String 中转接收
@Override
public IPage<IotResourcesVO> queryIotResourcesByLabel(Page page , IotResourcesDTO iotResourcesDTO) {
String labelIdList = iotResourcesDTO.getLabelIdList();
List<Integer> list = Arrays.asList(labelIdList.split(" , "))
.stream()
.map(s -> Integer.parseInt(s)) //.map(Integer::valueOf)
.collect(Collectors.toList());
iotResourcesDTO.setLabelId(list);
IPage<IotResourcesVO> iotResourcesVOIPage = iotResourcesMapper.queryIotResourcesByLabel(page , iotResourcesDTO);
return iotResourcesVOIPage;
}
8. 数据源关系维护
1. 主体 paret_relation 字段 , 存放 Json 数组 ( 解析 )
9. 中间表数据维护
1. 同步删除
2. 避免手动删除数据
10. 数据清洗 - ( 平台级别 : Dbus )
11. 前后端交互 : 入参数据结构演进 ( 单 转 多 ) ~ pic
情景 :
1、原始设计,虚拟点位对应 单个设备,多个属性,设备由产品限制维度(取 1),属性由产品限制维度(取 > 1)
2、新需求,虚拟点位对应多个产品维度的属性,则最新虚拟点位设计:
1、虚拟点位对应 多个设备,多个属性
2、设备由产品限制维度(取 >1),属性由产品限制维度(取 > 1)
最终版:
1、方便数据回显
2、利于业务逻辑处理
前端 :
1、数据以 proId、machineId 为维度,一组一组的构建
2、+ 号按钮,触发新一组数据