From 4214efaa804bf6f94b28a6db6b099523df9b3252 Mon Sep 17 00:00:00 2001
From: yzh <snbbt@21cn.com>
Date: 星期五, 29 四月 2022 16:32:04 +0800
Subject: [PATCH] 充值、充值日志

---
 web/Dao/bin/Release/Dao.pdb                                      |    0 
 web/web/static/select2/select2.js                                | 5885 ++++++++++++++++++++++++++++++
 web/Common/obj/Release/Common.csproj.CoreCompileInputs.cache     |    2 
 web/UMCLib/obj/Release/UMCLib.csproj.CoreCompileInputs.cache     |    2 
 web/Dao/SysFlowNodeDao.cs                                        |  220 +
 web/App_Code/obj/Release/App_Code.dll                            |    0 
 web/Dao/GwOrderAuditDao.cs                                       |  183 
 web/Dao/bin/Release/Dao.dll                                      |    0 
 web/Model/bin/Release/Model.dll                                  |    0 
 web/Model/obj/Release/Model.csproj.AssemblyReference.cache       |    0 
 web/Model/obj/Release/Model.csproj.FileListAbsolute.txt          |   13 
 web/App_Code/obj/Release/App_Code.pdb                            |    0 
 web/Dao/obj/Debug/Dao.dll                                        |    0 
 web/Common/bin/Release/Common.pdb                                |    0 
 web/Model/bin/Release/Model.pdb                                  |    0 
 web/UMCLib/bin/Release/UMCLib.dll                                |    0 
 web/web/GwOrderList.aspx                                         |  339 +
 web/Dao/GwOrderDao.cs                                            |  309 +
 web/UMCLib/obj/Release/UMCLib.pdb                                |    0 
 web/App_Code/bin/Release/App_Code.dll                            |    0 
 web/Common/obj/Release/Common.pdb                                |    0 
 web/UMCLib/bin/Release/UMCLib.pdb                                |    0 
 web/web/static/select2/select2-bootstrap.css                     |    7 
 web/Dao/bin/Release/Model.pdb                                    |    0 
 web/web/static/select2/select2.css                               |  484 ++
 web/Dao/obj/Release/build.force                                  |    0 
 web/Dao/obj/Debug/Dao.pdb                                        |    0 
 web/Dao/obj/Release/Dao.csproj.CoreCompileInputs.cache           |   10 
 web/Lib/Dao.dll                                                  |    0 
 web/.vs/Web/v16/.suo                                             |    0 
 web/Dao/obj/Release/Dao.pdb                                      |    0 
 web/App_Code/obj/Release/App_Code.csproj.AssemblyReference.cache |    0 
 web/Common/obj/Release/Common.dll                                |    0 
 web/web/GwOrderList.aspx.cs                                      |  106 
 web/Model/Model/GwOrder.cs                                       |   44 
 web/Model/obj/Release/Model.pdb                                  |    0 
 web/Common/obj/Release/Common.csproj.FileListAbsolute.txt        |    9 
 web/UMCLib/obj/Release/UMCLib.csproj.AssemblyReference.cache     |    0 
 web/Model/Model/GwOrderAudit.cs                                  |   25 
 web/UMCLib/obj/Release/UMCLib.dll                                |    0 
 web/web/GwOrderAudit.aspx                                        |  434 ++
 web/Dao/obj/Release/Dao.dll                                      |    0 
 web/Model/obj/Debug/Model.csproj.AssemblyReference.cache         |    0 
 web/Lib/Dao.pdb                                                  |    0 
 web/web/Bin/Dao.dll                                              |    0 
 web/Dao/obj/Release/Dao.csproj.AssemblyReference.cache           |    0 
 web/Model/Model/SysFlowNode.cs                                   |   25 
 web/web/GwOrderComplete.aspx                                     |  341 +
 web/web/gwspupdate.aspx.cs                                       |    2 
 web/Model/Model/SysFlow.cs                                       |   21 
 web/Model/obj/Release/Model.dll                                  |    0 
 web/App_Code/obj/Release/App_Code.csproj.FileListAbsolute.txt    |   10 
 web/web/GwOrderCreate.aspx.cs                                    |  123 
 web/UMCLib/obj/Release/UMCLib.csproj.FileListAbsolute.txt        |    8 
 web/Dao/obj/Debug/Dao.csproj.AssemblyReference.cache             |    0 
 web/web/GwOrder.ashx                                             |  706 +++
 web/web/static/select2/select2.min.css                           |    1 
 web/App_Code/bin/Release/App_Code.pdb                            |    0 
 web/App_Code/obj/Release/App_Code.csproj.CoreCompileInputs.cache |    2 
 web/Dao/SysFlowDao.cs                                            |  213 +
 web/Dao/bin/Release/Model.dll                                    |    0 
 web/web/GwOrderAudit.aspx.cs                                     |  171 
 web/web/Bin/Dao.pdb                                              |    0 
 web/Model/obj/Release/Model.csproj.CoreCompileInputs.cache       |   10 
 web/web/web.config                                               |    4 
 web/web/static/select2/select2.min.js                            |    1 
 web/web/GwSp.aspx                                                |    8 
 web/Common/bin/Release/Common.dll                                |    0 
 web/Dao/obj/Release/Dao.csproj.FileListAbsolute.txt              |   15 
 web/Model/obj/Debug/Model.csproj.CopyComplete                    |    0 
 web/web/GwOrderComplete.aspx.cs                                  |  179 
 web/Dao/obj/Release/Dao.csproj.CopyComplete                      |    0 
 web/web/logs/logx.txt                                            |  742 +++
 web/Common/obj/Release/Common.csproj.AssemblyReference.cache     |    0 
 web/web/GwOrderCreate.aspx                                       |  169 
 web/web/logs/err.txt                                             |  742 +++
 76 files changed, 11,544 insertions(+), 21 deletions(-)

diff --git a/web/.vs/Web/v16/.suo b/web/.vs/Web/v16/.suo
index 91ac5d4..a6e911f 100644
--- a/web/.vs/Web/v16/.suo
+++ b/web/.vs/Web/v16/.suo
Binary files differ
diff --git a/web/App_Code/bin/Release/App_Code.dll b/web/App_Code/bin/Release/App_Code.dll
index 4563dce..0cfb1c4 100644
--- a/web/App_Code/bin/Release/App_Code.dll
+++ b/web/App_Code/bin/Release/App_Code.dll
Binary files differ
diff --git a/web/App_Code/bin/Release/App_Code.pdb b/web/App_Code/bin/Release/App_Code.pdb
index 835d4e7..315fa9a 100644
--- a/web/App_Code/bin/Release/App_Code.pdb
+++ b/web/App_Code/bin/Release/App_Code.pdb
Binary files differ
diff --git a/web/App_Code/obj/Release/App_Code.csproj.AssemblyReference.cache b/web/App_Code/obj/Release/App_Code.csproj.AssemblyReference.cache
index 5cda5a2..4d058c3 100644
--- a/web/App_Code/obj/Release/App_Code.csproj.AssemblyReference.cache
+++ b/web/App_Code/obj/Release/App_Code.csproj.AssemblyReference.cache
Binary files differ
diff --git a/web/App_Code/obj/Release/App_Code.csproj.CoreCompileInputs.cache b/web/App_Code/obj/Release/App_Code.csproj.CoreCompileInputs.cache
index 67e55a9..b95c3a9 100644
--- a/web/App_Code/obj/Release/App_Code.csproj.CoreCompileInputs.cache
+++ b/web/App_Code/obj/Release/App_Code.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-74406b3dfaab2e4511ea31aebcbbc3c8da43a8a3
+873be3bb4c68603651a642203b3380fde6dd4755
diff --git a/web/App_Code/obj/Release/App_Code.csproj.FileListAbsolute.txt b/web/App_Code/obj/Release/App_Code.csproj.FileListAbsolute.txt
index 797ac7a..6be79b4 100644
--- a/web/App_Code/obj/Release/App_Code.csproj.FileListAbsolute.txt
+++ b/web/App_Code/obj/Release/App_Code.csproj.FileListAbsolute.txt
@@ -41,3 +41,13 @@
 C:\Users\mac\Desktop\Work-Archives\SMGW\SMGW_NewWeb\web\App_Code\obj\Release\App_Code.pdb
 =======
 >>>>>>> Stashed changes
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\bin\Release\App_Code.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\bin\Release\App_Code.pdb
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\bin\Release\Aspose.Cells.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\bin\Release\Dao.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\bin\Release\Ionic.Zip.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\obj\Release\App_Code.csproj.AssemblyReference.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\obj\Release\App_Code.csproj.CoreCompileInputs.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\obj\Release\App_Code.csproj.CopyComplete
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\obj\Release\App_Code.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\obj\Release\App_Code.pdb
diff --git a/web/App_Code/obj/Release/App_Code.dll b/web/App_Code/obj/Release/App_Code.dll
index 4563dce..0cfb1c4 100644
--- a/web/App_Code/obj/Release/App_Code.dll
+++ b/web/App_Code/obj/Release/App_Code.dll
Binary files differ
diff --git a/web/App_Code/obj/Release/App_Code.pdb b/web/App_Code/obj/Release/App_Code.pdb
index 835d4e7..315fa9a 100644
--- a/web/App_Code/obj/Release/App_Code.pdb
+++ b/web/App_Code/obj/Release/App_Code.pdb
Binary files differ
diff --git a/web/Common/bin/Release/Common.dll b/web/Common/bin/Release/Common.dll
index a0c329f..c17eeb7 100644
--- a/web/Common/bin/Release/Common.dll
+++ b/web/Common/bin/Release/Common.dll
Binary files differ
diff --git a/web/Common/bin/Release/Common.pdb b/web/Common/bin/Release/Common.pdb
index db03453..8cf945b 100644
--- a/web/Common/bin/Release/Common.pdb
+++ b/web/Common/bin/Release/Common.pdb
Binary files differ
diff --git a/web/Common/obj/Release/Common.csproj.AssemblyReference.cache b/web/Common/obj/Release/Common.csproj.AssemblyReference.cache
index dec21a9..1bf2744 100644
--- a/web/Common/obj/Release/Common.csproj.AssemblyReference.cache
+++ b/web/Common/obj/Release/Common.csproj.AssemblyReference.cache
Binary files differ
diff --git a/web/Common/obj/Release/Common.csproj.CoreCompileInputs.cache b/web/Common/obj/Release/Common.csproj.CoreCompileInputs.cache
index d15af69..c0253ac 100644
--- a/web/Common/obj/Release/Common.csproj.CoreCompileInputs.cache
+++ b/web/Common/obj/Release/Common.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-d34782dce186f7104d1081cac4d568756f64a0b0
+f05064e66538c56da836b03d27148211bdb278f8
diff --git a/web/Common/obj/Release/Common.csproj.FileListAbsolute.txt b/web/Common/obj/Release/Common.csproj.FileListAbsolute.txt
index 60323db..7eb4c74 100644
--- a/web/Common/obj/Release/Common.csproj.FileListAbsolute.txt
+++ b/web/Common/obj/Release/Common.csproj.FileListAbsolute.txt
@@ -46,3 +46,12 @@
 C:\Users\mac\Desktop\Work-Archives\SMGW\SMGW_NewWeb\web\Common\obj\Release\Common.pdb
 =======
 >>>>>>> Stashed changes
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Common\bin\Release\Common.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Common\bin\Release\Common.pdb
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Common\bin\Release\log4net.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Common\bin\Release\Oracle.DataAccess.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Common\obj\Release\Common.csproj.AssemblyReference.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Common\obj\Release\Common.csproj.CoreCompileInputs.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Common\obj\Release\Common.csproj.CopyComplete
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Common\obj\Release\Common.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Common\obj\Release\Common.pdb
diff --git a/web/Common/obj/Release/Common.dll b/web/Common/obj/Release/Common.dll
index a0c329f..c17eeb7 100644
--- a/web/Common/obj/Release/Common.dll
+++ b/web/Common/obj/Release/Common.dll
Binary files differ
diff --git a/web/Common/obj/Release/Common.pdb b/web/Common/obj/Release/Common.pdb
index db03453..8cf945b 100644
--- a/web/Common/obj/Release/Common.pdb
+++ b/web/Common/obj/Release/Common.pdb
Binary files differ
diff --git a/web/Dao/GwOrderAuditDao.cs b/web/Dao/GwOrderAuditDao.cs
new file mode 100644
index 0000000..80e1014
--- /dev/null
+++ b/web/Dao/GwOrderAuditDao.cs
@@ -0,0 +1,183 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Model;
+using Common;
+using Oracle.DataAccess.Client;
+using System.Data.Common;
+
+namespace Dao
+{
+    /// <summary>
+    /// 璁㈠崟瀹℃牳鎿嶄綔
+    /// </summary>
+    public class GwOrderAuditDao : IDisposable
+    {
+        public void Dispose()
+        {
+        }
+
+        private static GwOrderAuditDao _instance;
+        public static GwOrderAuditDao Instance
+        {
+            get {
+                if (_instance == null)
+                {
+                    _instance = new GwOrderAuditDao();
+                }
+                return _instance;
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇璁㈠崟瀹℃牳鍒楄〃
+        /// </summary>
+        /// flag: 0-寰呭鏍歌鍗�(宸叉彁浜ゃ�佸鏍镐腑)锛�1-宸插畬鎴愯鍗曪紙瀹℃牳閫氳繃銆佸鏍镐笉閫氳繃銆佸彇娑堬級
+        /// <returns></returns>
+        public List<GwOrderAudit> List(GwOrderAudit gwOrderAudit)
+        {
+            List<GwOrderAudit> list = new List<GwOrderAudit>();
+            try
+            {
+                StringBuilder stringBuilder = new StringBuilder();
+                stringBuilder.Append("SELECT GOA.*  ");
+                stringBuilder.Append(" FROM GW_ORDER_AUDIT GOA ");
+                stringBuilder.Append(" WHERE 1=1 ");
+
+                if (gwOrderAudit.AuditId!=null && gwOrderAudit.AuditId!="")
+                {
+                    stringBuilder.Append(" AND AUDIT_ID= '" + gwOrderAudit.AuditId + "' ");
+                }
+                if (gwOrderAudit.OrderId != null && gwOrderAudit.OrderId != "")
+                {
+                    stringBuilder.Append(" AND ORDER_ID= '" + gwOrderAudit.OrderId + "' ");
+                }
+                if (gwOrderAudit.AuditSort != 0 )
+                {
+                    stringBuilder.Append(" AND AUDIT_SORT= " + gwOrderAudit.AuditSort + " ");
+                }
+                if (gwOrderAudit.AuditStatus != 0)
+                {
+                    stringBuilder.Append(" AND AUDIT_STATUS= " + gwOrderAudit.AuditStatus + " ");
+                }
+                stringBuilder.Append(" ORDER BY ORDER_ID, AUDIT_TIME DESC ");
+
+                using (OracleDataReader reader = OracleHelper.ExecuteReader(stringBuilder.ToString() , OracleHelper.Connection))
+                {
+                    while (((DbDataReader)reader).Read())
+                    {
+                        GwOrderAudit o = new GwOrderAudit();
+                        if (this.ReadInfo(reader, o))
+                            list.Add(o);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Error(ex);
+                return list;
+            }
+            return list;
+        }
+
+
+        //娣诲姞淇℃伅
+        public bool Add(GwOrderAudit o)
+        {
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.Append("INSERT INTO GW_ORDER_AUDIT ( ");
+            stringBuilder.Append(" AUDIT_ID, ORDER_ID, AUDIT_SORT, AUDIT_STATUS, AUDITOR, AUDIT_REASON, AUDIT_TIME ");
+            stringBuilder.Append(" ) ");
+            stringBuilder.Append(" VALUES (:AUDIT_ID, :ORDER_ID, :AUDIT_SORT, :AUDIT_STATUS, :AUDITOR, :AUDIT_REASON, :AUDIT_TIME ");
+            stringBuilder.Append("  ) ");
+
+            string sql = stringBuilder.ToString();
+
+            return OracleHelper.ExecuteSql(sql, 
+                OracleHelper.Connection,
+                new OracleParameter(":AUDIT_ID", (object)o.AuditId),
+                new OracleParameter(":ORDER_ID", (object)o.OrderId),
+                new OracleParameter(":AUDIT_SORT", (object)o.AuditSort),
+                new OracleParameter(":AUDIT_STATUS", (object)o.AuditStatus),
+                new OracleParameter(":AUDITOR", (object)o.Auditor),
+                new OracleParameter(":AUDIT_REASON", (object)o.AuditReason),
+                new OracleParameter(":AUDIT_TIME", (object)o.AuditTime)
+                ) > 0;
+        }
+
+        //鍒犻櫎
+        public bool Delete(string AuditId)
+        {
+            if (string.IsNullOrEmpty(AuditId) )
+                return false;
+            return OracleHelper.ExecuteSql("delete from GW_ORDER_AUDIT where AUDIT_ID=:AUDIT_ID", OracleHelper.Connection, new OracleParameter(":AUDIT_ID", (object)AuditId)) > 0;
+        }
+
+        //鏇存柊浜у搧鎴栦骇鍝佸垎绫讳俊鎭�
+        public bool Update(GwOrderAudit o)
+        {
+            OracleParameter[] cmdParms = new OracleParameter[] {
+                new OracleParameter(":AUDIT_ID", (object)o.AuditId),
+                new OracleParameter(":ORDER_ID", (object)o.OrderId),
+                new OracleParameter(":AUDIT_SORT", (object)o.AuditSort),
+                new OracleParameter(":AUDIT_STATUS", (object)o.AuditStatus),
+                new OracleParameter(":AUDITOR", (object)o.Auditor),
+                new OracleParameter(":AUDIT_REASON", (object)o.AuditReason),
+                new OracleParameter(":AUDIT_TIME", (object)o.AuditTime)
+            };
+
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.Append("UPDATE GW_ORDER_AUDIT SET ");
+            //stringBuilder.Append(" , AUDIT_ID =:AUDIT_ID ");
+            stringBuilder.Append(" , ORDER_ID =:ORDER_ID ");
+            stringBuilder.Append(" , AUDIT_SORT =:AUDIT_SORT ");
+            stringBuilder.Append(" , AUDIT_STATUS =:AUDIT_STATUS ");
+            stringBuilder.Append(" , AUDITOR=:AUDITOR, AUDIT_REASON=:AUDIT_REASON, AUDIT_TIME=:AUDIT_TIME ");
+            stringBuilder.Append(" WHERE AUDIT_ID=:AUDIT_ID ");
+
+            string sql = stringBuilder.ToString();
+            return (OracleHelper.ExecuteSql(sql, OracleHelper.Connection, cmdParms) > 0);
+        }
+
+        //鑾峰彇淇℃伅
+        public GwOrderAudit Get(string auditId)
+        {
+            GwOrderAudit o = new GwOrderAudit();
+            if (string.IsNullOrEmpty(auditId))
+                return o;
+            using (OracleDataReader reader = OracleHelper.ExecuteReader(string.Format("select * from GW_ORDER_AUDIT where AUDIT_ID=:AUDIT_ID"), OracleHelper.Connection, new OracleParameter(":AUDIT_ID", (object)auditId)))
+            {
+                if (((DbDataReader)reader).Read())
+                {
+                    this.ReadInfo(reader, o);
+                    return o;
+                }
+            }
+            return o;
+        }
+
+        //缁熻璁板綍鏁�
+        private int ReadCount(OracleDataReader reader)
+        {
+            OracleReaderWrapper wrapper = new OracleReaderWrapper(reader);
+            return wrapper.GetInt("count", 0);
+        }
+
+        //鏁版嵁灏佽
+        private bool ReadInfo(OracleDataReader reader, GwOrderAudit o)
+        {
+            OracleReaderWrapper oracleReaderWrapper = new OracleReaderWrapper(reader);
+            o.AuditId = oracleReaderWrapper.GetString("AUDIT_ID", "");
+            o.OrderId = oracleReaderWrapper.GetString("ORDER_ID", "");
+            o.AuditSort = oracleReaderWrapper.GetInt("AUDIT_SORT", 0);
+            o.AuditStatus = oracleReaderWrapper.GetInt("AUDIT_STATUS", 0);
+            o.Auditor = oracleReaderWrapper.GetString("AUDITOR", "");
+            o.AuditReason = oracleReaderWrapper.GetString("AUDIT_REASON", "");
+            o.AuditTime = oracleReaderWrapper.GetDateTime("AUDIT_TIME");
+            return true;
+        }
+
+    }
+
+}
diff --git a/web/Dao/GwOrderDao.cs b/web/Dao/GwOrderDao.cs
new file mode 100644
index 0000000..84b510b
--- /dev/null
+++ b/web/Dao/GwOrderDao.cs
@@ -0,0 +1,309 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Model;
+using Common;
+using Oracle.DataAccess.Client;
+using System.Data.Common;
+
+namespace Dao
+{
+    /// <summary>
+    /// 璁㈠崟鎿嶄綔
+    /// </summary>
+    public class GwOrderDao : IDisposable
+    {
+        public void Dispose()
+        {
+        }
+
+        private static GwOrderDao _instance;
+        public static GwOrderDao Instance
+        {
+            get {
+                if (_instance == null)
+                {
+                    _instance = new GwOrderDao();
+                }
+                return _instance;
+            }
+        }
+
+
+        //flag: 0-寰呭鏍歌鍗�(宸叉彁浜ゃ�佸鏍镐腑)锛�1-宸插畬鎴愯鍗曪紙瀹℃牳閫氳繃銆佸鏍镐笉閫氳繃銆佸彇娑堬級
+        public List<GwOrder> LoadInfoList(string spId, string clientId, string clientName, int flag, DateTime startDate, DateTime endDate, int pageSize, int PageIndex, out int recordcount)
+        {
+            
+            List<GwOrder> list = new List<GwOrder>();
+            recordcount = 0;
+            try
+            {
+                StringBuilder stringBuilder = new StringBuilder();
+                stringBuilder.Append(" FROM ( ");
+                stringBuilder.Append("SELECT GWO.*, GWC.CLIENT_NAME  ");
+                stringBuilder.Append(" FROM GW_ORDER GWO ");
+                stringBuilder.Append(" LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID ");
+                stringBuilder.Append(" LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID ");
+                stringBuilder.Append(" WHERE 1=1 ");
+
+                if (flag == 0)
+                {
+                    stringBuilder.Append(" AND GWO.STATUS IN (0, 1) ");
+                }
+                else if (flag == 1)
+                {
+                    stringBuilder.Append(" AND GWO.STATUS IN (2, 3, 4) ");
+                }
+
+                /**
+                if ((startDate != null) && (endDate != null))
+                {
+                    stringBuilder.Append(" AND GWO.CREATE_TIME BETWEEN " + startDate + " AND " + endDate + " ");
+                 }
+                else if ((startDate != null) && (endDate == null) )
+                {
+                    stringBuilder.Append(" AND GWO.CREATE_TIME BETWEEN " + startDate + "'AND " + startDate + "");
+                }
+                else if ((endDate != null) && (startDate == null) )
+                {
+                    stringBuilder.Append(" AND GWO.CREATE_TIME BETWEEN " + endDate + " AND " + endDate + " ");
+                }
+                **/
+                stringBuilder.Append(" AND GWO.CREATE_TIME BETWEEN :START_TIME AND :END_TIME ");
+
+                if ((spId != null) && (spId != ""))
+                {
+                    stringBuilder.Append(" AND GWO.SP_ID like '%" + spId + "%' " );
+                }
+
+                if ((clientId != null) && (clientId != ""))
+                {
+                    stringBuilder.Append(" and GWO.CLIENT_ID like '%" + clientId + "%'");
+                }
+                if ((clientName != null) && (clientName != ""))
+                {
+                    stringBuilder.Append(" and GWC.CLIENT_NAME like '%" + clientName + "%'");
+                }
+                stringBuilder.Append(" ) T ");
+
+                OracleParameter[] parameterArray = new OracleParameter[] { new OracleParameter(":START_TIME", startDate), new OracleParameter(":END_TIME", endDate) };
+
+                using (OracleDataReader reader = OracleHelper.ExecuteReader("select count(*) as count " + stringBuilder.ToString(), OracleHelper.Connection, parameterArray))
+                {
+                    while (reader.Read())
+                    {
+                        recordcount = this.ReadCount(reader);
+                    }
+                }
+                using (OracleDataReader reader2 = OracleHelper.ExecuteReader(PubConstant.doOracleSql(PageIndex, pageSize, recordcount, "select * " + stringBuilder.ToString()).ToString() + " order by CREATE_TIME desc ", OracleHelper.Connection, parameterArray))
+                {
+                    while (reader2.Read())
+                    {
+                        GwOrder o = new GwOrder();
+                        if (this.ReadInfo(reader2, o))
+                        {
+                            list.Add(o);
+                        }
+                    }
+                }
+            }
+            catch (Exception exception)
+            {
+                LogHelper.Error(exception);
+                return list;
+            }
+            return list;
+
+        }
+
+        /// <summary>
+        /// 鑾峰彇璁㈠崟鍒楄〃
+        /// </summary>
+        /// flag: 0-寰呭鏍歌鍗�(宸叉彁浜ゃ�佸鏍镐腑)锛�1-宸插畬鎴愯鍗曪紙瀹℃牳閫氳繃銆佸鏍镐笉閫氳繃銆佸彇娑堬級
+        /// <returns></returns>
+        public List<GwOrder> List(GwOrder gwOrder, GwSp gwSp, GwClient gwClient, int flag)
+        {
+            List<GwOrder> list = new List<GwOrder>();
+            //recordcount = 0;    //
+            try
+            {
+                StringBuilder stringBuilder = new StringBuilder();
+                stringBuilder.Append("SELECT GWO.*  ");
+                stringBuilder.Append(" FROM GW_ORDER GWO ");
+                stringBuilder.Append(" LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID ");
+                stringBuilder.Append(" LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID ");
+                stringBuilder.Append(" WHERE 1=1 ");
+
+                if(flag == 0)
+                {
+                    stringBuilder.Append(" AND GWO.STATUS IN (0, 1) ");
+                }
+                else if (flag == 1)
+                {
+                    stringBuilder.Append(" AND GWO.STATUS IN (2, 3, 4) ");
+                }
+
+                stringBuilder.Append(" ORDER BY CREATE_TIME DESC ");
+
+                using (OracleDataReader reader = OracleHelper.ExecuteReader(stringBuilder.ToString() , OracleHelper.Connection))
+                {
+                    while (((DbDataReader)reader).Read())
+                    {
+                        GwOrder o = new GwOrder();
+                        if (this.ReadInfo(reader, o))
+                            list.Add(o);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Error(ex);
+                return list;
+            }
+            return list;
+        }
+
+
+        //娣诲姞浜у搧鎴栦骇鍝佸垎绫讳俊鎭�
+        public bool Add(GwOrder o)
+        {
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.Append("INSERT INTO GW_ORDER ( ");
+            stringBuilder.Append(" ORDER_ID, SP_ID, CLIENT_ID, PRODUCT_ID, COMBO_ID, BASIC_NUM, GIVING_NUM, PRICE, ORDER_NUM_TOTAL, ORDER_AMOUNT_TOTAL, BEFORE_BALANCE_NUM ");
+            stringBuilder.Append(" , CREATOR, CREATE_TIME, STATUS, REMARK ");
+            //stringBuilder.Append(" , AUDITOR, AUDIT_TIME ");
+            stringBuilder.Append(" ) ");
+            stringBuilder.Append(" VALUES (:ORDER_ID, :SP_ID, :CLIENT_ID, :PRODUCT_ID, :COMBO_ID, :BASIC_NUM, :GIVING_NUM, :PRICE, :ORDER_NUM_TOTAL, :ORDER_AMOUNT_TOTAL, :BEFORE_BALANCE_NUM ");
+            stringBuilder.Append(" , :CREATOR, :CREATE_TIME, :STATUS, :REMARK ");
+            //stringBuilder.Append(" , :AUDITOR, :AUDIT_TIME ");
+            stringBuilder.Append("  ) ");
+
+            string sql = stringBuilder.ToString();
+
+            return OracleHelper.ExecuteSql(sql, 
+                OracleHelper.Connection,
+                new OracleParameter(":ORDER_ID", (object)o.OrderId),
+                new OracleParameter(":SP_ID", (object)o.SpId),
+                new OracleParameter(":CLIENT_ID", (object)o.ClientId),
+                new OracleParameter(":PRODUCT_ID", (object)o.ProductId),
+                new OracleParameter(":COMBO_ID", (object)o.ComboId),
+                new OracleParameter(":BASIC_NUM", (object)o.BasicNum),
+                new OracleParameter(":GIVING_NUM", (object)o.GivingNum),
+                new OracleParameter(":PRICE", (object)o.Price),
+                new OracleParameter(":ORDER_NUM_TOTAL", (object)o.OrderNumTotal),
+                new OracleParameter(":ORDER_AMOUNT_TOTAL", (object)o.OrderAmountTotal),
+                new OracleParameter(":BEFORE_BALANCE_NUM", (object)o.BeforeBalanceNum),
+                new OracleParameter(":CREATOR", (object)o.Creator),
+                new OracleParameter(":CREATE_TIME", (object)o.CreateTime),
+                new OracleParameter(":STATUS", (object)o.Status),
+                new OracleParameter(":REMARK", (object)o.Remark)
+                ) > 0;
+        }
+
+        //鍒犻櫎
+        public bool Delete(string orderId)
+        {
+            if (string.IsNullOrEmpty(orderId) )
+                return false;
+            return OracleHelper.ExecuteSql("delete from GW_ORDER where ORDER_ID=:ORDER_ID", OracleHelper.Connection, new OracleParameter(":ORDER_ID", (object)orderId)) > 0;
+        }
+
+        //鍙栨秷
+        public bool UpdateStatus(int status, string orderId)
+        {
+            if (string.IsNullOrEmpty(orderId))
+                return false;
+            //status:4-鍙栨秷
+            return OracleHelper.ExecuteSql("update GW_ORDER SET STATUS = :STATUS where ORDER_ID=:ORDER_ID", OracleHelper.Connection, new OracleParameter(":STATUS", (object)status), new OracleParameter(":ORDER_ID", (object)orderId)) > 0;
+        }
+
+        //鏇存柊浜у搧鎴栦骇鍝佸垎绫讳俊鎭�
+        public bool Update(GwOrder o)
+        {
+            OracleParameter[] cmdParms = new OracleParameter[] {
+                new OracleParameter(":ORDER_ID", (object)o.OrderId),
+                new OracleParameter(":SP_ID", (object)o.SpId),
+                new OracleParameter(":CLIENT_ID", (object)o.ClientId),
+                new OracleParameter(":PRODUCT_ID", (object)o.ProductId),
+                new OracleParameter(":COMBO_ID", (object)o.ComboId),
+                new OracleParameter(":BASIC_NUM", (object)o.BasicNum),
+                new OracleParameter(":GIVING_NUM", (object)o.GivingNum),
+                new OracleParameter(":PRICE", (object)o.Price),
+                new OracleParameter(":ORDER_NUM_TOTAL", (object)o.OrderNumTotal),
+                new OracleParameter(":ORDER_AMOUNT_TOTAL", (object)o.OrderAmountTotal),
+                new OracleParameter(":BEFORE_BALANCE_NUM", (object)o.BeforeBalanceNum),
+                new OracleParameter(":CREATOR", (object)o.Creator),
+                new OracleParameter(":CREATE_TIME", (object)o.CreateTime),
+                new OracleParameter(":STATUS", (object)o.Status),
+                new OracleParameter(":REMARK", (object)o.Remark)
+            };
+
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.Append("UPDATE GW_ORDER SET ");
+            //stringBuilder.Append(" ORDER_ID=:ORDER_ID ");
+            stringBuilder.Append(" , SP_ID =:SP_ID ");
+            stringBuilder.Append(" , CLIENT_ID =:CLIENT_ID ");
+            stringBuilder.Append(" , PRODUCT_ID =:PRODUCT_ID ");
+            stringBuilder.Append(" , COMBO_ID =:COMBO_ID ");
+            stringBuilder.Append(" , BASIC_NUM=:BASIC_NUM, GIVING_NUM=:GIVING_NUM, PRICE=:PRICE, ORDER_NUM_TOTAL=:ORDER_NUM_TOTAL, ORDER_AMOUNT_TOTAL=:ORDER_AMOUNT_TOTAL ");
+            stringBuilder.Append(" , BEFORE_BALANCE_NUM =:BEFORE_BALANCE_NUM, CREATOR=:CREATOR, CREATE_TIME=:CREATE_TIME ");
+            stringBuilder.Append(" , STATUS=:STATUS, REMARK=:REMARK ");
+            stringBuilder.Append(" WHERE ORDER_ID=:ORDER_ID ");
+
+            string sql = stringBuilder.ToString();
+            return (OracleHelper.ExecuteSql(sql, OracleHelper.Connection, cmdParms) > 0);
+        }
+
+        //鑾峰彇淇℃伅
+        public GwOrder Get(string orderId)
+        {
+            GwOrder o = new GwOrder();
+            if (string.IsNullOrEmpty(orderId))
+                return o;
+            using (OracleDataReader reader = OracleHelper.ExecuteReader(string.Format("select * from GW_ORDER where ORDER_ID=:ORDER_ID"), OracleHelper.Connection, new OracleParameter(":ORDER_ID", (object)orderId)))
+            {
+                if (((DbDataReader)reader).Read())
+                {
+                    this.ReadInfo(reader, o);
+                    return o;
+                }
+            }
+            return o;
+        }
+
+        //缁熻璁板綍鏁�
+        private int ReadCount(OracleDataReader reader)
+        {
+            OracleReaderWrapper wrapper = new OracleReaderWrapper(reader);
+            return wrapper.GetInt("count", 0);
+        }
+
+        //鏁版嵁灏佽
+        private bool ReadInfo(OracleDataReader reader, GwOrder o)
+        {
+            OracleReaderWrapper oracleReaderWrapper = new OracleReaderWrapper(reader);
+            o.OrderId = oracleReaderWrapper.GetString("ORDER_ID", "");
+            o.SpId = oracleReaderWrapper.GetString("SP_ID", "");
+            o.ClientId = oracleReaderWrapper.GetString("CLIENT_ID", "");
+            o.ClientName = oracleReaderWrapper.GetString("CLIENT_NAME", "");
+            o.ProductId = oracleReaderWrapper.GetString("PRODUCT_ID", "");
+            o.ComboId = oracleReaderWrapper.GetString("COMBO_ID", "");
+            o.BasicNum = oracleReaderWrapper.GetInt("BASIC_NUM", 0);
+            o.GivingNum = oracleReaderWrapper.GetInt("GIVING_NUM", 0);
+            o.Price = oracleReaderWrapper.GetInt("PRICE", 0);
+            o.OrderNumTotal = oracleReaderWrapper.GetInt("ORDER_NUM_TOTAL", 0);
+            o.OrderAmountTotal = oracleReaderWrapper.GetInt("ORDER_AMOUNT_TOTAL", 0);
+            o.BeforeBalanceNum = oracleReaderWrapper.GetInt("BEFORE_BALANCE_NUM", 0);
+            o.Creator = oracleReaderWrapper.GetString("CREATOR", "");
+            o.CreateTime = oracleReaderWrapper.GetDateTime("CREATE_TIME");
+            //o.Auditor = oracleReaderWrapper.GetString("AUDITOR", "");
+            //o.AuditTime = oracleReaderWrapper.GetDateTime("AUDIT_TIME");
+            o.Status = oracleReaderWrapper.GetInt("STATUS", 0);
+            o.Remark = oracleReaderWrapper.GetString("REMARK", "");
+            return true;
+        }
+
+    }
+
+}
diff --git a/web/Dao/SysFlowDao.cs b/web/Dao/SysFlowDao.cs
new file mode 100644
index 0000000..d6c127c
--- /dev/null
+++ b/web/Dao/SysFlowDao.cs
@@ -0,0 +1,213 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Model;
+using Common;
+using Oracle.DataAccess.Client;
+using System.Data.Common;
+
+namespace Dao
+{
+    /// <summary>
+    /// 娴佺▼瀹氫箟琛ㄦ搷浣�
+    /// </summary>
+    public class SysFlowDao : IDisposable
+    {
+        public void Dispose()
+        {
+        }
+
+        private static SysFlowDao _instance;
+        public static SysFlowDao Instance
+        {
+            get {
+                if (_instance == null)
+                {
+                    _instance = new SysFlowDao();
+                }
+                return _instance;
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇淇℃伅鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public List<SysFlow> List(SysFlow sysFlow)
+        {
+            List<SysFlow> list = new List<SysFlow>();
+            try
+            {
+                StringBuilder stringBuilder = new StringBuilder();
+                stringBuilder.Append("SELECT SFN.*  ");
+                stringBuilder.Append(" FROM SYS_FLOW SFN ");
+                stringBuilder.Append(" WHERE 1=1 ");
+
+                if (sysFlow.FlowCode != null && sysFlow.FlowCode != "")
+                {
+                    stringBuilder.Append(" AND FLOW_CODE= '" + sysFlow.FlowCode + "' ");
+                }
+                if (sysFlow.Status != 0)
+                {
+                    stringBuilder.Append(" AND STATUS= " + sysFlow.Status + " ");
+                }
+                stringBuilder.Append(" ORDER BY FLOW_CODE ");
+
+                using (OracleDataReader reader = OracleHelper.ExecuteReader(stringBuilder.ToString() , OracleHelper.Connection))
+                {
+                    while (((DbDataReader)reader).Read())
+                    {
+                        SysFlow o = new SysFlow();
+                        if (this.ReadInfo(reader, o))
+                            list.Add(o);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Error(ex);
+                return list;
+            }
+            return list;
+        }
+
+
+        //娣诲姞淇℃伅
+        public bool Add(SysFlow o)
+        {
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.Append("INSERT INTO SYS_FLOW ( ");
+            stringBuilder.Append(" ID, FLOW_CODE, FLOW_NAME, FLOW_GROUP, STATUS ");
+            stringBuilder.Append(" ) ");
+            stringBuilder.Append(" VALUES (:ID, :FLOW_CODE, :FLOW_NAME, :FLOW_GROUP, :STATUS ");
+            stringBuilder.Append("  ) ");
+
+            string sql = stringBuilder.ToString();
+
+            return OracleHelper.ExecuteSql(sql, 
+                OracleHelper.Connection,
+                new OracleParameter(":ID", (object)o.Id),
+                new OracleParameter(":FLOW_CODE", (object)o.FlowCode),
+                new OracleParameter(":FLOW_NAME", (object)o.FlowName),
+                new OracleParameter(":FLOW_GROUP", (object)o.FlowGroup),
+                new OracleParameter(":STATUS", (object)o.Status)
+                ) > 0;
+        }
+
+        //鍒犻櫎
+        public bool Delete(string id)
+        {
+            if (string.IsNullOrEmpty(id) )
+                return false;
+            return OracleHelper.ExecuteSql("delete from SYS_FLOW where ID=:ID", OracleHelper.Connection, new OracleParameter(":ID", (object)id)) > 0;
+        }
+
+        //鏇存柊浜у搧鎴栦骇鍝佸垎绫讳俊鎭�
+        public bool Update(SysFlow o)
+        {
+            OracleParameter[] cmdParms = new OracleParameter[] {
+                new OracleParameter(":ID", (object)o.Id),
+                new OracleParameter(":FLOW_CODE", (object)o.FlowCode),
+                new OracleParameter(":FLOW_NAME", (object)o.FlowName),
+                new OracleParameter(":FLOW_GROUP", (object)o.FlowGroup),
+                new OracleParameter(":STATUS", (object)o.Status)
+            };
+
+
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.Append("UPDATE SYS_FLOW SET ");
+            stringBuilder.Append(" , FLOW_CODE =:FLOW_CODE ");
+            stringBuilder.Append(" , FLOW_NAME =:FLOW_NAME ");
+            stringBuilder.Append(" , FLOW_GROUP =:FLOW_GROUP ");
+            stringBuilder.Append(" , STATUS=:STATUS ");
+            stringBuilder.Append(" WHERE ID=:ID ");
+
+            string sql = stringBuilder.ToString();
+            return (OracleHelper.ExecuteSql(sql, OracleHelper.Connection, cmdParms) > 0);
+        }
+
+        //鑾峰彇淇℃伅
+        public SysFlow Get(string id)
+        {
+            SysFlow o = new SysFlow();
+            if (string.IsNullOrEmpty(id))
+                return o;
+            using (OracleDataReader reader = OracleHelper.ExecuteReader(string.Format("select * from SYS_FLOW where ID=:ID"), OracleHelper.Connection, new OracleParameter(":ID", (object)id)))
+            {
+                if (((DbDataReader)reader).Read())
+                {
+                    this.ReadInfo(reader, o);
+                    return o;
+                }
+            }
+            return o;
+        }
+
+        //鑾峰彇淇℃伅
+        public SysFlow Get(SysFlow sysFlow)
+        {
+            SysFlow o = new SysFlow();
+            if (sysFlow==null)
+                return o;
+
+            try
+            {
+                StringBuilder stringBuilder = new StringBuilder();
+                stringBuilder.Append("SELECT SFN.*  ");
+                stringBuilder.Append(" FROM SYS_FLOW SFN ");
+                stringBuilder.Append(" WHERE 1=1 ");
+
+                if (sysFlow.Id != null && sysFlow.Id != "")
+                {
+                    stringBuilder.Append(" AND ID= '" + sysFlow.Id + "' ");
+                }
+                if (sysFlow.FlowCode != null && sysFlow.FlowCode != "")
+                {
+                    stringBuilder.Append(" AND FLOW_CODE= '" + sysFlow.FlowCode + "' ");
+                }
+                if (sysFlow.Status != 0)
+                {
+                    stringBuilder.Append(" AND STATUS= " + sysFlow.Status + " ");
+                }
+
+                using (OracleDataReader reader = OracleHelper.ExecuteReader(stringBuilder.ToString(), OracleHelper.Connection))
+                {
+                    if (((DbDataReader)reader).Read())
+                    {
+                        this.ReadInfo(reader, o);
+                        return o;
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Error(ex);
+                return null;
+            }
+
+            return o;
+        }
+
+        //缁熻璁板綍鏁�
+        private int ReadCount(OracleDataReader reader)
+        {
+            OracleReaderWrapper wrapper = new OracleReaderWrapper(reader);
+            return wrapper.GetInt("count", 0);
+        }
+
+        //鏁版嵁灏佽
+        private bool ReadInfo(OracleDataReader reader, SysFlow o)
+        {
+            OracleReaderWrapper oracleReaderWrapper = new OracleReaderWrapper(reader);
+            o.Id = oracleReaderWrapper.GetString("ID", "");
+            o.FlowCode = oracleReaderWrapper.GetString("FLOW_CODE", "");
+            o.FlowName = oracleReaderWrapper.GetString("FLOW_NAME", "");
+            o.FlowGroup = oracleReaderWrapper.GetString("FLOW_GROUP", "");
+            o.Status = oracleReaderWrapper.GetInt("STATUS", 0);
+            return true;
+        }
+
+    }
+
+}
diff --git a/web/Dao/SysFlowNodeDao.cs b/web/Dao/SysFlowNodeDao.cs
new file mode 100644
index 0000000..c289723
--- /dev/null
+++ b/web/Dao/SysFlowNodeDao.cs
@@ -0,0 +1,220 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Model;
+using Common;
+using Oracle.DataAccess.Client;
+using System.Data.Common;
+
+namespace Dao
+{
+    /// <summary>
+    /// 娴佺▼鑺傜偣瀹氫箟鎿嶄綔
+    /// </summary>
+    public class SysFlowNodeDao : IDisposable
+    {
+        public void Dispose()
+        {
+        }
+
+        private static SysFlowNodeDao _instance;
+        public static SysFlowNodeDao Instance
+        {
+            get {
+                if (_instance == null)
+                {
+                    _instance = new SysFlowNodeDao();
+                }
+                return _instance;
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇淇℃伅鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public List<SysFlowNode> List(SysFlowNode sysFlowNode)
+        {
+            List<SysFlowNode> list = new List<SysFlowNode>();
+            try
+            {
+                StringBuilder stringBuilder = new StringBuilder();
+                stringBuilder.Append("SELECT SFN.*  ");
+                stringBuilder.Append(" FROM SYS_FLOW_NODE SFN ");
+                stringBuilder.Append(" WHERE 1=1 ");
+
+                if (sysFlowNode.FlowNodeCode != null && sysFlowNode.FlowNodeCode != "")
+                {
+                    stringBuilder.Append(" AND FLOW_NODE_CODE= '" + sysFlowNode.FlowNodeCode + "' ");
+                }
+                if (sysFlowNode.BusinessType != 0)
+                {
+                    stringBuilder.Append(" AND BUSINESS_TYPE= " + sysFlowNode.BusinessType + " ");
+                }
+                stringBuilder.Append(" ORDER BY BUSINESS_TYPE ");
+
+                using (OracleDataReader reader = OracleHelper.ExecuteReader(stringBuilder.ToString() , OracleHelper.Connection))
+                {
+                    while (((DbDataReader)reader).Read())
+                    {
+                        SysFlowNode o = new SysFlowNode();
+                        if (this.ReadInfo(reader, o))
+                            list.Add(o);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Error(ex);
+                return list;
+            }
+            return list;
+        }
+
+
+        //娣诲姞淇℃伅
+        public bool Add(SysFlowNode o)
+        {
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.Append("INSERT INTO SYS_FLOW_NODE ( ");
+            stringBuilder.Append(" ID, FLOW_NODE_CODE, FLOW_NODE_NAME, ROLE_ID, USER_ID, BUSINESS_TYPE, REMARK ");
+            stringBuilder.Append(" ) ");
+            stringBuilder.Append(" VALUES (:ID, :FLOW_NODE_CODE, :FLOW_NODE_NAME, :ROLE_ID, :USER_ID, :BUSINESS_TYPE, :REMARK ");
+            stringBuilder.Append("  ) ");
+
+            string sql = stringBuilder.ToString();
+
+            return OracleHelper.ExecuteSql(sql, 
+                OracleHelper.Connection,
+                new OracleParameter(":ID", (object)o.Id),
+                new OracleParameter(":FLOW_NODE_CODE", (object)o.FlowNodeCode),
+                new OracleParameter(":FLOW_NODE_NAME", (object)o.FlowNodeName),
+                new OracleParameter(":ROLE_ID", (object)o.RoleId),
+                new OracleParameter(":USER_ID", (object)o.UserId),
+                new OracleParameter(":BUSINESS_TYPE", (object)o.BusinessType),
+                new OracleParameter(":REMARK", (object)o.Remark)
+                ) > 0;
+        }
+
+        //鍒犻櫎
+        public bool Delete(string id)
+        {
+            if (string.IsNullOrEmpty(id) )
+                return false;
+            return OracleHelper.ExecuteSql("delete from SYS_FLOW_NODE where ID=:ID", OracleHelper.Connection, new OracleParameter(":ID", (object)id)) > 0;
+        }
+
+        //鏇存柊浜у搧鎴栦骇鍝佸垎绫讳俊鎭�
+        public bool Update(SysFlowNode o)
+        {
+            OracleParameter[] cmdParms = new OracleParameter[] {
+                new OracleParameter(":ID", (object)o.Id),
+                new OracleParameter(":FLOW_NODE_CODE", (object)o.FlowNodeCode),
+                new OracleParameter(":FLOW_NODE_NAME", (object)o.FlowNodeName),
+                new OracleParameter(":ROLE_ID", (object)o.RoleId),
+                new OracleParameter(":USER_ID", (object)o.UserId),
+                new OracleParameter(":BUSINESS_TYPE", (object)o.BusinessType),
+                new OracleParameter(":REMARK", (object)o.Remark)
+            };
+
+
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.Append("UPDATE SYS_FLOW_NODE SET ");
+            stringBuilder.Append(" , FLOW_NODE_CODE =:FLOW_NODE_CODE ");
+            stringBuilder.Append(" , FLOW_NODE_NAME =:FLOW_NODE_NAME ");
+            stringBuilder.Append(" , ROLE_ID =:ROLE_ID ");
+            stringBuilder.Append(" , USER_ID=:USER_ID, BUSINESS_TYPE=:BUSINESS_TYPE, REMARK=:REMARK ");
+            stringBuilder.Append(" WHERE ID=:ID ");
+
+            string sql = stringBuilder.ToString();
+            return (OracleHelper.ExecuteSql(sql, OracleHelper.Connection, cmdParms) > 0);
+        }
+
+        //鑾峰彇淇℃伅
+        public SysFlowNode Get(string id)
+        {
+            SysFlowNode o = new SysFlowNode();
+            if (string.IsNullOrEmpty(id))
+                return o;
+            using (OracleDataReader reader = OracleHelper.ExecuteReader(string.Format("select * from SYS_FLOW_NODE where ID=:ID"), OracleHelper.Connection, new OracleParameter(":ID", (object)id)))
+            {
+                if (((DbDataReader)reader).Read())
+                {
+                    this.ReadInfo(reader, o);
+                    return o;
+                }
+            }
+            return o;
+        }
+
+        /// <summary>
+        /// 鏍规嵁鐢ㄦ埛鍙婃祦绋嬭妭鐐硅幏鍙栧垽鏂槸鏈夋潈闄�
+        /// </summary>
+        /// <returns></returns>
+        public List<SysFlowNode> IsAuth(SysFlowNode sysFlowNode)
+        {
+            List<SysFlowNode> list = new List<SysFlowNode>();
+            try
+            {
+                StringBuilder stringBuilder = new StringBuilder();
+                stringBuilder.Append("SELECT SFN.*  ");
+                stringBuilder.Append(" FROM SYS_FLOW_NODE SFN ");
+                stringBuilder.Append(" WHERE 1=1 ");
+
+                if (sysFlowNode.FlowNodeCode != null && sysFlowNode.FlowNodeCode != "")
+                {
+                    stringBuilder.Append(" AND FLOW_NODE_CODE= '" + sysFlowNode.FlowNodeCode + "' ");
+                }
+                if (sysFlowNode.BusinessType != 0)
+                {
+                    stringBuilder.Append(" AND BUSINESS_TYPE= " + sysFlowNode.BusinessType + " ");
+                }
+                if (sysFlowNode.UserId != null && sysFlowNode.UserId != "")
+                {
+                    stringBuilder.Append(" AND INSTR(','||USER_ID||',','" + sysFlowNode.UserId + "') > 0");
+                }
+                stringBuilder.Append(" ORDER BY BUSINESS_TYPE ");
+
+                using (OracleDataReader reader = OracleHelper.ExecuteReader(stringBuilder.ToString(), OracleHelper.Connection))
+                {
+                    while (((DbDataReader)reader).Read())
+                    {
+                        SysFlowNode o = new SysFlowNode();
+                        if (this.ReadInfo(reader, o))
+                            list.Add(o);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Error(ex);
+                return list;
+            }
+            return list;
+        }
+
+        //缁熻璁板綍鏁�
+        private int ReadCount(OracleDataReader reader)
+        {
+            OracleReaderWrapper wrapper = new OracleReaderWrapper(reader);
+            return wrapper.GetInt("count", 0);
+        }
+
+        //鏁版嵁灏佽
+        private bool ReadInfo(OracleDataReader reader, SysFlowNode o)
+        {
+            OracleReaderWrapper oracleReaderWrapper = new OracleReaderWrapper(reader);
+            o.Id = oracleReaderWrapper.GetString("ID", "");
+            o.FlowNodeCode = oracleReaderWrapper.GetString("FLOW_NODE_CODE", "");
+            o.FlowNodeName = oracleReaderWrapper.GetString("FLOW_NODE_NAME", "");
+            o.RoleId = oracleReaderWrapper.GetString("ROLE_ID", "");
+            o.UserId = oracleReaderWrapper.GetString("USER_ID", "");
+            o.BusinessType = oracleReaderWrapper.GetInt("BUSINESS_TYPE", 0);
+            o.Remark = oracleReaderWrapper.GetString("REMARK", "");
+            return true;
+        }
+
+    }
+
+}
diff --git a/web/Dao/bin/Release/Dao.dll b/web/Dao/bin/Release/Dao.dll
index 4769573..465f93e 100644
--- a/web/Dao/bin/Release/Dao.dll
+++ b/web/Dao/bin/Release/Dao.dll
Binary files differ
diff --git a/web/Dao/bin/Release/Dao.pdb b/web/Dao/bin/Release/Dao.pdb
index 15300ad..156a9f8 100644
--- a/web/Dao/bin/Release/Dao.pdb
+++ b/web/Dao/bin/Release/Dao.pdb
Binary files differ
diff --git a/web/Dao/bin/Release/Model.dll b/web/Dao/bin/Release/Model.dll
index 2982995..5e1399a 100644
--- a/web/Dao/bin/Release/Model.dll
+++ b/web/Dao/bin/Release/Model.dll
Binary files differ
diff --git a/web/Dao/bin/Release/Model.pdb b/web/Dao/bin/Release/Model.pdb
index 9987a01..2d4dfc1 100644
--- a/web/Dao/bin/Release/Model.pdb
+++ b/web/Dao/bin/Release/Model.pdb
Binary files differ
diff --git a/web/Dao/obj/Debug/Dao.csproj.AssemblyReference.cache b/web/Dao/obj/Debug/Dao.csproj.AssemblyReference.cache
index 20947fa..bb77563 100644
--- a/web/Dao/obj/Debug/Dao.csproj.AssemblyReference.cache
+++ b/web/Dao/obj/Debug/Dao.csproj.AssemblyReference.cache
Binary files differ
diff --git a/web/Dao/obj/Debug/Dao.dll b/web/Dao/obj/Debug/Dao.dll
index cd10034..408ec61 100644
--- a/web/Dao/obj/Debug/Dao.dll
+++ b/web/Dao/obj/Debug/Dao.dll
Binary files differ
diff --git a/web/Dao/obj/Debug/Dao.pdb b/web/Dao/obj/Debug/Dao.pdb
index 0727b98..6ccb779 100644
--- a/web/Dao/obj/Debug/Dao.pdb
+++ b/web/Dao/obj/Debug/Dao.pdb
Binary files differ
diff --git a/web/Dao/obj/Release/Dao.csproj.AssemblyReference.cache b/web/Dao/obj/Release/Dao.csproj.AssemblyReference.cache
index c7c0395..47cfffa 100644
--- a/web/Dao/obj/Release/Dao.csproj.AssemblyReference.cache
+++ b/web/Dao/obj/Release/Dao.csproj.AssemblyReference.cache
Binary files differ
diff --git a/web/Dao/obj/Release/Dao.csproj.CopyComplete b/web/Dao/obj/Release/Dao.csproj.CopyComplete
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/web/Dao/obj/Release/Dao.csproj.CopyComplete
diff --git a/web/Dao/obj/Release/Dao.csproj.CoreCompileInputs.cache b/web/Dao/obj/Release/Dao.csproj.CoreCompileInputs.cache
index 21ddc74..89d1d3d 100644
--- a/web/Dao/obj/Release/Dao.csproj.CoreCompileInputs.cache
+++ b/web/Dao/obj/Release/Dao.csproj.CoreCompileInputs.cache
@@ -1,9 +1 @@
-<<<<<<< HEAD
-<<<<<<< Updated upstream
-03ac8fb778df47064b4ab65f28af8408156b7fa4
-=======
-4e3d3c0d46e0394eded6a28ceeaec6a8f69625db
->>>>>>> Stashed changes
-=======
-03ac8fb778df47064b4ab65f28af8408156b7fa4
->>>>>>> 751731362e5fcf901065c25eaed0319cf7a27cc1
+0c60e0363c7ebe19e617b065424b04ecbc8fd3d6
diff --git a/web/Dao/obj/Release/Dao.csproj.FileListAbsolute.txt b/web/Dao/obj/Release/Dao.csproj.FileListAbsolute.txt
index 22f6468..62ed5ea 100644
--- a/web/Dao/obj/Release/Dao.csproj.FileListAbsolute.txt
+++ b/web/Dao/obj/Release/Dao.csproj.FileListAbsolute.txt
@@ -73,3 +73,18 @@
 C:\Users\mac\Desktop\Work-Archives\SMGW\SMGW_NewWeb\web\Dao\obj\Release\Dao.pdb
 =======
 >>>>>>> Stashed changes
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\bin\Release\Dao.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\bin\Release\Dao.pdb
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\bin\Release\Common.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\bin\Release\Model.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\bin\Release\Newtonsoft.Json.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\bin\Release\Oracle.DataAccess.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\bin\Release\UMCLib.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\bin\Release\log4net.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\bin\Release\Model.pdb
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\bin\Release\Common.pdb
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\obj\Release\Dao.csproj.AssemblyReference.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\obj\Release\Dao.csproj.CoreCompileInputs.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\obj\Release\Dao.csproj.CopyComplete
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\obj\Release\Dao.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\obj\Release\Dao.pdb
diff --git a/web/Dao/obj/Release/Dao.dll b/web/Dao/obj/Release/Dao.dll
index 4769573..465f93e 100644
--- a/web/Dao/obj/Release/Dao.dll
+++ b/web/Dao/obj/Release/Dao.dll
Binary files differ
diff --git a/web/Dao/obj/Release/Dao.pdb b/web/Dao/obj/Release/Dao.pdb
index 15300ad..156a9f8 100644
--- a/web/Dao/obj/Release/Dao.pdb
+++ b/web/Dao/obj/Release/Dao.pdb
Binary files differ
diff --git a/web/Dao/obj/Release/build.force b/web/Dao/obj/Release/build.force
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/web/Dao/obj/Release/build.force
diff --git a/web/Lib/Dao.dll b/web/Lib/Dao.dll
index cd10034..408ec61 100644
--- a/web/Lib/Dao.dll
+++ b/web/Lib/Dao.dll
Binary files differ
diff --git a/web/Lib/Dao.pdb b/web/Lib/Dao.pdb
index 0727b98..6ccb779 100644
--- a/web/Lib/Dao.pdb
+++ b/web/Lib/Dao.pdb
Binary files differ
diff --git a/web/Model/Model/GwOrder.cs b/web/Model/Model/GwOrder.cs
new file mode 100644
index 0000000..e3ff54f
--- /dev/null
+++ b/web/Model/Model/GwOrder.cs
@@ -0,0 +1,44 @@
+锘� 
+using System;
+
+namespace Model
+{
+
+    //璁㈠崟琛�
+  public class GwOrder
+  {
+        public string OrderId { get; set; }
+
+        public string SpId { get; set; }
+
+        public string ClientId { get; set; }
+
+        public string ClientName { get; set; }
+
+        public string ProductId { get; set; }
+
+        public string ComboId { get; set; }
+
+        public int BasicNum { get; set; }
+
+        public int GivingNum { get; set; }
+
+        public int Price { get; set; }
+
+        public int OrderNumTotal { get; set; }
+
+        public int OrderAmountTotal { get; set; }
+
+        public int BeforeBalanceNum { get; set; }
+
+        public string Creator { get; set; }
+
+        public DateTime CreateTime { get; set; }
+
+        //0-寰呭鏍革紙宸叉彁浜わ級锛�1-瀹℃牳涓紱2-瀹℃牳涓嶉�氳繃锛�3-瀹℃牳涓嶉�氳繃锛�4-鍙栨秷锛�
+        //鐢宠璁㈠崟鍦ㄦ湭瀹℃牳鎯呭喌涓嬪彲浠ュ彇娑堛��
+        public int Status { get; set; }
+
+        public string Remark { get; set; }
+  }
+}
diff --git a/web/Model/Model/GwOrderAudit.cs b/web/Model/Model/GwOrderAudit.cs
new file mode 100644
index 0000000..985b66b
--- /dev/null
+++ b/web/Model/Model/GwOrderAudit.cs
@@ -0,0 +1,25 @@
+锘� 
+using System;
+
+namespace Model
+{
+
+    //璁㈠崟瀹℃牳琛�
+    public class GwOrderAudit
+  {
+        public string AuditId { get; set; }
+
+        public string OrderId { get; set; }
+
+        public int AuditSort { get; set; }
+        //1-瀹℃牳閫氳繃锛�2-瀹℃牳涓嶉�氳繃锛�3-鍙栨秷
+        public int AuditStatus { get; set; }
+
+        public string Auditor { get; set; }
+
+        //0-鍏呭�硷紱99-鍏朵粬
+        public string AuditReason { get; set; }
+
+        public DateTime AuditTime { get; set; }
+  }
+}
diff --git a/web/Model/Model/SysFlow.cs b/web/Model/Model/SysFlow.cs
new file mode 100644
index 0000000..5a6748e
--- /dev/null
+++ b/web/Model/Model/SysFlow.cs
@@ -0,0 +1,21 @@
+锘� 
+using System;
+
+namespace Model
+{
+
+    //娴佺▼瀹氫箟琛�
+    public class SysFlow
+  {
+        public string Id { get; set; }
+
+        public string FlowCode { get; set; }
+
+        public string FlowName { get; set; }
+
+        public string FlowGroup { get; set; }
+
+        //0-绂佺敤锛�1-鍚敤
+        public int Status { get; set; }
+  }
+}
diff --git a/web/Model/Model/SysFlowNode.cs b/web/Model/Model/SysFlowNode.cs
new file mode 100644
index 0000000..e3a65d3
--- /dev/null
+++ b/web/Model/Model/SysFlowNode.cs
@@ -0,0 +1,25 @@
+锘� 
+using System;
+
+namespace Model
+{
+
+    //娴佺▼鑺傜偣瀹氫箟
+    public class SysFlowNode
+  {
+        public string Id { get; set; }
+
+        public string FlowNodeCode { get; set; }
+
+        public string FlowNodeName { get; set; }
+
+        public string RoleId { get; set; }
+
+        public string UserId { get; set; }
+
+        //0-鍏呭�硷紱99-鍏朵粬
+        public int BusinessType { get; set; }
+
+        public string Remark { get; set; }
+  }
+}
diff --git a/web/Model/bin/Release/Model.dll b/web/Model/bin/Release/Model.dll
index 2982995..5e1399a 100644
--- a/web/Model/bin/Release/Model.dll
+++ b/web/Model/bin/Release/Model.dll
Binary files differ
diff --git a/web/Model/bin/Release/Model.pdb b/web/Model/bin/Release/Model.pdb
index 9987a01..2d4dfc1 100644
--- a/web/Model/bin/Release/Model.pdb
+++ b/web/Model/bin/Release/Model.pdb
Binary files differ
diff --git a/web/Model/obj/Debug/Model.csproj.AssemblyReference.cache b/web/Model/obj/Debug/Model.csproj.AssemblyReference.cache
index a927aa2..4cee163 100644
--- a/web/Model/obj/Debug/Model.csproj.AssemblyReference.cache
+++ b/web/Model/obj/Debug/Model.csproj.AssemblyReference.cache
Binary files differ
diff --git a/web/Model/obj/Debug/Model.csproj.CopyComplete b/web/Model/obj/Debug/Model.csproj.CopyComplete
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/web/Model/obj/Debug/Model.csproj.CopyComplete
diff --git a/web/Model/obj/Release/Model.csproj.AssemblyReference.cache b/web/Model/obj/Release/Model.csproj.AssemblyReference.cache
index eb259f3..2816e2a 100644
--- a/web/Model/obj/Release/Model.csproj.AssemblyReference.cache
+++ b/web/Model/obj/Release/Model.csproj.AssemblyReference.cache
Binary files differ
diff --git a/web/Model/obj/Release/Model.csproj.CoreCompileInputs.cache b/web/Model/obj/Release/Model.csproj.CoreCompileInputs.cache
index db7c352..57e5d3c 100644
--- a/web/Model/obj/Release/Model.csproj.CoreCompileInputs.cache
+++ b/web/Model/obj/Release/Model.csproj.CoreCompileInputs.cache
@@ -1,9 +1 @@
-<<<<<<< HEAD
-<<<<<<< Updated upstream
-c4762145da2a34560c5dc93e2958bfb07137e5f2
-=======
-4680df9d251d534abbe2f1eb51d69736b996d0d8
->>>>>>> Stashed changes
-=======
-c4762145da2a34560c5dc93e2958bfb07137e5f2
->>>>>>> 751731362e5fcf901065c25eaed0319cf7a27cc1
+12e65c17b8944c912c6483c66ed2578caa57f1d2
diff --git a/web/Model/obj/Release/Model.csproj.FileListAbsolute.txt b/web/Model/obj/Release/Model.csproj.FileListAbsolute.txt
index baa5c80..701dd21 100644
--- a/web/Model/obj/Release/Model.csproj.FileListAbsolute.txt
+++ b/web/Model/obj/Release/Model.csproj.FileListAbsolute.txt
@@ -63,3 +63,16 @@
 C:\Users\mac\Desktop\Work-Archives\SMGW\SMGW_NewWeb\web\Model\obj\Release\Model.pdb
 =======
 >>>>>>> Stashed changes
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\bin\Release\Model.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\bin\Release\Model.pdb
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\bin\Release\Common.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\bin\Release\Newtonsoft.Json.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\bin\Release\UMCLib.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\bin\Release\log4net.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\bin\Release\Oracle.DataAccess.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\bin\Release\Common.pdb
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\obj\Release\Model.csproj.AssemblyReference.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\obj\Release\Model.csproj.CoreCompileInputs.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\obj\Release\Model.csproj.CopyComplete
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\obj\Release\Model.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\obj\Release\Model.pdb
diff --git a/web/Model/obj/Release/Model.dll b/web/Model/obj/Release/Model.dll
index 2982995..5e1399a 100644
--- a/web/Model/obj/Release/Model.dll
+++ b/web/Model/obj/Release/Model.dll
Binary files differ
diff --git a/web/Model/obj/Release/Model.pdb b/web/Model/obj/Release/Model.pdb
index 9987a01..2d4dfc1 100644
--- a/web/Model/obj/Release/Model.pdb
+++ b/web/Model/obj/Release/Model.pdb
Binary files differ
diff --git a/web/UMCLib/bin/Release/UMCLib.dll b/web/UMCLib/bin/Release/UMCLib.dll
index c4dccfe..67a8f18 100644
--- a/web/UMCLib/bin/Release/UMCLib.dll
+++ b/web/UMCLib/bin/Release/UMCLib.dll
Binary files differ
diff --git a/web/UMCLib/bin/Release/UMCLib.pdb b/web/UMCLib/bin/Release/UMCLib.pdb
index 015c9a8..fdd37a0 100644
--- a/web/UMCLib/bin/Release/UMCLib.pdb
+++ b/web/UMCLib/bin/Release/UMCLib.pdb
Binary files differ
diff --git a/web/UMCLib/obj/Release/UMCLib.csproj.AssemblyReference.cache b/web/UMCLib/obj/Release/UMCLib.csproj.AssemblyReference.cache
index 841426a..9b73383 100644
--- a/web/UMCLib/obj/Release/UMCLib.csproj.AssemblyReference.cache
+++ b/web/UMCLib/obj/Release/UMCLib.csproj.AssemblyReference.cache
Binary files differ
diff --git a/web/UMCLib/obj/Release/UMCLib.csproj.CoreCompileInputs.cache b/web/UMCLib/obj/Release/UMCLib.csproj.CoreCompileInputs.cache
index ed11994..7f17e93 100644
--- a/web/UMCLib/obj/Release/UMCLib.csproj.CoreCompileInputs.cache
+++ b/web/UMCLib/obj/Release/UMCLib.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-fa96c443ff4c3eda7263ab6de8b0bbba4c306077
+6ff39fd28dd87b6cc010ab534c82ef3efebde7dc
diff --git a/web/UMCLib/obj/Release/UMCLib.csproj.FileListAbsolute.txt b/web/UMCLib/obj/Release/UMCLib.csproj.FileListAbsolute.txt
index ef8d5a0..9d69a19 100644
--- a/web/UMCLib/obj/Release/UMCLib.csproj.FileListAbsolute.txt
+++ b/web/UMCLib/obj/Release/UMCLib.csproj.FileListAbsolute.txt
@@ -33,3 +33,11 @@
 C:\Users\mac\Desktop\Work-Archives\SMGW\SMGW_NewWeb\web\UMCLib\obj\Release\UMCLib.pdb
 =======
 >>>>>>> Stashed changes
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\bin\Release\UMCLib.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\bin\Release\UMCLib.pdb
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\bin\Release\Newtonsoft.Json.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\obj\Release\UMCLib.csproj.AssemblyReference.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\obj\Release\UMCLib.csproj.CoreCompileInputs.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\obj\Release\UMCLib.csproj.CopyComplete
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\obj\Release\UMCLib.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\obj\Release\UMCLib.pdb
diff --git a/web/UMCLib/obj/Release/UMCLib.dll b/web/UMCLib/obj/Release/UMCLib.dll
index c4dccfe..67a8f18 100644
--- a/web/UMCLib/obj/Release/UMCLib.dll
+++ b/web/UMCLib/obj/Release/UMCLib.dll
Binary files differ
diff --git a/web/UMCLib/obj/Release/UMCLib.pdb b/web/UMCLib/obj/Release/UMCLib.pdb
index 015c9a8..fdd37a0 100644
--- a/web/UMCLib/obj/Release/UMCLib.pdb
+++ b/web/UMCLib/obj/Release/UMCLib.pdb
Binary files differ
diff --git a/web/web/Bin/Dao.dll b/web/web/Bin/Dao.dll
index cd10034..408ec61 100644
--- a/web/web/Bin/Dao.dll
+++ b/web/web/Bin/Dao.dll
Binary files differ
diff --git a/web/web/Bin/Dao.pdb b/web/web/Bin/Dao.pdb
index 0727b98..6ccb779 100644
--- a/web/web/Bin/Dao.pdb
+++ b/web/web/Bin/Dao.pdb
Binary files differ
diff --git a/web/web/GwOrder.ashx b/web/web/GwOrder.ashx
new file mode 100644
index 0000000..7e9019d
--- /dev/null
+++ b/web/web/GwOrder.ashx
@@ -0,0 +1,706 @@
+锘�<%@ WebHandler Language="C#" Class="GwOrderHandler" %>
+using Dao;
+using Model;
+using System;
+using System.Collections.Generic;
+using System.Text.RegularExpressions;
+
+public class GwOrderHandler : PageHandler<SysUser>
+{
+    private GwOrderDao _Dao = new GwOrderDao();
+    private GwSpDao _GwSpDao = new GwSpDao();
+    private GwOpGroupDao _GwOpGroupDao = new GwOpGroupDao();
+    private GwProductDao _GwProductDao = new GwProductDao();
+    private SysXhDao _SysXhDao = new SysXhDao();
+    private SysFlowDao _SysFlowDao = new SysFlowDao();
+    private SysFlowNodeDao _SysFlowNodeDao = new SysFlowNodeDao();
+
+    private SysFlowDao _SysFlowDaoDao = new SysFlowDao();   //娴佺▼瀹氫箟
+    private GwOrderAuditDao _GwOrderAuditDao = new GwOrderAuditDao();   //璁㈠崟瀹℃牳
+
+    private List<GwOp> _OpList;
+    private List<GwOpGroup> _GroupList;
+    private List<GwProduct> _ProductList;   //浜у搧鍙婁骇鍝佸垎绫�
+    //private List<GwProduct> _ProductClassList;  //浜у搧鍒嗙被
+
+    public override JsonPageResult ProcessRequestInternal(PageContext<SysUser> context)
+    {
+        string @string = context.GetString("action");
+        switch (@string)
+        {
+            case "delete":
+                return this.Delete(context);    //鍒犻櫎
+            case "update":
+                return this.Update(context);    //淇敼
+            case "add":
+                return this.Add(context);       //娣诲姞
+            case "listComplete":
+                return this.ListComplete(context);      //鏌ヨ宸插畬鎴愯鍗曪紙瀹℃牳閫氳繃銆佸鏍镐笉閫氳繃銆佸彇娑堬級
+            case "listAudit":
+                return this.ListAudit(context);      //鏌ヨ寰呭鏍歌鍗曪紙寰呭鏍搞�佸鏍镐腑锛�
+            case "gwOrderList":
+                return this.GwOrderList(context);      //璁㈠崟鍒楄〃
+            case "get":
+                return this.Get(context);      //鑾峰彇璁板綍淇℃伅
+            case "cancel":
+                return this.Cancel(context);      //鍙栨秷    
+            case "audit":
+                return this.Audit(context);      //璁㈠崟瀹℃牳
+
+            default:
+                throw new Exception("Invalid Action=" + @string);
+        }
+    }
+
+    //鍔犺浇宸插畬鎴愯鍗曪紙瀹℃牳閫氳繃銆佸鏍镐笉閫氳繃銆佸彇娑堬級
+    private JsonPageResult ListComplete(PageContext<SysUser> context)
+    {
+        //Console.WriteLine("List.............[" + context.GetInt("name") + "][" + context.GetInt("classes") + "]");
+        string spId = context.GetString("spId");
+        string clientId = context.GetString("clientId");
+        string clientName = context.GetString("clientName");
+        int flag = context.GetInt("flag");
+        DateTime startDate = context.GetDateTime("startDate");
+        DateTime endDate = context.GetDateTime("endDate");
+
+        int recordCount = 0;
+        int pageSize = context.GetInt("pageSize", 50);
+        int pageIndex = context.GetInt("pageIndex", 1);
+
+        List<GwOrder> list = _Dao.LoadInfoList(spId, clientId, clientName, flag, startDate, endDate, pageSize, pageIndex, out recordCount);
+
+        string str1 = "";
+        if (list != null && list.Count > 0)
+        {
+
+            int num = 0;
+            foreach (GwOrder bean in list)
+            {
+                ++num;
+
+                str1 += "<tr><td>" + bean.OrderId + "</td>";
+                str1 = str1 + "<td>" + bean.SpId + "</td>";
+                str1 = str1 + "<td>" + bean.ClientId + "-" + bean.ClientName + "</td>";
+                str1 = str1 + "<td>" + ProductToName(bean.ProductId) + "</td>";
+                //str1 = str1 + "<td>" + bean.ComboId + "</td>";
+                str1 = str1 + "<td>" + bean.BasicNum + "</td>";
+                str1 = str1 + "<td>" + bean.GivingNum + "</td>";
+                str1 = str1 + string.Format("<td>{0}鍏�/鏉�</td>", (object)(Convert.ToDecimal(bean.Price) / new Decimal(1000)));
+                str1 = str1 + "<td>" + bean.OrderNumTotal + "</td>";
+                str1 = str1 + string.Format("<td>{0}鍏�</td>", (object)(Convert.ToDecimal(bean.OrderAmountTotal) / new Decimal(1000)));;
+                str1 = str1 + "<td>" + bean.BeforeBalanceNum + "</td>";
+                str1 = str1 + "<td>" + bean.Creator + "</td>";
+                str1 = str1 + "<td>" + bean.CreateTime + "</td>";
+                str1 = str1 + "<td>" + StatusToName(bean.Status) + "</td>";
+                //str1 = str1 + "<td>" + bean.Remark + "</td>";
+
+                str1 += "<td  class=\"text-right\">";
+                str1 += string.Format("<a href=\"javascript:;\" data-orderid=\"{0}\" class=\"action-modal-detail btn  btn-success btn-xs\"><i class=\"fa fa-search\"></i>&nbsp;鏌ョ湅</a> ", (object) bean.OrderId);
+                str1 += "</td>";
+                str1 += "</tr>";
+            }
+        }
+        else
+            str1 += "<tr><td colspan=\"14\" style=\"padding-left:5px; text-align: center;\">鏆傛棤淇℃伅</td></tr>";
+
+        return new JsonPageResult(true,  new
+        {
+            Table = str1.ToString(),
+            TotalCount = recordCount
+        });
+    }
+
+    //鍔犺浇寰呭鏍歌鍗曪紙寰呭鏍搞�佸鏍镐腑锛�
+    private JsonPageResult ListAudit(PageContext<SysUser> context)
+    {
+        string spId = context.GetString("spId");
+        string clientId = context.GetString("clientId");
+        string clientName = context.GetString("clientName");
+        int flag = context.GetInt("flag");
+        DateTime startDate = context.GetDateTime("startDate");
+        DateTime endDate = context.GetDateTime("endDate");
+
+        int recordCount = 0;
+        int pageSize = context.GetInt("pageSize", 50);
+        int pageIndex = context.GetInt("pageIndex", 1);
+
+        List<GwOrder> list = _Dao.LoadInfoList(spId, clientId, clientName, flag, startDate, endDate, pageSize, pageIndex, out recordCount);
+
+        string str1 = "";
+        if (list != null && list.Count > 0)
+        {
+
+            int num = 0;
+            foreach (GwOrder bean in list)
+            {
+                ++num;
+
+                str1 += "<tr><td>" + bean.OrderId + "</td>";
+                str1 = str1 + "<td>" + bean.SpId + "</td>";
+                str1 = str1 + "<td>" + bean.ClientId + "-" + bean.ClientName + "</td>";
+                str1 = str1 + "<td>" + ProductToName(bean.ProductId) + "</td>";
+                //str1 = str1 + "<td>" + bean.ComboId + "</td>";
+                str1 = str1 + "<td>" + bean.BasicNum + "</td>";
+                str1 = str1 + "<td>" + bean.GivingNum + "</td>";
+                str1 = str1 + string.Format("<td>{0}鍏�/鏉�</td>", (object)(Convert.ToDecimal(bean.Price) / new Decimal(1000)));
+                str1 = str1 + "<td>" + bean.OrderNumTotal + "</td>";
+                str1 = str1 + string.Format("<td>{0}鍏�</td>", (object)(Convert.ToDecimal(bean.OrderAmountTotal) / new Decimal(1000)));;
+                str1 = str1 + "<td>" + bean.BeforeBalanceNum + "</td>";
+                str1 = str1 + "<td>" + bean.Creator + "</td>";
+                str1 = str1 + "<td>" + bean.CreateTime + "</td>";
+                str1 = str1 + "<td>" + StatusToName(bean.Status) + "</td>";
+                //str1 = str1 + "<td>" + bean.Remark + "</td>";
+
+                str1 += "<td  class=\"text-right\">";
+                str1 += string.Format("<a href=\"javascript:;\" data-orderid=\"{0}\" class=\"action-modal-detail btn  btn-success btn-xs\"><i class=\"fa fa-search\"></i>&nbsp;鏌ョ湅</a> ", (object) bean.OrderId);
+                str1 += string.Format("<a href=\"javascript:;\" data-orderid=\"{0}\" class=\"action-modal-audit btn  btn-success btn-xs\"><i class=\"fa fa-search\"></i>&nbsp;瀹℃牳</a> ", (object) bean.OrderId);
+                if(bean.Status == 0) {
+                    str1 += string.Format("<a href=\"javascript:;\" data-orderid=\"{0}\" class=\"action-modal-cancel btn  btn-success btn-xs\"><i class=\"fa fa-search\"></i>&nbsp;鍙栨秷</a> ", (object) bean.OrderId);
+                }
+                str1 += "</td>";
+                str1 += "</tr>";
+            }
+        }
+        else
+            str1 += "<tr><td colspan=\"14\" style=\"padding-left:5px; text-align: center;\">鏆傛棤淇℃伅</td></tr>";
+
+        return new JsonPageResult(true,  new
+        {
+            Table = str1.ToString(),
+            TotalCount = recordCount
+        });
+    }
+        
+    private JsonPageResult GwOrderList(PageContext<SysUser> context)
+    {
+            /**
+        string string1 = context.GetString("SpID");
+        string string2 = context.GetString("ClientID");
+        string string3 = context.GetString("ClientName");
+        string str1 = context.GetString("sDate");
+        string str2 = context.GetString("EndTime");
+        if (string.IsNullOrEmpty(str1))
+            str1 = DateTime.Now.AddDays(-1.0).ToString("yyyy-MM-dd");
+        if (string.IsNullOrEmpty(str2))
+            str2 = DateTime.Now.ToString("yyyy-MM-dd");
+            **/
+
+        
+        string spId = context.GetString("spId");
+        string clientId = context.GetString("clientId");
+        string clientName = context.GetString("clientName");
+        int flag = context.GetInt("flag");
+        DateTime startDate = context.GetDateTime("startDate");
+        DateTime endDate = context.GetDateTime("endDate");
+
+        int recordCount = 0;
+        int pageSize = context.GetInt("pageSize", 50);
+        int pageIndex = context.GetInt("pageIndex", 1);
+
+        List<GwOrder> list = _Dao.LoadInfoList(spId, clientId, clientName, flag, startDate, endDate, pageSize, pageIndex, out recordCount);
+
+        string str1 = "";
+        if (list != null && list.Count > 0)
+        {
+
+            int num = 0;
+            foreach (GwOrder bean in list)
+            {
+                ++num;
+
+                str1 += "<tr><td>" + bean.OrderId + "</td>";
+                str1 = str1 + "<td>" + bean.SpId + "</td>";
+                str1 = str1 + "<td>" + bean.ClientId + "-" + bean.ClientName + "</td>";
+                str1 = str1 + "<td>" + ProductToName(bean.ProductId) + "</td>";
+                //str1 = str1 + "<td>" + bean.ComboId + "</td>";
+                str1 = str1 + "<td>" + bean.BasicNum + "</td>";
+                str1 = str1 + "<td>" + bean.GivingNum + "</td>";
+                str1 = str1 + string.Format("<td>{0}鍏�/鏉�</td>", (object)(Convert.ToDecimal(bean.Price) / new Decimal(1000)));
+                str1 = str1 + "<td>" + bean.OrderNumTotal + "</td>";
+                str1 = str1 + string.Format("<td>{0}鍏�</td>", (object)(Convert.ToDecimal(bean.OrderAmountTotal) / new Decimal(1000)));;
+                str1 = str1 + "<td>" + bean.BeforeBalanceNum + "</td>";
+                str1 = str1 + "<td>" + bean.Creator + "</td>";
+                str1 = str1 + "<td>" + bean.CreateTime + "</td>";
+                str1 = str1 + "<td>" + StatusToName(bean.Status) + "</td>";
+                //str1 = str1 + "<td>" + bean.Remark + "</td>";
+
+                str1 += "<td  class=\"text-right\">";
+                str1 += string.Format("<a href=\"javascript:;\" data-orderid=\"{0}\" class=\"action-modal-detail btn  btn-success btn-xs\"><i class=\"fa fa-search\"></i>&nbsp;鏌ョ湅</a> ", (object) bean.OrderId);
+                //str1 += string.Format("<a href=\"javascript:;\" data-orderid=\"{0}\" class=\"action-modal-audit btn  btn-success btn-xs\"><i class=\"fa fa-search\"></i>&nbsp;瀹℃牳</a> ", (object) bean.OrderId);
+                //if(bean.Status == 0) {
+                //    str1 += string.Format("<a href=\"javascript:;\" data-orderid=\"{0}\" class=\"action-modal-cancel btn  btn-success btn-xs\"><i class=\"fa fa-search\"></i>&nbsp;鍙栨秷</a> ", (object) bean.OrderId);
+                //}
+                str1 += "</td>";
+                str1 += "</tr>";
+            }
+        }
+        else
+            str1 += "<tr><td colspan=\"14\" style=\"padding-left:5px; text-align: center;\">鏆傛棤淇℃伅</td></tr>";
+
+        return new JsonPageResult(true,  new
+        {
+            Table = str1.ToString(),
+            TotalCount = recordCount
+        });
+    }
+
+
+    //鍒犻櫎淇℃伅
+    private JsonPageResult Delete(PageContext<SysUser> context)
+    {
+        string orderId = context.GetString("orderId");
+
+        GwOrder gwOrder = this._Dao.Get(orderId);
+        if (gwOrder.Status !=0)
+            throw new ArgumentException("璇ヨ鍗曞凡澶勭悊,鏃犳硶鍒犻櫎锛�");
+        this._Dao.Delete(orderId);
+        return new JsonPageResult(true, "鍒犻櫎淇℃伅鎴愬姛锛�");
+
+    }
+
+
+    //鍙栨秷淇℃伅
+    private JsonPageResult Cancel(PageContext<SysUser> context)
+    {
+        string orderId = context.GetString("orderId");
+        int status = context.GetInt("status");
+
+
+        GwOrder gwOrder = this._Dao.Get(orderId);
+        if (gwOrder==null)
+            throw new ArgumentException("璇ヨ鍗曡褰曚笉瀛樺湪锛�");
+        if (gwOrder.Status !=0)
+            throw new ArgumentException("璇ヨ鍗曞凡澶勭悊,鏃犳硶鍙栨秷锛�");
+
+        //status:0-寰呭鏍革紙宸叉彁浜わ級锛�1-瀹℃牳涓紱2-瀹℃牳閫氳繃锛�3-瀹℃牳涓嶉�氳繃锛�4-鍙栨秷锛�
+        this._Dao.UpdateStatus(status, orderId);
+        return new JsonPageResult(true, "鍙栨秷淇℃伅鎴愬姛锛�");
+
+    }
+
+
+    //璁㈠崟瀹℃牳
+    private JsonPageResult Audit(PageContext<SysUser> context)
+    {
+        string orderId = context.GetString("orderId");
+        int status = context.GetInt("status");  //0-瀹℃牳涓嶉�氳繃锛�1-瀹℃牳閫氳繃
+        string auditReason = context.GetString("auditReason");
+
+        string beforeFlowCode = null;   //涔嬪墠鐨勬祦绋嬬紪鐮�
+        string currentFlowCode = null;   //褰撳墠鐨勬祦绋嬬紪鐮�
+        string nextFlowCode = null;   //涓嬩竴涓祦绋嬬紪鐮�
+
+
+        GwOrder gwOrder = this._Dao.Get(orderId);
+        if (gwOrder==null)
+            throw new ArgumentException("璇ヨ鍗曡褰曚笉瀛樺湪锛�");
+        if (gwOrder.Status !=0 && gwOrder.Status !=1)
+            throw new ArgumentException("璇ヨ鍗曞凡澶勭悊,鎿嶄綔澶辫触锛�");
+
+        GwOrderAudit gworderAudit = new GwOrderAudit();
+        gworderAudit.AuditStatus = 1;
+        gworderAudit.OrderId = orderId;
+        List<GwOrderAudit> gworderAuditList = _GwOrderAuditDao.List(gworderAudit);
+        if(gworderAuditList==null || gworderAuditList.Count<=0 )
+        {
+
+        }
+
+        //鍒ゆ柇璁㈠崟瀹℃牳娴佺▼鏄惁閮藉鏍搁�氳繃涓旀槸鏈�鍚庡鏍哥幆鑺傘��
+
+        //鏄渶鍚庡鏍哥幆鑺傛椂锛屾洿鏂板鎴疯处鍙蜂綑棰濇潯鏁般��
+
+        //涓嶆槸鏈�鍚庡鏍哥幆鑺傛椂锛岀珯鍐呴�氱煡
+
+        //status:0-寰呭鏍革紙宸叉彁浜わ級锛�1-瀹℃牳涓紱2-瀹℃牳閫氳繃锛�3-瀹℃牳涓嶉�氳繃锛�4-鍙栨秷锛�
+        this._Dao.UpdateStatus(status, orderId);
+        return new JsonPageResult(true, "瀹℃牳鎿嶄綔鎴愬姛锛�");
+
+    }
+
+    //娣诲姞淇℃伅
+    private JsonPageResult Add(PageContext<SysUser> context)
+    {
+
+        string spId = context.GetString("spId");
+        string clientId = context.GetString("clientId");
+        string productId = context.GetString("productId");
+        //string comboId = context.GetString("comboId");
+        int basicNum = context.GetInt("basicNum", 0);
+        int givingNum = context.GetInt("givingNum", 0);
+        int price = 0;
+
+        int orderNumTotal = context.GetInt("orderNumTotal", 0);
+        int orderAmountTotal = context.GetInt("orderAmountTotal", 0);
+        int beforeBalanceNum = context.GetInt("beforeBalanceNum", 0);
+        //瀹㈡湇浜哄憳鎻愪氦璁㈠崟鏃剁殑鐘舵�佷负1-瀹℃牳涓��
+        int status = 1; //0-寰呭鏍革紙宸叉彁浜わ級锛�1-瀹℃牳涓紱2-瀹℃牳閫氳繃锛�3-瀹℃牳涓嶉�氳繃锛�4-鍙栨秷锛涚敵璇疯鍗曞湪鏈鏍告儏鍐典笅鍙互鍙栨秷銆�
+        string remark = context.GetString("remark");
+        DateTime createTime = DateTime.Now;
+        string creator = context.OperatorID;
+
+        int num = Math.Max((int) (context.GetDecimal("price", new Decimal(4, 0, 0, false, (byte) 2)) * new Decimal(1000)), 1);
+        price = num;
+
+        //鏍¢獙
+        if (!string.IsNullOrEmpty(context.GetString("price")) && !Regex.IsMatch(context.GetString("price"), "^[0-9]*$") && price<=0 )
+            throw new Exception("鍙傝�冨崟浠蜂笉鑳藉皬浜庣瓑浜�0");
+        if (!string.IsNullOrEmpty(context.GetString("basicNum")) && !Regex.IsMatch(context.GetString("basicNum"), "^[0-9]*$"))
+            throw new Exception("鍩烘湰鏉℃暟蹇呴』涓烘暣鏁�");
+        if (!string.IsNullOrEmpty(context.GetString("givingNum")) && !Regex.IsMatch(context.GetString("givingNum"), "^[0-9]*$"))
+            throw new Exception("璧犻�佹潯鏁板繀椤讳负鏁存暟");
+
+        if (string.IsNullOrEmpty(clientId))
+        {
+            throw new ArgumentException("瀹㈡埛涓嶈兘涓虹┖锛�");
+        }
+        if (string.IsNullOrEmpty(spId))
+        {
+            throw new ArgumentException("璐﹀彿涓嶈兘涓虹┖锛�");
+        }
+
+        if (basicNum<=0 && givingNum <= 0)
+        {
+            throw new ArgumentException("鍩烘湰鏉℃暟鎴栬禒閫佹潯鏁板繀椤诲ぇ浜庨浂锛�");
+        }
+
+        //鑾峰彇璁㈠崟瀹℃牳娴佺▼
+        string flowGroup = null;
+        string[] flowGroupS = null;
+        string[] flowCodeS = null;
+        string flowCode = null;
+        int sort = 0;
+        string flowNodeCode = null;
+        SysFlow SysFlow = new SysFlow();
+        SysFlow.FlowCode = "F_DDSH";    //璁㈠崟娴佺▼
+        SysFlow.Status = 1;    //鐘舵�侊細0-绂佺敤锛�1-鍚敤
+
+        SysFlow sysFlow = _SysFlowDao.Get(SysFlow);
+        if (sysFlow == null)
+        {
+            throw new ArgumentException("璁㈠崟瀹℃牳娴佺▼涓嶅瓨鍦紒");
+        }
+
+        flowGroup = sysFlow.FlowGroup;
+        //娴佺▼缁勫悎涓虹┖鏃�
+        if (string.IsNullOrEmpty(flowGroup))
+        {
+            status = 2; //0-寰呭鏍革紙宸叉彁浜わ級锛�1-瀹℃牳涓紱2-瀹℃牳閫氳繃锛�3-瀹℃牳涓嶉�氳繃锛�4-鍙栨秷锛�
+        }
+        else
+        {
+            status = 1; //0-寰呭鏍革紙宸叉彁浜わ級锛�1-瀹℃牳涓紱2-瀹℃牳閫氳繃锛�3-瀹℃牳涓嶉�氳繃锛�4-鍙栨秷锛�
+
+            flowGroupS = flowGroup.Split('|');
+            if(flowGroupS.Length >0)
+            {
+                flowCode = flowGroupS[0];
+                if (!string.IsNullOrEmpty(flowCode))
+                {
+                    flowCodeS = flowCode.Split('#');
+                }
+            }
+
+            if(flowCodeS!=null && flowCodeS.Length == 2)
+            {
+                sort = int.Parse(flowCodeS[0]);   //搴忓彿
+                flowNodeCode = flowCodeS[1];   //搴忓彿
+            }
+            else
+            {
+                throw new ArgumentException("娴佺▼缁勫悎鏍煎紡閿欒锛�");
+            }
+        }
+
+        //鑾峰彇鐢ㄦ埛鏉冮檺
+        SysFlowNode sysFlowNode = new SysFlowNode();
+            sysFlowNode.BusinessType = 1;   //涓氬姟绫诲瀷:1-鍏呭�硷紱99-鍏朵粬
+            sysFlowNode.FlowNodeCode = flowNodeCode;
+            sysFlowNode.UserId = creator;
+        
+            List<SysFlowNode> sysFlowNodeList = _SysFlowNodeDao.IsAuth(sysFlowNode);
+            if(sysFlowNodeList==null || sysFlowNodeList.Count <=0 )
+        {
+                throw new ArgumentException("鐢ㄦ埛娌℃湁鍏呭�兼潈闄愶紝璇疯仈绯荤鐞嗗憳锛�");
+        }
+        
+
+        //鑾峰彇璁㈠崟淇℃伅
+        GwSp gwSp = _GwSpDao.Get(spId);
+        if (gwSp == null)
+        {
+            throw new ArgumentException("璐﹀彿涓嶅瓨鍦紒");
+        }
+        else if (gwSp.Status==0)
+        {
+            throw new ArgumentException("璐﹀彿宸茬鐢紒");
+        }
+
+        productId = gwSp.ProductId;
+        price = gwSp.Price;
+
+        orderNumTotal = basicNum + givingNum;
+        orderAmountTotal = basicNum * price;
+
+            
+        string orderId = _SysXhDao.getXh("GW_ORDER");  //鑾峰彇鐢熸垚璁㈠崟ID
+        this._Dao.Add(new GwOrder()
+        {
+            OrderId = orderId,
+            SpId = spId,
+            ClientId = clientId,
+            ProductId = productId,
+            //ComboId = comboId,
+            BasicNum = basicNum,
+            GivingNum = givingNum,
+            Price = price,    //鍗曚环鎹㈢畻
+            OrderNumTotal = orderNumTotal,
+            OrderAmountTotal = orderAmountTotal,
+            BeforeBalanceNum = beforeBalanceNum,
+            Status = status,
+            Remark = remark,
+            CreateTime = createTime,
+            Creator = creator
+
+        });
+
+            
+        string auditId = _SysXhDao.getXh("GW_ORDER_AUDIT");  //鑾峰彇鐢熸垚璁㈠崟瀹℃牳ID
+        this._GwOrderAuditDao.Add(new GwOrderAudit()
+        {
+            AuditId = auditId,
+            OrderId = orderId,
+            AuditSort = sort,
+            AuditStatus = status,
+            Auditor = creator,
+            //AuditReason = null,
+            AuditTime = createTime
+
+        });
+
+
+        return new JsonPageResult(true, "鐢熸垚璁㈠崟淇℃伅鎴愬姛锛�");
+    }
+
+    //鏇存柊淇℃伅
+    private JsonPageResult Update(PageContext<SysUser> context)
+    {
+        string orderId = context.GetString("orderId");
+        string spId = context.GetString("spId");
+        string clientId = context.GetString("clientId");
+        string productId = context.GetString("productId");
+        string comboId = context.GetString("clientId");
+        int basicNum = context.GetInt("basicNum", 0);
+        int givingNum = context.GetInt("givingNum", 0);
+        int price = 0;
+
+        int orderNumTotal = context.GetInt("orderNumTotal", 0);
+        int orderAmountTotal = context.GetInt("orderAmountTotal", 0);
+        int beforeBalanceNum = context.GetInt("beforeBalanceNum", 0);
+        int status = 0;
+        string remark = context.GetString("remark");
+        DateTime createTime = DateTime.Now;
+        string creator = context.OperatorID;
+
+        int num = Math.Max((int) (context.GetDecimal("price", new Decimal(4, 0, 0, false, (byte) 2)) * new Decimal(1000)), 1);
+        price = num;
+
+        //鏍¢獙
+        if (!string.IsNullOrEmpty(context.GetString("price")) && !Regex.IsMatch(context.GetString("price"), "^[0-9]*$") && price<=0 )
+            throw new Exception("鍙傝�冨崟浠蜂笉鑳藉皬浜庣瓑浜�0");
+        if (!string.IsNullOrEmpty(context.GetString("basicNum")) && !Regex.IsMatch(context.GetString("basicNum"), "^[0-9]*$"))
+            throw new Exception("鍩烘湰鏉℃暟蹇呴』涓烘暣鏁�");
+        if (!string.IsNullOrEmpty(context.GetString("givingNum")) && !Regex.IsMatch(context.GetString("givingNum"), "^[0-9]*$"))
+            throw new Exception("璧犻�佹潯鏁板繀椤讳负鏁存暟");
+
+        if (string.IsNullOrEmpty(clientId))
+        {
+            throw new ArgumentException("瀹㈡埛涓嶈兘涓虹┖锛�");
+        }
+        if (string.IsNullOrEmpty(spId))
+        {
+            throw new ArgumentException("璐﹀彿涓嶈兘涓虹┖锛�");
+        }
+
+        if (basicNum<=0 && givingNum <= 0)
+        {
+            throw new ArgumentException("鍩烘湰鏉℃暟鎴栬禒閫佹潯鏁板繀椤诲ぇ浜庨浂锛�");
+        }
+
+        this._Dao.Update(new GwOrder()
+        {
+            OrderId = orderId,
+            SpId = spId,
+            ClientId = clientId,
+            ProductId = productId,
+            ComboId = comboId,
+            BasicNum = basicNum,
+            GivingNum = givingNum,
+            Price = price,    //鍗曚环鎹㈢畻
+            OrderNumTotal = orderNumTotal,
+            OrderAmountTotal = orderAmountTotal,
+            BeforeBalanceNum = beforeBalanceNum,
+            Status = status,
+            Remark = remark,
+            CreateTime = createTime,
+            Creator = creator
+
+        });
+
+        return new JsonPageResult(true, "淇℃伅鏇存柊鎴愬姛锛�");
+    }
+
+    //鏍规嵁涓婚敭鑾峰彇浜у搧鎴栦骇鍝佸垎绫讳俊鎭�
+    private JsonPageResult Get(PageContext<SysUser> context)
+    {
+        return new JsonPageResult(true, this._Dao.Get(context.GetString("orderId")));
+    }
+
+    //鑾峰彇閫氶亾鍒楄〃
+    private List<GwOp> OpList
+    {
+        get
+        {
+            if (this._OpList == null)
+            {
+                using (GwOpDao gwOpDao = new GwOpDao())
+                    this._OpList = gwOpDao.LoadInfoList();
+            }
+            return this._OpList;
+        }
+    }
+
+    //鑾峰彇閫氶亾缁勫垪琛�
+    private List<GwOpGroup> GroupList
+    {
+        get
+        {
+            if (this._GroupList == null)
+            {
+                using (GwOpGroupDao gwOpGroupDao = new GwOpGroupDao())
+                    this._GroupList = gwOpGroupDao.GetGroupList();
+            }
+            return this._GroupList;
+        }
+    }
+
+    //閫氶亾ID杞崲鍚嶇О
+    private string GetOpName(int opID)
+    {
+        if (this.OpList == null)
+            return string.Empty;
+        GwOp gwOp = this.OpList.Find((Predicate<GwOp>)(op => op.OpID == opID));
+        if (gwOp != null)
+            return string.Format("{0}-{1}", (object)gwOp.OpID, (object)gwOp.OpName);
+        return string.Empty;
+    }
+
+    //浜у搧绫诲埆杞崲鍚嶇О
+    private string ClassesToName(int classes)
+    {
+        if (classes == -1)
+            return string.Empty;
+        else if(classes == 0)
+            return "0-浜у搧鍒嗙被";
+        else if(classes == 1)
+            return "1-浜у搧";
+
+        return string.Empty;
+    }
+
+    //浜у搧鏄惁榛樿杞崲鍚嶇О
+    private string IsDefaultToName(int isDefault)
+    {
+        if (isDefault == -1)
+            return string.Empty;
+        else if(isDefault == 0)
+            return "0-涓�у寲";
+        else if(isDefault == 1)
+            return "1-绯荤粺榛樿";
+
+        return string.Empty;
+    }
+
+    //鍚敤鍋滅敤杞崲鍚嶇О
+    private string IsEnableToName(int isEnable)
+    {
+        if (isEnable == -1)
+            return string.Empty;
+        else if(isEnable == 0)
+            return "0-鍋滅敤";
+        else if(isEnable == 1)
+            return "1-鍚敤";
+
+        return string.Empty;
+    }
+
+    //閫氶亾缁処D杞崲鍚嶇О
+    private string GetGroupName(int groupID)
+    {
+        if (this.GroupList == null)
+            return string.Empty;
+        GwOpGroup gwOpGroup = this.GroupList.Find((Predicate<GwOpGroup>)(group => group.GroupID == groupID));
+        if (gwOpGroup != null)
+            return string.Format("{0}-{1}", (object)gwOpGroup.GroupID, (object)gwOpGroup.GroupName);
+        return string.Empty;
+    }
+
+    //璁㈠崟鐘舵�佽浆鎹㈠悕绉�
+    private string StatusToName(int status)
+    {
+        if (status == -1)
+            return string.Empty;
+        else if(status == 0)
+            return "0-寰呭鏍革紙宸叉彁浜わ級";
+        else if(status == 1)
+            return "1-瀹℃牳涓�";
+        else if(status == 2)
+            return "2-瀹℃牳閫氳繃";
+        else if(status == 3)
+            return "3-瀹℃牳涓嶉�氳繃";
+        else if(status == 4)
+            return "4-鍙栨秷";
+
+        return string.Empty;
+    }
+
+
+    //鍔犺浇浜у搧鍙婁骇鍝佸垎绫讳俊鎭�
+    private List<GwProduct> ProductAllList()
+    {
+        GwProduct bean = new GwProduct();
+        bean.Classes = -1;
+        bean.IsDefault = -1;
+        bean.IsEnable = -1;
+
+        List<GwProduct> list = _GwProductDao.getAllList(bean);
+
+        return list;
+    }
+
+    //鑾峰彇浜у搧鎴栦骇鍝佸垎绫诲垪琛�
+    private List<GwProduct> ProductList
+    {
+        get
+        {
+            if (this._ProductList == null)
+            {
+                this._ProductList = this.ProductAllList();
+            }
+            return this._ProductList;
+        }
+    }
+
+    //浜у搧鎴栦骇鍝佸垎绫籌D杞崲鍚嶇О
+    private string ProductToName(string productId)
+    {
+        if (this.ProductList == null)
+            return string.Empty;
+        GwProduct bean = this.ProductList.Find((Predicate<GwProduct>)(product => product.Id == productId));
+        if (bean != null)
+            //return string.Format("{0}-{1}", (object)bean.Id, (object)bean.Name);
+            return string.Format("{0}", (object)bean.Name);
+        return string.Empty;
+    }
+
+}
\ No newline at end of file
diff --git a/web/web/GwOrderAudit.aspx b/web/web/GwOrderAudit.aspx
new file mode 100644
index 0000000..3e759ca
--- /dev/null
+++ b/web/web/GwOrderAudit.aspx
@@ -0,0 +1,434 @@
+锘�<%@ Page Language="C#"  masterpagefile="~/Main.master"  AutoEventWireup="true" CodeFile="GwOrderAudit.aspx.cs" Inherits="_GwOrderAudit" %>
+<%-- 寰呭鏍歌鍗�  --%>
+<asp:Content runat="server" ID="Content1" ContentPlaceHolderID="head">
+    <script type="text/javascript" language="javascript">
+    $(document).ready(function() {
+        var pagination = new Pagination();
+        pagination.setPageIndex(1);
+        pagination.setPageSize(50);
+
+        function loadPageList() {
+            var clientId = $("#ClientId").val();
+            var clientName = $("#ClientName").val();
+            var spId = $("#SpId").val();
+            var startDate = $("#StartTime").val();
+            var endDate = $("#EndTime").val();
+            $.ajax({
+                url: "GwOrder.ashx",
+                type: "POST",
+                data: { action: "listAudit", clientId: clientId, clientName: clientName, spId: spId, startDate: startDate, endDate: endDate, flag: 0, pageIndex: pagination.getPageIndex(), pageSize: pagination.getPageSize() },
+                success: function (result) {
+                    if (result.OK) {
+                        $("#orderTable tbody").html(result.Message.Table);
+                        pagination.setRecordCount(result.Message.TotalCount);
+                        $("#pagination").html(pagination.getHtml());
+                        $("[data-toggle='popover']").popover();
+                    } else {
+                        mytek.alert(result.Message, result.OK);
+                    }
+                }
+            });
+        }
+
+        $(".input-daterange").datepicker({ keyboardNavigation: !1, forceParse: !1, autoclose: !0 });
+
+        //鏌ョ湅鏄庣粏
+        $(document).on("click", ".action-modal-detail", function () {
+            var orderId = $(this).data("orderid");
+            $("#orderDialog .modal-title").text("璁㈠崟鏄庣粏");
+
+            $.get("gwOrder.ashx", { "action": "get", orderId: orderId }, function (r) {
+
+                //$("#orderDialog .modal-title").text("璁㈠崟鏄庣粏");
+                //$("#orderDialog #action").val("detail");
+                $("#orderDialog #orderId").val(r.Message.OrderId).attr("readonly", false);
+                $("#orderDialog #spId").val(r.Message.SpId).attr("readonly", false);
+                $("#orderDialog #clientId").val(r.Message.ClientId).attr("readonly", false);
+                $("#orderDialog #productId").val(r.Message.ProductId).attr("readonly", false);
+                //$("#orderDialog #comboId").val(r.Message.ComboId);
+                $("#orderDialog #basicNum").val(r.Message.BasicNum, 0);
+                $("#orderDialog #givingNum").val(r.Message.GivingNum, 0);
+                $("#orderDialog #price").val(r.Message.Price / 1000, 0.00);
+                $("#orderDialog #orderNumTotal").val(r.Message.OrderNumTotal, 0);
+                $("#orderDialog #orderAmountTotal").val(r.Message.OrderAmountTotal / 1000, 0);
+                $("#orderDialog #beforeBalanceNum").val(r.Message.BeforeBalanceNum, 0);
+                $("#orderDialog #creator").val(r.Message.Creator);
+                $("#orderDialog #createTime").val(r.Message.CreateTime);
+                //$("#orderDialog #auditor").valval(r.Message.Auditor);
+                //$("#orderDialog #auditTime").val(r.Message.AuditTime);
+                $("#orderDialog #status").val(r.Message.Status).attr("readonly", false);
+                $("#orderDialog #remark").val(r.Message.Remark).attr("readonly", false);
+
+
+                $("#orderDialog #auditPass").css("display", "none");
+                $("#orderDialog #auditNoPass").css("display", "none");
+
+                $("#orderDialog").modal("show");
+            }, "json");
+        });
+
+        //瀹℃牳
+        $(document).on("click", ".action-modal-audit", function () {
+            var orderId = $(this).data("orderid");
+            $("#orderDialog .modal-title").text("璁㈠崟瀹℃牳");
+
+            $.get("gwOrder.ashx", { "action": "get", orderId: orderId }, function (r) {
+
+                //$("#orderDialog .modal-title").text("璁㈠崟鏄庣粏");
+                //$("#orderDialog #action").val("detail");
+                $("#orderDialog #orderId").val(r.Message.OrderId).attr("readonly", false);
+                $("#orderDialog #spId").val(r.Message.SpId).attr("readonly", false);
+                $("#orderDialog #clientId").val(r.Message.ClientId).attr("readonly", false);
+                $("#orderDialog #productId").val(r.Message.ProductId).attr("readonly", false);
+                //$("#orderDialog #comboId").val(r.Message.ComboId);
+                $("#orderDialog #basicNum").val(r.Message.BasicNum, 0);
+                $("#orderDialog #givingNum").val(r.Message.GivingNum, 0);
+                $("#orderDialog #price").val(r.Message.Price / 1000, 0.00);
+                $("#orderDialog #orderNumTotal").val(r.Message.OrderNumTotal, 0);
+                $("#orderDialog #orderAmountTotal").val(r.Message.OrderAmountTotal / 1000, 0);
+                $("#orderDialog #beforeBalanceNum").val(r.Message.BeforeBalanceNum, 0);
+                $("#orderDialog #creator").val(r.Message.Creator);
+                $("#orderDialog #createTime").val(r.Message.CreateTime);
+                //$("#orderDialog #auditor").valval(r.Message.Auditor);
+                //$("#orderDialog #auditTime").val(r.Message.AuditTime);
+                $("#orderDialog #status").val(r.Message.Status);
+                $("#orderDialog #remark").val(r.Message.Remark);
+
+                $("#orderDialog #auditPass").css("display", "");
+                $("#orderDialog #auditNoPass").css("display", "");
+
+                $("#orderDialog").modal("show");
+            }, "json");
+        });
+
+        $(document).on("click", ".action-modal-delete", function() {
+            var orderId = $(this).data("orderid");
+            mytek.confirm("鏄惁闇�瑕佸垹闄よ淇℃伅锛�", "鏁版嵁鍒犻櫎鍚庡皢鏃犳硶鎭㈠锛岃璋ㄦ厧鎿嶄綔锛�", function(b) {
+                if (b) {
+                    $.post("gwOrder.ashx", { "action": "delete", orderId: orderId }, function(result) {
+                        mytek.alert(result.Message, result.OK, function() {
+                            loadPageList();
+                        });
+                    },
+                    "json");
+                }
+            });
+        });
+
+        $(document).on("click", ".action-modal-cancel", function () {
+            var orderId = $(this).data("orderid");
+            mytek.confirm("鏄惁纭畾鍙栨秷璇ヤ俊鎭紵", "鏁版嵁鍙栨秷鍚庡皢鏃犳硶鎭㈠锛岃璋ㄦ厧鎿嶄綔锛�", function (b) {
+                if (b) {
+                    $.post("gwOrder.ashx", { "action": "cancel", status: 4, orderId: orderId }, function (result) {
+                        mytek.alert(result.Message, result.OK, function () {
+                            loadPageList();
+                        });
+                    },
+                        "json");
+                }
+            });
+        });
+
+        //瀹℃牳閫氳繃
+        $(document).on("click", ".action-auditPass", function () {
+            var orderId = $(this).data("orderid");
+            mytek.confirm("鏄惁纭畾瀹℃牳閫氳繃璇ヤ俊鎭紵", "鏁版嵁鏇存柊鍚庡皢鏃犳硶鎭㈠锛岃璋ㄦ厧鎿嶄綔锛�", function (b) {
+                if (b) {
+                    $.post("gwOrder.ashx", { "action": "audit", status: 1, orderId: orderId }, function (result) {
+                        mytek.alert(result.Message, result.OK, function () {
+                            loadPageList();
+                        });
+                    },
+                        "json");
+                }
+            });
+        });
+
+        //瀹℃牳涓嶉�氳繃
+        $(document).on("click", ".action-auditNoPass", function () {
+            var orderId = $(this).data("orderid");
+            mytek.confirm("鏄惁纭畾瀹℃牳涓嶉�氳繃璇ヤ俊鎭紵", "鏁版嵁鏇存柊鍚庡皢鏃犳硶鎭㈠锛岃璋ㄦ厧鎿嶄綔锛�", function (b) {
+                if (b) {
+                    $.post("gwOrder.ashx", { "action": "audit", status: 0, orderId: orderId }, function (result) {
+                        mytek.alert(result.Message, result.OK, function () {
+                            loadPageList();
+                        });
+                    },
+                        "json");
+                }
+            });
+        });
+
+        $(document).on("click", ".action-btn-GwOrderQuery", function() {
+            pagination.setPageIndex(1);
+            loadPageList();
+        });
+
+        $(document).on("click", "a[data-index]", function() {
+            pagination.setPageIndex($(this).attr("data-index"));
+            loadPageList();
+        });
+
+        //杩涘叆椤甸潰鏃舵墽琛屾煡璇�
+        loadPageList();
+
+    });
+    </script>
+ </asp:Content> 
+<asp:Content runat="server" ID="Content2" ContentPlaceHolderID="title">璁㈠崟绠$悊</asp:Content> 
+<asp:Content ID="Content3" ContentPlaceHolderID="content" runat="Server">
+   
+    <form name="queryForm" method="get" action="GwOrder.aspx" id="queryForm" class="form-inline"
+        id="gwOrderTable">
+        <div class="m-b">
+            <div class="form-group">
+                <div class="input-group m-b">
+                    <span class="input-group-addon">浠g悊鍟嗗鎴疯处鎴�</span>
+                    <input type="text" name="ClientId" id="ClientId" class="form-control col-md-2" />
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="input-group m-b">
+                    <span class="input-group-addon">浠g悊鍟嗗鎴峰悕绉�</span>
+                    <input type="text" name="ClientName" id="ClientName" class="form-control col-md-2" />
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="input-group m-b">
+                    <span class="input-group-addon">SP璐﹀彿</span>
+                    <input type="text" name="SpId" id="SpId" class="form-control col-md-2" />
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="input-group  m-b ">
+                    <div class="input-daterange input-group" id="datepicker">
+                        <span class="input-group-addon">鏃堕棿鑼冨洿&nbsp;<i class="fa fa-calendar"></i></span>
+                        <input type="text" class="input-sm form-control" name="StartTime" id="StartTime"
+                            value="<%=StartTime.ToString("yyyy-MM-dd") %>" />
+                        <span class="input-group-addon">鍒�</span> <span class="input-group-addon"><i class="fa fa-calendar">
+                        </i></span>
+                        <input type="text" class="input-sm form-control" name="EndTime" id="EndTime" value="<%=EndTime.ToString("yyyy-MM-dd") %>" />
+                    </div>
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="input-group">
+                    <input type="button" value="鏌ヨ" class="btn btn-primary action-btn-GwOrderQuery" />
+                </div>
+            </div>
+        </div>
+        <table class="table table-striped table-bordered table-hover" id="orderTable">
+            <thead>
+                <tr class="header">
+                    <th>璁㈠崟ID
+                    </th>
+                    <th>璐﹀彿ID
+                    </th>
+                    <th>瀹㈡埛ID
+                    </th>
+                    <th>浜у搧ID
+                    </th>
+                    <%--<th>濂楅ID
+                    </th>
+                         --%>
+                    <th>璁㈠崟鍩烘湰鏉℃暟
+                    </th>
+                    <th>璁㈠崟璧犻�佹潯鏁�
+                    </th>
+                    <th>鍗曚环锛堝厓/鏉★級
+                    </th>
+                    <th>璁㈠崟鎬绘潯鏁�
+                    </th>
+                    <th>璁㈠崟鎬婚噾棰濓紙鍏冿級
+                    </th>
+                    <th>鍏呭�煎墠璐﹀彿浣欓锛堟潯锛�
+                    </th>
+                    <th>鍒涘缓浜�
+                    </th>
+                    <th>鍒涘缓鏃堕棿
+                    </th>
+                    <th>鐘舵��
+                    </th>
+                    <th class="text-right">鎿嶄綔
+                    </th>
+                </tr>
+            </thead>
+            <tbody>
+            </tbody>
+        </table>
+    </form>
+    <div id="pagination">
+    </div>
+    <div class="footBar">
+      
+    </div>
+
+    <div class="modal inmodal fade" id="orderDialog" tabindex="-1" role="dialog" aria-hidden="true">
+        <div class="modal-dialog modal-lg">
+            <form class="form-horizontal" id="orderForm" name="orderForm" method="post" action="gwOrder.ashx">
+                <div class="modal-content ">
+                    <div class="modal-header">
+                        <input type="hidden" class="form-control" name="action" id="action" value="update" />
+                        <button type="button" class="close" data-dismiss="modal">
+                            <span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+                        <h4 class="modal-title">璁㈠崟淇℃伅</h4>
+                    </div>
+                    <div class="modal-body">
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璁㈠崟缂栧彿</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="orderId" id="orderId" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璐﹀彿ID</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="spId" id="spId" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                瀹㈡埛ID</label>
+                            <div class="col-sm-4 ">
+                                <select name="clientId" id="clientId" class="form-control">
+                                    <%=GetClientOptions("0")%>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                浜у搧ID</label>
+                            <div class="col-sm-4 ">
+                                <select name="productId" id="productId" class="form-control">
+                                    <%=GetProductOptions("0")%>
+                                </select>
+                            </div>
+                        </div>
+                        <%--
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                濂楅ID</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="comboId" id="comboId" value="" />
+                            </div>
+                        </div>
+                             --%>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璁㈠崟鍩烘湰鏉℃暟</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                <input type="text" class="form-control" name="basicNum" id="basicNum" value="" maxlength="5"
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鏉� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璁㈠崟璧犻�佹潯鏁�</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                <input type="text" class="form-control" name="givingNum" id="givingNum" value="" maxlength="5"
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鏉� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group classes-span classes-span-1">
+                            <label class="col-sm-2 control-label">
+                                鍗曚环</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                    <input type="text" class="form-control" name="price" id="price" value="" maxlength="5"
+                                        onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                        oncontextmenu="return false" /><span class="input-group-addon">鍏�/鏉� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璁㈠崟鎬绘潯鏁�</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                <input type="text" class="form-control" name="orderNumTotal" id="orderNumTotal" value="" maxlength="5"
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鏉� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璁㈠崟鎬婚噾棰�</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                <input type="text" class="form-control" name="orderAmountTotal" id="orderAmountTotal" value="" maxlength="5"
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鍏� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                鍏呭�煎墠璐﹀彿浣欓</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                <input type="text" class="form-control" name="beforeBalanceNum" id="beforeBalanceNum" value="" maxlength="5"
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鏉� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                鍒涘缓浜�</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="creator" id="creator" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                鍒涘缓鏃堕棿</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="createTime" id="createTime" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                鐘舵��</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="status" id="status" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                澶囨敞</label>
+                            <div class="col-sm-10 input-group m-b">
+                                <input type="text" class="form-control" name="remark" id="remark" value="" />
+                            </div>
+                        </div>
+                    </div>
+                    <div class="modal-footer">
+                        <button class="action-auditPass btn btn-primary" data-dismiss="modal" aria-hidden="true" id="auditPass">
+                            瀹℃牳閫氳繃</button>&nbsp;&nbsp;
+                        <button class="action-auditNoPass btn btn-primary" data-dismiss="modal" aria-hidden="true" id="auditNoPass">
+                            瀹℃牳涓嶉�氳繃</button>&nbsp;&nbsp;
+                        <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">
+                            鍙栨秷</button>&nbsp;&nbsp;
+                    </div>
+                </div>
+            </form>
+        </div>
+    </div>
+    
+    <!-- footBar -->
+    <div id="mask" class="mask">
+        <span></span>
+        <img src="img/spinning-circles.svg" alt="杞藉叆涓�..." />
+    </div>
+  </asp:Content> 
+
+         
+ 
diff --git a/web/web/GwOrderAudit.aspx.cs b/web/web/GwOrderAudit.aspx.cs
new file mode 100644
index 0000000..f2ac1cf
--- /dev/null
+++ b/web/web/GwOrderAudit.aspx.cs
@@ -0,0 +1,171 @@
+锘� 
+using Common;
+using Dao;
+using Model;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Web;
+using System.Web.Profile;
+using System.Web.SessionState;
+
+public partial class _GwOrderAudit : PageBase<SysUser>, IRequiresSessionState
+{
+    protected List<GwProduct> GwProductList;
+    protected List<GwProduct> GwProductClassList;
+    protected List<GwOp> OpList;    //閫氶亾淇℃伅鍒楄〃
+    protected List<GwOpGroup> OpGroupList;    //閫氶亾缁勪俊鎭垪琛�
+    protected List<GwClient> GwClientList;
+
+    protected void Page_Load(object sender, EventArgs e)
+  {
+        //鏉冮檺鎺у埗
+        this.CheckRight("702", FailedOperation.ErrorMsgOnly);
+        using (GwOpDao gwOpDao = new GwOpDao())
+            this.OpList = gwOpDao.LoadInfoList();
+        using (GwOpGroupDao gwOpGroupDao = new GwOpGroupDao())
+            this.OpGroupList = gwOpGroupDao.GetGroupList();
+        using (GwClientDao gwClientDao = new GwClientDao())
+            this.GwClientList = gwClientDao.Clientlist();
+
+        //鑾峰彇浜у搧鎴栦骇鍝佸垎绫�
+        using (GwProductDao gwProductDao = new GwProductDao()) { 
+            GwProduct bean = new GwProduct();
+            bean.Classes = -1;
+            bean.IsEnable = -1;
+            bean.IsDefault = -1;
+            this.GwProductList = gwProductDao.getAllList(bean);
+        }
+
+
+
+    }
+
+    public DateTime StartTime
+    {
+        get
+        {
+            DateTime result;
+            if (!DateTime.TryParse(this.Request["StartTime"], out result))
+                return DateTime.Now.Date.AddDays(-1.0);
+            return result;
+        }
+    }
+
+    public DateTime EndTime
+    {
+        get
+        {
+            DateTime result;
+            if (!DateTime.TryParse(this.Request["EndTime"], out result))
+                return DateTime.Now.Date.AddDays(1.0);
+            return result;
+        }
+    }
+
+
+    //鑾峰彇閫氶亾淇℃伅
+    public string GetOpOptions(int opId)
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.OpList.Count == 0)
+            return "<option value=''>鏃犻�氶亾淇℃伅</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" selected>{1}</option>", (object)0, (object)"NA");
+        foreach (GwOp gwOp in this.OpList)
+        {
+            //鍋滅敤鐨勯�氶亾涓嶅啀鏄剧ず
+            if (gwOp.OpStatus == 0)
+            {
+                continue;
+            }
+
+            if (opId == gwOp.OpID)
+                stringBuilder.AppendFormat("<option value=\"{0}\" selected>{0}-{1}</option>", (object)gwOp.OpID, (object)gwOp.OpName);
+            else
+                stringBuilder.AppendFormat("<option value=\"{0}\">{0}-{1}</option>", (object)gwOp.OpID, (object)gwOp.OpName);
+        }
+        return stringBuilder.ToString();
+    }
+
+    /// <summary>
+    /// 鑾峰彇閫氶亾缁�
+    /// </summary>
+    /// <param name="groupID"></param>
+    /// <returns></returns>
+    public string GetOpGroupOptions(int groupID)
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        using (GwOpGroupDao gwOpGroupDao = new GwOpGroupDao())
+        {
+            List<GwOpGroup> groupList = gwOpGroupDao.GetGroupList();
+            stringBuilder.AppendFormat("<option value=\"0\">涓嶈缃�</option>");
+            foreach (GwOpGroup gwOpGroup in groupList)
+                stringBuilder.AppendFormat("<option value='{0}' {2}>{1}</option>", (object)gwOpGroup.GroupID, (object)gwOpGroup.GroupName, gwOpGroup.GroupID == groupID ? (object)"selected" : (object)"");
+        }
+        return stringBuilder.ToString();
+    }
+
+    //鑾峰彇浜у搧鍒嗙被淇℃伅
+    public string GetProductClassOptions(string productId)
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.GwProductClassList.Count == 0)
+            return "<option value='0'>鏃�</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" >{1}</option>", (object)0, (object)"鏃�");
+        foreach (GwProduct bean in this.GwProductList)
+        {
+            //鍋滅敤鐨勪骇鍝佸垎绫讳笉鍐嶆樉绀�
+            if (bean.IsEnable == 0)
+            {
+                continue;
+            }
+            //绫诲埆涓轰骇鍝佷笉鍐嶆樉绀�
+            if (bean.Classes == 1)
+            {
+                continue;
+            }
+
+            if (productId.Equals(bean.Id) )
+                stringBuilder.AppendFormat("<option value=\"{0}\" selected>{0}-{1}</option>", (object)bean.Id, (object)bean.Name);
+            else
+                stringBuilder.AppendFormat("<option value=\"{0}\">{0}-{1}</option>", (object)bean.Id, (object)bean.Name);
+        }
+        return stringBuilder.ToString();
+    }
+
+    //鑾峰彇浜у搧淇℃伅
+    public string GetProductOptions(string productId)
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.GwProductList.Count == 0)
+            return "<option value='0'>鏃�</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" >{1}</option>", (object)0, (object)"鏃�");
+        foreach (GwProduct bean in this.GwProductList)
+        {
+            if (productId.Equals(bean.Id))
+                stringBuilder.AppendFormat("<option value=\"{0}\" selected>{0}-{1}</option>", (object)bean.Id, (object)bean.Name);
+            else
+                stringBuilder.AppendFormat("<option value=\"{0}\">{0}-{1}</option>", (object)bean.Id, (object)bean.Name);
+        }
+        return stringBuilder.ToString();
+    }
+
+    //鑾峰彇瀹㈡埛淇℃伅
+    public string GetClientOptions(string clientId)
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.GwClientList.Count == 0)
+            return "<option value='0'>鏃�</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" >{1}</option>", (object)0, (object)"鏃�");
+        foreach (GwClient bean in this.GwClientList)
+        {
+            if (clientId.Equals(bean.ClientID))
+                stringBuilder.AppendFormat("<option value=\"{0}\" selected>{0}-{1}</option>", (object)bean.ClientID, (object)bean.ClientName);
+            else
+                stringBuilder.AppendFormat("<option value=\"{0}\">{0}-{1}</option>", (object)bean.ClientID, (object)bean.ClientName);
+        }
+        return stringBuilder.ToString();
+    }
+
+}
+ 
\ No newline at end of file
diff --git a/web/web/GwOrderComplete.aspx b/web/web/GwOrderComplete.aspx
new file mode 100644
index 0000000..4d3887e
--- /dev/null
+++ b/web/web/GwOrderComplete.aspx
@@ -0,0 +1,341 @@
+锘�<%@ Page Language="C#"  masterpagefile="~/Main.master"  AutoEventWireup="true" CodeFile="GwOrderComplete.aspx.cs" Inherits="_GwOrderComplete" %>
+<%-- 宸插畬鎴愯鍗曪紙鍙栨秷銆佸鏍搁�氳繃銆佸鏍镐笉閫氳繃锛�  --%>
+<asp:Content runat="server" ID="Content1" ContentPlaceHolderID="head">
+    <script type="text/javascript" language="javascript">
+    $(document).ready(function() {
+        var pagination = new Pagination();
+        pagination.setPageIndex(1);
+        pagination.setPageSize(50);
+
+        function loadPageList() {
+            var clientId = $("#ClientId").val();
+            var clientName = $("#ClientName").val();
+            var spId = $("#SpId").val();
+            var startDate = $("#StartTime").val();
+            var endDate = $("#EndTime").val();
+            $.ajax({
+                url: "GwOrder.ashx",
+                type: "POST",
+                data: { action: "listComplete", clientId: clientId, clientName: clientName, spId: spId, startDate: startDate, endDate: endDate, flag: 1, pageIndex: pagination.getPageIndex(), pageSize: pagination.getPageSize() },
+                success: function(result) {
+                    if (result.OK) {
+                        $("#orderTable tbody").html(result.Message.Table);
+                        pagination.setRecordCount(result.Message.TotalCount);
+                        $("#pagination").html(pagination.getHtml());
+                        $("[data-toggle='popover']").popover();
+                    } else {
+                        mytek.alert(result.Message, result.OK);
+                    }
+                }
+            });
+        }
+
+        $(".input-daterange").datepicker({ keyboardNavigation: !1, forceParse: !1, autoclose: !0 });
+
+        $(document).on("click", ".action-modal-detail", function () {
+            var orderId = $(this).data("orderid");
+            $("#orderDialog .modal-title").text("璁㈠崟鏄庣粏");
+
+            $.get("gwOrder.ashx", { "action": "get", orderId: orderId }, function (r) {
+
+                //$("#orderDialog .modal-title").text("璁㈠崟鏄庣粏");
+                //$("#orderDialog #action").val("detail");
+                $("#orderDialog #orderId").val(r.Message.OrderId).attr("readonly", false);
+                $("#orderDialog #spId").val(r.Message.SpId);
+                $("#orderDialog #clientId").val(r.Message.ClientId);
+                $("#orderDialog #productId").val(r.Message.ProductId);
+                //$("#orderDialog #comboId").val(r.Message.ComboId);
+                $("#orderDialog #basicNum").val(r.Message.BasicNum, 0);
+                $("#orderDialog #givingNum").val(r.Message.GivingNum, 0);
+                $("#orderDialog #price").val(r.Message.Price / 1000, 0.00);
+                $("#orderDialog #orderNumTotal").val(r.Message.OrderNumTotal, 0);
+                $("#orderDialog #orderAmountTotal").val(r.Message.OrderAmountTotal / 1000, 0);
+                $("#orderDialog #beforeBalanceNum").val(r.Message.BeforeBalanceNum, 0);
+                $("#orderDialog #creator").val(r.Message.Creator);
+                $("#orderDialog #createTime").val(r.Message.CreateTime);
+                //$("#orderDialog #auditor").valval(r.Message.Auditor);
+                //$("#orderDialog #auditTime").val(r.Message.AuditTime);
+                $("#orderDialog #status").val(r.Message.Status);
+                $("#orderDialog #remark").val(r.Message.Remark);
+
+                $("#orderDialog").modal("show");
+            }, "json");
+        });
+
+        $("#orderForm").ajaxForm({
+            success: function(r) {
+                if (r.OK) {
+                    mytek.alert(r.Message, r.OK, function() {
+                        $("#orderDialog").modal("hide");
+                        loadPageList();
+                    });
+                } else {
+                    mytek.alert(r.Message, r.OK);
+                }
+            }
+        });
+
+        $(document).on("click", ".action-btn-GwOrderQuery", function() {
+            pagination.setPageIndex(1);
+            loadPageList();
+        });
+
+        //杩涘叆椤甸潰鏃舵墽琛屾煡璇�
+        loadPageList();
+
+    });
+    </script>
+ </asp:Content> 
+<asp:Content runat="server" ID="Content2" ContentPlaceHolderID="title">璁㈠崟绠$悊</asp:Content> 
+<asp:Content ID="Content3" ContentPlaceHolderID="content" runat="Server">
+   
+    <form name="queryForm" method="get" action="GwOrder.aspx" id="queryForm" class="form-inline"
+        id="gwOrderTable">
+        <div class="m-b">
+            <div class="form-group">
+                <div class="input-group m-b">
+                    <span class="input-group-addon">浠g悊鍟嗗鎴疯处鎴�</span>
+                    <input type="text" name="ClientId" id="ClientId" class="form-control col-md-2" />
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="input-group m-b">
+                    <span class="input-group-addon">浠g悊鍟嗗鎴峰悕绉�</span>
+                    <input type="text" name="ClientName" id="ClientName" class="form-control col-md-2" />
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="input-group m-b">
+                    <span class="input-group-addon">SP璐﹀彿</span>
+                    <input type="text" name="SpId" id="SpId" class="form-control col-md-2" />
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="input-group  m-b ">
+                    <div class="input-daterange input-group" id="datepicker">
+                        <span class="input-group-addon">鏃堕棿鑼冨洿&nbsp;<i class="fa fa-calendar"></i></span>
+                        <input type="text" class="input-sm form-control" name="StartTime" id="StartTime"
+                            value="<%=StartTime.ToString("yyyy-MM-dd") %>" />
+                        <span class="input-group-addon">鍒�</span> <span class="input-group-addon"><i class="fa fa-calendar">
+                        </i></span>
+                        <input type="text" class="input-sm form-control" name="EndTime" id="EndTime" value="<%=EndTime.ToString("yyyy-MM-dd") %>" />
+                    </div>
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="input-group">
+                    <input type="button" value="鏌ヨ" class="btn btn-primary action-btn-GwOrderQuery" />
+                </div>
+            </div>
+        </div>
+        <table class="table table-striped table-bordered table-hover" id="orderTable">
+            <thead>
+                <tr class="header">
+                    <th>璁㈠崟ID
+                    </th>
+                    <th>璐﹀彿ID
+                    </th>
+                    <th>瀹㈡埛ID
+                    </th>
+                    <th>浜у搧ID
+                    </th>
+                    <%--<th>濂楅ID
+                    </th>
+                         --%>
+                    <th>璁㈠崟鍩烘湰鏉℃暟
+                    </th>
+                    <th>璁㈠崟璧犻�佹潯鏁�
+                    </th>
+                    <th>鍗曚环锛堝厓/鏉★級
+                    </th>
+                    <th>璁㈠崟鎬绘潯鏁�
+                    </th>
+                    <th>璁㈠崟鎬婚噾棰濓紙鍏冿級
+                    </th>
+                    <th>鍏呭�煎墠璐﹀彿浣欓锛堟潯锛�
+                    </th>
+                    <th>鍒涘缓浜�
+                    </th>
+                    <th>鍒涘缓鏃堕棿
+                    </th>
+                    <th>鐘舵��
+                    </th>
+                    <th class="text-right">鎿嶄綔
+                    </th>
+                </tr>
+            </thead>
+            <tbody>
+            </tbody>
+        </table>
+    </form>
+    <div id="pagination">
+    </div>
+    <div class="footBar">
+      
+    </div>
+
+    <div class="modal inmodal fade" id="orderDialog" tabindex="-1" role="dialog" aria-hidden="true">
+        <div class="modal-dialog modal-lg">
+            <form class="form-horizontal" id="orderForm" name="orderForm" method="post" action="gwOrder.ashx">
+                <div class="modal-content ">
+                    <div class="modal-header">
+                        <input type="hidden" class="form-control" name="action" id="action" value="update" />
+                        <button type="button" class="close" data-dismiss="modal">
+                            <span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+                        <h4 class="modal-title">璁㈠崟淇℃伅</h4>
+                    </div>
+                    <div class="modal-body">
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璁㈠崟缂栧彿</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="orderId" id="orderId" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璐﹀彿ID</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="spId" id="spId" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                瀹㈡埛ID</label>
+                            <div class="col-sm-4 ">
+                                <select name="clientId" id="clientId" class="form-control">
+                                    <%=GetClientOptions("0")%>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                浜у搧ID</label>
+                            <div class="col-sm-4 ">
+                                <select name="productId" id="productId" class="form-control">
+                                    <%=GetProductOptions("0")%>
+                                </select>
+                            </div>
+                        </div>
+                        <%--
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                濂楅ID</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="comboId" id="comboId" value="" />
+                            </div>
+                        </div>
+                        --%>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璁㈠崟鍩烘湰鏉℃暟</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                <input type="text" class="form-control" name="basicNum" id="basicNum" value="" maxlength="5"
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鏉� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璁㈠崟璧犻�佹潯鏁�</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                <input type="text" class="form-control" name="givingNum" id="givingNum" value="" maxlength="5"
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鏉� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group classes-span classes-span-1">
+                            <label class="col-sm-2 control-label">
+                                鍗曚环</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                    <input type="text" class="form-control" name="price" id="price" value="" maxlength="5"
+                                        onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                        oncontextmenu="return false" /><span class="input-group-addon">鍏�/鏉� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璁㈠崟鎬绘潯鏁�</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                <input type="text" class="form-control" name="orderNumTotal" id="orderNumTotal" value="" maxlength="5"
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鏉� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璁㈠崟鎬婚噾棰�</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                <input type="text" class="form-control" name="orderAmountTotal" id="orderAmountTotal" value="" maxlength="5"
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鍏� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                鍏呭�煎墠璐﹀彿浣欓</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                <input type="text" class="form-control" name="beforeBalanceNum" id="beforeBalanceNum" value="" maxlength="5"
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鏉� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                鍒涘缓浜�</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="creator" id="creator" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                鍒涘缓鏃堕棿</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="createTime" id="createTime" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                鐘舵��</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="status" id="status" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                澶囨敞</label>
+                            <div class="col-sm-10 input-group m-b">
+                                <input type="text" class="form-control" name="remark" id="remark" value="" />
+                            </div>
+                        </div>
+                    </div>
+                    <div class="modal-footer">
+                        <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">
+                            鍙栨秷</button>&nbsp;&nbsp;
+                    </div>
+                </div>
+            </form>
+        </div>
+    </div>
+    
+    <!-- footBar -->
+    <div id="mask" class="mask">
+        <span></span>
+        <img src="img/spinning-circles.svg" alt="杞藉叆涓�..." />
+    </div>
+  </asp:Content> 
+
+         
+ 
diff --git a/web/web/GwOrderComplete.aspx.cs b/web/web/GwOrderComplete.aspx.cs
new file mode 100644
index 0000000..2320cb3
--- /dev/null
+++ b/web/web/GwOrderComplete.aspx.cs
@@ -0,0 +1,179 @@
+锘� 
+using Common;
+using Dao;
+using Model;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Web;
+using System.Web.Profile;
+using System.Web.SessionState;
+
+public partial class _GwOrderComplete : PageBase<SysUser>, IRequiresSessionState
+{
+    protected List<GwProduct> GwProductList;
+    protected List<GwProduct> GwProductClassList;
+    protected List<GwOp> OpList;    //閫氶亾淇℃伅鍒楄〃
+    protected List<GwOpGroup> OpGroupList;    //閫氶亾缁勪俊鎭垪琛�
+    protected List<GwClient> GwClientList;
+    //public GwProduct GwProduct { get; protected set; }  //鐢ㄤ簬瀛樻斁浜у搧缂栬緫
+
+    protected void Page_Load(object sender, EventArgs e)
+  {
+        //鏉冮檺鎺у埗
+        this.CheckRight("701", FailedOperation.ErrorMsgOnly);
+
+        using (GwOpDao gwOpDao = new GwOpDao())
+            this.OpList = gwOpDao.LoadInfoList();
+        using (GwOpGroupDao gwOpGroupDao = new GwOpGroupDao())
+            this.OpGroupList = gwOpGroupDao.GetGroupList();
+        using (GwClientDao gwClientDao = new GwClientDao())
+            this.GwClientList = gwClientDao.Clientlist();
+
+        //鑾峰彇浜у搧鎴栦骇鍝佸垎绫�
+        using (GwProductDao gwProductDao = new GwProductDao()) { 
+            GwProduct bean = new GwProduct();
+            bean.Classes = -1;
+            bean.IsEnable = -1;
+            bean.IsDefault = -1;
+            this.GwProductList = gwProductDao.getAllList(bean);
+        }
+
+
+
+    }
+
+    public DateTime StartTime
+    {
+        get
+        {
+            DateTime result;
+            if (!DateTime.TryParse(this.Request["StartTime"], out result))
+                return DateTime.Now.Date.AddDays(-1.0);
+            return result;
+        }
+    }
+
+    public DateTime EndTime
+    {
+        get
+        {
+            DateTime result;
+            if (!DateTime.TryParse(this.Request["EndTime"], out result))
+                return DateTime.Now.Date.AddDays(1.0);
+            return result;
+        }
+    }
+
+
+    //鑾峰彇閫氶亾淇℃伅
+    public string GetOpOptions(int opId)
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.OpList.Count == 0)
+            return "<option value=''>鏃犻�氶亾淇℃伅</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" selected>{1}</option>", (object)0, (object)"NA");
+        foreach (GwOp gwOp in this.OpList)
+        {
+            //鍋滅敤鐨勯�氶亾涓嶅啀鏄剧ず
+            if (gwOp.OpStatus == 0)
+            {
+                continue;
+            }
+
+            if (opId == gwOp.OpID)
+                stringBuilder.AppendFormat("<option value=\"{0}\" selected>{0}-{1}</option>", (object)gwOp.OpID, (object)gwOp.OpName);
+            else
+                stringBuilder.AppendFormat("<option value=\"{0}\">{0}-{1}</option>", (object)gwOp.OpID, (object)gwOp.OpName);
+        }
+        return stringBuilder.ToString();
+    }
+
+    /// <summary>
+    /// 鑾峰彇閫氶亾缁�
+    /// </summary>
+    /// <param name="groupID"></param>
+    /// <returns></returns>
+    public string GetOpGroupOptions(int groupID)
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        using (GwOpGroupDao gwOpGroupDao = new GwOpGroupDao())
+        {
+            List<GwOpGroup> groupList = gwOpGroupDao.GetGroupList();
+            stringBuilder.AppendFormat("<option value=\"0\">涓嶈缃�</option>");
+            foreach (GwOpGroup gwOpGroup in groupList)
+                stringBuilder.AppendFormat("<option value='{0}' {2}>{1}</option>", (object)gwOpGroup.GroupID, (object)gwOpGroup.GroupName, gwOpGroup.GroupID == groupID ? (object)"selected" : (object)"");
+        }
+        return stringBuilder.ToString();
+    }
+
+    //鑾峰彇浜у搧鍒嗙被淇℃伅
+    public string GetProductClassOptions(string productId)
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.GwProductClassList.Count == 0)
+            return "<option value='0'>鏃�</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" >{1}</option>", (object)0, (object)"鏃�");
+        foreach (GwProduct bean in this.GwProductList)
+        {
+            //鍋滅敤鐨勪骇鍝佸垎绫讳笉鍐嶆樉绀�
+            if (bean.IsEnable == 0)
+            {
+                continue;
+            }
+            //绫诲埆涓轰骇鍝佷笉鍐嶆樉绀�
+            if (bean.Classes == 1)
+            {
+                continue;
+            }
+
+            if (productId.Equals(bean.Id) )
+                stringBuilder.AppendFormat("<option value=\"{0}\" selected>{0}-{1}</option>", (object)bean.Id, (object)bean.Name);
+            else
+                stringBuilder.AppendFormat("<option value=\"{0}\">{0}-{1}</option>", (object)bean.Id, (object)bean.Name);
+        }
+        return stringBuilder.ToString();
+    }
+
+    //鑾峰彇浜у搧淇℃伅
+    public string GetProductOptions(string productId)
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.GwProductList.Count == 0)
+            return "<option value='0'>鏃�</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" >{1}</option>", (object)0, (object)"鏃�");
+        foreach (GwProduct bean in this.GwProductList)
+        {
+            //鍋滅敤鐨勪骇鍝佸垎绫讳笉鍐嶆樉绀�
+            if (bean.IsEnable == 0)
+            {
+                continue;
+            }
+
+            if (productId.Equals(bean.Id))
+                stringBuilder.AppendFormat("<option value=\"{0}\" selected>{0}-{1}</option>", (object)bean.Id, (object)bean.Name);
+            else
+                stringBuilder.AppendFormat("<option value=\"{0}\">{0}-{1}</option>", (object)bean.Id, (object)bean.Name);
+        }
+        return stringBuilder.ToString();
+    }
+
+    //鑾峰彇瀹㈡埛淇℃伅
+    public string GetClientOptions(string clientId)
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.GwClientList.Count == 0)
+            return "<option value='0'>鏃�</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" >{1}</option>", (object)0, (object)"鏃�");
+        foreach (GwClient bean in this.GwClientList)
+        {
+            if (clientId.Equals(bean.ClientID))
+                stringBuilder.AppendFormat("<option value=\"{0}\" selected>{0}-{1}</option>", (object)bean.ClientID, (object)bean.ClientName);
+            else
+                stringBuilder.AppendFormat("<option value=\"{0}\">{0}-{1}</option>", (object)bean.ClientID, (object)bean.ClientName);
+        }
+        return stringBuilder.ToString();
+    }
+
+}
+ 
\ No newline at end of file
diff --git a/web/web/GwOrderCreate.aspx b/web/web/GwOrderCreate.aspx
new file mode 100644
index 0000000..09a653b
--- /dev/null
+++ b/web/web/GwOrderCreate.aspx
@@ -0,0 +1,169 @@
+锘�<%@ Page Language="C#"  masterpagefile="~/Main.master" AutoEventWireup="true" CodeFile="GwOrderCreate.aspx.cs" Inherits="_GwOrderCreate" %>
+
+<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
+    
+ </asp:Content>
+<asp:Content runat="server" ID="Content2" ContentPlaceHolderID="title"> </asp:Content> 
+<asp:Content ID="Content3" ContentPlaceHolderID="content" runat="Server">
+    
+        <form method="get" action="GwOrderCreate.aspx" class=" form-horizontal">
+    <!--<form method="get" action="GwOrderCreate.aspx?action=Add" name="thisForm" id="thisForm" class=" form-horizontal"> -->
+        <div class="modal-dialog modal-lg">
+            <div class="modal-content ">
+                <div class="modal-header">
+                    <h4 class="modal-title">
+                        璐﹀彿鍏呭�� <input type="hidden" name="apid" id="apid" value="0"/></h4>
+                </div>
+                <div class="modal-body">
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">
+                            璐﹀彿ID</label>
+                        <div class="col-sm-6 ">
+                            <input type="text" class="form-control" name="spId" id="spId" value="<%=GwOrder.SpId %>" readonly="readonly"/>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">
+                            瀹㈡埛ID</label>
+                        <div class="col-sm-6 ">
+                            <select name="clientId" id="clientId" class="form-control" disabled="disabled">
+                                <%=GetClientOptions(GwOrder.ClientId)%>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">
+                            浜у搧ID</label>
+                        <div class="col-sm-6 ">
+                            <select name="productId" id="productId" class="form-control" disabled="disabled">
+                                <%=GetProductOptions(GwOrder.ProductId)%>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">
+                            鍩烘湰鏉℃暟浣欓</label>
+                        <div class="col-sm-6">
+                            <div class="input-group">
+                            <input type="text" class="form-control" value="<%=GwOrder.BasicNum %>" 
+                                onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                oncontextmenu="return false" readonly="readonly" /><span class="input-group-addon">鏉� </span>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">
+                            璧犻�佹潯鏁颁綑棰�</label>
+                        <div class="col-sm-6">
+                            <div class="input-group">
+                            <input type="text" class="form-control" value="<%=GwOrder.GivingNum %>" 
+                                onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                oncontextmenu="return false" readonly="readonly" /><span class="input-group-addon">鏉� </span>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="form-group classes-span classes-span-1">
+                        <label class="col-sm-2 control-label">
+                            鍗曚环</label>
+                        <div class="col-sm-6">
+                            <div class="input-group">
+                                <input type="text" class="form-control" name="price" id="price" value="<%=(double)GwOrder.Price/1000 %>" 
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" readonly="readonly" /><span class="input-group-addon">鍏�/鏉� </span>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="form-group classes-span classes-span-1">
+                        <label class="col-sm-2 control-label">
+                            鐢ㄦ埛浣欓</label>
+                        <div class="col-sm-6">
+                            <div class="input-group">
+                                <input type="text" class="form-control" value="<%=(double)Balance/1000 %>" 
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" readonly="readonly" /><span class="input-group-addon">鍏� </span>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">
+                            璁㈠崟鍩烘湰鏉℃暟</label>
+                        <div class="col-sm-6">
+                            <div class="input-group">
+                            <input type="text" class="form-control" name="basicNum" id="basicNum" value="" maxlength="5"
+                                onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                oncontextmenu="return false" /><span class="input-group-addon">鏉� </span>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">
+                            璁㈠崟璧犻�佹潯鏁�</label>
+                        <div class="col-sm-6">
+                            <div class="input-group">
+                            <input type="text" class="form-control" name="givingNum" id="givingNum" value="" maxlength="5"
+                                onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                oncontextmenu="return false" /><span class="input-group-addon">鏉� </span>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">
+                            澶囨敞</label>
+                        <div class="col-sm-6 input-group m-b">
+                            <textarea class="form-control" id="remark" name="remark" rows="6"></textarea>
+                        </div>
+                    </div>
+                </div>
+                <div class="modal-footer">
+                    <input class="btn btn-default" value="杩斿洖" onclick="return window.location = 'GwSp.aspx'" type="button" />
+                    <button class="btn btn-primary action-save">
+                        淇濆瓨</button>
+                </div>
+            </div>
+        </div>
+        </form>
+
+
+    <script type="text/javascript" language="javascript">
+        //$(document).ready(function () {
+
+        $(document).on("click", ".action-save", function () {
+
+                var spId = $("#spId").val();
+                var clientId = $("#clientId").val();
+                var productId = $("#productId").val();
+                var basicNum = $("#basicNum").val();
+                var givingNum = $("#givingNum").val();
+                var remark = $("#remark").val();
+
+                mytek.confirm("鏄惁纭畾鍏呭�硷紵", "鏄惁鎿嶄綔锛�", function (b) {
+
+                    if (b) {
+
+                        $.post("gwOrder.ashx", { action: "add", spId: spId, clientId: clientId, productId: productId, basicNum: basicNum, givingNum: givingNum, remark: remark }, function (r) {
+                            /**
+                            if (r.OK) {
+                                mytek.alert(r.Message);
+                                //window.location = history.back();
+                            } else {
+                                mytek.alert(r.Message);
+                            }
+                            **/
+
+                            mytek.alert(r.Message, r.OK, function () {
+                                //loadPageList();
+                            });
+
+                        });
+
+                    }
+
+                });
+            });
+
+        //}
+
+    </script>
+
+    
+</asp:Content>
diff --git a/web/web/GwOrderCreate.aspx.cs b/web/web/GwOrderCreate.aspx.cs
new file mode 100644
index 0000000..749e8ae
--- /dev/null
+++ b/web/web/GwOrderCreate.aspx.cs
@@ -0,0 +1,123 @@
+锘� 
+using Common;
+using Dao;
+using Model;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections.Generic;
+using System.Web;
+using System.Web.Profile;
+using System.Web.SessionState;
+using System.Text;
+
+public partial  class _GwOrderCreate : PageBase<SysUser>, IRequiresSessionState
+{
+
+    protected List<GwProduct> GwProductList;
+    protected List<GwClient> GwClientList;
+    protected long Balance;
+
+    protected void Page_Load(object sender, EventArgs e)
+    {
+        //this.CheckRight("201", FailedOperation.ErrorMsgOnly);
+
+        using (GwClientDao gwClientDao = new GwClientDao())
+            this.GwClientList = gwClientDao.Clientlist();
+
+        //鑾峰彇浜у搧鎴栦骇鍝佸垎绫�
+        using (GwProductDao gwProductDao = new GwProductDao())
+        {
+            GwProduct bean = new GwProduct();
+            bean.Classes = -1;
+            bean.IsEnable = -1;
+            bean.IsDefault = -1;
+            this.GwProductList = gwProductDao.getAllList(bean);
+        }
+
+        using (GwSpDao gwSpDao = new GwSpDao())
+        {
+            if (!string.IsNullOrEmpty(this.SpID))
+            {
+                GwSp  gwSp = gwSpDao.Get(this.SpID);
+                if(gwSp==null)
+                {
+                    throw new ArgumentException("璐﹀彿涓嶅瓨鍦紒");
+
+                }
+                else if (gwSp.Status==0)
+                {
+                    throw new ArgumentException("璐﹀彿鐘舵�佸凡鍋滅敤锛�");
+
+                }
+                else
+                {
+                    this.GwOrder = new GwOrder();
+                    this.GwOrder.SpId = gwSp.SpID;
+                    this.GwOrder.ClientId = gwSp.ClientID;
+                    this.GwOrder.ProductId = gwSp.ProductId;
+                    this.GwOrder.Price = gwSp.Price;
+                    this.GwOrder.BasicNum = gwSp.BasicNum;  //鍩烘湰鏉℃暟
+                    this.GwOrder.GivingNum = gwSp.GivingNum;
+
+                    this.Balance = gwSp.Balance;    //浣欓
+                }
+            }
+            else
+            {
+                this.GwOrder = new GwOrder();
+            }
+        }
+    }
+
+
+    public GwOrder GwOrder { get; protected set; }
+
+    public string SpID
+    {
+        get
+        {
+            return this.AppContext.GetString("spId");
+        }
+    }
+
+    //鑾峰彇浜у搧淇℃伅
+    public string GetProductOptions(string productId)
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.GwProductList.Count == 0)
+            return "<option value='0'>鏃�</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" >{1}</option>", (object)0, (object)"鏃�");
+        foreach (GwProduct bean in this.GwProductList)
+        {
+            //鍋滅敤鐨勪骇鍝佸垎绫讳笉鍐嶆樉绀�
+            if (bean.IsEnable == 0)
+            {
+                continue;
+            }
+
+            if (productId.Equals(bean.Id))
+                stringBuilder.AppendFormat("<option value=\"{0}\" selected>{0}-{1}</option>", (object)bean.Id, (object)bean.Name);
+            else
+                stringBuilder.AppendFormat("<option value=\"{0}\">{0}-{1}</option>", (object)bean.Id, (object)bean.Name);
+        }
+        return stringBuilder.ToString();
+    }
+
+    //鑾峰彇瀹㈡埛淇℃伅
+    public string GetClientOptions(string clientId)
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.GwClientList.Count == 0)
+            return "<option value='0'>鏃�</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" >{1}</option>", (object)0, (object)"鏃�");
+        foreach (GwClient bean in this.GwClientList)
+        {
+            if (clientId.Equals(bean.ClientID))
+                stringBuilder.AppendFormat("<option value=\"{0}\" selected>{0}-{1}</option>", (object)bean.ClientID, (object)bean.ClientName);
+            else
+                stringBuilder.AppendFormat("<option value=\"{0}\">{0}-{1}</option>", (object)bean.ClientID, (object)bean.ClientName);
+        }
+        return stringBuilder.ToString();
+    }
+}
diff --git a/web/web/GwOrderList.aspx b/web/web/GwOrderList.aspx
new file mode 100644
index 0000000..c219de4
--- /dev/null
+++ b/web/web/GwOrderList.aspx
@@ -0,0 +1,339 @@
+锘�<%@ Page Language="C#"  masterpagefile="~/Main.master" AutoEventWireup="true" CodeFile="GwOrderList.aspx.cs" Inherits="_GwOrderList" %>
+ 
+
+<asp:Content ID="Content3" ContentPlaceHolderID="content" runat="Server">
+    <script>
+        $(function () {
+            /**
+            $("#pager").Pager({
+                pageSize: 50,
+                onChange: function (pageIndex, pageSize) {
+                    loadPageList();
+                }
+            });
+            **/
+            var pagination = new Pagination();
+            pagination.setPageIndex(1);
+            pagination.setPageSize(50);
+
+            function loadPageList() {
+
+                var clientId = $("#ClientID").val();
+                var clientName = $("#ClientName").val();
+                var spId = $("#SpID").val();
+                var startDate = $("#sDate").val();
+                var endDate = $("#eDate").val();
+
+                $.ajax({
+                    url: "GwOrder.ashx",
+                    type: "POST",
+                    //data: { action: "gwOrderList", SpID: SpID, ClientID: ClientID, ClientName: ClientName, sDate: sDate, EndTime: EndTime, pageSize: $("#pager").Pager("getPageSize"), pageIndex: $("#pager").Pager("getPageIndex") },
+                    data: { action: "gwOrderList", clientId: clientId, clientName: clientName, spId: spId, startDate: startDate, endDate: endDate, flag: -1, pageIndex: pagination.getPageIndex(), pageSize: pagination.getPageSize() },
+                success: function (result) {
+                        if (result.OK) {
+                            $("#orderListTable tbody").html(result.Message.Table);
+                            $("#pager").Pager("setTotalCount", result.Message.TotalCount);
+                        } else {
+                            mytek.alert(result.Message, result.OK);
+                        }
+                    }
+                });
+            }
+
+
+            $(".input-daterange").datepicker({ keyboardNavigation: !1, forceParse: !1, autoclose: !0 });
+
+            $(document).on("click", ".action-modal-detail", function () {
+                var orderId = $(this).data("orderid");
+                $("#orderDialog .modal-title").text("璁㈠崟鏄庣粏");
+
+                $.get("gwOrder.ashx", { "action": "get", orderId: orderId }, function (r) {
+
+                    //$("#orderDialog .modal-title").text("璁㈠崟鏄庣粏");
+                    //$("#orderDialog #action").val("detail");
+                    $("#orderDialog #orderId").val(r.Message.OrderId).attr("readonly", false);
+                    $("#orderDialog #spId").val(r.Message.SpId);
+                    $("#orderDialog #clientId").val(r.Message.ClientId);
+                    $("#orderDialog #productId").val(r.Message.ProductId);
+                    //$("#orderDialog #comboId").val(r.Message.ComboId);
+                    $("#orderDialog #basicNum").val(r.Message.BasicNum, 0);
+                    $("#orderDialog #givingNum").val(r.Message.GivingNum, 0);
+                    $("#orderDialog #price").val(r.Message.Price / 1000, 0.00);
+                    $("#orderDialog #orderNumTotal").val(r.Message.OrderNumTotal, 0);
+                    $("#orderDialog #orderAmountTotal").val(r.Message.OrderAmountTotal / 1000, 0);
+                    $("#orderDialog #beforeBalanceNum").val(r.Message.BeforeBalanceNum, 0);
+                    $("#orderDialog #creator").val(r.Message.Creator);
+                    $("#orderDialog #createTime").val(r.Message.CreateTime);
+                    //$("#orderDialog #auditor").valval(r.Message.Auditor);
+                    //$("#orderDialog #auditTime").val(r.Message.AuditTime);
+                    $("#orderDialog #status").val(r.Message.Status);
+                    $("#orderDialog #remark").val(r.Message.Remark);
+
+                    $("#orderDialog").modal("show");
+                }, "json");
+            });
+
+            $("#orderForm").ajaxForm({
+                success: function (r) {
+                    if (r.OK) {
+                        mytek.alert(r.Message, r.OK, function () {
+                            $("#orderDialog").modal("hide");
+                            loadPageList();
+                        });
+                    } else {
+                        mytek.alert(r.Message, r.OK);
+                    }
+                }
+            });
+
+            $(document).on("click", ".action-query", function () {
+                pagination.setPageIndex(1);
+                loadPageList();
+            });
+
+            //杩涘叆椤甸潰鏃舵墽琛屾煡璇�
+            loadPageList();
+
+        })</script>
+    <form name="OrderListForm" method="post" action="GwOrderList.aspx" id="OrderListForm"
+    class="form-inline">
+    <div class="ibox">
+        <div class="input-group m-b">
+            <span class="input-group-addon">SPID</span>
+            <input type="text" name="SpID" id="SpID" value="<%=SpID %>"" class="form-control" />
+        </div>
+        <div class="input-group m-b">
+            <span class="input-group-addon">瀹㈡埛ID</span>
+            <input type="text" name="ClientID" id="ClientID" class="form-control" />
+        </div>
+        <div class="input-group m-b">
+            <span class="input-group-addon">瀹㈡埛鍚嶇О</span>
+            <input type="text" name="ClientName" id="ClientName" class="form-control " />
+        </div>
+        <div class="input-group m-b">
+            <div class="input-daterange input-group " id="datepicker">
+                <span class="input-group-addon">鏃堕棿鑼冨洿&nbsp;<i class="fa fa-calendar"></i></span>
+                <input type="text" class=" form-control" name="sDate" id="sDate" value="<%=sDate%>" />
+                <span class="input-group-addon">鍒�</span> <span class="input-group-addon"><i class="fa fa-calendar">
+                </i></span>
+                <input type="text" class=" form-control" name="eDate" id="eDate" value="<%=eDate%>" />
+            </div>
+        </div>
+        <div class="input-group m-b">
+            <input type="button" value="鏌ヨ" class="btn btn-primary action-query" />
+        </div>
+    </div>
+    <div class="table-responsive">
+        <table class="table table-striped table-bordered table-hover" id="orderListTable">
+            <thead>
+                <tr class="header">
+                    <th>璁㈠崟ID
+                    </th>
+                    <th>璐﹀彿ID
+                    </th>
+                    <th>瀹㈡埛ID
+                    </th>
+                    <th>浜у搧ID
+                    </th>
+                    <%--<th>濂楅ID
+                    </th>
+                         --%>
+                    <th>璁㈠崟鍩烘湰鏉℃暟
+                    </th>
+                    <th>璁㈠崟璧犻�佹潯鏁�
+                    </th>
+                    <th>鍗曚环锛堝厓/鏉★級
+                    </th>
+                    <th>璁㈠崟鎬绘潯鏁�
+                    </th>
+                    <th>璁㈠崟鎬婚噾棰濓紙鍏冿級
+                    </th>
+                    <th>鍏呭�煎墠璐﹀彿浣欓锛堟潯锛�
+                    </th>
+                    <th>鍒涘缓浜�
+                    </th>
+                    <th>鍒涘缓鏃堕棿
+                    </th>
+                    <th>鐘舵��
+                    </th>
+                    <th class="text-right">鎿嶄綔
+                    </th>
+                </tr>
+            </thead>
+            <tbody>
+            </tbody>
+            <%--<%=ViewState["list"] %>--%>
+        </table>
+    </div>
+    </form>
+    <%--
+    <div id="pager">
+    </div>--%>
+    <div id="pagination">
+    </div>
+    <div class="footBar">
+      
+    </div>
+
+    <div class="modal inmodal fade" id="orderDialog" tabindex="-1" role="dialog" aria-hidden="true">
+        <div class="modal-dialog modal-lg">
+            <form class="form-horizontal" id="orderForm" name="orderForm" method="post" action="gwOrder.ashx">
+                <div class="modal-content ">
+                    <div class="modal-header">
+                        <input type="hidden" class="form-control" name="action" id="action" value="update" />
+                        <button type="button" class="close" data-dismiss="modal">
+                            <span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+                        <h4 class="modal-title">璁㈠崟淇℃伅</h4>
+                    </div>
+                    <div class="modal-body">
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璁㈠崟缂栧彿</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="orderId" id="orderId" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璐﹀彿ID</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="spId" id="spId" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                瀹㈡埛ID</label>
+                            <div class="col-sm-4 ">
+                                <select name="clientId" id="clientId" class="form-control">
+                                    <%=GetClientOptions("0")%>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                浜у搧ID</label>
+                            <div class="col-sm-4 ">
+                                <select name="productId" id="productId" class="form-control">
+                                    <%=GetProductOptions("0")%>
+                                </select>
+                            </div>
+                        </div>
+                        <%--
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                濂楅ID</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="comboId" id="comboId" value="" />
+                            </div>
+                        </div>
+                        --%>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璁㈠崟鍩烘湰鏉℃暟</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                <input type="text" class="form-control" name="basicNum" id="basicNum" value="" maxlength="5"
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鏉� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璁㈠崟璧犻�佹潯鏁�</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                <input type="text" class="form-control" name="givingNum" id="givingNum" value="" maxlength="5"
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鏉� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group classes-span classes-span-1">
+                            <label class="col-sm-2 control-label">
+                                鍗曚环</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                    <input type="text" class="form-control" name="price" id="price" value="" maxlength="5"
+                                        onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                        oncontextmenu="return false" /><span class="input-group-addon">鍏�/鏉� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璁㈠崟鎬绘潯鏁�</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                <input type="text" class="form-control" name="orderNumTotal" id="orderNumTotal" value="" maxlength="5"
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鏉� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                璁㈠崟鎬婚噾棰�</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                <input type="text" class="form-control" name="orderAmountTotal" id="orderAmountTotal" value="" maxlength="5"
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鍏� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                鍏呭�煎墠璐﹀彿浣欓</label>
+                            <div class="col-sm-4">
+                                <div class="input-group">
+                                <input type="text" class="form-control" name="beforeBalanceNum" id="beforeBalanceNum" value="" maxlength="5"
+                                    onkeyup="value=value.replace(/[^\d\.]/g,'')" onpaste="value=value.replace(/[^\d\.]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鏉� </span>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                鍒涘缓浜�</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="creator" id="creator" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                鍒涘缓鏃堕棿</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="createTime" id="createTime" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                鐘舵��</label>
+                            <div class="col-sm-4 ">
+                                <input type="text" class="form-control" name="status" id="status" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">
+                                澶囨敞</label>
+                            <div class="col-sm-10 input-group m-b">
+                                <input type="text" class="form-control" name="remark" id="remark" value="" />
+                            </div>
+                        </div>
+                    </div>
+                    <div class="modal-footer">
+                        <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">
+                            鍙栨秷</button>&nbsp;&nbsp;
+                    </div>
+                </div>
+            </form>
+        </div>
+    </div>
+    
+    <!-- footBar -->
+    <div id="mask" class="mask">
+        <span></span>
+        <img src="img/spinning-circles.svg" alt="杞藉叆涓�..." />
+    </div>
+  </asp:Content> 
diff --git a/web/web/GwOrderList.aspx.cs b/web/web/GwOrderList.aspx.cs
new file mode 100644
index 0000000..7a26a7d
--- /dev/null
+++ b/web/web/GwOrderList.aspx.cs
@@ -0,0 +1,106 @@
+锘� 
+using Common;
+using Model;
+using System;
+using System.Web;
+using System.Web.Profile;
+using System.Web.SessionState;
+using System.Collections.Generic;
+using System.Text;
+using Dao;
+
+public partial class _GwOrderList : PageBase<SysUser>, IRequiresSessionState
+{
+
+    protected List<GwProduct> GwProductList;
+    protected List<GwClient> GwClientList;
+
+    public string sDate
+    {
+        get
+        {
+            string @string = this.AppContext.GetString("sDate");
+            if (string.IsNullOrEmpty(@string))
+                return DateTime.Now.AddDays(-1.0).ToString("yyyy-MM-dd");
+            return @string;
+        }
+    }
+
+    public string eDate
+    {
+        get
+        {
+            string @string = this.AppContext.GetString("eDate");
+            if (string.IsNullOrEmpty(@string))
+                return DateTime.Now.ToString("yyyy-MM-dd");
+            return @string;
+        }
+    }
+
+    public string SpID
+    {
+        get
+        {
+            return this.AppContext.GetString("spId");
+        }
+    }
+
+    protected void Page_Load(object sender, EventArgs e)
+    {
+        this.CheckRight("3022", FailedOperation.ErrorMsgOnly);
+
+        using (GwClientDao gwClientDao = new GwClientDao())
+            this.GwClientList = gwClientDao.Clientlist();
+
+        //鑾峰彇浜у搧鎴栦骇鍝佸垎绫�
+        using (GwProductDao gwProductDao = new GwProductDao())
+        {
+            GwProduct bean = new GwProduct();
+            bean.Classes = -1;
+            bean.IsEnable = -1;
+            bean.IsDefault = -1;
+            this.GwProductList = gwProductDao.getAllList(bean);
+        }
+    }
+
+
+    //鑾峰彇浜у搧淇℃伅
+    public string GetProductOptions(string productId)
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.GwProductList.Count == 0)
+            return "<option value='0'>鏃�</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" >{1}</option>", (object)0, (object)"鏃�");
+        foreach (GwProduct bean in this.GwProductList)
+        {
+            //鍋滅敤鐨勪骇鍝佸垎绫讳笉鍐嶆樉绀�
+            if (bean.IsEnable == 0)
+            {
+                continue;
+            }
+
+            if (productId.Equals(bean.Id))
+                stringBuilder.AppendFormat("<option value=\"{0}\" selected>{0}-{1}</option>", (object)bean.Id, (object)bean.Name);
+            else
+                stringBuilder.AppendFormat("<option value=\"{0}\">{0}-{1}</option>", (object)bean.Id, (object)bean.Name);
+        }
+        return stringBuilder.ToString();
+    }
+
+    //鑾峰彇瀹㈡埛淇℃伅
+    public string GetClientOptions(string clientId)
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.GwClientList.Count == 0)
+            return "<option value='0'>鏃�</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" >{1}</option>", (object)0, (object)"鏃�");
+        foreach (GwClient bean in this.GwClientList)
+        {
+            if (clientId.Equals(bean.ClientID))
+                stringBuilder.AppendFormat("<option value=\"{0}\" selected>{0}-{1}</option>", (object)bean.ClientID, (object)bean.ClientName);
+            else
+                stringBuilder.AppendFormat("<option value=\"{0}\">{0}-{1}</option>", (object)bean.ClientID, (object)bean.ClientName);
+        }
+        return stringBuilder.ToString();
+    }
+}
diff --git a/web/web/GwSp.aspx b/web/web/GwSp.aspx
index 5003bf1..551b7a3 100644
--- a/web/web/GwSp.aspx
+++ b/web/web/GwSp.aspx
@@ -193,10 +193,18 @@
                 window.location.href = url;
             });
 
+            //鍏呭�兼棩蹇�
+            /**
             $(document).on("click", ".action-modal-Acctunchargelog", function() {
                 var id = $(this).data("id");
                 window.location.href = "GwSpChargeLog.aspx?id=" + id + "";
             });
+            **/
+
+            $(document).on("click", ".action-modal-Acctunchargelog", function () {
+                var spId = $(this).data("id");
+                window.location.href = "GwOrderList.aspx?spId=" + spId + "";
+            });
 
             var serverIp =<%=Newtonsoft.Json.JsonConvert.SerializeObject(ConfigurationManager.AppSettings["serverIp"])%>;
             var apList =<%=Newtonsoft.Json.JsonConvert.SerializeObject(this.ApList)%>;
diff --git a/web/web/gwspupdate.aspx.cs b/web/web/gwspupdate.aspx.cs
index 85f7ffd..656e0ef 100644
--- a/web/web/gwspupdate.aspx.cs
+++ b/web/web/gwspupdate.aspx.cs
@@ -229,6 +229,8 @@
     //鑾峰彇浜у搧淇℃伅
     public string GetProductOptions(string productId)
     {
+        if (productId==null)
+            return "<option value='0'>鏃�</option>";
         StringBuilder stringBuilder = new StringBuilder();
         if (this.GwProductList.Count == 0)
             return "<option value='0'>鏃�</option>";
diff --git a/web/web/logs/err.txt b/web/web/logs/err.txt
index 3ede951..23bec1a 100644
--- a/web/web/logs/err.txt
+++ b/web/web/logs/err.txt
@@ -654,3 +654,745 @@
 #20  2022-02-16 17:24:53,794 Common.dll OracleHelper.ExecuteScalar              SQL=select count(1) FROM GW_AUDIT_CACHE ca left join gw_op op on ca.op_id=op.op_id WHERE   ca.AP_SUBMIT_TIME BETWEEN :START_TIME AND :END_TIME AND (ca.MSG_CONTENT LIKE :CONTENT OR :CONTENT='%%') AND ca.AUDITING_STATUS=:AUDITING_STATUS and op.OP_NAME=移动通道 
 Message=ORA-00904: "移动通道": 标识符无效
 >>>>>>> Stashed changes
 
+#36  2022-03-21 00:37:11,743 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7008
+会话 ID: 73 序列号: 3456
+
+#9   2022-03-21 00:37:11,744 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 7784
+会话 ID: 200 序列号: 3327
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#7   2022-03-21 00:40:12,986 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 1160
+会话 ID: 14 序列号: 6599
+
+#7   2022-03-21 00:42:12,726 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220321 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7676
+会话 ID: 134 序列号: 3609
+
+#35  2022-03-21 00:48:59,108 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7488
+会话 ID: 72 序列号: 2827
+
+#22  2022-03-21 00:49:18,562 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220321 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7180
+会话 ID: 16 序列号: 4733
+
+#39  2022-03-21 00:51:08,010 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7308
+会话 ID: 195 序列号: 4472
+
+#16  2022-03-21 00:51:35,782 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 712
+会话 ID: 139 序列号: 389
+
+#40  2022-03-21 00:58:01,084 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220321 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7172
+会话 ID: 206 序列号: 104
+
+#34  2022-03-21 00:58:20,626 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 3328
+会话 ID: 77 序列号: 28
+
+#68  2022-03-31 02:38:57,384 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 12584
+会话 ID: 133 序列号: 58839
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#61  2022-03-31 03:41:16,261 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-30 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#61  2022-03-31 03:41:16,301 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#29  2022-03-31 03:43:54,989 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-30 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#29  2022-03-31 03:43:55,017 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#45  2022-03-31 03:44:03,573 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-23 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#45  2022-03-31 03:44:03,589 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#61  2022-03-31 03:44:23,873 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220331 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 1116
+会话 ID: 207 序列号: 37854
+
+#29  2022-03-31 03:44:43,222 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11496
+会话 ID: 74 序列号: 5973
+
+#45  2022-03-31 03:45:02,368 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-23 AND 2022-04-01  ) T  Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7596
+会话 ID: 201 序列号: 49901
+
+#45  2022-03-31 03:45:02,385 Dao.dll GwOrderDao.LoadInfoList                    ORA-03113: 通信通道的文件结尾
+进程 ID: 7596
+会话 ID: 201 序列号: 49901
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#61  2022-03-31 03:45:13,034 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-23 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#61  2022-03-31 03:45:13,050 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#61  2022-03-31 03:46:12,333 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-04-01 AND 2022-04-01  ) T  Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 6272
+会话 ID: 72 序列号: 18963
+
+#61  2022-03-31 03:46:12,349 Dao.dll GwOrderDao.LoadInfoList                    ORA-03113: 通信通道的文件结尾
+进程 ID: 6272
+会话 ID: 72 序列号: 18963
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#45  2022-03-31 03:46:15,419 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-30 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#45  2022-03-31 03:46:15,442 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#64  2022-03-31 03:47:30,072 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-30 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#64  2022-03-31 03:47:30,088 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#64  2022-03-31 03:47:37,216 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-10 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#64  2022-03-31 03:47:37,236 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#64  2022-03-31 03:50:06,744 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-10 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#64  2022-03-31 03:50:06,761 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#17  2022-03-31 03:50:37,525 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_OP order BY OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7160
+会话 ID: 15 序列号: 40808
+
+#64  2022-03-31 03:56:17,282 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-30 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#64  2022-03-31 03:56:17,306 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#17  2022-03-31 03:56:25,686 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-10 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#17  2022-03-31 03:57:30,596 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#61  2022-03-31 03:59:48,236 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-10 AND 2022-04-01  ) T  Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 9200
+会话 ID: 133 序列号: 61737
+
+#61  2022-03-31 04:01:34,816 Dao.dll GwOrderDao.LoadInfoList                    ORA-03113: 通信通道的文件结尾
+进程 ID: 9200
+会话 ID: 133 序列号: 61737
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount)
+
+#61  2022-03-31 04:02:00,393 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_OP order BY OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 1340
+会话 ID: 200 序列号: 25647
+
+#28  2022-03-31 04:02:15,016 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN '2022-03-30' AND '2022-04-01'  ) T  Message=ORA-01861: 文字与格式字符串不匹配
+
+#28  2022-03-31 04:02:15,041 Dao.dll GwOrderDao.LoadInfoList                    ORA-01861: 文字与格式字符串不匹配
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount)
+
+#61  2022-03-31 04:02:25,909 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN '2022-03-23' AND '2022-04-01'  ) T  Message=ORA-01861: 文字与格式字符串不匹配
+
+#61  2022-03-31 04:03:37,152 Dao.dll GwOrderDao.LoadInfoList                    ORA-01861: 文字与格式字符串不匹配
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount)
+
+#61  2022-03-31 04:08:54,008 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_OP order BY OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11356
+会话 ID: 11 序列号: 1737
+
+#7   2022-03-31 04:10:03,457 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-30 00:00:00 AND 2022-04-01 00:00:00  ) T  Message=ORA-00905: 缺失关键字
+
+#7   2022-03-31 04:10:03,492 Dao.dll GwOrderDao.LoadInfoList                    ORA-00905: 缺失关键字
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, DateTime startDate, DateTime endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#11  2022-03-31 04:10:11,724 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-23 00:00:00 AND 2022-04-01 00:00:00  ) T  Message=ORA-00905: 缺失关键字
+
+#11  2022-03-31 04:10:11,740 Dao.dll GwOrderDao.LoadInfoList                    ORA-00905: 缺失关键字
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, DateTime startDate, DateTime endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#9   2022-03-31 04:10:29,921 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-23 00:00:00 AND 2022-04-01 00:00:00  ) T  Message=ORA-00905: 缺失关键字
+
+#9   2022-03-31 04:10:29,937 Dao.dll GwOrderDao.LoadInfoList                    ORA-00905: 缺失关键字
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, DateTime startDate, DateTime endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#8   2022-03-31 04:11:30,513 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-23 00:00:00 AND 2022-04-01 00:00:00  ) T  Message=ORA-00905: 缺失关键字
+
+#8   2022-03-31 04:11:30,529 Dao.dll GwOrderDao.LoadInfoList                    ORA-00905: 缺失关键字
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, DateTime startDate, DateTime endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#9   2022-03-31 04:14:02,931 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-23 00:00:00 AND 2022-04-01 00:00:00  ) T  Message=ORA-00905: 缺失关键字
+
+#9   2022-03-31 04:14:45,999 Dao.dll GwOrderDao.LoadInfoList                    ORA-00905: 缺失关键字
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, DateTime startDate, DateTime endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#7   2022-03-31 04:33:17,699 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7880
+会话 ID: 145 序列号: 10
+
+#25  2022-03-31 04:38:29,628 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220331 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 1152
+会话 ID: 17 序列号: 1772
+
+#23  2022-03-31 16:46:15,119 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 11340
+会话 ID: 205 序列号: 50957
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#8   2022-03-31 16:53:15,014 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 2000
+会话 ID: 79 序列号: 1018
+
+#21  2022-03-31 16:53:34,118 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220331 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 9296
+会话 ID: 212 序列号: 3228
+
+#18  2022-03-31 17:05:15,999 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7400
+会话 ID: 139 序列号: 57391
+
+#20  2022-03-31 17:11:15,191 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_OP order BY OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 12896
+会话 ID: 205 序列号: 52285
+
+#42  2022-04-01 09:34:46,186 Common.dll OracleHelper.ExecuteReader              ORA-00942: 表或视图不存在
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#42  2022-04-01 09:34:50,161 Dao.dll GwSmDao.LoadInfoList                       ORA-00942: 表或视图不存在select count(*) as count from LG_SM_20220131 sm left join GW_OP op on sm.op_id=op.op_id where 1=1  and sm.AP_SUBMIT_TIME BETWEEN :BEGIN_TIME AND :END_TIME
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 227
+   在 Dao.GwSmDao.LoadInfoList(String apMID, String opName, String clientID, String spID, String destnationId, String sDate, String beginTime, String endTime, String content, String opstat, Int32 TStatus, Int32& recordcount, Int32 pageSize, Int32 pageIndex, String ReSend) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwSmDao.cs:行号 406
+
+#39  2022-04-01 09:35:00,742 Common.dll OracleHelper.ExecuteReader              ORA-00942: 表或视图不存在
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#39  2022-04-01 09:35:00,763 Dao.dll GwSmDao.LoadInfoList                       ORA-00942: 表或视图不存在select count(*) as count from LG_SM_20211001 sm left join GW_OP op on sm.op_id=op.op_id where 1=1  and sm.AP_SUBMIT_TIME BETWEEN :BEGIN_TIME AND :END_TIME
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 227
+   在 Dao.GwSmDao.LoadInfoList(String apMID, String opName, String clientID, String spID, String destnationId, String sDate, String beginTime, String endTime, String content, String opstat, Int32 TStatus, Int32& recordcount, Int32 pageSize, Int32 pageIndex, String ReSend) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwSmDao.cs:行号 406
+
+#39  2022-04-01 09:35:23,454 Common.dll OracleHelper.ExecuteReader              ORA-00942: 表或视图不存在
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#39  2022-04-01 09:35:23,481 Dao.dll GwDmDao.LoadInfoList                       ORA-00942: 表或视图不存在 select count(*) as count  from LG_DM_20211201 where 1=1
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 227
+   在 Dao.GwDmDao.LoadInfoList(String ApID, String OpID, String spID, String DestnationId, String sDate, Int32& recordcount, Int32 pageSize, Int32 PageIndex) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwDmDao.cs:行号 52
+
+#39  2022-04-01 09:35:34,169 Common.dll OracleHelper.ExecuteReader              ORA-00942: 表或视图不存在
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#39  2022-04-01 09:35:34,185 Dao.dll GwDmDao.LoadInfoList                       ORA-00942: 表或视图不存在 select count(*) as count  from LG_DM_20200115 where 1=1
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 227
+   在 Dao.GwDmDao.LoadInfoList(String ApID, String OpID, String spID, String DestnationId, String sDate, Int32& recordcount, Int32 pageSize, Int32 PageIndex) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwDmDao.cs:行号 52
+
+#62  2022-04-13 10:25:04,410 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 9504
+会话 ID: 205 序列号: 25061
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#7   2022-04-13 10:30:50,008 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220413 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 9916
+会话 ID: 204 序列号: 37226
+
+#61  2022-04-13 10:31:09,611 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 9400
+会话 ID: 146 序列号: 45532
+
+#7   2022-04-13 10:33:42,410 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 10060
+会话 ID: 72 序列号: 27318
+
+#7   2022-04-13 10:39:48,992 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220413 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7744
+会话 ID: 139 序列号: 33341
+
+#60  2022-04-13 10:40:08,472 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 12772
+会话 ID: 19 序列号: 45105
+
+#35  2022-04-13 15:04:17,914 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 12212
+会话 ID: 77 序列号: 17059
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#29  2022-04-14 09:01:27,250 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_CLIENT Message=ORA-12571: TNS: 包写入程序失败
+
+#11  2022-04-18 12:12:48,369 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 11472
+会话 ID: 145 序列号: 57954
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#56  2022-04-18 12:18:50,712 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220418 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11044
+会话 ID: 146 序列号: 57041
+
+#12  2022-04-18 12:19:09,861 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 1008
+会话 ID: 77 序列号: 25608
+
+#11  2022-04-18 12:21:07,679 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_CLIENT Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 4996
+会话 ID: 78 序列号: 39675
+
+#20  2022-04-18 12:21:42,286 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_CLIENT Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7264
+会话 ID: 19 序列号: 1251
+
+#32  2022-04-19 16:25:21,592 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220419 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-00942: 表或视图不存在
+
+#57  2022-04-19 16:31:38,212 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11472
+会话 ID: 72 序列号: 40490
+
+#77  2022-04-19 18:35:29,267 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 10872
+会话 ID: 82 序列号: 36454
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#25  2022-04-19 18:35:33,119 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220419 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-00942: 表或视图不存在
+
+#77  2022-04-19 18:41:31,055 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 992
+会话 ID: 11 序列号: 28892
+
+#28  2022-04-19 18:52:42,815 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 10212
+会话 ID: 212 序列号: 18440
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#14  2022-04-22 08:23:38,988 Common.dll OracleHelper.ExecuteReader              ORA-12571: TNS: 包写入程序失败
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#13  2022-04-22 08:33:11,967 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220422 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 9836
+会话 ID: 209 序列号: 57680
+
+#17  2022-04-22 08:33:31,194 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7540
+会话 ID: 139 序列号: 8489
+
+#56  2022-04-22 08:33:50,278 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 5408
+会话 ID: 203 序列号: 19804
+
+#84  2022-04-22 08:44:13,910 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 5184
+会话 ID: 143 序列号: 11866
+
+#88  2022-04-22 11:31:06,133 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11156
+会话 ID: 11 序列号: 38047
+
+#7   2022-04-25 22:58:25,334 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 13228
+会话 ID: 17 序列号: 34550
+
+#51  2022-04-25 23:19:53,698 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220425 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 6084
+会话 ID: 136 序列号: 3887
+
+#54  2022-04-25 23:20:12,944 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 1432
+会话 ID: 78 序列号: 49284
+
+#7   2022-04-25 23:27:51,078 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220425 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 12944
+会话 ID: 69 序列号: 25109
+
+#5   2022-04-25 23:28:10,137 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 13524
+会话 ID: 18 序列号: 45820
+
+#145 2022-04-26 23:59:45,129 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220426 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11156
+会话 ID: 21 序列号: 17536
+
+#7   2022-04-27 00:00:04,598 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 4184
+会话 ID: 205 序列号: 40173
+
+#145 2022-04-27 00:05:39,944 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 1448
+会话 ID: 133 序列号: 30900
+
+#124 2022-04-27 00:15:37,087 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 344
+会话 ID: 69 序列号: 26594
+
+#69  2022-04-27 00:15:56,553 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220427 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 13748
+会话 ID: 209 序列号: 64653
+
+#37  2022-04-27 00:55:01,177 Dao.dll SysFlowDao.Get                             未将对象引用设置到对象的实例。
+   在 Dao.SysFlowDao.Get(SysFlow sysFlow)
+
+#23  2022-04-27 11:32:27,691 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220427 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 10716
+会话 ID: 20 序列号: 9639
+
+#32  2022-04-27 11:32:47,001 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 8244
+会话 ID: 136 序列号: 9702
+
+#19  2022-04-27 14:47:06,194 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 4364
+会话 ID: 18 序列号: 53123
+
+#64  2022-04-27 14:47:25,594 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220427 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 12472
+会话 ID: 67 序列号: 107
+
+#30  2022-04-27 15:10:12,093 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220427 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11728
+会话 ID: 15 序列号: 43421
+
+#21  2022-04-27 15:10:31,612 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 8000
+会话 ID: 196 序列号: 37075
+
+#46  2022-04-27 15:33:12,950 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 6180
+会话 ID: 17 序列号: 37044
+
+#46  2022-04-27 15:33:41,213 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 8448
+会话 ID: 203 序列号: 41050
+
+#5   2022-04-27 22:21:06,598 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 7780
+会话 ID: 209 序列号: 5557
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#15  2022-04-27 22:51:51,165 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220427 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 4844
+会话 ID: 17 序列号: 37683
+
+#14  2022-04-27 22:57:48,002 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 6864
+会话 ID: 196 序列号: 38297
+
+#37  2022-04-27 22:58:12,732 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 12960
+会话 ID: 136 序列号: 10086
+
+#26  2022-04-27 22:58:39,974 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 10032
+会话 ID: 142 序列号: 21220
+
+#47  2022-04-29 07:55:52,772 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 16256
+会话 ID: 209 序列号: 7045
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#50  2022-04-29 08:01:26,368 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220429 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 10744
+会话 ID: 21 序列号: 27701
+
+#63  2022-04-29 08:01:45,600 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11040
+会话 ID: 144 序列号: 9728
+
+#56  2022-04-29 15:16:51,387 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 16404
+会话 ID: 208 序列号: 5357
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#56  2022-04-29 15:17:27,946 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 5848
+会话 ID: 16 序列号: 32693
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#16  2022-04-29 15:17:46,940 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 8556
+会话 ID: 207 序列号: 51867
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#80  2022-04-29 15:18:06,212 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 8032
+会话 ID: 15 序列号: 49369
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#53  2022-04-29 16:19:34,117 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220429 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7444
+会话 ID: 16 序列号: 33621
+
+#17  2022-04-29 16:19:53,591 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 4800
+会话 ID: 212 序列号: 60930
+
+#46  2022-04-29 16:23:07,992 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_CLIENT Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 16392
+会话 ID: 21 序列号: 29658
+
+#66  2022-04-29 16:23:38,585 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_CLIENT Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 15364
+会话 ID: 208 序列号: 6082
+
diff --git a/web/web/logs/logx.txt b/web/web/logs/logx.txt
index 3ede951..23bec1a 100644
--- a/web/web/logs/logx.txt
+++ b/web/web/logs/logx.txt
@@ -654,3 +654,745 @@
 #20  2022-02-16 17:24:53,794 Common.dll OracleHelper.ExecuteScalar              SQL=select count(1) FROM GW_AUDIT_CACHE ca left join gw_op op on ca.op_id=op.op_id WHERE   ca.AP_SUBMIT_TIME BETWEEN :START_TIME AND :END_TIME AND (ca.MSG_CONTENT LIKE :CONTENT OR :CONTENT='%%') AND ca.AUDITING_STATUS=:AUDITING_STATUS and op.OP_NAME=移动通道 
 Message=ORA-00904: "移动通道": 标识符无效
 >>>>>>> Stashed changes
 
+#36  2022-03-21 00:37:11,743 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7008
+会话 ID: 73 序列号: 3456
+
+#9   2022-03-21 00:37:11,744 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 7784
+会话 ID: 200 序列号: 3327
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#7   2022-03-21 00:40:12,986 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 1160
+会话 ID: 14 序列号: 6599
+
+#7   2022-03-21 00:42:12,726 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220321 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7676
+会话 ID: 134 序列号: 3609
+
+#35  2022-03-21 00:48:59,108 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7488
+会话 ID: 72 序列号: 2827
+
+#22  2022-03-21 00:49:18,562 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220321 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7180
+会话 ID: 16 序列号: 4733
+
+#39  2022-03-21 00:51:08,010 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7308
+会话 ID: 195 序列号: 4472
+
+#16  2022-03-21 00:51:35,782 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 712
+会话 ID: 139 序列号: 389
+
+#40  2022-03-21 00:58:01,084 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220321 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7172
+会话 ID: 206 序列号: 104
+
+#34  2022-03-21 00:58:20,626 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 3328
+会话 ID: 77 序列号: 28
+
+#68  2022-03-31 02:38:57,384 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 12584
+会话 ID: 133 序列号: 58839
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#61  2022-03-31 03:41:16,261 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-30 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#61  2022-03-31 03:41:16,301 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#29  2022-03-31 03:43:54,989 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-30 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#29  2022-03-31 03:43:55,017 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#45  2022-03-31 03:44:03,573 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-23 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#45  2022-03-31 03:44:03,589 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#61  2022-03-31 03:44:23,873 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220331 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 1116
+会话 ID: 207 序列号: 37854
+
+#29  2022-03-31 03:44:43,222 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11496
+会话 ID: 74 序列号: 5973
+
+#45  2022-03-31 03:45:02,368 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-23 AND 2022-04-01  ) T  Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7596
+会话 ID: 201 序列号: 49901
+
+#45  2022-03-31 03:45:02,385 Dao.dll GwOrderDao.LoadInfoList                    ORA-03113: 通信通道的文件结尾
+进程 ID: 7596
+会话 ID: 201 序列号: 49901
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#61  2022-03-31 03:45:13,034 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-23 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#61  2022-03-31 03:45:13,050 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#61  2022-03-31 03:46:12,333 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-04-01 AND 2022-04-01  ) T  Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 6272
+会话 ID: 72 序列号: 18963
+
+#61  2022-03-31 03:46:12,349 Dao.dll GwOrderDao.LoadInfoList                    ORA-03113: 通信通道的文件结尾
+进程 ID: 6272
+会话 ID: 72 序列号: 18963
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#45  2022-03-31 03:46:15,419 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-30 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#45  2022-03-31 03:46:15,442 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#64  2022-03-31 03:47:30,072 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-30 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#64  2022-03-31 03:47:30,088 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#64  2022-03-31 03:47:37,216 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-10 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#64  2022-03-31 03:47:37,236 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#64  2022-03-31 03:50:06,744 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-10 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#64  2022-03-31 03:50:06,761 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#17  2022-03-31 03:50:37,525 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_OP order BY OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7160
+会话 ID: 15 序列号: 40808
+
+#64  2022-03-31 03:56:17,282 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-30 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#64  2022-03-31 03:56:17,306 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#17  2022-03-31 03:56:25,686 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-10 AND 2022-04-01  ) T  Message=ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+
+#17  2022-03-31 03:57:30,596 Dao.dll GwOrderDao.LoadInfoList                    ORA-00932: 数据类型不一致: 应为 DATE, 但却获得 NUMBER
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#61  2022-03-31 03:59:48,236 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-10 AND 2022-04-01  ) T  Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 9200
+会话 ID: 133 序列号: 61737
+
+#61  2022-03-31 04:01:34,816 Dao.dll GwOrderDao.LoadInfoList                    ORA-03113: 通信通道的文件结尾
+进程 ID: 9200
+会话 ID: 133 序列号: 61737
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount)
+
+#61  2022-03-31 04:02:00,393 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_OP order BY OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 1340
+会话 ID: 200 序列号: 25647
+
+#28  2022-03-31 04:02:15,016 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN '2022-03-30' AND '2022-04-01'  ) T  Message=ORA-01861: 文字与格式字符串不匹配
+
+#28  2022-03-31 04:02:15,041 Dao.dll GwOrderDao.LoadInfoList                    ORA-01861: 文字与格式字符串不匹配
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount)
+
+#61  2022-03-31 04:02:25,909 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN '2022-03-23' AND '2022-04-01'  ) T  Message=ORA-01861: 文字与格式字符串不匹配
+
+#61  2022-03-31 04:03:37,152 Dao.dll GwOrderDao.LoadInfoList                    ORA-01861: 文字与格式字符串不匹配
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, String startDate, String endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount)
+
+#61  2022-03-31 04:08:54,008 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_OP order BY OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11356
+会话 ID: 11 序列号: 1737
+
+#7   2022-03-31 04:10:03,457 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-30 00:00:00 AND 2022-04-01 00:00:00  ) T  Message=ORA-00905: 缺失关键字
+
+#7   2022-03-31 04:10:03,492 Dao.dll GwOrderDao.LoadInfoList                    ORA-00905: 缺失关键字
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, DateTime startDate, DateTime endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#11  2022-03-31 04:10:11,724 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-23 00:00:00 AND 2022-04-01 00:00:00  ) T  Message=ORA-00905: 缺失关键字
+
+#11  2022-03-31 04:10:11,740 Dao.dll GwOrderDao.LoadInfoList                    ORA-00905: 缺失关键字
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, DateTime startDate, DateTime endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#9   2022-03-31 04:10:29,921 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-23 00:00:00 AND 2022-04-01 00:00:00  ) T  Message=ORA-00905: 缺失关键字
+
+#9   2022-03-31 04:10:29,937 Dao.dll GwOrderDao.LoadInfoList                    ORA-00905: 缺失关键字
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, DateTime startDate, DateTime endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#8   2022-03-31 04:11:30,513 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-23 00:00:00 AND 2022-04-01 00:00:00  ) T  Message=ORA-00905: 缺失关键字
+
+#8   2022-03-31 04:11:30,529 Dao.dll GwOrderDao.LoadInfoList                    ORA-00905: 缺失关键字
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, DateTime startDate, DateTime endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#9   2022-03-31 04:14:02,931 Common.dll OracleHelper.ExecuteReader              SQL=select count(*) as count  FROM ( SELECT GWO.*, GWC.CLIENT_NAME   FROM GW_ORDER GWO  LEFT JOIN GW_SP GWS ON GWS.SP_ID = GWO.SP_ID  LEFT JOIN GW_CLIENT GWC ON GWC.CLIENT_ID = GWO.CLIENT_ID  WHERE 1=1  AND GWO.STATUS IN (0, 1)  AND GWO.CREATE_TIME BETWEEN 2022-03-23 00:00:00 AND 2022-04-01 00:00:00  ) T  Message=ORA-00905: 缺失关键字
+
+#9   2022-03-31 04:14:45,999 Dao.dll GwOrderDao.LoadInfoList                    ORA-00905: 缺失关键字
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 113
+   在 Dao.GwOrderDao.LoadInfoList(String spId, String clientId, String clientName, Int32 flag, DateTime startDate, DateTime endDate, Int32 pageSize, Int32 PageIndex, Int32& recordcount) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwOrderDao.cs:行号 88
+
+#7   2022-03-31 04:33:17,699 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7880
+会话 ID: 145 序列号: 10
+
+#25  2022-03-31 04:38:29,628 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220331 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 1152
+会话 ID: 17 序列号: 1772
+
+#23  2022-03-31 16:46:15,119 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 11340
+会话 ID: 205 序列号: 50957
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#8   2022-03-31 16:53:15,014 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 2000
+会话 ID: 79 序列号: 1018
+
+#21  2022-03-31 16:53:34,118 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220331 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 9296
+会话 ID: 212 序列号: 3228
+
+#18  2022-03-31 17:05:15,999 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7400
+会话 ID: 139 序列号: 57391
+
+#20  2022-03-31 17:11:15,191 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_OP order BY OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 12896
+会话 ID: 205 序列号: 52285
+
+#42  2022-04-01 09:34:46,186 Common.dll OracleHelper.ExecuteReader              ORA-00942: 表或视图不存在
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#42  2022-04-01 09:34:50,161 Dao.dll GwSmDao.LoadInfoList                       ORA-00942: 表或视图不存在select count(*) as count from LG_SM_20220131 sm left join GW_OP op on sm.op_id=op.op_id where 1=1  and sm.AP_SUBMIT_TIME BETWEEN :BEGIN_TIME AND :END_TIME
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 227
+   在 Dao.GwSmDao.LoadInfoList(String apMID, String opName, String clientID, String spID, String destnationId, String sDate, String beginTime, String endTime, String content, String opstat, Int32 TStatus, Int32& recordcount, Int32 pageSize, Int32 pageIndex, String ReSend) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwSmDao.cs:行号 406
+
+#39  2022-04-01 09:35:00,742 Common.dll OracleHelper.ExecuteReader              ORA-00942: 表或视图不存在
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#39  2022-04-01 09:35:00,763 Dao.dll GwSmDao.LoadInfoList                       ORA-00942: 表或视图不存在select count(*) as count from LG_SM_20211001 sm left join GW_OP op on sm.op_id=op.op_id where 1=1  and sm.AP_SUBMIT_TIME BETWEEN :BEGIN_TIME AND :END_TIME
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 227
+   在 Dao.GwSmDao.LoadInfoList(String apMID, String opName, String clientID, String spID, String destnationId, String sDate, String beginTime, String endTime, String content, String opstat, Int32 TStatus, Int32& recordcount, Int32 pageSize, Int32 pageIndex, String ReSend) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwSmDao.cs:行号 406
+
+#39  2022-04-01 09:35:23,454 Common.dll OracleHelper.ExecuteReader              ORA-00942: 表或视图不存在
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#39  2022-04-01 09:35:23,481 Dao.dll GwDmDao.LoadInfoList                       ORA-00942: 表或视图不存在 select count(*) as count  from LG_DM_20211201 where 1=1
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 227
+   在 Dao.GwDmDao.LoadInfoList(String ApID, String OpID, String spID, String DestnationId, String sDate, Int32& recordcount, Int32 pageSize, Int32 PageIndex) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwDmDao.cs:行号 52
+
+#39  2022-04-01 09:35:34,169 Common.dll OracleHelper.ExecuteReader              ORA-00942: 表或视图不存在
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#39  2022-04-01 09:35:34,185 Dao.dll GwDmDao.LoadInfoList                       ORA-00942: 表或视图不存在 select count(*) as count  from LG_DM_20200115 where 1=1
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 227
+   在 Dao.GwDmDao.LoadInfoList(String ApID, String OpID, String spID, String DestnationId, String sDate, Int32& recordcount, Int32 pageSize, Int32 PageIndex) 位置 C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\GwDmDao.cs:行号 52
+
+#62  2022-04-13 10:25:04,410 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 9504
+会话 ID: 205 序列号: 25061
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#7   2022-04-13 10:30:50,008 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220413 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 9916
+会话 ID: 204 序列号: 37226
+
+#61  2022-04-13 10:31:09,611 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 9400
+会话 ID: 146 序列号: 45532
+
+#7   2022-04-13 10:33:42,410 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 10060
+会话 ID: 72 序列号: 27318
+
+#7   2022-04-13 10:39:48,992 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220413 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7744
+会话 ID: 139 序列号: 33341
+
+#60  2022-04-13 10:40:08,472 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 12772
+会话 ID: 19 序列号: 45105
+
+#35  2022-04-13 15:04:17,914 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 12212
+会话 ID: 77 序列号: 17059
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#29  2022-04-14 09:01:27,250 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_CLIENT Message=ORA-12571: TNS: 包写入程序失败
+
+#11  2022-04-18 12:12:48,369 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 11472
+会话 ID: 145 序列号: 57954
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#56  2022-04-18 12:18:50,712 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220418 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11044
+会话 ID: 146 序列号: 57041
+
+#12  2022-04-18 12:19:09,861 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 1008
+会话 ID: 77 序列号: 25608
+
+#11  2022-04-18 12:21:07,679 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_CLIENT Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 4996
+会话 ID: 78 序列号: 39675
+
+#20  2022-04-18 12:21:42,286 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_CLIENT Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7264
+会话 ID: 19 序列号: 1251
+
+#32  2022-04-19 16:25:21,592 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220419 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-00942: 表或视图不存在
+
+#57  2022-04-19 16:31:38,212 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11472
+会话 ID: 72 序列号: 40490
+
+#77  2022-04-19 18:35:29,267 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 10872
+会话 ID: 82 序列号: 36454
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#25  2022-04-19 18:35:33,119 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220419 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-00942: 表或视图不存在
+
+#77  2022-04-19 18:41:31,055 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 992
+会话 ID: 11 序列号: 28892
+
+#28  2022-04-19 18:52:42,815 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 10212
+会话 ID: 212 序列号: 18440
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#14  2022-04-22 08:23:38,988 Common.dll OracleHelper.ExecuteReader              ORA-12571: TNS: 包写入程序失败
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#13  2022-04-22 08:33:11,967 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220422 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 9836
+会话 ID: 209 序列号: 57680
+
+#17  2022-04-22 08:33:31,194 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7540
+会话 ID: 139 序列号: 8489
+
+#56  2022-04-22 08:33:50,278 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 5408
+会话 ID: 203 序列号: 19804
+
+#84  2022-04-22 08:44:13,910 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 5184
+会话 ID: 143 序列号: 11866
+
+#88  2022-04-22 11:31:06,133 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11156
+会话 ID: 11 序列号: 38047
+
+#7   2022-04-25 22:58:25,334 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 13228
+会话 ID: 17 序列号: 34550
+
+#51  2022-04-25 23:19:53,698 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220425 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 6084
+会话 ID: 136 序列号: 3887
+
+#54  2022-04-25 23:20:12,944 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 1432
+会话 ID: 78 序列号: 49284
+
+#7   2022-04-25 23:27:51,078 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220425 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 12944
+会话 ID: 69 序列号: 25109
+
+#5   2022-04-25 23:28:10,137 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 13524
+会话 ID: 18 序列号: 45820
+
+#145 2022-04-26 23:59:45,129 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220426 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11156
+会话 ID: 21 序列号: 17536
+
+#7   2022-04-27 00:00:04,598 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 4184
+会话 ID: 205 序列号: 40173
+
+#145 2022-04-27 00:05:39,944 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 1448
+会话 ID: 133 序列号: 30900
+
+#124 2022-04-27 00:15:37,087 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 344
+会话 ID: 69 序列号: 26594
+
+#69  2022-04-27 00:15:56,553 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220427 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 13748
+会话 ID: 209 序列号: 64653
+
+#37  2022-04-27 00:55:01,177 Dao.dll SysFlowDao.Get                             未将对象引用设置到对象的实例。
+   在 Dao.SysFlowDao.Get(SysFlow sysFlow)
+
+#23  2022-04-27 11:32:27,691 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220427 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 10716
+会话 ID: 20 序列号: 9639
+
+#32  2022-04-27 11:32:47,001 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 8244
+会话 ID: 136 序列号: 9702
+
+#19  2022-04-27 14:47:06,194 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 4364
+会话 ID: 18 序列号: 53123
+
+#64  2022-04-27 14:47:25,594 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220427 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 12472
+会话 ID: 67 序列号: 107
+
+#30  2022-04-27 15:10:12,093 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220427 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11728
+会话 ID: 15 序列号: 43421
+
+#21  2022-04-27 15:10:31,612 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 8000
+会话 ID: 196 序列号: 37075
+
+#46  2022-04-27 15:33:12,950 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 6180
+会话 ID: 17 序列号: 37044
+
+#46  2022-04-27 15:33:41,213 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 8448
+会话 ID: 203 序列号: 41050
+
+#5   2022-04-27 22:21:06,598 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 7780
+会话 ID: 209 序列号: 5557
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#15  2022-04-27 22:51:51,165 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220427 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 4844
+会话 ID: 17 序列号: 37683
+
+#14  2022-04-27 22:57:48,002 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 6864
+会话 ID: 196 序列号: 38297
+
+#37  2022-04-27 22:58:12,732 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 12960
+会话 ID: 136 序列号: 10086
+
+#26  2022-04-27 22:58:39,974 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_AP Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 10032
+会话 ID: 142 序列号: 21220
+
+#47  2022-04-29 07:55:52,772 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 16256
+会话 ID: 209 序列号: 7045
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#50  2022-04-29 08:01:26,368 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220429 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 10744
+会话 ID: 21 序列号: 27701
+
+#63  2022-04-29 08:01:45,600 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 11040
+会话 ID: 144 序列号: 9728
+
+#56  2022-04-29 15:16:51,387 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 16404
+会话 ID: 208 序列号: 5357
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#56  2022-04-29 15:17:27,946 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 5848
+会话 ID: 16 序列号: 32693
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#16  2022-04-29 15:17:46,940 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 8556
+会话 ID: 207 序列号: 51867
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#80  2022-04-29 15:18:06,212 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 8032
+会话 ID: 15 序列号: 49369
+   在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
+   在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
+   在 Common.OracleHelper.ExecuteReader(String sql, OracleConnection x, OracleParameter[] cmdParms) 位置 D:\Company\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#53  2022-04-29 16:19:34,117 Common.dll OracleHelper.ExecuteReader              SQL=select A.*,NVL(b.OP_OUT_COUNT,0) OP_OUT_COUNT,NVL(B.OP_SUCCESS_COUNT,0) OP_SUCCESS_COUNT,NVL(b.OP_FAILED_COUNT,0) OP_FAILED_COUNT FROM GW_OP A LEFT JOIN
+                    (select OP_ID,NVL(SUM(OP_FEE_COUNT),0) OP_OUT_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=4 THEN OP_FEE_COUNT ELSE 0 END),0) OP_SUCCESS_COUNT,
+	                    NVL(SUM(CASE WHEN STATUS=5 THEN OP_FEE_COUNT ELSE 0 END),0) OP_FAILED_COUNT
+                    from LG_SM_20220429 where OP_SUBMIT_TIME > SYSDATE - 5.0/1440 GROUP BY OP_ID) b ON A.OP_ID = b.OP_ID WHERE a.OP_STATUS=1 ORDER BY a.OP_ID ASC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 7444
+会话 ID: 16 序列号: 33621
+
+#17  2022-04-29 16:19:53,591 Common.dll OracleHelper.Execute                    SQL=SELECT * FROM GW_ALARM_LOG WHERE RESTORE_FLAG=0  and rownum < 10 ORDER BY ALARM_ID DESC Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 4800
+会话 ID: 212 序列号: 60930
+
+#46  2022-04-29 16:23:07,992 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_CLIENT Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 16392
+会话 ID: 21 序列号: 29658
+
+#66  2022-04-29 16:23:38,585 Common.dll OracleHelper.ExecuteReader              SQL=SELECT * FROM GW_CLIENT Message=ORA-03113: 通信通道的文件结尾
+进程 ID: 15364
+会话 ID: 208 序列号: 6082
+
diff --git a/web/web/static/select2/select2-bootstrap.css b/web/web/static/select2/select2-bootstrap.css
new file mode 100644
index 0000000..69924c2
--- /dev/null
+++ b/web/web/static/select2/select2-bootstrap.css
@@ -0,0 +1,7 @@
+/*!
+ * Select2 Bootstrap Theme v0.1.0-beta.10 (https://select2.github.io/select2-bootstrap-theme)
+ * Copyright 2015-2017 Florian Kissling and contributors (https://github.com/select2/select2-bootstrap-theme/graphs/contributors)
+ * Licensed under MIT (https://github.com/select2/select2-bootstrap-theme/blob/master/LICENSE)
+ */
+
+.select2-container--bootstrap{display:block}.select2-container--bootstrap .select2-selection{background-color:#fff;border:1px solid #e5e6e7;border-radius:4px;color:#555;font-size:14px;outline:0}.select2-container--bootstrap .select2-selection.form-control{border-radius:4px}.select2-container--bootstrap .select2-search--dropdown .select2-search__field{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);background-color:#fff;border:1px solid #ccc;border-radius:4px;color:#555;font-size:14px}.select2-container--bootstrap .select2-search__field{outline:0}.select2-container--bootstrap .select2-search__field::-webkit-input-placeholder{color:#999}.select2-container--bootstrap .select2-search__field:-moz-placeholder{color:#999}.select2-container--bootstrap .select2-search__field::-moz-placeholder{color:#999;opacity:1}.select2-container--bootstrap .select2-search__field:-ms-input-placeholder{color:#999}.select2-container--bootstrap .select2-results__option{padding:6px 12px}.select2-container--bootstrap .select2-results__option[role=group]{padding:0}.select2-container--bootstrap .select2-results__option[aria-disabled=true]{color:#777;cursor:not-allowed}.select2-container--bootstrap .select2-results__option[aria-selected=true]{background-color:#f5f5f5;color:#262626}.select2-container--bootstrap .select2-results__option--highlighted[aria-selected]{background-color:#337ab7;color:#fff}.select2-container--bootstrap .select2-results__option .select2-results__option{padding:6px 12px}.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option{margin-left:-12px;padding-left:24px}.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-24px;padding-left:36px}.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-36px;padding-left:48px}.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-48px;padding-left:60px}.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-60px;padding-left:72px}.select2-container--bootstrap .select2-results__group{color:#777;display:block;padding:6px 12px;font-size:12px;line-height:1.42857143;white-space:nowrap}.select2-container--bootstrap.select2-container--focus .select2-selection,.select2-container--bootstrap.select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;border-color:#66afe9}.select2-container--bootstrap.select2-container--open .select2-selection .select2-selection__arrow b{border-color:transparent transparent #999;border-width:0 4px 4px}.select2-container--bootstrap.select2-container--open.select2-container--below .select2-selection{border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom-color:transparent}.select2-container--bootstrap.select2-container--open.select2-container--above .select2-selection{border-top-right-radius:0;border-top-left-radius:0;border-top-color:transparent}.select2-container--bootstrap .select2-selection__clear{color:#999;cursor:pointer;float:right;font-weight:700;margin-right:10px}.select2-container--bootstrap .select2-selection__clear:hover{color:#333}.select2-container--bootstrap.select2-container--disabled .select2-selection{border-color:#ccc;-webkit-box-shadow:none;box-shadow:none}.select2-container--bootstrap.select2-container--disabled .select2-search__field,.select2-container--bootstrap.select2-container--disabled .select2-selection{cursor:not-allowed}.select2-container--bootstrap.select2-container--disabled .select2-selection,.select2-container--bootstrap.select2-container--disabled .select2-selection--multiple .select2-selection__choice{background-color:#eee}.select2-container--bootstrap.select2-container--disabled .select2-selection--multiple .select2-selection__choice__remove,.select2-container--bootstrap.select2-container--disabled .select2-selection__clear{display:none}.select2-container--bootstrap .select2-dropdown{-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);border-color:#66afe9;overflow-x:hidden;margin-top:-1px}.select2-container--bootstrap .select2-dropdown--above{-webkit-box-shadow:0 -6px 12px rgba(0,0,0,.175);box-shadow:0 -6px 12px rgba(0,0,0,.175);margin-top:1px}.select2-container--bootstrap .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--bootstrap .select2-selection--single{height:31px;line-height:1.42857143;padding:4px 6px 4px}.select2-container--bootstrap .select2-selection--single .select2-selection__arrow{position:absolute;bottom:0;right:12px;top:0;width:4px}.select2-container--bootstrap .select2-selection--single .select2-selection__arrow b{border-color:#999 transparent transparent;border-style:solid;border-width:4px 4px 0;height:0;left:0;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--bootstrap .select2-selection--single .select2-selection__rendered{color:#555;padding:0}.select2-container--bootstrap .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--bootstrap .select2-selection--multiple{min-height:31px;padding:0;height:auto}.select2-container--bootstrap .select2-selection--multiple .select2-selection__rendered{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;line-height:1.42857143;list-style:none;margin:0;overflow:hidden;padding:0;width:100%;text-overflow:ellipsis;white-space:nowrap}.select2-container--bootstrap .select2-selection--multiple .select2-selection__placeholder{color:#999;float:left;margin-top:5px}.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice{color:#fff;background:#1AB394;border:1px solid #1AB394;border-radius:4px;cursor:default;float:left;margin:5px 0 0 6px;padding:0 6px}.select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field{background:0 0;padding:4px 6px 4px;height:31px;line-height:1.42857143;margin-top:0;min-width:5em}.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice__remove{color:#fff;cursor:pointer;display:inline-block;font-weight:700;margin-right:3px}.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--bootstrap .select2-selection--multiple .select2-selection__clear{margin-top:6px}.form-group-sm .select2-container--bootstrap .select2-selection--single,.input-group-sm .select2-container--bootstrap .select2-selection--single,.select2-container--bootstrap .select2-selection--single.input-sm{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 22px 5px 10px}.form-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b,.input-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b,.select2-container--bootstrap .select2-selection--single.input-sm .select2-selection__arrow b{margin-left:-5px}.form-group-sm .select2-container--bootstrap .select2-selection--multiple,.input-group-sm .select2-container--bootstrap .select2-selection--multiple,.select2-container--bootstrap .select2-selection--multiple.input-sm{min-height:30px;border-radius:3px}.form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice,.input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice,.select2-container--bootstrap .select2-selection--multiple.input-sm .select2-selection__choice{font-size:12px;line-height:1.5;margin:4px 0 0 5px;padding:0 5px}.form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field,.input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field,.select2-container--bootstrap .select2-selection--multiple.input-sm .select2-search--inline .select2-search__field{padding:0 10px;font-size:12px;height:28px;line-height:1.5}.form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear,.input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear,.select2-container--bootstrap .select2-selection--multiple.input-sm .select2-selection__clear{margin-top:5px}.form-group-lg .select2-container--bootstrap .select2-selection--single,.input-group-lg .select2-container--bootstrap .select2-selection--single,.select2-container--bootstrap .select2-selection--single.input-lg{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 31px 10px 16px}.form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow,.input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow,.select2-container--bootstrap .select2-selection--single.input-lg .select2-selection__arrow{width:5px}.form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b,.input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b,.select2-container--bootstrap .select2-selection--single.input-lg .select2-selection__arrow b{border-width:5px 5px 0;margin-left:-10px;margin-top:-2.5px}.form-group-lg .select2-container--bootstrap .select2-selection--multiple,.input-group-lg .select2-container--bootstrap .select2-selection--multiple,.select2-container--bootstrap .select2-selection--multiple.input-lg{min-height:46px;border-radius:6px}.form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice,.input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice,.select2-container--bootstrap .select2-selection--multiple.input-lg .select2-selection__choice{font-size:18px;line-height:1.3333333;border-radius:4px;margin:9px 0 0 8px;padding:0 10px}.form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field,.input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field,.select2-container--bootstrap .select2-selection--multiple.input-lg .select2-search--inline .select2-search__field{padding:0 16px;font-size:18px;height:44px;line-height:1.3333333}.form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear,.input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear,.select2-container--bootstrap .select2-selection--multiple.input-lg .select2-selection__clear{margin-top:10px}.input-group-lg .select2-container--bootstrap .select2-selection.select2-container--open .select2-selection--single .select2-selection__arrow b,.select2-container--bootstrap .select2-selection.input-lg.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #999;border-width:0 5px 5px}.select2-container--bootstrap[dir=rtl] .select2-selection--single{padding-left:24px;padding-right:12px}.select2-container--bootstrap[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:0;padding-left:0;text-align:right}.select2-container--bootstrap[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--bootstrap[dir=rtl] .select2-selection--single .select2-selection__arrow{left:12px;right:auto}.select2-container--bootstrap[dir=rtl] .select2-selection--single .select2-selection__arrow b{margin-left:0}.select2-container--bootstrap[dir=rtl] .select2-selection--multiple .select2-search--inline,.select2-container--bootstrap[dir=rtl] .select2-selection--multiple .select2-selection__choice,.select2-container--bootstrap[dir=rtl] .select2-selection--multiple .select2-selection__placeholder{float:right}.select2-container--bootstrap[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:0;margin-right:6px}.select2-container--bootstrap[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.has-warning .select2-dropdown,.has-warning .select2-selection{border-color:#8a6d3b}.has-warning .select2-container--focus .select2-selection,.has-warning .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;border-color:#66512c}.has-warning.select2-drop-active{border-color:#66512c}.has-warning.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#66512c}.has-error .select2-dropdown,.has-error .select2-selection{border-color:#a94442}.has-error .select2-container--focus .select2-selection,.has-error .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;border-color:#843534}.has-error.select2-drop-active{border-color:#843534}.has-error.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#843534}.has-success .select2-dropdown,.has-success .select2-selection{border-color:#3c763d}.has-success .select2-container--focus .select2-selection,.has-success .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;border-color:#2b542c}.has-success.select2-drop-active{border-color:#2b542c}.has-success.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#2b542c}.input-group>.select2-hidden-accessible:first-child+.select2-container--bootstrap>.selection>.select2-selection,.input-group>.select2-hidden-accessible:first-child+.select2-container--bootstrap>.selection>.select2-selection.form-control{border-bottom-right-radius:0;border-top-right-radius:0}.input-group>.select2-hidden-accessible:not(:first-child)+.select2-container--bootstrap:not(:last-child)>.selection>.select2-selection,.input-group>.select2-hidden-accessible:not(:first-child)+.select2-container--bootstrap:not(:last-child)>.selection>.select2-selection.form-control{border-radius:0}.input-group>.select2-hidden-accessible:not(:first-child):not(:last-child)+.select2-container--bootstrap:last-child>.selection>.select2-selection,.input-group>.select2-hidden-accessible:not(:first-child):not(:last-child)+.select2-container--bootstrap:last-child>.selection>.select2-selection.form-control{border-bottom-left-radius:0;border-top-left-radius:0}.input-group>.select2-container--bootstrap{display:table;table-layout:fixed;position:relative;z-index:2;width:100%;margin-bottom:0}.input-group>.select2-container--bootstrap>.selection>.select2-selection.form-control{float:none}.input-group>.select2-container--bootstrap.select2-container--focus,.input-group>.select2-container--bootstrap.select2-container--open{z-index:3}.input-group>.select2-container--bootstrap,.input-group>.select2-container--bootstrap .input-group-btn,.input-group>.select2-container--bootstrap .input-group-btn .btn{vertical-align:top}.form-control.select2-hidden-accessible{position:absolute!important;width:1px!important}@media (min-width:768px){.form-inline .select2-container--bootstrap{display:inline-block}}
diff --git a/web/web/static/select2/select2.css b/web/web/static/select2/select2.css
new file mode 100644
index 0000000..ce3afd1
--- /dev/null
+++ b/web/web/static/select2/select2.css
@@ -0,0 +1,484 @@
+.select2-container {
+  box-sizing: border-box;
+  display: inline-block;
+  margin: 0;
+  position: relative;
+  vertical-align: middle; }
+  .select2-container .select2-selection--single {
+    box-sizing: border-box;
+    cursor: pointer;
+    display: block;
+    height: 28px;
+    user-select: none;
+    -webkit-user-select: none; }
+    .select2-container .select2-selection--single .select2-selection__rendered {
+      display: block;
+      padding-left: 8px;
+      padding-right: 20px;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap; }
+    .select2-container .select2-selection--single .select2-selection__clear {
+      position: relative; }
+  .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered {
+    padding-right: 8px;
+    padding-left: 20px; }
+  .select2-container .select2-selection--multiple {
+    box-sizing: border-box;
+    cursor: pointer;
+    display: block;
+    min-height: 32px;
+    user-select: none;
+    -webkit-user-select: none; }
+    .select2-container .select2-selection--multiple .select2-selection__rendered {
+      display: inline-block;
+      overflow: hidden;
+      padding-left: 8px;
+      text-overflow: ellipsis;
+      white-space: nowrap; }
+  .select2-container .select2-search--inline {
+    float: left; }
+    .select2-container .select2-search--inline .select2-search__field {
+      box-sizing: border-box;
+      border: none;
+      font-size: 100%;
+      margin-top: 5px;
+      padding: 0; }
+      .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {
+        -webkit-appearance: none; }
+
+.select2-dropdown {
+  background-color: white;
+  border: 1px solid #aaa;
+  border-radius: 4px;
+  box-sizing: border-box;
+  display: block;
+  position: absolute;
+  left: -100000px;
+  width: 100%;
+  z-index: 1051; }
+
+.select2-results {
+  display: block; }
+
+.select2-results__options {
+  list-style: none;
+  margin: 0;
+  padding: 0; }
+
+.select2-results__option {
+  padding: 6px;
+  user-select: none;
+  -webkit-user-select: none; }
+  .select2-results__option[aria-selected] {
+    cursor: pointer; }
+
+.select2-container--open .select2-dropdown {
+  left: 0; }
+
+.select2-container--open .select2-dropdown--above {
+  border-bottom: none;
+  border-bottom-left-radius: 0;
+  border-bottom-right-radius: 0; }
+
+.select2-container--open .select2-dropdown--below {
+  border-top: none;
+  border-top-left-radius: 0;
+  border-top-right-radius: 0; }
+
+.select2-search--dropdown {
+  display: block;
+  padding: 4px; }
+  .select2-search--dropdown .select2-search__field {
+    padding: 4px;
+    width: 100%;
+    box-sizing: border-box; }
+    .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {
+      -webkit-appearance: none; }
+  .select2-search--dropdown.select2-search--hide {
+    display: none; }
+
+.select2-close-mask {
+  border: 0;
+  margin: 0;
+  padding: 0;
+  display: block;
+  position: fixed;
+  left: 0;
+  top: 0;
+  min-height: 100%;
+  min-width: 100%;
+  height: auto;
+  width: auto;
+  opacity: 0;
+  z-index: 99;
+  background-color: #fff;
+  filter: alpha(opacity=0); }
+
+.select2-hidden-accessible {
+  border: 0 !important;
+  clip: rect(0 0 0 0) !important;
+  -webkit-clip-path: inset(50%) !important;
+  clip-path: inset(50%) !important;
+  height: 1px !important;
+  overflow: hidden !important;
+  padding: 0 !important;
+  position: absolute !important;
+  width: 1px !important;
+  white-space: nowrap !important; }
+
+.select2-container--default .select2-selection--single {
+  background-color: #fff;
+  border: 1px solid #aaa;
+  border-radius: 4px; }
+  .select2-container--default .select2-selection--single .select2-selection__rendered {
+    color: #444;
+    line-height: 28px; }
+  .select2-container--default .select2-selection--single .select2-selection__clear {
+    cursor: pointer;
+    float: right;
+    font-weight: bold; }
+  .select2-container--default .select2-selection--single .select2-selection__placeholder {
+    color: #999; }
+  .select2-container--default .select2-selection--single .select2-selection__arrow {
+    height: 26px;
+    position: absolute;
+    top: 1px;
+    right: 1px;
+    width: 20px; }
+    .select2-container--default .select2-selection--single .select2-selection__arrow b {
+      border-color: #888 transparent transparent transparent;
+      border-style: solid;
+      border-width: 5px 4px 0 4px;
+      height: 0;
+      left: 50%;
+      margin-left: -4px;
+      margin-top: -2px;
+      position: absolute;
+      top: 50%;
+      width: 0; }
+
+.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear {
+  float: left; }
+
+.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow {
+  left: 1px;
+  right: auto; }
+
+.select2-container--default.select2-container--disabled .select2-selection--single {
+  background-color: #eee;
+  cursor: default; }
+  .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
+    display: none; }
+
+.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
+  border-color: transparent transparent #888 transparent;
+  border-width: 0 4px 5px 4px; }
+
+.select2-container--default .select2-selection--multiple {
+  background-color: white;
+  border: 1px solid #aaa;
+  border-radius: 4px;
+  cursor: text; }
+  .select2-container--default .select2-selection--multiple .select2-selection__rendered {
+    box-sizing: border-box;
+    list-style: none;
+    margin: 0;
+    padding: 0 5px;
+    width: 100%; }
+    .select2-container--default .select2-selection--multiple .select2-selection__rendered li {
+      list-style: none; }
+  .select2-container--default .select2-selection--multiple .select2-selection__placeholder {
+    color: #999;
+    margin-top: 5px;
+    float: left; }
+  .select2-container--default .select2-selection--multiple .select2-selection__clear {
+    cursor: pointer;
+    float: right;
+    font-weight: bold;
+    margin-top: 5px;
+    margin-right: 10px; }
+  .select2-container--default .select2-selection--multiple .select2-selection__choice {
+    background-color: #e4e4e4;
+    border: 1px solid #aaa;
+    border-radius: 4px;
+    cursor: default;
+    float: left;
+    margin-right: 5px;
+    margin-top: 5px;
+    padding: 0 5px; }
+  .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
+    color: #999;
+    cursor: pointer;
+    display: inline-block;
+    font-weight: bold;
+    margin-right: 2px; }
+    .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
+      color: #333; }
+
+.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline {
+  float: right; }
+
+.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
+  margin-left: 5px;
+  margin-right: auto; }
+
+.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
+  margin-left: 2px;
+  margin-right: auto; }
+
+.select2-container--default.select2-container--focus .select2-selection--multiple {
+  border: solid black 1px;
+  outline: 0; }
+
+.select2-container--default.select2-container--disabled .select2-selection--multiple {
+  background-color: #eee;
+  cursor: default; }
+
+.select2-container--default.select2-container--disabled .select2-selection__choice__remove {
+  display: none; }
+
+.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {
+  border-top-left-radius: 0;
+  border-top-right-radius: 0; }
+
+.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {
+  border-bottom-left-radius: 0;
+  border-bottom-right-radius: 0; }
+
+.select2-container--default .select2-search--dropdown .select2-search__field {
+  border: 1px solid #aaa; }
+
+.select2-container--default .select2-search--inline .select2-search__field {
+  background: transparent;
+  border: none;
+  outline: 0;
+  box-shadow: none;
+  -webkit-appearance: textfield; }
+
+.select2-container--default .select2-results > .select2-results__options {
+  max-height: 200px;
+  overflow-y: auto; }
+
+.select2-container--default .select2-results__option[role=group] {
+  padding: 0; }
+
+.select2-container--default .select2-results__option[aria-disabled=true] {
+  color: #999; }
+
+.select2-container--default .select2-results__option[aria-selected=true] {
+  background-color: #ddd; }
+
+.select2-container--default .select2-results__option .select2-results__option {
+  padding-left: 1em; }
+  .select2-container--default .select2-results__option .select2-results__option .select2-results__group {
+    padding-left: 0; }
+  .select2-container--default .select2-results__option .select2-results__option .select2-results__option {
+    margin-left: -1em;
+    padding-left: 2em; }
+    .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+      margin-left: -2em;
+      padding-left: 3em; }
+      .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+        margin-left: -3em;
+        padding-left: 4em; }
+        .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+          margin-left: -4em;
+          padding-left: 5em; }
+          .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+            margin-left: -5em;
+            padding-left: 6em; }
+
+.select2-container--default .select2-results__option--highlighted[aria-selected] {
+  background-color: #5897fb;
+  color: white; }
+
+.select2-container--default .select2-results__group {
+  cursor: default;
+  display: block;
+  padding: 6px; }
+
+.select2-container--classic .select2-selection--single {
+  background-color: #f7f7f7;
+  border: 1px solid #aaa;
+  border-radius: 4px;
+  outline: 0;
+  background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);
+  background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);
+  background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
+  .select2-container--classic .select2-selection--single:focus {
+    border: 1px solid #5897fb; }
+  .select2-container--classic .select2-selection--single .select2-selection__rendered {
+    color: #444;
+    line-height: 28px; }
+  .select2-container--classic .select2-selection--single .select2-selection__clear {
+    cursor: pointer;
+    float: right;
+    font-weight: bold;
+    margin-right: 10px; }
+  .select2-container--classic .select2-selection--single .select2-selection__placeholder {
+    color: #999; }
+  .select2-container--classic .select2-selection--single .select2-selection__arrow {
+    background-color: #ddd;
+    border: none;
+    border-left: 1px solid #aaa;
+    border-top-right-radius: 4px;
+    border-bottom-right-radius: 4px;
+    height: 26px;
+    position: absolute;
+    top: 1px;
+    right: 1px;
+    width: 20px;
+    background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
+    background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
+    background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);
+    background-repeat: repeat-x;
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); }
+    .select2-container--classic .select2-selection--single .select2-selection__arrow b {
+      border-color: #888 transparent transparent transparent;
+      border-style: solid;
+      border-width: 5px 4px 0 4px;
+      height: 0;
+      left: 50%;
+      margin-left: -4px;
+      margin-top: -2px;
+      position: absolute;
+      top: 50%;
+      width: 0; }
+
+.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear {
+  float: left; }
+
+.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow {
+  border: none;
+  border-right: 1px solid #aaa;
+  border-radius: 0;
+  border-top-left-radius: 4px;
+  border-bottom-left-radius: 4px;
+  left: 1px;
+  right: auto; }
+
+.select2-container--classic.select2-container--open .select2-selection--single {
+  border: 1px solid #5897fb; }
+  .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {
+    background: transparent;
+    border: none; }
+    .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {
+      border-color: transparent transparent #888 transparent;
+      border-width: 0 4px 5px 4px; }
+
+.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {
+  border-top: none;
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+  background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);
+  background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);
+  background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
+
+.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {
+  border-bottom: none;
+  border-bottom-left-radius: 0;
+  border-bottom-right-radius: 0;
+  background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);
+  background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);
+  background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); }
+
+.select2-container--classic .select2-selection--multiple {
+  background-color: white;
+  border: 1px solid #aaa;
+  border-radius: 4px;
+  cursor: text;
+  outline: 0; }
+  .select2-container--classic .select2-selection--multiple:focus {
+    border: 1px solid #5897fb; }
+  .select2-container--classic .select2-selection--multiple .select2-selection__rendered {
+    list-style: none;
+    margin: 0;
+    padding: 0 5px; }
+  .select2-container--classic .select2-selection--multiple .select2-selection__clear {
+    display: none; }
+  .select2-container--classic .select2-selection--multiple .select2-selection__choice {
+    background-color: #e4e4e4;
+    border: 1px solid #aaa;
+    border-radius: 4px;
+    cursor: default;
+    float: left;
+    margin-right: 5px;
+    margin-top: 5px;
+    padding: 0 5px; }
+  .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {
+    color: #888;
+    cursor: pointer;
+    display: inline-block;
+    font-weight: bold;
+    margin-right: 2px; }
+    .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {
+      color: #555; }
+
+.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
+  float: right;
+  margin-left: 5px;
+  margin-right: auto; }
+
+.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
+  margin-left: 2px;
+  margin-right: auto; }
+
+.select2-container--classic.select2-container--open .select2-selection--multiple {
+  border: 1px solid #5897fb; }
+
+.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {
+  border-top: none;
+  border-top-left-radius: 0;
+  border-top-right-radius: 0; }
+
+.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {
+  border-bottom: none;
+  border-bottom-left-radius: 0;
+  border-bottom-right-radius: 0; }
+
+.select2-container--classic .select2-search--dropdown .select2-search__field {
+  border: 1px solid #aaa;
+  outline: 0; }
+
+.select2-container--classic .select2-search--inline .select2-search__field {
+  outline: 0;
+  box-shadow: none; }
+
+.select2-container--classic .select2-dropdown {
+  background-color: white;
+  border: 1px solid transparent; }
+
+.select2-container--classic .select2-dropdown--above {
+  border-bottom: none; }
+
+.select2-container--classic .select2-dropdown--below {
+  border-top: none; }
+
+.select2-container--classic .select2-results > .select2-results__options {
+  max-height: 200px;
+  overflow-y: auto; }
+
+.select2-container--classic .select2-results__option[role=group] {
+  padding: 0; }
+
+.select2-container--classic .select2-results__option[aria-disabled=true] {
+  color: grey; }
+
+.select2-container--classic .select2-results__option--highlighted[aria-selected] {
+  background-color: #3875d7;
+  color: white; }
+
+.select2-container--classic .select2-results__group {
+  cursor: default;
+  display: block;
+  padding: 6px; }
+
+.select2-container--classic.select2-container--open .select2-dropdown {
+  border-color: #5897fb; }
diff --git a/web/web/static/select2/select2.js b/web/web/static/select2/select2.js
new file mode 100644
index 0000000..4a70caf
--- /dev/null
+++ b/web/web/static/select2/select2.js
@@ -0,0 +1,5885 @@
+/*!
+ * Select2 4.0.7
+ * https://select2.github.io
+ *
+ * Released under the MIT license
+ * https://github.com/select2/select2/blob/master/LICENSE.md
+ */
+;(function (factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module.
+    define(['jquery'], factory);
+  } else if (typeof module === 'object' && module.exports) {
+    // Node/CommonJS
+    module.exports = function (root, jQuery) {
+      if (jQuery === undefined) {
+        // require('jQuery') returns a factory that requires window to
+        // build a jQuery instance, we normalize how we use modules
+        // that require this pattern but the window provided is a noop
+        // if it's defined (how jquery works)
+        if (typeof window !== 'undefined') {
+          jQuery = require('jquery');
+        }
+        else {
+          jQuery = require('jquery')(root);
+        }
+      }
+      factory(jQuery);
+      return jQuery;
+    };
+  } else {
+    // Browser globals
+    factory(jQuery);
+  }
+} (function (jQuery) {
+  // This is needed so we can catch the AMD loader configuration and use it
+  // The inner file should be wrapped (by `banner.start.js`) in a function that
+  // returns the AMD loader references.
+  var S2 =(function () {
+  // Restore the Select2 AMD loader so it can be used
+  // Needed mostly in the language files, where the loader is not inserted
+  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {
+    var S2 = jQuery.fn.select2.amd;
+  }
+var S2;(function () { if (!S2 || !S2.requirejs) {
+if (!S2) { S2 = {}; } else { require = S2; }
+/**
+ * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.
+ * Released under MIT license, http://github.com/requirejs/almond/LICENSE
+ */
+//Going sloppy to avoid 'use strict' string cost, but strict practices should
+//be followed.
+/*global setTimeout: false */
+
+var requirejs, require, define;
+(function (undef) {
+    var main, req, makeMap, handlers,
+        defined = {},
+        waiting = {},
+        config = {},
+        defining = {},
+        hasOwn = Object.prototype.hasOwnProperty,
+        aps = [].slice,
+        jsSuffixRegExp = /\.js$/;
+
+    function hasProp(obj, prop) {
+        return hasOwn.call(obj, prop);
+    }
+
+    /**
+     * Given a relative module name, like ./something, normalize it to
+     * a real name that can be mapped to a path.
+     * @param {String} name the relative name
+     * @param {String} baseName a real name that the name arg is relative
+     * to.
+     * @returns {String} normalized name
+     */
+    function normalize(name, baseName) {
+        var nameParts, nameSegment, mapValue, foundMap, lastIndex,
+            foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,
+            baseParts = baseName && baseName.split("/"),
+            map = config.map,
+            starMap = (map && map['*']) || {};
+
+        //Adjust any relative paths.
+        if (name) {
+            name = name.split('/');
+            lastIndex = name.length - 1;
+
+            // If wanting node ID compatibility, strip .js from end
+            // of IDs. Have to do this here, and not in nameToUrl
+            // because node allows either .js or non .js to map
+            // to same file.
+            if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
+                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
+            }
+
+            // Starts with a '.' so need the baseName
+            if (name[0].charAt(0) === '.' && baseParts) {
+                //Convert baseName to array, and lop off the last part,
+                //so that . matches that 'directory' and not name of the baseName's
+                //module. For instance, baseName of 'one/two/three', maps to
+                //'one/two/three.js', but we want the directory, 'one/two' for
+                //this normalization.
+                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);
+                name = normalizedBaseParts.concat(name);
+            }
+
+            //start trimDots
+            for (i = 0; i < name.length; i++) {
+                part = name[i];
+                if (part === '.') {
+                    name.splice(i, 1);
+                    i -= 1;
+                } else if (part === '..') {
+                    // If at the start, or previous value is still ..,
+                    // keep them so that when converted to a path it may
+                    // still work when converted to a path, even though
+                    // as an ID it is less than ideal. In larger point
+                    // releases, may be better to just kick out an error.
+                    if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {
+                        continue;
+                    } else if (i > 0) {
+                        name.splice(i - 1, 2);
+                        i -= 2;
+                    }
+                }
+            }
+            //end trimDots
+
+            name = name.join('/');
+        }
+
+        //Apply map config if available.
+        if ((baseParts || starMap) && map) {
+            nameParts = name.split('/');
+
+            for (i = nameParts.length; i > 0; i -= 1) {
+                nameSegment = nameParts.slice(0, i).join("/");
+
+                if (baseParts) {
+                    //Find the longest baseName segment match in the config.
+                    //So, do joins on the biggest to smallest lengths of baseParts.
+                    for (j = baseParts.length; j > 0; j -= 1) {
+                        mapValue = map[baseParts.slice(0, j).join('/')];
+
+                        //baseName segment has  config, find if it has one for
+                        //this name.
+                        if (mapValue) {
+                            mapValue = mapValue[nameSegment];
+                            if (mapValue) {
+                                //Match, update name to the new value.
+                                foundMap = mapValue;
+                                foundI = i;
+                                break;
+                            }
+                        }
+                    }
+                }
+
+                if (foundMap) {
+                    break;
+                }
+
+                //Check for a star map match, but just hold on to it,
+                //if there is a shorter segment match later in a matching
+                //config, then favor over this star map.
+                if (!foundStarMap && starMap && starMap[nameSegment]) {
+                    foundStarMap = starMap[nameSegment];
+                    starI = i;
+                }
+            }
+
+            if (!foundMap && foundStarMap) {
+                foundMap = foundStarMap;
+                foundI = starI;
+            }
+
+            if (foundMap) {
+                nameParts.splice(0, foundI, foundMap);
+                name = nameParts.join('/');
+            }
+        }
+
+        return name;
+    }
+
+    function makeRequire(relName, forceSync) {
+        return function () {
+            //A version of a require function that passes a moduleName
+            //value for items that may need to
+            //look up paths relative to the moduleName
+            var args = aps.call(arguments, 0);
+
+            //If first arg is not require('string'), and there is only
+            //one arg, it is the array form without a callback. Insert
+            //a null so that the following concat is correct.
+            if (typeof args[0] !== 'string' && args.length === 1) {
+                args.push(null);
+            }
+            return req.apply(undef, args.concat([relName, forceSync]));
+        };
+    }
+
+    function makeNormalize(relName) {
+        return function (name) {
+            return normalize(name, relName);
+        };
+    }
+
+    function makeLoad(depName) {
+        return function (value) {
+            defined[depName] = value;
+        };
+    }
+
+    function callDep(name) {
+        if (hasProp(waiting, name)) {
+            var args = waiting[name];
+            delete waiting[name];
+            defining[name] = true;
+            main.apply(undef, args);
+        }
+
+        if (!hasProp(defined, name) && !hasProp(defining, name)) {
+            throw new Error('No ' + name);
+        }
+        return defined[name];
+    }
+
+    //Turns a plugin!resource to [plugin, resource]
+    //with the plugin being undefined if the name
+    //did not have a plugin prefix.
+    function splitPrefix(name) {
+        var prefix,
+            index = name ? name.indexOf('!') : -1;
+        if (index > -1) {
+            prefix = name.substring(0, index);
+            name = name.substring(index + 1, name.length);
+        }
+        return [prefix, name];
+    }
+
+    //Creates a parts array for a relName where first part is plugin ID,
+    //second part is resource ID. Assumes relName has already been normalized.
+    function makeRelParts(relName) {
+        return relName ? splitPrefix(relName) : [];
+    }
+
+    /**
+     * Makes a name map, normalizing the name, and using a plugin
+     * for normalization if necessary. Grabs a ref to plugin
+     * too, as an optimization.
+     */
+    makeMap = function (name, relParts) {
+        var plugin,
+            parts = splitPrefix(name),
+            prefix = parts[0],
+            relResourceName = relParts[1];
+
+        name = parts[1];
+
+        if (prefix) {
+            prefix = normalize(prefix, relResourceName);
+            plugin = callDep(prefix);
+        }
+
+        //Normalize according
+        if (prefix) {
+            if (plugin && plugin.normalize) {
+                name = plugin.normalize(name, makeNormalize(relResourceName));
+            } else {
+                name = normalize(name, relResourceName);
+            }
+        } else {
+            name = normalize(name, relResourceName);
+            parts = splitPrefix(name);
+            prefix = parts[0];
+            name = parts[1];
+            if (prefix) {
+                plugin = callDep(prefix);
+            }
+        }
+
+        //Using ridiculous property names for space reasons
+        return {
+            f: prefix ? prefix + '!' + name : name, //fullName
+            n: name,
+            pr: prefix,
+            p: plugin
+        };
+    };
+
+    function makeConfig(name) {
+        return function () {
+            return (config && config.config && config.config[name]) || {};
+        };
+    }
+
+    handlers = {
+        require: function (name) {
+            return makeRequire(name);
+        },
+        exports: function (name) {
+            var e = defined[name];
+            if (typeof e !== 'undefined') {
+                return e;
+            } else {
+                return (defined[name] = {});
+            }
+        },
+        module: function (name) {
+            return {
+                id: name,
+                uri: '',
+                exports: defined[name],
+                config: makeConfig(name)
+            };
+        }
+    };
+
+    main = function (name, deps, callback, relName) {
+        var cjsModule, depName, ret, map, i, relParts,
+            args = [],
+            callbackType = typeof callback,
+            usingExports;
+
+        //Use name if no relName
+        relName = relName || name;
+        relParts = makeRelParts(relName);
+
+        //Call the callback to define the module, if necessary.
+        if (callbackType === 'undefined' || callbackType === 'function') {
+            //Pull out the defined dependencies and pass the ordered
+            //values to the callback.
+            //Default to [require, exports, module] if no deps
+            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;
+            for (i = 0; i < deps.length; i += 1) {
+                map = makeMap(deps[i], relParts);
+                depName = map.f;
+
+                //Fast path CommonJS standard dependencies.
+                if (depName === "require") {
+                    args[i] = handlers.require(name);
+                } else if (depName === "exports") {
+                    //CommonJS module spec 1.1
+                    args[i] = handlers.exports(name);
+                    usingExports = true;
+                } else if (depName === "module") {
+                    //CommonJS module spec 1.1
+                    cjsModule = args[i] = handlers.module(name);
+                } else if (hasProp(defined, depName) ||
+                           hasProp(waiting, depName) ||
+                           hasProp(defining, depName)) {
+                    args[i] = callDep(depName);
+                } else if (map.p) {
+                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});
+                    args[i] = defined[depName];
+                } else {
+                    throw new Error(name + ' missing ' + depName);
+                }
+            }
+
+            ret = callback ? callback.apply(defined[name], args) : undefined;
+
+            if (name) {
+                //If setting exports via "module" is in play,
+                //favor that over return value and exports. After that,
+                //favor a non-undefined return value over exports use.
+                if (cjsModule && cjsModule.exports !== undef &&
+                        cjsModule.exports !== defined[name]) {
+                    defined[name] = cjsModule.exports;
+                } else if (ret !== undef || !usingExports) {
+                    //Use the return value from the function.
+                    defined[name] = ret;
+                }
+            }
+        } else if (name) {
+            //May just be an object definition for the module. Only
+            //worry about defining if have a module name.
+            defined[name] = callback;
+        }
+    };
+
+    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {
+        if (typeof deps === "string") {
+            if (handlers[deps]) {
+                //callback in this case is really relName
+                return handlers[deps](callback);
+            }
+            //Just return the module wanted. In this scenario, the
+            //deps arg is the module name, and second arg (if passed)
+            //is just the relName.
+            //Normalize module name, if it contains . or ..
+            return callDep(makeMap(deps, makeRelParts(callback)).f);
+        } else if (!deps.splice) {
+            //deps is a config object, not an array.
+            config = deps;
+            if (config.deps) {
+                req(config.deps, config.callback);
+            }
+            if (!callback) {
+                return;
+            }
+
+            if (callback.splice) {
+                //callback is an array, which means it is a dependency list.
+                //Adjust args if there are dependencies
+                deps = callback;
+                callback = relName;
+                relName = null;
+            } else {
+                deps = undef;
+            }
+        }
+
+        //Support require(['a'])
+        callback = callback || function () {};
+
+        //If relName is a function, it is an errback handler,
+        //so remove it.
+        if (typeof relName === 'function') {
+            relName = forceSync;
+            forceSync = alt;
+        }
+
+        //Simulate async callback;
+        if (forceSync) {
+            main(undef, deps, callback, relName);
+        } else {
+            //Using a non-zero value because of concern for what old browsers
+            //do, and latest browsers "upgrade" to 4 if lower value is used:
+            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:
+            //If want a value immediately, use require('id') instead -- something
+            //that works in almond on the global level, but not guaranteed and
+            //unlikely to work in other AMD implementations.
+            setTimeout(function () {
+                main(undef, deps, callback, relName);
+            }, 4);
+        }
+
+        return req;
+    };
+
+    /**
+     * Just drops the config on the floor, but returns req in case
+     * the config return value is used.
+     */
+    req.config = function (cfg) {
+        return req(cfg);
+    };
+
+    /**
+     * Expose module registry for debugging and tooling
+     */
+    requirejs._defined = defined;
+
+    define = function (name, deps, callback) {
+        if (typeof name !== 'string') {
+            throw new Error('See almond README: incorrect module build, no module name');
+        }
+
+        //This module may not have dependencies
+        if (!deps.splice) {
+            //deps is not an array, so probably means
+            //an object literal or factory function for
+            //the value. Adjust args.
+            callback = deps;
+            deps = [];
+        }
+
+        if (!hasProp(defined, name) && !hasProp(waiting, name)) {
+            waiting[name] = [name, deps, callback];
+        }
+    };
+
+    define.amd = {
+        jQuery: true
+    };
+}());
+
+S2.requirejs = requirejs;S2.require = require;S2.define = define;
+}
+}());
+S2.define("almond", function(){});
+
+/* global jQuery:false, $:false */
+S2.define('jquery',[],function () {
+  var _$ = jQuery || $;
+
+  if (_$ == null && console && console.error) {
+    console.error(
+      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +
+      'found. Make sure that you are including jQuery before Select2 on your ' +
+      'web page.'
+    );
+  }
+
+  return _$;
+});
+
+S2.define('select2/utils',[
+  'jquery'
+], function ($) {
+  var Utils = {};
+
+  Utils.Extend = function (ChildClass, SuperClass) {
+    var __hasProp = {}.hasOwnProperty;
+
+    function BaseConstructor () {
+      this.constructor = ChildClass;
+    }
+
+    for (var key in SuperClass) {
+      if (__hasProp.call(SuperClass, key)) {
+        ChildClass[key] = SuperClass[key];
+      }
+    }
+
+    BaseConstructor.prototype = SuperClass.prototype;
+    ChildClass.prototype = new BaseConstructor();
+    ChildClass.__super__ = SuperClass.prototype;
+
+    return ChildClass;
+  };
+
+  function getMethods (theClass) {
+    var proto = theClass.prototype;
+
+    var methods = [];
+
+    for (var methodName in proto) {
+      var m = proto[methodName];
+
+      if (typeof m !== 'function') {
+        continue;
+      }
+
+      if (methodName === 'constructor') {
+        continue;
+      }
+
+      methods.push(methodName);
+    }
+
+    return methods;
+  }
+
+  Utils.Decorate = function (SuperClass, DecoratorClass) {
+    var decoratedMethods = getMethods(DecoratorClass);
+    var superMethods = getMethods(SuperClass);
+
+    function DecoratedClass () {
+      var unshift = Array.prototype.unshift;
+
+      var argCount = DecoratorClass.prototype.constructor.length;
+
+      var calledConstructor = SuperClass.prototype.constructor;
+
+      if (argCount > 0) {
+        unshift.call(arguments, SuperClass.prototype.constructor);
+
+        calledConstructor = DecoratorClass.prototype.constructor;
+      }
+
+      calledConstructor.apply(this, arguments);
+    }
+
+    DecoratorClass.displayName = SuperClass.displayName;
+
+    function ctr () {
+      this.constructor = DecoratedClass;
+    }
+
+    DecoratedClass.prototype = new ctr();
+
+    for (var m = 0; m < superMethods.length; m++) {
+      var superMethod = superMethods[m];
+
+      DecoratedClass.prototype[superMethod] =
+        SuperClass.prototype[superMethod];
+    }
+
+    var calledMethod = function (methodName) {
+      // Stub out the original method if it's not decorating an actual method
+      var originalMethod = function () {};
+
+      if (methodName in DecoratedClass.prototype) {
+        originalMethod = DecoratedClass.prototype[methodName];
+      }
+
+      var decoratedMethod = DecoratorClass.prototype[methodName];
+
+      return function () {
+        var unshift = Array.prototype.unshift;
+
+        unshift.call(arguments, originalMethod);
+
+        return decoratedMethod.apply(this, arguments);
+      };
+    };
+
+    for (var d = 0; d < decoratedMethods.length; d++) {
+      var decoratedMethod = decoratedMethods[d];
+
+      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);
+    }
+
+    return DecoratedClass;
+  };
+
+  var Observable = function () {
+    this.listeners = {};
+  };
+
+  Observable.prototype.on = function (event, callback) {
+    this.listeners = this.listeners || {};
+
+    if (event in this.listeners) {
+      this.listeners[event].push(callback);
+    } else {
+      this.listeners[event] = [callback];
+    }
+  };
+
+  Observable.prototype.trigger = function (event) {
+    var slice = Array.prototype.slice;
+    var params = slice.call(arguments, 1);
+
+    this.listeners = this.listeners || {};
+
+    // Params should always come in as an array
+    if (params == null) {
+      params = [];
+    }
+
+    // If there are no arguments to the event, use a temporary object
+    if (params.length === 0) {
+      params.push({});
+    }
+
+    // Set the `_type` of the first object to the event
+    params[0]._type = event;
+
+    if (event in this.listeners) {
+      this.invoke(this.listeners[event], slice.call(arguments, 1));
+    }
+
+    if ('*' in this.listeners) {
+      this.invoke(this.listeners['*'], arguments);
+    }
+  };
+
+  Observable.prototype.invoke = function (listeners, params) {
+    for (var i = 0, len = listeners.length; i < len; i++) {
+      listeners[i].apply(this, params);
+    }
+  };
+
+  Utils.Observable = Observable;
+
+  Utils.generateChars = function (length) {
+    var chars = '';
+
+    for (var i = 0; i < length; i++) {
+      var randomChar = Math.floor(Math.random() * 36);
+      chars += randomChar.toString(36);
+    }
+
+    return chars;
+  };
+
+  Utils.bind = function (func, context) {
+    return function () {
+      func.apply(context, arguments);
+    };
+  };
+
+  Utils._convertData = function (data) {
+    for (var originalKey in data) {
+      var keys = originalKey.split('-');
+
+      var dataLevel = data;
+
+      if (keys.length === 1) {
+        continue;
+      }
+
+      for (var k = 0; k < keys.length; k++) {
+        var key = keys[k];
+
+        // Lowercase the first letter
+        // By default, dash-separated becomes camelCase
+        key = key.substring(0, 1).toLowerCase() + key.substring(1);
+
+        if (!(key in dataLevel)) {
+          dataLevel[key] = {};
+        }
+
+        if (k == keys.length - 1) {
+          dataLevel[key] = data[originalKey];
+        }
+
+        dataLevel = dataLevel[key];
+      }
+
+      delete data[originalKey];
+    }
+
+    return data;
+  };
+
+  Utils.hasScroll = function (index, el) {
+    // Adapted from the function created by @ShadowScripter
+    // and adapted by @BillBarry on the Stack Exchange Code Review website.
+    // The original code can be found at
+    // http://codereview.stackexchange.com/q/13338
+    // and was designed to be used with the Sizzle selector engine.
+
+    var $el = $(el);
+    var overflowX = el.style.overflowX;
+    var overflowY = el.style.overflowY;
+
+    //Check both x and y declarations
+    if (overflowX === overflowY &&
+        (overflowY === 'hidden' || overflowY === 'visible')) {
+      return false;
+    }
+
+    if (overflowX === 'scroll' || overflowY === 'scroll') {
+      return true;
+    }
+
+    return ($el.innerHeight() < el.scrollHeight ||
+      $el.innerWidth() < el.scrollWidth);
+  };
+
+  Utils.escapeMarkup = function (markup) {
+    var replaceMap = {
+      '\\': '&#92;',
+      '&': '&amp;',
+      '<': '&lt;',
+      '>': '&gt;',
+      '"': '&quot;',
+      '\'': '&#39;',
+      '/': '&#47;'
+    };
+
+    // Do not try to escape the markup if it's not a string
+    if (typeof markup !== 'string') {
+      return markup;
+    }
+
+    return String(markup).replace(/[&<>"'\/\\]/g, function (match) {
+      return replaceMap[match];
+    });
+  };
+
+  // Append an array of jQuery nodes to a given element.
+  Utils.appendMany = function ($element, $nodes) {
+    // jQuery 1.7.x does not support $.fn.append() with an array
+    // Fall back to a jQuery object collection using $.fn.add()
+    if ($.fn.jquery.substr(0, 3) === '1.7') {
+      var $jqNodes = $();
+
+      $.map($nodes, function (node) {
+        $jqNodes = $jqNodes.add(node);
+      });
+
+      $nodes = $jqNodes;
+    }
+
+    $element.append($nodes);
+  };
+
+  // Cache objects in Utils.__cache instead of $.data (see #4346)
+  Utils.__cache = {};
+
+  var id = 0;
+  Utils.GetUniqueElementId = function (element) {
+    // Get a unique element Id. If element has no id,
+    // creates a new unique number, stores it in the id
+    // attribute and returns the new id.
+    // If an id already exists, it simply returns it.
+
+    var select2Id = element.getAttribute('data-select2-id');
+    if (select2Id == null) {
+      // If element has id, use it.
+      if (element.id) {
+        select2Id = element.id;
+        element.setAttribute('data-select2-id', select2Id);
+      } else {
+        element.setAttribute('data-select2-id', ++id);
+        select2Id = id.toString();
+      }
+    }
+    return select2Id;
+  };
+
+  Utils.StoreData = function (element, name, value) {
+    // Stores an item in the cache for a specified element.
+    // name is the cache key.
+    var id = Utils.GetUniqueElementId(element);
+    if (!Utils.__cache[id]) {
+      Utils.__cache[id] = {};
+    }
+
+    Utils.__cache[id][name] = value;
+  };
+
+  Utils.GetData = function (element, name) {
+    // Retrieves a value from the cache by its key (name)
+    // name is optional. If no name specified, return
+    // all cache items for the specified element.
+    // and for a specified element.
+    var id = Utils.GetUniqueElementId(element);
+    if (name) {
+      if (Utils.__cache[id]) {
+        if (Utils.__cache[id][name] != null) {
+          return Utils.__cache[id][name];
+        }
+        return $(element).data(name); // Fallback to HTML5 data attribs.
+      }
+      return $(element).data(name); // Fallback to HTML5 data attribs.
+    } else {
+      return Utils.__cache[id];
+    }
+  };
+
+  Utils.RemoveData = function (element) {
+    // Removes all cached items for a specified element.
+    var id = Utils.GetUniqueElementId(element);
+    if (Utils.__cache[id] != null) {
+      delete Utils.__cache[id];
+    }
+  };
+
+  return Utils;
+});
+
+S2.define('select2/results',[
+  'jquery',
+  './utils'
+], function ($, Utils) {
+  function Results ($element, options, dataAdapter) {
+    this.$element = $element;
+    this.data = dataAdapter;
+    this.options = options;
+
+    Results.__super__.constructor.call(this);
+  }
+
+  Utils.Extend(Results, Utils.Observable);
+
+  Results.prototype.render = function () {
+    var $results = $(
+      '<ul class="select2-results__options" role="tree"></ul>'
+    );
+
+    if (this.options.get('multiple')) {
+      $results.attr('aria-multiselectable', 'true');
+    }
+
+    this.$results = $results;
+
+    return $results;
+  };
+
+  Results.prototype.clear = function () {
+    this.$results.empty();
+  };
+
+  Results.prototype.displayMessage = function (params) {
+    var escapeMarkup = this.options.get('escapeMarkup');
+
+    this.clear();
+    this.hideLoading();
+
+    var $message = $(
+      '<li role="treeitem" aria-live="assertive"' +
+      ' class="select2-results__option"></li>'
+    );
+
+    var message = this.options.get('translations').get(params.message);
+
+    $message.append(
+      escapeMarkup(
+        message(params.args)
+      )
+    );
+
+    $message[0].className += ' select2-results__message';
+
+    this.$results.append($message);
+  };
+
+  Results.prototype.hideMessages = function () {
+    this.$results.find('.select2-results__message').remove();
+  };
+
+  Results.prototype.append = function (data) {
+    this.hideLoading();
+
+    var $options = [];
+
+    if (data.results == null || data.results.length === 0) {
+      if (this.$results.children().length === 0) {
+        this.trigger('results:message', {
+          message: 'noResults'
+        });
+      }
+
+      return;
+    }
+
+    data.results = this.sort(data.results);
+
+    for (var d = 0; d < data.results.length; d++) {
+      var item = data.results[d];
+
+      var $option = this.option(item);
+
+      $options.push($option);
+    }
+
+    this.$results.append($options);
+  };
+
+  Results.prototype.position = function ($results, $dropdown) {
+    var $resultsContainer = $dropdown.find('.select2-results');
+    $resultsContainer.append($results);
+  };
+
+  Results.prototype.sort = function (data) {
+    var sorter = this.options.get('sorter');
+
+    return sorter(data);
+  };
+
+  Results.prototype.highlightFirstItem = function () {
+    var $options = this.$results
+      .find('.select2-results__option[aria-selected]');
+
+    var $selected = $options.filter('[aria-selected=true]');
+
+    // Check if there are any selected options
+    if ($selected.length > 0) {
+      // If there are selected options, highlight the first
+      $selected.first().trigger('mouseenter');
+    } else {
+      // If there are no selected options, highlight the first option
+      // in the dropdown
+      $options.first().trigger('mouseenter');
+    }
+
+    this.ensureHighlightVisible();
+  };
+
+  Results.prototype.setClasses = function () {
+    var self = this;
+
+    this.data.current(function (selected) {
+      var selectedIds = $.map(selected, function (s) {
+        return s.id.toString();
+      });
+
+      var $options = self.$results
+        .find('.select2-results__option[aria-selected]');
+
+      $options.each(function () {
+        var $option = $(this);
+
+        var item = Utils.GetData(this, 'data');
+
+        // id needs to be converted to a string when comparing
+        var id = '' + item.id;
+
+        if ((item.element != null && item.element.selected) ||
+            (item.element == null && $.inArray(id, selectedIds) > -1)) {
+          $option.attr('aria-selected', 'true');
+        } else {
+          $option.attr('aria-selected', 'false');
+        }
+      });
+
+    });
+  };
+
+  Results.prototype.showLoading = function (params) {
+    this.hideLoading();
+
+    var loadingMore = this.options.get('translations').get('searching');
+
+    var loading = {
+      disabled: true,
+      loading: true,
+      text: loadingMore(params)
+    };
+    var $loading = this.option(loading);
+    $loading.className += ' loading-results';
+
+    this.$results.prepend($loading);
+  };
+
+  Results.prototype.hideLoading = function () {
+    this.$results.find('.loading-results').remove();
+  };
+
+  Results.prototype.option = function (data) {
+    var option = document.createElement('li');
+    option.className = 'select2-results__option';
+
+    var attrs = {
+      'role': 'treeitem',
+      'aria-selected': 'false'
+    };
+
+    if (data.disabled) {
+      delete attrs['aria-selected'];
+      attrs['aria-disabled'] = 'true';
+    }
+
+    if (data.id == null) {
+      delete attrs['aria-selected'];
+    }
+
+    if (data._resultId != null) {
+      option.id = data._resultId;
+    }
+
+    if (data.title) {
+      option.title = data.title;
+    }
+
+    if (data.children) {
+      attrs.role = 'group';
+      attrs['aria-label'] = data.text;
+      delete attrs['aria-selected'];
+    }
+
+    for (var attr in attrs) {
+      var val = attrs[attr];
+
+      option.setAttribute(attr, val);
+    }
+
+    if (data.children) {
+      var $option = $(option);
+
+      var label = document.createElement('strong');
+      label.className = 'select2-results__group';
+
+      var $label = $(label);
+      this.template(data, label);
+
+      var $children = [];
+
+      for (var c = 0; c < data.children.length; c++) {
+        var child = data.children[c];
+
+        var $child = this.option(child);
+
+        $children.push($child);
+      }
+
+      var $childrenContainer = $('<ul></ul>', {
+        'class': 'select2-results__options select2-results__options--nested'
+      });
+
+      $childrenContainer.append($children);
+
+      $option.append(label);
+      $option.append($childrenContainer);
+    } else {
+      this.template(data, option);
+    }
+
+    Utils.StoreData(option, 'data', data);
+
+    return option;
+  };
+
+  Results.prototype.bind = function (container, $container) {
+    var self = this;
+
+    var id = container.id + '-results';
+
+    this.$results.attr('id', id);
+
+    container.on('results:all', function (params) {
+      self.clear();
+      self.append(params.data);
+
+      if (container.isOpen()) {
+        self.setClasses();
+        self.highlightFirstItem();
+      }
+    });
+
+    container.on('results:append', function (params) {
+      self.append(params.data);
+
+      if (container.isOpen()) {
+        self.setClasses();
+      }
+    });
+
+    container.on('query', function (params) {
+      self.hideMessages();
+      self.showLoading(params);
+    });
+
+    container.on('select', function () {
+      if (!container.isOpen()) {
+        return;
+      }
+
+      self.setClasses();
+
+      if (self.options.get('scrollAfterSelect')) {
+        self.highlightFirstItem();
+      }
+    });
+
+    container.on('unselect', function () {
+      if (!container.isOpen()) {
+        return;
+      }
+
+      self.setClasses();
+
+      if (self.options.get('scrollAfterSelect')) {
+        self.highlightFirstItem();
+      }
+    });
+
+    container.on('open', function () {
+      // When the dropdown is open, aria-expended="true"
+      self.$results.attr('aria-expanded', 'true');
+      self.$results.attr('aria-hidden', 'false');
+
+      self.setClasses();
+      self.ensureHighlightVisible();
+    });
+
+    container.on('close', function () {
+      // When the dropdown is closed, aria-expended="false"
+      self.$results.attr('aria-expanded', 'false');
+      self.$results.attr('aria-hidden', 'true');
+      self.$results.removeAttr('aria-activedescendant');
+    });
+
+    container.on('results:toggle', function () {
+      var $highlighted = self.getHighlightedResults();
+
+      if ($highlighted.length === 0) {
+        return;
+      }
+
+      $highlighted.trigger('mouseup');
+    });
+
+    container.on('results:select', function () {
+      var $highlighted = self.getHighlightedResults();
+
+      if ($highlighted.length === 0) {
+        return;
+      }
+
+      var data = Utils.GetData($highlighted[0], 'data');
+
+      if ($highlighted.attr('aria-selected') == 'true') {
+        self.trigger('close', {});
+      } else {
+        self.trigger('select', {
+          data: data
+        });
+      }
+    });
+
+    container.on('results:previous', function () {
+      var $highlighted = self.getHighlightedResults();
+
+      var $options = self.$results.find('[aria-selected]');
+
+      var currentIndex = $options.index($highlighted);
+
+      // If we are already at the top, don't move further
+      // If no options, currentIndex will be -1
+      if (currentIndex <= 0) {
+        return;
+      }
+
+      var nextIndex = currentIndex - 1;
+
+      // If none are highlighted, highlight the first
+      if ($highlighted.length === 0) {
+        nextIndex = 0;
+      }
+
+      var $next = $options.eq(nextIndex);
+
+      $next.trigger('mouseenter');
+
+      var currentOffset = self.$results.offset().top;
+      var nextTop = $next.offset().top;
+      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);
+
+      if (nextIndex === 0) {
+        self.$results.scrollTop(0);
+      } else if (nextTop - currentOffset < 0) {
+        self.$results.scrollTop(nextOffset);
+      }
+    });
+
+    container.on('results:next', function () {
+      var $highlighted = self.getHighlightedResults();
+
+      var $options = self.$results.find('[aria-selected]');
+
+      var currentIndex = $options.index($highlighted);
+
+      var nextIndex = currentIndex + 1;
+
+      // If we are at the last option, stay there
+      if (nextIndex >= $options.length) {
+        return;
+      }
+
+      var $next = $options.eq(nextIndex);
+
+      $next.trigger('mouseenter');
+
+      var currentOffset = self.$results.offset().top +
+        self.$results.outerHeight(false);
+      var nextBottom = $next.offset().top + $next.outerHeight(false);
+      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;
+
+      if (nextIndex === 0) {
+        self.$results.scrollTop(0);
+      } else if (nextBottom > currentOffset) {
+        self.$results.scrollTop(nextOffset);
+      }
+    });
+
+    container.on('results:focus', function (params) {
+      params.element.addClass('select2-results__option--highlighted');
+    });
+
+    container.on('results:message', function (params) {
+      self.displayMessage(params);
+    });
+
+    if ($.fn.mousewheel) {
+      this.$results.on('mousewheel', function (e) {
+        var top = self.$results.scrollTop();
+
+        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;
+
+        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;
+        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();
+
+        if (isAtTop) {
+          self.$results.scrollTop(0);
+
+          e.preventDefault();
+          e.stopPropagation();
+        } else if (isAtBottom) {
+          self.$results.scrollTop(
+            self.$results.get(0).scrollHeight - self.$results.height()
+          );
+
+          e.preventDefault();
+          e.stopPropagation();
+        }
+      });
+    }
+
+    this.$results.on('mouseup', '.select2-results__option[aria-selected]',
+      function (evt) {
+      var $this = $(this);
+
+      var data = Utils.GetData(this, 'data');
+
+      if ($this.attr('aria-selected') === 'true') {
+        if (self.options.get('multiple')) {
+          self.trigger('unselect', {
+            originalEvent: evt,
+            data: data
+          });
+        } else {
+          self.trigger('close', {});
+        }
+
+        return;
+      }
+
+      self.trigger('select', {
+        originalEvent: evt,
+        data: data
+      });
+    });
+
+    this.$results.on('mouseenter', '.select2-results__option[aria-selected]',
+      function (evt) {
+      var data = Utils.GetData(this, 'data');
+
+      self.getHighlightedResults()
+          .removeClass('select2-results__option--highlighted');
+
+      self.trigger('results:focus', {
+        data: data,
+        element: $(this)
+      });
+    });
+  };
+
+  Results.prototype.getHighlightedResults = function () {
+    var $highlighted = this.$results
+    .find('.select2-results__option--highlighted');
+
+    return $highlighted;
+  };
+
+  Results.prototype.destroy = function () {
+    this.$results.remove();
+  };
+
+  Results.prototype.ensureHighlightVisible = function () {
+    var $highlighted = this.getHighlightedResults();
+
+    if ($highlighted.length === 0) {
+      return;
+    }
+
+    var $options = this.$results.find('[aria-selected]');
+
+    var currentIndex = $options.index($highlighted);
+
+    var currentOffset = this.$results.offset().top;
+    var nextTop = $highlighted.offset().top;
+    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
+
+    var offsetDelta = nextTop - currentOffset;
+    nextOffset -= $highlighted.outerHeight(false) * 2;
+
+    if (currentIndex <= 2) {
+      this.$results.scrollTop(0);
+    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
+      this.$results.scrollTop(nextOffset);
+    }
+  };
+
+  Results.prototype.template = function (result, container) {
+    var template = this.options.get('templateResult');
+    var escapeMarkup = this.options.get('escapeMarkup');
+
+    var content = template(result, container);
+
+    if (content == null) {
+      container.style.display = 'none';
+    } else if (typeof content === 'string') {
+      container.innerHTML = escapeMarkup(content);
+    } else {
+      $(container).append(content);
+    }
+  };
+
+  return Results;
+});
+
+S2.define('select2/keys',[
+
+], function () {
+  var KEYS = {
+    BACKSPACE: 8,
+    TAB: 9,
+    ENTER: 13,
+    SHIFT: 16,
+    CTRL: 17,
+    ALT: 18,
+    ESC: 27,
+    SPACE: 32,
+    PAGE_UP: 33,
+    PAGE_DOWN: 34,
+    END: 35,
+    HOME: 36,
+    LEFT: 37,
+    UP: 38,
+    RIGHT: 39,
+    DOWN: 40,
+    DELETE: 46
+  };
+
+  return KEYS;
+});
+
+S2.define('select2/selection/base',[
+  'jquery',
+  '../utils',
+  '../keys'
+], function ($, Utils, KEYS) {
+  function BaseSelection ($element, options) {
+    this.$element = $element;
+    this.options = options;
+
+    BaseSelection.__super__.constructor.call(this);
+  }
+
+  Utils.Extend(BaseSelection, Utils.Observable);
+
+  BaseSelection.prototype.render = function () {
+    var $selection = $(
+      '<span class="select2-selection" role="combobox" ' +
+      ' aria-haspopup="true" aria-expanded="false">' +
+      '</span>'
+    );
+
+    this._tabindex = 0;
+
+    if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {
+      this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');
+    } else if (this.$element.attr('tabindex') != null) {
+      this._tabindex = this.$element.attr('tabindex');
+    }
+
+    $selection.attr('title', this.$element.attr('title'));
+    $selection.attr('tabindex', this._tabindex);
+
+    this.$selection = $selection;
+
+    return $selection;
+  };
+
+  BaseSelection.prototype.bind = function (container, $container) {
+    var self = this;
+
+    var id = container.id + '-container';
+    var resultsId = container.id + '-results';
+
+    this.container = container;
+
+    this.$selection.on('focus', function (evt) {
+      self.trigger('focus', evt);
+    });
+
+    this.$selection.on('blur', function (evt) {
+      self._handleBlur(evt);
+    });
+
+    this.$selection.on('keydown', function (evt) {
+      self.trigger('keypress', evt);
+
+      if (evt.which === KEYS.SPACE) {
+        evt.preventDefault();
+      }
+    });
+
+    container.on('results:focus', function (params) {
+      self.$selection.attr('aria-activedescendant', params.data._resultId);
+    });
+
+    container.on('selection:update', function (params) {
+      self.update(params.data);
+    });
+
+    container.on('open', function () {
+      // When the dropdown is open, aria-expanded="true"
+      self.$selection.attr('aria-expanded', 'true');
+      self.$selection.attr('aria-owns', resultsId);
+
+      self._attachCloseHandler(container);
+    });
+
+    container.on('close', function () {
+      // When the dropdown is closed, aria-expanded="false"
+      self.$selection.attr('aria-expanded', 'false');
+      self.$selection.removeAttr('aria-activedescendant');
+      self.$selection.removeAttr('aria-owns');
+
+      window.setTimeout(function () {
+        self.$selection.focus();
+      }, 0);
+    
+      self._detachCloseHandler(container);
+    });
+
+    container.on('enable', function () {
+      self.$selection.attr('tabindex', self._tabindex);
+    });
+
+    container.on('disable', function () {
+      self.$selection.attr('tabindex', '-1');
+    });
+  };
+
+  BaseSelection.prototype._handleBlur = function (evt) {
+    var self = this;
+
+    // This needs to be delayed as the active element is the body when the tab
+    // key is pressed, possibly along with others.
+    window.setTimeout(function () {
+      // Don't trigger `blur` if the focus is still in the selection
+      if (
+        (document.activeElement == self.$selection[0]) ||
+        ($.contains(self.$selection[0], document.activeElement))
+      ) {
+        return;
+      }
+
+      self.trigger('blur', evt);
+    }, 1);
+  };
+
+  BaseSelection.prototype._attachCloseHandler = function (container) {
+    var self = this;
+
+    $(document.body).on('mousedown.select2.' + container.id, function (e) {
+      var $target = $(e.target);
+
+      var $select = $target.closest('.select2');
+
+      var $all = $('.select2.select2-container--open');
+
+      $all.each(function () {
+        var $this = $(this);
+
+        if (this == $select[0]) {
+          return;
+        }
+
+        var $element = Utils.GetData(this, 'element');
+
+        $element.select2('close');
+      });
+    });
+  };
+
+  BaseSelection.prototype._detachCloseHandler = function (container) {
+    $(document.body).off('mousedown.select2.' + container.id);
+  };
+
+  BaseSelection.prototype.position = function ($selection, $container) {
+    var $selectionContainer = $container.find('.selection');
+    $selectionContainer.append($selection);
+  };
+
+  BaseSelection.prototype.destroy = function () {
+    this._detachCloseHandler(this.container);
+  };
+
+  BaseSelection.prototype.update = function (data) {
+    throw new Error('The `update` method must be defined in child classes.');
+  };
+
+  return BaseSelection;
+});
+
+S2.define('select2/selection/single',[
+  'jquery',
+  './base',
+  '../utils',
+  '../keys'
+], function ($, BaseSelection, Utils, KEYS) {
+  function SingleSelection () {
+    SingleSelection.__super__.constructor.apply(this, arguments);
+  }
+
+  Utils.Extend(SingleSelection, BaseSelection);
+
+  SingleSelection.prototype.render = function () {
+    var $selection = SingleSelection.__super__.render.call(this);
+
+    $selection.addClass('select2-selection--single');
+
+    $selection.html(
+      '<span class="select2-selection__rendered"></span>' +
+      '<span class="select2-selection__arrow" role="presentation">' +
+        '<b role="presentation"></b>' +
+      '</span>'
+    );
+
+    return $selection;
+  };
+
+  SingleSelection.prototype.bind = function (container, $container) {
+    var self = this;
+
+    SingleSelection.__super__.bind.apply(this, arguments);
+
+    var id = container.id + '-container';
+
+    this.$selection.find('.select2-selection__rendered')
+      .attr('id', id)
+      .attr('role', 'textbox')
+      .attr('aria-readonly', 'true');
+    this.$selection.attr('aria-labelledby', id);
+
+    this.$selection.on('mousedown', function (evt) {
+      // Only respond to left clicks
+      if (evt.which !== 1) {
+        return;
+      }
+
+      self.trigger('toggle', {
+        originalEvent: evt
+      });
+    });
+
+    this.$selection.on('focus', function (evt) {
+      // User focuses on the container
+    });
+
+    this.$selection.on('blur', function (evt) {
+      // User exits the container
+    });
+
+    container.on('focus', function (evt) {
+      if (!container.isOpen()) {
+        self.$selection.focus();
+      }
+    });
+  };
+
+  SingleSelection.prototype.clear = function () {
+    var $rendered = this.$selection.find('.select2-selection__rendered');
+    $rendered.empty();
+    $rendered.removeAttr('title'); // clear tooltip on empty
+  };
+
+  SingleSelection.prototype.display = function (data, container) {
+    var template = this.options.get('templateSelection');
+    var escapeMarkup = this.options.get('escapeMarkup');
+
+    return escapeMarkup(template(data, container));
+  };
+
+  SingleSelection.prototype.selectionContainer = function () {
+    return $('<span></span>');
+  };
+
+  SingleSelection.prototype.update = function (data) {
+    if (data.length === 0) {
+      this.clear();
+      return;
+    }
+
+    var selection = data[0];
+
+    var $rendered = this.$selection.find('.select2-selection__rendered');
+    var formatted = this.display(selection, $rendered);
+
+    $rendered.empty().append(formatted);
+    $rendered.attr('title', selection.title || selection.text);
+  };
+
+  return SingleSelection;
+});
+
+S2.define('select2/selection/multiple',[
+  'jquery',
+  './base',
+  '../utils'
+], function ($, BaseSelection, Utils) {
+  function MultipleSelection ($element, options) {
+    MultipleSelection.__super__.constructor.apply(this, arguments);
+  }
+
+  Utils.Extend(MultipleSelection, BaseSelection);
+
+  MultipleSelection.prototype.render = function () {
+    var $selection = MultipleSelection.__super__.render.call(this);
+
+    $selection.addClass('select2-selection--multiple');
+
+    $selection.html(
+      '<ul class="select2-selection__rendered"></ul>'
+    );
+
+    return $selection;
+  };
+
+  MultipleSelection.prototype.bind = function (container, $container) {
+    var self = this;
+
+    MultipleSelection.__super__.bind.apply(this, arguments);
+
+    this.$selection.on('click', function (evt) {
+      self.trigger('toggle', {
+        originalEvent: evt
+      });
+    });
+
+    this.$selection.on(
+      'click',
+      '.select2-selection__choice__remove',
+      function (evt) {
+        // Ignore the event if it is disabled
+        if (self.options.get('disabled')) {
+          return;
+        }
+
+        var $remove = $(this);
+        var $selection = $remove.parent();
+
+        var data = Utils.GetData($selection[0], 'data');
+
+        self.trigger('unselect', {
+          originalEvent: evt,
+          data: data
+        });
+      }
+    );
+  };
+
+  MultipleSelection.prototype.clear = function () {
+    var $rendered = this.$selection.find('.select2-selection__rendered');
+    $rendered.empty();
+    $rendered.removeAttr('title');
+  };
+
+  MultipleSelection.prototype.display = function (data, container) {
+    var template = this.options.get('templateSelection');
+    var escapeMarkup = this.options.get('escapeMarkup');
+
+    return escapeMarkup(template(data, container));
+  };
+
+  MultipleSelection.prototype.selectionContainer = function () {
+    var $container = $(
+      '<li class="select2-selection__choice">' +
+        '<span class="select2-selection__choice__remove" role="presentation">' +
+          '&times;' +
+        '</span>' +
+      '</li>'
+    );
+
+    return $container;
+  };
+
+  MultipleSelection.prototype.update = function (data) {
+    this.clear();
+
+    if (data.length === 0) {
+      return;
+    }
+
+    var $selections = [];
+
+    for (var d = 0; d < data.length; d++) {
+      var selection = data[d];
+
+      var $selection = this.selectionContainer();
+      var formatted = this.display(selection, $selection);
+
+      $selection.append(formatted);
+      $selection.attr('title', selection.title || selection.text);
+
+      Utils.StoreData($selection[0], 'data', selection);
+
+      $selections.push($selection);
+    }
+
+    var $rendered = this.$selection.find('.select2-selection__rendered');
+
+    Utils.appendMany($rendered, $selections);
+  };
+
+  return MultipleSelection;
+});
+
+S2.define('select2/selection/placeholder',[
+  '../utils'
+], function (Utils) {
+  function Placeholder (decorated, $element, options) {
+    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));
+
+    decorated.call(this, $element, options);
+  }
+
+  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {
+    if (typeof placeholder === 'string') {
+      placeholder = {
+        id: '',
+        text: placeholder
+      };
+    }
+
+    return placeholder;
+  };
+
+  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {
+    var $placeholder = this.selectionContainer();
+
+    $placeholder.html(this.display(placeholder));
+    $placeholder.addClass('select2-selection__placeholder')
+                .removeClass('select2-selection__choice');
+
+    return $placeholder;
+  };
+
+  Placeholder.prototype.update = function (decorated, data) {
+    var singlePlaceholder = (
+      data.length == 1 && data[0].id != this.placeholder.id
+    );
+    var multipleSelections = data.length > 1;
+
+    if (multipleSelections || singlePlaceholder) {
+      return decorated.call(this, data);
+    }
+
+    this.clear();
+
+    var $placeholder = this.createPlaceholder(this.placeholder);
+
+    this.$selection.find('.select2-selection__rendered').append($placeholder);
+  };
+
+  return Placeholder;
+});
+
+S2.define('select2/selection/allowClear',[
+  'jquery',
+  '../keys',
+  '../utils'
+], function ($, KEYS, Utils) {
+  function AllowClear () { }
+
+  AllowClear.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+
+    decorated.call(this, container, $container);
+
+    if (this.placeholder == null) {
+      if (this.options.get('debug') && window.console && console.error) {
+        console.error(
+          'Select2: The `allowClear` option should be used in combination ' +
+          'with the `placeholder` option.'
+        );
+      }
+    }
+
+    this.$selection.on('mousedown', '.select2-selection__clear',
+      function (evt) {
+        self._handleClear(evt);
+    });
+
+    container.on('keypress', function (evt) {
+      self._handleKeyboardClear(evt, container);
+    });
+  };
+
+  AllowClear.prototype._handleClear = function (_, evt) {
+    // Ignore the event if it is disabled
+    if (this.options.get('disabled')) {
+      return;
+    }
+
+    var $clear = this.$selection.find('.select2-selection__clear');
+
+    // Ignore the event if nothing has been selected
+    if ($clear.length === 0) {
+      return;
+    }
+
+    evt.stopPropagation();
+
+    var data = Utils.GetData($clear[0], 'data');
+
+    var previousVal = this.$element.val();
+    this.$element.val(this.placeholder.id);
+
+    var unselectData = {
+      data: data
+    };
+    this.trigger('clear', unselectData);
+    if (unselectData.prevented) {
+      this.$element.val(previousVal);
+      return;
+    }
+
+    for (var d = 0; d < data.length; d++) {
+      unselectData = {
+        data: data[d]
+      };
+
+      // Trigger the `unselect` event, so people can prevent it from being
+      // cleared.
+      this.trigger('unselect', unselectData);
+
+      // If the event was prevented, don't clear it out.
+      if (unselectData.prevented) {
+        this.$element.val(previousVal);
+        return;
+      }
+    }
+
+    this.$element.trigger('change');
+
+    this.trigger('toggle', {});
+  };
+
+  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {
+    if (container.isOpen()) {
+      return;
+    }
+
+    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {
+      this._handleClear(evt);
+    }
+  };
+
+  AllowClear.prototype.update = function (decorated, data) {
+    decorated.call(this, data);
+
+    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||
+        data.length === 0) {
+      return;
+    }
+
+    var removeAll = this.options.get('translations').get('removeAllItems');   
+
+    var $remove = $(
+      '<span class="select2-selection__clear" title="' + removeAll() +'">' +
+        '&times;' +
+      '</span>'
+    );
+    Utils.StoreData($remove[0], 'data', data);
+
+    this.$selection.find('.select2-selection__rendered').prepend($remove);
+  };
+
+  return AllowClear;
+});
+
+S2.define('select2/selection/search',[
+  'jquery',
+  '../utils',
+  '../keys'
+], function ($, Utils, KEYS) {
+  function Search (decorated, $element, options) {
+    decorated.call(this, $element, options);
+  }
+
+  Search.prototype.render = function (decorated) {
+    var $search = $(
+      '<li class="select2-search select2-search--inline">' +
+        '<input class="select2-search__field" type="search" tabindex="-1"' +
+        ' autocomplete="off" autocorrect="off" autocapitalize="none"' +
+        ' spellcheck="false" role="textbox" aria-autocomplete="list" />' +
+      '</li>'
+    );
+
+    this.$searchContainer = $search;
+    this.$search = $search.find('input');
+
+    var $rendered = decorated.call(this);
+
+    this._transferTabIndex();
+
+    return $rendered;
+  };
+
+  Search.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+
+    decorated.call(this, container, $container);
+
+    container.on('open', function () {
+      self.$search.trigger('focus');
+    });
+
+    container.on('close', function () {
+      self.$search.val('');
+      self.$search.removeAttr('aria-activedescendant');
+      self.$search.trigger('focus');
+    });
+
+    container.on('enable', function () {
+      self.$search.prop('disabled', false);
+
+      self._transferTabIndex();
+    });
+
+    container.on('disable', function () {
+      self.$search.prop('disabled', true);
+    });
+
+    container.on('focus', function (evt) {
+      self.$search.trigger('focus');
+    });
+
+    container.on('results:focus', function (params) {
+      self.$search.attr('aria-activedescendant', params.id);
+    });
+
+    this.$selection.on('focusin', '.select2-search--inline', function (evt) {
+      self.trigger('focus', evt);
+    });
+
+    this.$selection.on('focusout', '.select2-search--inline', function (evt) {
+      self._handleBlur(evt);
+    });
+
+    this.$selection.on('keydown', '.select2-search--inline', function (evt) {
+      evt.stopPropagation();
+
+      self.trigger('keypress', evt);
+
+      self._keyUpPrevented = evt.isDefaultPrevented();
+
+      var key = evt.which;
+
+      if (key === KEYS.BACKSPACE && self.$search.val() === '') {
+        var $previousChoice = self.$searchContainer
+          .prev('.select2-selection__choice');
+
+        if ($previousChoice.length > 0) {
+          var item = Utils.GetData($previousChoice[0], 'data');
+
+          self.searchRemoveChoice(item);
+
+          evt.preventDefault();
+        }
+      }
+    });
+
+    // Try to detect the IE version should the `documentMode` property that
+    // is stored on the document. This is only implemented in IE and is
+    // slightly cleaner than doing a user agent check.
+    // This property is not available in Edge, but Edge also doesn't have
+    // this bug.
+    var msie = document.documentMode;
+    var disableInputEvents = msie && msie <= 11;
+
+    // Workaround for browsers which do not support the `input` event
+    // This will prevent double-triggering of events for browsers which support
+    // both the `keyup` and `input` events.
+    this.$selection.on(
+      'input.searchcheck',
+      '.select2-search--inline',
+      function (evt) {
+        // IE will trigger the `input` event when a placeholder is used on a
+        // search box. To get around this issue, we are forced to ignore all
+        // `input` events in IE and keep using `keyup`.
+        if (disableInputEvents) {
+          self.$selection.off('input.search input.searchcheck');
+          return;
+        }
+
+        // Unbind the duplicated `keyup` event
+        self.$selection.off('keyup.search');
+      }
+    );
+
+    this.$selection.on(
+      'keyup.search input.search',
+      '.select2-search--inline',
+      function (evt) {
+        // IE will trigger the `input` event when a placeholder is used on a
+        // search box. To get around this issue, we are forced to ignore all
+        // `input` events in IE and keep using `keyup`.
+        if (disableInputEvents && evt.type === 'input') {
+          self.$selection.off('input.search input.searchcheck');
+          return;
+        }
+
+        var key = evt.which;
+
+        // We can freely ignore events from modifier keys
+        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {
+          return;
+        }
+
+        // Tabbing will be handled during the `keydown` phase
+        if (key == KEYS.TAB) {
+          return;
+        }
+
+        self.handleSearch(evt);
+      }
+    );
+  };
+
+  /**
+   * This method will transfer the tabindex attribute from the rendered
+   * selection to the search box. This allows for the search box to be used as
+   * the primary focus instead of the selection container.
+   *
+   * @private
+   */
+  Search.prototype._transferTabIndex = function (decorated) {
+    this.$search.attr('tabindex', this.$selection.attr('tabindex'));
+    this.$selection.attr('tabindex', '-1');
+  };
+
+  Search.prototype.createPlaceholder = function (decorated, placeholder) {
+    this.$search.attr('placeholder', placeholder.text);
+  };
+
+  Search.prototype.update = function (decorated, data) {
+    var searchHadFocus = this.$search[0] == document.activeElement;
+
+    this.$search.attr('placeholder', '');
+
+    decorated.call(this, data);
+
+    this.$selection.find('.select2-selection__rendered')
+                   .append(this.$searchContainer);
+
+    this.resizeSearch();
+    if (searchHadFocus) {
+      var isTagInput = this.$element.find('[data-select2-tag]').length;
+      if (isTagInput) {
+        // fix IE11 bug where tag input lost focus
+        this.$element.focus();
+      } else {
+        this.$search.focus();
+      }
+    }
+  };
+
+  Search.prototype.handleSearch = function () {
+    this.resizeSearch();
+
+    if (!this._keyUpPrevented) {
+      var input = this.$search.val();
+
+      this.trigger('query', {
+        term: input
+      });
+    }
+
+    this._keyUpPrevented = false;
+  };
+
+  Search.prototype.searchRemoveChoice = function (decorated, item) {
+    this.trigger('unselect', {
+      data: item
+    });
+
+    this.$search.val(item.text);
+    this.handleSearch();
+  };
+
+  Search.prototype.resizeSearch = function () {
+    this.$search.css('width', '25px');
+
+    var width = '';
+
+    if (this.$search.attr('placeholder') !== '') {
+      width = this.$selection.find('.select2-selection__rendered').innerWidth();
+    } else {
+      var minimumWidth = this.$search.val().length + 1;
+
+      width = (minimumWidth * 0.75) + 'em';
+    }
+
+    this.$search.css('width', width);
+  };
+
+  return Search;
+});
+
+S2.define('select2/selection/eventRelay',[
+  'jquery'
+], function ($) {
+  function EventRelay () { }
+
+  EventRelay.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+    var relayEvents = [
+      'open', 'opening',
+      'close', 'closing',
+      'select', 'selecting',
+      'unselect', 'unselecting',
+      'clear', 'clearing'
+    ];
+
+    var preventableEvents = [
+      'opening', 'closing', 'selecting', 'unselecting', 'clearing'
+    ];
+
+    decorated.call(this, container, $container);
+
+    container.on('*', function (name, params) {
+      // Ignore events that should not be relayed
+      if ($.inArray(name, relayEvents) === -1) {
+        return;
+      }
+
+      // The parameters should always be an object
+      params = params || {};
+
+      // Generate the jQuery event for the Select2 event
+      var evt = $.Event('select2:' + name, {
+        params: params
+      });
+
+      self.$element.trigger(evt);
+
+      // Only handle preventable events if it was one
+      if ($.inArray(name, preventableEvents) === -1) {
+        return;
+      }
+
+      params.prevented = evt.isDefaultPrevented();
+    });
+  };
+
+  return EventRelay;
+});
+
+S2.define('select2/translation',[
+  'jquery',
+  'require'
+], function ($, require) {
+  function Translation (dict) {
+    this.dict = dict || {};
+  }
+
+  Translation.prototype.all = function () {
+    return this.dict;
+  };
+
+  Translation.prototype.get = function (key) {
+    return this.dict[key];
+  };
+
+  Translation.prototype.extend = function (translation) {
+    this.dict = $.extend({}, translation.all(), this.dict);
+  };
+
+  // Static functions
+
+  Translation._cache = {};
+
+  Translation.loadPath = function (path) {
+    if (!(path in Translation._cache)) {
+      var translations = require(path);
+
+      Translation._cache[path] = translations;
+    }
+
+    return new Translation(Translation._cache[path]);
+  };
+
+  return Translation;
+});
+
+S2.define('select2/diacritics',[
+
+], function () {
+  var diacritics = {
+    '\u24B6': 'A',
+    '\uFF21': 'A',
+    '\u00C0': 'A',
+    '\u00C1': 'A',
+    '\u00C2': 'A',
+    '\u1EA6': 'A',
+    '\u1EA4': 'A',
+    '\u1EAA': 'A',
+    '\u1EA8': 'A',
+    '\u00C3': 'A',
+    '\u0100': 'A',
+    '\u0102': 'A',
+    '\u1EB0': 'A',
+    '\u1EAE': 'A',
+    '\u1EB4': 'A',
+    '\u1EB2': 'A',
+    '\u0226': 'A',
+    '\u01E0': 'A',
+    '\u00C4': 'A',
+    '\u01DE': 'A',
+    '\u1EA2': 'A',
+    '\u00C5': 'A',
+    '\u01FA': 'A',
+    '\u01CD': 'A',
+    '\u0200': 'A',
+    '\u0202': 'A',
+    '\u1EA0': 'A',
+    '\u1EAC': 'A',
+    '\u1EB6': 'A',
+    '\u1E00': 'A',
+    '\u0104': 'A',
+    '\u023A': 'A',
+    '\u2C6F': 'A',
+    '\uA732': 'AA',
+    '\u00C6': 'AE',
+    '\u01FC': 'AE',
+    '\u01E2': 'AE',
+    '\uA734': 'AO',
+    '\uA736': 'AU',
+    '\uA738': 'AV',
+    '\uA73A': 'AV',
+    '\uA73C': 'AY',
+    '\u24B7': 'B',
+    '\uFF22': 'B',
+    '\u1E02': 'B',
+    '\u1E04': 'B',
+    '\u1E06': 'B',
+    '\u0243': 'B',
+    '\u0182': 'B',
+    '\u0181': 'B',
+    '\u24B8': 'C',
+    '\uFF23': 'C',
+    '\u0106': 'C',
+    '\u0108': 'C',
+    '\u010A': 'C',
+    '\u010C': 'C',
+    '\u00C7': 'C',
+    '\u1E08': 'C',
+    '\u0187': 'C',
+    '\u023B': 'C',
+    '\uA73E': 'C',
+    '\u24B9': 'D',
+    '\uFF24': 'D',
+    '\u1E0A': 'D',
+    '\u010E': 'D',
+    '\u1E0C': 'D',
+    '\u1E10': 'D',
+    '\u1E12': 'D',
+    '\u1E0E': 'D',
+    '\u0110': 'D',
+    '\u018B': 'D',
+    '\u018A': 'D',
+    '\u0189': 'D',
+    '\uA779': 'D',
+    '\u01F1': 'DZ',
+    '\u01C4': 'DZ',
+    '\u01F2': 'Dz',
+    '\u01C5': 'Dz',
+    '\u24BA': 'E',
+    '\uFF25': 'E',
+    '\u00C8': 'E',
+    '\u00C9': 'E',
+    '\u00CA': 'E',
+    '\u1EC0': 'E',
+    '\u1EBE': 'E',
+    '\u1EC4': 'E',
+    '\u1EC2': 'E',
+    '\u1EBC': 'E',
+    '\u0112': 'E',
+    '\u1E14': 'E',
+    '\u1E16': 'E',
+    '\u0114': 'E',
+    '\u0116': 'E',
+    '\u00CB': 'E',
+    '\u1EBA': 'E',
+    '\u011A': 'E',
+    '\u0204': 'E',
+    '\u0206': 'E',
+    '\u1EB8': 'E',
+    '\u1EC6': 'E',
+    '\u0228': 'E',
+    '\u1E1C': 'E',
+    '\u0118': 'E',
+    '\u1E18': 'E',
+    '\u1E1A': 'E',
+    '\u0190': 'E',
+    '\u018E': 'E',
+    '\u24BB': 'F',
+    '\uFF26': 'F',
+    '\u1E1E': 'F',
+    '\u0191': 'F',
+    '\uA77B': 'F',
+    '\u24BC': 'G',
+    '\uFF27': 'G',
+    '\u01F4': 'G',
+    '\u011C': 'G',
+    '\u1E20': 'G',
+    '\u011E': 'G',
+    '\u0120': 'G',
+    '\u01E6': 'G',
+    '\u0122': 'G',
+    '\u01E4': 'G',
+    '\u0193': 'G',
+    '\uA7A0': 'G',
+    '\uA77D': 'G',
+    '\uA77E': 'G',
+    '\u24BD': 'H',
+    '\uFF28': 'H',
+    '\u0124': 'H',
+    '\u1E22': 'H',
+    '\u1E26': 'H',
+    '\u021E': 'H',
+    '\u1E24': 'H',
+    '\u1E28': 'H',
+    '\u1E2A': 'H',
+    '\u0126': 'H',
+    '\u2C67': 'H',
+    '\u2C75': 'H',
+    '\uA78D': 'H',
+    '\u24BE': 'I',
+    '\uFF29': 'I',
+    '\u00CC': 'I',
+    '\u00CD': 'I',
+    '\u00CE': 'I',
+    '\u0128': 'I',
+    '\u012A': 'I',
+    '\u012C': 'I',
+    '\u0130': 'I',
+    '\u00CF': 'I',
+    '\u1E2E': 'I',
+    '\u1EC8': 'I',
+    '\u01CF': 'I',
+    '\u0208': 'I',
+    '\u020A': 'I',
+    '\u1ECA': 'I',
+    '\u012E': 'I',
+    '\u1E2C': 'I',
+    '\u0197': 'I',
+    '\u24BF': 'J',
+    '\uFF2A': 'J',
+    '\u0134': 'J',
+    '\u0248': 'J',
+    '\u24C0': 'K',
+    '\uFF2B': 'K',
+    '\u1E30': 'K',
+    '\u01E8': 'K',
+    '\u1E32': 'K',
+    '\u0136': 'K',
+    '\u1E34': 'K',
+    '\u0198': 'K',
+    '\u2C69': 'K',
+    '\uA740': 'K',
+    '\uA742': 'K',
+    '\uA744': 'K',
+    '\uA7A2': 'K',
+    '\u24C1': 'L',
+    '\uFF2C': 'L',
+    '\u013F': 'L',
+    '\u0139': 'L',
+    '\u013D': 'L',
+    '\u1E36': 'L',
+    '\u1E38': 'L',
+    '\u013B': 'L',
+    '\u1E3C': 'L',
+    '\u1E3A': 'L',
+    '\u0141': 'L',
+    '\u023D': 'L',
+    '\u2C62': 'L',
+    '\u2C60': 'L',
+    '\uA748': 'L',
+    '\uA746': 'L',
+    '\uA780': 'L',
+    '\u01C7': 'LJ',
+    '\u01C8': 'Lj',
+    '\u24C2': 'M',
+    '\uFF2D': 'M',
+    '\u1E3E': 'M',
+    '\u1E40': 'M',
+    '\u1E42': 'M',
+    '\u2C6E': 'M',
+    '\u019C': 'M',
+    '\u24C3': 'N',
+    '\uFF2E': 'N',
+    '\u01F8': 'N',
+    '\u0143': 'N',
+    '\u00D1': 'N',
+    '\u1E44': 'N',
+    '\u0147': 'N',
+    '\u1E46': 'N',
+    '\u0145': 'N',
+    '\u1E4A': 'N',
+    '\u1E48': 'N',
+    '\u0220': 'N',
+    '\u019D': 'N',
+    '\uA790': 'N',
+    '\uA7A4': 'N',
+    '\u01CA': 'NJ',
+    '\u01CB': 'Nj',
+    '\u24C4': 'O',
+    '\uFF2F': 'O',
+    '\u00D2': 'O',
+    '\u00D3': 'O',
+    '\u00D4': 'O',
+    '\u1ED2': 'O',
+    '\u1ED0': 'O',
+    '\u1ED6': 'O',
+    '\u1ED4': 'O',
+    '\u00D5': 'O',
+    '\u1E4C': 'O',
+    '\u022C': 'O',
+    '\u1E4E': 'O',
+    '\u014C': 'O',
+    '\u1E50': 'O',
+    '\u1E52': 'O',
+    '\u014E': 'O',
+    '\u022E': 'O',
+    '\u0230': 'O',
+    '\u00D6': 'O',
+    '\u022A': 'O',
+    '\u1ECE': 'O',
+    '\u0150': 'O',
+    '\u01D1': 'O',
+    '\u020C': 'O',
+    '\u020E': 'O',
+    '\u01A0': 'O',
+    '\u1EDC': 'O',
+    '\u1EDA': 'O',
+    '\u1EE0': 'O',
+    '\u1EDE': 'O',
+    '\u1EE2': 'O',
+    '\u1ECC': 'O',
+    '\u1ED8': 'O',
+    '\u01EA': 'O',
+    '\u01EC': 'O',
+    '\u00D8': 'O',
+    '\u01FE': 'O',
+    '\u0186': 'O',
+    '\u019F': 'O',
+    '\uA74A': 'O',
+    '\uA74C': 'O',
+    '\u0152': 'OE',
+    '\u01A2': 'OI',
+    '\uA74E': 'OO',
+    '\u0222': 'OU',
+    '\u24C5': 'P',
+    '\uFF30': 'P',
+    '\u1E54': 'P',
+    '\u1E56': 'P',
+    '\u01A4': 'P',
+    '\u2C63': 'P',
+    '\uA750': 'P',
+    '\uA752': 'P',
+    '\uA754': 'P',
+    '\u24C6': 'Q',
+    '\uFF31': 'Q',
+    '\uA756': 'Q',
+    '\uA758': 'Q',
+    '\u024A': 'Q',
+    '\u24C7': 'R',
+    '\uFF32': 'R',
+    '\u0154': 'R',
+    '\u1E58': 'R',
+    '\u0158': 'R',
+    '\u0210': 'R',
+    '\u0212': 'R',
+    '\u1E5A': 'R',
+    '\u1E5C': 'R',
+    '\u0156': 'R',
+    '\u1E5E': 'R',
+    '\u024C': 'R',
+    '\u2C64': 'R',
+    '\uA75A': 'R',
+    '\uA7A6': 'R',
+    '\uA782': 'R',
+    '\u24C8': 'S',
+    '\uFF33': 'S',
+    '\u1E9E': 'S',
+    '\u015A': 'S',
+    '\u1E64': 'S',
+    '\u015C': 'S',
+    '\u1E60': 'S',
+    '\u0160': 'S',
+    '\u1E66': 'S',
+    '\u1E62': 'S',
+    '\u1E68': 'S',
+    '\u0218': 'S',
+    '\u015E': 'S',
+    '\u2C7E': 'S',
+    '\uA7A8': 'S',
+    '\uA784': 'S',
+    '\u24C9': 'T',
+    '\uFF34': 'T',
+    '\u1E6A': 'T',
+    '\u0164': 'T',
+    '\u1E6C': 'T',
+    '\u021A': 'T',
+    '\u0162': 'T',
+    '\u1E70': 'T',
+    '\u1E6E': 'T',
+    '\u0166': 'T',
+    '\u01AC': 'T',
+    '\u01AE': 'T',
+    '\u023E': 'T',
+    '\uA786': 'T',
+    '\uA728': 'TZ',
+    '\u24CA': 'U',
+    '\uFF35': 'U',
+    '\u00D9': 'U',
+    '\u00DA': 'U',
+    '\u00DB': 'U',
+    '\u0168': 'U',
+    '\u1E78': 'U',
+    '\u016A': 'U',
+    '\u1E7A': 'U',
+    '\u016C': 'U',
+    '\u00DC': 'U',
+    '\u01DB': 'U',
+    '\u01D7': 'U',
+    '\u01D5': 'U',
+    '\u01D9': 'U',
+    '\u1EE6': 'U',
+    '\u016E': 'U',
+    '\u0170': 'U',
+    '\u01D3': 'U',
+    '\u0214': 'U',
+    '\u0216': 'U',
+    '\u01AF': 'U',
+    '\u1EEA': 'U',
+    '\u1EE8': 'U',
+    '\u1EEE': 'U',
+    '\u1EEC': 'U',
+    '\u1EF0': 'U',
+    '\u1EE4': 'U',
+    '\u1E72': 'U',
+    '\u0172': 'U',
+    '\u1E76': 'U',
+    '\u1E74': 'U',
+    '\u0244': 'U',
+    '\u24CB': 'V',
+    '\uFF36': 'V',
+    '\u1E7C': 'V',
+    '\u1E7E': 'V',
+    '\u01B2': 'V',
+    '\uA75E': 'V',
+    '\u0245': 'V',
+    '\uA760': 'VY',
+    '\u24CC': 'W',
+    '\uFF37': 'W',
+    '\u1E80': 'W',
+    '\u1E82': 'W',
+    '\u0174': 'W',
+    '\u1E86': 'W',
+    '\u1E84': 'W',
+    '\u1E88': 'W',
+    '\u2C72': 'W',
+    '\u24CD': 'X',
+    '\uFF38': 'X',
+    '\u1E8A': 'X',
+    '\u1E8C': 'X',
+    '\u24CE': 'Y',
+    '\uFF39': 'Y',
+    '\u1EF2': 'Y',
+    '\u00DD': 'Y',
+    '\u0176': 'Y',
+    '\u1EF8': 'Y',
+    '\u0232': 'Y',
+    '\u1E8E': 'Y',
+    '\u0178': 'Y',
+    '\u1EF6': 'Y',
+    '\u1EF4': 'Y',
+    '\u01B3': 'Y',
+    '\u024E': 'Y',
+    '\u1EFE': 'Y',
+    '\u24CF': 'Z',
+    '\uFF3A': 'Z',
+    '\u0179': 'Z',
+    '\u1E90': 'Z',
+    '\u017B': 'Z',
+    '\u017D': 'Z',
+    '\u1E92': 'Z',
+    '\u1E94': 'Z',
+    '\u01B5': 'Z',
+    '\u0224': 'Z',
+    '\u2C7F': 'Z',
+    '\u2C6B': 'Z',
+    '\uA762': 'Z',
+    '\u24D0': 'a',
+    '\uFF41': 'a',
+    '\u1E9A': 'a',
+    '\u00E0': 'a',
+    '\u00E1': 'a',
+    '\u00E2': 'a',
+    '\u1EA7': 'a',
+    '\u1EA5': 'a',
+    '\u1EAB': 'a',
+    '\u1EA9': 'a',
+    '\u00E3': 'a',
+    '\u0101': 'a',
+    '\u0103': 'a',
+    '\u1EB1': 'a',
+    '\u1EAF': 'a',
+    '\u1EB5': 'a',
+    '\u1EB3': 'a',
+    '\u0227': 'a',
+    '\u01E1': 'a',
+    '\u00E4': 'a',
+    '\u01DF': 'a',
+    '\u1EA3': 'a',
+    '\u00E5': 'a',
+    '\u01FB': 'a',
+    '\u01CE': 'a',
+    '\u0201': 'a',
+    '\u0203': 'a',
+    '\u1EA1': 'a',
+    '\u1EAD': 'a',
+    '\u1EB7': 'a',
+    '\u1E01': 'a',
+    '\u0105': 'a',
+    '\u2C65': 'a',
+    '\u0250': 'a',
+    '\uA733': 'aa',
+    '\u00E6': 'ae',
+    '\u01FD': 'ae',
+    '\u01E3': 'ae',
+    '\uA735': 'ao',
+    '\uA737': 'au',
+    '\uA739': 'av',
+    '\uA73B': 'av',
+    '\uA73D': 'ay',
+    '\u24D1': 'b',
+    '\uFF42': 'b',
+    '\u1E03': 'b',
+    '\u1E05': 'b',
+    '\u1E07': 'b',
+    '\u0180': 'b',
+    '\u0183': 'b',
+    '\u0253': 'b',
+    '\u24D2': 'c',
+    '\uFF43': 'c',
+    '\u0107': 'c',
+    '\u0109': 'c',
+    '\u010B': 'c',
+    '\u010D': 'c',
+    '\u00E7': 'c',
+    '\u1E09': 'c',
+    '\u0188': 'c',
+    '\u023C': 'c',
+    '\uA73F': 'c',
+    '\u2184': 'c',
+    '\u24D3': 'd',
+    '\uFF44': 'd',
+    '\u1E0B': 'd',
+    '\u010F': 'd',
+    '\u1E0D': 'd',
+    '\u1E11': 'd',
+    '\u1E13': 'd',
+    '\u1E0F': 'd',
+    '\u0111': 'd',
+    '\u018C': 'd',
+    '\u0256': 'd',
+    '\u0257': 'd',
+    '\uA77A': 'd',
+    '\u01F3': 'dz',
+    '\u01C6': 'dz',
+    '\u24D4': 'e',
+    '\uFF45': 'e',
+    '\u00E8': 'e',
+    '\u00E9': 'e',
+    '\u00EA': 'e',
+    '\u1EC1': 'e',
+    '\u1EBF': 'e',
+    '\u1EC5': 'e',
+    '\u1EC3': 'e',
+    '\u1EBD': 'e',
+    '\u0113': 'e',
+    '\u1E15': 'e',
+    '\u1E17': 'e',
+    '\u0115': 'e',
+    '\u0117': 'e',
+    '\u00EB': 'e',
+    '\u1EBB': 'e',
+    '\u011B': 'e',
+    '\u0205': 'e',
+    '\u0207': 'e',
+    '\u1EB9': 'e',
+    '\u1EC7': 'e',
+    '\u0229': 'e',
+    '\u1E1D': 'e',
+    '\u0119': 'e',
+    '\u1E19': 'e',
+    '\u1E1B': 'e',
+    '\u0247': 'e',
+    '\u025B': 'e',
+    '\u01DD': 'e',
+    '\u24D5': 'f',
+    '\uFF46': 'f',
+    '\u1E1F': 'f',
+    '\u0192': 'f',
+    '\uA77C': 'f',
+    '\u24D6': 'g',
+    '\uFF47': 'g',
+    '\u01F5': 'g',
+    '\u011D': 'g',
+    '\u1E21': 'g',
+    '\u011F': 'g',
+    '\u0121': 'g',
+    '\u01E7': 'g',
+    '\u0123': 'g',
+    '\u01E5': 'g',
+    '\u0260': 'g',
+    '\uA7A1': 'g',
+    '\u1D79': 'g',
+    '\uA77F': 'g',
+    '\u24D7': 'h',
+    '\uFF48': 'h',
+    '\u0125': 'h',
+    '\u1E23': 'h',
+    '\u1E27': 'h',
+    '\u021F': 'h',
+    '\u1E25': 'h',
+    '\u1E29': 'h',
+    '\u1E2B': 'h',
+    '\u1E96': 'h',
+    '\u0127': 'h',
+    '\u2C68': 'h',
+    '\u2C76': 'h',
+    '\u0265': 'h',
+    '\u0195': 'hv',
+    '\u24D8': 'i',
+    '\uFF49': 'i',
+    '\u00EC': 'i',
+    '\u00ED': 'i',
+    '\u00EE': 'i',
+    '\u0129': 'i',
+    '\u012B': 'i',
+    '\u012D': 'i',
+    '\u00EF': 'i',
+    '\u1E2F': 'i',
+    '\u1EC9': 'i',
+    '\u01D0': 'i',
+    '\u0209': 'i',
+    '\u020B': 'i',
+    '\u1ECB': 'i',
+    '\u012F': 'i',
+    '\u1E2D': 'i',
+    '\u0268': 'i',
+    '\u0131': 'i',
+    '\u24D9': 'j',
+    '\uFF4A': 'j',
+    '\u0135': 'j',
+    '\u01F0': 'j',
+    '\u0249': 'j',
+    '\u24DA': 'k',
+    '\uFF4B': 'k',
+    '\u1E31': 'k',
+    '\u01E9': 'k',
+    '\u1E33': 'k',
+    '\u0137': 'k',
+    '\u1E35': 'k',
+    '\u0199': 'k',
+    '\u2C6A': 'k',
+    '\uA741': 'k',
+    '\uA743': 'k',
+    '\uA745': 'k',
+    '\uA7A3': 'k',
+    '\u24DB': 'l',
+    '\uFF4C': 'l',
+    '\u0140': 'l',
+    '\u013A': 'l',
+    '\u013E': 'l',
+    '\u1E37': 'l',
+    '\u1E39': 'l',
+    '\u013C': 'l',
+    '\u1E3D': 'l',
+    '\u1E3B': 'l',
+    '\u017F': 'l',
+    '\u0142': 'l',
+    '\u019A': 'l',
+    '\u026B': 'l',
+    '\u2C61': 'l',
+    '\uA749': 'l',
+    '\uA781': 'l',
+    '\uA747': 'l',
+    '\u01C9': 'lj',
+    '\u24DC': 'm',
+    '\uFF4D': 'm',
+    '\u1E3F': 'm',
+    '\u1E41': 'm',
+    '\u1E43': 'm',
+    '\u0271': 'm',
+    '\u026F': 'm',
+    '\u24DD': 'n',
+    '\uFF4E': 'n',
+    '\u01F9': 'n',
+    '\u0144': 'n',
+    '\u00F1': 'n',
+    '\u1E45': 'n',
+    '\u0148': 'n',
+    '\u1E47': 'n',
+    '\u0146': 'n',
+    '\u1E4B': 'n',
+    '\u1E49': 'n',
+    '\u019E': 'n',
+    '\u0272': 'n',
+    '\u0149': 'n',
+    '\uA791': 'n',
+    '\uA7A5': 'n',
+    '\u01CC': 'nj',
+    '\u24DE': 'o',
+    '\uFF4F': 'o',
+    '\u00F2': 'o',
+    '\u00F3': 'o',
+    '\u00F4': 'o',
+    '\u1ED3': 'o',
+    '\u1ED1': 'o',
+    '\u1ED7': 'o',
+    '\u1ED5': 'o',
+    '\u00F5': 'o',
+    '\u1E4D': 'o',
+    '\u022D': 'o',
+    '\u1E4F': 'o',
+    '\u014D': 'o',
+    '\u1E51': 'o',
+    '\u1E53': 'o',
+    '\u014F': 'o',
+    '\u022F': 'o',
+    '\u0231': 'o',
+    '\u00F6': 'o',
+    '\u022B': 'o',
+    '\u1ECF': 'o',
+    '\u0151': 'o',
+    '\u01D2': 'o',
+    '\u020D': 'o',
+    '\u020F': 'o',
+    '\u01A1': 'o',
+    '\u1EDD': 'o',
+    '\u1EDB': 'o',
+    '\u1EE1': 'o',
+    '\u1EDF': 'o',
+    '\u1EE3': 'o',
+    '\u1ECD': 'o',
+    '\u1ED9': 'o',
+    '\u01EB': 'o',
+    '\u01ED': 'o',
+    '\u00F8': 'o',
+    '\u01FF': 'o',
+    '\u0254': 'o',
+    '\uA74B': 'o',
+    '\uA74D': 'o',
+    '\u0275': 'o',
+    '\u0153': 'oe',
+    '\u01A3': 'oi',
+    '\u0223': 'ou',
+    '\uA74F': 'oo',
+    '\u24DF': 'p',
+    '\uFF50': 'p',
+    '\u1E55': 'p',
+    '\u1E57': 'p',
+    '\u01A5': 'p',
+    '\u1D7D': 'p',
+    '\uA751': 'p',
+    '\uA753': 'p',
+    '\uA755': 'p',
+    '\u24E0': 'q',
+    '\uFF51': 'q',
+    '\u024B': 'q',
+    '\uA757': 'q',
+    '\uA759': 'q',
+    '\u24E1': 'r',
+    '\uFF52': 'r',
+    '\u0155': 'r',
+    '\u1E59': 'r',
+    '\u0159': 'r',
+    '\u0211': 'r',
+    '\u0213': 'r',
+    '\u1E5B': 'r',
+    '\u1E5D': 'r',
+    '\u0157': 'r',
+    '\u1E5F': 'r',
+    '\u024D': 'r',
+    '\u027D': 'r',
+    '\uA75B': 'r',
+    '\uA7A7': 'r',
+    '\uA783': 'r',
+    '\u24E2': 's',
+    '\uFF53': 's',
+    '\u00DF': 's',
+    '\u015B': 's',
+    '\u1E65': 's',
+    '\u015D': 's',
+    '\u1E61': 's',
+    '\u0161': 's',
+    '\u1E67': 's',
+    '\u1E63': 's',
+    '\u1E69': 's',
+    '\u0219': 's',
+    '\u015F': 's',
+    '\u023F': 's',
+    '\uA7A9': 's',
+    '\uA785': 's',
+    '\u1E9B': 's',
+    '\u24E3': 't',
+    '\uFF54': 't',
+    '\u1E6B': 't',
+    '\u1E97': 't',
+    '\u0165': 't',
+    '\u1E6D': 't',
+    '\u021B': 't',
+    '\u0163': 't',
+    '\u1E71': 't',
+    '\u1E6F': 't',
+    '\u0167': 't',
+    '\u01AD': 't',
+    '\u0288': 't',
+    '\u2C66': 't',
+    '\uA787': 't',
+    '\uA729': 'tz',
+    '\u24E4': 'u',
+    '\uFF55': 'u',
+    '\u00F9': 'u',
+    '\u00FA': 'u',
+    '\u00FB': 'u',
+    '\u0169': 'u',
+    '\u1E79': 'u',
+    '\u016B': 'u',
+    '\u1E7B': 'u',
+    '\u016D': 'u',
+    '\u00FC': 'u',
+    '\u01DC': 'u',
+    '\u01D8': 'u',
+    '\u01D6': 'u',
+    '\u01DA': 'u',
+    '\u1EE7': 'u',
+    '\u016F': 'u',
+    '\u0171': 'u',
+    '\u01D4': 'u',
+    '\u0215': 'u',
+    '\u0217': 'u',
+    '\u01B0': 'u',
+    '\u1EEB': 'u',
+    '\u1EE9': 'u',
+    '\u1EEF': 'u',
+    '\u1EED': 'u',
+    '\u1EF1': 'u',
+    '\u1EE5': 'u',
+    '\u1E73': 'u',
+    '\u0173': 'u',
+    '\u1E77': 'u',
+    '\u1E75': 'u',
+    '\u0289': 'u',
+    '\u24E5': 'v',
+    '\uFF56': 'v',
+    '\u1E7D': 'v',
+    '\u1E7F': 'v',
+    '\u028B': 'v',
+    '\uA75F': 'v',
+    '\u028C': 'v',
+    '\uA761': 'vy',
+    '\u24E6': 'w',
+    '\uFF57': 'w',
+    '\u1E81': 'w',
+    '\u1E83': 'w',
+    '\u0175': 'w',
+    '\u1E87': 'w',
+    '\u1E85': 'w',
+    '\u1E98': 'w',
+    '\u1E89': 'w',
+    '\u2C73': 'w',
+    '\u24E7': 'x',
+    '\uFF58': 'x',
+    '\u1E8B': 'x',
+    '\u1E8D': 'x',
+    '\u24E8': 'y',
+    '\uFF59': 'y',
+    '\u1EF3': 'y',
+    '\u00FD': 'y',
+    '\u0177': 'y',
+    '\u1EF9': 'y',
+    '\u0233': 'y',
+    '\u1E8F': 'y',
+    '\u00FF': 'y',
+    '\u1EF7': 'y',
+    '\u1E99': 'y',
+    '\u1EF5': 'y',
+    '\u01B4': 'y',
+    '\u024F': 'y',
+    '\u1EFF': 'y',
+    '\u24E9': 'z',
+    '\uFF5A': 'z',
+    '\u017A': 'z',
+    '\u1E91': 'z',
+    '\u017C': 'z',
+    '\u017E': 'z',
+    '\u1E93': 'z',
+    '\u1E95': 'z',
+    '\u01B6': 'z',
+    '\u0225': 'z',
+    '\u0240': 'z',
+    '\u2C6C': 'z',
+    '\uA763': 'z',
+    '\u0386': '\u0391',
+    '\u0388': '\u0395',
+    '\u0389': '\u0397',
+    '\u038A': '\u0399',
+    '\u03AA': '\u0399',
+    '\u038C': '\u039F',
+    '\u038E': '\u03A5',
+    '\u03AB': '\u03A5',
+    '\u038F': '\u03A9',
+    '\u03AC': '\u03B1',
+    '\u03AD': '\u03B5',
+    '\u03AE': '\u03B7',
+    '\u03AF': '\u03B9',
+    '\u03CA': '\u03B9',
+    '\u0390': '\u03B9',
+    '\u03CC': '\u03BF',
+    '\u03CD': '\u03C5',
+    '\u03CB': '\u03C5',
+    '\u03B0': '\u03C5',
+    '\u03CE': '\u03C9',
+    '\u03C2': '\u03C3',
+    '\u2019': '\''
+  };
+
+  return diacritics;
+});
+
+S2.define('select2/data/base',[
+  '../utils'
+], function (Utils) {
+  function BaseAdapter ($element, options) {
+    BaseAdapter.__super__.constructor.call(this);
+  }
+
+  Utils.Extend(BaseAdapter, Utils.Observable);
+
+  BaseAdapter.prototype.current = function (callback) {
+    throw new Error('The `current` method must be defined in child classes.');
+  };
+
+  BaseAdapter.prototype.query = function (params, callback) {
+    throw new Error('The `query` method must be defined in child classes.');
+  };
+
+  BaseAdapter.prototype.bind = function (container, $container) {
+    // Can be implemented in subclasses
+  };
+
+  BaseAdapter.prototype.destroy = function () {
+    // Can be implemented in subclasses
+  };
+
+  BaseAdapter.prototype.generateResultId = function (container, data) {
+    var id = container.id + '-result-';
+
+    id += Utils.generateChars(4);
+
+    if (data.id != null) {
+      id += '-' + data.id.toString();
+    } else {
+      id += '-' + Utils.generateChars(4);
+    }
+    return id;
+  };
+
+  return BaseAdapter;
+});
+
+S2.define('select2/data/select',[
+  './base',
+  '../utils',
+  'jquery'
+], function (BaseAdapter, Utils, $) {
+  function SelectAdapter ($element, options) {
+    this.$element = $element;
+    this.options = options;
+
+    SelectAdapter.__super__.constructor.call(this);
+  }
+
+  Utils.Extend(SelectAdapter, BaseAdapter);
+
+  SelectAdapter.prototype.current = function (callback) {
+    var data = [];
+    var self = this;
+
+    this.$element.find(':selected').each(function () {
+      var $option = $(this);
+
+      var option = self.item($option);
+
+      data.push(option);
+    });
+
+    callback(data);
+  };
+
+  SelectAdapter.prototype.select = function (data) {
+    var self = this;
+
+    data.selected = true;
+
+    // If data.element is a DOM node, use it instead
+    if ($(data.element).is('option')) {
+      data.element.selected = true;
+
+      this.$element.trigger('change');
+
+      return;
+    }
+
+    if (this.$element.prop('multiple')) {
+      this.current(function (currentData) {
+        var val = [];
+
+        data = [data];
+        data.push.apply(data, currentData);
+
+        for (var d = 0; d < data.length; d++) {
+          var id = data[d].id;
+
+          if ($.inArray(id, val) === -1) {
+            val.push(id);
+          }
+        }
+
+        self.$element.val(val);
+        self.$element.trigger('change');
+      });
+    } else {
+      var val = data.id;
+
+      this.$element.val(val);
+      this.$element.trigger('change');
+    }
+  };
+
+  SelectAdapter.prototype.unselect = function (data) {
+    var self = this;
+
+    if (!this.$element.prop('multiple')) {
+      return;
+    }
+
+    data.selected = false;
+
+    if ($(data.element).is('option')) {
+      data.element.selected = false;
+
+      this.$element.trigger('change');
+
+      return;
+    }
+
+    this.current(function (currentData) {
+      var val = [];
+
+      for (var d = 0; d < currentData.length; d++) {
+        var id = currentData[d].id;
+
+        if (id !== data.id && $.inArray(id, val) === -1) {
+          val.push(id);
+        }
+      }
+
+      self.$element.val(val);
+
+      self.$element.trigger('change');
+    });
+  };
+
+  SelectAdapter.prototype.bind = function (container, $container) {
+    var self = this;
+
+    this.container = container;
+
+    container.on('select', function (params) {
+      self.select(params.data);
+    });
+
+    container.on('unselect', function (params) {
+      self.unselect(params.data);
+    });
+  };
+
+  SelectAdapter.prototype.destroy = function () {
+    // Remove anything added to child elements
+    this.$element.find('*').each(function () {
+      // Remove any custom data set by Select2
+      Utils.RemoveData(this);
+    });
+  };
+
+  SelectAdapter.prototype.query = function (params, callback) {
+    var data = [];
+    var self = this;
+
+    var $options = this.$element.children();
+
+    $options.each(function () {
+      var $option = $(this);
+
+      if (!$option.is('option') && !$option.is('optgroup')) {
+        return;
+      }
+
+      var option = self.item($option);
+
+      var matches = self.matches(params, option);
+
+      if (matches !== null) {
+        data.push(matches);
+      }
+    });
+
+    callback({
+      results: data
+    });
+  };
+
+  SelectAdapter.prototype.addOptions = function ($options) {
+    Utils.appendMany(this.$element, $options);
+  };
+
+  SelectAdapter.prototype.option = function (data) {
+    var option;
+
+    if (data.children) {
+      option = document.createElement('optgroup');
+      option.label = data.text;
+    } else {
+      option = document.createElement('option');
+
+      if (option.textContent !== undefined) {
+        option.textContent = data.text;
+      } else {
+        option.innerText = data.text;
+      }
+    }
+
+    if (data.id !== undefined) {
+      option.value = data.id;
+    }
+
+    if (data.disabled) {
+      option.disabled = true;
+    }
+
+    if (data.selected) {
+      option.selected = true;
+    }
+
+    if (data.title) {
+      option.title = data.title;
+    }
+
+    var $option = $(option);
+
+    var normalizedData = this._normalizeItem(data);
+    normalizedData.element = option;
+
+    // Override the option's data with the combined data
+    Utils.StoreData(option, 'data', normalizedData);
+
+    return $option;
+  };
+
+  SelectAdapter.prototype.item = function ($option) {
+    var data = {};
+
+    data = Utils.GetData($option[0], 'data');
+
+    if (data != null) {
+      return data;
+    }
+
+    if ($option.is('option')) {
+      data = {
+        id: $option.val(),
+        text: $option.text(),
+        disabled: $option.prop('disabled'),
+        selected: $option.prop('selected'),
+        title: $option.prop('title')
+      };
+    } else if ($option.is('optgroup')) {
+      data = {
+        text: $option.prop('label'),
+        children: [],
+        title: $option.prop('title')
+      };
+
+      var $children = $option.children('option');
+      var children = [];
+
+      for (var c = 0; c < $children.length; c++) {
+        var $child = $($children[c]);
+
+        var child = this.item($child);
+
+        children.push(child);
+      }
+
+      data.children = children;
+    }
+
+    data = this._normalizeItem(data);
+    data.element = $option[0];
+
+    Utils.StoreData($option[0], 'data', data);
+
+    return data;
+  };
+
+  SelectAdapter.prototype._normalizeItem = function (item) {
+    if (item !== Object(item)) {
+      item = {
+        id: item,
+        text: item
+      };
+    }
+
+    item = $.extend({}, {
+      text: ''
+    }, item);
+
+    var defaults = {
+      selected: false,
+      disabled: false
+    };
+
+    if (item.id != null) {
+      item.id = item.id.toString();
+    }
+
+    if (item.text != null) {
+      item.text = item.text.toString();
+    }
+
+    if (item._resultId == null && item.id && this.container != null) {
+      item._resultId = this.generateResultId(this.container, item);
+    }
+
+    return $.extend({}, defaults, item);
+  };
+
+  SelectAdapter.prototype.matches = function (params, data) {
+    var matcher = this.options.get('matcher');
+
+    return matcher(params, data);
+  };
+
+  return SelectAdapter;
+});
+
+S2.define('select2/data/array',[
+  './select',
+  '../utils',
+  'jquery'
+], function (SelectAdapter, Utils, $) {
+  function ArrayAdapter ($element, options) {
+    var data = options.get('data') || [];
+
+    ArrayAdapter.__super__.constructor.call(this, $element, options);
+
+    this.addOptions(this.convertToOptions(data));
+  }
+
+  Utils.Extend(ArrayAdapter, SelectAdapter);
+
+  ArrayAdapter.prototype.select = function (data) {
+    var $option = this.$element.find('option').filter(function (i, elm) {
+      return elm.value == data.id.toString();
+    });
+
+    if ($option.length === 0) {
+      $option = this.option(data);
+
+      this.addOptions($option);
+    }
+
+    ArrayAdapter.__super__.select.call(this, data);
+  };
+
+  ArrayAdapter.prototype.convertToOptions = function (data) {
+    var self = this;
+
+    var $existing = this.$element.find('option');
+    var existingIds = $existing.map(function () {
+      return self.item($(this)).id;
+    }).get();
+
+    var $options = [];
+
+    // Filter out all items except for the one passed in the argument
+    function onlyItem (item) {
+      return function () {
+        return $(this).val() == item.id;
+      };
+    }
+
+    for (var d = 0; d < data.length; d++) {
+      var item = this._normalizeItem(data[d]);
+
+      // Skip items which were pre-loaded, only merge the data
+      if ($.inArray(item.id, existingIds) >= 0) {
+        var $existingOption = $existing.filter(onlyItem(item));
+
+        var existingData = this.item($existingOption);
+        var newData = $.extend(true, {}, item, existingData);
+
+        var $newOption = this.option(newData);
+
+        $existingOption.replaceWith($newOption);
+
+        continue;
+      }
+
+      var $option = this.option(item);
+
+      if (item.children) {
+        var $children = this.convertToOptions(item.children);
+
+        Utils.appendMany($option, $children);
+      }
+
+      $options.push($option);
+    }
+
+    return $options;
+  };
+
+  return ArrayAdapter;
+});
+
+S2.define('select2/data/ajax',[
+  './array',
+  '../utils',
+  'jquery'
+], function (ArrayAdapter, Utils, $) {
+  function AjaxAdapter ($element, options) {
+    this.ajaxOptions = this._applyDefaults(options.get('ajax'));
+
+    if (this.ajaxOptions.processResults != null) {
+      this.processResults = this.ajaxOptions.processResults;
+    }
+
+    AjaxAdapter.__super__.constructor.call(this, $element, options);
+  }
+
+  Utils.Extend(AjaxAdapter, ArrayAdapter);
+
+  AjaxAdapter.prototype._applyDefaults = function (options) {
+    var defaults = {
+      data: function (params) {
+        return $.extend({}, params, {
+          q: params.term
+        });
+      },
+      transport: function (params, success, failure) {
+        var $request = $.ajax(params);
+
+        $request.then(success);
+        $request.fail(failure);
+
+        return $request;
+      }
+    };
+
+    return $.extend({}, defaults, options, true);
+  };
+
+  AjaxAdapter.prototype.processResults = function (results) {
+    return results;
+  };
+
+  AjaxAdapter.prototype.query = function (params, callback) {
+    var matches = [];
+    var self = this;
+
+    if (this._request != null) {
+      // JSONP requests cannot always be aborted
+      if ($.isFunction(this._request.abort)) {
+        this._request.abort();
+      }
+
+      this._request = null;
+    }
+
+    var options = $.extend({
+      type: 'GET'
+    }, this.ajaxOptions);
+
+    if (typeof options.url === 'function') {
+      options.url = options.url.call(this.$element, params);
+    }
+
+    if (typeof options.data === 'function') {
+      options.data = options.data.call(this.$element, params);
+    }
+
+    function request () {
+      var $request = options.transport(options, function (data) {
+        var results = self.processResults(data, params);
+
+        if (self.options.get('debug') && window.console && console.error) {
+          // Check to make sure that the response included a `results` key.
+          if (!results || !results.results || !$.isArray(results.results)) {
+            console.error(
+              'Select2: The AJAX results did not return an array in the ' +
+              '`results` key of the response.'
+            );
+          }
+        }
+
+        callback(results);
+      }, function () {
+        // Attempt to detect if a request was aborted
+        // Only works if the transport exposes a status property
+        if ('status' in $request &&
+            ($request.status === 0 || $request.status === '0')) {
+          return;
+        }
+
+        self.trigger('results:message', {
+          message: 'errorLoading'
+        });
+      });
+
+      self._request = $request;
+    }
+
+    if (this.ajaxOptions.delay && params.term != null) {
+      if (this._queryTimeout) {
+        window.clearTimeout(this._queryTimeout);
+      }
+
+      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);
+    } else {
+      request();
+    }
+  };
+
+  return AjaxAdapter;
+});
+
+S2.define('select2/data/tags',[
+  'jquery'
+], function ($) {
+  function Tags (decorated, $element, options) {
+    var tags = options.get('tags');
+
+    var createTag = options.get('createTag');
+
+    if (createTag !== undefined) {
+      this.createTag = createTag;
+    }
+
+    var insertTag = options.get('insertTag');
+
+    if (insertTag !== undefined) {
+        this.insertTag = insertTag;
+    }
+
+    decorated.call(this, $element, options);
+
+    if ($.isArray(tags)) {
+      for (var t = 0; t < tags.length; t++) {
+        var tag = tags[t];
+        var item = this._normalizeItem(tag);
+
+        var $option = this.option(item);
+
+        this.$element.append($option);
+      }
+    }
+  }
+
+  Tags.prototype.query = function (decorated, params, callback) {
+    var self = this;
+
+    this._removeOldTags();
+
+    if (params.term == null || params.page != null) {
+      decorated.call(this, params, callback);
+      return;
+    }
+
+    function wrapper (obj, child) {
+      var data = obj.results;
+
+      for (var i = 0; i < data.length; i++) {
+        var option = data[i];
+
+        var checkChildren = (
+          option.children != null &&
+          !wrapper({
+            results: option.children
+          }, true)
+        );
+
+        var optionText = (option.text || '').toUpperCase();
+        var paramsTerm = (params.term || '').toUpperCase();
+
+        var checkText = optionText === paramsTerm;
+
+        if (checkText || checkChildren) {
+          if (child) {
+            return false;
+          }
+
+          obj.data = data;
+          callback(obj);
+
+          return;
+        }
+      }
+
+      if (child) {
+        return true;
+      }
+
+      var tag = self.createTag(params);
+
+      if (tag != null) {
+        var $option = self.option(tag);
+        $option.attr('data-select2-tag', true);
+
+        self.addOptions([$option]);
+
+        self.insertTag(data, tag);
+      }
+
+      obj.results = data;
+
+      callback(obj);
+    }
+
+    decorated.call(this, params, wrapper);
+  };
+
+  Tags.prototype.createTag = function (decorated, params) {
+    var term = $.trim(params.term);
+
+    if (term === '') {
+      return null;
+    }
+
+    return {
+      id: term,
+      text: term
+    };
+  };
+
+  Tags.prototype.insertTag = function (_, data, tag) {
+    data.unshift(tag);
+  };
+
+  Tags.prototype._removeOldTags = function (_) {
+    var tag = this._lastTag;
+
+    var $options = this.$element.find('option[data-select2-tag]');
+
+    $options.each(function () {
+      if (this.selected) {
+        return;
+      }
+
+      $(this).remove();
+    });
+  };
+
+  return Tags;
+});
+
+S2.define('select2/data/tokenizer',[
+  'jquery'
+], function ($) {
+  function Tokenizer (decorated, $element, options) {
+    var tokenizer = options.get('tokenizer');
+
+    if (tokenizer !== undefined) {
+      this.tokenizer = tokenizer;
+    }
+
+    decorated.call(this, $element, options);
+  }
+
+  Tokenizer.prototype.bind = function (decorated, container, $container) {
+    decorated.call(this, container, $container);
+
+    this.$search =  container.dropdown.$search || container.selection.$search ||
+      $container.find('.select2-search__field');
+  };
+
+  Tokenizer.prototype.query = function (decorated, params, callback) {
+    var self = this;
+
+    function createAndSelect (data) {
+      // Normalize the data object so we can use it for checks
+      var item = self._normalizeItem(data);
+
+      // Check if the data object already exists as a tag
+      // Select it if it doesn't
+      var $existingOptions = self.$element.find('option').filter(function () {
+        return $(this).val() === item.id;
+      });
+
+      // If an existing option wasn't found for it, create the option
+      if (!$existingOptions.length) {
+        var $option = self.option(item);
+        $option.attr('data-select2-tag', true);
+
+        self._removeOldTags();
+        self.addOptions([$option]);
+      }
+
+      // Select the item, now that we know there is an option for it
+      select(item);
+    }
+
+    function select (data) {
+      self.trigger('select', {
+        data: data
+      });
+    }
+
+    params.term = params.term || '';
+
+    var tokenData = this.tokenizer(params, this.options, createAndSelect);
+
+    if (tokenData.term !== params.term) {
+      // Replace the search term if we have the search box
+      if (this.$search.length) {
+        this.$search.val(tokenData.term);
+        this.$search.focus();
+      }
+
+      params.term = tokenData.term;
+    }
+
+    decorated.call(this, params, callback);
+  };
+
+  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {
+    var separators = options.get('tokenSeparators') || [];
+    var term = params.term;
+    var i = 0;
+
+    var createTag = this.createTag || function (params) {
+      return {
+        id: params.term,
+        text: params.term
+      };
+    };
+
+    while (i < term.length) {
+      var termChar = term[i];
+
+      if ($.inArray(termChar, separators) === -1) {
+        i++;
+
+        continue;
+      }
+
+      var part = term.substr(0, i);
+      var partParams = $.extend({}, params, {
+        term: part
+      });
+
+      var data = createTag(partParams);
+
+      if (data == null) {
+        i++;
+        continue;
+      }
+
+      callback(data);
+
+      // Reset the term to not include the tokenized portion
+      term = term.substr(i + 1) || '';
+      i = 0;
+    }
+
+    return {
+      term: term
+    };
+  };
+
+  return Tokenizer;
+});
+
+S2.define('select2/data/minimumInputLength',[
+
+], function () {
+  function MinimumInputLength (decorated, $e, options) {
+    this.minimumInputLength = options.get('minimumInputLength');
+
+    decorated.call(this, $e, options);
+  }
+
+  MinimumInputLength.prototype.query = function (decorated, params, callback) {
+    params.term = params.term || '';
+
+    if (params.term.length < this.minimumInputLength) {
+      this.trigger('results:message', {
+        message: 'inputTooShort',
+        args: {
+          minimum: this.minimumInputLength,
+          input: params.term,
+          params: params
+        }
+      });
+
+      return;
+    }
+
+    decorated.call(this, params, callback);
+  };
+
+  return MinimumInputLength;
+});
+
+S2.define('select2/data/maximumInputLength',[
+
+], function () {
+  function MaximumInputLength (decorated, $e, options) {
+    this.maximumInputLength = options.get('maximumInputLength');
+
+    decorated.call(this, $e, options);
+  }
+
+  MaximumInputLength.prototype.query = function (decorated, params, callback) {
+    params.term = params.term || '';
+
+    if (this.maximumInputLength > 0 &&
+        params.term.length > this.maximumInputLength) {
+      this.trigger('results:message', {
+        message: 'inputTooLong',
+        args: {
+          maximum: this.maximumInputLength,
+          input: params.term,
+          params: params
+        }
+      });
+
+      return;
+    }
+
+    decorated.call(this, params, callback);
+  };
+
+  return MaximumInputLength;
+});
+
+S2.define('select2/data/maximumSelectionLength',[
+
+], function (){
+  function MaximumSelectionLength (decorated, $e, options) {
+    this.maximumSelectionLength = options.get('maximumSelectionLength');
+
+    decorated.call(this, $e, options);
+  }
+
+  MaximumSelectionLength.prototype.query =
+    function (decorated, params, callback) {
+      var self = this;
+
+      this.current(function (currentData) {
+        var count = currentData != null ? currentData.length : 0;
+        if (self.maximumSelectionLength > 0 &&
+          count >= self.maximumSelectionLength) {
+          self.trigger('results:message', {
+            message: 'maximumSelected',
+            args: {
+              maximum: self.maximumSelectionLength
+            }
+          });
+          return;
+        }
+        decorated.call(self, params, callback);
+      });
+  };
+
+  return MaximumSelectionLength;
+});
+
+S2.define('select2/dropdown',[
+  'jquery',
+  './utils'
+], function ($, Utils) {
+  function Dropdown ($element, options) {
+    this.$element = $element;
+    this.options = options;
+
+    Dropdown.__super__.constructor.call(this);
+  }
+
+  Utils.Extend(Dropdown, Utils.Observable);
+
+  Dropdown.prototype.render = function () {
+    var $dropdown = $(
+      '<span class="select2-dropdown">' +
+        '<span class="select2-results"></span>' +
+      '</span>'
+    );
+
+    $dropdown.attr('dir', this.options.get('dir'));
+
+    this.$dropdown = $dropdown;
+
+    return $dropdown;
+  };
+
+  Dropdown.prototype.bind = function () {
+    // Should be implemented in subclasses
+  };
+
+  Dropdown.prototype.position = function ($dropdown, $container) {
+    // Should be implemented in subclasses
+  };
+
+  Dropdown.prototype.destroy = function () {
+    // Remove the dropdown from the DOM
+    this.$dropdown.remove();
+  };
+
+  return Dropdown;
+});
+
+S2.define('select2/dropdown/search',[
+  'jquery',
+  '../utils'
+], function ($, Utils) {
+  function Search () { }
+
+  Search.prototype.render = function (decorated) {
+    var $rendered = decorated.call(this);
+
+    var $search = $(
+      '<span class="select2-search select2-search--dropdown">' +
+        '<input class="select2-search__field" type="search" tabindex="-1"' +
+        ' autocomplete="off" autocorrect="off" autocapitalize="none"' +
+        ' spellcheck="false" role="textbox" />' +
+      '</span>'
+    );
+
+    this.$searchContainer = $search;
+    this.$search = $search.find('input');
+
+    $rendered.prepend($search);
+
+    return $rendered;
+  };
+
+  Search.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+
+    decorated.call(this, container, $container);
+
+    this.$search.on('keydown', function (evt) {
+      self.trigger('keypress', evt);
+
+      self._keyUpPrevented = evt.isDefaultPrevented();
+    });
+
+    // Workaround for browsers which do not support the `input` event
+    // This will prevent double-triggering of events for browsers which support
+    // both the `keyup` and `input` events.
+    this.$search.on('input', function (evt) {
+      // Unbind the duplicated `keyup` event
+      $(this).off('keyup');
+    });
+
+    this.$search.on('keyup input', function (evt) {
+      self.handleSearch(evt);
+    });
+
+    container.on('open', function () {
+      self.$search.attr('tabindex', 0);
+
+      self.$search.focus();
+
+      window.setTimeout(function () {
+        self.$search.focus();
+      }, 0);
+    });
+
+    container.on('close', function () {
+      self.$search.attr('tabindex', -1);
+
+      self.$search.val('');
+      self.$search.blur();
+    });
+
+    container.on('focus', function () {
+      if (!container.isOpen()) {
+        self.$search.focus();
+      }
+    });
+
+    container.on('results:all', function (params) {
+      if (params.query.term == null || params.query.term === '') {
+        var showSearch = self.showSearch(params);
+
+        if (showSearch) {
+          self.$searchContainer.removeClass('select2-search--hide');
+        } else {
+          self.$searchContainer.addClass('select2-search--hide');
+        }
+      }
+    });
+  };
+
+  Search.prototype.handleSearch = function (evt) {
+    if (!this._keyUpPrevented) {
+      var input = this.$search.val();
+
+      this.trigger('query', {
+        term: input
+      });
+    }
+
+    this._keyUpPrevented = false;
+  };
+
+  Search.prototype.showSearch = function (_, params) {
+    return true;
+  };
+
+  return Search;
+});
+
+S2.define('select2/dropdown/hidePlaceholder',[
+
+], function () {
+  function HidePlaceholder (decorated, $element, options, dataAdapter) {
+    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));
+
+    decorated.call(this, $element, options, dataAdapter);
+  }
+
+  HidePlaceholder.prototype.append = function (decorated, data) {
+    data.results = this.removePlaceholder(data.results);
+
+    decorated.call(this, data);
+  };
+
+  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {
+    if (typeof placeholder === 'string') {
+      placeholder = {
+        id: '',
+        text: placeholder
+      };
+    }
+
+    return placeholder;
+  };
+
+  HidePlaceholder.prototype.removePlaceholder = function (_, data) {
+    var modifiedData = data.slice(0);
+
+    for (var d = data.length - 1; d >= 0; d--) {
+      var item = data[d];
+
+      if (this.placeholder.id === item.id) {
+        modifiedData.splice(d, 1);
+      }
+    }
+
+    return modifiedData;
+  };
+
+  return HidePlaceholder;
+});
+
+S2.define('select2/dropdown/infiniteScroll',[
+  'jquery'
+], function ($) {
+  function InfiniteScroll (decorated, $element, options, dataAdapter) {
+    this.lastParams = {};
+
+    decorated.call(this, $element, options, dataAdapter);
+
+    this.$loadingMore = this.createLoadingMore();
+    this.loading = false;
+  }
+
+  InfiniteScroll.prototype.append = function (decorated, data) {
+    this.$loadingMore.remove();
+    this.loading = false;
+
+    decorated.call(this, data);
+
+    if (this.showLoadingMore(data)) {
+      this.$results.append(this.$loadingMore);
+    }
+  };
+
+  InfiniteScroll.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+
+    decorated.call(this, container, $container);
+
+    container.on('query', function (params) {
+      self.lastParams = params;
+      self.loading = true;
+    });
+
+    container.on('query:append', function (params) {
+      self.lastParams = params;
+      self.loading = true;
+    });
+
+    this.$results.on('scroll', function () {
+      var isLoadMoreVisible = $.contains(
+        document.documentElement,
+        self.$loadingMore[0]
+      );
+
+      if (self.loading || !isLoadMoreVisible) {
+        return;
+      }
+
+      var currentOffset = self.$results.offset().top +
+        self.$results.outerHeight(false);
+      var loadingMoreOffset = self.$loadingMore.offset().top +
+        self.$loadingMore.outerHeight(false);
+
+      if (currentOffset + 50 >= loadingMoreOffset) {
+        self.loadMore();
+      }
+    });
+  };
+
+  InfiniteScroll.prototype.loadMore = function () {
+    this.loading = true;
+
+    var params = $.extend({}, {page: 1}, this.lastParams);
+
+    params.page++;
+
+    this.trigger('query:append', params);
+  };
+
+  InfiniteScroll.prototype.showLoadingMore = function (_, data) {
+    return data.pagination && data.pagination.more;
+  };
+
+  InfiniteScroll.prototype.createLoadingMore = function () {
+    var $option = $(
+      '<li ' +
+      'class="select2-results__option select2-results__option--load-more"' +
+      'role="treeitem" aria-disabled="true"></li>'
+    );
+
+    var message = this.options.get('translations').get('loadingMore');
+
+    $option.html(message(this.lastParams));
+
+    return $option;
+  };
+
+  return InfiniteScroll;
+});
+
+S2.define('select2/dropdown/attachBody',[
+  'jquery',
+  '../utils'
+], function ($, Utils) {
+  function AttachBody (decorated, $element, options) {
+    this.$dropdownParent = options.get('dropdownParent') || $(document.body);
+
+    decorated.call(this, $element, options);
+  }
+
+  AttachBody.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+
+    var setupResultsEvents = false;
+
+    decorated.call(this, container, $container);
+
+    container.on('open', function () {
+      self._showDropdown();
+      self._attachPositioningHandler(container);
+
+      if (!setupResultsEvents) {
+        setupResultsEvents = true;
+
+        container.on('results:all', function () {
+          self._positionDropdown();
+          self._resizeDropdown();
+        });
+
+        container.on('results:append', function () {
+          self._positionDropdown();
+          self._resizeDropdown();
+        });
+      }
+    });
+
+    container.on('close', function () {
+      self._hideDropdown();
+      self._detachPositioningHandler(container);
+    });
+
+    this.$dropdownContainer.on('mousedown', function (evt) {
+      evt.stopPropagation();
+    });
+  };
+
+  AttachBody.prototype.destroy = function (decorated) {
+    decorated.call(this);
+
+    this.$dropdownContainer.remove();
+  };
+
+  AttachBody.prototype.position = function (decorated, $dropdown, $container) {
+    // Clone all of the container classes
+    $dropdown.attr('class', $container.attr('class'));
+
+    $dropdown.removeClass('select2');
+    $dropdown.addClass('select2-container--open');
+
+    $dropdown.css({
+      position: 'absolute',
+      top: -999999
+    });
+
+    this.$container = $container;
+  };
+
+  AttachBody.prototype.render = function (decorated) {
+    var $container = $('<span></span>');
+
+    var $dropdown = decorated.call(this);
+    $container.append($dropdown);
+
+    this.$dropdownContainer = $container;
+
+    return $container;
+  };
+
+  AttachBody.prototype._hideDropdown = function (decorated) {
+    this.$dropdownContainer.detach();
+  };
+
+  AttachBody.prototype._attachPositioningHandler =
+      function (decorated, container) {
+    var self = this;
+
+    var scrollEvent = 'scroll.select2.' + container.id;
+    var resizeEvent = 'resize.select2.' + container.id;
+    var orientationEvent = 'orientationchange.select2.' + container.id;
+
+    var $watchers = this.$container.parents().filter(Utils.hasScroll);
+    $watchers.each(function () {
+      Utils.StoreData(this, 'select2-scroll-position', {
+        x: $(this).scrollLeft(),
+        y: $(this).scrollTop()
+      });
+    });
+
+    $watchers.on(scrollEvent, function (ev) {
+      var position = Utils.GetData(this, 'select2-scroll-position');
+      $(this).scrollTop(position.y);
+    });
+
+    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,
+      function (e) {
+      self._positionDropdown();
+      self._resizeDropdown();
+    });
+  };
+
+  AttachBody.prototype._detachPositioningHandler =
+      function (decorated, container) {
+    var scrollEvent = 'scroll.select2.' + container.id;
+    var resizeEvent = 'resize.select2.' + container.id;
+    var orientationEvent = 'orientationchange.select2.' + container.id;
+
+    var $watchers = this.$container.parents().filter(Utils.hasScroll);
+    $watchers.off(scrollEvent);
+
+    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);
+  };
+
+  AttachBody.prototype._positionDropdown = function () {
+    var $window = $(window);
+
+    var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');
+    var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');
+
+    var newDirection = null;
+
+    var offset = this.$container.offset();
+
+    offset.bottom = offset.top + this.$container.outerHeight(false);
+
+    var container = {
+      height: this.$container.outerHeight(false)
+    };
+
+    container.top = offset.top;
+    container.bottom = offset.top + container.height;
+
+    var dropdown = {
+      height: this.$dropdown.outerHeight(false)
+    };
+
+    var viewport = {
+      top: $window.scrollTop(),
+      bottom: $window.scrollTop() + $window.height()
+    };
+
+    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);
+    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);
+
+    var css = {
+      left: offset.left,
+      top: container.bottom
+    };
+
+    // Determine what the parent element is to use for calculating the offset
+    var $offsetParent = this.$dropdownParent;
+
+    // For statically positioned elements, we need to get the element
+    // that is determining the offset
+    if ($offsetParent.css('position') === 'static') {
+      $offsetParent = $offsetParent.offsetParent();
+    }
+
+    var parentOffset = $offsetParent.offset();
+
+    css.top -= parentOffset.top;
+    css.left -= parentOffset.left;
+
+    if (!isCurrentlyAbove && !isCurrentlyBelow) {
+      newDirection = 'below';
+    }
+
+    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {
+      newDirection = 'above';
+    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {
+      newDirection = 'below';
+    }
+
+    if (newDirection == 'above' ||
+      (isCurrentlyAbove && newDirection !== 'below')) {
+      css.top = container.top - parentOffset.top - dropdown.height;
+    }
+
+    if (newDirection != null) {
+      this.$dropdown
+        .removeClass('select2-dropdown--below select2-dropdown--above')
+        .addClass('select2-dropdown--' + newDirection);
+      this.$container
+        .removeClass('select2-container--below select2-container--above')
+        .addClass('select2-container--' + newDirection);
+    }
+
+    this.$dropdownContainer.css(css);
+  };
+
+  AttachBody.prototype._resizeDropdown = function () {
+    var css = {
+      width: this.$container.outerWidth(false) + 'px'
+    };
+
+    if (this.options.get('dropdownAutoWidth')) {
+      css.minWidth = css.width;
+      css.position = 'relative';
+      css.width = 'auto';
+    }
+
+    this.$dropdown.css(css);
+  };
+
+  AttachBody.prototype._showDropdown = function (decorated) {
+    this.$dropdownContainer.appendTo(this.$dropdownParent);
+
+    this._positionDropdown();
+    this._resizeDropdown();
+  };
+
+  return AttachBody;
+});
+
+S2.define('select2/dropdown/minimumResultsForSearch',[
+
+], function () {
+  function countResults (data) {
+    var count = 0;
+
+    for (var d = 0; d < data.length; d++) {
+      var item = data[d];
+
+      if (item.children) {
+        count += countResults(item.children);
+      } else {
+        count++;
+      }
+    }
+
+    return count;
+  }
+
+  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {
+    this.minimumResultsForSearch = options.get('minimumResultsForSearch');
+
+    if (this.minimumResultsForSearch < 0) {
+      this.minimumResultsForSearch = Infinity;
+    }
+
+    decorated.call(this, $element, options, dataAdapter);
+  }
+
+  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {
+    if (countResults(params.data.results) < this.minimumResultsForSearch) {
+      return false;
+    }
+
+    return decorated.call(this, params);
+  };
+
+  return MinimumResultsForSearch;
+});
+
+S2.define('select2/dropdown/selectOnClose',[
+  '../utils'
+], function (Utils) {
+  function SelectOnClose () { }
+
+  SelectOnClose.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+
+    decorated.call(this, container, $container);
+
+    container.on('close', function (params) {
+      self._handleSelectOnClose(params);
+    });
+  };
+
+  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {
+    if (params && params.originalSelect2Event != null) {
+      var event = params.originalSelect2Event;
+
+      // Don't select an item if the close event was triggered from a select or
+      // unselect event
+      if (event._type === 'select' || event._type === 'unselect') {
+        return;
+      }
+    }
+
+    var $highlightedResults = this.getHighlightedResults();
+
+    // Only select highlighted results
+    if ($highlightedResults.length < 1) {
+      return;
+    }
+
+    var data = Utils.GetData($highlightedResults[0], 'data');
+
+    // Don't re-select already selected resulte
+    if (
+      (data.element != null && data.element.selected) ||
+      (data.element == null && data.selected)
+    ) {
+      return;
+    }
+
+    this.trigger('select', {
+        data: data
+    });
+  };
+
+  return SelectOnClose;
+});
+
+S2.define('select2/dropdown/closeOnSelect',[
+
+], function () {
+  function CloseOnSelect () { }
+
+  CloseOnSelect.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+
+    decorated.call(this, container, $container);
+
+    container.on('select', function (evt) {
+      self._selectTriggered(evt);
+    });
+
+    container.on('unselect', function (evt) {
+      self._selectTriggered(evt);
+    });
+  };
+
+  CloseOnSelect.prototype._selectTriggered = function (_, evt) {
+    var originalEvent = evt.originalEvent;
+
+    // Don't close if the control key is being held
+    if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {
+      return;
+    }
+
+    this.trigger('close', {
+      originalEvent: originalEvent,
+      originalSelect2Event: evt
+    });
+  };
+
+  return CloseOnSelect;
+});
+
+S2.define('select2/i18n/en',[],function () {
+  // English
+  return {
+    errorLoading: function () {
+      return '鏃犳硶杞藉叆缁撴灉';
+    },
+    inputTooLong: function (args) {
+      var overChars = args.input.length - args.maximum;
+
+      var message = '璇峰垹闄�' + overChars + '涓瓧绗�';
+
+      if (overChars != 1) {
+        message += 's';
+      }
+
+      return message;
+    },
+    inputTooShort: function (args) {
+      var remainingChars = args.minimum - args.input.length;
+
+      var message = '璇峰啀杈撳叆鑷冲皯' + remainingChars + '涓瓧绗�';
+
+      return message;
+    },
+    loadingMore: function () {
+      return '杞藉叆鏇村缁撴灉鈥�';
+    },
+    maximumSelected: function (args) {
+      var message = '鏈�澶氬彧鑳�' + args.maximum + '涓�夐」';
+
+      if (args.maximum != 1) {
+        message += 's';
+      }
+
+      return message;
+    },
+    noResults: function () {
+      return '鏈壘鍒扮粨鏋�';
+    },
+    searching: function () {
+      return '鎼滅储涓��';
+    },
+    removeAllItems: function () {
+      return '鍒犻櫎鎵�鏈夐」鐩�';
+    }
+  };
+});
+
+S2.define('select2/defaults',[
+  'jquery',
+  'require',
+
+  './results',
+
+  './selection/single',
+  './selection/multiple',
+  './selection/placeholder',
+  './selection/allowClear',
+  './selection/search',
+  './selection/eventRelay',
+
+  './utils',
+  './translation',
+  './diacritics',
+
+  './data/select',
+  './data/array',
+  './data/ajax',
+  './data/tags',
+  './data/tokenizer',
+  './data/minimumInputLength',
+  './data/maximumInputLength',
+  './data/maximumSelectionLength',
+
+  './dropdown',
+  './dropdown/search',
+  './dropdown/hidePlaceholder',
+  './dropdown/infiniteScroll',
+  './dropdown/attachBody',
+  './dropdown/minimumResultsForSearch',
+  './dropdown/selectOnClose',
+  './dropdown/closeOnSelect',
+
+  './i18n/en'
+], function ($, require,
+
+             ResultsList,
+
+             SingleSelection, MultipleSelection, Placeholder, AllowClear,
+             SelectionSearch, EventRelay,
+
+             Utils, Translation, DIACRITICS,
+
+             SelectData, ArrayData, AjaxData, Tags, Tokenizer,
+             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,
+
+             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,
+             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,
+
+             EnglishTranslation) {
+  function Defaults () {
+    this.reset();
+  }
+
+  Defaults.prototype.apply = function (options) {
+    options = $.extend(true, {}, this.defaults, options);
+
+    if (options.dataAdapter == null) {
+      if (options.ajax != null) {
+        options.dataAdapter = AjaxData;
+      } else if (options.data != null) {
+        options.dataAdapter = ArrayData;
+      } else {
+        options.dataAdapter = SelectData;
+      }
+
+      if (options.minimumInputLength > 0) {
+        options.dataAdapter = Utils.Decorate(
+          options.dataAdapter,
+          MinimumInputLength
+        );
+      }
+
+      if (options.maximumInputLength > 0) {
+        options.dataAdapter = Utils.Decorate(
+          options.dataAdapter,
+          MaximumInputLength
+        );
+      }
+
+      if (options.maximumSelectionLength > 0) {
+        options.dataAdapter = Utils.Decorate(
+          options.dataAdapter,
+          MaximumSelectionLength
+        );
+      }
+
+      if (options.tags) {
+        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);
+      }
+
+      if (options.tokenSeparators != null || options.tokenizer != null) {
+        options.dataAdapter = Utils.Decorate(
+          options.dataAdapter,
+          Tokenizer
+        );
+      }
+
+      if (options.query != null) {
+        var Query = require(options.amdBase + 'compat/query');
+
+        options.dataAdapter = Utils.Decorate(
+          options.dataAdapter,
+          Query
+        );
+      }
+
+      if (options.initSelection != null) {
+        var InitSelection = require(options.amdBase + 'compat/initSelection');
+
+        options.dataAdapter = Utils.Decorate(
+          options.dataAdapter,
+          InitSelection
+        );
+      }
+    }
+
+    if (options.resultsAdapter == null) {
+      options.resultsAdapter = ResultsList;
+
+      if (options.ajax != null) {
+        options.resultsAdapter = Utils.Decorate(
+          options.resultsAdapter,
+          InfiniteScroll
+        );
+      }
+
+      if (options.placeholder != null) {
+        options.resultsAdapter = Utils.Decorate(
+          options.resultsAdapter,
+          HidePlaceholder
+        );
+      }
+
+      if (options.selectOnClose) {
+        options.resultsAdapter = Utils.Decorate(
+          options.resultsAdapter,
+          SelectOnClose
+        );
+      }
+    }
+
+    if (options.dropdownAdapter == null) {
+      if (options.multiple) {
+        options.dropdownAdapter = Dropdown;
+      } else {
+        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);
+
+        options.dropdownAdapter = SearchableDropdown;
+      }
+
+      if (options.minimumResultsForSearch !== 0) {
+        options.dropdownAdapter = Utils.Decorate(
+          options.dropdownAdapter,
+          MinimumResultsForSearch
+        );
+      }
+
+      if (options.closeOnSelect) {
+        options.dropdownAdapter = Utils.Decorate(
+          options.dropdownAdapter,
+          CloseOnSelect
+        );
+      }
+
+      if (
+        options.dropdownCssClass != null ||
+        options.dropdownCss != null ||
+        options.adaptDropdownCssClass != null
+      ) {
+        var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');
+
+        options.dropdownAdapter = Utils.Decorate(
+          options.dropdownAdapter,
+          DropdownCSS
+        );
+      }
+
+      options.dropdownAdapter = Utils.Decorate(
+        options.dropdownAdapter,
+        AttachBody
+      );
+    }
+
+    if (options.selectionAdapter == null) {
+      if (options.multiple) {
+        options.selectionAdapter = MultipleSelection;
+      } else {
+        options.selectionAdapter = SingleSelection;
+      }
+
+      // Add the placeholder mixin if a placeholder was specified
+      if (options.placeholder != null) {
+        options.selectionAdapter = Utils.Decorate(
+          options.selectionAdapter,
+          Placeholder
+        );
+      }
+
+      if (options.allowClear) {
+        options.selectionAdapter = Utils.Decorate(
+          options.selectionAdapter,
+          AllowClear
+        );
+      }
+
+      if (options.multiple) {
+        options.selectionAdapter = Utils.Decorate(
+          options.selectionAdapter,
+          SelectionSearch
+        );
+      }
+
+      if (
+        options.containerCssClass != null ||
+        options.containerCss != null ||
+        options.adaptContainerCssClass != null
+      ) {
+        var ContainerCSS = require(options.amdBase + 'compat/containerCss');
+
+        options.selectionAdapter = Utils.Decorate(
+          options.selectionAdapter,
+          ContainerCSS
+        );
+      }
+
+      options.selectionAdapter = Utils.Decorate(
+        options.selectionAdapter,
+        EventRelay
+      );
+    }
+
+    if (typeof options.language === 'string') {
+      // Check if the language is specified with a region
+      if (options.language.indexOf('-') > 0) {
+        // Extract the region information if it is included
+        var languageParts = options.language.split('-');
+        var baseLanguage = languageParts[0];
+
+        options.language = [options.language, baseLanguage];
+      } else {
+        options.language = [options.language];
+      }
+    }
+
+    if ($.isArray(options.language)) {
+      var languages = new Translation();
+      options.language.push('en');
+
+      var languageNames = options.language;
+
+      for (var l = 0; l < languageNames.length; l++) {
+        var name = languageNames[l];
+        var language = {};
+
+        try {
+          // Try to load it with the original name
+          language = Translation.loadPath(name);
+        } catch (e) {
+          try {
+            // If we couldn't load it, check if it wasn't the full path
+            name = this.defaults.amdLanguageBase + name;
+            language = Translation.loadPath(name);
+          } catch (ex) {
+            // The translation could not be loaded at all. Sometimes this is
+            // because of a configuration problem, other times this can be
+            // because of how Select2 helps load all possible translation files.
+            if (options.debug && window.console && console.warn) {
+              console.warn(
+                'Select2: The language file for "' + name + '" could not be ' +
+                'automatically loaded. A fallback will be used instead.'
+              );
+            }
+
+            continue;
+          }
+        }
+
+        languages.extend(language);
+      }
+
+      options.translations = languages;
+    } else {
+      var baseTranslation = Translation.loadPath(
+        this.defaults.amdLanguageBase + 'en'
+      );
+      var customTranslation = new Translation(options.language);
+
+      customTranslation.extend(baseTranslation);
+
+      options.translations = customTranslation;
+    }
+
+    return options;
+  };
+
+  Defaults.prototype.reset = function () {
+    function stripDiacritics (text) {
+      // Used 'uni range + named function' from http://jsperf.com/diacritics/18
+      function match(a) {
+        return DIACRITICS[a] || a;
+      }
+
+      return text.replace(/[^\u0000-\u007E]/g, match);
+    }
+
+    function matcher (params, data) {
+      // Always return the object if there is nothing to compare
+      if ($.trim(params.term) === '') {
+        return data;
+      }
+
+      // Do a recursive check for options with children
+      if (data.children && data.children.length > 0) {
+        // Clone the data object if there are children
+        // This is required as we modify the object to remove any non-matches
+        var match = $.extend(true, {}, data);
+
+        // Check each child of the option
+        for (var c = data.children.length - 1; c >= 0; c--) {
+          var child = data.children[c];
+
+          var matches = matcher(params, child);
+
+          // If there wasn't a match, remove the object in the array
+          if (matches == null) {
+            match.children.splice(c, 1);
+          }
+        }
+
+        // If any children matched, return the new object
+        if (match.children.length > 0) {
+          return match;
+        }
+
+        // If there were no matching children, check just the plain object
+        return matcher(params, match);
+      }
+
+      var original = stripDiacritics(data.text).toUpperCase();
+      var term = stripDiacritics(params.term).toUpperCase();
+
+      // Check if the text contains the term
+      if (original.indexOf(term) > -1) {
+        return data;
+      }
+
+      // If it doesn't contain the term, don't return anything
+      return null;
+    }
+
+    this.defaults = {
+      amdBase: './',
+      amdLanguageBase: './i18n/',
+      closeOnSelect: true,
+      debug: false,
+      dropdownAutoWidth: false,
+      escapeMarkup: Utils.escapeMarkup,
+      language: EnglishTranslation,
+      matcher: matcher,
+      minimumInputLength: 0,
+      maximumInputLength: 0,
+      maximumSelectionLength: 0,
+      minimumResultsForSearch: 0,
+      selectOnClose: false,
+      scrollAfterSelect: false,
+      sorter: function (data) {
+        return data;
+      },
+      templateResult: function (result) {
+        return result.text;
+      },
+      templateSelection: function (selection) {
+        return selection.text;
+      },
+      theme: 'default',
+      width: '100%'
+    };
+  };
+
+  Defaults.prototype.set = function (key, value) {
+    var camelKey = $.camelCase(key);
+
+    var data = {};
+    data[camelKey] = value;
+
+    var convertedData = Utils._convertData(data);
+
+    $.extend(true, this.defaults, convertedData);
+  };
+
+  var defaults = new Defaults();
+
+  return defaults;
+});
+
+S2.define('select2/options',[
+  'require',
+  'jquery',
+  './defaults',
+  './utils'
+], function (require, $, Defaults, Utils) {
+  function Options (options, $element) {
+    this.options = options;
+
+    if ($element != null) {
+      this.fromElement($element);
+    }
+
+    this.options = Defaults.apply(this.options);
+
+    if ($element && $element.is('input')) {
+      var InputCompat = require(this.get('amdBase') + 'compat/inputData');
+
+      this.options.dataAdapter = Utils.Decorate(
+        this.options.dataAdapter,
+        InputCompat
+      );
+    }
+  }
+
+  Options.prototype.fromElement = function ($e) {
+    var excludedData = ['select2'];
+
+    if (this.options.multiple == null) {
+      this.options.multiple = $e.prop('multiple');
+    }
+
+    if (this.options.disabled == null) {
+      this.options.disabled = $e.prop('disabled');
+    }
+
+    if (this.options.language == null) {
+      if ($e.prop('lang')) {
+        this.options.language = $e.prop('lang').toLowerCase();
+      } else if ($e.closest('[lang]').prop('lang')) {
+        this.options.language = $e.closest('[lang]').prop('lang');
+      }
+    }
+
+    if (this.options.dir == null) {
+      if ($e.prop('dir')) {
+        this.options.dir = $e.prop('dir');
+      } else if ($e.closest('[dir]').prop('dir')) {
+        this.options.dir = $e.closest('[dir]').prop('dir');
+      } else {
+        this.options.dir = 'ltr';
+      }
+    }
+
+    $e.prop('disabled', this.options.disabled);
+    $e.prop('multiple', this.options.multiple);
+
+    if (Utils.GetData($e[0], 'select2Tags')) {
+      if (this.options.debug && window.console && console.warn) {
+        console.warn(
+          'Select2: The `data-select2-tags` attribute has been changed to ' +
+          'use the `data-data` and `data-tags="true"` attributes and will be ' +
+          'removed in future versions of Select2.'
+        );
+      }
+
+      Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));
+      Utils.StoreData($e[0], 'tags', true);
+    }
+
+    if (Utils.GetData($e[0], 'ajaxUrl')) {
+      if (this.options.debug && window.console && console.warn) {
+        console.warn(
+          'Select2: The `data-ajax-url` attribute has been changed to ' +
+          '`data-ajax--url` and support for the old attribute will be removed' +
+          ' in future versions of Select2.'
+        );
+      }
+
+      $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));
+      Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));
+    }
+
+    var dataset = {};
+
+    function upperCaseLetter(_, letter) {
+      return letter.toUpperCase();
+    }
+
+    // Pre-load all of the attributes which are prefixed with `data-`
+    for (var attr = 0; attr < $e[0].attributes.length; attr++) {
+      var attributeName = $e[0].attributes[attr].name;
+      var prefix = 'data-';
+
+      if (attributeName.substr(0, prefix.length) == prefix) {
+        // Get the contents of the attribute after `data-`
+        var dataName = attributeName.substring(prefix.length);
+
+        // Get the data contents from the consistent source
+        // This is more than likely the jQuery data helper
+        var dataValue = Utils.GetData($e[0], dataName);
+
+        // camelCase the attribute name to match the spec
+        var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);
+
+        // Store the data attribute contents into the dataset since
+        dataset[camelDataName] = dataValue;
+      }
+    }
+
+    // Prefer the element's `dataset` attribute if it exists
+    // jQuery 1.x does not correctly handle data attributes with multiple dashes
+    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {
+      dataset = $.extend(true, {}, $e[0].dataset, dataset);
+    }
+
+    // Prefer our internal data cache if it exists
+    var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);
+
+    data = Utils._convertData(data);
+
+    for (var key in data) {
+      if ($.inArray(key, excludedData) > -1) {
+        continue;
+      }
+
+      if ($.isPlainObject(this.options[key])) {
+        $.extend(this.options[key], data[key]);
+      } else {
+        this.options[key] = data[key];
+      }
+    }
+
+    return this;
+  };
+
+  Options.prototype.get = function (key) {
+    return this.options[key];
+  };
+
+  Options.prototype.set = function (key, val) {
+    this.options[key] = val;
+  };
+
+  return Options;
+});
+
+S2.define('select2/core',[
+  'jquery',
+  './options',
+  './utils',
+  './keys'
+], function ($, Options, Utils, KEYS) {
+  var Select2 = function ($element, options) {
+    if (Utils.GetData($element[0], 'select2') != null) {
+      Utils.GetData($element[0], 'select2').destroy();
+    }
+
+    this.$element = $element;
+
+    this.id = this._generateId($element);
+
+    options = options || {};
+
+    this.options = new Options(options, $element);
+
+    Select2.__super__.constructor.call(this);
+
+    // Set up the tabindex
+
+    var tabindex = $element.attr('tabindex') || 0;
+    Utils.StoreData($element[0], 'old-tabindex', tabindex);
+    $element.attr('tabindex', '-1');
+
+    // Set up containers and adapters
+
+    var DataAdapter = this.options.get('dataAdapter');
+    this.dataAdapter = new DataAdapter($element, this.options);
+
+    var $container = this.render();
+
+    this._placeContainer($container);
+
+    var SelectionAdapter = this.options.get('selectionAdapter');
+    this.selection = new SelectionAdapter($element, this.options);
+    this.$selection = this.selection.render();
+
+    this.selection.position(this.$selection, $container);
+
+    var DropdownAdapter = this.options.get('dropdownAdapter');
+    this.dropdown = new DropdownAdapter($element, this.options);
+    this.$dropdown = this.dropdown.render();
+
+    this.dropdown.position(this.$dropdown, $container);
+
+    var ResultsAdapter = this.options.get('resultsAdapter');
+    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);
+    this.$results = this.results.render();
+
+    this.results.position(this.$results, this.$dropdown);
+
+    // Bind events
+
+    var self = this;
+
+    // Bind the container to all of the adapters
+    this._bindAdapters();
+
+    // Register any DOM event handlers
+    this._registerDomEvents();
+
+    // Register any internal event handlers
+    this._registerDataEvents();
+    this._registerSelectionEvents();
+    this._registerDropdownEvents();
+    this._registerResultsEvents();
+    this._registerEvents();
+
+    // Set the initial state
+    this.dataAdapter.current(function (initialData) {
+      self.trigger('selection:update', {
+        data: initialData
+      });
+    });
+
+    // Hide the original select
+    $element.addClass('select2-hidden-accessible');
+    $element.attr('aria-hidden', 'true');
+
+    // Synchronize any monitored attributes
+    this._syncAttributes();
+
+    Utils.StoreData($element[0], 'select2', this);
+
+    // Ensure backwards compatibility with $element.data('select2').
+    $element.data('select2', this);
+  };
+
+  Utils.Extend(Select2, Utils.Observable);
+
+  Select2.prototype._generateId = function ($element) {
+    var id = '';
+
+    if ($element.attr('id') != null) {
+      id = $element.attr('id');
+    } else if ($element.attr('name') != null) {
+      id = $element.attr('name') + '-' + Utils.generateChars(2);
+    } else {
+      id = Utils.generateChars(4);
+    }
+
+    id = id.replace(/(:|\.|\[|\]|,)/g, '');
+    id = 'select2-' + id;
+
+    return id;
+  };
+
+  Select2.prototype._placeContainer = function ($container) {
+    $container.insertAfter(this.$element);
+
+    var width = this._resolveWidth(this.$element, this.options.get('width'));
+
+    if (width != null) {
+      $container.css('width', width);
+    }
+  };
+
+  Select2.prototype._resolveWidth = function ($element, method) {
+    var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;
+
+    if (method == 'resolve') {
+      var styleWidth = this._resolveWidth($element, 'style');
+
+      if (styleWidth != null) {
+        return styleWidth;
+      }
+
+      return this._resolveWidth($element, 'element');
+    }
+
+    if (method == 'element') {
+      var elementWidth = $element.outerWidth(false);
+
+      if (elementWidth <= 0) {
+        return 'auto';
+      }
+
+      return elementWidth + 'px';
+    }
+
+    if (method == 'style') {
+      var style = $element.attr('style');
+
+      if (typeof(style) !== 'string') {
+        return null;
+      }
+
+      var attrs = style.split(';');
+
+      for (var i = 0, l = attrs.length; i < l; i = i + 1) {
+        var attr = attrs[i].replace(/\s/g, '');
+        var matches = attr.match(WIDTH);
+
+        if (matches !== null && matches.length >= 1) {
+          return matches[1];
+        }
+      }
+
+      return null;
+    }
+
+    return method;
+  };
+
+  Select2.prototype._bindAdapters = function () {
+    this.dataAdapter.bind(this, this.$container);
+    this.selection.bind(this, this.$container);
+
+    this.dropdown.bind(this, this.$container);
+    this.results.bind(this, this.$container);
+  };
+
+  Select2.prototype._registerDomEvents = function () {
+    var self = this;
+
+    this.$element.on('change.select2', function () {
+      self.dataAdapter.current(function (data) {
+        self.trigger('selection:update', {
+          data: data
+        });
+      });
+    });
+
+    this.$element.on('focus.select2', function (evt) {
+      self.trigger('focus', evt);
+    });
+
+    this._syncA = Utils.bind(this._syncAttributes, this);
+    this._syncS = Utils.bind(this._syncSubtree, this);
+
+    if (this.$element[0].attachEvent) {
+      this.$element[0].attachEvent('onpropertychange', this._syncA);
+    }
+
+    var observer = window.MutationObserver ||
+      window.WebKitMutationObserver ||
+      window.MozMutationObserver
+    ;
+
+    if (observer != null) {
+      this._observer = new observer(function (mutations) {
+        $.each(mutations, self._syncA);
+        $.each(mutations, self._syncS);
+      });
+      this._observer.observe(this.$element[0], {
+        attributes: true,
+        childList: true,
+        subtree: false
+      });
+    } else if (this.$element[0].addEventListener) {
+      this.$element[0].addEventListener(
+        'DOMAttrModified',
+        self._syncA,
+        false
+      );
+      this.$element[0].addEventListener(
+        'DOMNodeInserted',
+        self._syncS,
+        false
+      );
+      this.$element[0].addEventListener(
+        'DOMNodeRemoved',
+        self._syncS,
+        false
+      );
+    }
+  };
+
+  Select2.prototype._registerDataEvents = function () {
+    var self = this;
+
+    this.dataAdapter.on('*', function (name, params) {
+      self.trigger(name, params);
+    });
+  };
+
+  Select2.prototype._registerSelectionEvents = function () {
+    var self = this;
+    var nonRelayEvents = ['toggle', 'focus'];
+
+    this.selection.on('toggle', function () {
+      self.toggleDropdown();
+    });
+
+    this.selection.on('focus', function (params) {
+      self.focus(params);
+    });
+
+    this.selection.on('*', function (name, params) {
+      if ($.inArray(name, nonRelayEvents) !== -1) {
+        return;
+      }
+
+      self.trigger(name, params);
+    });
+  };
+
+  Select2.prototype._registerDropdownEvents = function () {
+    var self = this;
+
+    this.dropdown.on('*', function (name, params) {
+      self.trigger(name, params);
+    });
+  };
+
+  Select2.prototype._registerResultsEvents = function () {
+    var self = this;
+
+    this.results.on('*', function (name, params) {
+      self.trigger(name, params);
+    });
+  };
+
+  Select2.prototype._registerEvents = function () {
+    var self = this;
+
+    this.on('open', function () {
+      self.$container.addClass('select2-container--open');
+    });
+
+    this.on('close', function () {
+      self.$container.removeClass('select2-container--open');
+    });
+
+    this.on('enable', function () {
+      self.$container.removeClass('select2-container--disabled');
+    });
+
+    this.on('disable', function () {
+      self.$container.addClass('select2-container--disabled');
+    });
+
+    this.on('blur', function () {
+      self.$container.removeClass('select2-container--focus');
+    });
+
+    this.on('query', function (params) {
+      if (!self.isOpen()) {
+        self.trigger('open', {});
+      }
+
+      this.dataAdapter.query(params, function (data) {
+        self.trigger('results:all', {
+          data: data,
+          query: params
+        });
+      });
+    });
+
+    this.on('query:append', function (params) {
+      this.dataAdapter.query(params, function (data) {
+        self.trigger('results:append', {
+          data: data,
+          query: params
+        });
+      });
+    });
+
+    this.on('keypress', function (evt) {
+      var key = evt.which;
+
+      if (self.isOpen()) {
+        if (key === KEYS.ESC || key === KEYS.TAB ||
+            (key === KEYS.UP && evt.altKey)) {
+          self.close();
+
+          evt.preventDefault();
+        } else if (key === KEYS.ENTER) {
+          self.trigger('results:select', {});
+
+          evt.preventDefault();
+        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {
+          self.trigger('results:toggle', {});
+
+          evt.preventDefault();
+        } else if (key === KEYS.UP) {
+          self.trigger('results:previous', {});
+
+          evt.preventDefault();
+        } else if (key === KEYS.DOWN) {
+          self.trigger('results:next', {});
+
+          evt.preventDefault();
+        }
+      } else {
+        if (key === KEYS.ENTER || key === KEYS.SPACE ||
+            (key === KEYS.DOWN && evt.altKey)) {
+          self.open();
+
+          evt.preventDefault();
+        }
+      }
+    });
+  };
+
+  Select2.prototype._syncAttributes = function () {
+    this.options.set('disabled', this.$element.prop('disabled'));
+
+    if (this.options.get('disabled')) {
+      if (this.isOpen()) {
+        this.close();
+      }
+
+      this.trigger('disable', {});
+    } else {
+      this.trigger('enable', {});
+    }
+  };
+
+  Select2.prototype._syncSubtree = function (evt, mutations) {
+    var changed = false;
+    var self = this;
+
+    // Ignore any mutation events raised for elements that aren't options or
+    // optgroups. This handles the case when the select element is destroyed
+    if (
+      evt && evt.target && (
+        evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'
+      )
+    ) {
+      return;
+    }
+
+    if (!mutations) {
+      // If mutation events aren't supported, then we can only assume that the
+      // change affected the selections
+      changed = true;
+    } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {
+      for (var n = 0; n < mutations.addedNodes.length; n++) {
+        var node = mutations.addedNodes[n];
+
+        if (node.selected) {
+          changed = true;
+        }
+      }
+    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {
+      changed = true;
+    }
+
+    // Only re-pull the data if we think there is a change
+    if (changed) {
+      this.dataAdapter.current(function (currentData) {
+        self.trigger('selection:update', {
+          data: currentData
+        });
+      });
+    }
+  };
+
+  /**
+   * Override the trigger method to automatically trigger pre-events when
+   * there are events that can be prevented.
+   */
+  Select2.prototype.trigger = function (name, args) {
+    var actualTrigger = Select2.__super__.trigger;
+    var preTriggerMap = {
+      'open': 'opening',
+      'close': 'closing',
+      'select': 'selecting',
+      'unselect': 'unselecting',
+      'clear': 'clearing'
+    };
+
+    if (args === undefined) {
+      args = {};
+    }
+
+    if (name in preTriggerMap) {
+      var preTriggerName = preTriggerMap[name];
+      var preTriggerArgs = {
+        prevented: false,
+        name: name,
+        args: args
+      };
+
+      actualTrigger.call(this, preTriggerName, preTriggerArgs);
+
+      if (preTriggerArgs.prevented) {
+        args.prevented = true;
+
+        return;
+      }
+    }
+
+    actualTrigger.call(this, name, args);
+  };
+
+  Select2.prototype.toggleDropdown = function () {
+    if (this.options.get('disabled')) {
+      return;
+    }
+
+    if (this.isOpen()) {
+      this.close();
+    } else {
+      this.open();
+    }
+  };
+
+  Select2.prototype.open = function () {
+    if (this.isOpen()) {
+      return;
+    }
+
+    this.trigger('query', {});
+  };
+
+  Select2.prototype.close = function () {
+    if (!this.isOpen()) {
+      return;
+    }
+
+    this.trigger('close', {});
+  };
+
+  Select2.prototype.isOpen = function () {
+    return this.$container.hasClass('select2-container--open');
+  };
+
+  Select2.prototype.hasFocus = function () {
+    return this.$container.hasClass('select2-container--focus');
+  };
+
+  Select2.prototype.focus = function (data) {
+    // No need to re-trigger focus events if we are already focused
+    if (this.hasFocus()) {
+      return;
+    }
+
+    this.$container.addClass('select2-container--focus');
+    this.trigger('focus', {});
+  };
+
+  Select2.prototype.enable = function (args) {
+    if (this.options.get('debug') && window.console && console.warn) {
+      console.warn(
+        'Select2: The `select2("enable")` method has been deprecated and will' +
+        ' be removed in later Select2 versions. Use $element.prop("disabled")' +
+        ' instead.'
+      );
+    }
+
+    if (args == null || args.length === 0) {
+      args = [true];
+    }
+
+    var disabled = !args[0];
+
+    this.$element.prop('disabled', disabled);
+  };
+
+  Select2.prototype.data = function () {
+    if (this.options.get('debug') &&
+        arguments.length > 0 && window.console && console.warn) {
+      console.warn(
+        'Select2: Data can no longer be set using `select2("data")`. You ' +
+        'should consider setting the value instead using `$element.val()`.'
+      );
+    }
+
+    var data = [];
+
+    this.dataAdapter.current(function (currentData) {
+      data = currentData;
+    });
+
+    return data;
+  };
+
+  Select2.prototype.val = function (args) {
+    if (this.options.get('debug') && window.console && console.warn) {
+      console.warn(
+        'Select2: The `select2("val")` method has been deprecated and will be' +
+        ' removed in later Select2 versions. Use $element.val() instead.'
+      );
+    }
+
+    if (args == null || args.length === 0) {
+      return this.$element.val();
+    }
+
+    var newVal = args[0];
+
+    if ($.isArray(newVal)) {
+      newVal = $.map(newVal, function (obj) {
+        return obj.toString();
+      });
+    }
+
+    this.$element.val(newVal).trigger('change');
+  };
+
+  Select2.prototype.destroy = function () {
+    this.$container.remove();
+
+    if (this.$element[0].detachEvent) {
+      this.$element[0].detachEvent('onpropertychange', this._syncA);
+    }
+
+    if (this._observer != null) {
+      this._observer.disconnect();
+      this._observer = null;
+    } else if (this.$element[0].removeEventListener) {
+      this.$element[0]
+        .removeEventListener('DOMAttrModified', this._syncA, false);
+      this.$element[0]
+        .removeEventListener('DOMNodeInserted', this._syncS, false);
+      this.$element[0]
+        .removeEventListener('DOMNodeRemoved', this._syncS, false);
+    }
+
+    this._syncA = null;
+    this._syncS = null;
+
+    this.$element.off('.select2');
+    this.$element.attr('tabindex',
+    Utils.GetData(this.$element[0], 'old-tabindex'));
+
+    this.$element.removeClass('select2-hidden-accessible');
+    this.$element.attr('aria-hidden', 'false');
+    Utils.RemoveData(this.$element[0]);
+    this.$element.removeData('select2');
+
+    this.dataAdapter.destroy();
+    this.selection.destroy();
+    this.dropdown.destroy();
+    this.results.destroy();
+
+    this.dataAdapter = null;
+    this.selection = null;
+    this.dropdown = null;
+    this.results = null;
+  };
+
+  Select2.prototype.render = function () {
+    var $container = $(
+      '<span class="select2 select2-container">' +
+        '<span class="selection"></span>' +
+        '<span class="dropdown-wrapper" aria-hidden="true"></span>' +
+      '</span>'
+    );
+
+    $container.attr('dir', this.options.get('dir'));
+
+    this.$container = $container;
+
+    this.$container.addClass('select2-container--' + this.options.get('theme'));
+
+    Utils.StoreData($container[0], 'element', this.$element);
+
+    return $container;
+  };
+
+  return Select2;
+});
+
+S2.define('jquery-mousewheel',[
+  'jquery'
+], function ($) {
+  // Used to shim jQuery.mousewheel for non-full builds.
+  return $;
+});
+
+S2.define('jquery.select2',[
+  'jquery',
+  'jquery-mousewheel',
+
+  './select2/core',
+  './select2/defaults',
+  './select2/utils'
+], function ($, _, Select2, Defaults, Utils) {
+  if ($.fn.select2 == null) {
+    // All methods that should return the element
+    var thisMethods = ['open', 'close', 'destroy'];
+
+    $.fn.select2 = function (options) {
+      options = options || {};
+
+      if (typeof options === 'object') {
+        this.each(function () {
+          var instanceOptions = $.extend(true, {}, options);
+
+          var instance = new Select2($(this), instanceOptions);
+        });
+
+        return this;
+      } else if (typeof options === 'string') {
+        var ret;
+        var args = Array.prototype.slice.call(arguments, 1);
+
+        this.each(function () {
+          var instance = Utils.GetData(this, 'select2');
+
+          if (instance == null && window.console && console.error) {
+            console.error(
+              'The select2(\'' + options + '\') method was called on an ' +
+              'element that is not using Select2.'
+            );
+          }
+
+          ret = instance[options].apply(instance, args);
+        });
+
+        // Check if we should be returning `this`
+        if ($.inArray(options, thisMethods) > -1) {
+          return this;
+        }
+
+        return ret;
+      } else {
+        throw new Error('Invalid arguments for Select2: ' + options);
+      }
+    };
+  }
+
+  if ($.fn.select2.defaults == null) {
+    $.fn.select2.defaults = Defaults;
+  }
+
+  return Select2;
+});
+
+  // Return the AMD loader configuration so it can be used outside of this file
+  return {
+    define: S2.define,
+    require: S2.require
+  };
+}());
+
+  // Autoload the jQuery bindings
+  // We know that all of the modules exist above this, so we're safe
+  var select2 = S2.require('jquery.select2');
+
+  // Hold the AMD module references on the jQuery function that was just loaded
+  // This allows Select2 to use the internal loader outside of this file, such
+  // as in the language files.
+  jQuery.fn.select2.amd = S2;
+
+  // Return the Select2 instance for anyone who is importing it.
+  return select2;
+}));
diff --git a/web/web/static/select2/select2.min.css b/web/web/static/select2/select2.min.css
new file mode 100644
index 0000000..60d5990
--- /dev/null
+++ b/web/web/static/select2/select2.min.css
@@ -0,0 +1 @@
+.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}
diff --git a/web/web/static/select2/select2.min.js b/web/web/static/select2/select2.min.js
new file mode 100644
index 0000000..9f17a27
--- /dev/null
+++ b/web/web/static/select2/select2.min.js
@@ -0,0 +1 @@
+/*! Select2 4.0.7 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=function(b,c){return void 0===c&&(c="undefined"!=typeof window?require("jquery"):require("jquery")(b)),a(c),c}:a(jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return v.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o=b&&b.split("/"),p=t.map,q=p&&p["*"]||{};if(a){for(a=a.split("/"),g=a.length-1,t.nodeIdCompat&&x.test(a[g])&&(a[g]=a[g].replace(x,"")),"."===a[0].charAt(0)&&o&&(n=o.slice(0,o.length-1),a=n.concat(a)),k=0;k<a.length;k++)if("."===(m=a[k]))a.splice(k,1),k-=1;else if(".."===m){if(0===k||1===k&&".."===a[2]||".."===a[k-1])continue;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}if((o||q)&&p){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),o)for(l=o.length;l>0;l-=1)if((e=p[o.slice(0,l).join("/")])&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&q&&q[d]&&(i=q[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=w.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),o.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){r[a]=b}}function j(a){if(e(s,a)){var c=s[a];delete s[a],u[a]=!0,n.apply(b,c)}if(!e(r,a)&&!e(u,a))throw new Error("No "+a);return r[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return a?k(a):[]}function m(a){return function(){return t&&t.config&&t.config[a]||{}}}var n,o,p,q,r={},s={},t={},u={},v=Object.prototype.hasOwnProperty,w=[].slice,x=/\.js$/;p=function(a,b){var c,d=k(a),e=d[0],g=b[1];return a=d[1],e&&(e=f(e,g),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(g)):f(a,g):(a=f(a,g),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},q={require:function(a){return g(a)},exports:function(a){var b=r[a];return void 0!==b?b:r[a]={}},module:function(a){return{id:a,uri:"",exports:r[a],config:m(a)}}},n=function(a,c,d,f){var h,k,m,n,o,t,v,w=[],x=typeof d;if(f=f||a,t=l(f),"undefined"===x||"function"===x){for(c=!c.length&&d.length?["require","exports","module"]:c,o=0;o<c.length;o+=1)if(n=p(c[o],t),"require"===(k=n.f))w[o]=q.require(a);else if("exports"===k)w[o]=q.exports(a),v=!0;else if("module"===k)h=w[o]=q.module(a);else if(e(r,k)||e(s,k)||e(u,k))w[o]=j(k);else{if(!n.p)throw new Error(a+" missing "+k);n.p.load(n.n,g(f,!0),i(k),{}),w[o]=r[k]}m=d?d.apply(r[a],w):void 0,a&&(h&&h.exports!==b&&h.exports!==r[a]?r[a]=h.exports:m===b&&v||(r[a]=m))}else a&&(r[a]=d)},a=c=o=function(a,c,d,e,f){if("string"==typeof a)return q[a]?q[a](c):j(p(a,l(c)).f);if(!a.splice){if(t=a,t.deps&&o(t.deps,t.callback),!c)return;c.splice?(a=c,c=d,d=null):a=b}return c=c||function(){},"function"==typeof d&&(d=e,e=f),e?n(b,a,c,d):setTimeout(function(){n(b,a,c,d)},4),o},o.config=function(a){return o(a)},a._defined=r,d=function(a,b,c){if("string"!=typeof a)throw new Error("See almond README: incorrect module build, no module name");b.splice||(c=b,b=[]),e(r,a)||e(s,a)||(s[a]=[a,b,c])},d.amd={jQuery:!0}}(),b.requirejs=a,b.require=c,b.define=d}}(),b.define("almond",function(){}),b.define("jquery",[],function(){var b=a||$;return null==b&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),b}),b.define("select2/utils",["jquery"],function(a){function b(a){var b=a.prototype,c=[];for(var d in b){"function"==typeof b[d]&&("constructor"!==d&&c.push(d))}return c}var c={};c.Extend=function(a,b){function c(){this.constructor=a}var d={}.hasOwnProperty;for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},c.Decorate=function(a,c){function d(){var b=Array.prototype.unshift,d=c.prototype.constructor.length,e=a.prototype.constructor;d>0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h<g.length;h++){var i=g[h];d.prototype[i]=a.prototype[i]}for(var j=(function(a){var b=function(){};a in d.prototype&&(b=d.prototype[a]);var e=c.prototype[a];return function(){return Array.prototype.unshift.call(arguments,b),e.apply(this,arguments)}}),k=0;k<f.length;k++){var l=f[k];d.prototype[l]=j(l)}return d};var d=function(){this.listeners={}};d.prototype.on=function(a,b){this.listeners=this.listeners||{},a in this.listeners?this.listeners[a].push(b):this.listeners[a]=[b]},d.prototype.trigger=function(a){var b=Array.prototype.slice,c=b.call(arguments,1);this.listeners=this.listeners||{},null==c&&(c=[]),0===c.length&&c.push({}),c[0]._type=a,a in this.listeners&&this.invoke(this.listeners[a],b.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},d.prototype.invoke=function(a,b){for(var c=0,d=a.length;c<d;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;c<a;c++){b+=Math.floor(36*Math.random()).toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e<c.length;e++){var f=c[e];f=f.substring(0,1).toLowerCase()+f.substring(1),f in d||(d[f]={}),e==c.length-1&&(d[f]=a[b]),d=d[f]}delete a[b]}}return a},c.hasScroll=function(b,c){var d=a(c),e=c.style.overflowX,f=c.style.overflowY;return(e!==f||"hidden"!==f&&"visible"!==f)&&("scroll"===e||"scroll"===f||(d.innerHeight()<c.scrollHeight||d.innerWidth()<c.scrollWidth))},c.escapeMarkup=function(a){var b={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c.__cache={};var e=0;return c.GetUniqueElementId=function(a){var b=a.getAttribute("data-select2-id");return null==b&&(a.id?(b=a.id,a.setAttribute("data-select2-id",b)):(a.setAttribute("data-select2-id",++e),b=e.toString())),b},c.StoreData=function(a,b,d){var e=c.GetUniqueElementId(a);c.__cache[e]||(c.__cache[e]={}),c.__cache[e][b]=d},c.GetData=function(b,d){var e=c.GetUniqueElementId(b);return d?c.__cache[e]&&null!=c.__cache[e][d]?c.__cache[e][d]:a(b).data(d):c.__cache[e]},c.RemoveData=function(a){var b=c.GetUniqueElementId(a);null!=c.__cache[b]&&delete c.__cache[b]},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('<li role="treeitem" aria-live="assertive" class="select2-results__option"></li>'),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c<a.results.length;c++){var d=a.results[c],e=this.option(d);b.push(e)}this.$results.append(b)},c.prototype.position=function(a,b){b.find(".select2-results").append(a)},c.prototype.sort=function(a){return this.options.get("sorter")(a)},c.prototype.highlightFirstItem=function(){var a=this.$results.find(".select2-results__option[aria-selected]"),b=a.filter("[aria-selected=true]");b.length>0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var c=this;this.data.current(function(d){var e=a.map(d,function(a){return a.id.toString()});c.$results.find(".select2-results__option[aria-selected]").each(function(){var c=a(this),d=b.GetData(this,"data"),f=""+d.id;null!=d.element&&d.element.selected||null==d.element&&a.inArray(f,e)>-1?c.attr("aria-selected","true"):c.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(c){var d=document.createElement("li");d.className="select2-results__option";var e={role:"treeitem","aria-selected":"false"};c.disabled&&(delete e["aria-selected"],e["aria-disabled"]="true"),null==c.id&&delete e["aria-selected"],null!=c._resultId&&(d.id=c._resultId),c.title&&(d.title=c.title),c.children&&(e.role="group",e["aria-label"]=c.text,delete e["aria-selected"]);for(var f in e){var g=e[f];d.setAttribute(f,g)}if(c.children){var h=a(d),i=document.createElement("strong");i.className="select2-results__group";a(i);this.template(c,i);for(var j=[],k=0;k<c.children.length;k++){var l=c.children[k],m=this.option(l);j.push(m)}var n=a("<ul></ul>",{class:"select2-results__options select2-results__options--nested"});n.append(j),h.append(i),h.append(n)}else this.template(c,d);return b.StoreData(d,"data",c),d},c.prototype.bind=function(c,d){var e=this,f=c.id+"-results";this.$results.attr("id",f),c.on("results:all",function(a){e.clear(),e.append(a.data),c.isOpen()&&(e.setClasses(),e.highlightFirstItem())}),c.on("results:append",function(a){e.append(a.data),c.isOpen()&&e.setClasses()}),c.on("query",function(a){e.hideMessages(),e.showLoading(a)}),c.on("select",function(){c.isOpen()&&(e.setClasses(),e.options.get("scrollAfterSelect")&&e.highlightFirstItem())}),c.on("unselect",function(){c.isOpen()&&(e.setClasses(),e.options.get("scrollAfterSelect")&&e.highlightFirstItem())}),c.on("open",function(){e.$results.attr("aria-expanded","true"),e.$results.attr("aria-hidden","false"),e.setClasses(),e.ensureHighlightVisible()}),c.on("close",function(){e.$results.attr("aria-expanded","false"),e.$results.attr("aria-hidden","true"),e.$results.removeAttr("aria-activedescendant")}),c.on("results:toggle",function(){var a=e.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),c.on("results:select",function(){var a=e.getHighlightedResults();if(0!==a.length){var c=b.GetData(a[0],"data");"true"==a.attr("aria-selected")?e.trigger("close",{}):e.trigger("select",{data:c})}}),c.on("results:previous",function(){var a=e.getHighlightedResults(),b=e.$results.find("[aria-selected]"),c=b.index(a);if(!(c<=0)){var d=c-1;0===a.length&&(d=0);var f=b.eq(d);f.trigger("mouseenter");var g=e.$results.offset().top,h=f.offset().top,i=e.$results.scrollTop()+(h-g);0===d?e.$results.scrollTop(0):h-g<0&&e.$results.scrollTop(i)}}),c.on("results:next",function(){var a=e.getHighlightedResults(),b=e.$results.find("[aria-selected]"),c=b.index(a),d=c+1;if(!(d>=b.length)){var f=b.eq(d);f.trigger("mouseenter");var g=e.$results.offset().top+e.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=e.$results.scrollTop()+h-g;0===d?e.$results.scrollTop(0):h>g&&e.$results.scrollTop(i)}}),c.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),c.on("results:message",function(a){e.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=e.$results.scrollTop(),c=e.$results.get(0).scrollHeight-b+a.deltaY,d=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=e.$results.height();d?(e.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(e.$results.scrollTop(e.$results.get(0).scrollHeight-e.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(c){var d=a(this),f=b.GetData(this,"data");if("true"===d.attr("aria-selected"))return void(e.options.get("multiple")?e.trigger("unselect",{originalEvent:c,data:f}):e.trigger("close",{}));e.trigger("select",{originalEvent:c,data:f})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(c){var d=b.GetData(this,"data");e.getHighlightedResults().removeClass("select2-results__option--highlighted"),e.trigger("results:focus",{data:d,element:a(this)})})},c.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),c<=2?this.$results.scrollTop(0):(g>this.$results.outerHeight()||g<0)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var c=a('<span class="select2-selection" role="combobox"  aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=b.GetData(this.$element[0],"old-tabindex")?this._tabindex=b.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),c.attr("title",this.$element.attr("title")),c.attr("tabindex",this._tabindex),this.$selection=c,c},d.prototype.bind=function(a,b){var d=this,e=(a.id,a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),window.setTimeout(function(){d.$selection.focus()},0),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(c){a(document.body).on("mousedown.select2."+c.id,function(c){var d=a(c.target),e=d.closest(".select2");a(".select2.select2-container--open").each(function(){a(this),this!=e[0]&&b.GetData(this,"element").select2("close")})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){b.find(".selection").append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()})},e.prototype.clear=function(){var a=this.$selection.find(".select2-selection__rendered");a.empty(),a.removeAttr("title")},e.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},e.prototype.selectionContainer=function(){return a("<span></span>")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.attr("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('<ul class="select2-selection__rendered"></ul>'),a},d.prototype.bind=function(b,e){var f=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){f.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!f.options.get("disabled")){var d=a(this),e=d.parent(),g=c.GetData(e[0],"data");f.trigger("unselect",{originalEvent:b,data:g})}})},d.prototype.clear=function(){var a=this.$selection.find(".select2-selection__rendered");a.empty(),a.removeAttr("title")},d.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},d.prototype.selectionContainer=function(){return a('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">&times;</span></li>')},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d<a.length;d++){var e=a[d],f=this.selectionContainer(),g=this.display(e,f);f.append(g),f.attr("title",e.title||e.text),c.StoreData(f[0],"data",e),b.push(f)}var h=this.$selection.find(".select2-selection__rendered");c.appendMany(h,b)}},d}),b.define("select2/selection/placeholder",["../utils"],function(a){function b(a,b,c){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c)}return b.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},b.prototype.createPlaceholder=function(a,b){var c=this.selectionContainer();return c.html(this.display(b)),c.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),c},b.prototype.update=function(a,b){var c=1==b.length&&b[0].id!=this.placeholder.id;if(b.length>1||c)return a.call(this,b);this.clear();var d=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(d)},b}),b.define("select2/selection/allowClear",["jquery","../keys","../utils"],function(a,b,c){function d(){}return d.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},d.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var d=this.$selection.find(".select2-selection__clear");if(0!==d.length){b.stopPropagation();var e=c.GetData(d[0],"data"),f=this.$element.val();this.$element.val(this.placeholder.id);var g={data:e};if(this.trigger("clear",g),g.prevented)return void this.$element.val(f);for(var h=0;h<e.length;h++)if(g={data:e[h]},this.trigger("unselect",g),g.prevented)return void this.$element.val(f);this.$element.trigger("change"),this.trigger("toggle",{})}}},d.prototype._handleKeyboardClear=function(a,c,d){d.isOpen()||c.which!=b.DELETE&&c.which!=b.BACKSPACE||this._handleClear(c)},d.prototype.update=function(b,d){if(b.call(this,d),!(this.$selection.find(".select2-selection__placeholder").length>0||0===d.length)){var e=this.options.get("translations").get("removeAllItems"),f=a('<span class="select2-selection__clear" title="'+e()+'">&times;</span>');c.StoreData(f[0],"data",d),this.$selection.find(".select2-selection__rendered").prepend(f)}},d}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="textbox" aria-autocomplete="list" /></li>');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,d,e){var f=this;a.call(this,d,e),d.on("open",function(){f.$search.trigger("focus")}),d.on("close",function(){f.$search.val(""),f.$search.removeAttr("aria-activedescendant"),f.$search.trigger("focus")}),d.on("enable",function(){f.$search.prop("disabled",!1),f._transferTabIndex()}),d.on("disable",function(){f.$search.prop("disabled",!0)}),d.on("focus",function(a){f.$search.trigger("focus")}),d.on("results:focus",function(a){f.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){f.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){f._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){if(a.stopPropagation(),f.trigger("keypress",a),f._keyUpPrevented=a.isDefaultPrevented(),a.which===c.BACKSPACE&&""===f.$search.val()){var d=f.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var e=b.GetData(d[0],"data");f.searchRemoveChoice(e),a.preventDefault()}}});var g=document.documentMode,h=g&&g<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){if(h)return void f.$selection.off("input.search input.searchcheck");f.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(h&&"input"===a.type)return void f.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&f.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;if(this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c){this.$element.find("[data-select2-tag]").length?this.$element.focus():this.$search.focus()}},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{a=.75*(this.$search.val().length+1)+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting","clear","clearing"],g=["opening","closing","selecting","unselecting","clearing"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){return{"鈷�":"A","锛�":"A","脌":"A","脕":"A","脗":"A","岷�":"A","岷�":"A","岷�":"A","岷�":"A","脙":"A","膧":"A","膫":"A","岷�":"A","岷�":"A","岷�":"A","岷�":"A","圈":"A","菭":"A","脛":"A","菫":"A","岷�":"A","脜":"A","呛":"A","菎":"A","葊":"A","葌":"A","岷�":"A","岷�":"A","岷�":"A","岣�":"A","膭":"A","群":"A","獗�":"A","隃�":"AA","脝":"AE","羌":"AE","洽":"AE","隃�":"AO","隃�":"AU","隃�":"AV","隃�":"AV","隃�":"AY","鈷�":"B","锛�":"B","岣�":"B","岣�":"B","岣�":"B","蓛":"B","苽":"B","苼":"B","鈷�":"C","锛�":"C","膯":"C","膱":"C","膴":"C","膶":"C","脟":"C","岣�":"C","茋":"C","然":"C","隃�":"C","鈷�":"D","锛�":"D","岣�":"D","膸":"D","岣�":"D","岣�":"D","岣�":"D","岣�":"D","膼":"D","茓":"D","茒":"D","茐":"D","隄�":"D","潜":"DZ","莿":"DZ","遣":"Dz","菂":"Dz","鈷�":"E","锛�":"E","脠":"E","脡":"E","脢":"E","峄�":"E","岷�":"E","峄�":"E","峄�":"E","岷�":"E","膾":"E","岣�":"E","岣�":"E","臄":"E","臇":"E","脣":"E","岷�":"E","臍":"E","葎":"E","葐":"E","岷�":"E","峄�":"E","权":"E","岣�":"E","臉":"E","岣�":"E","岣�":"E","茞":"E","茙":"E","鈷�":"F","锛�":"F","岣�":"F","茟":"F","隄�":"F","鈷�":"G","锛�":"G","谴":"G","臏":"G","岣�":"G","臑":"G","臓":"G","铅":"G","蘑":"G","扦":"G","茡":"G","隇�":"G","隄�":"G","隄�":"G","鈷�":"H","锛�":"H","膜":"H","岣�":"H","岣�":"H","葹":"H","岣�":"H","岣�":"H","岣�":"H","摩":"H","獗�":"H","獗�":"H","隇�":"H","鈷�":"I","锛�":"I","脤":"I","脥":"I","脦":"I","抹":"I","莫":"I","默":"I","陌":"I","脧":"I","岣�":"I","峄�":"I","菑":"I","葓":"I","葕":"I","峄�":"I","漠":"I","岣�":"I","茥":"I","鈷�":"J","锛�":"J","拇":"J","蓤":"J","鈸�":"K","锛�":"K","岣�":"K","迁":"K","岣�":"K","亩":"K","岣�":"K","茦":"K","獗�":"K","隄�":"K","隄�":"K","隄�":"K","隇�":"K","鈸�":"L","锛�":"L","目":"L","墓":"L","慕":"L","岣�":"L","岣�":"L","幕":"L","岣�":"L","岣�":"L","艁":"L","冉":"L","獗�":"L","獗�":"L","隄�":"L","隄�":"L","隇�":"L","菄":"LJ","菆":"Lj","鈸�":"M","锛�":"M","岣�":"M","峁�":"M","峁�":"M","獗�":"M","茰":"M","鈸�":"N","锛�":"N","歉":"N","艃":"N","脩":"N","峁�":"N","艊":"N","峁�":"N","艆":"N","峁�":"N","峁�":"N","葼":"N","茲":"N","隇�":"N","隇�":"N","菉":"NJ","菋":"Nj","鈸�":"O","锛�":"O","脪":"O","脫":"O","脭":"O","峄�":"O","峄�":"O","峄�":"O","峄�":"O","脮":"O","峁�":"O","痊":"O","峁�":"O","艑":"O","峁�":"O","峁�":"O","艓":"O","犬":"O","劝":"O","脰":"O","泉":"O","峄�":"O","艕":"O","菓":"O","葘":"O","葞":"O","茽":"O","峄�":"O","峄�":"O","峄�":"O","峄�":"O","峄�":"O","峄�":"O","峄�":"O","仟":"O","乾":"O","脴":"O","蔷":"O","茊":"O","茻":"O","隄�":"O","隄�":"O","艗":"OE","脾":"OI","隄�":"OO","娶":"OU","鈸�":"P","锛�":"P","峁�":"P","峁�":"P","皮":"P","獗�":"P","隄�":"P","隄�":"P","隄�":"P","鈸�":"Q","锛�":"Q","隄�":"Q","隄�":"Q","蓨":"Q","鈸�":"R","锛�":"R","艛":"R","峁�":"R","艠":"R","葠":"R","葤":"R","峁�":"R","峁�":"R","艝":"R","峁�":"R","蓪":"R","獗�":"R","隄�":"R","隇�":"R","隇�":"R","鈸�":"S","锛�":"S","岷�":"S","艢":"S","峁�":"S","艤":"S","峁�":"S","艩":"S","峁�":"S","峁�":"S","峁�":"S","葮":"S","艦":"S","獗�":"S","隇�":"S","隇�":"S","鈸�":"T","锛�":"T","峁�":"T","扭":"T","峁�":"T","葰":"T","泞":"T","峁�":"T","峁�":"T","纽":"T","片":"T","飘":"T","染":"T","隇�":"T","隃�":"TZ","鈸�":"U","锛�":"U","脵":"U","脷":"U","脹":"U","浓":"U","峁�":"U","弄":"U","峁�":"U","努":"U","脺":"U","菦":"U","菞":"U","菚":"U","菣":"U","峄�":"U","女":"U","虐":"U","菗":"U","葦":"U","葨":"U","漂":"U","峄�":"U","峄�":"U","峄�":"U","峄�":"U","峄�":"U","峄�":"U","峁�":"U","挪":"U","峁�":"U","峁�":"U","蓜":"U","鈸�":"V","锛�":"V","峁�":"V","峁�":"V","撇":"V","隄�":"V","蓞":"V","隄�":"VY","鈸�":"W","锛�":"W","岷�":"W","岷�":"W","糯":"W","岷�":"W","岷�":"W","岷�":"W","獗�":"W","鈸�":"X","锛�":"X","岷�":"X","岷�":"X","鈸�":"Y","锛�":"Y","峄�":"Y","脻":"Y","哦":"Y","峄�":"Y","炔":"Y","岷�":"Y","鸥":"Y","峄�":"Y","峄�":"Y","瞥":"Y","蓭":"Y","峄�":"Y","鈸�":"Z","锛�":"Z","殴":"Z","岷�":"Z","呕":"Z","沤":"Z","岷�":"Z","岷�":"Z","频":"Z","趣":"Z","獗�":"Z","獗�":"Z","隄�":"Z","鈸�":"a","锝�":"a","岷�":"a","脿":"a","谩":"a","芒":"a","岷�":"a","岷�":"a","岷�":"a","岷�":"a","茫":"a","膩":"a","膬":"a","岷�":"a","岷�":"a","岷�":"a","岷�":"a","颧":"a","恰":"a","盲":"a","菬":"a","岷�":"a","氓":"a","腔":"a","菐":"a","葋":"a","葍":"a","岷�":"a","岷�":"a","岷�":"a","岣�":"a","膮":"a","獗�":"a","蓯":"a","隃�":"aa","忙":"ae","墙":"ae","牵":"ae","隃�":"ao","隃�":"au","隃�":"av","隃�":"av","隃�":"ay","鈸�":"b","锝�":"b","岣�":"b","岣�":"b","岣�":"b","苺":"b","苾":"b","蓳":"b","鈸�":"c","锝�":"c","膰":"c","膲":"c","膵":"c","膷":"c","莽":"c","岣�":"c","茍":"c","燃":"c","隃�":"c","鈫�":"c","鈸�":"d","锝�":"d","岣�":"d","膹":"d","岣�":"d","岣�":"d","岣�":"d","岣�":"d","膽":"d","茖":"d","蓶":"d","蓷":"d","隄�":"d","浅":"dz","菃":"dz","鈸�":"e","锝�":"e","猫":"e","茅":"e","锚":"e","峄�":"e","岷�":"e","峄�":"e","峄�":"e","岷�":"e","膿":"e","岣�":"e","岣�":"e","臅":"e","臈":"e","毛":"e","岷�":"e","臎":"e","葏":"e","葒":"e","岷�":"e","峄�":"e","醛":"e","岣�":"e","臋":"e","岣�":"e","岣�":"e","蓢":"e","蓻":"e","菨":"e","鈸�":"f","锝�":"f","岣�":"f","茠":"f","隄�":"f","鈸�":"g","锝�":"g","堑":"g","臐":"g","岣�":"g","臒":"g","摹":"g","千":"g","模":"g","钎":"g","蔂":"g","隇�":"g","岬�":"g","隄�":"g","鈸�":"h","锝�":"h","磨":"h","岣�":"h","岣�":"h","葻":"h","岣�":"h","岣�":"h","岣�":"h","岷�":"h","魔":"h","獗�":"h","獗�":"h","丧":"h","茣":"hv","鈸�":"i","锝�":"i","矛":"i","铆":"i","卯":"i","末":"i","墨":"i","沫":"i","茂":"i","岣�":"i","峄�":"i","菒":"i","葔":"i","葖":"i","峄�":"i","寞":"i","岣�":"i","扫":"i","谋":"i","鈸�":"j","锝�":"j","牡":"j","前":"j","蓧":"j","鈸�":"k","锝�":"k","岣�":"k","签":"k","岣�":"k","姆":"k","岣�":"k","茩":"k","獗�":"k","隄�":"k","隄�":"k","隄�":"k","隇�":"k","鈸�":"l","锝�":"l","艀":"l","暮":"l","木":"l","岣�":"l","岣�":"l","募":"l","岣�":"l","岣�":"l","趴":"l","艂":"l","茪":"l","色":"l","獗�":"l","隄�":"l","隇�":"l","隄�":"l","菈":"lj","鈸�":"m","锝�":"m","岣�":"m","峁�":"m","峁�":"m","杀":"m","莎":"m","鈸�":"n","锝�":"n","枪":"n","艅":"n","帽":"n","峁�":"n","艌":"n","峁�":"n","艈":"n","峁�":"n","峁�":"n","茷":"n","刹":"n","艍":"n","隇�":"n","隇�":"n","菍":"nj","鈸�":"o","锝�":"o","貌":"o","贸":"o","么":"o","峄�":"o","峄�":"o","峄�":"o","峄�":"o","玫":"o","峁�":"o","拳":"o","峁�":"o","艒":"o","峁�":"o","峁�":"o","艔":"o","券":"o","缺":"o","枚":"o","全":"o","峄�":"o","艖":"o","菕":"o","葝":"o","葟":"o","啤":"o","峄�":"o","峄�":"o","峄�":"o","峄�":"o","峄�":"o","峄�":"o","峄�":"o","谦":"o","黔":"o","酶":"o","强":"o","蓴":"o","隄�":"o","隄�":"o","傻":"o","艙":"oe","疲":"oi","龋":"ou","隄�":"oo","鈸�":"p","锝�":"p","峁�":"p","峁�":"p","匹":"p","岬�":"p","隄�":"p","隄�":"p","隄�":"p","鈸�":"q","锝�":"q","蓩":"q","隄�":"q","隄�":"q","鈸�":"r","锝�":"r","艜":"r","峁�":"r","艡":"r","葢":"r","葥":"r","峁�":"r","峁�":"r","艞":"r","峁�":"r","蓫":"r","山":"r","隄�":"r","隇�":"r","隇�":"r","鈸�":"s","锝�":"s","脽":"s","艣":"s","峁�":"s","艥":"s","峁�":"s","拧":"s","峁�":"s","峁�":"s","峁�":"s","葯":"s","艧":"s","瓤":"s","隇�":"s","隇�":"s","岷�":"s","鈸�":"t","锝�":"t","峁�":"t","岷�":"t","钮":"t","峁�":"t","葲":"t","牛":"t","峁�":"t","峁�":"t","脓":"t","骗":"t","蕡":"t","獗�":"t","隇�":"t","隃�":"tz","鈸�":"u","锝�":"u","霉":"u","煤":"u","没":"u","农":"u","峁�":"u","奴":"u","峁�":"u","怒":"u","眉":"u","菧":"u","菢":"u","菛":"u","菤":"u","峄�":"u","暖":"u","疟":"u","菙":"u","葧":"u","葪":"u","瓢":"u","峄�":"u","峄�":"u","峄�":"u","峄�":"u","峄�":"u","峄�":"u","峁�":"u","懦":"u","峁�":"u","峁�":"u","蕢":"u","鈸�":"v","锝�":"v","峁�":"v","峁�":"v","蕥":"v","隄�":"v","蕦":"v","隄�":"vy","鈸�":"w","锝�":"w","岷�":"w","岷�":"w","诺":"w","岷�":"w","岷�":"w","岷�":"w","岷�":"w","獗�":"w","鈸�":"x","锝�":"x","岷�":"x","岷�":"x","鈸�":"y","锝�":"y","峄�":"y","媒":"y","欧":"y","峄�":"y","瘸":"y","岷�":"y","每":"y","峄�":"y","岷�":"y","峄�":"y","拼":"y","蓮":"y","峄�":"y","鈸�":"z","锝�":"z","藕":"z","岷�":"z","偶":"z","啪":"z","岷�":"z","岷�":"z","贫":"z","去":"z","蓘":"z","獗�":"z","隄�":"z","螁":"螒","螆":"螘","螇":"螚","螉":"螜","为":"螜","螌":"螣","螏":"违","潍":"违","螐":"惟","维":"伪","苇":"蔚","萎":"畏","委":"喂","蠆":"喂","螑":"喂","蠈":"慰","蠉":"蠀","蠇":"蠀","伟":"蠀","蠋":"蠅","蟼":"蟽","鈥�":"'"}}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),null!=c.id?d+="-"+c.id.toString():d+="-"+a.generateChars(4),d},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f<a.length;f++){var g=a[f].id;-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")});else{var d=a.id;this.$element.val(d),this.$element.trigger("change")}},d.prototype.unselect=function(a){var b=this;if(this.$element.prop("multiple")){if(a.selected=!1,c(a.element).is("option"))return a.element.selected=!1,void this.$element.trigger("change");this.current(function(d){for(var e=[],f=0;f<d.length;f++){var g=d[f].id;g!==a.id&&-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")})}},d.prototype.bind=function(a,b){var c=this;this.container=a,a.on("select",function(a){c.select(a.data)}),a.on("unselect",function(a){c.unselect(a.data)})},d.prototype.destroy=function(){this.$element.find("*").each(function(){b.RemoveData(this)})},d.prototype.query=function(a,b){var d=[],e=this;this.$element.children().each(function(){var b=c(this);if(b.is("option")||b.is("optgroup")){var f=e.item(b),g=e.matches(a,f);null!==g&&d.push(g)}}),b({results:d})},d.prototype.addOptions=function(a){b.appendMany(this.$element,a)},d.prototype.option=function(a){var d;a.children?(d=document.createElement("optgroup"),d.label=a.text):(d=document.createElement("option"),void 0!==d.textContent?d.textContent=a.text:d.innerText=a.text),void 0!==a.id&&(d.value=a.id),a.disabled&&(d.disabled=!0),a.selected&&(d.selected=!0),a.title&&(d.title=a.title);var e=c(d),f=this._normalizeItem(a);return f.element=d,b.StoreData(d,"data",f),e},d.prototype.item=function(a){var d={};if(null!=(d=b.GetData(a[0],"data")))return d;if(a.is("option"))d={id:a.val(),text:a.text(),disabled:a.prop("disabled"),selected:a.prop("selected"),title:a.prop("title")};else if(a.is("optgroup")){d={text:a.prop("label"),children:[],title:a.prop("title")};for(var e=a.children("option"),f=[],g=0;g<e.length;g++){var h=c(e[g]),i=this.item(h);f.push(i)}d.children=f}return d=this._normalizeItem(d),d.element=a[0],b.StoreData(a[0],"data",d),d},d.prototype._normalizeItem=function(a){a!==Object(a)&&(a={id:a,text:a}),a=c.extend({},{text:""},a);var b={selected:!1,disabled:!1};return null!=a.id&&(a.id=a.id.toString()),null!=a.text&&(a.text=a.text.toString()),null==a._resultId&&a.id&&null!=this.container&&(a._resultId=this.generateResultId(this.container,a)),c.extend({},b,a)},d.prototype.matches=function(a,b){return this.options.get("matcher")(a,b)},d}),b.define("select2/data/array",["./select","../utils","jquery"],function(a,b,c){function d(a,b){var c=b.get("data")||[];d.__super__.constructor.call(this,a,b),this.addOptions(this.convertToOptions(c))}return b.Extend(d,a),d.prototype.select=function(a){var b=this.$element.find("option").filter(function(b,c){return c.value==a.id.toString()});0===b.length&&(b=this.option(a),this.addOptions(b)),d.__super__.select.call(this,a)},d.prototype.convertToOptions=function(a){function d(a){return function(){return c(this).val()==a.id}}for(var e=this,f=this.$element.find("option"),g=f.map(function(){return e.item(c(this)).id}).get(),h=[],i=0;i<a.length;i++){var j=this._normalizeItem(a[i]);if(c.inArray(j.id,g)>=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){"status"in d&&(0===d.status||"0"===d.status)||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h<e.length;h++){var i=e[h],j=this._normalizeItem(i),k=this.option(j);this.$element.append(k)}}return b.prototype.query=function(a,b,c){function d(a,f){for(var g=a.results,h=0;h<g.length;h++){var i=g[h],j=null!=i.children&&!d({results:i.children},!0);if((i.text||"").toUpperCase()===(b.term||"").toUpperCase()||j)return!f&&(a.data=g,void c(a))}if(f)return!0;var k=e.createTag(b);if(null!=k){var l=e.option(k);l.attr("data-select2-tag",!0),e.addOptions([l]),e.insertTag(g,k)}a.results=g,c(a)}var e=this;if(this._removeOldTags(),null==b.term||null!=b.page)return void a.call(this,b,c);a.call(this,b,d)},b.prototype.createTag=function(b,c){var d=a.trim(c.term);return""===d?null:{id:d,text:d}},b.prototype.insertTag=function(a,b,c){b.unshift(c)},b.prototype._removeOldTags=function(b){this._lastTag;this.$element.find("option[data-select2-tag]").each(function(){this.selected||a(this).remove()})},b}),b.define("select2/data/tokenizer",["jquery"],function(a){function b(a,b,c){var d=c.get("tokenizer");void 0!==d&&(this.tokenizer=d),a.call(this,b,c)}return b.prototype.bind=function(a,b,c){a.call(this,b,c),this.$search=b.dropdown.$search||b.selection.$search||c.find(".select2-search__field")},b.prototype.query=function(b,c,d){function e(b){var c=g._normalizeItem(b);if(!g.$element.find("option").filter(function(){return a(this).val()===c.id}).length){var d=g.option(c);d.attr("data-select2-tag",!0),g._removeOldTags(),g.addOptions([d])}f(c)}function f(a){g.trigger("select",{data:a})}var g=this;c.term=c.term||"";var h=this.tokenizer(c,this.options,e);h.term!==c.term&&(this.$search.length&&(this.$search.val(h.term),this.$search.focus()),c.term=h.term),b.call(this,c,d)},b.prototype.tokenizer=function(b,c,d,e){for(var f=d.get("tokenSeparators")||[],g=c.term,h=0,i=this.createTag||function(a){return{id:a.term,text:a.term}};h<g.length;){var j=g[h];if(-1!==a.inArray(j,f)){var k=g.substr(0,h),l=a.extend({},c,{term:k}),m=i(l);null!=m?(e(m),g=g.substr(h+1)||"",h=0):h++}else h++}return{term:g}},b}),b.define("select2/data/minimumInputLength",[],function(){function a(a,b,c){this.minimumInputLength=c.get("minimumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){if(b.term=b.term||"",b.term.length<this.minimumInputLength)return void this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}});a.call(this,b,c)},a}),b.define("select2/data/maximumInputLength",[],function(){function a(a,b,c){this.maximumInputLength=c.get("maximumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){if(b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength)return void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}});a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;if(d.maximumSelectionLength>0&&f>=d.maximumSelectionLength)return void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}});a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<span class="select2-dropdown"><span class="select2-results"></span></span>');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val(""),e.$search.blur()}),c.on("focus",function(){c.isOpen()||e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){e.showSearch(a)?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){e.$results.offset().top+e.$results.outerHeight(!1)+50>=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1)&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('<li class="select2-results__option select2-results__option--load-more"role="treeitem" aria-disabled="true"></li>'),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a("<span></span>"),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){b.StoreData(this,"select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(c){var d=b.GetData(this,"select2-scroll-position");a(this).scrollTop(d.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id;this.$container.parents().filter(b.hasScroll).off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.top<f.top-h.height,k=i.bottom>f.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d<b.length;d++){var e=b[d];e.children?c+=a(e.children):c++}return c}function b(a,b,c,d){this.minimumResultsForSearch=c.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),a.call(this,b,c,d)}return b.prototype.showSearch=function(b,c){return!(a(c.data.results)<this.minimumResultsForSearch)&&b.call(this,c)},b}),b.define("select2/dropdown/selectOnClose",["../utils"],function(a){function b(){}return b.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("close",function(a){d._handleSelectOnClose(a)})},b.prototype._handleSelectOnClose=function(b,c){if(c&&null!=c.originalSelect2Event){var d=c.originalSelect2Event;if("select"===d._type||"unselect"===d._type)return}var e=this.getHighlightedResults();if(!(e.length<1)){var f=a.GetData(e[0],"data");null!=f.element&&f.element.selected||null==f.element&&f.selected||this.trigger("select",{data:f})}},b}),b.define("select2/dropdown/closeOnSelect",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("select",function(a){d._selectTriggered(a)}),b.on("unselect",function(a){d._selectTriggered(a)})},a.prototype._selectTriggered=function(a,b){var c=b.originalEvent;c&&(c.ctrlKey||c.metaKey)||this.trigger("close",{originalEvent:c,originalSelect2Event:b})},a}),b.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"鏃犳硶杞藉叆缁撴灉"},inputTooLong:function(a){var b=a.input.length-a.maximum,c="璇峰垹闄� "+b+" 涓瓧绗�";return 1!=b&&(c+="s"),c},inputTooShort:function(a){return"璇峰啀杈撳叆鑷冲皯"+(a.minimum-a.input.length)+"涓瓧绗�"},loadingMore:function(){return"杞藉叆鏇村缁撴灉鈥�"},maximumSelected:function(a){var b="鏈�澶氬彧鑳�"+a.maximum+"涓�夐」";return 1!=a.maximum&&(b+="s"),b},noResults:function(){return"鏈壘鍒扮粨鏋�"},searching:function(){return"鎼滅储涓��"},removeAllItems:function(){return"鍒犻櫎鎵�鏈夐」鐩�"}}}),b.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C){function D(){this.reset()}return D.prototype.apply=function(l){if(l=a.extend(!0,{},this.defaults,l),null==l.dataAdapter){if(null!=l.ajax?l.dataAdapter=o:null!=l.data?l.dataAdapter=n:l.dataAdapter=m,l.minimumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),null==l.tokenSeparators&&null==l.tokenizer||(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L<K.length;L++){var M=K[L],N={};try{N=k.loadPath(M)}catch(a){try{M=this.defaults.amdLanguageBase+M,N=k.loadPath(M)}catch(a){l.debug&&window.console&&console.warn&&console.warn('Select2: The language file for "'+M+'" could not be automatically loaded. A fallback will be used instead.');continue}}J.extend(N)}l.translations=J}else{var O=k.loadPath(this.defaults.amdLanguageBase+"en"),P=new k(l.language);P.extend(O),l.translations=P}return l},D.prototype.reset=function(){function b(a){function b(a){return l[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function c(d,e){if(""===a.trim(d.term))return e;if(e.children&&e.children.length>0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){null==c(d,e.children[g])&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var h=b(e.text).toUpperCase(),i=b(d.term).toUpperCase();return h.indexOf(i)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"100%"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(!0,this.defaults,f)},new D}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){function c(a,b){return b.toUpperCase()}var e=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),d.GetData(a[0],"select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),d.StoreData(a[0],"data",d.GetData(a[0],"select2Tags")),d.StoreData(a[0],"tags",!0)),d.GetData(a[0],"ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",d.GetData(a[0],"ajaxUrl")),d.StoreData(a[0],"ajax-Url",d.GetData(a[0],"ajaxUrl")));for(var f={},g=0;g<a[0].attributes.length;g++){var h=a[0].attributes[g].name,i="data-";if(h.substr(0,i.length)==i){var j=h.substring(i.length),k=d.GetData(a[0],j);f[j.replace(/-([a-z])/g,c)]=k}}b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset&&(f=b.extend(!0,{},a[0].dataset,f));var l=b.extend(!0,{},d.GetData(a[0]),f);l=d._convertData(l);for(var m in l)b.inArray(m,e)>-1||(b.isPlainObject(this.options[m])?b.extend(this.options[m],l[m]):this.options[m]=l[m]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,d){null!=c.GetData(a[0],"select2")&&c.GetData(a[0],"select2").destroy(),this.$element=a,this.id=this._generateId(a),d=d||{},this.options=new b(d,a),e.__super__.constructor.call(this);var f=a.attr("tabindex")||0;c.StoreData(a[0],"old-tabindex",f),a.attr("tabindex","-1");var g=this.options.get("dataAdapter");this.dataAdapter=new g(a,this.options);var h=this.render();this._placeContainer(h);var i=this.options.get("selectionAdapter");this.selection=new i(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,h);var j=this.options.get("dropdownAdapter");this.dropdown=new j(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,h);var k=this.options.get("resultsAdapter");this.results=new k(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var l=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){l.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),c.StoreData(a[0],"select2",this),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return e<=0?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;h<i;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e<b.addedNodes.length;e++){var f=b.addedNodes[e];f.selected&&(c=!0)}else b.removedNodes&&b.removedNodes.length>0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting",clear:"clearing"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),null!=a&&0!==a.length||(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",c.GetData(this.$element[0],"old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),c.RemoveData(this.$element[0]),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),c.StoreData(b[0],"element",this.$element),b},e}),b.define("jquery-mousewheel",["jquery"],function(a){return a}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(a,b,c,d,e){if(null==a.fn.select2){var f=["open","close","destroy"];a.fn.select2=function(b){if("object"==typeof(b=b||{}))return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d,g=Array.prototype.slice.call(arguments,1);return this.each(function(){var a=e.GetData(this,"select2");null==a&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2."),d=a[b].apply(a,g)}),a.inArray(b,f)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c});
\ No newline at end of file
diff --git a/web/web/web.config b/web/web/web.config
index 0bacb15..167693e 100644
--- a/web/web/web.config
+++ b/web/web/web.config
@@ -20,6 +20,10 @@
     <add key="serverIp" value="8.129.227.30"/>
     <add key="clientPort" value="8888"/>
     <add key="connectionString" value="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=8.129.227.30)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SID=SMGW)));User ID=smgw;Password=smgw2018"/>
+	
+	  <!--
+    <add key="connectionString" value="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=8.129.227.30)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SID=SMGW)));User ID=smgwtest;Password=smgwtest"/>
+  -->  
   </appSettings>
   <connectionStrings/>
   <system.web>

--
Gitblit v1.9.1