public ResponseModel CheckFile(HttpFile file, string manageHospital, int hospitalId) { if (FileControlCenter.Instance.IsMaintain) { return(ResponseModel.FailModel("管理员正在维护版本,请稍后上传")); } var model = VersionBll.GetModelById(ConstFile.BASEMODELID); if (model == null) { return(ResponseModel.FailModel("服务端没有配置过模板文件,请联系管理员")); } if (manageHospital != ConstFile.ALL && !manageHospital.Split(',').Contains(hospitalId.ToString())) { return(ResponseModel.FailModel("警告:请勿上传不属于你管理医院的压缩包")); } var hospitalModel = HospitalBll.GetDataById(hospitalId); if (hospitalModel == null) { return(ResponseModel.FailModel($"请先在网站创建医院ID为{hospitalId}的记录,看规则")); } if (FileControlCenter.Instance.RuningHospitalIDs.Contains(hospitalId)) { return(ResponseModel.FailModel("该医院当前其他人员在操作,请稍后")); } var tempDirectoryPath = Path.Combine(ConstFile.TempPath, DateTime.Now.ToString("yyyyMMddHHmmssffff")); var zipPath = Path.Combine(tempDirectoryPath, Guid.NewGuid() + file.Name.Substring(file.Name.LastIndexOf("."))); var saveRes = SaveFile(file, zipPath); if (!saveRes.Success) { return(saveRes); } return(new UploadPackageResponseModel { Success = true, FilePath = zipPath }); }
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); }