Selaa lähdekoodia

mxg:修改下载文件提示md5不一致提示。

mengxiangge 6 vuotta sitten
vanhempi
commit
995f96cdd1

+ 26 - 0
MBI/SAGA.DotNetUtils/Encrypt/MD5Tools.cs

@@ -48,5 +48,31 @@ namespace SAGA.DotNetUtils.Encrypt
             }
             return null;
         }
+        /// <summary>
+        /// 获取一个文件的MD5值,使用Base64格式编码
+        /// </summary>
+        /// <param name="fileName"></param>
+        /// <returns></returns>
+        public static string GetMD5HashFromFileByBase64(string fileName)
+        {
+            try
+            {
+                if (!File.Exists(fileName))
+                    return null;
+                FileStream file = new FileStream(fileName, FileMode.Open);
+                System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
+                byte[] retVal = md5.ComputeHash(file);
+                file.Close();
+
+                var sb=Convert.ToBase64String(retVal);
+                return sb.ToString();
+            }
+            catch (Exception ex)
+            {//"GetMD5HashFromFile() fail,error:" + 
+                //MessageShowBase.Show(ex);
+                MessageShowBase.Infomation($"{fileName}\r\n已打开,请关闭后重试!\r\n获取MD5值失败!");
+            }
+            return null;
+        }
     }
 }

+ 2 - 2
MBI/SAGA.DotNetUtils/FileOperate/FileStreamOperate.cs

@@ -81,8 +81,8 @@ namespace SAGA.DotNetUtils.FileOperate
                 {
                     Directory.CreateDirectory(directoryName);
                 }
-
-                pFileStream = new System.IO.FileStream(fileName, FileMode.OpenOrCreate);
+                //CreateOrOpen如果存在Md5值可能不一致
+                pFileStream = new System.IO.FileStream(fileName, FileMode.Create);
 
                 pFileStream.Write(pReadByte, 0, pReadByte.Length);
             }

+ 27 - 23
MBI/SAGA.MBI/DataArrange/DalUploadFloor.cs

@@ -56,7 +56,7 @@ namespace SAGA.MBI.DataArrange
         public static bool BeginDownLoadFile()
         {
             List<Tuple<string, int, string>> tuples = DalVisionOperate.GetNeedDownLoadFiles();
-            int i = 0,j = 0;
+            int i = 0, j = 0;
             int count = tuples.Count;
             foreach (var tuple in tuples)
             {
@@ -224,17 +224,19 @@ namespace SAGA.MBI.DataArrange
         /// </summary>
         public static VMUploadModeManage PrepareUploadFloors()
         {
-            VMUploadModeManage vm = new VMUploadModeManage();
-            //获取有模型文件的楼层
-            var allFloors = GetHasFileFloors();
-            //获取MD5改变的文件
-            var modifyFloors = new ObservableCollection<UploadFloor>(allFloors
-                .Where(t => DalVisionOperate.IsFileChanged(t.MFloor.FullPath, t.MFloor.ToString())).ToList());
-            //获取所有的拓扑图类型
-            var topologyGriphs = GetAllTopologyGriphs();
             string currentFloor = string.Empty;
             try
             {
+                VMUploadModeManage vm = new VMUploadModeManage();
+                //获取有模型文件的楼层
+                var allFloors = GetHasFileFloors();
+                //获取MD5改变的文件
+                var modifyFloors = new ObservableCollection<UploadFloor>(allFloors
+                    .Where(t => DalVisionOperate.IsFileChanged(t.MFloor.FullPath, t.MFloor.ToString())).ToList());
+                //获取所有的拓扑图类型
+                var topologyGriphs = GetAllTopologyGriphs();
+
+
                 foreach (UploadFloor uploadFloor in modifyFloors)
                 {
                     if (uploadFloor == null) continue;
@@ -250,17 +252,19 @@ namespace SAGA.MBI.DataArrange
                         MBIModelInfoManager.SyncPlatformToRevit(document);
                         #endregion
 
+                        #region 跟据日志整理跟要上传的数据
                         //检测有日志文件,才上传
                         var logs = DalLogOperate.GetLogs(uploadFloor.MFloor.Id);
                         if (!logs.Any()) continue;
                         uploadFloor.CalcContext = DalCommon.DownLoadCouldData(uploadFloor.MFloor);
+                        CalcContext context = uploadFloor.CalcContext;
+
                         //按id分组后的日志
                         var floorLogsGroupByBimId = logs.GroupBy(t => t.Id);
                         //所有的拓扑图类型
                         var tempGriphs = new List<MTopologyGriph>(topologyGriphs);
                         foreach (IGrouping<string, DocumentChangedLogMode> logGroup in floorLogsGroupByBimId)
                         {
-                            CalcContext context = uploadFloor.CalcContext;
                             DocumentChangedLogMode log = logGroup.FirstOrDefault();
                             if (log == null) continue;
                             var bimId = CommonTool.GetCloudBIMId(log.DocName, log.Id);
@@ -282,7 +286,6 @@ namespace SAGA.MBI.DataArrange
                                     OperateDelSaveDutyLog(mode);
                                     break;
                             }
-
                             #region 日志影响拓扑图
                             //日志影响拓扑图,影响则标记,从所有中移除
                             var useGriphs = new List<MTopologyGriph>(topologyGriphs);
@@ -298,16 +301,18 @@ namespace SAGA.MBI.DataArrange
                             tempGriphs.RemoveAll(t => useGriphs.Contains(t));
 
                             #endregion
-
-                            //处理设备所在空间
-                           // CheckEquipSpaceRlt(context);
-                            uploadFloor.IsUpload = true;
                         }
 
+
+                        #endregion
+
+                        //处理设备所在空间
+                        CheckEquipSpaceRlt(context);
+                        uploadFloor.IsUpload = true;
+
                     }
                     catch (Exception e)
                     {
-                        Console.WriteLine(e);
                         throw;
                     }
                     finally
@@ -317,14 +322,13 @@ namespace SAGA.MBI.DataArrange
                 }
                 vm.UploadFloors = modifyFloors;
                 vm.MTopologyGriphs = PrepareMTopologyGriphs(modifyFloors);
+                return vm;
             }
             catch (Exception e)
             {
                 MessageShow.Show(e, strMessage: $"楼层 { currentFloor ?? string.Empty} 打开异常或网络异常,请检查后再进行操作!\r\n");
-                vm = null;
+                return null;
             }
-
-            return vm;
         }
 
         /// <summary>
@@ -397,7 +401,7 @@ namespace SAGA.MBI.DataArrange
         {
             bool result = false;
 
-            if (tempmode.IsNullOrDefaultEquip())           
+            if (tempmode.IsNullOrDefaultEquip())
             {
                 //本地编码不可识别,删除服务器数据
                 //xls 新编码和旧编码一致,则不处理数据
@@ -410,14 +414,14 @@ namespace SAGA.MBI.DataArrange
                 else
                 {
                     mode.Operator = DocumentChangedOperator.Delete;
-                }             
+                }
             }
             else
             {
                 //如果设备族四位或六位改了,需要将岗位删除,重建岗位
                 //string code1 = EquipmentCodeMap.GetOriginCode(mode.EquipClassCode);
                 //(tempmode.EquipClassCode 这个的取法上上一个不一样
-               // string code2 = EquipmentCodeMap.GetOriginCode(tempmode.EquipClassCode);
+                // string code2 = EquipmentCodeMap.GetOriginCode(tempmode.EquipClassCode);
                 if (EquipmentCodeMap.GetOriginCode(mode.EquipClassCode) != EquipmentCodeMap.GetOriginCode(tempmode.EquipClassCode))
                 {
                     SetSavePropertyValue(tempmode, mode);
@@ -552,7 +556,7 @@ namespace SAGA.MBI.DataArrange
         {
             //if (mode.Operator == DocumentChangedOperator.None) return;
             var revitId = mode.BimID.GetBIMID();
-            if (revitId==0) return;
+            if (revitId == 0) return;
             var fi = context.RevitDoc.GetElement(revitId) as FamilyInstance;
             Autodesk.Revit.DB.Mechanical.Space space = fi?.GetReferenceSpace();
             if (space == null) return;

+ 3 - 2
MBI/SAGA.MBI/Extend/DocExtend.cs

@@ -5,6 +5,7 @@
  * ==============================================================================*/
 using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Linq;
 using System.Text;
 using System.Text.RegularExpressions;
@@ -33,6 +34,7 @@ namespace SAGA.MBI.Tools
         /// <returns></returns>
         public static bool CloseDoc(string path)
         {
+            if (path == null || !File.Exists(path)) return false;
             bool result = true;
             try
             {
@@ -77,8 +79,7 @@ namespace SAGA.MBI.Tools
         /// <returns></returns>
         public static bool CloseDoc(this Document doc)
         {
-            Element elem = null;
-            return CloseDoc(doc.PathName);
+            return CloseDoc(doc?.PathName);
         }
         /// <summary>
         /// 简单关闭模型不保存

+ 4 - 4
MBI/SAGA.MBI/RequestData/UpLoadFileRequest.cs

@@ -144,9 +144,9 @@ namespace SAGA.MBI.RequestData
 
                         #region 下载后Md5较验
 
-                        string md5 = MD5Tools.GetMD5HashFromFile(fullPath);
+                        string md5 = MD5Tools.GetMD5HashFromFileByBase64(fullPath);
                         //下载后的文件md5校验
-                        if (client.GetObjectMetadata(bucketName, key).ETag.ToUpper() != md5.ToUpper())
+                        if (client.GetObjectMetadata(bucketName, key).ContentMd5 != md5)
                         {
 
                            string errorMessage=($"楼层 {floorName} MD5校验失败,本地与服务器不一致!");
@@ -387,9 +387,9 @@ namespace SAGA.MBI.RequestData
 
                     #region 上传后MD5较验
 
-                    string md5 = MD5Tools.GetMD5HashFromFile(filePath);
+                    string md5 = MD5Tools.GetMD5HashFromFileByBase64(filePath);
                     //上传后的文件md5校验
-                    if (client.GetObjectMetadata(bucketName, key).ETag.ToUpper() != md5.ToUpper())
+                    if (client.GetObjectMetadata(bucketName, key).ContentMd5 != md5)
                     {
                         string errorMessage = ($"楼层 {floorName} MD5校验失败,本地与服务器不一致!");
                         MailLog.Log("上传MD5异常", errorMessage);

+ 25 - 11
MBI/SAGA.MBI/WinView/Upload/VMUploadModeManage.cs

@@ -113,7 +113,9 @@ namespace SAGA.MBI.WinView.Upload
                     {
                         var upfloors = UploadFloors.Where(t =>
                             t.IsUpload && t.MFloor.FloorLock.LockState == MFloorLockState.LockBySelf).ToList();
-                        int i = 0, count = upfloors.Count();
+                        int i = 0, count = upfloors.Count(), j = 0;
+                        List<string> successList = new List<string>();
+                        List<string> failList = UploadFloors.Select(t => t.FloorName).ToList();
                         foreach (var ufloor in upfloors)
                         {
                             try
@@ -121,18 +123,12 @@ namespace SAGA.MBI.WinView.Upload
                                 i++;
                                 CalcContext context = ufloor.CalcContext;
 
-                                Log4Net.Debug($"开始上传楼层 {ufloor.MFloor} 数据");
                                 if (context == null || !context.Upload())
                                 {
                                     continue;
                                 }
-                                Log4Net.Debug($"结束上传楼层 {ufloor.MFloor} 数据");
-                                Log4Net.Debug($"开始上传楼层 {ufloor.MFloor} 模型文件");
                                 if (FloorFileOperate.UploadFile(ufloor.MFloor.ToString(), ufloor.MFloor.FullPath, count, i))
                                 {
-                                    Log4Net.Debug($"结束上传楼层 {ufloor.MFloor} 模型文件");
-
-                                    Log4Net.Debug($"开始楼层 {ufloor.MFloor} 后序操作");
                                     //请除Duty和BIMID的关系
                                     MBIAssistHelper.DeleteFloorRelation(ufloor.MFloor.Id);
                                     //解锁
@@ -141,8 +137,9 @@ namespace SAGA.MBI.WinView.Upload
                                     ProjectLogManager.ClearFiles(ufloor.MFloor.Id);
                                     //删除备份文件
                                     FloorFileOperate.Del000BakFile(ufloor.MFloor.FullPath);
-
-                                    Log4Net.Debug($"结束楼层 {ufloor.MFloor} 后序操作");
+                                    //上传完日志反馈
+                                    successList.Add(ufloor.FloorName);
+                                    failList.Remove(ufloor.FloorName);
                                 }
                             }
                             catch (Exception e)
@@ -156,8 +153,25 @@ namespace SAGA.MBI.WinView.Upload
                         MBIModelInfoUpload.UpdateMbiInfo(upfloors.Select(f => f.CalcContext).ToList());
                         Log4Net.Debug($"结束楼层底图上传");
                         #endregion
+
+                        #region 上传完成添加提示信息
                         //添加提示窗口
-                        UpLoadFileRequest.CloseUploadWindow(true, true);
+                        UpLoadFileRequest.CloseUploadWindow(failList.Count == 0, false);
+                        string tip = "";
+                        if (successList.Count > 0)
+                        {
+                            tip = $"楼层{string.Join(",", successList)}上传成功!\r\n";
+                        }
+
+                        if (failList.Count > 0)
+                        {
+                            tip += $"楼层{string.Join(",", failList)}上传失败!请重新上传。";
+                        }
+
+                        MessageShow.Infomation(tip);
+
+                        #endregion
+
 
                         mainWin.Close();
 
@@ -178,7 +192,7 @@ namespace SAGA.MBI.WinView.Upload
             {
                 MessageShow.Show(e);
             }
-            
+
         }
         public bool CanUpload(object param)
         {