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; } } }