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
{
///
/// App 更新表Service业务层处理
///
[AppService(ServiceType = typeof(IOdfAppUpdatesService), ServiceLifetime = LifeTime.Transient)]
public class OdfAppUpdatesService : BaseService, IOdfAppUpdatesService
{
///
/// 查询App 更新表列表
///
///
///
public PagedInfo GetList(OdfAppUpdatesQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
//.OrderBy("IsActive desc")
.Where(predicate.ToExpression())
.ToPage(parm);
return response;
}
///
/// 获取详情
///
///
///
public OdfAppUpdates GetInfo(int Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
///
/// 添加App 更新表
///
///
///
public OdfAppUpdates AddOdfAppUpdates(OdfAppUpdates model)
{
return Insertable(model).ExecuteReturnEntity();
}
///
/// 修改App 更新表
///
///
///
public int UpdateOdfAppUpdates(OdfAppUpdates model)
{
return Update(model, true);
}
///
/// 批量更新所有激活状态为未激活
///
///
public int UpdateAllActiveToInactive()
{
return Update(x => x.IsActive == true, x => new OdfAppUpdates { IsActive = false });
}
///
/// 检查App版本是否需要更新
///
/// 当前App版本号
///
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;
}
///
/// 将版本号字符串转换为数字代码 (如: 1.0.1 -> 1001)
///
/// 版本号字符串
///
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;
}
///
/// 将数字代码转换为版本号字符串 (如: 1001 -> 1.0.1)
///
/// 数字代码
///
private string ConvertCodeToVersion(int code)
{
var major = code / 10000;
var minor = (code % 10000) / 100;
var patch = code % 100;
return $"{major}.{minor}.{patch}";
}
///
/// 查询导出表达式
///
///
///
private static Expressionable QueryExp(OdfAppUpdatesQueryDto parm)
{
var predicate = Expressionable.Create();
predicate = predicate.AndIF(parm.VersionCode != null, it => it.VersionCode == parm.VersionCode);
return predicate;
}
}
}