吉安感知网项目-后端
linwei
2026-04-07 c5badf4a2eafbaa4eff00f0941807626dda1d8ff
drone-service/drone-fw/src/main/java/org/sxkj/fw/detection/service/impl/FwDeviceConfigServiceImpl.java
@@ -25,6 +25,7 @@
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.api.R;
import java.util.List;
/**
@@ -61,6 +62,55 @@
      return baseMapper.resetLatestByDeviceId(deviceId, excludeId);
   }
   /**
    * 新增或修改设备配置
    * <p>
    * 业务逻辑说明:
    * 1. 新增配置时:自动分配版本号(最大版本号+1),标记为最新版本,并将该设备其他配置的is_latest重置为0
    * 2. 更新配置时:保留原有版本号和is_latest标识(除非显式传入新值),若设置is_latest=1则重置该设备其他配置
    * </p>
    *
    * @param fwDeviceConfig 设备配置实体对象,必须包含deviceId;更新时需包含id
    * @return R 操作结果,成功返回R.status(true),失败返回错误信息
    */
   @Override
   public R saveOrUpdateConfig(FwDeviceConfigEntity fwDeviceConfig) {
      // 参数校验:设备ID不能为空
      if (fwDeviceConfig == null || fwDeviceConfig.getDeviceId() == null) {
         return R.fail("设备id不能为空");
      }
      Long deviceId = fwDeviceConfig.getDeviceId();
      FwDeviceConfigEntity existing = null;
      // 判断是更新操作还是新增操作
      if (fwDeviceConfig.getId() != null) {
         existing = this.getById(fwDeviceConfig.getId());
         if (existing == null) {
            return R.fail("数据不存在");
         }
      }
      // 处理新增配置逻辑
      if (existing == null) {
         Integer maxVersion = this.selectMaxConfigVersion(deviceId);
         fwDeviceConfig.setConfigVersion(maxVersion == null ? 1 : maxVersion + 1);
         fwDeviceConfig.setIsLatest((byte) 1);
         this.resetLatestByDeviceId(deviceId, null);
         return R.status(this.save(fwDeviceConfig));
      }
      // 处理更新配置逻辑:保留原有字段值(除非显式传入新值)
      if (fwDeviceConfig.getConfigVersion() == null) {
         fwDeviceConfig.setConfigVersion(existing.getConfigVersion());
      }
      if (fwDeviceConfig.getIsLatest() == null) {
         fwDeviceConfig.setIsLatest(existing.getIsLatest());
      }
      // 如果设置为最新版本,需要重置该设备其他配置的is_latest标识
      if (fwDeviceConfig.getIsLatest() != null && fwDeviceConfig.getIsLatest() == 1) {
         this.resetLatestByDeviceId(deviceId, fwDeviceConfig.getId());
      }
      return R.status(this.updateById(fwDeviceConfig));
   }
   @Override
   public List<FwDeviceConfigExcel> exportFwDeviceConfig(Wrapper<FwDeviceConfigEntity> queryWrapper) {