package com.tcm.training.admin.system.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.tcm.training.admin.common.PageResponse; import com.tcm.training.admin.system.dto.AppVersionCreateRequest; import com.tcm.training.admin.system.entity.AppVersionConfig; import com.tcm.training.admin.system.mapper.AppVersionConfigMapper; import com.tcm.training.admin.system.vo.AppVersionCheckVO; import com.tcm.training.admin.system.vo.AppVersionDetailVO; import com.tcm.training.admin.system.vo.AppVersionListItemVO; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; @Service public class AppVersionSettingsAppService { private final AppVersionConfigMapper appVersionConfigMapper; public AppVersionSettingsAppService(AppVersionConfigMapper appVersionConfigMapper) { this.appVersionConfigMapper = appVersionConfigMapper; } public PageResponse page(int page, int pageSize) { LambdaQueryWrapper qw = new LambdaQueryWrapper() .eq(AppVersionConfig::getDeleted, 0) .orderByDesc(AppVersionConfig::getVersionCode) .orderByDesc(AppVersionConfig::getId); IPage result = appVersionConfigMapper.selectPage(new Page(page, pageSize), qw); List list = new ArrayList(); for (AppVersionConfig item : result.getRecords()) { list.add(toListItem(item)); } return PageResponse.of(list, result.getTotal(), result.getCurrent(), result.getSize()); } public AppVersionDetailVO detail(Long id) { return toDetailVO(requireItem(id)); } @Transactional public AppVersionDetailVO create(AppVersionCreateRequest request) { AppVersionConfig latest = latest(); AppVersionConfig item = new AppVersionConfig(); item.setVersionNo(request.getVersionNo().trim()); item.setVersionCode(latest == null ? 1 : defaultNumber(latest.getVersionCode()) + 1); item.setAndroidFileUrl(request.getAndroidFileUrl().trim()); item.setAndroidFileName(request.getAndroidFileName().trim()); item.setIosFileUrl(request.getIosFileUrl().trim()); item.setIosFileName(request.getIosFileName().trim()); item.setForceUpdate(booleanToInteger(request.getForceUpdate())); item.setUpdateNotice(request.getUpdateNotice().trim()); item.setDeleted(0); appVersionConfigMapper.insert(item); return toDetailVO(item); } public AppVersionCheckVO checkUpdate(String platform, Integer currentVersionCode) { if (currentVersionCode == null) { throw new IllegalArgumentException("当前版本号不能为空"); } if (currentVersionCode < 0) { throw new IllegalArgumentException("当前版本号不能小于0"); } String normalizedPlatform = normalizePlatform(platform); AppVersionConfig latest = latest(); AppVersionCheckVO vo = new AppVersionCheckVO(); if (latest == null) { vo.setHasUpdate(Boolean.FALSE); return vo; } boolean hasUpdate = defaultNumber(latest.getVersionCode()) > currentVersionCode; vo.setHasUpdate(hasUpdate); vo.setLatestVersionNo(latest.getVersionNo()); vo.setLatestVersionCode(defaultNumber(latest.getVersionCode())); vo.setForceUpdate(integerToBoolean(latest.getForceUpdate())); vo.setUpdateNotice(latest.getUpdateNotice()); vo.setDownloadUrl(AppVersionConfig.PLATFORM_ANDROID.equals(normalizedPlatform) ? latest.getAndroidFileUrl() : latest.getIosFileUrl()); return vo; } private AppVersionConfig latest() { return appVersionConfigMapper.selectOne(new LambdaQueryWrapper() .eq(AppVersionConfig::getDeleted, 0) .orderByDesc(AppVersionConfig::getVersionCode) .orderByDesc(AppVersionConfig::getId) .last("limit 1")); } private AppVersionConfig requireItem(Long id) { AppVersionConfig item = appVersionConfigMapper.selectOne(new LambdaQueryWrapper() .eq(AppVersionConfig::getId, id) .eq(AppVersionConfig::getDeleted, 0) .last("limit 1")); if (item == null) { throw new IllegalArgumentException("APP版本不存在"); } return item; } private String normalizePlatform(String platform) { if (platform == null) { throw new IllegalArgumentException("平台类型不能为空"); } String normalized = platform.trim().toUpperCase(); if (AppVersionConfig.PLATFORM_ANDROID.equals(normalized) || AppVersionConfig.PLATFORM_IOS.equals(normalized)) { return normalized; } throw new IllegalArgumentException("平台类型不合法"); } private AppVersionListItemVO toListItem(AppVersionConfig item) { AppVersionListItemVO vo = new AppVersionListItemVO(); vo.setId(item.getId()); vo.setVersionNo(item.getVersionNo()); vo.setUpdateNotice(item.getUpdateNotice()); vo.setCreatedAt(item.getCreatedAt()); return vo; } private AppVersionDetailVO toDetailVO(AppVersionConfig item) { AppVersionDetailVO vo = new AppVersionDetailVO(); vo.setId(item.getId()); vo.setVersionNo(item.getVersionNo()); vo.setVersionCode(defaultNumber(item.getVersionCode())); vo.setAndroidFileUrl(item.getAndroidFileUrl()); vo.setAndroidFileName(item.getAndroidFileName()); vo.setIosFileUrl(item.getIosFileUrl()); vo.setIosFileName(item.getIosFileName()); vo.setForceUpdate(integerToBoolean(item.getForceUpdate())); vo.setUpdateNotice(item.getUpdateNotice()); vo.setCreatedAt(item.getCreatedAt()); return vo; } private Integer defaultNumber(Integer value) { return value == null ? 0 : value; } private Integer booleanToInteger(Boolean value) { return Boolean.TRUE.equals(value) ? 1 : 0; } private Boolean integerToBoolean(Integer value) { return value != null && value == 1; } }