package com.tcm.training.admin.system.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.tcm.training.admin.system.dto.SystemSettingsSaveRequest; import com.tcm.training.admin.system.entity.SystemSettings; import com.tcm.training.admin.system.mapper.SystemSettingsMapper; import com.tcm.training.admin.system.vo.SystemSettingsVO; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class SystemSettingsAppService { private final SystemSettingsMapper systemSettingsMapper; public SystemSettingsAppService(SystemSettingsMapper systemSettingsMapper) { this.systemSettingsMapper = systemSettingsMapper; } public SystemSettingsVO current() { SystemSettings config = systemSettingsMapper.selectOne(new LambdaQueryWrapper() .eq(SystemSettings::getDeleted, 0) .orderByDesc(SystemSettings::getId) .last("limit 1")); return toVO(config); } @Transactional public SystemSettingsVO saveCurrent(SystemSettingsSaveRequest request) { // 开启时必须提供图片;服务层校验同时覆盖非 HTTP 调用。 if (Boolean.TRUE.equals(request.getStartupPageEnabled()) && (request.getStartupPageImageUrl() == null || request.getStartupPageImageUrl().trim().isEmpty())) { throw new IllegalArgumentException("开启启动页后,请上传启动页图片"); } SystemSettings config = systemSettingsMapper.selectOne(new LambdaQueryWrapper() .eq(SystemSettings::getDeleted, 0) .orderByDesc(SystemSettings::getId) .last("limit 1")); if (config == null) { config = new SystemSettings(); fillConfig(config, request); systemSettingsMapper.insert(config); } else { fillConfig(config, request); systemSettingsMapper.updateById(config); } return toVO(config); } private void fillConfig(SystemSettings config, SystemSettingsSaveRequest request) { config.setServicePhone(request.getServicePhone().trim()); config.setServiceOnlineTime(request.getServiceOnlineTime().trim()); config.setBackupCycleDays(request.getBackupCycleDays()); config.setMemberExpireRemindDays(request.getMemberExpireRemindDays()); config.setStartupPageEnabled(Boolean.TRUE.equals(request.getStartupPageEnabled())); // 空串也会写入,避免 updateById 忽略 null 导致删除图片后仍保留旧值。 config.setStartupPageImageUrl(request.getStartupPageImageUrl() == null ? "" : request.getStartupPageImageUrl().trim()); } private SystemSettingsVO toVO(SystemSettings config) { if (config == null) { return null; } SystemSettingsVO vo = new SystemSettingsVO(); vo.setId(config.getId()); vo.setServicePhone(config.getServicePhone()); vo.setServiceOnlineTime(config.getServiceOnlineTime()); vo.setBackupCycleDays(config.getBackupCycleDays()); vo.setMemberExpireRemindDays(config.getMemberExpireRemindDays()); vo.setStartupPageEnabled(Boolean.TRUE.equals(config.getStartupPageEnabled())); vo.setStartupPageImageUrl(config.getStartupPageImageUrl()); return vo; } }