From 6c62b03bcaf50b0d2dcf85e2accd374283ad5e2e Mon Sep 17 00:00:00 2001
From: yl <ykxkd@outlook.com>
Date: 星期五, 16 九月 2022 23:15:46 +0800
Subject: [PATCH] 班组工资报表开发、人员工资明细报表开发、不良明细报表开发、品质异常报表开发、维修明细报表开发

---
 VueWebApi/obj/Release/VueWebApi.pdb                                  |    0 
 VueWebApi/Logs/2022-09-15.TXT                                        |    0 
 VueWebApi/Logs/2022-09-14.TXT                                        |    0 
 VueWebApi/Controllers/ReportManagerController.cs                     |  261 +++++++++
 .vs/VueWebApi/v16/.suo                                               |    0 
 VueWebApi/obj/Release/TransformWebConfig/original/Web.config         |    1 
 VueWebApi/obj/Release/Package/PackageTmp/HtmlPage1.html              |   58 ++
 VueWebApi/VueWebApi.csproj                                           |    1 
 VueWebApi/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache |    0 
 VueWebApi/obj/Release/Package/PackageTmp/bin/VueWebApi.pdb           |    0 
 VueWebApi/DLL/BLL/ReportManagerBLL.cs                                |   67 ++
 VueWebApi/DLL/DAL/AppDeviceManageDAL.cs                              |    2 
 VueWebApi/Tools/TestSocket.cs                                        |   56 +
 VueWebApi/obj/Release/Package/PackageTmp/Web.config                  |    1 
 VueWebApi/bin/VueWebApi.pdb                                          |    0 
 VueWebApi/bin/VueWebApi.dll.config                                   |    1 
 VueWebApi/obj/Release/TransformWebConfig/transformed/Web.config      |    1 
 VueWebApi/Controllers/SendController.cs                              |  101 ++
 VueWebApi/Properties/PublishProfiles/FolderProfile.pubxml.user       |   13 
 VueWebApi/Web.config                                                 |    1 
 VueWebApi/bin/VueWebApi.xml                                          |  140 +++++
 VueWebApi/Logs/2022-09-16.TXT                                        |    0 
 VueWebApi/HtmlPage1.html                                             |   58 ++
 VueWebApi/obj/Release/Package/PackageTmp/bin/VueWebApi.xml           |  190 ++++++
 VueWebApi/DLL/DAL/ReportManagerDAL.cs                                |  693 ++++++++++++++++++++++++
 25 files changed, 1,591 insertions(+), 54 deletions(-)

diff --git a/.vs/VueWebApi/v16/.suo b/.vs/VueWebApi/v16/.suo
index dad0ed1..b7cb34d 100644
--- a/.vs/VueWebApi/v16/.suo
+++ b/.vs/VueWebApi/v16/.suo
Binary files differ
diff --git a/VueWebApi/Controllers/ReportManagerController.cs b/VueWebApi/Controllers/ReportManagerController.cs
index 8be455e..0f60425 100644
--- a/VueWebApi/Controllers/ReportManagerController.cs
+++ b/VueWebApi/Controllers/ReportManagerController.cs
@@ -106,8 +106,8 @@
         [HttpGet]
         public HttpResponseMessage GroupSalaryReportSearch(int page, int rows, string prop, string order, string wocode = null, string partcode = null, string partname = null, string partspec = null, string stepname = null, string groupcode = null, string username = null, string operdate = null)
         {
-            string operopendate = "";  //鏀舵枡寮�濮嬫椂闂�
-            string operclosedate = "";    //鏀舵枡缁撴潫鏃堕棿
+            string operopendate = "";  //鎶ュ伐寮�濮嬫椂闂�
+            string operclosedate = "";    //鎶ュ伐缁撴潫鏃堕棿
             if (operdate != "" && operdate != null)
             {
                 operopendate = operdate.Split('~')[0].ToString();
@@ -120,5 +120,262 @@
         }
         #endregion
 
+        #region[鐝粍宸ヨ祫鎶ヨ〃璁板綍鏌ョ湅鎶ュ伐浜哄憳]
+        /// <summary>
+        /// 鐝粍宸ヨ祫鎶ヨ〃璁板綍鏌ョ湅鎶ュ伐浜哄憳
+        /// </summary>
+        /// <param name="id">鎶ュ伐璁板綍涓昏〃id</param>
+        /// <returns></returns>
+        [Route(template: "GroupSalaryReportSearchUser")]
+        [HttpGet]
+        public HttpResponseMessage GroupSalaryReportSearchUser(string id)
+        {
+            mes = ReportManagerBLL.GroupSalaryReportSearchUser(id);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+        #region[鐝粍宸ヨ祫鎶ヨ〃璁板綍瀵煎嚭]
+        /// <summary>
+        /// 鐝粍宸ヨ祫鎶ヨ〃璁板綍鏌ヨ
+        /// </summary>
+        /// <param name="wocode">宸ュ崟缂栧彿</param>
+        /// <param name="partcode">浜у搧缂栫爜</param>
+        /// <param name="partname">浜у搧鍚嶇О</param>
+        /// <param name="partspec">瑙勬牸鍨嬪彿</param>
+        /// <param name="stepname">宸ュ簭鍚嶇О</param>
+        /// <param name="groupcode">鐢熶骇鐝粍</param>
+        /// <param name="username">鎿嶄綔浜哄憳</param>
+        /// <param name="operdate">鎿嶄綔鏃堕棿</param>
+        /// <returns></returns>
+        [Route(template: "GroupSalaryReportExcelSearch")]
+        [HttpGet]
+        public HttpResponseMessage GroupSalaryReportExcelSearch(string wocode = null, string partcode = null, string partname = null, string partspec = null, string stepname = null, string groupcode = null, string username = null, string operdate = null)
+        {
+            string operopendate = "";  //鎶ュ伐寮�濮嬫椂闂�
+            string operclosedate = "";    //鎶ュ伐缁撴潫鏃堕棿
+            if (operdate != "" && operdate != null)
+            {
+                operopendate = operdate.Split('~')[0].ToString();
+                operclosedate = operdate.Split('~')[1].ToString();
+            }
+            mes = ReportManagerBLL.GroupSalaryReportExcelSearch(wocode, partcode, partname, partspec, stepname, groupcode, username, operopendate, operclosedate);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+
+        #region[浜哄憳宸ヨ祫鏄庣粏鎶ヨ〃]
+        /// <summary>
+        /// 浜哄憳宸ヨ祫鏄庣粏鎶ヨ〃
+        /// </summary>
+        /// <param name="wocode">宸ュ崟缂栧彿</param>
+        /// <param name="partcode">浜у搧缂栫爜</param>
+        /// <param name="partname">浜у搧鍚嶇О</param>
+        /// <param name="partspec">瑙勬牸鍨嬪彿</param>
+        /// <param name="stepname">宸ュ簭鍚嶇О</param>
+        /// <param name="groupcode">鐢熶骇鐝粍</param>
+        /// <param name="reportname">鎶ュ伐浜哄憳</param>
+        /// <param name="reportdate">鎶ュ伐鏃堕棿</param>
+        /// <param name="page">椤电爜</param>
+        /// <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+        /// <param name="prop">鎺掑簭瀛楁</param>
+        /// <param name="order">鎺掑簭瑙勫垯</param>
+        /// <returns></returns>
+        [Route(template: "PeopleSalaryReportSearch")]
+        [HttpGet]
+        public HttpResponseMessage PeopleSalaryReportSearch(int page, int rows, string prop, string order, string wocode = null, string partcode = null, string partname = null, string partspec = null, string stepname = null, string groupcode = null, string reportname = null, string reportdate = null)
+        {
+            string reportopendate = "";  //鎶ュ伐寮�濮嬫椂闂�
+            string reportclosedate = "";    //鎶ュ伐缁撴潫鏃堕棿
+            if (reportdate != "" && reportdate != null)
+            {
+                reportopendate = reportdate.Split('~')[0].ToString();
+                reportclosedate = reportdate.Split('~')[1].ToString();
+            }
+            int startNum = rows * (page - 1) + 1;  //璧峰璁板綍rowNum
+            int endNum = rows * page;   //缁撴潫璁板綍 rowNum
+            mes = ReportManagerBLL.PeopleSalaryReportSearch(wocode, partcode, partname, partspec, stepname, groupcode, reportname, reportopendate, reportclosedate, startNum, endNum, prop, order);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+        #region[浜哄憳宸ヨ祫鏄庣粏鎶ヨ〃瀵煎嚭]
+        /// <summary>
+        /// 浜哄憳宸ヨ祫鏄庣粏鎶ヨ〃瀵煎嚭
+        /// </summary>
+        /// <param name="wocode">宸ュ崟缂栧彿</param>
+        /// <param name="partcode">浜у搧缂栫爜</param>
+        /// <param name="partname">浜у搧鍚嶇О</param>
+        /// <param name="partspec">瑙勬牸鍨嬪彿</param>
+        /// <param name="stepname">宸ュ簭鍚嶇О</param>
+        /// <param name="groupcode">鐢熶骇鐝粍</param>
+        /// <param name="reportname">鎶ュ伐浜哄憳</param>
+        /// <param name="reportdate">鎶ュ伐鏃堕棿</param>
+        /// <returns></returns>
+        [Route(template: "PeopleSalaryReportExcelSearch")]
+        [HttpGet]
+        public HttpResponseMessage PeopleSalaryReportExcelSearch(string wocode = null, string partcode = null, string partname = null, string partspec = null, string stepname = null, string groupcode = null, string reportname = null, string reportdate = null)
+        {
+            string reportopendate = "";  //鎶ュ伐寮�濮嬫椂闂�
+            string reportclosedate = "";    //鎶ュ伐缁撴潫鏃堕棿
+            if (reportdate != "" && reportdate != null)
+            {
+                reportopendate = reportdate.Split('~')[0].ToString();
+                reportclosedate = reportdate.Split('~')[1].ToString();
+            }
+            mes = ReportManagerBLL.PeopleSalaryReportExcelSearch(wocode, partcode, partname, partspec, stepname, groupcode, reportname, reportopendate, reportclosedate);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+
+        #region[涓嶈壇鏄庣粏鎶ヨ〃]
+        /// <summary>
+        /// 涓嶈壇鏄庣粏鎶ヨ〃 
+        /// </summary>
+        /// <param name="wocode">宸ュ崟缂栧彿</param>
+        /// <param name="partcode">浜у搧缂栫爜</param>
+        /// <param name="partname">浜у搧鍚嶇О</param>
+        /// <param name="partspec">瑙勬牸鍨嬪彿</param>
+        /// <param name="stepname">宸ュ簭鍚嶇О</param>
+        /// <param name="defectcode">缂洪櫡浠g爜</param>
+        /// <param name="defectname">缂洪櫡鍚嶇О</param>
+        /// <param name="reportname">鎶ュ伐浜哄憳</param>
+        /// <param name="reportdate">鎶ュ伐鏃堕棿</param>
+        /// <param name="page">椤电爜</param>
+        /// <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+        /// <param name="prop">鎺掑簭瀛楁</param>
+        /// <param name="order">鎺掑簭瑙勫垯</param>
+        /// <returns></returns>
+        [Route(template: "DefectDetailsReportSearch")]
+        [HttpGet]
+        public HttpResponseMessage DefectDetailsReportSearch(int page, int rows, string prop, string order, string wocode = null, string partcode = null, string partname = null, string partspec = null, string stepname = null,string defectcode=null,string defectname=null, string reportname = null, string reportdate = null)
+        {
+            string reportopendate = "";  //鎶ュ伐寮�濮嬫椂闂�
+            string reportclosedate = "";    //鎶ュ伐缁撴潫鏃堕棿
+            if (reportdate != "" && reportdate != null)
+            {
+                reportopendate = reportdate.Split('~')[0].ToString();
+                reportclosedate = reportdate.Split('~')[1].ToString();
+            }
+            int startNum = rows * (page - 1) + 1;  //璧峰璁板綍rowNum
+            int endNum = rows * page;   //缁撴潫璁板綍 rowNum
+            mes = ReportManagerBLL.DefectDetailsReportSearch(wocode, partcode, partname, partspec, stepname, defectcode, defectname, reportname, reportopendate, reportclosedate, startNum, endNum, prop, order);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+        #region[涓嶈壇鏄庣粏鎶ヨ〃瀵煎嚭]
+        /// <summary>
+        /// 涓嶈壇鏄庣粏鎶ヨ〃瀵煎嚭 
+        /// </summary>
+        /// <param name="wocode">宸ュ崟缂栧彿</param>
+        /// <param name="partcode">浜у搧缂栫爜</param>
+        /// <param name="partname">浜у搧鍚嶇О</param>
+        /// <param name="partspec">瑙勬牸鍨嬪彿</param>
+        /// <param name="stepname">宸ュ簭鍚嶇О</param>
+        /// <param name="defectcode">缂洪櫡浠g爜</param>
+        /// <param name="defectname">缂洪櫡鍚嶇О</param>
+        /// <param name="reportname">鎶ュ伐浜哄憳</param>
+        /// <param name="reportdate">鎶ュ伐鏃堕棿</param>
+        /// <returns></returns>
+        [Route(template: "DefectDetailsReportExcelSearch")]
+        [HttpGet]
+        public HttpResponseMessage DefectDetailsReportExcelSearch(string wocode = null, string partcode = null, string partname = null, string partspec = null, string stepname = null, string defectcode = null, string defectname = null, string reportname = null, string reportdate = null)
+        {
+            string reportopendate = "";  //鎶ュ伐寮�濮嬫椂闂�
+            string reportclosedate = "";    //鎶ュ伐缁撴潫鏃堕棿
+            if (reportdate != "" && reportdate != null)
+            {
+                reportopendate = reportdate.Split('~')[0].ToString();
+                reportclosedate = reportdate.Split('~')[1].ToString();
+            }
+            mes = ReportManagerBLL.DefectDetailsReportExcelSearch(wocode, partcode, partname, partspec, stepname, defectcode, defectname, reportname, reportopendate, reportclosedate);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+
+        #region[鍝佽川寮傚父鎺掕鎶ヨ〃(鍙栨姤宸ヤ笉鑹褰曠己闄峰垎缁勬眹鎬绘潯鏁�)]
+        /// <summary>
+        /// 鍝佽川寮傚父鎺掕鎶ヨ〃 
+        /// </summary>
+        /// <returns></returns>
+        [Route(template: "QuaneryDefectReportSearch")]
+        [HttpGet]
+        public HttpResponseMessage QuaneryDefectReportSearch()
+        {
+            mes = ReportManagerBLL.QuaneryDefectReportSearch();
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+
+        #region[缁翠慨鏄庣粏鎶ヨ〃]
+        /// <summary>
+        /// 缁翠慨鏄庣粏鎶ヨ〃 
+        /// </summary>
+        /// <param name="wocode">宸ュ崟缂栧彿</param>
+        /// <param name="partcode">浜у搧缂栫爜</param>
+        /// <param name="partname">浜у搧鍚嶇О</param>
+        /// <param name="partspec">瑙勬牸鍨嬪彿</param>
+        /// <param name="stepname">宸ュ簭鍚嶇О</param>
+        /// <param name="style">鎿嶄綔绫诲瀷</param>
+        /// <param name="defectname">缂洪櫡鍚嶇О</param>
+        /// <param name="repairname">缁翠慨浜哄憳</param>
+        /// <param name="repairdate">缁翠慨鏃堕棿</param>
+        /// <param name="page">椤电爜</param>
+        /// <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+        /// <param name="prop">鎺掑簭瀛楁</param>
+        /// <param name="order">鎺掑簭瑙勫垯</param>
+        /// <returns></returns>
+        [Route(template: "MaintenanceDetailsReportSearch")]
+        [HttpGet]
+        public HttpResponseMessage MaintenanceDetailsReportSearch(int page, int rows, string prop, string order, string wocode = null, string partcode = null, string partname = null, string partspec = null, string stepname = null, string style = null, string defectname = null, string repairname = null, string repairdate = null)
+        {
+            string repairopendate = "";  //缁翠慨寮�濮嬫椂闂�
+            string repairclosedate = "";    //缁翠慨缁撴潫鏃堕棿
+            if (repairdate != "" && repairdate != null)
+            {
+                repairopendate = repairdate.Split('~')[0].ToString();
+                repairclosedate = repairdate.Split('~')[1].ToString();
+            }
+            int startNum = rows * (page - 1) + 1;  //璧峰璁板綍rowNum
+            int endNum = rows * page;   //缁撴潫璁板綍 rowNum
+            mes = ReportManagerBLL.MaintenanceDetailsReportSearch(wocode, partcode, partname, partspec, stepname, style, defectname, repairname, repairopendate, repairclosedate, startNum, endNum, prop, order);
+            return TJson.toJson(mes);
+        }
+        #endregion
+
+        #region[缁翠慨鏄庣粏鎶ヨ〃瀵煎嚭]
+        /// <summary>
+        /// 缁翠慨鏄庣粏鎶ヨ〃瀵煎嚭 
+        /// </summary>
+        /// <param name="wocode">宸ュ崟缂栧彿</param>
+        /// <param name="partcode">浜у搧缂栫爜</param>
+        /// <param name="partname">浜у搧鍚嶇О</param>
+        /// <param name="partspec">瑙勬牸鍨嬪彿</param>
+        /// <param name="stepname">宸ュ簭鍚嶇О</param>
+        /// <param name="style">鎿嶄綔绫诲瀷</param>
+        /// <param name="defectname">缂洪櫡鍚嶇О</param>
+        /// <param name="repairname">缁翠慨浜哄憳</param>
+        /// <param name="repairdate">缁翠慨鏃堕棿</param>
+        /// <returns></returns>
+        [Route(template: "MaintenanceDetailsReportExcelSearch")]
+        [HttpGet]
+        public HttpResponseMessage MaintenanceDetailsReportExcelSearch(string wocode = null, string partcode = null, string partname = null, string partspec = null, string stepname = null, string style = null, string defectname = null, string repairname = null, string repairdate = null)
+        {
+            string repairopendate = "";  //缁翠慨寮�濮嬫椂闂�
+            string repairclosedate = "";    //缁翠慨缁撴潫鏃堕棿
+            if (repairdate != "" && repairdate != null)
+            {
+                repairopendate = repairdate.Split('~')[0].ToString();
+                repairclosedate = repairdate.Split('~')[1].ToString();
+            }
+            mes = ReportManagerBLL.MaintenanceDetailsReportExcelSearch(wocode, partcode, partname, partspec, stepname, style, defectname, repairname, repairopendate, repairclosedate);
+            return TJson.toJson(mes);
+        }
+        #endregion
     }
 }
diff --git a/VueWebApi/Controllers/SendController.cs b/VueWebApi/Controllers/SendController.cs
index 21cc605..6b4c203 100644
--- a/VueWebApi/Controllers/SendController.cs
+++ b/VueWebApi/Controllers/SendController.cs
@@ -1,48 +1,109 @@
 锘縰sing System;
 using System.Collections.Generic;
-using System.Linq;
+using System.IO;
 using System.Net;
 using System.Net.Http;
 using System.Net.WebSockets;
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Formatters.Binary;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
+using System.Web;
 using System.Web.Http;
+using System.Web.WebSockets;
 using VueWebApi.Tools;
 
 namespace VueWebApi.Controllers
 {
-    [RoutePrefix(prefix: "api/Send")]
+    [RoutePrefix(prefix: "Send")]
     [ControllerGroup("娑堟伅鎻愰啋", "鍦ㄧ嚎鎺ュ彛")]
     public class SendController : ApiController
     {
         private readonly ClientWebSocket webSocket = new ClientWebSocket();
         private readonly CancellationToken _cancellation = new CancellationToken();
 
+        /// <summary>
+        /// 鐧诲綍鐢ㄦ埛寤虹珛WebSocket鏈嶅姟杩炴帴
+        /// </summary>
+        /// <param name="clientName">鐧诲綍鐢ㄦ埛淇℃伅</param>
+        /// <returns></returns>
         [HttpGet]
-        public async Task SendMsg(string msg)
+        public HttpResponseMessage GetConnect(string clientName)
         {
-            await webSocket.ConnectAsync(new Uri("ws://localhost:8001"), CancellationToken.None);
-            var sendBytes = Encoding.UTF8.GetBytes(msg);//鍙戦�佺殑鏁版嵁
-            var bsend = new ArraySegment<byte>(sendBytes);
-            await webSocket.SendAsync(bsend, WebSocketMessageType.Binary, true, _cancellation);
-            await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "1", _cancellation);
-            webSocket.Dispose();
+            HttpContext.Current.AcceptWebSocketRequest(ProcessRequest); //鍦ㄦ湇鍔″櫒绔帴鍙梂eb Socket璇锋眰锛屼紶鍏ョ殑鍑芥暟浣滀负Web Socket鐨勫鐞嗗嚱鏁帮紝寰匴eb Socket寤虹珛鍚庤鍑芥暟浼氳璋冪敤锛屽湪璇ュ嚱鏁颁腑鍙互瀵筗eb Socket杩涜娑堟伅鏀跺彂
+
+            return Request.CreateResponse(HttpStatusCode.SwitchingProtocols); //鏋勯�犲悓鎰忓垏鎹㈣嚦Web Socket鐨凴esponse.
+        }
+        ///璁板綍瀹㈡埛绔�
+        private static List<WebSocket> _sockets = new List<WebSocket>();
+        ///鎺ュ彈淇℃伅鍜屽彂閫佷俊鎭�
+        public async Task ProcessRequest(AspNetWebSocketContext context)
+        {
+            try
+            {
+                var socket = context.WebSocket;//浼犲叆鐨刢ontext涓湁褰撳墠鐨剋eb socket瀵硅薄
+                _sockets.Add(socket);//姝ゅ灏唚eb socket瀵硅薄鍔犲叆涓�涓潤鎬佸垪琛ㄤ腑
+
+                //杩涘叆涓�涓棤闄愬惊鐜紝褰搘eb socket close鏄惊鐜粨鏉�
+                while (true)
+                {
+                    var buffer = new ArraySegment<byte>(new byte[1024]);
+                    var receivedResult = await socket.ReceiveAsync(buffer, CancellationToken.None);//瀵箇eb socket杩涜寮傛鎺ユ敹鏁版嵁
+                    if (receivedResult.MessageType == WebSocketMessageType.Close)
+                    {
+                        await socket.CloseAsync(WebSocketCloseStatus.Empty, string.Empty, CancellationToken.None);//濡傛灉client鍙戣捣close璇锋眰锛屽client杩涜ack
+                        _sockets.Remove(socket);
+                        break;
+                    }
+
+                    if (socket.State == System.Net.WebSockets.WebSocketState.Open)
+                    {
+                        string recvMsg = Encoding.UTF8.GetString(buffer.Array, 0, receivedResult.Count);
+                        var recvBytes = Encoding.UTF8.GetBytes(recvMsg);
+                        var sendBuffer = new ArraySegment<byte>(recvBytes);
+                        foreach (var innerSocket in _sockets)//褰撴帴鏀跺埌鏂囨湰娑堟伅鏃讹紝瀵瑰綋鍓嶆湇鍔″櫒涓婃墍鏈墂eb socket杩炴帴杩涜骞挎挱
+                        {
+                            if (innerSocket != socket)
+                            {
+                                await innerSocket.SendAsync(sendBuffer, WebSocketMessageType.Text, true, CancellationToken.None);
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
         }
 
-        //http://localhost:port/api/Send/Init
-        [HttpGet]
-        public string Init()
-        {
-            TestSocket.Instance.socketServer();
-            return "success";
-        }
 
-        [HttpGet]
-        public string Msg(string userid, string msg)
+        //瀹㈡埛绔彂閫佹秷鎭�
+        private async void SendMsg(object data)
         {
-            var _msg = TestSocket.Instance.Send(userid, msg);
-            return _msg;
+            try
+            {
+                await webSocket.ConnectAsync(new Uri("wss://121.196.36.24:8001/api/Send?clientName=" + 123), _cancellation);
+                var sendBytes = ObjectToBytes(data);//鍙戦�佺殑鏁版嵁
+                var bsend = new ArraySegment<byte>(sendBytes);
+                await webSocket.SendAsync(bsend, WebSocketMessageType.Binary, true, _cancellation);
+                await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "1", _cancellation);
+                webSocket.Dispose();//璁板緱涓�瀹氳閲婃斁涓嶇劧鏈嶅姟绔繕浜х敓寰堝杩炴帴
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+        }
+        public static byte[] ObjectToBytes(object obj)
+        {
+            using (MemoryStream ms = new MemoryStream())
+            {
+                IFormatter formatter = new BinaryFormatter();
+                formatter.Serialize(ms, obj);
+                return ms.GetBuffer();
+            }
         }
     }
 }
diff --git a/VueWebApi/DLL/BLL/ReportManagerBLL.cs b/VueWebApi/DLL/BLL/ReportManagerBLL.cs
index 90989d1..b0d992b 100644
--- a/VueWebApi/DLL/BLL/ReportManagerBLL.cs
+++ b/VueWebApi/DLL/BLL/ReportManagerBLL.cs
@@ -30,5 +30,72 @@
             return ReportManagerDAL.GroupSalaryReportSearch(wocode, partcode, partname, partspec, stepname, groupcode, username, operopendate, operclosedate, startNum, endNum, prop, order);
         }
         #endregion
+
+        #region[鐝粍宸ヨ祫鎶ヨ〃璁板綍鏌ョ湅鎶ュ伐浜哄憳]
+        public static ToMessage GroupSalaryReportSearchUser(string id)
+        {
+            return ReportManagerDAL.GroupSalaryReportSearchUser(id);
+        }
+        #endregion
+
+        #region[鐝粍宸ヨ祫鎶ヨ〃璁板綍瀵煎嚭]
+        public static ToMessage GroupSalaryReportExcelSearch(string wocode, string partcode, string partname, string partspec, string stepname, string groupcode, string username, string operopendate, string operclosedate)
+        {
+            return ReportManagerDAL.GroupSalaryReportExcelSearch(wocode, partcode, partname, partspec, stepname, groupcode, username, operopendate, operclosedate);
+        }
+        #endregion
+
+
+        #region[浜哄憳宸ヨ祫鏄庣粏鎶ヨ〃]
+        public static ToMessage PeopleSalaryReportSearch(string wocode, string partcode, string partname, string partspec, string stepname, string groupcode, string reportname, string reportopendate, string reportclosedate, int startNum, int endNum, string prop, string order)
+        {
+            return ReportManagerDAL.PeopleSalaryReportSearch(wocode, partcode, partname, partspec, stepname, groupcode, reportname, reportopendate, reportclosedate, startNum, endNum, prop, order);
+        }
+        #endregion
+
+        #region[浜哄憳宸ヨ祫鏄庣粏鎶ヨ〃瀵煎嚭]
+        public static ToMessage PeopleSalaryReportExcelSearch(string wocode, string partcode, string partname, string partspec, string stepname, string groupcode, string reportname, string reportopendate, string reportclosedate)
+        {
+            return ReportManagerDAL.PeopleSalaryReportExcelSearch(wocode, partcode, partname, partspec, stepname, groupcode, reportname, reportopendate, reportclosedate);
+        }
+        #endregion
+
+
+        #region[涓嶈壇鏄庣粏鎶ヨ〃]
+        public static ToMessage DefectDetailsReportSearch(string wocode, string partcode, string partname, string partspec, string stepname, string defectcode, string defectname, string reportname, string reportopendate, string reportclosedate, int startNum, int endNum, string prop, string order)
+        {
+            return ReportManagerDAL.DefectDetailsReportSearch(wocode, partcode, partname, partspec, stepname, defectcode, defectname, reportname, reportopendate, reportclosedate, startNum, endNum, prop, order);
+        }
+        #endregion
+
+        #region[涓嶈壇鏄庣粏鎶ヨ〃瀵煎嚭]
+        public static ToMessage DefectDetailsReportExcelSearch(string wocode, string partcode, string partname, string partspec, string stepname, string defectcode, string defectname, string reportname, string reportopendate, string reportclosedate)
+        {
+            return ReportManagerDAL.DefectDetailsReportExcelSearch(wocode, partcode, partname, partspec, stepname, defectcode, defectname, reportname, reportopendate, reportclosedate);
+        }
+        #endregion
+
+
+        #region[鍝佽川寮傚父鎺掕鎶ヨ〃(鍙栨姤宸ヤ笉鑹褰曠己闄峰垎缁勬眹鎬绘潯鏁�)]
+        public static ToMessage QuaneryDefectReportSearch()
+        {
+            return ReportManagerDAL.QuaneryDefectReportSearch();
+        }
+        #endregion
+
+
+        #region[缁翠慨鏄庣粏鎶ヨ〃]
+        public static ToMessage MaintenanceDetailsReportSearch(string wocode, string partcode, string partname, string partspec, string stepname, string style, string defectname, string repairname, string repairopendate, string repairclosedate, int startNum, int endNum, string prop, string order)
+        {
+            return ReportManagerDAL.MaintenanceDetailsReportSearch(wocode, partcode, partname, partspec, stepname, style, defectname, repairname, repairopendate, repairclosedate, startNum, endNum, prop, order);
+        }
+        #endregion
+
+        #region[缁翠慨鏄庣粏鎶ヨ〃瀵煎嚭]
+        public static ToMessage MaintenanceDetailsReportExcelSearch(string wocode, string partcode, string partname, string partspec, string stepname, string style, string defectname, string repairname, string repairopendate, string repairclosedate)
+        {
+            return ReportManagerDAL.MaintenanceDetailsReportExcelSearch(wocode, partcode, partname, partspec, stepname, style, defectname, repairname, repairopendate, repairclosedate);
+        }
+        #endregion
     }
 }
\ No newline at end of file
diff --git a/VueWebApi/DLL/DAL/AppDeviceManageDAL.cs b/VueWebApi/DLL/DAL/AppDeviceManageDAL.cs
index 244af37..e238c5c 100644
--- a/VueWebApi/DLL/DAL/AppDeviceManageDAL.cs
+++ b/VueWebApi/DLL/DAL/AppDeviceManageDAL.cs
@@ -45,7 +45,7 @@
                 else
                 {
                     mes.code = "300";
-                    mes.Message = "褰撳墠璁惧寮傚父!";
+                    mes.Message = "褰撳墠璁惧/宸ヤ綅涓嶅瓨鍦ㄦ垨寮傚父!";
                     mes.data = data;
                 }
             }
diff --git a/VueWebApi/DLL/DAL/ReportManagerDAL.cs b/VueWebApi/DLL/DAL/ReportManagerDAL.cs
index e735e3d..8951924 100644
--- a/VueWebApi/DLL/DAL/ReportManagerDAL.cs
+++ b/VueWebApi/DLL/DAL/ReportManagerDAL.cs
@@ -202,7 +202,7 @@
                             where " + search;
                 DataTable data = DapperHelper.selectdata(sql, dynamicParams);
                 data.TableName = "Table"; //璁剧疆DataTable鐨勫悕绉�
-                string msg = DownLoad.DataTableToExcel(data, "濮斿鎶ュ伐璁板綍");
+                string msg = DownLoad.DataTableToExcel(data, "濮斿鎶ュ伐璁板綍鎶ヨ〃");
                 mes.code = "200";
                 mes.Message = "鏌ヨ鎴愬姛!";
                 mes.count = total;
@@ -276,7 +276,7 @@
                 search = search.Substring(3);//鎴彇绱㈠紩2鍚庨潰鐨勫瓧绗�
                 // --------------鏌ヨ鎸囧畾鏁版嵁--------------
                 var total = 0; //鎬绘潯鏁�
-                var sql = @"select distinct A.wo_code,M.partcode,M.partname,M.partspec,T.stepcode,T.stepname,A.task_qty,G.group_code,G.group_name,A.good_qty,isnull(S.unprice,0) as unprice,U.username as lm_user,A.lm_date  
+                var sql = @"select distinct A.id,A.wo_code,M.partcode,M.partname,M.partspec,T.stepcode,T.stepname,A.task_qty,G.group_code,G.group_name,A.good_qty,isnull(S.unprice,0) as unprice,A.good_qty*isnull(S.unprice,0) as usermoney,U.username as lm_user,A.lm_date  
                             from TK_Wrk_Record A
                             inner join TK_Wrk_RecordSub B on A.id=B.m_id
                             inner join TK_Wrk_Step P on A.wo_code=P.wo_code and A.step_code=P.step_code and P.isend='Y'
@@ -303,5 +303,694 @@
             return mes;
         }
         #endregion
+
+        #region[鐝粍宸ヨ祫鎶ヨ〃璁板綍鏌ョ湅鎶ュ伐浜哄憳]
+        public static ToMessage GroupSalaryReportSearchUser(string id)
+        {
+            string sql = "";
+            var dynamicParams = new DynamicParameters();
+            try
+            {
+                //鑾峰彇鎶ュ伐浜哄憳
+                sql = @"select U.usercode,U.username   from TK_Wrk_RecordSub A
+                        inner join TUser U on A.report_person=U.usercode
+                        where m_id=@id";
+                dynamicParams.Add("@id", id);
+                var data = DapperHelper.selectdata(sql, dynamicParams);
+                mes.code = "200";
+                mes.Message = "鏌ヨ鎴愬姛!";
+                mes.data = data;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[鐝粍宸ヨ祫鎶ヨ〃璁板綍瀵煎嚭]
+        public static ToMessage GroupSalaryReportExcelSearch(string wocode, string partcode, string partname, string partspec, string stepname, string groupcode, string username, string operopendate, string operclosedate)
+        {
+            var dynamicParams = new DynamicParameters();
+            string search = "";
+            try
+            {
+                if (wocode != "" && wocode != null)
+                {
+                    search += "and A.wo_code like '%'+@wocode+'%' ";
+                    dynamicParams.Add("@wocode", wocode);
+                }
+                if (partcode != "" && partcode != null)
+                {
+                    search += "and M.partcode like '%'+@partcode+'%' ";
+                    dynamicParams.Add("@partcode", partcode);
+                }
+                if (partname != "" && partname != null)
+                {
+                    search += "and M.partname like '%'+@partname+'%' ";
+                    dynamicParams.Add("@partname", partname);
+                }
+                if (partspec != "" && partspec != null)
+                {
+                    search += "and M.partspec like '%'+@partspec+'%' ";
+                    dynamicParams.Add("@partspec", partspec);
+                }
+                if (stepname != "" && stepname != null)
+                {
+                    search += "and T.stepname like '%'+@stepname+'%' ";
+                    dynamicParams.Add("@stepname", stepname);
+                }
+                if (groupcode != "" && groupcode != null)
+                {
+                    search += "and G.group_code=@groupcode ";
+                    dynamicParams.Add("@groupcode", groupcode);
+                }
+                if (username != "" && username != null)
+                {
+                    search += "and U.username like '%'+@username+'%' ";
+                    dynamicParams.Add("@username", username);
+                }
+                if (operopendate != "" && operopendate != null)
+                {
+                    search += "and A.lm_date between @operopendate and @operclosedate ";
+                    dynamicParams.Add("@operopendate", operopendate + " 00:00:00");
+                    dynamicParams.Add("@operclosedate", operclosedate + " 23:59:59");
+                }
+
+                if (search == "")
+                {
+                    search = "and 1=1 ";
+                }
+                search = search.Substring(3);//鎴彇绱㈠紩2鍚庨潰鐨勫瓧绗�
+                // --------------鏌ヨ鎸囧畾鏁版嵁--------------
+                var total = 0; //鎬绘潯鏁�
+                var sql = @"select distinct A.wo_code as 宸ュ崟缂栧彿,M.partcode as 浜у搧缂栫爜,M.partname as 浜у搧鍚嶇О,M.partspec as 浜у搧瑙勬牸,
+                            T.stepcode as 宸ュ簭缂栫爜,T.stepname as 宸ュ簭鍚嶇О,A.task_qty as 浠诲姟鏁伴噺,G.group_code as 鐝粍缂栫爜,G.group_name as 鐝粍鍚嶇О,
+                            A.good_qty as 鎶ュ伐鏁伴噺,isnull(S.unprice,0) as 宸ュ簭鍗曚环,A.good_qty*isnull(S.unprice,0) as 璁′欢宸ヨ祫,U.username as 鎿嶄綔浜哄憳,A.lm_date as 鎿嶄綔鏃堕棿 
+                            from TK_Wrk_Record A
+                            inner join TK_Wrk_RecordSub B on A.id=B.m_id
+                            inner join TK_Wrk_Step P on A.wo_code=P.wo_code and A.step_code=P.step_code and P.isend='Y'
+                            left  join TK_Wrk_Man K on A.wo_code=K.wo_code
+                            left  join TGroup G on B.usergroup_code=G.group_code
+                            left  join TPrteEqp_Stad S on A.materiel_code=S.materiel_code and A.eqp_code=S.eqp_code and A.step_code=S.step_code and K.route_code=S.route_code and K.wkshp_code=S.wkspcode
+                            left  join TMateriel_Info M on A.materiel_code=M.partcode
+                            left  join TStep T on A.step_code=T.stepcode
+                            left  join TUser U on A.lm_user=U.usercode 
+                            where " + search;
+                DataTable data = DapperHelper.selectdata(sql, dynamicParams);
+                data.TableName = "Table"; //璁剧疆DataTable鐨勫悕绉�
+                string msg = DownLoad.DataTableToExcel(data, "鐝粍璁′欢宸ヨ祫鎶ヨ〃");
+                mes.code = "200";
+                mes.Message = "鏌ヨ鎴愬姛!";
+                mes.count = total;
+                mes.data = msg;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+
+        #region[浜哄憳宸ヨ祫鏄庣粏鎶ヨ〃]
+        public static ToMessage PeopleSalaryReportSearch(string wocode, string partcode, string partname, string partspec, string stepname, string groupcode, string reportname, string reportopendate, string reportclosedate, int startNum, int endNum, string prop, string order)
+        {
+            var dynamicParams = new DynamicParameters();
+            string search = "";
+            try
+            {
+                if (wocode != "" && wocode != null)
+                {
+                    search += "and A.wo_code like '%'+@wocode+'%' ";
+                    dynamicParams.Add("@wocode", wocode);
+                }
+                if (partcode != "" && partcode != null)
+                {
+                    search += "and M.partcode like '%'+@partcode+'%' ";
+                    dynamicParams.Add("@partcode", partcode);
+                }
+                if (partname != "" && partname != null)
+                {
+                    search += "and M.partname like '%'+@partname+'%' ";
+                    dynamicParams.Add("@partname", partname);
+                }
+                if (partspec != "" && partspec != null)
+                {
+                    search += "and M.partspec like '%'+@partspec+'%' ";
+                    dynamicParams.Add("@partspec", partspec);
+                }
+                if (stepname != "" && stepname != null)
+                {
+                    search += "and T.stepname like '%'+@stepname+'%' ";
+                    dynamicParams.Add("@stepname", stepname);
+                }
+                if (groupcode != "" && groupcode != null)
+                {
+                    search += "and G.group_code=@groupcode ";
+                    dynamicParams.Add("@groupcode", groupcode);
+                }
+                if (reportname != "" && reportname != null)
+                {
+                    search += "and U.username like '%'+@reportname+'%' ";
+                    dynamicParams.Add("@reportname", reportname);
+                }
+                if (reportopendate != "" && reportopendate != null)
+                {
+                    search += "and B.report_date between @reportopendate and @reportclosedate ";
+                    dynamicParams.Add("@reportopendate", reportopendate + " 00:00:00");
+                    dynamicParams.Add("@reportclosedate", reportclosedate + " 23:59:59");
+                }
+
+                if (search == "")
+                {
+                    search = "and 1=1 ";
+                }
+                search = search.Substring(3);//鎴彇绱㈠紩2鍚庨潰鐨勫瓧绗�
+                // --------------鏌ヨ鎸囧畾鏁版嵁--------------
+                var total = 0; //鎬绘潯鏁�
+                var sql = @"select distinct A.wo_code,M.partcode,M.partname,M.partspec,T.stepcode,T.stepname,A.task_qty,G.group_code,G.group_name,B.report_qty,isnull(S.unprice,0) as unprice,B.report_qty*isnull(S.unprice,0) as usermoney,U.username as lm_user,B.report_date  
+                            from TK_Wrk_Record A
+                            inner join TK_Wrk_RecordSub B on A.id=B.m_id
+                            inner join TK_Wrk_Step P on A.wo_code=P.wo_code and A.step_code=P.step_code and P.isend='Y'
+                            left  join TK_Wrk_Man K on A.wo_code=K.wo_code
+                            left  join TGroup G on B.usergroup_code=G.group_code
+                            left  join TPrteEqp_Stad S on A.materiel_code=S.materiel_code and A.eqp_code=S.eqp_code and A.step_code=S.step_code and K.route_code=S.route_code and K.wkshp_code=S.wkspcode
+                            left  join TMateriel_Info M on A.materiel_code=M.partcode
+                            left  join TStep T on A.step_code=T.stepcode
+                            left  join TUser U on B.report_person=U.usercode
+                            where " + search;
+                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
+                mes.code = "200";
+                mes.Message = "鏌ヨ鎴愬姛!";
+                mes.count = total;
+                mes.data = data.ToList();
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[浜哄憳宸ヨ祫鏄庣粏鎶ヨ〃瀵煎嚭]
+        public static ToMessage PeopleSalaryReportExcelSearch(string wocode, string partcode, string partname, string partspec, string stepname, string groupcode, string reportname, string reportopendate, string reportclosedate)
+        {
+            var dynamicParams = new DynamicParameters();
+            string search = "";
+            try
+            {
+                if (wocode != "" && wocode != null)
+                {
+                    search += "and A.wo_code like '%'+@wocode+'%' ";
+                    dynamicParams.Add("@wocode", wocode);
+                }
+                if (partcode != "" && partcode != null)
+                {
+                    search += "and M.partcode like '%'+@partcode+'%' ";
+                    dynamicParams.Add("@partcode", partcode);
+                }
+                if (partname != "" && partname != null)
+                {
+                    search += "and M.partname like '%'+@partname+'%' ";
+                    dynamicParams.Add("@partname", partname);
+                }
+                if (partspec != "" && partspec != null)
+                {
+                    search += "and M.partspec like '%'+@partspec+'%' ";
+                    dynamicParams.Add("@partspec", partspec);
+                }
+                if (stepname != "" && stepname != null)
+                {
+                    search += "and T.stepname like '%'+@stepname+'%' ";
+                    dynamicParams.Add("@stepname", stepname);
+                }
+                if (groupcode != "" && groupcode != null)
+                {
+                    search += "and G.group_code=@groupcode ";
+                    dynamicParams.Add("@groupcode", groupcode);
+                }
+                if (reportname != "" && reportname != null)
+                {
+                    search += "and U.username like '%'+@reportname+'%' ";
+                    dynamicParams.Add("@reportname", reportname);
+                }
+                if (reportopendate != "" && reportopendate != null)
+                {
+                    search += "and B.report_date between @reportopendate and @reportclosedate ";
+                    dynamicParams.Add("@reportopendate", reportopendate + " 00:00:00");
+                    dynamicParams.Add("@reportclosedate", reportclosedate + " 23:59:59");
+                }
+
+                if (search == "")
+                {
+                    search = "and 1=1 ";
+                }
+                search = search.Substring(3);//鎴彇绱㈠紩2鍚庨潰鐨勫瓧绗�
+                // --------------鏌ヨ鎸囧畾鏁版嵁--------------
+                var total = 0; //鎬绘潯鏁�
+                var sql = @"select distinct A.wo_code as 宸ュ崟缂栧彿,M.partcode as 浜у搧缂栫爜,M.partname as 浜у搧鍚嶇О,M.partspec as 浜у搧瑙勬牸,T.stepcode as 宸ュ簭缂栫爜,T.stepname as 宸ュ簭鍚嶇О,
+                            A.task_qty as 浠诲姟鏁伴噺,G.group_code as 鐢熶骇鐝粍缂栫爜,G.group_name as 鐢熶骇鐝粍鍚嶇О,B.report_qty as 鎶ュ伐鏁伴噺,isnull(S.unprice,0) as 宸ュ簭鍗曚环,
+                            B.report_qty*isnull(S.unprice,0) as 璁′欢宸ヨ祫,U.username as 鎶ュ伐浜哄憳,B.report_date as 鎶ュ伐鏃堕棿  
+                            from TK_Wrk_Record A
+                            inner join TK_Wrk_RecordSub B on A.id=B.m_id
+                            inner join TK_Wrk_Step P on A.wo_code=P.wo_code and A.step_code=P.step_code and P.isend='Y'
+                            left  join TK_Wrk_Man K on A.wo_code=K.wo_code
+                            left  join TGroup G on B.usergroup_code=G.group_code
+                            left  join TPrteEqp_Stad S on A.materiel_code=S.materiel_code and A.eqp_code=S.eqp_code and A.step_code=S.step_code and K.route_code=S.route_code and K.wkshp_code=S.wkspcode
+                            left  join TMateriel_Info M on A.materiel_code=M.partcode
+                            left  join TStep T on A.step_code=T.stepcode
+                            left  join TUser U on B.report_person=U.usercode
+                            where " + search;
+                DataTable data = DapperHelper.selectdata(sql, dynamicParams);
+                data.TableName = "Table"; //璁剧疆DataTable鐨勫悕绉�
+                string msg = DownLoad.DataTableToExcel(data, "浜哄憳宸ヨ祫鏄庣粏鎶ヨ〃");
+                mes.code = "200";
+                mes.Message = "鏌ヨ鎴愬姛!";
+                mes.count = total;
+                mes.data = msg;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+
+        #region[涓嶈壇鏄庣粏鎶ヨ〃]
+        public static ToMessage DefectDetailsReportSearch(string wocode, string partcode, string partname, string partspec, string stepname, string defectcode, string defectname, string reportname, string reportopendate, string reportclosedate, int startNum, int endNum, string prop, string order)
+        {
+            var dynamicParams = new DynamicParameters();
+            string search = "";
+            try
+            {
+                if (wocode != "" && wocode != null)
+                {
+                    search += "and A.wo_code like '%'+@wocode+'%' ";
+                    dynamicParams.Add("@wocode", wocode);
+                }
+                if (partcode != "" && partcode != null)
+                {
+                    search += "and M.partcode like '%'+@partcode+'%' ";
+                    dynamicParams.Add("@partcode", partcode);
+                }
+                if (partname != "" && partname != null)
+                {
+                    search += "and M.partname like '%'+@partname+'%' ";
+                    dynamicParams.Add("@partname", partname);
+                }
+                if (partspec != "" && partspec != null)
+                {
+                    search += "and M.partspec like '%'+@partspec+'%' ";
+                    dynamicParams.Add("@partspec", partspec);
+                }
+                if (stepname != "" && stepname != null)
+                {
+                    search += "and T.stepname like '%'+@stepname+'%' ";
+                    dynamicParams.Add("@stepname", stepname);
+                }
+                if (defectcode != "" && defectcode != null)
+                {
+                    search += "and T.stepcode like '%'+@defectcode+'%' ";
+                    dynamicParams.Add("@defectcode", defectcode);
+                }
+                if (defectname != "" && defectname != null)
+                {
+                    search += "and T.stepname like '%'+@defectname+'%' ";
+                    dynamicParams.Add("@defectname", defectname);
+                }
+                if (reportname != "" && reportname != null)
+                {
+                    search += "and U.username like '%'+@reportname+'%' ";
+                    dynamicParams.Add("@reportname", reportname);
+                }
+                if (reportopendate != "" && reportopendate != null)
+                {
+                    search += "and A.lm_date between @reportopendate and @reportclosedate ";
+                    dynamicParams.Add("@reportopendate", reportopendate + " 00:00:00");
+                    dynamicParams.Add("@reportclosedate", reportclosedate + " 23:59:59");
+                }
+
+                if (search == "")
+                {
+                    search = "and 1=1 ";
+                }
+                search = search.Substring(3);//鎴彇绱㈠紩2鍚庨潰鐨勫瓧绗�
+                // --------------鏌ヨ鎸囧畾鏁版嵁--------------
+                var total = 0; //鎬绘潯鏁�
+                var sql = @"select A.wo_code,M.partcode,M.partname,M.partspec,T.stepcode,T.stepname,P.plan_qty,A.defect_qty,
+                            F.code as defect_code,F.name as defect_name,A.style,U.username as lm_user,A.lm_date   
+                            from CSR_WorkRecord_Defect A
+                            inner join TK_Wrk_Step P on A.wo_code=P.wo_code and A.step_code=P.step_code 
+                            left  join TMateriel_Info M on A.partnumber=M.partcode
+                            left  join TStep T on A.step_code=T.stepcode
+                            left  join TDefect F on A.defect_code=F.code
+                            left  join TUser U on A.lm_user=U.usercode
+                            where " + search;
+                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
+                mes.code = "200";
+                mes.Message = "鏌ヨ鎴愬姛!";
+                mes.count = total;
+                mes.data = data.ToList();
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[涓嶈壇鏄庣粏鎶ヨ〃瀵煎嚭]
+        public static ToMessage DefectDetailsReportExcelSearch(string wocode, string partcode, string partname, string partspec, string stepname, string defectcode, string defectname, string reportname, string reportopendate, string reportclosedate)
+        {
+            var dynamicParams = new DynamicParameters();
+            string search = "";
+            try
+            {
+                if (wocode != "" && wocode != null)
+                {
+                    search += "and A.wo_code like '%'+@wocode+'%' ";
+                    dynamicParams.Add("@wocode", wocode);
+                }
+                if (partcode != "" && partcode != null)
+                {
+                    search += "and M.partcode like '%'+@partcode+'%' ";
+                    dynamicParams.Add("@partcode", partcode);
+                }
+                if (partname != "" && partname != null)
+                {
+                    search += "and M.partname like '%'+@partname+'%' ";
+                    dynamicParams.Add("@partname", partname);
+                }
+                if (partspec != "" && partspec != null)
+                {
+                    search += "and M.partspec like '%'+@partspec+'%' ";
+                    dynamicParams.Add("@partspec", partspec);
+                }
+                if (stepname != "" && stepname != null)
+                {
+                    search += "and T.stepname like '%'+@stepname+'%' ";
+                    dynamicParams.Add("@stepname", stepname);
+                }
+                if (defectcode != "" && defectcode != null)
+                {
+                    search += "and T.stepcode like '%'+@defectcode+'%' ";
+                    dynamicParams.Add("@defectcode", defectcode);
+                }
+                if (defectname != "" && defectname != null)
+                {
+                    search += "and T.stepname like '%'+@defectname+'%' ";
+                    dynamicParams.Add("@defectname", defectname);
+                }
+                if (reportname != "" && reportname != null)
+                {
+                    search += "and U.username like '%'+@reportname+'%' ";
+                    dynamicParams.Add("@reportname", reportname);
+                }
+                if (reportopendate != "" && reportopendate != null)
+                {
+                    search += "and A.lm_date between @reportopendate and @reportclosedate ";
+                    dynamicParams.Add("@reportopendate", reportopendate + " 00:00:00");
+                    dynamicParams.Add("@reportclosedate", reportclosedate + " 23:59:59");
+                }
+
+                if (search == "")
+                {
+                    search = "and 1=1 ";
+                }
+                search = search.Substring(3);//鎴彇绱㈠紩2鍚庨潰鐨勫瓧绗�
+                // --------------鏌ヨ鎸囧畾鏁版嵁--------------
+                var total = 0; //鎬绘潯鏁�
+                var sql = @"select A.wo_code as 宸ュ崟缂栧彿,M.partcode as 浜у搧缂栫爜,M.partname as 浜у搧鍚嶇О,M.partspec as 浜у搧瑙勬牸,T.stepcode as 宸ュ簭缂栫爜,
+                            T.stepname as 宸ュ簭鍚嶇О,P.plan_qty as 浠诲姟鏁伴噺,A.defect_qty as 涓嶈壇鏁伴噺,F.code as 缂洪櫡浠g爜,F.name as 缂洪櫡鍚嶇О,
+                            (case when A.style='B' then '鎶ュ伐' when A.style='S' then '鏀舵枡'  end) as '鎿嶄綔绫诲瀷',U.username as 鎿嶄綔浜哄憳,A.lm_date as 鎿嶄綔鏃堕棿  
+                            from CSR_WorkRecord_Defect A
+                            inner join TK_Wrk_Step P on A.wo_code=P.wo_code and A.step_code=P.step_code 
+                            left  join TMateriel_Info M on A.partnumber=M.partcode
+                            left  join TStep T on A.step_code=T.stepcode
+                            left  join TDefect F on A.defect_code=F.code
+                            left  join TUser U on A.lm_user=U.usercode
+                            where " + search;
+                DataTable data = DapperHelper.selectdata(sql, dynamicParams);
+                data.TableName = "Table"; //璁剧疆DataTable鐨勫悕绉�
+                string msg = DownLoad.DataTableToExcel(data, "涓嶈壇鏄庣粏鎶ヨ〃");
+                mes.code = "200";
+                mes.Message = "鏌ヨ鎴愬姛!";
+                mes.count = total;
+                mes.data = msg;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+
+        #region[鍝佽川寮傚父鎺掕鎶ヨ〃(鍙栨姤宸ヤ笉鑹褰曠己闄峰垎缁勬眹鎬绘潯鏁�)]
+        public static ToMessage QuaneryDefectReportSearch()
+        {
+            string sql = "";
+            var dynamicParams = new DynamicParameters();
+            try
+            {
+                //鑾峰彇鎶ュ伐涓嶈壇鍒嗙粍缁熻鏁版嵁
+                sql = @"select AA.cont,AA.name  from (
+                        select count(*) cont,F.name   from CSR_WorkRecord_Defect  A
+                        left  join TDefect F on A.defect_code=F.code
+                        group by F.code,F.name
+                        ) as AA order by AA.cont desc";
+                var data = DapperHelper.selecttable(sql);
+                mes.code = "200";
+                mes.Message = "鏌ヨ鎴愬姛!";
+                mes.data = data;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+
+        #region[缁翠慨鏄庣粏鎶ヨ〃]
+        public static ToMessage MaintenanceDetailsReportSearch(string wocode, string partcode, string partname, string partspec, string stepname, string style, string defectname, string repairname, string repairopendate, string repairclosedate, int startNum, int endNum, string prop, string order)
+        {
+            var dynamicParams = new DynamicParameters();
+            string search = "";
+            try
+            {
+                if (wocode != "" && wocode != null)
+                {
+                    search += "and AA.wo_code like '%'+@wocode+'%' ";
+                    dynamicParams.Add("@wocode", wocode);
+                }
+                if (partcode != "" && partcode != null)
+                {
+                    search += "and AA.partcode like '%'+@partcode+'%' ";
+                    dynamicParams.Add("@partcode", partcode);
+                }
+                if (partname != "" && partname != null)
+                {
+                    search += "and AA.partname like '%'+@partname+'%' ";
+                    dynamicParams.Add("@partname", partname);
+                }
+                if (partspec != "" && partspec != null)
+                {
+                    search += "and AA.partspec like '%'+@partspec+'%' ";
+                    dynamicParams.Add("@partspec", partspec);
+                }
+                if (stepname != "" && stepname != null)
+                {
+                    search += "and AA.stepname like '%'+@stepname+'%' ";
+                    dynamicParams.Add("@stepname", stepname);
+                }
+                if (style != "" && style != null)
+                {
+                    search += "and AA.style=@style ";
+                    dynamicParams.Add("@style", style);
+                }
+                if (defectname != "" && defectname != null)
+                {
+                    search += "and AA.defect_name like '%'+@defectname+'%' ";
+                    dynamicParams.Add("@defectname", defectname);
+                }
+                if (repairname != "" && repairname != null)
+                {
+                    search += "and AA.lm_user like '%'+@repairname+'%' ";
+                    dynamicParams.Add("@repairname", repairname);
+                }
+                if (repairopendate != "" && repairopendate != null)
+                {
+                    search += "and AA.lm_date between @repairopendate and @repairclosedate ";
+                    dynamicParams.Add("@repairopendate", repairopendate + " 00:00:00");
+                    dynamicParams.Add("@repairclosedate", repairclosedate + " 23:59:59");
+                }
+
+                if (search == "")
+                {
+                    search = "and 1=1 ";
+                }
+                search = search.Substring(3);//鎴彇绱㈠紩2鍚庨潰鐨勫瓧绗�
+                // --------------鏌ヨ鎸囧畾鏁版嵁--------------
+                var total = 0; //鎬绘潯鏁�
+                var sql = @"select AA.wo_code,AA.partcode,AA.partname,AA.partspec,AA.stepcode,AA.stepname,(case when AA.style='B' then '鎶ュ伐' when AA.style='S' then '鏀舵枡' end) as style,
+                            AA.plan_qty,AA.repair_qty,AA.bad_qty,AA.defect_code,AA.defect_name,AA.lm_user,AA.lm_date
+                            from(
+                            select F.wo_code,M.partcode,M.partname,M.partspec,S.stepcode,S.stepname,F.style,P.plan_qty,F.repair_qty,F.bad_qty,F.defect_code,
+                            defect_name = STUFF(( SELECT ',' + T.name
+                            FROM TDefect as T
+                            where PATINDEX('%,' + RTRIM(T.code) + ',%',',' + F.defect_code + ',')>0
+                            ORDER BY PATINDEX('%,' + RTRIM(T.code) + ',%',',' + F.defect_code + ',')
+                            FOR XML PATH('')), 1, 1,''),U.username as lm_user,F.lm_date
+                            from CSR_WorkRecord_DefectHandle as F
+                            inner join TK_Wrk_Step P on F.wo_code=P.wo_code and F.step_code=P.step_code 
+                            left  join TMateriel_Info M on F.partnumber=M.partcode
+                            left  join TStep S on F.step_code=S.stepcode
+                            left  join TUser U on F.lm_user=U.usercode
+                            ) as AA
+                            where " + search;
+                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
+                mes.code = "200";
+                mes.Message = "鏌ヨ鎴愬姛!";
+                mes.count = total;
+                mes.data = data.ToList();
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[缁翠慨鏄庣粏鎶ヨ〃瀵煎嚭]
+        public static ToMessage MaintenanceDetailsReportExcelSearch(string wocode, string partcode, string partname, string partspec, string stepname, string style, string defectname, string repairname, string repairopendate, string repairclosedate)
+        {
+            var dynamicParams = new DynamicParameters();
+            string search = "";
+            try
+            {
+                if (wocode != "" && wocode != null)
+                {
+                    search += "and AA.wo_code like '%'+@wocode+'%' ";
+                    dynamicParams.Add("@wocode", wocode);
+                }
+                if (partcode != "" && partcode != null)
+                {
+                    search += "and AA.partcode like '%'+@partcode+'%' ";
+                    dynamicParams.Add("@partcode", partcode);
+                }
+                if (partname != "" && partname != null)
+                {
+                    search += "and AA.partname like '%'+@partname+'%' ";
+                    dynamicParams.Add("@partname", partname);
+                }
+                if (partspec != "" && partspec != null)
+                {
+                    search += "and AA.partspec like '%'+@partspec+'%' ";
+                    dynamicParams.Add("@partspec", partspec);
+                }
+                if (stepname != "" && stepname != null)
+                {
+                    search += "and AA.stepname like '%'+@stepname+'%' ";
+                    dynamicParams.Add("@stepname", stepname);
+                }
+                if (style != "" && style != null)
+                {
+                    search += "and AA.style=@style ";
+                    dynamicParams.Add("@style", style);
+                }
+                if (defectname != "" && defectname != null)
+                {
+                    search += "and AA.defect_name like '%'+@defectname+'%' ";
+                    dynamicParams.Add("@defectname", defectname);
+                }
+                if (repairname != "" && repairname != null)
+                {
+                    search += "and AA.lm_user like '%'+@repairname+'%' ";
+                    dynamicParams.Add("@repairname", repairname);
+                }
+                if (repairopendate != "" && repairopendate != null)
+                {
+                    search += "and AA.lm_date between @repairopendate and @repairclosedate ";
+                    dynamicParams.Add("@repairopendate", repairopendate + " 00:00:00");
+                    dynamicParams.Add("@repairclosedate", repairclosedate + " 23:59:59");
+                }
+
+                if (search == "")
+                {
+                    search = "and 1=1 ";
+                }
+                search = search.Substring(3);//鎴彇绱㈠紩2鍚庨潰鐨勫瓧绗�
+                // --------------鏌ヨ鎸囧畾鏁版嵁--------------
+                var total = 0; //鎬绘潯鏁�
+                var sql = @"select AA.wo_code as 宸ュ崟缂栧彿,AA.partcode as 浜у搧缂栫爜,AA.partname as 浜у搧鍚嶇О,AA.partspec as 浜у搧瑙勬牸,AA.stepcode as 宸ュ簭缂栫爜,AA.stepname as 宸ュ簭鍚嶇О,
+                            (case when AA.style='B' then '鎶ュ伐' when AA.style='S' then '鏀舵枡' end) as 鎿嶄綔绫诲瀷,
+                            AA.plan_qty as 浠诲姟鏁伴噺,AA.repair_qty as 缁翠慨鏁伴噺,AA.bad_qty as 鎶ュ簾鏁伴噺,AA.defect_name as 缂洪櫡鍚嶇О,AA.lm_user as 缁翠慨浜哄憳,AA.lm_date as 缁翠慨鏃堕棿
+                            from(
+                            select F.wo_code,M.partcode,M.partname,M.partspec,S.stepcode,S.stepname,F.style,P.plan_qty,F.repair_qty,F.bad_qty,F.defect_code,
+                            defect_name = STUFF(( SELECT ',' + T.name
+                            FROM TDefect as T
+                            where PATINDEX('%,' + RTRIM(T.code) + ',%',',' + F.defect_code + ',')>0
+                            ORDER BY PATINDEX('%,' + RTRIM(T.code) + ',%',',' + F.defect_code + ',')
+                            FOR XML PATH('')), 1, 1,''),U.username as lm_user,F.lm_date
+                            from CSR_WorkRecord_DefectHandle as F
+                            inner join TK_Wrk_Step P on F.wo_code=P.wo_code and F.step_code=P.step_code 
+                            left  join TMateriel_Info M on F.partnumber=M.partcode
+                            left  join TStep S on F.step_code=S.stepcode
+                            left  join TUser U on F.lm_user=U.usercode
+                            ) as AA
+                            where " + search;
+                DataTable data = DapperHelper.selectdata(sql, dynamicParams);
+                data.TableName = "Table"; //璁剧疆DataTable鐨勫悕绉�
+                string msg = DownLoad.DataTableToExcel(data, "缁翠慨鏄庣粏鎶ヨ〃");
+                mes.code = "200";
+                mes.Message = "鏌ヨ鎴愬姛!";
+                mes.count = total;
+                mes.data = msg;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
     }
 }
\ No newline at end of file
diff --git a/VueWebApi/HtmlPage1.html b/VueWebApi/HtmlPage1.html
new file mode 100644
index 0000000..72213e9
--- /dev/null
+++ b/VueWebApi/HtmlPage1.html
@@ -0,0 +1,58 @@
+锘�<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
+    <title></title>
+    <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.11.3.min.js"></script>
+    <script>
+        var ws;
+        $().ready(function () {
+            $('#conn').click(function () {
+                ws = new WebSocket('wss://121.196.36.24:8001' + '/api/Send?clientName=' + '456');
+                $('#msg').append('<p>姝e湪杩炴帴</p>');
+
+                ws.onopen = function () {
+                    $('#msg').append('<p>宸茬粡杩炴帴</p>');
+                }
+                ws.onmessage = function (evt) {
+                    $('#msg').append('<p>' + evt.data + '</p>');
+                }
+                ws.onerror = function (evt) {
+                    $('#msg').append('<p>' + JSON.stringify(evt) + '</p>');
+                }
+                ws.onclose = function () {
+                    $('#msg').append('<p>宸茬粡鍏抽棴</p>');
+                }
+            });
+
+            $('#close').click(function () {
+                ws.close();
+            });
+
+            $('#send').click(function () {
+                if (ws.readyState == WebSocket.OPEN) {
+                    ws.send($("#to").val() + "|" + $('#content').val());
+                }
+                else {
+                    $('#tips').text('杩炴帴宸茬粡鍏抽棴');
+                }
+            });
+
+        });
+    </script>
+</head>
+<body>
+    <div>
+        <input id="user" type="text" />
+        <input id="conn" type="button" value="杩炴帴" />
+        <input id="close" type="button" value="鍏抽棴" /><br />
+        <span id="tips"></span>
+        <input id="content" type="text" />
+        <input id="send" type="button" value="鍙戦��" /><br />
+        <input id="to" type="text" />鐩殑鐢ㄦ埛
+        <div id="msg">
+        </div>
+    </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/VueWebApi/Logs/2022-09-14.TXT b/VueWebApi/Logs/2022-09-14.TXT
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/VueWebApi/Logs/2022-09-14.TXT
diff --git a/VueWebApi/Logs/2022-09-15.TXT b/VueWebApi/Logs/2022-09-15.TXT
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/VueWebApi/Logs/2022-09-15.TXT
diff --git a/VueWebApi/Logs/2022-09-16.TXT b/VueWebApi/Logs/2022-09-16.TXT
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/VueWebApi/Logs/2022-09-16.TXT
diff --git a/VueWebApi/Properties/PublishProfiles/FolderProfile.pubxml.user b/VueWebApi/Properties/PublishProfiles/FolderProfile.pubxml.user
index 52fd5d8..26af62f 100644
--- a/VueWebApi/Properties/PublishProfiles/FolderProfile.pubxml.user
+++ b/VueWebApi/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -5,7 +5,7 @@
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <_PublishTargetUrl>D:\缃戠珯鍙戝竷\XKDMesApi</_PublishTargetUrl>
-    <History>True|2022-09-12T05:07:40.5119225Z;True|2022-09-09T15:21:48.4251654+08:00;True|2022-09-09T14:45:54.9315147+08:00;True|2022-09-09T11:01:18.2619729+08:00;True|2022-09-09T09:35:40.9779148+08:00;True|2022-09-09T09:26:51.9854326+08:00;True|2022-09-09T09:11:48.8023373+08:00;True|2022-09-09T09:05:45.5528883+08:00;True|2022-09-08T17:47:35.2628987+08:00;True|2022-09-08T17:43:32.6700813+08:00;True|2022-09-08T17:01:23.6259930+08:00;True|2022-09-08T16:55:57.2305777+08:00;True|2022-09-08T16:35:37.3631720+08:00;True|2022-09-08T16:19:13.9122228+08:00;True|2022-09-08T16:04:07.7348285+08:00;True|2022-09-08T16:00:49.9961701+08:00;True|2022-09-08T15:16:03.0110619+08:00;True|2022-09-08T10:19:46.2872822+08:00;True|2022-09-08T10:11:15.5386438+08:00;True|2022-09-08T08:19:02.5242539+08:00;True|2022-09-08T08:18:11.7308721+08:00;True|2022-09-07T11:39:27.2463573+08:00;True|2022-09-07T10:40:57.8877369+08:00;True|2022-09-07T10:37:10.1517098+08:00;True|2022-09-07T10:30:08.7782107+08:00;True|2022-09-07T10:23:52.8534200+08:00;True|2022-09-07T10:09:31.6994230+08:00;True|2022-09-07T10:01:16.2683112+08:00;True|2022-09-07T09:51:47.6282546+08:00;True|2022-09-06T19:11:45.1701913+08:00;True|2022-09-06T18:29:29.2671862+08:00;True|2022-09-06T16:41:04.2719822+08:00;True|2022-09-06T14:17:31.6896132+08:00;True|2022-09-06T13:14:39.9657702+08:00;True|2022-09-05T13:34:47.0627238+08:00;True|2022-09-05T11:07:59.2835592+08:00;True|2022-09-02T14:01:56.1233378+08:00;True|2022-08-31T23:40:49.5468281+08:00;True|2022-08-31T22:15:50.0388123+08:00;True|2022-08-31T19:20:24.7693742+08:00;True|2022-08-31T19:00:06.8271626+08:00;True|2022-08-31T18:45:08.6483670+08:00;True|2022-08-31T16:59:34.8244511+08:00;True|2022-08-31T15:39:51.0653019+08:00;True|2022-08-31T15:25:32.5277796+08:00;True|2022-08-31T13:31:48.5734692+08:00;True|2022-08-31T12:59:02.1022191+08:00;True|2022-08-31T10:06:03.2043884+08:00;True|2022-08-30T17:36:34.5932064+08:00;True|2022-08-30T17:18:12.4582841+08:00;True|2022-08-30T12:55:16.4084322+08:00;True|2022-08-30T10:12:08.0975252+08:00;True|2022-08-30T09:12:46.2845546+08:00;True|2022-08-30T08:58:47.8389468+08:00;True|2022-08-29T17:21:17.7779579+08:00;True|2022-08-29T17:17:49.5334583+08:00;True|2022-08-29T16:53:46.6019453+08:00;True|2022-08-29T16:46:50.8158231+08:00;True|2022-08-29T12:25:19.0140888+08:00;True|2022-08-26T17:02:52.4614637+08:00;True|2022-08-26T16:52:47.8585471+08:00;True|2022-08-26T16:47:02.5766798+08:00;True|2022-08-26T16:36:15.5793109+08:00;True|2022-08-26T16:15:55.1795297+08:00;True|2022-08-26T16:00:22.2697361+08:00;False|2022-08-26T15:58:16.7347649+08:00;True|2022-08-26T15:22:29.6367466+08:00;True|2022-08-25T20:02:24.4685508+08:00;True|2022-08-25T19:50:42.8601696+08:00;True|2022-08-25T15:56:20.3615518+08:00;True|2022-08-25T15:48:16.9923580+08:00;True|2022-08-25T15:27:07.9474640+08:00;True|2022-08-25T13:11:36.9626131+08:00;True|2022-08-24T14:10:58.2790665+08:00;True|2022-08-24T11:43:10.4463552+08:00;True|2022-08-24T08:02:17.9871411+08:00;True|2022-08-23T22:50:41.0238571+08:00;True|2022-08-23T22:16:20.9249814+08:00;True|2022-08-23T21:59:21.1909300+08:00;True|2022-08-23T21:50:40.8106496+08:00;True|2022-08-23T21:06:55.6611505+08:00;True|2022-08-23T19:49:07.0507418+08:00;True|2022-08-23T19:03:15.9808046+08:00;True|2022-08-23T18:58:57.1700899+08:00;True|2022-08-23T18:54:26.8058591+08:00;True|2022-08-23T18:45:39.1928602+08:00;True|2022-08-23T17:32:10.6125039+08:00;True|2022-08-23T15:58:34.9205174+08:00;True|2022-08-23T15:49:21.3383764+08:00;True|2022-08-23T15:14:21.0775398+08:00;True|2022-08-23T15:04:07.8829410+08:00;True|2022-08-23T14:59:17.5143895+08:00;True|2022-08-23T14:55:17.0069050+08:00;True|2022-08-23T14:41:41.0884731+08:00;True|2022-08-23T14:41:06.5045325+08:00;True|2022-08-23T14:28:54.7390570+08:00;True|2022-08-23T13:56:59.3670549+08:00;True|2022-08-23T13:56:38.8588174+08:00;True|2022-08-22T20:48:56.2180227+08:00;True|2022-08-22T19:07:12.1093584+08:00;True|2022-08-22T19:04:07.7837887+08:00;True|2022-08-22T14:38:00.9342884+08:00;True|2022-08-22T10:59:23.2073567+08:00;True|2022-08-22T10:53:58.0920733+08:00;True|2022-08-22T10:53:10.2446944+08:00;True|2022-08-22T10:43:35.3791396+08:00;True|2022-08-18T09:45:46.4643950+08:00;True|2022-08-18T09:40:55.2601145+08:00;True|2022-08-16T16:17:14.3399134+08:00;True|2022-08-15T17:58:16.1460123+08:00;True|2022-08-15T17:55:55.7137518+08:00;True|2022-08-15T17:44:37.6024482+08:00;True|2022-08-15T17:44:21.9583041+08:00;True|2022-08-15T17:43:23.1305690+08:00;True|2022-08-15T17:29:31.1670490+08:00;True|2022-08-15T17:26:42.9269470+08:00;True|2022-08-15T17:23:27.0940168+08:00;True|2022-08-15T17:07:32.9192045+08:00;True|2022-08-15T16:47:03.8611076+08:00;True|2022-08-15T16:41:50.6843705+08:00;True|2022-08-15T16:38:26.7407413+08:00;True|2022-08-15T16:31:49.0805578+08:00;True|2022-08-15T16:27:33.6712012+08:00;True|2022-08-15T16:24:35.1042794+08:00;True|2022-08-15T16:21:57.2757683+08:00;True|2022-08-15T16:18:17.3545368+08:00;True|2022-08-15T16:15:04.2645412+08:00;True|2022-08-15T14:44:09.3078026+08:00;True|2022-08-15T11:20:09.2930712+08:00;True|2022-08-15T10:42:12.2991587+08:00;True|2022-08-15T10:41:38.3711025+08:00;True|2022-08-15T10:19:06.9974383+08:00;True|2022-08-12T17:15:09.2133281+08:00;True|2022-08-12T10:48:05.8776009+08:00;True|2022-08-12T10:26:16.4183447+08:00;True|2022-08-12T08:33:01.9502005+08:00;True|2022-08-11T09:06:08.8394009+08:00;True|2022-08-11T08:39:06.2534634+08:00;True|2022-08-11T08:05:13.6919725+08:00;True|2022-08-08T14:48:16.3637965+08:00;True|2022-08-05T15:44:02.3797448+08:00;True|2022-08-05T09:57:55.7744103+08:00;True|2022-08-04T15:24:38.8785046+08:00;True|2022-08-04T15:11:16.7054147+08:00;True|2022-08-04T14:53:52.7239932+08:00;True|2022-08-04T14:48:35.6115863+08:00;True|2022-08-04T14:39:16.1113507+08:00;True|2022-08-04T12:26:39.4998322+08:00;True|2022-08-04T10:34:23.9626503+08:00;True|2022-08-04T08:12:51.4305728+08:00;True|2022-08-03T15:43:09.2317512+08:00;True|2022-08-02T19:17:55.0460145+08:00;True|2022-08-02T19:08:13.5872184+08:00;True|2022-08-02T18:50:12.1280167+08:00;True|2022-08-02T18:05:53.6540810+08:00;True|2022-08-02T16:13:26.3567210+08:00;True|2022-08-02T15:27:59.9264333+08:00;True|2022-07-25T15:35:49.6958399+08:00;True|2022-07-25T15:30:40.4444876+08:00;True|2022-07-25T13:33:38.4068153+08:00;True|2022-07-22T15:00:56.7326322+08:00;True|2022-07-22T14:51:18.0169121+08:00;True|2022-07-22T14:26:08.4246205+08:00;True|2022-07-22T14:23:05.0897016+08:00;True|2022-07-22T14:18:18.7806854+08:00;True|2022-07-22T14:09:29.7924367+08:00;True|2022-07-22T14:02:26.6403133+08:00;True|2022-07-22T13:56:40.0887615+08:00;True|2022-07-22T13:50:10.7852190+08:00;True|2022-07-22T11:38:25.6671780+08:00;True|2022-07-22T10:55:36.7947659+08:00;True|2022-07-21T17:53:41.1464086+08:00;True|2022-07-21T17:43:33.5311479+08:00;True|2022-07-21T16:09:07.7687640+08:00;True|2022-07-21T16:04:47.9317019+08:00;True|2022-07-21T15:58:21.2359033+08:00;True|2022-07-21T15:56:07.7425829+08:00;True|2022-07-21T15:51:34.7108381+08:00;True|2022-07-21T15:48:57.5735708+08:00;True|2022-07-21T15:44:25.8205030+08:00;True|2022-07-21T15:25:51.4222269+08:00;True|2022-07-21T15:22:36.8818295+08:00;True|2022-07-21T15:19:28.8532774+08:00;True|2022-07-21T14:57:45.7532568+08:00;True|2022-07-21T11:16:12.0900762+08:00;True|2022-07-21T10:10:40.4714948+08:00;True|2022-07-21T10:00:19.5258058+08:00;True|2022-07-14T14:34:28.5093226+08:00;True|2022-07-14T13:59:59.7754985+08:00;True|2022-07-14T12:46:29.6685284+08:00;True|2022-07-14T09:22:25.9079652+08:00;True|2022-07-14T09:22:04.6797478+08:00;True|2022-07-14T09:10:45.0177607+08:00;True|2022-07-14T08:41:43.3026713+08:00;True|2022-07-14T08:27:32.7454972+08:00;True|2022-07-14T08:21:58.6572366+08:00;True|2022-07-14T08:17:59.2904747+08:00;True|2022-07-14T08:12:39.8483472+08:00;True|2022-06-30T15:04:41.6941982+08:00;True|2022-06-24T16:39:01.1080301+08:00;True|2022-06-17T13:23:15.1455451+08:00;True|2022-06-17T13:22:18.5517557+08:00;True|2022-06-17T13:19:27.7323818+08:00;True|2022-06-17T13:12:24.1252779+08:00;True|2022-06-17T13:09:20.4234258+08:00;True|2022-06-17T13:06:49.9869509+08:00;True|2022-06-17T12:58:54.6964621+08:00;False|2022-06-17T12:58:10.6767711+08:00;False|2022-06-17T12:57:08.9747950+08:00;False|2022-06-17T12:56:18.4650121+08:00;False|2022-06-17T12:55:57.9981927+08:00;True|2022-06-13T14:21:36.5610928+08:00;True|2022-06-13T11:41:39.4210151+08:00;True|2022-06-11T02:35:03.4727934+08:00;True|2022-06-11T02:31:13.7362660+08:00;True|2022-06-11T02:30:58.3616790+08:00;True|2022-06-11T01:57:04.4951468+08:00;True|2022-06-10T13:27:13.2097124+08:00;</History>
+    <History>True|2022-09-16T06:31:58.5334673Z;True|2022-09-16T09:04:53.3449040+08:00;True|2022-09-15T15:15:18.3159768+08:00;True|2022-09-14T17:46:23.0171281+08:00;True|2022-09-14T17:43:44.4370239+08:00;True|2022-09-14T17:34:30.3167863+08:00;True|2022-09-14T17:33:00.5148855+08:00;True|2022-09-14T17:06:32.0879029+08:00;True|2022-09-14T16:50:12.7189783+08:00;True|2022-09-14T16:47:48.3868826+08:00;True|2022-09-14T16:42:35.3830356+08:00;True|2022-09-14T16:41:37.8545801+08:00;True|2022-09-14T16:36:47.0944090+08:00;True|2022-09-14T16:26:00.8638173+08:00;True|2022-09-14T16:13:43.6329252+08:00;True|2022-09-14T16:04:16.8093275+08:00;True|2022-09-14T16:02:54.4702614+08:00;True|2022-09-14T15:57:15.9623104+08:00;True|2022-09-14T15:54:23.8745601+08:00;True|2022-09-14T15:49:40.1730864+08:00;True|2022-09-14T15:42:08.2811334+08:00;True|2022-09-14T15:26:40.0417771+08:00;True|2022-09-14T15:24:30.2187269+08:00;True|2022-09-14T15:16:30.3856771+08:00;True|2022-09-14T15:09:22.4313367+08:00;True|2022-09-14T14:59:14.3795036+08:00;True|2022-09-14T14:53:26.8923244+08:00;True|2022-09-14T14:44:00.6688344+08:00;True|2022-09-14T14:41:53.3908108+08:00;True|2022-09-14T14:40:40.3787118+08:00;True|2022-09-14T14:28:39.2273279+08:00;True|2022-09-14T14:27:13.3566861+08:00;True|2022-09-14T14:25:25.4360688+08:00;True|2022-09-14T14:20:42.9734032+08:00;True|2022-09-14T13:51:39.1303401+08:00;True|2022-09-14T13:25:34.8906041+08:00;True|2022-09-14T13:19:28.9172079+08:00;True|2022-09-14T13:18:09.5900815+08:00;True|2022-09-14T10:58:58.0910068+08:00;True|2022-09-14T10:57:11.4834444+08:00;True|2022-09-14T10:45:39.8943674+08:00;True|2022-09-14T10:38:15.2282286+08:00;True|2022-09-14T10:36:54.8259640+08:00;True|2022-09-14T10:14:12.1218790+08:00;True|2022-09-14T10:13:20.0625618+08:00;True|2022-09-14T10:10:15.3538379+08:00;True|2022-09-14T10:07:09.4796434+08:00;True|2022-09-14T10:06:02.0382235+08:00;True|2022-09-14T09:57:12.0082796+08:00;True|2022-09-14T09:52:29.4689029+08:00;True|2022-09-14T09:47:26.7205193+08:00;True|2022-09-14T09:38:56.4089520+08:00;True|2022-09-14T09:32:34.9863473+08:00;True|2022-09-12T13:07:40.5119225+08:00;True|2022-09-09T15:21:48.4251654+08:00;True|2022-09-09T14:45:54.9315147+08:00;True|2022-09-09T11:01:18.2619729+08:00;True|2022-09-09T09:35:40.9779148+08:00;True|2022-09-09T09:26:51.9854326+08:00;True|2022-09-09T09:11:48.8023373+08:00;True|2022-09-09T09:05:45.5528883+08:00;True|2022-09-08T17:47:35.2628987+08:00;True|2022-09-08T17:43:32.6700813+08:00;True|2022-09-08T17:01:23.6259930+08:00;True|2022-09-08T16:55:57.2305777+08:00;True|2022-09-08T16:35:37.3631720+08:00;True|2022-09-08T16:19:13.9122228+08:00;True|2022-09-08T16:04:07.7348285+08:00;True|2022-09-08T16:00:49.9961701+08:00;True|2022-09-08T15:16:03.0110619+08:00;True|2022-09-08T10:19:46.2872822+08:00;True|2022-09-08T10:11:15.5386438+08:00;True|2022-09-08T08:19:02.5242539+08:00;True|2022-09-08T08:18:11.7308721+08:00;True|2022-09-07T11:39:27.2463573+08:00;True|2022-09-07T10:40:57.8877369+08:00;True|2022-09-07T10:37:10.1517098+08:00;True|2022-09-07T10:30:08.7782107+08:00;True|2022-09-07T10:23:52.8534200+08:00;True|2022-09-07T10:09:31.6994230+08:00;True|2022-09-07T10:01:16.2683112+08:00;True|2022-09-07T09:51:47.6282546+08:00;True|2022-09-06T19:11:45.1701913+08:00;True|2022-09-06T18:29:29.2671862+08:00;True|2022-09-06T16:41:04.2719822+08:00;True|2022-09-06T14:17:31.6896132+08:00;True|2022-09-06T13:14:39.9657702+08:00;True|2022-09-05T13:34:47.0627238+08:00;True|2022-09-05T11:07:59.2835592+08:00;True|2022-09-02T14:01:56.1233378+08:00;True|2022-08-31T23:40:49.5468281+08:00;True|2022-08-31T22:15:50.0388123+08:00;True|2022-08-31T19:20:24.7693742+08:00;True|2022-08-31T19:00:06.8271626+08:00;True|2022-08-31T18:45:08.6483670+08:00;True|2022-08-31T16:59:34.8244511+08:00;True|2022-08-31T15:39:51.0653019+08:00;True|2022-08-31T15:25:32.5277796+08:00;True|2022-08-31T13:31:48.5734692+08:00;True|2022-08-31T12:59:02.1022191+08:00;True|2022-08-31T10:06:03.2043884+08:00;True|2022-08-30T17:36:34.5932064+08:00;True|2022-08-30T17:18:12.4582841+08:00;True|2022-08-30T12:55:16.4084322+08:00;True|2022-08-30T10:12:08.0975252+08:00;True|2022-08-30T09:12:46.2845546+08:00;True|2022-08-30T08:58:47.8389468+08:00;True|2022-08-29T17:21:17.7779579+08:00;True|2022-08-29T17:17:49.5334583+08:00;True|2022-08-29T16:53:46.6019453+08:00;True|2022-08-29T16:46:50.8158231+08:00;True|2022-08-29T12:25:19.0140888+08:00;True|2022-08-26T17:02:52.4614637+08:00;True|2022-08-26T16:52:47.8585471+08:00;True|2022-08-26T16:47:02.5766798+08:00;True|2022-08-26T16:36:15.5793109+08:00;True|2022-08-26T16:15:55.1795297+08:00;True|2022-08-26T16:00:22.2697361+08:00;False|2022-08-26T15:58:16.7347649+08:00;True|2022-08-26T15:22:29.6367466+08:00;True|2022-08-25T20:02:24.4685508+08:00;True|2022-08-25T19:50:42.8601696+08:00;True|2022-08-25T15:56:20.3615518+08:00;True|2022-08-25T15:48:16.9923580+08:00;True|2022-08-25T15:27:07.9474640+08:00;True|2022-08-25T13:11:36.9626131+08:00;True|2022-08-24T14:10:58.2790665+08:00;True|2022-08-24T11:43:10.4463552+08:00;True|2022-08-24T08:02:17.9871411+08:00;True|2022-08-23T22:50:41.0238571+08:00;True|2022-08-23T22:16:20.9249814+08:00;True|2022-08-23T21:59:21.1909300+08:00;True|2022-08-23T21:50:40.8106496+08:00;True|2022-08-23T21:06:55.6611505+08:00;True|2022-08-23T19:49:07.0507418+08:00;True|2022-08-23T19:03:15.9808046+08:00;True|2022-08-23T18:58:57.1700899+08:00;True|2022-08-23T18:54:26.8058591+08:00;True|2022-08-23T18:45:39.1928602+08:00;True|2022-08-23T17:32:10.6125039+08:00;True|2022-08-23T15:58:34.9205174+08:00;True|2022-08-23T15:49:21.3383764+08:00;True|2022-08-23T15:14:21.0775398+08:00;True|2022-08-23T15:04:07.8829410+08:00;True|2022-08-23T14:59:17.5143895+08:00;True|2022-08-23T14:55:17.0069050+08:00;True|2022-08-23T14:41:41.0884731+08:00;True|2022-08-23T14:41:06.5045325+08:00;True|2022-08-23T14:28:54.7390570+08:00;True|2022-08-23T13:56:59.3670549+08:00;True|2022-08-23T13:56:38.8588174+08:00;True|2022-08-22T20:48:56.2180227+08:00;True|2022-08-22T19:07:12.1093584+08:00;True|2022-08-22T19:04:07.7837887+08:00;True|2022-08-22T14:38:00.9342884+08:00;True|2022-08-22T10:59:23.2073567+08:00;True|2022-08-22T10:53:58.0920733+08:00;True|2022-08-22T10:53:10.2446944+08:00;True|2022-08-22T10:43:35.3791396+08:00;True|2022-08-18T09:45:46.4643950+08:00;True|2022-08-18T09:40:55.2601145+08:00;True|2022-08-16T16:17:14.3399134+08:00;True|2022-08-15T17:58:16.1460123+08:00;True|2022-08-15T17:55:55.7137518+08:00;True|2022-08-15T17:44:37.6024482+08:00;True|2022-08-15T17:44:21.9583041+08:00;True|2022-08-15T17:43:23.1305690+08:00;True|2022-08-15T17:29:31.1670490+08:00;True|2022-08-15T17:26:42.9269470+08:00;True|2022-08-15T17:23:27.0940168+08:00;True|2022-08-15T17:07:32.9192045+08:00;True|2022-08-15T16:47:03.8611076+08:00;True|2022-08-15T16:41:50.6843705+08:00;True|2022-08-15T16:38:26.7407413+08:00;True|2022-08-15T16:31:49.0805578+08:00;True|2022-08-15T16:27:33.6712012+08:00;True|2022-08-15T16:24:35.1042794+08:00;True|2022-08-15T16:21:57.2757683+08:00;True|2022-08-15T16:18:17.3545368+08:00;True|2022-08-15T16:15:04.2645412+08:00;True|2022-08-15T14:44:09.3078026+08:00;True|2022-08-15T11:20:09.2930712+08:00;True|2022-08-15T10:42:12.2991587+08:00;True|2022-08-15T10:41:38.3711025+08:00;True|2022-08-15T10:19:06.9974383+08:00;True|2022-08-12T17:15:09.2133281+08:00;True|2022-08-12T10:48:05.8776009+08:00;True|2022-08-12T10:26:16.4183447+08:00;True|2022-08-12T08:33:01.9502005+08:00;True|2022-08-11T09:06:08.8394009+08:00;True|2022-08-11T08:39:06.2534634+08:00;True|2022-08-11T08:05:13.6919725+08:00;True|2022-08-08T14:48:16.3637965+08:00;True|2022-08-05T15:44:02.3797448+08:00;True|2022-08-05T09:57:55.7744103+08:00;True|2022-08-04T15:24:38.8785046+08:00;True|2022-08-04T15:11:16.7054147+08:00;True|2022-08-04T14:53:52.7239932+08:00;True|2022-08-04T14:48:35.6115863+08:00;True|2022-08-04T14:39:16.1113507+08:00;True|2022-08-04T12:26:39.4998322+08:00;True|2022-08-04T10:34:23.9626503+08:00;True|2022-08-04T08:12:51.4305728+08:00;True|2022-08-03T15:43:09.2317512+08:00;True|2022-08-02T19:17:55.0460145+08:00;True|2022-08-02T19:08:13.5872184+08:00;True|2022-08-02T18:50:12.1280167+08:00;True|2022-08-02T18:05:53.6540810+08:00;True|2022-08-02T16:13:26.3567210+08:00;True|2022-08-02T15:27:59.9264333+08:00;True|2022-07-25T15:35:49.6958399+08:00;True|2022-07-25T15:30:40.4444876+08:00;True|2022-07-25T13:33:38.4068153+08:00;True|2022-07-22T15:00:56.7326322+08:00;True|2022-07-22T14:51:18.0169121+08:00;True|2022-07-22T14:26:08.4246205+08:00;True|2022-07-22T14:23:05.0897016+08:00;True|2022-07-22T14:18:18.7806854+08:00;True|2022-07-22T14:09:29.7924367+08:00;True|2022-07-22T14:02:26.6403133+08:00;True|2022-07-22T13:56:40.0887615+08:00;True|2022-07-22T13:50:10.7852190+08:00;True|2022-07-22T11:38:25.6671780+08:00;True|2022-07-22T10:55:36.7947659+08:00;True|2022-07-21T17:53:41.1464086+08:00;True|2022-07-21T17:43:33.5311479+08:00;True|2022-07-21T16:09:07.7687640+08:00;True|2022-07-21T16:04:47.9317019+08:00;True|2022-07-21T15:58:21.2359033+08:00;True|2022-07-21T15:56:07.7425829+08:00;True|2022-07-21T15:51:34.7108381+08:00;True|2022-07-21T15:48:57.5735708+08:00;True|2022-07-21T15:44:25.8205030+08:00;True|2022-07-21T15:25:51.4222269+08:00;True|2022-07-21T15:22:36.8818295+08:00;True|2022-07-21T15:19:28.8532774+08:00;True|2022-07-21T14:57:45.7532568+08:00;True|2022-07-21T11:16:12.0900762+08:00;True|2022-07-21T10:10:40.4714948+08:00;True|2022-07-21T10:00:19.5258058+08:00;True|2022-07-14T14:34:28.5093226+08:00;True|2022-07-14T13:59:59.7754985+08:00;True|2022-07-14T12:46:29.6685284+08:00;True|2022-07-14T09:22:25.9079652+08:00;True|2022-07-14T09:22:04.6797478+08:00;True|2022-07-14T09:10:45.0177607+08:00;True|2022-07-14T08:41:43.3026713+08:00;True|2022-07-14T08:27:32.7454972+08:00;True|2022-07-14T08:21:58.6572366+08:00;True|2022-07-14T08:17:59.2904747+08:00;True|2022-07-14T08:12:39.8483472+08:00;True|2022-06-30T15:04:41.6941982+08:00;True|2022-06-24T16:39:01.1080301+08:00;True|2022-06-17T13:23:15.1455451+08:00;True|2022-06-17T13:22:18.5517557+08:00;True|2022-06-17T13:19:27.7323818+08:00;True|2022-06-17T13:12:24.1252779+08:00;True|2022-06-17T13:09:20.4234258+08:00;True|2022-06-17T13:06:49.9869509+08:00;True|2022-06-17T12:58:54.6964621+08:00;False|2022-06-17T12:58:10.6767711+08:00;False|2022-06-17T12:57:08.9747950+08:00;False|2022-06-17T12:56:18.4650121+08:00;False|2022-06-17T12:55:57.9981927+08:00;True|2022-06-13T14:21:36.5610928+08:00;True|2022-06-13T11:41:39.4210151+08:00;True|2022-06-11T02:35:03.4727934+08:00;True|2022-06-11T02:31:13.7362660+08:00;True|2022-06-11T02:30:58.3616790+08:00;True|2022-06-11T01:57:04.4951468+08:00;True|2022-06-10T13:27:13.2097124+08:00;</History>
   </PropertyGroup>
   <ItemGroup>
     <File Include="Areas/HelpPage/HelpPage.css">
@@ -720,16 +720,16 @@
       <publishTime>12/24/2021 15:38:29</publishTime>
     </File>
     <File Include="bin/VueWebApi.dll">
-      <publishTime>09/12/2022 13:07:28</publishTime>
+      <publishTime>09/16/2022 14:31:51</publishTime>
     </File>
     <File Include="bin/VueWebApi.dll.config">
       <publishTime>06/15/2022 15:31:43</publishTime>
     </File>
     <File Include="bin/VueWebApi.pdb">
-      <publishTime>09/12/2022 13:07:28</publishTime>
+      <publishTime>09/16/2022 14:31:51</publishTime>
     </File>
     <File Include="bin/VueWebApi.xml">
-      <publishTime>09/12/2022 13:07:27</publishTime>
+      <publishTime>09/16/2022 14:31:51</publishTime>
     </File>
     <File Include="bin/WebActivatorEx.dll">
       <publishTime>02/08/2013 16:42:28</publishTime>
@@ -1280,6 +1280,9 @@
     <File Include="Grid/webapp-ws-tutorial.htm">
       <publishTime>07/08/2022 15:15:11</publishTime>
     </File>
+    <File Include="HtmlPage1.html">
+      <publishTime>09/14/2022 17:56:08</publishTime>
+    </File>
     <File Include="Hubs/HubsMessage.html">
       <publishTime>09/08/2022 17:51:08</publishTime>
     </File>
@@ -1518,7 +1521,7 @@
       <publishTime>06/10/2022 08:20:24</publishTime>
     </File>
     <File Include="Web.config">
-      <publishTime>09/12/2022 13:07:39</publishTime>
+      <publishTime>09/16/2022 14:31:57</publishTime>
     </File>
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/VueWebApi/Tools/TestSocket.cs b/VueWebApi/Tools/TestSocket.cs
index 05f3291..501eba6 100644
--- a/VueWebApi/Tools/TestSocket.cs
+++ b/VueWebApi/Tools/TestSocket.cs
@@ -18,32 +18,40 @@
 
         public void socketServer()
         {
-            string serverIP = System.Configuration.ConfigurationManager.AppSettings["FileIP"]; //鏈嶅姟鍣↖P鍦板潃
-            var server = new WebSocketServer(serverIP);
-            server.Start(socket =>//鏈嶅姟寮�濮�
+            try
             {
-                var userid = socket.ConnectionInfo.Path.Split('?')[1].Split('=')[1];
+                string serverIP = System.Configuration.ConfigurationManager.AppSettings["serverIP"]; //鏈嶅姟鍣↖P鍦板潃
+                var server = new WebSocketServer(serverIP);
+                server.Start(socket =>//鏈嶅姟寮�濮�
+                {
+                    var userid = socket.ConnectionInfo.Path.Split('?')[1].Split('=')[1];
 
-                socket.OnOpen = () =>
-                {
-                    Console.WriteLine("Open!");
-                    allSockets.Add(userid, socket);
-                };
-                socket.OnClose = () =>
-                {
-                    Console.WriteLine("Close!");
-                    allSockets.Remove(userid);
-                };
-                socket.OnMessage = message =>
-                {
-                    //瀹㈡埛绔氦浜掔殑娑堟伅
-                    //System.Timers.Timer t = new System.Timers.Timer(10000);//瀹炰緥鍖朤imer绫伙紝璁剧疆闂撮殧鏃堕棿涓�10000姣锛�
-                    //t.Elapsed += new System.Timers.ElapsedEventHandler(theout);//鍒拌揪鏃堕棿鐨勬椂鍊欐墽琛屼簨浠讹紱
-                    //t.AutoReset = true;//璁剧疆鏄墽琛屼竴娆★紙false锛夎繕鏄竴鐩存墽琛�(true)锛�
-                    //t.Enabled = true;//鏄惁鎵цSystem.Timers.Timer.Elapsed浜嬩欢锛�
-                    allSockets.ToList().ForEach(s => s.Value.Send("Echo: " + msg));
-                };
-            });
+                    socket.OnOpen = () =>
+                    {
+                        Console.WriteLine("Open!");
+                        allSockets.Add(userid, socket);
+                    };
+                    socket.OnClose = () =>
+                    {
+                        Console.WriteLine("Close!");
+                        allSockets.Remove(userid);
+                    };
+                    socket.OnMessage = message =>
+                    {
+                        //瀹㈡埛绔氦浜掔殑娑堟伅
+                        //System.Timers.Timer t = new System.Timers.Timer(10000);//瀹炰緥鍖朤imer绫伙紝璁剧疆闂撮殧鏃堕棿涓�10000姣锛�
+                        //t.Elapsed += new System.Timers.ElapsedEventHandler(theout);//鍒拌揪鏃堕棿鐨勬椂鍊欐墽琛屼簨浠讹紱
+                        //t.AutoReset = true;//璁剧疆鏄墽琛屼竴娆★紙false锛夎繕鏄竴鐩存墽琛�(true)锛�
+                        //t.Enabled = true;//鏄惁鎵цSystem.Timers.Timer.Elapsed浜嬩欢锛�
+                        allSockets.ToList().ForEach(s => s.Value.Send("Echo: " + msg));
+                    };
+                });
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+           
         }
 
         /// <summary>
diff --git a/VueWebApi/VueWebApi.csproj b/VueWebApi/VueWebApi.csproj
index f0c3a8c..e30278a 100644
--- a/VueWebApi/VueWebApi.csproj
+++ b/VueWebApi/VueWebApi.csproj
@@ -418,6 +418,7 @@
     <Content Include="Global.asax" />
     <Content Include="Grid\grwebapp.js" />
     <Content Include="Grid\webapp-ws-tutorial.htm" />
+    <Content Include="HtmlPage1.html" />
     <Content Include="Hubs\HubsMessage2.html" />
     <Content Include="Hubs\HubsMessage1.html" />
     <Content Include="Hubs\HubsMessage.html" />
diff --git a/VueWebApi/Web.config b/VueWebApi/Web.config
index e0e8320..6fa534a 100644
--- a/VueWebApi/Web.config
+++ b/VueWebApi/Web.config
@@ -25,6 +25,7 @@
 		<!--key澶辨晥鏃堕棿30绉�-->
 		<add key="RedisKeyTimeCont" value="120" />
 		<!--Excel瀵煎嚭妯℃澘閰嶇疆IP-->
+		<add key="serverIP" value="wss://121.196.36.24:8001" />
 		<add key="FileIP" value="http://121.196.36.24:8001/" />
 		<add key="webpages:Version" value="3.0.0.0" />
 		<add key="webpages:Enabled" value="false" />
diff --git a/VueWebApi/bin/VueWebApi.dll.config b/VueWebApi/bin/VueWebApi.dll.config
index e0e8320..6fa534a 100644
--- a/VueWebApi/bin/VueWebApi.dll.config
+++ b/VueWebApi/bin/VueWebApi.dll.config
@@ -25,6 +25,7 @@
 		<!--key澶辨晥鏃堕棿30绉�-->
 		<add key="RedisKeyTimeCont" value="120" />
 		<!--Excel瀵煎嚭妯℃澘閰嶇疆IP-->
+		<add key="serverIP" value="wss://121.196.36.24:8001" />
 		<add key="FileIP" value="http://121.196.36.24:8001/" />
 		<add key="webpages:Version" value="3.0.0.0" />
 		<add key="webpages:Enabled" value="false" />
diff --git a/VueWebApi/bin/VueWebApi.pdb b/VueWebApi/bin/VueWebApi.pdb
index 9d23fde..a118357 100644
--- a/VueWebApi/bin/VueWebApi.pdb
+++ b/VueWebApi/bin/VueWebApi.pdb
Binary files differ
diff --git a/VueWebApi/bin/VueWebApi.xml b/VueWebApi/bin/VueWebApi.xml
index 3538dc0..7aa5a76 100644
--- a/VueWebApi/bin/VueWebApi.xml
+++ b/VueWebApi/bin/VueWebApi.xml
@@ -556,6 +556,146 @@
             <param name="order">鎺掑簭瑙勫垯</param>
             <returns></returns>
         </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.GroupSalaryReportSearchUser(System.String)">
+            <summary>
+            鐝粍宸ヨ祫鎶ヨ〃璁板綍鏌ョ湅鎶ュ伐浜哄憳
+            </summary>
+            <param name="id">鎶ュ伐璁板綍涓昏〃id</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.GroupSalaryReportExcelSearch(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            鐝粍宸ヨ祫鎶ヨ〃璁板綍鏌ヨ
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="groupcode">鐢熶骇鐝粍</param>
+            <param name="username">鎿嶄綔浜哄憳</param>
+            <param name="operdate">鎿嶄綔鏃堕棿</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.PeopleSalaryReportSearch(System.Int32,System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            浜哄憳宸ヨ祫鏄庣粏鎶ヨ〃
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="groupcode">鐢熶骇鐝粍</param>
+            <param name="reportname">鎶ュ伐浜哄憳</param>
+            <param name="reportdate">鎶ュ伐鏃堕棿</param>
+            <param name="page">椤电爜</param>
+            <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+            <param name="prop">鎺掑簭瀛楁</param>
+            <param name="order">鎺掑簭瑙勫垯</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.PeopleSalaryReportExcelSearch(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            浜哄憳宸ヨ祫鏄庣粏鎶ヨ〃瀵煎嚭
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="groupcode">鐢熶骇鐝粍</param>
+            <param name="reportname">鎶ュ伐浜哄憳</param>
+            <param name="reportdate">鎶ュ伐鏃堕棿</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.DefectDetailsReportSearch(System.Int32,System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            涓嶈壇鏄庣粏鎶ヨ〃 
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="defectcode">缂洪櫡浠g爜</param>
+            <param name="defectname">缂洪櫡鍚嶇О</param>
+            <param name="reportname">鎶ュ伐浜哄憳</param>
+            <param name="reportdate">鎶ュ伐鏃堕棿</param>
+            <param name="page">椤电爜</param>
+            <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+            <param name="prop">鎺掑簭瀛楁</param>
+            <param name="order">鎺掑簭瑙勫垯</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.DefectDetailsReportExcelSearch(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            涓嶈壇鏄庣粏鎶ヨ〃瀵煎嚭 
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="defectcode">缂洪櫡浠g爜</param>
+            <param name="defectname">缂洪櫡鍚嶇О</param>
+            <param name="reportname">鎶ュ伐浜哄憳</param>
+            <param name="reportdate">鎶ュ伐鏃堕棿</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.QuaneryDefectReportSearch">
+            <summary>
+            鍝佽川寮傚父鎺掕鎶ヨ〃 
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.MaintenanceDetailsReportSearch(System.Int32,System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            缁翠慨鏄庣粏鎶ヨ〃 
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="style">鎿嶄綔绫诲瀷</param>
+            <param name="defectname">缂洪櫡鍚嶇О</param>
+            <param name="repairname">缁翠慨浜哄憳</param>
+            <param name="repairdate">缁翠慨鏃堕棿</param>
+            <param name="page">椤电爜</param>
+            <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+            <param name="prop">鎺掑簭瀛楁</param>
+            <param name="order">鎺掑簭瑙勫垯</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.MaintenanceDetailsReportExcelSearch(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            缁翠慨鏄庣粏鎶ヨ〃瀵煎嚭 
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="style">鎿嶄綔绫诲瀷</param>
+            <param name="defectname">缂洪櫡鍚嶇О</param>
+            <param name="repairname">缁翠慨浜哄憳</param>
+            <param name="repairdate">缁翠慨鏃堕棿</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.SendController.GetConnect(System.String)">
+            <summary>
+            鐧诲綍鐢ㄦ埛寤虹珛WebSocket鏈嶅姟杩炴帴
+            </summary>
+            <param name="clientName">鐧诲綍鐢ㄦ埛淇℃伅</param>
+            <returns></returns>
+        </member>
+        <member name="F:VueWebApi.Controllers.SendController._sockets">
+            璁板綍瀹㈡埛绔�
+        </member>
+        <member name="M:VueWebApi.Controllers.SendController.ProcessRequest(System.Web.WebSockets.AspNetWebSocketContext)">
+            鎺ュ彈淇℃伅鍜屽彂閫佷俊鎭�
+        </member>
         <member name="M:VueWebApi.Controllers.AppDeviceManageController.CheckScanDeviceQrCodeData(System.String)">
             <summary>
             鏃ュ父鐐规,鎵弿宸ヤ綅/璁惧浜岀淮鐮�
diff --git a/VueWebApi/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache b/VueWebApi/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache
index 52fa0d5..a781365 100644
--- a/VueWebApi/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache
+++ b/VueWebApi/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache
Binary files differ
diff --git a/VueWebApi/obj/Release/Package/PackageTmp/HtmlPage1.html b/VueWebApi/obj/Release/Package/PackageTmp/HtmlPage1.html
new file mode 100644
index 0000000..72213e9
--- /dev/null
+++ b/VueWebApi/obj/Release/Package/PackageTmp/HtmlPage1.html
@@ -0,0 +1,58 @@
+锘�<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
+    <title></title>
+    <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.11.3.min.js"></script>
+    <script>
+        var ws;
+        $().ready(function () {
+            $('#conn').click(function () {
+                ws = new WebSocket('wss://121.196.36.24:8001' + '/api/Send?clientName=' + '456');
+                $('#msg').append('<p>姝e湪杩炴帴</p>');
+
+                ws.onopen = function () {
+                    $('#msg').append('<p>宸茬粡杩炴帴</p>');
+                }
+                ws.onmessage = function (evt) {
+                    $('#msg').append('<p>' + evt.data + '</p>');
+                }
+                ws.onerror = function (evt) {
+                    $('#msg').append('<p>' + JSON.stringify(evt) + '</p>');
+                }
+                ws.onclose = function () {
+                    $('#msg').append('<p>宸茬粡鍏抽棴</p>');
+                }
+            });
+
+            $('#close').click(function () {
+                ws.close();
+            });
+
+            $('#send').click(function () {
+                if (ws.readyState == WebSocket.OPEN) {
+                    ws.send($("#to").val() + "|" + $('#content').val());
+                }
+                else {
+                    $('#tips').text('杩炴帴宸茬粡鍏抽棴');
+                }
+            });
+
+        });
+    </script>
+</head>
+<body>
+    <div>
+        <input id="user" type="text" />
+        <input id="conn" type="button" value="杩炴帴" />
+        <input id="close" type="button" value="鍏抽棴" /><br />
+        <span id="tips"></span>
+        <input id="content" type="text" />
+        <input id="send" type="button" value="鍙戦��" /><br />
+        <input id="to" type="text" />鐩殑鐢ㄦ埛
+        <div id="msg">
+        </div>
+    </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/VueWebApi/obj/Release/Package/PackageTmp/Web.config b/VueWebApi/obj/Release/Package/PackageTmp/Web.config
index 695b8b9..0ce3b69 100644
--- a/VueWebApi/obj/Release/Package/PackageTmp/Web.config
+++ b/VueWebApi/obj/Release/Package/PackageTmp/Web.config
@@ -25,6 +25,7 @@
     <!--key澶辨晥鏃堕棿30绉�-->
     <add key="RedisKeyTimeCont" value="120" />
     <!--Excel瀵煎嚭妯℃澘閰嶇疆IP-->
+    <add key="serverIP" value="wss://121.196.36.24:8001" />
     <add key="FileIP" value="http://121.196.36.24:8001/" />
     <add key="webpages:Version" value="3.0.0.0" />
     <add key="webpages:Enabled" value="false" />
diff --git a/VueWebApi/obj/Release/Package/PackageTmp/bin/VueWebApi.pdb b/VueWebApi/obj/Release/Package/PackageTmp/bin/VueWebApi.pdb
index bf6a2dc..a118357 100644
--- a/VueWebApi/obj/Release/Package/PackageTmp/bin/VueWebApi.pdb
+++ b/VueWebApi/obj/Release/Package/PackageTmp/bin/VueWebApi.pdb
Binary files differ
diff --git a/VueWebApi/obj/Release/Package/PackageTmp/bin/VueWebApi.xml b/VueWebApi/obj/Release/Package/PackageTmp/bin/VueWebApi.xml
index 6ec9831..7aa5a76 100644
--- a/VueWebApi/obj/Release/Package/PackageTmp/bin/VueWebApi.xml
+++ b/VueWebApi/obj/Release/Package/PackageTmp/bin/VueWebApi.xml
@@ -506,6 +506,196 @@
             </summary>
             <param name="documentPath">The physical path to XML document.</param>
         </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.OutSourceReportSearch(System.Int32,System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            濮斿鎶ヨ〃璁板綍鏌ヨ
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="suppername">渚涙柟鍚嶇О</param>
+            <param name="type">鎿嶄綔绫诲瀷</param>
+            <param name="receivdate">鏀舵枡鏃堕棿</param>
+            <param name="page">椤电爜</param>
+            <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+            <param name="prop">鎺掑簭瀛楁</param>
+            <param name="order">鎺掑簭瑙勫垯</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.OutSourceReportExcelSearch(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            濮斿鎶ヨ〃璁板綍瀵煎嚭
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="suppername">渚涙柟鍚嶇О</param>
+            <param name="type">鎿嶄綔绫诲瀷</param>
+            <param name="receivdate">鏀舵枡鏃堕棿</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.GroupSalaryReportSearch(System.Int32,System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            鐝粍宸ヨ祫鎶ヨ〃璁板綍鏌ヨ
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="groupcode">鐢熶骇鐝粍</param>
+            <param name="username">鎿嶄綔浜哄憳</param>
+            <param name="operdate">鎿嶄綔鏃堕棿</param>
+            <param name="page">椤电爜</param>
+            <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+            <param name="prop">鎺掑簭瀛楁</param>
+            <param name="order">鎺掑簭瑙勫垯</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.GroupSalaryReportSearchUser(System.String)">
+            <summary>
+            鐝粍宸ヨ祫鎶ヨ〃璁板綍鏌ョ湅鎶ュ伐浜哄憳
+            </summary>
+            <param name="id">鎶ュ伐璁板綍涓昏〃id</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.GroupSalaryReportExcelSearch(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            鐝粍宸ヨ祫鎶ヨ〃璁板綍鏌ヨ
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="groupcode">鐢熶骇鐝粍</param>
+            <param name="username">鎿嶄綔浜哄憳</param>
+            <param name="operdate">鎿嶄綔鏃堕棿</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.PeopleSalaryReportSearch(System.Int32,System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            浜哄憳宸ヨ祫鏄庣粏鎶ヨ〃
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="groupcode">鐢熶骇鐝粍</param>
+            <param name="reportname">鎶ュ伐浜哄憳</param>
+            <param name="reportdate">鎶ュ伐鏃堕棿</param>
+            <param name="page">椤电爜</param>
+            <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+            <param name="prop">鎺掑簭瀛楁</param>
+            <param name="order">鎺掑簭瑙勫垯</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.PeopleSalaryReportExcelSearch(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            浜哄憳宸ヨ祫鏄庣粏鎶ヨ〃瀵煎嚭
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="groupcode">鐢熶骇鐝粍</param>
+            <param name="reportname">鎶ュ伐浜哄憳</param>
+            <param name="reportdate">鎶ュ伐鏃堕棿</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.DefectDetailsReportSearch(System.Int32,System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            涓嶈壇鏄庣粏鎶ヨ〃 
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="defectcode">缂洪櫡浠g爜</param>
+            <param name="defectname">缂洪櫡鍚嶇О</param>
+            <param name="reportname">鎶ュ伐浜哄憳</param>
+            <param name="reportdate">鎶ュ伐鏃堕棿</param>
+            <param name="page">椤电爜</param>
+            <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+            <param name="prop">鎺掑簭瀛楁</param>
+            <param name="order">鎺掑簭瑙勫垯</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.DefectDetailsReportExcelSearch(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            涓嶈壇鏄庣粏鎶ヨ〃瀵煎嚭 
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="defectcode">缂洪櫡浠g爜</param>
+            <param name="defectname">缂洪櫡鍚嶇О</param>
+            <param name="reportname">鎶ュ伐浜哄憳</param>
+            <param name="reportdate">鎶ュ伐鏃堕棿</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.QuaneryDefectReportSearch">
+            <summary>
+            鍝佽川寮傚父鎺掕鎶ヨ〃 
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.MaintenanceDetailsReportSearch(System.Int32,System.Int32,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            缁翠慨鏄庣粏鎶ヨ〃 
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="style">鎿嶄綔绫诲瀷</param>
+            <param name="defectname">缂洪櫡鍚嶇О</param>
+            <param name="repairname">缁翠慨浜哄憳</param>
+            <param name="repairdate">缁翠慨鏃堕棿</param>
+            <param name="page">椤电爜</param>
+            <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+            <param name="prop">鎺掑簭瀛楁</param>
+            <param name="order">鎺掑簭瑙勫垯</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.ReportManagerController.MaintenanceDetailsReportExcelSearch(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
+            <summary>
+            缁翠慨鏄庣粏鎶ヨ〃瀵煎嚭 
+            </summary>
+            <param name="wocode">宸ュ崟缂栧彿</param>
+            <param name="partcode">浜у搧缂栫爜</param>
+            <param name="partname">浜у搧鍚嶇О</param>
+            <param name="partspec">瑙勬牸鍨嬪彿</param>
+            <param name="stepname">宸ュ簭鍚嶇О</param>
+            <param name="style">鎿嶄綔绫诲瀷</param>
+            <param name="defectname">缂洪櫡鍚嶇О</param>
+            <param name="repairname">缁翠慨浜哄憳</param>
+            <param name="repairdate">缁翠慨鏃堕棿</param>
+            <returns></returns>
+        </member>
+        <member name="M:VueWebApi.Controllers.SendController.GetConnect(System.String)">
+            <summary>
+            鐧诲綍鐢ㄦ埛寤虹珛WebSocket鏈嶅姟杩炴帴
+            </summary>
+            <param name="clientName">鐧诲綍鐢ㄦ埛淇℃伅</param>
+            <returns></returns>
+        </member>
+        <member name="F:VueWebApi.Controllers.SendController._sockets">
+            璁板綍瀹㈡埛绔�
+        </member>
+        <member name="M:VueWebApi.Controllers.SendController.ProcessRequest(System.Web.WebSockets.AspNetWebSocketContext)">
+            鎺ュ彈淇℃伅鍜屽彂閫佷俊鎭�
+        </member>
         <member name="M:VueWebApi.Controllers.AppDeviceManageController.CheckScanDeviceQrCodeData(System.String)">
             <summary>
             鏃ュ父鐐规,鎵弿宸ヤ綅/璁惧浜岀淮鐮�
diff --git a/VueWebApi/obj/Release/TransformWebConfig/original/Web.config b/VueWebApi/obj/Release/TransformWebConfig/original/Web.config
index e0e8320..6fa534a 100644
--- a/VueWebApi/obj/Release/TransformWebConfig/original/Web.config
+++ b/VueWebApi/obj/Release/TransformWebConfig/original/Web.config
@@ -25,6 +25,7 @@
 		<!--key澶辨晥鏃堕棿30绉�-->
 		<add key="RedisKeyTimeCont" value="120" />
 		<!--Excel瀵煎嚭妯℃澘閰嶇疆IP-->
+		<add key="serverIP" value="wss://121.196.36.24:8001" />
 		<add key="FileIP" value="http://121.196.36.24:8001/" />
 		<add key="webpages:Version" value="3.0.0.0" />
 		<add key="webpages:Enabled" value="false" />
diff --git a/VueWebApi/obj/Release/TransformWebConfig/transformed/Web.config b/VueWebApi/obj/Release/TransformWebConfig/transformed/Web.config
index 695b8b9..0ce3b69 100644
--- a/VueWebApi/obj/Release/TransformWebConfig/transformed/Web.config
+++ b/VueWebApi/obj/Release/TransformWebConfig/transformed/Web.config
@@ -25,6 +25,7 @@
     <!--key澶辨晥鏃堕棿30绉�-->
     <add key="RedisKeyTimeCont" value="120" />
     <!--Excel瀵煎嚭妯℃澘閰嶇疆IP-->
+    <add key="serverIP" value="wss://121.196.36.24:8001" />
     <add key="FileIP" value="http://121.196.36.24:8001/" />
     <add key="webpages:Version" value="3.0.0.0" />
     <add key="webpages:Enabled" value="false" />
diff --git a/VueWebApi/obj/Release/VueWebApi.pdb b/VueWebApi/obj/Release/VueWebApi.pdb
index 9d23fde..a118357 100644
--- a/VueWebApi/obj/Release/VueWebApi.pdb
+++ b/VueWebApi/obj/Release/VueWebApi.pdb
Binary files differ

--
Gitblit v1.9.3