xulisong 6 роки тому
батько
коміт
b23ce9b34e

+ 1 - 0
MBI/SAGA.DotNetUtils/SAGA.DotNetUtils.csproj

@@ -385,6 +385,7 @@
     <Compile Include="Utilities\IWaitingView.cs" />
     <Compile Include="Utilities\PinyinUtil.cs" />
     <Compile Include="Utilities\SharpZip.cs" />
+    <Compile Include="Utilities\SmtpMailUtil.cs" />
     <Compile Include="Utilities\TimeUtil.cs" />
     <Compile Include="WinForms\EditorItemValueChangedEventArgs.cs" />
     <Compile Include="WinForms\EditorValueChangedEventArgs.cs" />

+ 103 - 0
MBI/SAGA.DotNetUtils/Utilities/SmtpMailUtil.cs

@@ -0,0 +1,103 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:SmtpMailUtil
+ * 作者:xulisong
+ * 创建时间: 2019/3/20 14:55:01
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Net.Mail;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SAGA.DotNetUtils.Utilities
+{
+    public class SmtpMailOptions
+    {
+        public SmtpMailOptions()
+        {
+            Host = "smtp.163.com";
+            UserName = "sagaproblem@163.com";
+            Password = "saga123";
+        }
+        public string Host { get; set; }
+        public string UserName { get; set; }
+        public string Password { get; set; }
+    }
+    public class SmtpMailUtil
+    {
+        /// <summary>
+        /// 邮箱相关设置
+        /// </summary>
+        private static SmtpMailOptions MailOptions { get; set; }
+
+        static SmtpMailUtil()
+        {
+            MailOptions = new SmtpMailOptions();
+        }
+        /// <summary>
+        /// 是否已经初始化
+        /// </summary>
+        public static bool IsInited { get; private set; }
+        public static void InitSmtpMail(SmtpMailOptions options)
+        {
+            MailOptions = options;
+            IsInited = true;
+        }
+
+        public static SmtpClient CreateSmtpClient()
+        {
+            #region 服务器相关描述
+            //使用163的SMTP服务器发送邮件
+            ////163的SMTP服务器需要用163邮箱的用户名和smtp授权码作认证,如果没有需要去163申请个,
+            ///这里需要注意,163似乎有规定发信人的邮箱地址必须是163的,而且发信人的邮箱用户名必须和上面SMTP服务器认证时的用户名相同
+            //因为上面用的用户名abc作SMTP服务器认证,所以这里发信人的邮箱地址也应该写为abc@163.com
+            #endregion
+            SmtpClient client = new SmtpClient();
+            client.Host = MailOptions.Host;
+            client.UseDefaultCredentials = true;
+            client.DeliveryMethod = SmtpDeliveryMethod.Network;
+            client.Credentials = new System.Net.NetworkCredential(MailOptions.UserName, MailOptions.Password);
+            return client;
+        }
+
+        public static void Send(SmtpClient client, MailMessage mainMessage)
+        {
+            try
+            {
+                client.Send(mainMessage);
+            }
+            catch (Exception ex)
+            {
+                string message = DateTime.Now + " ;Source:" + ex.Source + " ;HelpLink:" + ex.HelpLink +
+                                 " ;Message:" + ex.Message;
+                var name = System.Diagnostics.Process.GetCurrentProcess().MainModule.ModuleName;
+                string temp =Path.Combine(Environment.GetEnvironmentVariable("TEMP"), name,"Mail.txt");
+                var dir = Directory.GetParent(temp);
+                if (!dir.Exists)
+                {
+                    dir.Create();
+                }
+                File.AppendAllText(temp,message);
+            }
+        }
+        public static void Send(string target, string subject, string bodyContent)
+        {
+            SmtpClient client = CreateSmtpClient();
+           MailMessage message = new MailMessage();
+            message.From = new MailAddress(MailOptions.UserName);
+            message.To.Add(target);//将邮件发送给Gmail
+   
+            message.Subject = subject;
+            message.Body = bodyContent;
+            message.SubjectEncoding = Encoding.UTF8;
+            message.BodyEncoding = Encoding.UTF8;
+            message.Priority = MailPriority.High;
+            message.IsBodyHtml = true;  //可以为html
+            Send(client, message);
+        }
+    }
+}

+ 81 - 0
MBI/SAGA.MBI/Common/EquipmentCodeMap.cs

@@ -0,0 +1,81 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:EquipmentCodeMap
+ * 作者:xulisong
+ * 创建时间: 2019/3/22 9:11:56
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Serialization;
+using SAGA.DotNetUtils.Serializer;
+
+namespace SAGA.MBI.Common
+{
+    public class EquipmentCodeMap
+    {
+        private const string FileName = "GroupEquipmentCodes.xml";
+        public static void Init()
+        {
+            var groups = new List<GroupCodes>();
+            groups.Add(new GroupCodes(new List<string>() {"CAD1", "CAD2"}));
+            groups.Add(new GroupCodes(new List<string>() { "BAD1", "BAD2" }));
+            string path = MBIConst.MBIDataDictionaryPath;
+            string fileName = FileName;
+            SerializerByXml.SerializeAndSave(path, fileName, groups);
+        }
+        // [CacheAspect]
+        private static Dictionary<string, string> m_CacheData;
+        public static Dictionary<string,string> Read()
+        {
+            if (m_CacheData != null)
+                return m_CacheData;
+            Dictionary<string, string> result = new Dictionary<string, string>();
+            string path =  MBIConst.MBIDataDictionaryPath;
+            string fileName = FileName;
+            List<GroupCodes> groupCodes = SerializerByXml.DeserializeList<GroupCodes>(path, fileName);
+            for (int i = 0; i < groupCodes.Count; i++)
+            {
+                foreach (var groupCode in groupCodes[i])
+                {
+                    result[groupCode] = (i+1).ToString();
+                }
+            }
+            return m_CacheData=result; 
+        }
+        /// <summary>
+        /// 获取设备族编号,如果有分组信息的话获取分组信息,没有分组信息的话,返回输入值
+        /// </summary>
+        /// <param name="equipmentCode"></param>
+        /// <returns></returns>
+        public static string GetOriginCode(string equipmentCode)
+        {
+            if (equipmentCode == null)
+                return equipmentCode;
+            var dic = Read();
+            if (dic != null && dic.TryGetValue(equipmentCode, out string originCode))           
+            {
+                return originCode;
+            }
+            return equipmentCode;
+        }
+    }
+
+    /// <summary>
+    /// 数据分组信息
+    /// </summary>
+    [XmlType(TypeName = "GroupCodes")]
+    public class GroupCodes : List<string>
+    {
+        public GroupCodes()
+        { }
+
+        public GroupCodes(IEnumerable<string> source):base(source)
+        {
+
+        }
+    }
+}

+ 38 - 0
MBI/SAGA.MBI/Common/MailLog.cs

@@ -0,0 +1,38 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:MailLog
+ * 作者:xulisong
+ * 创建时间: 2019/3/22 8:44:09
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SAGA.DotNetUtils.Utilities;
+
+namespace SAGA.MBI.Common
+{
+    public class MailLog
+    {
+        private const string m_UseMail = "sagaproblem@163.com";
+        public static void Log(string title,string info)
+        {
+            StringBuilder builder = new StringBuilder();
+            builder.AppendLine(DateTime.Now.ToLongTimeString());
+            builder.AppendLine(BuildProjectInfo());
+            builder.Append(info);
+           SmtpMailUtil.Send(m_UseMail, title, builder.ToString());
+        }
+
+        public static string BuildProjectInfo()
+        {
+            StringBuilder message = new StringBuilder();
+            message.AppendFormat("项目:{0};用户:{1}", MBIControl.ProjectCur.Name,
+                MBIControl.ManageInfo.Phone_Num);
+            message.AppendLine();
+            return message.ToString();
+        }
+    }
+}

+ 1 - 1
MBI/SAGA.MBI/DataArrange/DalCommon.cs

@@ -97,6 +97,7 @@ namespace SAGA.MBI.DataArrange
                     else
                     {
                         string familyCode = fi.GetFamilyCode();
+                        equipment.RevitCode = familyCode;
                         //Code的位数为4,判定为设备,6位是部件
                         if (familyCode.IsNotNullEmptyExt())
                         {
@@ -112,7 +113,6 @@ namespace SAGA.MBI.DataArrange
                     }
                 }
             }
-
             return equipment;
         }
         /// <summary>

+ 17 - 4
MBI/SAGA.MBI/DataArrange/DalUploadFloor.cs

@@ -300,7 +300,7 @@ namespace SAGA.MBI.DataArrange
                             #endregion
 
                             //处理设备所在空间
-                            CheckEquipSpaceRlt(context);
+                           // CheckEquipSpaceRlt(context);
                             uploadFloor.IsUpload = true;
                         }
 
@@ -397,15 +397,28 @@ namespace SAGA.MBI.DataArrange
         {
             bool result = false;
 
-            if (tempmode.IsNullOrDefaultEquip())
+            if (tempmode.IsNullOrDefaultEquip())           
             {
                 //本地编码不可识别,删除服务器数据
-                mode.Operator = DocumentChangedOperator.Delete;
+                //xls 新编码和旧编码一致,则不处理数据
+                string code1 = EquipmentCodeMap.GetOriginCode(mode.EquipClassCode);
+                string code2 = EquipmentCodeMap.GetOriginCode(tempmode.RevitCode);
+                if (EquipmentCodeMap.GetOriginCode(mode.EquipClassCode) == EquipmentCodeMap.GetOriginCode(tempmode.RevitCode))
+                {
+                    mode.Operator = DocumentChangedOperator.Modified;
+                }
+                else
+                {
+                    mode.Operator = DocumentChangedOperator.Delete;
+                }             
             }
             else
             {
                 //如果设备族四位或六位改了,需要将岗位删除,重建岗位
-                if (mode.EquipClassCode != tempmode.EquipClassCode)
+                //string code1 = EquipmentCodeMap.GetOriginCode(mode.EquipClassCode);
+                //(tempmode.EquipClassCode 这个的取法上上一个不一样
+               // string code2 = EquipmentCodeMap.GetOriginCode(tempmode.EquipClassCode);
+                if (EquipmentCodeMap.GetOriginCode(mode.EquipClassCode) != EquipmentCodeMap.GetOriginCode(tempmode.EquipClassCode))
                 {
                     SetSavePropertyValue(tempmode, mode);
                     mode.Operator = DocumentChangedOperator.Delete;

+ 10 - 5
MBI/SAGA.MBI/JsonConvert/CmbDataSourceConvert.cs

@@ -6,6 +6,7 @@
 
 using System.Collections.Generic;
 using System.ComponentModel;
+using System.IO;
 using System.Linq;
 using System.Reflection;
 using Newtonsoft.Json.Linq;
@@ -36,9 +37,11 @@ namespace SAGA.MBI.JsonConvert
             List<ProvinceInfo> list = new List<ProvinceInfo>();
             string json = CmbDataSourceRequest.GeographyDic();
             if (!json.IsSuccessRequest()) return list;
-
             JObject jObject = JObject.Parse(json);
-            foreach (KeyValuePair<string, JToken> keyValuePair in (JObject)jObject["Content"])
+            JObject useObject = (JObject) jObject["Content"];
+            //测试代码
+            //useObject = JObject.Parse(File.ReadAllText(@"C: \Users\sagacloud\Desktop\Geography.json"));
+            foreach (KeyValuePair<string, JToken> keyValuePair in useObject)
             {
                 foreach (JObject provinceJObject in (JArray)keyValuePair.Value)
                 {
@@ -51,8 +54,9 @@ namespace SAGA.MBI.JsonConvert
                             provinceInfo.ProvinceName = (string)provinceJObject["provinceName"];
                             provinceInfo.Code = (string)provinceJObject["provinceInfo"][0]["code"];
                             provinceInfo.Name = (string)provinceJObject["provinceInfo"][0]["name"];
-                            provinceInfo.LocalCode = (string)provinceJObject["provinceInfo"][1]["code"];
-                            provinceInfo.LocalName = (string)provinceJObject["provinceInfo"][1]["name"];
+                            //修改成0
+                            provinceInfo.LocalCode = (string)provinceJObject["provinceInfo"][0]["code"];
+                            provinceInfo.LocalName = (string)provinceJObject["provinceInfo"][0]["name"];
                             foreach (var cityJObject in provinceJObject["cities"])
                             {
                                 CityInfo cityInfo = new CityInfo();
@@ -63,7 +67,8 @@ namespace SAGA.MBI.JsonConvert
                                 cityInfo.Code = (string)cityJObject["cityInfo"][0]["code"];
                                 cityInfo.Name = (string)cityJObject["cityInfo"][0]["name"];
                                 cityInfo.CityInfoI = GetDistrictInfo((JObject)cityJObject["cityInfo"][0]);
-                                cityInfo.CityLocalInfoI = GetDistrictInfo((JObject)cityJObject["cityInfo"][1]);
+                                //修改成0
+                                cityInfo.CityLocalInfoI = GetDistrictInfo((JObject)cityJObject["cityInfo"][0]);
                                 provinceInfo.Cities.Add(cityInfo);
                                 foreach (JObject districtJObject in cityJObject["district"])
                                 {

+ 1 - 1
MBI/SAGA.MBI/Model/MEquipment.cs

@@ -45,7 +45,7 @@ namespace SAGA.MBI.Model
             this.BimID = bimMId;
             ServirceImages = new ObservableCollection<MServiceAttachment>();
         }
-
+      
 
         #region CloudProperty
 

+ 7 - 0
MBI/SAGA.MBI/Model/MRevitEquipBase.cs

@@ -32,6 +32,13 @@ namespace SAGA.MBI.Model
     /// </summary>
     public class MRevitEquipBase : CloudDataBase
     {
+        #region 附加参数 xls
+        /// <summary>
+        /// revit族信息获取的编码
+        /// </summary>
+        public string RevitCode { get; set; }
+        #endregion
+
         #region ModefileDelProperty
 
         private bool m_HasFM;

+ 8 - 2
MBI/SAGA.MBI/RequestData/UpLoadFileRequest.cs

@@ -9,6 +9,7 @@ using System.Diagnostics;
 using System.IO;
 using System.Linq;
 using System.Net;
+using System.Text;
 using System.Windows;
 using SAGA.MBI.Common;
 using Utilities;
@@ -147,7 +148,10 @@ namespace SAGA.MBI.RequestData
                         //下载后的文件md5校验
                         if (client.GetObjectMetadata(bucketName, key).ETag.ToUpper() != md5.ToUpper())
                         {
-                            throw new Exception($"楼层 {floorName} MD5校验失败,本地与服务器不一致!");
+
+                           string errorMessage=($"楼层 {floorName} MD5校验失败,本地与服务器不一致!");
+                            MailLog.Log("下载MD5异常", errorMessage);
+                            throw new Exception(errorMessage);
                         }
 
                         #endregion
@@ -385,7 +389,9 @@ namespace SAGA.MBI.RequestData
                     //上传后的文件md5校验
                     if (client.GetObjectMetadata(bucketName, key).ETag.ToUpper() != md5.ToUpper())
                     {
-                        throw new Exception($"楼层 {floorName} MD5校验失败,本地与服务器不一致!");
+                        string errorMessage = ($"楼层 {floorName} MD5校验失败,本地与服务器不一致!");
+                        MailLog.Log("上传MD5异常", errorMessage);
+                        throw new Exception(errorMessage);
                     }
 
                     #endregion

+ 2 - 0
MBI/SAGA.MBI/SAGA.MBI.csproj

@@ -291,6 +291,8 @@
     <Compile Include="CmbData\BuildingCmbVm.cs" />
     <Compile Include="CmbData\ProvinceCityVm.cs" />
     <Compile Include="Common\CacheAspect.cs" />
+    <Compile Include="Common\EquipmentCodeMap.cs" />
+    <Compile Include="Common\MailLog.cs" />
     <Compile Include="Common\WaitingView.cs" />
     <Compile Include="DataArrange\DalInfoCode.cs" />
     <Compile Include="Html5Command.cs" />

+ 1 - 0
MBI/SAGA.MBI/ToolCommand.cs

@@ -576,6 +576,7 @@ namespace SAGA.MBI
     [Regeneration(RegenerationOption.Manual)]
     public class AddSiSpaceCommand : ExternalCommand
     {
+       
         public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
         {
             List<string> errorIds = new List<string>();

+ 2 - 2
MBI/SAGA.Revit.sln

@@ -793,8 +793,8 @@ Global
 		{A36305AB-217A-4A6B-8B78-EA79497B1807}.R16|x64.Build.0 = Release|Any CPU
 		{A36305AB-217A-4A6B-8B78-EA79497B1807}.R16|x86.ActiveCfg = Release|Any CPU
 		{A36305AB-217A-4A6B-8B78-EA79497B1807}.R16|x86.Build.0 = Release|Any CPU
-		{A36305AB-217A-4A6B-8B78-EA79497B1807}.R17|Any CPU.ActiveCfg = Release|Any CPU
-		{A36305AB-217A-4A6B-8B78-EA79497B1807}.R17|Any CPU.Build.0 = Release|Any CPU
+		{A36305AB-217A-4A6B-8B78-EA79497B1807}.R17|Any CPU.ActiveCfg = Debug|Any CPU
+		{A36305AB-217A-4A6B-8B78-EA79497B1807}.R17|Any CPU.Build.0 = Debug|Any CPU
 		{A36305AB-217A-4A6B-8B78-EA79497B1807}.R17|x64.ActiveCfg = Release|Any CPU
 		{A36305AB-217A-4A6B-8B78-EA79497B1807}.R17|x64.Build.0 = Release|Any CPU
 		{A36305AB-217A-4A6B-8B78-EA79497B1807}.R17|x86.ActiveCfg = Release|Any CPU