lipenghui 3 долоо хоног өмнө
parent
commit
30fbba0742

+ 27 - 1
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/object/BeanUtils.java

@@ -4,7 +4,10 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 
+import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.function.Consumer;
 
 /**
@@ -66,4 +69,27 @@ public class BeanUtils {
         BeanUtil.copyProperties(source, target, false);
     }
 
-}
+    /**
+     * 找出在第一个列表中有但在第二个列表中没有的元素
+     * @param firstList 第一个列表
+     * @param secondList 第二个列表
+     * @return 差异元素列表
+     */
+    public static List<String> getElementsOnlyInFirstList(List<String> firstList, List<String> secondList) {
+        // 将第二个列表转换为HashSet以提高查找效率
+        Set<String> secondSet = new HashSet<>(secondList);
+
+        // 存储差异元素
+        List<String> result = new ArrayList<>();
+
+        // 遍历第一个列表,找出不在第二个列表中的元素
+        for (String element : firstList) {
+            if (!secondSet.contains(element)) {
+                result.add(element);
+            }
+        }
+
+        return result;
+    }
+
+}

+ 2 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotDeviceService.java

@@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.pojo.SortablePageParam;
 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.module.pms.ThingsModelDTO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotdevicecategorytemplateattrs.vo.IotDeviceProperty;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDevicePageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceSaveReqVO;
@@ -21,6 +22,7 @@ import java.util.Map;
  * @author 芋道源码
  */
 public interface IotDeviceService {
+    void templateChange(String categoryId, List<IotDeviceProperty> properties);
     void importDevice(List<DeviceImportExcelVO> list);
     List<IotDeviceDO> getMapDevice();
     List<ThingsModelDTO> getTdParams(IotDeviceDO iotDeviceDO);

+ 27 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotDeviceServiceImpl.java

@@ -12,6 +12,7 @@ import cn.iocoder.yudao.framework.common.util.object.PageUtils;
 import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils;
 import cn.iocoder.yudao.module.pms.ThingsModelDTO;
 import cn.iocoder.yudao.module.pms.controller.admin.TableDataInfo;
+import cn.iocoder.yudao.module.pms.controller.admin.iotdevicecategorytemplateattrs.vo.IotDeviceProperty;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdeviceperson.vo.IotDevicePersonPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdevicerunlog.vo.IotDeviceRunLogRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmodeltemplateattrs.vo.IotModelTemplateAttrsPageReqVO;
@@ -51,6 +52,7 @@ import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Assert;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -123,6 +125,31 @@ public class IotDeviceServiceImpl implements IotDeviceService {
     private IotOpeationFillMapper zhbdmapper;
     private final static String parameter = "lng~~经度,lat~~纬度,today_distance~~当日里程,distance~~总里程,todayoil~~当日油量,totaloil~~总油量,online~~是否在线,oil1~~1路油量,oil2~~2路油量,oil3~~3路油量,oil4~~4路油量,vehicle_name~~车牌号码";
 
+    @Override
+    public void templateChange(String categoryId, List<IotDeviceProperty> properties) {
+        List<IotDeviceDO> iotDeviceDOS = iotDeviceMapper.selectList("asset_class", categoryId);
+        List<IotDeviceDO> collect = iotDeviceDOS.stream().filter(e -> !"".equals(e.getTemplateJson()) && Objects.nonNull(e.getTemplateJson()) && !"[]".equals(e.getTemplateJson())).collect(Collectors.toList());
+        List<String> codes = properties.stream().map(IotDeviceProperty::getCode).collect(Collectors.toList());
+        if (CollUtil.isNotEmpty(collect)){
+            List<IotDeviceProperty> properties1 = JSON.parseArray(collect.get(0).getTemplateJson(), IotDeviceProperty.class);
+            List<String> devicePropertyCodes = properties1.stream().map(IotDeviceProperty::getCode).collect(Collectors.toList());
+            List<String> needAdd = BeanUtils.getElementsOnlyInFirstList(codes, devicePropertyCodes);
+            List<String> needDelete = BeanUtils.getElementsOnlyInFirstList(devicePropertyCodes, codes);
+            collect.forEach(device ->{
+                List<IotDeviceProperty> deviceProperties = JSON.parseArray(device.getTemplateJson(), IotDeviceProperty.class);
+                deviceProperties.removeIf(item -> needDelete.contains(item.getCode()));
+                properties.forEach(property -> {
+                    if (needAdd.contains(property.getCode())) {
+                        deviceProperties.add(property);
+                    }
+                });
+                device.setTemplateJson(JSON.toJSONString(deviceProperties));
+                iotDeviceMapper.updateById(device);
+
+            });
+        }
+    }
+
     @Override
     public void importDevice(List<DeviceImportExcelVO> list) {
         List<IotDeviceDO> iotDeviceDOS = iotDeviceMapper.selectList();