public WelcomeModule() { #region LoginRemote Get["/"] = _ => { return(View["Login"]); }; Get["Login"] = _ => { //生成CSRF token. this.CreateNewCsrfToken(); return(View["Login"]); }; Post["Login"] = p => { //CSRF token 检验 this.ValidateCsrfToken(); var loginModel = this.Bind <LoginModel>(); var model = LoginBll.Verify(UserBll.GetData(), loginModel.Username, loginModel.Password); if (model != null && !string.IsNullOrEmpty(model.RoleName)) { var role = RoleBll.GetDataByName(model.RoleName); if (role != null && role.Status != "0") { Guid guid = Guid.NewGuid(); //注意 nancy的session实际用的是cookie,所以最大4K字节 Context.Request.Session[guid.ToString()] = model; return(this.LoginAndRedirect(guid, fallbackRedirectUrl: "/index")); } } return(View["Login", "false"]); }; Get["LoginOut"] = _ => { Session.DeleteAll(); return(this.LogoutAndRedirect("~/")); }; #endregion #region ClientUpdate Get["api/RequestNewestPackageUrl/{HopitalID}/{OldNumber}"] = p => { RequestNewestPackageUrlResponseModel res = ClientUpdateBll.RequestNewestPackageUrl(p.HopitalID, p.OldNumber); return(Response.AsJson(res)); }; Get["api/RequestNewestAutoupdater/{OldVersion}"] = p => { RequestNewestPackageUrlResponseModel res = ClientUpdateBll.RequestNewestAutoupdater(p.OldNumber); return(Response.AsJson(res)); }; #endregion }
private static void InitFilterData(dynamic hospitalId, RequestNewestPackageUrlResponseModel res) { List <VersionModel> versionModels = VersionBll.GetModelsByHospitalId(hospitalId); var versionModel = versionModels?.FirstOrDefault(p => p.Id == versionModels.Max(s => s.Id)); res.Data.DynamicCodeVersion = versionModel?.DynamicCodeVersion; res.Data.BlackList = versionModel?.BlackList; res.Data.ExistSoIgnoreList = versionModel?.ExistSoIgnoreList; res.Data.DynamicCode = versionModel?.DynamicCode; res.Data.Version = versionModel.Number; }
internal static RequestNewestPackageUrlResponseModel RequestNewestAutoupdater(dynamic oldVersion) { try { var res = new RequestNewestPackageUrlResponseModel(); var configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config", "ServerConfig.xml"); var config = FileUtil.XMLLoadData <ServerConfig>(configPath); FileInfo basefile = new DirectoryInfo(ConstFile.DownloadFilePath).GetFiles().FirstOrDefault(t => Path.GetFileNameWithoutExtension(t.Name) == "AutoUpdater"); if (basefile == null) { res.Success = false; res.Msg = "服务端未找到自动更新客户端压缩包"; return(res); } var filePath = Path.Combine(ConstFile.CONTENTFILEDIRECTORY, "DownLoad", basefile.Name); if (config.LastAutoudaterUpdateTime != basefile.LastWriteTime) { config.LastAutoudaterUpdateTime = basefile.LastWriteTime; config.AutoupdaterVersion = AddVersion(config.AutoupdaterVersion); FileUtil.XMLSaveData(config, configPath); } res.Success = true; res.Data = new NewestVersionModel { FilePath = filePath, Version = config.AutoupdaterVersion }; return(res); } catch (Exception ex) { return(new RequestNewestPackageUrlResponseModel { Success = false, Msg = ex.Message }); } }
internal static RequestNewestPackageUrlResponseModel RequestNewestPackageUrl(dynamic hospitalId, dynamic oldNumber) { var res = new RequestNewestPackageUrlResponseModel(); //黑名单,存在则忽略,动态代码 InitFilterData(hospitalId, res); if (MemoryCenter.Instance.NewestHospitalVersionDic.ContainsKey(hospitalId) && MemoryCenter.Instance.NewestHospitalVersionDic[hospitalId] == oldNumber) { res.Success = false; res.Msg = "已经是最新版本"; return(res); } var hosipitalModel = HospitalBll.GetDataById(hospitalId); if (hosipitalModel == null || string.IsNullOrEmpty(hosipitalModel?.NewestVersion)) { res.Success = false; res.Msg = "无当前医院版本信息"; return(res); } if (hosipitalModel?.NewestVersion == oldNumber) { MemoryCenter.Instance.NewestHospitalVersionDic[hospitalId] = hosipitalModel?.NewestVersion; res.Success = false; res.Msg = "已经是最新版本"; return(res); } try { var newestVersion = (HospitalBll.GetDataById(hospitalId))?.NewestVersion; var packageName = string.Format("{0}_{1}", oldNumber, newestVersion); var packageDirectoryPath = Path.Combine(ConstFile.DownloadFilePath, hospitalId, packageName); string packagePath = string.Format("{0}.7z", packageDirectoryPath); #region 判断最近一小时有没有打过包 if (File.Exists(packagePath))// && oldNumber != ConstFile.BASEVERSION { var fileInfo = new FileInfo(packagePath); if (ExecDateDiff(DateTime.Now, fileInfo.LastWriteTime) < 3600000) { res.Success = true; res.Msg = "最近一小时已经打过包,传回历史包"; res.Data.Version = newestVersion; res.Data.FilePath = packagePath.Replace(AppDomain.CurrentDomain.BaseDirectory, ""); return(res); } File.Delete(packagePath); } #endregion if (FileControlCenter.Instance.IsZipping) { res.Success = false; res.Msg = "当前医院正在打包,请稍后"; return(res); } FileControlCenter.Instance.IsZipping = true; if (!Directory.Exists(packageDirectoryPath)) { //如果是基版本的话,把整个文件压缩成压缩包传递过去 if (oldNumber == ConstFile.BASEVERSION) { CopyFolder(ConstFile.BaseModelFilePath, packageDirectoryPath); } else { Directory.CreateDirectory(packageDirectoryPath); } } List <VersionModel> versionList = VersionBll.GetModelsByHospitalId(hospitalId); var newestAllDllVersionDic = JsonConvert.DeserializeObject <Dictionary <string, string> >(versionList.FirstOrDefault(p => p.Number == newestVersion)?.AllDllVersion); var oldAllDllVersionDic = (oldNumber == ConstFile.BASEVERSION) ? JsonConvert.DeserializeObject <Dictionary <string, string> >(VersionBll.GetModelById(ConstFile.BASEMODELID).AllDllVersion) : JsonConvert.DeserializeObject <Dictionary <string, string> >(versionList.FirstOrDefault(p => p.Number == oldNumber)?.AllDllVersion); foreach (var item in newestAllDllVersionDic) { if (!oldAllDllVersionDic.Contains(item)) { //如果版本是2.0.0就去模板文件中拿,其他区仓库拿,copy到包目录。 var number = newestAllDllVersionDic[item.Key]; string rollBackSourceFilePath; if (number == ConstFile.BASEVERSION) { rollBackSourceFilePath = Path.Combine(ConstFile.BaseModelFilePath, item.Key); } else { var rollBackSourceFileName = $"{Path.GetFileNameWithoutExtension(item.Key)}-{number}{Path.GetExtension(item.Key)}"; rollBackSourceFilePath = Path.Combine(ConstFile.WareHousePath, hospitalId.ToString(), Path.GetDirectoryName(item.Key), rollBackSourceFileName); } var rollBackSourceFileInfo = new FileInfo(rollBackSourceFilePath); var destFilePath = Path.Combine(packageDirectoryPath, item.Key); if (!Directory.Exists(Path.GetDirectoryName(destFilePath))) { Directory.CreateDirectory(Path.GetDirectoryName(destFilePath)); } rollBackSourceFileInfo.CopyTo(destFilePath, true); } if (oldAllDllVersionDic.Keys.Contains(item.Key)) { oldAllDllVersionDic.Remove(item.Key); } } #region 取消删除功能 //需要删除的部分存到xml传送到客户端,让客户端去删除() //if (oldAllDLLVersionDic.Count > 0) //{ // var keyList = new List<string>(); // var deleteFileConfigPath = Path.Combine(packageDirectoryPath, "DeleteFileConfig.xml"); // foreach (var key in oldAllDLLVersionDic.Keys) // { // keyList.Add(key); // } // FileUtil.XMLSaveData<List<string>>(keyList, deleteFileConfigPath); //} #endregion //Nancy的下载文件只能放在Content静态文件夹里面才可以访问(不包含目录的压缩包,方便客户端直接解压替换) if (ZipHelper.Zip(packageDirectoryPath, Path.GetFileName(packagePath))) { res.Success = true; res.Data.Version = newestVersion; res.Data.FilePath = packagePath.Replace(AppDomain.CurrentDomain.BaseDirectory, ""); Directory.Delete(packageDirectoryPath, true); MemoryCenter.Instance.NewestHospitalVersionDic[hospitalId] = hosipitalModel?.NewestVersion; } else { res.Success = false; res.Msg = "服务端出错压缩失败"; } } catch (Exception ex) { res.Success = false; res.Msg = "服务端出错:" + ex.Message; } FileControlCenter.Instance.IsZipping = false; return(res); }
public WelcomeModule() { #region LoginRemote Get["/"] = _ => { return(View["Login"]); }; Get["Login"] = _ => { //生成CSRF token. this.CreateNewCsrfToken(); return(View["Login"]); }; Post["Login"] = p => { //CSRF token 检验 this.ValidateCsrfToken(); var loginModel = this.Bind <LoginModel>(); var model = LoginViewModel.Verify(UserManageViewModel.GetData(), loginModel.username, loginModel.password); if (model != null) { Guid guid = Guid.NewGuid(); Context.Request.Session[guid.ToString()] = model; return(this.LoginAndRedirect(guid, fallbackRedirectUrl: "/index")); } return(View["Login"]); }; Get["LoginOut"] = _ => { Session.DeleteAll(); return(this.LogoutAndRedirect("~/")); }; #endregion #region ClientUpdate Get["api/RequestNewestPackageUrl/{HopitalID}/{OldNumber}"] = p => { RequestNewestPackageUrlResponseModel res = ClientUpdateViewModel.RequestNewestPackageUrl(p.HopitalID, p.OldNumber); return(Response.AsJson <RequestNewestPackageUrlResponseModel>(res)); }; #endregion #region TEST Get["/down/{name}"] = _ => { string fileName = _.name; return(Response.AsFile(@"Content\uploads\123.txt")); }; Get["/show"] = _ => { var uploadDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Content", "uploads"); var folder = new DirectoryInfo(uploadDirectory); IList <string> files = new List <string>(); foreach (var file in folder.GetFiles()) { files.Add(file.Name); } return(View["Show", files]); }; #endregion }
internal static RequestNewestPackageUrlResponseModel RequestNewestPackageUrl(dynamic hospitalID, dynamic oldNumber) { var res = new RequestNewestPackageUrlResponseModel(); var model = SQLiteHelper.HospitalQuery(hospitalID)?[0]; if (model?.NewestVersion == oldNumber) { res.Success = false; res.Msg = "已经是最新版本"; res.Data = null; return(res); } try { var newestVersion = (SQLiteHelper.HospitalQuery(hospitalID)?[0])?.NewestVersion; #region 判断最近一小时有没有打过包 var packageName = string.Format("{0}_{1}", oldNumber, newestVersion); var packageDirectoryPath = Path.Combine(downLoadDiretory, hospitalID, packageName); string packagePath = string.Format("{0}.7z", packageDirectoryPath); if (File.Exists(packagePath)) { var fileInfo = new FileInfo(packagePath); if (ExecDateDiff(DateTime.Now, fileInfo.LastWriteTime) < 3600000) { res.Success = true; res.Msg = "最近一小时已经打过包,传回历史包"; res.Data.Version = newestVersion; res.Data.FilePath = packagePath.Replace(AppDomain.CurrentDomain.BaseDirectory, ""); return(res); } File.Delete(packagePath); } #endregion if (!Directory.Exists(packageDirectoryPath)) { Directory.CreateDirectory(packageDirectoryPath); } List <VersionModel> versionList = SQLiteHelper.VersionQuery(1000, hospitalID); var newestAllDLLVersionDic = JsonConvert.DeserializeObject <Dictionary <string, string> >(versionList.FirstOrDefault(p => p.Number == newestVersion)?.AllDLLVersion); var oldAllDLLVersionDic = (oldNumber == ConstFile.BASEVERSION)? JsonConvert.DeserializeObject <Dictionary <string, string> >(SQLiteHelper.VersionQuery("BaseModel")[0].AllDLLVersion): JsonConvert.DeserializeObject <Dictionary <string, string> >(versionList.FirstOrDefault(p => p.Number == oldNumber)?.AllDLLVersion); foreach (var item in newestAllDLLVersionDic) { if (!oldAllDLLVersionDic.Contains(item)) { //如果版本是2.0.0就去模板文件中拿,其他区仓库拿,copy到包目录。 var number = newestAllDLLVersionDic[item.Key]; var rollBackSourceFilePath = string.Empty; if (number == ConstFile.BASEVERSION) { rollBackSourceFilePath = Path.Combine(ConstFile.BaseFilePath, item.Key); } else { var rollBackSourceFileName = string.Format("{0}-{1}{2}", Path.GetFileNameWithoutExtension(item.Key), number, Path.GetExtension(item.Key)); rollBackSourceFilePath = Path.Combine(ConstFile.WareHousePath, hospitalID.ToString(), Path.GetDirectoryName(item.Key), rollBackSourceFileName); } var rollBackSourceFileInfo = new FileInfo(rollBackSourceFilePath); var destFilePath = Path.Combine(packageDirectoryPath, item.Key); if (!Directory.Exists(Path.GetDirectoryName(destFilePath))) { Directory.CreateDirectory(Path.GetDirectoryName(destFilePath)); } rollBackSourceFileInfo.CopyTo(destFilePath, true); } if (oldAllDLLVersionDic.Keys.Contains(item.Key)) { oldAllDLLVersionDic.Remove(item.Key); } } //需要删除的部分存到xml传送到客户端,让客户端去删除 if (oldAllDLLVersionDic.Count > 0) { var keyList = new List <string>(); var deleteFileConfigPath = Path.Combine(packageDirectoryPath, "DeleteFileConfig.xml"); foreach (var key in oldAllDLLVersionDic.Keys) { keyList.Add(key); } FileUtil.XMLSaveData <List <string> >(keyList, deleteFileConfigPath); } //Nancy的下载文件只能放在Content静态文件夹里面才可以访问(不包含目录的压缩包,方便客户端直接解压替换) var zipDllPathList = new ArrayList(); var packageDirectoryInfo = new DirectoryInfo(packageDirectoryPath); foreach (var item in packageDirectoryInfo.GetDirectories()) { zipDllPathList.Add(item.FullName); } foreach (var item in packageDirectoryInfo.GetFiles()) { zipDllPathList.Add(item.FullName); } if (ZipHelper.ZipFileMore(zipDllPathList, packagePath)) { res.Success = true; res.Data.Version = newestVersion; res.Data.FilePath = packagePath.Replace(AppDomain.CurrentDomain.BaseDirectory, ""); Directory.Delete(packageDirectoryPath, true); } else { res.Success = false; res.Msg = "服务端出错压缩失败"; } } catch (Exception ex) { res.Success = false; res.Msg = "服务端出错:" + ex.Message; } return(res); }