Kaynağa Gözat

Merge branch 'dev20250308_IOT功能完善' into dev20250218_IOT开发

# Conflicts:
#	MainForm/FaForm/Form_Home.cs
WIN-GH9CEESPLTB\Administrator 1 ay önce
ebeveyn
işleme
09f34d9c79

+ 8 - 4
MainForm/ClassFile/ProjectClass/GlobalContext.cs

@@ -40,7 +40,7 @@ namespace MainForm
         public static string MqttPassResultLogDir = MqttLogDir + @"过站结果\";    // mqtt日志 - 过站结果日志
         public static string MqttPassDetailLogDir = MqttLogDir + @"过站明细\";    // mqtt日志 - 过站明细日志
         public static string MqttFileUpLogDir = MqttLogDir + @"文件上传\";    // mqtt日志 - 文件上传日志
-        public static string MqttFileUpLogDir11 = MqttLogDir + @"1111aaa\";    // mqtt日志 - 文件上传日志
+        public static string MqttFileBackupLogDir = MqttLogDir + @"文件上传\文件备份";    // mqtt日志 - 文件上传日志
 
         public static string MqttServerPath = AppDomain.CurrentDomain.BaseDirectory + @"\ThingsMode\MqttServer.exe";
         public static string MqttServerName = "MqttServer";
@@ -62,6 +62,8 @@ namespace MainForm
         public static string Mtltmrk;        // 产品型号(mtltmrk)
         public static string run_mode;     // 生产阶段  online/offline
         public static string product_mode;  // 运行模式 debug(调试)/tp(试产)/mp(量产)
+        public static string FileAppId;  // 文件上传
+        public static string FileAppKey;  // 文件上传
 
         public static string S1_work_station;   // [S1] ⼯站
         public static string S1_device_code;    // [S1] 装备编码
@@ -395,9 +397,9 @@ namespace MainForm
                 StationInMESUrl = string.Format(StationInMESUrl, ServerHost);
                 StationOutMESUrl = IniFile.INIGetStringValue(FilePath, "MES", "StationOutMESUrl", "");
                 StationOutMESUrl = string.Format(StationOutMESUrl, ServerHost);
-                UpFileUrl = IniFile.INIGetStringValue(FilePath, "MES", "UpFileUrl", "");
-                UpFilePath = IniFile.INIGetStringValue(FilePath, "MES", "UpFilePath", "");
-                MESIsSendUpFile = bool.Parse(IniFile.INIGetStringValue(FilePath, "MES", "MESIsSendUpFile", ConstIsSend));
+                UpFileUrl = IniFile.INIGetStringValue(FilePath, "MQTT", "UpFileUrl", "");
+                UpFilePath = IniFile.INIGetStringValue(FilePath, "MQTT", "UpFilePath", "");
+                MESIsSendUpFile = bool.Parse(IniFile.INIGetStringValue(FilePath, "MQTT", "MESIsSendUpFile", ConstIsSend));
 
                 if (ServerHost.Contains(":"))
                 {
@@ -451,6 +453,8 @@ namespace MainForm
                 address = IniFile.INIGetStringValue(FilePath, "MQTT", "address", ConstIsSend);
                 product_mode = IniFile.INIGetStringValue(FilePath, "MQTT", "product_mode", ConstIsSend);
                 run_mode = IniFile.INIGetStringValue(FilePath, "MQTT", "run_mode", ConstIsSend);
+                FileAppId = IniFile.INIGetStringValue(FilePath, "MQTT", "FileAppId", ConstIsSend);
+                FileAppKey = IniFile.INIGetStringValue(FilePath, "MQTT", "FileAppKey", ConstIsSend);
 
                 // AGV配置
                 IsUseAGV = bool.Parse(IniFile.INIGetStringValue(FilePath, "AGV", "IsUseAGV", "false"));  // 是否 启用AGV

+ 7 - 13
MainForm/ClassFile/XiaomiAPI_MES/XiaomiMESHttp_UpLoadFile.cs

@@ -51,12 +51,13 @@ namespace MainForm.ClassFile.XiaomiAPI_MES
             {
                 Stopwatch stopwatch1 = new Stopwatch();
                 // 基础参数
-                string url = "http://cm.pre.mi.com/file/x5/file/upload/mqtt";
-                url = "http://im.pre.mi.com/file/x5/file/upload/mqtt";
+                //string url = "http://cm.pre.mi.com/file/x5/file/upload/mqtt";
+                //url = "http://im.pre.mi.com/file/x5/file/upload/mqtt";
+                string url = GlobalContext.UpFileUrl;
                 //这个之后要加到配置文件config中
-                string appid = "Auto-Soft";
+                string appid = GlobalContext.FileAppId;
                 //这个之后要加到配置文件config中
-                string appkey = "5984710e-bb38-4806-b94d-7a9a727e3880";
+                string appkey = GlobalContext.FileAppKey;
                 string method = "UploadMqtt";
 
                 // 检查文件是否存在
@@ -101,13 +102,6 @@ namespace MainForm.ClassFile.XiaomiAPI_MES
                 // 判断上传结果
                 if (!string.IsNullOrEmpty(uploadResult) && !uploadResult.StartsWith("异常:") && !uploadResult.StartsWith("HTTP 错误:"))
                 {
-                    //删除文件
-                    (bool, string) newResult = DeleteFile(wJPath);
-                    if (!newResult.Item1)
-                    {
-                        return (0, fileUpload_X5.name+newResult.Item2);
-
-                    }
                     //附件信息添加到主页面
                     FileData fileData = new FileData();
                     fileData.FileName = file.Name;
@@ -116,7 +110,7 @@ namespace MainForm.ClassFile.XiaomiAPI_MES
                     Form_Home.fileUploadData.fileData.Add(fileData);
 
                     FileOperate.NewTxtFile(logPath, DateTime.Now + $"==>【文件提交】上传结束:文件包[{fileUpload_X5.bucket}],文件名[{file.Name}],耗时[{stopwatch1.ElapsedMilliseconds}]");
-                    return (0, fileUpload_X5.name + $"文件上传成功");
+                    return (1, fileUpload_X5.name + $"文件上传成功");
                 }
                 else
                 {
@@ -183,7 +177,7 @@ namespace MainForm.ClassFile.XiaomiAPI_MES
         /// 删除文件
         /// </summary>
         /// <param name="sourceFilePath">文件路径</param>
-        static (bool,string) DeleteFile(string sourceFilePath)
+        public static (bool,string) DeleteFile(string sourceFilePath)
         {
             try
             {

+ 105 - 86
MainForm/FaForm/Form_Home.cs

@@ -4,7 +4,7 @@ using System.Collections.Generic;
 using System.Data;
 using System.IO;
 using System.Linq;
-using System.Text;
+//using System.Text;
 using Microsoft.Win32;
 using System.Threading;
 using System.Threading.Tasks;
@@ -50,6 +50,9 @@ using FaFrameUI;
 using System.Security.Policy;
 using static MainForm.ClassFile.XiaomiClass.MesHelper;
 using static MainForm.ClassFile.XiaomiAPI_MES.XiaomiMESHttp_StationOutbound.XmMES_StationOutRequest_Body;
+using System.Drawing.Imaging;
+using System.Drawing;
+using ICSharpCode.SharpZipLib.Zip;
 
 /*
  * 注:本源码对外提供,所以有些地方使用中文命名方法及变量
@@ -2507,7 +2510,19 @@ namespace MainForm
                 isCollectingFlagRight = false;
             }
         }
-
+        public static (int,string) CompressFolder(string folderPath, string zipFilePath)
+        {
+            try
+            {
+                // 创建zip文件,将指定文件夹内的所有内容压缩到这个zip文件中
+                System.IO.Compression.ZipFile.CreateFromDirectory(folderPath, zipFilePath);
+                return (1, "文件夹已成功压缩!");
+            }
+            catch (Exception ex)
+            {
+                return (0, "文件压缩出错!"+ ex.Message);
+            }
+        }
         /// <summary>
         /// 上传文件
         /// </summary>
@@ -2522,7 +2537,7 @@ namespace MainForm
             int result = 0;
             var formData = new MultipartFormDataContent();
             string msg = "";
-            string file_category = "IMAGE"; //IMAGE 、TEXT 、UNKNOWN 这里上传图片
+            string file_category = "IMAGE"; //IMAGE 、TEXT 、UNKNOWN 
             string file_type = "IMAGE";
             string project = GlobalContext.ProgramName;
             string run_mode = GlobalContext.run_mode;
@@ -2533,93 +2548,98 @@ namespace MainForm
             string staion_id = xiaomiParm.stationCode;
             string bucket =
                 $"{file_category}/{file_type}/{project}/{product_mode}/{run_mode}/{pass_result}/{device_code}/{sn}/{staion_id}";
-
             // 获取所有图片文件
-            List<string> imageFiles = GetAllImageFiles(path);
+
+            if (guid == "")
+            {
+                guid = Guid.NewGuid().ToString();
+            }
             try
             {
-                if (imageFiles.Count > 0)
-                {
-                    foreach (string imageFile in imageFiles)
-                    {
-                        if (guid == "")
-                        {
-                            guid = Guid.NewGuid().ToString();
-                        }
-
-                        filename = Path.GetFileName(imageFile);
-
-                        sql = string.Format(
-                            "INSERT INTO [dbo].[DataFiles](stationCode,stationName,CarrierBarcode,ProductBarcode,bucket,fileName,fileContext,uuid,fileUrl,status,submitTime,createTime) " +
-                            "VALUES('{0}','{1}','{2}' ,'{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}')"
-                            , stationCode
-                            , stationName
-                            , BarcodeSet.strCarrierBarcode
-                            , BarcodeSet.strProductBarcode
-                            , bucket
-                            , filename
-                            , ""
-                            , guid
-                            , ""
-                            , 0
-                            , ""
-                            , DateTime.Now
-                        );
-                        string ret = SQLHelper_New.ExecuteNonQuery(sql, null);
-
-                        FileUpload_X5 fileUpload_X5 = new FileUpload_X5();
-                        fileUpload_X5.bucket = bucket;
-                        fileUpload_X5.name = filename;
-                        fileUpload_X5.uuid = guid.ToString();
-                        ///需要上传文件
-                        FileInfo file = new FileInfo(imageFile);
-                        string fileMd5Hex = GetMD5Hex(file);
-                        fileUpload_X5.md5 = fileMd5Hex;
-                        fileUpload_X5.uploadCloud = true;
-                        fileUpload_X5.informMqtt = true;
-
-                        FileMqttPayload fileMqttPayload = new FileMqttPayload();
-                        fileMqttPayload.factory = GlobalContext.Factory_Code;
-                        fileMqttPayload.project_name = GlobalContext.Project_Code;
-                        fileMqttPayload.product_mode = GlobalContext.product_mode;
-                        fileMqttPayload.line_no = GlobalContext.LineCode;
-                        fileMqttPayload.work_station_no = xiaomiParm.workstation;
-                        fileMqttPayload.equipment_no = xiaomiParm.deviceCode;
-                        fileMqttPayload.station_no = xiaomiParm.stationCode;
-                        fileMqttPayload.file_id = guid;
-                        fileMqttPayload.file_name = filename;
-                        fileMqttPayload.sn = BarcodeSet.strProductBarcode;
-                        //fileMqttPayload.opt_time = "";
-                        //fileMqttPayload.file_type = "";
-                        //fileMqttPayload.file_category = "";
-                        //fileMqttPayload.tag = "";
-                        fileMqttPayload.reference_info.pass_station_id = uuid;
-
-                        var fileresult =
-                            XiaomiMESHttp_UpLoadFile.FileUoladToMes(imageFile, fileUpload_X5, fileMqttPayload);
-
-                        if (fileresult.Result.Item1 == 0)
-                        {
-                            sql = string.Format("UPDATE [dbo].[DataFiles] SET status='{0}' WHERE uuid='{1}'", 1, guid);
-                            string retnew = SQLHelper_New.ExecuteNonQuery(sql, null);
-                        }
-
-                        msg = msg + $"{fileresult.Result.Item2}\r\n";
-                    }
-
-                    return (1, msg);
-                }
-                else
+                if (GlobalContext.MESIsSendUpFile)
                 {
-                    return (1, "文件不存在!");
+                    List<string> imageFiles = GetAllImageFiles(path);
+
+                    string toPath = GlobalContext.MqttFileBackupLogDir;
+                    filename = $"{xiaomiParm.workstation}_{file_type}_{sn}_{DateTime.Now.ToString("yyyyMMddHHmmss")}.zip";
+                    //string directoryPath = Path.GetDirectoryName(path);
+                    string strFilePath = toPath+ "\\"+ filename;
+
+                    if (imageFiles.Count > 0)
+                    {
+                        var r = CompressFolder(path, strFilePath);
+                        if (r.Item1 == 0)
+                        {
+                            return (0, r.Item2);
+                        }
+                        else
+                        {
+                            msg = r.Item2 + "\r\n";
+                        }
+                    }
+                    else { 
+                        return (0, "文件不存在!");
+                    }
+
+                    FileUpload_X5 fileUpload_X5 = new FileUpload_X5();
+                    fileUpload_X5.bucket = bucket;
+                    fileUpload_X5.name = filename;
+                    fileUpload_X5.uuid = guid.ToString();
+                    ///需要上传文件
+                    FileInfo file = new FileInfo(strFilePath);
+                    string fileMd5Hex = GetMD5Hex(file);
+                    fileUpload_X5.md5 = fileMd5Hex;
+                    fileUpload_X5.uploadCloud = true;
+                    fileUpload_X5.informMqtt = true;
+
+                    FileMqttPayload fileMqttPayload = new FileMqttPayload();
+                    fileMqttPayload.factory = GlobalContext.Factory_Code;
+                    fileMqttPayload.project_name = GlobalContext.Project_Code;
+                    fileMqttPayload.product_mode = GlobalContext.product_mode;
+                    fileMqttPayload.line_no = GlobalContext.LineCode;
+                    fileMqttPayload.work_station_no = xiaomiParm.workstation;
+                    fileMqttPayload.equipment_no = xiaomiParm.deviceCode;
+                    fileMqttPayload.station_no = xiaomiParm.stationCode;
+                    fileMqttPayload.file_id = guid;
+                    fileMqttPayload.file_name = filename;
+                    fileMqttPayload.sn = BarcodeSet.strProductBarcode;
+                    //fileMqttPayload.opt_time = "";
+                    //fileMqttPayload.file_type = "";
+                    //fileMqttPayload.file_category = "";
+                    //fileMqttPayload.tag = "";
+                    fileMqttPayload.reference_info.pass_station_id = uuid;
+
+                    var fileresult =await
+                        XiaomiMESHttp_UpLoadFile.FileUoladToMes(strFilePath, fileUpload_X5, fileMqttPayload);
+                    if (fileresult.Item1 != 1)
+                    {
+                        return (0, msg + fileresult.Item2 + "\r\n");
+                    }
+                    else
+                    {
+                        msg = msg + fileresult.Item2 + "\r\n";
+                    }
+
+                   
+                    foreach (var imageFile in imageFiles) {
+                        if (File.Exists(imageFile))
+                        {
+                            //删除文件
+                            (bool, string) newResult = DeleteFile(imageFile);
+                            if (!newResult.Item1)
+                            {
+                                return (0, Path.GetFileName(imageFile) + newResult.Item2);
+                            }
+                        }
+                    }
                 }
+                return (1, msg);
             }
             catch (Exception e)
             {
-                return (1,
-                    filename + $"图片保存失败!载具码:{BarcodeSet.strCarrierBarcode}产品码{BarcodeSet.strProductBarcode},错误原因:" +
+                return (0,
+                    filename + $"文件上传错误!载具码:{BarcodeSet.strCarrierBarcode}产品码{BarcodeSet.strProductBarcode},错误原因:" +
                     e.Message);
-                //AddMessage_Station(stationName, LogType.Error, filename + $"图片保存失败!载具码:{BarcodeSet.strCarrierBarcode}产品码{BarcodeSet.strProductBarcode}");
             }
         }
 
@@ -5305,11 +5325,10 @@ namespace MainForm
                         stopwatch2.Start();
 
                         //测试数据
-                        // stPLC_MesData.mesCommFrmPLC.cmd = 1;
-                        // stPLC_MesData.BarcodeSet.strCarrierBarcode = "A123456";
-                        // stPLC_MesData.BarcodeSet.strPCBBarcode = "123456";
-                        // stPLC_MesData.iotData.BeatAction = 1;
-                        // stPLC_MesData.iotData.BeatAction = 2;
+                        stPLC_MesData.mesCommFrmPLC.cmd = 2;
+                        stPLC_MesData.BarcodeSet.strCarrierBarcode = "A123456";
+                        stPLC_MesData.BarcodeSet.strPCBBarcode = "A1507V000239";
+                        stPLC_MesData.iotData.BeatAction = 1;
 
                         #region 一次性读取所有数据
 

+ 2 - 1
MainForm/FaForm/Form_Main.cs

@@ -126,7 +126,8 @@ namespace MainForm
                 if (!Directory.Exists(GlobalContext.MqttPassResultLogDir)) Directory.CreateDirectory(GlobalContext.MqttPassResultLogDir);  // 判断路径是否存在,不存在则创建路径
                 if (!Directory.Exists(GlobalContext.MqttPassDetailLogDir)) Directory.CreateDirectory(GlobalContext.MqttPassDetailLogDir);  // 判断路径是否存在,不存在则创建路径
                 if (!Directory.Exists(GlobalContext.MqttFileUpLogDir)) Directory.CreateDirectory(GlobalContext.MqttFileUpLogDir);  // 判断路径是否存在,不存在则创建路径
-
+                if (!Directory.Exists(GlobalContext.MqttFileBackupLogDir)) Directory.CreateDirectory(GlobalContext.MqttFileBackupLogDir);  // 判断路径是否存在,不存在则创建路径
+                
                 GlobalContext.UpdateData();
 
                 //创建窗体及事件

+ 6 - 0
MainForm/MainForm.csproj

@@ -187,6 +187,12 @@
     <Reference Include="System.ComponentModel.DataAnnotations" />
     <Reference Include="System.Configuration" />
     <Reference Include="System.Core" />
+    <Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.IO.Compression.FileSystem" />
     <Reference Include="System.Management" />
     <Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
       <HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>

+ 1 - 0
MainForm/packages.config

@@ -16,6 +16,7 @@
   <package id="SunnyUI" version="3.6.0" targetFramework="net472" />
   <package id="SunnyUI.Common" version="3.5.1" targetFramework="net472" />
   <package id="System.Buffers" version="4.5.1" targetFramework="net472" />
+  <package id="System.IO.Compression" version="4.3.0" targetFramework="net472" />
   <package id="System.Memory" version="4.5.5" targetFramework="net472" />
   <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
   <package id="System.Runtime.CompilerServices.Unsafe" version="5.0.0" targetFramework="net472" />