176 lines
5.6 KiB
C#
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;
|
|
}
|
|
}
|
|
} |