|
@@ -1,5 +1,6 @@
|
|
package cn.iocoder.yudao.module.iot.dal.tdengine;
|
|
package cn.iocoder.yudao.module.iot.dal.tdengine;
|
|
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.iocoder.yudao.module.iot.framework.tdengine.core.TDengineTableField;
|
|
import cn.iocoder.yudao.module.iot.framework.tdengine.core.TDengineTableField;
|
|
import cn.iocoder.yudao.module.iot.framework.tdengine.core.annotation.TDengineDS;
|
|
import cn.iocoder.yudao.module.iot.framework.tdengine.core.annotation.TDengineDS;
|
|
@@ -7,6 +8,7 @@ import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
|
|
import org.apache.ibatis.annotations.Mapper;
|
|
import org.apache.ibatis.annotations.Mapper;
|
|
import org.apache.ibatis.annotations.Param;
|
|
import org.apache.ibatis.annotations.Param;
|
|
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -29,18 +31,38 @@ public interface IotDevicePropertyDataMapper {
|
|
List<TDengineTableField> addFields = newFields.stream().filter( // 新增的字段
|
|
List<TDengineTableField> addFields = newFields.stream().filter( // 新增的字段
|
|
newField -> oldFields.stream().noneMatch(oldField -> oldField.getField().equals(newField.getField())))
|
|
newField -> oldFields.stream().noneMatch(oldField -> oldField.getField().equals(newField.getField())))
|
|
.collect(Collectors.toList());
|
|
.collect(Collectors.toList());
|
|
- List<TDengineTableField> modifyFields = newFields.stream().filter( // 更新的字段
|
|
|
|
- newField -> oldFields.stream().anyMatch(oldField -> oldField.getField().equals(newField.getField())
|
|
|
|
- && (ObjectUtil.notEqual(oldField.getType(), newField.getType())
|
|
|
|
- || (newField.getLength() != null && ObjectUtil.notEqual(oldField.getLength(), newField.getLength())))))
|
|
|
|
- .collect(Collectors.toList());
|
|
|
|
List<TDengineTableField> dropFields = oldFields.stream().filter( // 删除的字段
|
|
List<TDengineTableField> dropFields = oldFields.stream().filter( // 删除的字段
|
|
oldField -> newFields.stream().noneMatch(n -> n.getField().equals(oldField.getField())))
|
|
oldField -> newFields.stream().noneMatch(n -> n.getField().equals(oldField.getField())))
|
|
.collect(Collectors.toList());
|
|
.collect(Collectors.toList());
|
|
|
|
+ List<TDengineTableField> modifyTypeFields = new ArrayList<>(); // 变更类型的字段
|
|
|
|
+ List<TDengineTableField> modifyLengthFields = new ArrayList<>(); // 变更长度的字段
|
|
|
|
+ newFields.forEach(newField -> {
|
|
|
|
+ TDengineTableField oldField = CollUtil.findOne(oldFields, field -> field.getField().equals(newField.getField()));
|
|
|
|
+ if (oldField == null) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (ObjectUtil.notEqual(oldField.getType(), newField.getType())) {
|
|
|
|
+ modifyTypeFields.add(newField);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (newField.getLength()!= null) {
|
|
|
|
+ if (newField.getLength() > oldField.getLength()) {
|
|
|
|
+ modifyLengthFields.add(newField);
|
|
|
|
+ } else if (newField.getLength() < oldField.getLength()) {
|
|
|
|
+ // 特殊:TDengine 长度修改时,只允许变长,所以此时认为是修改类型
|
|
|
|
+ modifyTypeFields.add(newField);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ // 执行
|
|
addFields.forEach(field -> alterProductPropertySTableAddField(productKey, field));
|
|
addFields.forEach(field -> alterProductPropertySTableAddField(productKey, field));
|
|
- // TODO 芋艿:tdengine 只允许 modify 长度;如果 type 变化,只能 drop + add
|
|
|
|
- modifyFields.forEach(field -> alterProductPropertySTableModifyField(productKey, field));
|
|
|
|
dropFields.forEach(field -> alterProductPropertySTableDropField(productKey, field));
|
|
dropFields.forEach(field -> alterProductPropertySTableDropField(productKey, field));
|
|
|
|
+ modifyLengthFields.forEach(field -> alterProductPropertySTableModifyField(productKey, field));
|
|
|
|
+ modifyTypeFields.forEach(field -> {
|
|
|
|
+ alterProductPropertySTableDropField(productKey, field);
|
|
|
|
+ alterProductPropertySTableAddField(productKey, field);
|
|
|
|
+ });
|
|
}
|
|
}
|
|
|
|
|
|
void alterProductPropertySTableAddField(@Param("productKey") String productKey,
|
|
void alterProductPropertySTableAddField(@Param("productKey") String productKey,
|