/*
|
* 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<FwDeviceConfigMapper, FwDeviceConfigEntity> implements IFwDeviceConfigService {
|
|
@Override
|
public IPage<FwDeviceConfigVO> selectFwDeviceConfigPage(IPage<FwDeviceConfigVO> 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);
|
}
|
|
/**
|
* 新增或修改设备配置
|
* <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) {
|
List<FwDeviceConfigExcel> fwDeviceConfigList = baseMapper.exportFwDeviceConfig(queryWrapper);
|
//fwDeviceConfigList.forEach(fwDeviceConfig -> {
|
// fwDeviceConfig.setTypeName(DictCache.getValue(DictEnum.YES_NO, FwDeviceConfig.getType()));
|
//});
|
return fwDeviceConfigList;
|
}
|
|
}
|