.NETAdmin/ZR.Service/Business/OdfAppUpdatesService.cs
2025-09-23 16:11:54 +08:00

176 lines
5.6 KiB
C#

using Infrastructure.Attribute;
using Infrastructure.Extensions;
using ZR.Model.Business.Dto;
using ZR.Model.Business;
using ZR.Repository;
using ZR.Service.Business.IBusinessService;
namespace ZR.Service.Business
{
/// <summary>
/// App 更新表Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IOdfAppUpdatesService), ServiceLifetime = LifeTime.Transient)]
public class OdfAppUpdatesService : BaseService<OdfAppUpdates>, IOdfAppUpdatesService
{
/// <summary>
/// 查询App 更新表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<OdfAppUpdatesDto> GetList(OdfAppUpdatesQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
//.OrderBy("IsActive desc")
.Where(predicate.ToExpression())
.ToPage<OdfAppUpdates, OdfAppUpdatesDto>(parm);
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public OdfAppUpdates GetInfo(int Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
/// <summary>
/// 添加App 更新表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public OdfAppUpdates AddOdfAppUpdates(OdfAppUpdates model)
{
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改App 更新表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateOdfAppUpdates(OdfAppUpdates model)
{
return Update(model, true);
}
/// <summary>
/// 批量更新所有激活状态为未激活
/// </summary>
/// <returns></returns>
public int UpdateAllActiveToInactive()
{
return Update(x => x.IsActive == true, x => new OdfAppUpdates { IsActive = false });
}
/// <summary>
/// 检查App版本是否需要更新
/// </summary>
/// <param name="currentVersion">当前App版本号</param>
/// <returns></returns>
public AppVersionCheckResponseDto CheckAppVersion(string currentVersion)
{
var response = new AppVersionCheckResponseDto
{
NeedUpdate = false,
ForceUpdate = false
};
// 获取当前启用的最新版本
var latestUpdate = Queryable()
.Where(x => x.IsActive == true)
.OrderByDescending(x => x.VersionCode)
.First();
if (latestUpdate == null)
{
return response; // 没有启用的版本,不需要更新
}
// 将版本号转换为可比较的格式 (如: 1.0.1 -> 1001)
var currentVersionCode = ConvertVersionToCode(currentVersion);
var latestVersionCode = latestUpdate.VersionCode;
// 如果数据库中的版本号大于当前版本号,则需要更新
if (latestVersionCode > currentVersionCode)
{
response.NeedUpdate = true;
response.LatestVersion = latestVersionCode.ToString();
response.DownloadUrl = latestUpdate.DownloadUrl;
response.ForceUpdate = latestUpdate.UpdateType == "1"; // 假设UpdateType为"force"表示强制更新
response.UpdateDescription = $"发现新版本 {response.LatestVersion},请及时更新";
}
return response;
}
/// <summary>
/// 将版本号字符串转换为数字代码 (如: 1.0.1 -> 1001)
/// </summary>
/// <param name="version">版本号字符串</param>
/// <returns></returns>
private int ConvertVersionToCode(string version)
{
if (string.IsNullOrEmpty(version))
return 0;
var newCode = version.Replace(".", "");
if (int.TryParse(newCode, out int result))
{
return result;
}
return 100;
//var parts = version.Split('.');
//var code = 0;
//var multiplier = 100; // 支持到百位
//foreach (var part in parts)
//{
// if (int.TryParse(part, out int num))
// {
// code += num * multiplier;
// multiplier /= 100; // 每段占2位
// }
//}
//return code;
}
/// <summary>
/// 将数字代码转换为版本号字符串 (如: 1001 -> 1.0.1)
/// </summary>
/// <param name="code">数字代码</param>
/// <returns></returns>
private string ConvertCodeToVersion(int code)
{
var major = code / 10000;
var minor = (code % 10000) / 100;
var patch = code % 100;
return $"{major}.{minor}.{patch}";
}
/// <summary>
/// 查询导出表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<OdfAppUpdates> QueryExp(OdfAppUpdatesQueryDto parm)
{
var predicate = Expressionable.Create<OdfAppUpdates>();
predicate = predicate.AndIF(parm.VersionCode != null, it => it.VersionCode == parm.VersionCode);
return predicate;
}
}
}