/* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.sxkj.fw.detection.service.impl; import org.sxkj.fw.detection.entity.FwDeviceConfigEntity; import org.sxkj.fw.detection.vo.FwDeviceConfigVO; import org.sxkj.fw.detection.excel.FwDeviceConfigExcel; import org.sxkj.fw.detection.mapper.FwDeviceConfigMapper; import org.sxkj.fw.detection.service.IFwDeviceConfigService; import org.springframework.stereotype.Service; 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; /** * 设备配置表 服务实现类 * * @author lw * @since 2026-01-08 */ @Service public class FwDeviceConfigServiceImpl extends BaseServiceImpl implements IFwDeviceConfigService { @Override public IPage selectFwDeviceConfigPage(IPage page, FwDeviceConfigVO fwDeviceConfig) { return page.setRecords(baseMapper.selectFwDeviceConfigPage(page, fwDeviceConfig)); } @Override public FwDeviceConfigEntity selectLatestByDeviceId(Long deviceId) { return baseMapper.selectLatestByDeviceId(deviceId); } @Override public FwDeviceConfigEntity selectLatestVersionByDeviceId(Long deviceId) { return baseMapper.selectLatestVersionByDeviceId(deviceId); } @Override public Integer selectMaxConfigVersion(Long deviceId) { return baseMapper.selectMaxConfigVersion(deviceId); } @Override public int resetLatestByDeviceId(Long deviceId, Long excludeId) { return baseMapper.resetLatestByDeviceId(deviceId, excludeId); } /** * 新增或修改设备配置 *

* 业务逻辑说明: * 1. 新增配置时:自动分配版本号(最大版本号+1),标记为最新版本,并将该设备其他配置的is_latest重置为0 * 2. 更新配置时:保留原有版本号和is_latest标识(除非显式传入新值),若设置is_latest=1则重置该设备其他配置 *

* * @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 exportFwDeviceConfig(Wrapper queryWrapper) { List fwDeviceConfigList = baseMapper.exportFwDeviceConfig(queryWrapper); //fwDeviceConfigList.forEach(fwDeviceConfig -> { // fwDeviceConfig.setTypeName(DictCache.getValue(DictEnum.YES_NO, FwDeviceConfig.getType())); //}); return fwDeviceConfigList; } }