From 1a81b518e0edd87a310a5b477773657e23d49cbd Mon Sep 17 00:00:00 2001
From: yzh <snbbt@21cn.com>
Date: 星期四, 30 九月 2021 17:53:10 +0800
Subject: [PATCH] 产品管理

---
 web/App_Code/obj/Debug/App_Code.csproj.FileListAbsolute.txt           |   10 
 web/web/static/images/img/phone-16.png                                |    0 
 web/Common/obj/Debug/Common.csproj.AssemblyReference.cache            |    0 
 web/Model/obj/Debug/Model.pdb                                         |    0 
 web/Model/Model/GwProduct.cs                                          |   35 +
 web/App_Code/obj/Debug/App_Code.dll                                   |    0 
 web/web/static/images/img/unauthorized-32.png                         |    0 
 web/UMCLib/obj/Debug/UMCLib.csproj.FileListAbsolute.txt               |    8 
 web/Dao/obj/Debug/Dao.dll                                             |    0 
 web/Model/obj/Debug/Model.dll                                         |    0 
 web/web/GwProduct.aspx                                                |  434 ++++++++++++++
 web/UMCLib/obj/Debug/UMCLib.csproj.CoreCompileInputs.cache            |    6 
 web/.vs/Web/config/applicationhost.config                             |    2 
 web/web/static/images/img/email-16.png                                |    0 
 web/App_Code/bin/Debug/App_Code.pdb                                   |    0 
 web/Model/Model.csproj                                                |   10 
 web/Dao/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache      |    0 
 web/Common/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache   |    0 
 web/web/static/images/productIcon/noticeSMS-32.png                    |    0 
 web/web/static/images/img/avatar.jpg                                  |    0 
 web/Dao/obj/Debug/Dao.pdb                                             |    0 
 web/Lib/Dao.dll                                                       |    0 
 web/App_Code/bin/Debug/App_Code.dll                                   |    0 
 web/.vs/Web/v16/.suo                                                  |    0 
 web/UMCLib/obj/Debug/UMCLib.csproj.AssemblyReference.cache            |    0 
 web/Dao/GwProductDao.cs                                               |  281 +++++++++
 web/web/GwProduct.aspx.cs                                             |   97 +++
 web/App_Code/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache |    0 
 web/Dao/SysXhDao.cs                                                   |  210 +++++++
 web/Lib/Dao.pdb                                                       |    0 
 web/App_Code/obj/Debug/App_Code.csproj.AssemblyReference.cache        |    0 
 web/web/Bin/Dao.dll                                                   |    0 
 web/Dao/obj/Debug/Dao.csproj.CoreCompileInputs.cache                  |    2 
 web/web/static/images/img/certified-32.png                            |    0 
 web/Dao/Dao.csproj                                                    |    2 
 web/App_Code/obj/Debug/App_Code.csproj.CoreCompileInputs.cache        |    2 
 web/Model/Model/SysXh.cs                                              |   24 
 web/UMCLib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache   |    0 
 web/Dao/obj/Debug/Dao.csproj.AssemblyReference.cache                  |    0 
 web/web/static/images/productIcon/VerificationCodeSMS-32.png          |    0 
 web/Lib/Model.dll                                                     |    0 
 web/web/Bin/App_Code.pdb                                              |    0 
 web/Model/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache    |    0 
 web/UMCLib/obj/Debug/UMCLib.dll                                       |    0 
 web/web/Bin/Dao.pdb                                                   |    0 
 web/Model/obj/Debug/Model.csproj.CoreCompileInputs.cache              |    2 
 web/web/GwProduct.ashx                                                |  503 +++++++++++++++++
 web/UMCLib/bin/Debug/UMCLib.pdb                                       |    0 
 web/web/Bin/App_Code.dll                                              |    0 
 web/web/Bin/UMCLib.pdb                                                |    0 
 web/web/static/images/productIcon/marketingSMS-32.png                 |    0 
 web/App_Code/obj/Debug/App_Code.pdb                                   |    0 
 web/web/ExportDocument.aspx.cs                                        |   33 +
 web/UMCLib/obj/Debug/UMCLib.pdb                                       |    0 
 web/Lib/Model.pdb                                                     |    0 
 web/Dao/obj/Debug/Dao.csproj.FileListAbsolute.txt                     |    7 
 web/web/static/images/img/user-16.png                                 |    0 
 web/web/Index.aspx                                                    |    1 
 web/web/static/images/img/certified-16.png                            |    0 
 web/web/Bin/Model.pdb                                                 |    0 
 web/web/logs/logx.txt                                                 |   24 
 web/UMCLib/bin/Debug/UMCLib.dll                                       |    0 
 web/web/static/images/img/unauthorized-16.png                         |    0 
 web/Model/obj/Debug/Model.csproj.FileListAbsolute.txt                 |    7 
 web/web/logs/err.txt                                                  |   24 
 web/web/Bin/Model.dll                                                 |    0 
 web/web/GwStatisV3.aspx.cs                                            |    4 
 web/web/static/images/img/balance-48.png                              |    0 
 web/web/static/images/img/money.png                                   |    0 
 69 files changed, 1,714 insertions(+), 14 deletions(-)

diff --git a/web/.vs/Web/config/applicationhost.config b/web/.vs/Web/config/applicationhost.config
index 88fe2ce..69793a8 100644
--- a/web/.vs/Web/config/applicationhost.config
+++ b/web/.vs/Web/config/applicationhost.config
@@ -162,7 +162,7 @@
             </site>
             <site name="web" id="2">
                 <application path="/" applicationPool="Clr4IntegratedAppPool">
-                    <virtualDirectory path="/" physicalPath="C:\Users\mac\Desktop\Work-Archives\SMGW\SMGW_NewWeb\web\web" />
+                    <virtualDirectory path="/" physicalPath="C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\web" />
                 </application>
                 <bindings>
                     <binding protocol="http" bindingInformation="*:60960:localhost" />
diff --git a/web/.vs/Web/v16/.suo b/web/.vs/Web/v16/.suo
index 9184409..12a2cde 100644
--- a/web/.vs/Web/v16/.suo
+++ b/web/.vs/Web/v16/.suo
Binary files differ
diff --git a/web/App_Code/bin/Debug/App_Code.dll b/web/App_Code/bin/Debug/App_Code.dll
index 465dc0d..346fa14 100644
--- a/web/App_Code/bin/Debug/App_Code.dll
+++ b/web/App_Code/bin/Debug/App_Code.dll
Binary files differ
diff --git a/web/App_Code/bin/Debug/App_Code.pdb b/web/App_Code/bin/Debug/App_Code.pdb
index ceaf345..9a85503 100644
--- a/web/App_Code/bin/Debug/App_Code.pdb
+++ b/web/App_Code/bin/Debug/App_Code.pdb
Binary files differ
diff --git a/web/App_Code/obj/Debug/App_Code.csproj.AssemblyReference.cache b/web/App_Code/obj/Debug/App_Code.csproj.AssemblyReference.cache
index 39165ec..df89c73 100644
--- a/web/App_Code/obj/Debug/App_Code.csproj.AssemblyReference.cache
+++ b/web/App_Code/obj/Debug/App_Code.csproj.AssemblyReference.cache
Binary files differ
diff --git a/web/App_Code/obj/Debug/App_Code.csproj.CoreCompileInputs.cache b/web/App_Code/obj/Debug/App_Code.csproj.CoreCompileInputs.cache
index c9aaa66..49fa306 100644
--- a/web/App_Code/obj/Debug/App_Code.csproj.CoreCompileInputs.cache
+++ b/web/App_Code/obj/Debug/App_Code.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-67fef8bd265e3351d06b7b87fad510aa955c58ab
+148a124d533dab517de60d4081ee6b355ffb0769
diff --git a/web/App_Code/obj/Debug/App_Code.csproj.FileListAbsolute.txt b/web/App_Code/obj/Debug/App_Code.csproj.FileListAbsolute.txt
index d199f1b..e105f1e 100644
--- a/web/App_Code/obj/Debug/App_Code.csproj.FileListAbsolute.txt
+++ b/web/App_Code/obj/Debug/App_Code.csproj.FileListAbsolute.txt
@@ -76,3 +76,13 @@
 D:\Company\SMGW_NewWeb\web\App_Code\obj\Debug\App_Code.csproj.CopyComplete
 D:\Company\SMGW_NewWeb\web\App_Code\obj\Debug\App_Code.dll
 D:\Company\SMGW_NewWeb\web\App_Code\obj\Debug\App_Code.pdb
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\bin\Debug\App_Code.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\bin\Debug\App_Code.pdb
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\bin\Debug\Aspose.Cells.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\bin\Debug\Dao.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\bin\Debug\Ionic.Zip.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\obj\Debug\App_Code.csproj.AssemblyReference.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\obj\Debug\App_Code.csproj.CoreCompileInputs.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\obj\Debug\App_Code.csproj.CopyComplete
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\obj\Debug\App_Code.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\App_Code\obj\Debug\App_Code.pdb
diff --git a/web/App_Code/obj/Debug/App_Code.dll b/web/App_Code/obj/Debug/App_Code.dll
index 465dc0d..346fa14 100644
--- a/web/App_Code/obj/Debug/App_Code.dll
+++ b/web/App_Code/obj/Debug/App_Code.dll
Binary files differ
diff --git a/web/App_Code/obj/Debug/App_Code.pdb b/web/App_Code/obj/Debug/App_Code.pdb
index ceaf345..9a85503 100644
--- a/web/App_Code/obj/Debug/App_Code.pdb
+++ b/web/App_Code/obj/Debug/App_Code.pdb
Binary files differ
diff --git a/web/App_Code/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/web/App_Code/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
index a0da3a7..8d4b15d 100644
--- a/web/App_Code/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
+++ b/web/App_Code/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
Binary files differ
diff --git a/web/Common/obj/Debug/Common.csproj.AssemblyReference.cache b/web/Common/obj/Debug/Common.csproj.AssemblyReference.cache
index dc189ff..2809e12 100644
--- a/web/Common/obj/Debug/Common.csproj.AssemblyReference.cache
+++ b/web/Common/obj/Debug/Common.csproj.AssemblyReference.cache
Binary files differ
diff --git a/web/Common/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/web/Common/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
index e3ce15b..d1a2046 100644
--- a/web/Common/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
+++ b/web/Common/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
Binary files differ
diff --git a/web/Dao/Dao.csproj b/web/Dao/Dao.csproj
index 3d78b9c..c2a5002 100644
--- a/web/Dao/Dao.csproj
+++ b/web/Dao/Dao.csproj
@@ -77,6 +77,7 @@
     <Compile Include="GwClientPayMentDao.cs" />
     <Compile Include="GwMobileAreaDao.cs" />
     <Compile Include="GwMoRouteDao.cs" />
+    <Compile Include="GwProductDao.cs" />
     <Compile Include="GwRmResendDao.cs" />
     <Compile Include="GwSpPrePattern.cs" />
     <Compile Include="GwSpPrePatternDao.cs" />
@@ -89,6 +90,7 @@
     <Compile Include="GwSpDao.cs" />
     <Compile Include="SpSignatureInfo.cs" />
     <Compile Include="SysOperationLogDao.cs" />
+    <Compile Include="SysXhDao.cs" />
     <Compile Include="UserDao.cs" />
     <Compile Include="GwAlarmDao.cs" />
     <Compile Include="GwAuditCacheDao.cs" />
diff --git a/web/Dao/GwProductDao.cs b/web/Dao/GwProductDao.cs
new file mode 100644
index 0000000..3494133
--- /dev/null
+++ b/web/Dao/GwProductDao.cs
@@ -0,0 +1,281 @@
+锘�// Decompiled with JetBrains decompiler
+// Type: Dao.GwStatisV3Dao
+// Assembly: Dao, Version=3.2.1.428, Culture=neutral, PublicKeyToken=c1a16487c920c3dc
+// MVID: 22E6EB3F-6D25-4B57-BE09-AD2F5391CFA5
+// Assembly location: C:\Users\Administrator\Desktop\wwww\bin\Dao.dll
+
+using Common;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Oracle.DataAccess.Client;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Common;
+using Model;
+using System.Text;
+
+namespace Dao
+{
+  public class GwProductDao : IDisposable
+  {
+
+        public List<GwProduct> LoadInfoList(string name, string classes, string is_default, string op_group_id, int pageIndex, int pageSize, out int recordCount)
+        {
+            List<GwProduct> list1 = new List<GwProduct>();
+            recordCount = 0;
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.Append("from GW_PRODUCT where 1=1");
+            List<OracleParameter> list2 = new List<OracleParameter>();
+            if (name != null && name != "")
+            {
+                list2.Add(new OracleParameter(":name", (object)name));
+                stringBuilder.Append(" and name=:name");
+            }
+            if (classes != null && classes != "")
+            {
+                list2.Add(new OracleParameter(":classes", (object)int.Parse(classes)) );
+                stringBuilder.Append(" and classes=:classes");
+            }
+            if (is_default != null && is_default != "")
+            {
+                list2.Add(new OracleParameter(":is_default", (object)int.Parse(is_default)));
+                stringBuilder.Append(" and is_default=:is_default");
+            }
+            if (op_group_id != null && op_group_id != "")
+            {
+                list2.Add(new OracleParameter(":op_group_id", (object)int.Parse(op_group_id)));
+                stringBuilder.Append(" and op_group_id=:op_group_id");
+            }
+
+            stringBuilder.Append(" order by ID DESC");
+            using (OracleDataReader reader = OracleHelper.ExecuteReader("select count(*) as count " + stringBuilder.ToString(), OracleHelper.Connection, list2.ToArray()))
+            {
+                while (((DbDataReader)reader).Read())
+                    recordCount = this.ReadCount(reader);
+            }
+            using (OracleDataReader reader = OracleHelper.ExecuteReader(PubConstant.doOracleSql(pageIndex, pageSize, recordCount, "select * " + stringBuilder.ToString()).ToString(), OracleHelper.Connection, list2.ToArray()))
+            {
+                while (((DbDataReader)reader).Read())
+                {
+                    GwProduct o = new GwProduct();
+                    if (this.ReadInfo(reader, o))
+                        list1.Add(o);
+                }
+            }
+            return list1;
+        }
+
+        private int ReadCount(OracleDataReader reader)
+        {
+            int @int;
+            try
+            {
+                @int = new OracleReaderWrapper(reader).GetInt("count", 0);
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Error(ex);
+                return 0;
+            }
+            return @int;
+        }
+
+
+        public DataTable getClientProduct(string clientID)
+        {
+            string sql = "";
+            sql += "select aa.*, c.balance, (c.basic_num + c.giving_num ) available_num from "
+                + "( "
+                + " select a.id client_product_id, a.client_id, a.sp_id, a.activate_status, "
+                + " b.id product_id, b.name, b.icon, b.instructions, b.classes, b.parent_id, "
+                + " b.path, b.is_default, b.is_enable, b.sort, b.giving_num, b.remark "
+                + " from gw_client_product a, gw_product b "
+                + " where a.product_id = b.id "
+                + " ) aa "
+                + " left join gw_sp c "
+                + " on aa.sp_id = c.id and aa.client_id = :clientId ";  //鍙傛暟锛氬鎴稩D
+
+            return OracleHelper.Execute(sql, OracleHelper.Connection, new OracleParameter(":clientId", (object)clientID));
+        }
+
+        /**
+         * 鑾峰彇浜у搧鍒嗙被鍒楄〃
+         * */
+        public List<GwProduct> getGwProductClassList()
+        {
+            List<GwProduct> list = new List<GwProduct>();
+            using (OracleDataReader reader = OracleHelper.ExecuteReader(string.Format("select * from GW_PRODUCT where IS_ENABLE = 1 AND CLASSES=0 "), OracleHelper.Connection ))
+            {
+                while (reader != null && ((DbDataReader)reader).Read())
+                {
+                    GwProduct o = new GwProduct();
+                    if (this.ReadInfo(reader, o))
+                        list.Add(o);
+                }
+            }
+            return list;
+        }
+
+        /**
+         * 鏍规嵁浜у搧ID鑾峰彇浜у搧淇℃伅
+         * */
+        public GwProduct find(string productId)
+        {
+            GwProduct o = new GwProduct();
+            if (string.IsNullOrEmpty(productId))
+                throw new ArgumentException("浜у搧ID涓虹┖锛�");
+            using (OracleDataReader reader = OracleHelper.ExecuteReader(string.Format("select * from GW_PRODUCT where ID=:productId"), OracleHelper.Connection, new OracleParameter(":productId", (object)productId)))
+            {
+                if (((DbDataReader)reader).Read())
+                {
+                    this.ReadInfo(reader, o);
+                    return o;
+                }
+            }
+            return o;
+        }
+
+        //淇敼
+        public bool Update(GwProduct o)
+        {
+            string sql = "";
+            sql += "update GW_PRODUCT set NAME=:NAME ,ICON=:ICON, INSTRUCTIONS=:INSTRUCTIONS, CLASSES=:CLASSES, PARENT_ID=:PARENT_ID, PATH=:PATH ";
+            sql += " , IS_DEFAULT=:IS_DEFAULT, IS_ENABLE=:IS_ENABLE, SORT=:SORT, OP_GROUP_ID=:OP_GROUP_ID, API_SP_XH_ID=:API_SP_XH_ID, GIVING_NUM=:GIVING_NUM, REMARK=:REMARK ";
+            sql += " where ID=:ID ";
+
+            return OracleHelper.ExecuteSql(sql, OracleHelper.Connection, 
+                new OracleParameter(":NAME", (object)o.name), 
+                new OracleParameter(":ICON", (object)o.icon), 
+                new OracleParameter(":INSTRUCTIONS", (object)o.instructions), 
+                new OracleParameter(":CLASSES", (object)o.classes), 
+                new OracleParameter(":PARENT_ID", (object)o.parent_id), 
+                new OracleParameter(":PATH", (object)o.path), 
+                new OracleParameter(":IS_DEFAULT", (object)o.is_default), 
+                new OracleParameter(":IS_ENABLE", (object)o.is_enable), 
+                new OracleParameter(":SORT", (object)o.sort), 
+                new OracleParameter(":OP_GROUP_ID", (object)o.op_group_id), 
+                new OracleParameter(":API_SP_XH_ID", (object)o.api_sp_xh_id), 
+                new OracleParameter(":GIVING_NUM", (object)o.giving_num), 
+                new OracleParameter(":REMARK", (object)o.remark),
+                new OracleParameter(":ID", (object)o.id)
+                ) > 0;
+        }
+
+        //娣诲姞
+        public bool Add(GwProduct o)
+        {
+            string sql = "";
+            sql += "insert into GW_PRODUCT(ID, NAME, ICON, INSTRUCTIONS, CLASSES, PARENT_ID, PATH, IS_DEFAULT, IS_ENABLE, SORT, OP_GROUP_ID, API_SP_XH_ID, GIVING_NUM, REMARK ) ";
+            sql += " values(:ID, :NAME, :ICON, :INSTRUCTIONS, :CLASSES, :PARENT_ID, :PATH, :IS_DEFAULT, :IS_ENABLE, :SORT, :OP_GROUP_ID, :API_SP_XH_ID, :GIVING_NUM, :REMARK) ";
+
+            return OracleHelper.ExecuteSql(sql, OracleHelper.Connection,
+                new OracleParameter(":ID", (object)o.id),
+                new OracleParameter(":NAME", (object)o.name),
+                new OracleParameter(":ICON", (object)o.icon),
+                new OracleParameter(":INSTRUCTIONS", (object)o.instructions),
+                new OracleParameter(":CLASSES", (object)o.classes),
+                new OracleParameter(":PARENT_ID", (object)o.parent_id),
+                new OracleParameter(":PATH", (object)o.path),
+                new OracleParameter(":IS_DEFAULT", (object)o.is_default),
+                new OracleParameter(":IS_ENABLE", (object)o.is_enable),
+                new OracleParameter(":SORT", (object)o.sort),
+                new OracleParameter(":OP_GROUP_ID", (object)o.op_group_id),
+                new OracleParameter(":API_SP_XH_ID", (object)o.api_sp_xh_id),
+                new OracleParameter(":GIVING_NUM", (object)o.giving_num),
+                new OracleParameter(":REMARK", (object)o.remark)
+                ) > 0;
+        }
+
+        //鏇存柊浜у搧鍚仠鐘舵��
+        public bool UpdateIs_enable(string productId, int is_enable)
+        {
+            return OracleHelper.ExecuteSql("UPDATE GW_PRODUCT SET IS_ENABLE=:IS_ENABLE WHERE ID=:ID", OracleHelper.Connection, new OracleParameter(":IS_ENABLE", (object)is_enable), new OracleParameter(":ID", (object)productId)) > 0;
+        }
+
+        //鍒犻櫎浜у搧
+        public bool Delete(string product_id)
+        {
+            if (string.IsNullOrEmpty(product_id) || string.Equals("0", product_id))
+                return false;
+            return OracleHelper.ExecuteSql("delete from GW_PRODUCT where ID=:ID", OracleHelper.Connection, new OracleParameter(":ID", (object)product_id)) > 0;
+        }
+
+        //妫�鏌ヤ骇鍝佸悕绉�
+        public bool IsNameExists(string name)
+        {
+            if (string.IsNullOrEmpty(name) || string.Equals("0", name))
+                return true;
+            using (OracleDataReader oracleDataReader = OracleHelper.ExecuteReader(string.Format("select * from GW_PRODUCT where NAME=:NAME and IS_ENABLE=1 "), OracleHelper.Connection, new OracleParameter(":NAME", (object)name)))
+                return ((DbDataReader)oracleDataReader).Read();
+        }
+
+        public void Dispose()
+        {
+
+        }
+
+        /**
+         * 鏁版嵁杞崲灏佽
+         * */
+        private bool ReadInfo(OracleDataReader reader, GwProduct gwProduct)
+        {
+            OracleReaderWrapper oracleReaderWrapper = new OracleReaderWrapper(reader);
+            gwProduct.id = oracleReaderWrapper.GetString("id", "");
+            gwProduct.name = oracleReaderWrapper.GetString("name", "");
+            gwProduct.icon = oracleReaderWrapper.GetString("icon", "");
+            gwProduct.instructions = oracleReaderWrapper.GetString("instructions", "");
+            gwProduct.classes = oracleReaderWrapper.GetInt("classes", 0);
+            gwProduct.parent_id = oracleReaderWrapper.GetString("parent_id", "");
+            gwProduct.path = oracleReaderWrapper.GetString("path", "");
+            gwProduct.is_default = oracleReaderWrapper.GetInt("is_default", -1);
+            gwProduct.is_enable = oracleReaderWrapper.GetInt("is_enable", -1);
+            gwProduct.sort = oracleReaderWrapper.GetInt("sort", 0);
+            gwProduct.giving_num = oracleReaderWrapper.GetInt("giving_num", 0);
+            gwProduct.op_group_id = oracleReaderWrapper.GetInt("op_group_id", -1);
+            gwProduct.remark = oracleReaderWrapper.GetString("remark", "");
+            gwProduct.api_sp_xh_id = oracleReaderWrapper.GetString("api_sp_xh_id", "");
+
+            return true;
+        }
+
+        public DataTable GetClientCount(string clientID)
+        {
+          return OracleHelper.Execute("select * from gw_client_product a where a.client_id = :clientId", OracleHelper.Connection, new OracleParameter(":clientId", (object) clientID) );
+        }
+
+        //瀵煎嚭鏌ヨ
+        public DataTable LoadGwProductDataTable(string name, string classes, string is_default, string op_group_id)
+        {
+
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.Append("select ID, NAME, ICON, INSTRUCTIONS, CLASSES, PARENT_ID, PATH, IS_DEFAULT, IS_ENABLE, SORT, OP_GROUP_ID, API_SP_XH_ID, GIVING_NUM, REMARK from GW_PRODUCT where 1=1");
+            OracleParameter[] oracleParameterArray = new OracleParameter[3];
+            if (name != null && name != "")
+            {
+                oracleParameterArray[0] = new OracleParameter(":name", (OracleDbType)126);
+                ((DbParameter)oracleParameterArray[0]).Value = (object)name;
+                stringBuilder.Append(" and name=:name");
+            }
+            if (classes != null && classes != "")
+            {
+                oracleParameterArray[1] = new OracleParameter(":classes", (OracleDbType)112);
+                ((DbParameter)oracleParameterArray[1]).Value = (object)classes;
+                stringBuilder.Append(" and classes=:classes");
+            }
+            if (is_default != null && is_default != "")
+            {
+                oracleParameterArray[1] = new OracleParameter(":is_default", (OracleDbType)112);
+                ((DbParameter)oracleParameterArray[1]).Value = (object)is_default;
+                stringBuilder.Append(" and is_default=:is_default");
+            }
+            if (op_group_id != null && op_group_id != "")
+            {
+                oracleParameterArray[2] = new OracleParameter(":op_group_id", (OracleDbType)126);
+                ((DbParameter)oracleParameterArray[2]).Value = (object)op_group_id;
+                stringBuilder.Append(" and op_group_id=:op_group_id");
+            }
+            return OracleHelper.Execute(PubConstant.doOracleSql(100000, stringBuilder.ToString()).ToString(), OracleHelper.Connection, oracleParameterArray);
+        }
+    }
+}
diff --git a/web/Dao/SysXhDao.cs b/web/Dao/SysXhDao.cs
new file mode 100644
index 0000000..719c543
--- /dev/null
+++ b/web/Dao/SysXhDao.cs
@@ -0,0 +1,210 @@
+锘�// Decompiled with JetBrains decompiler
+// Type: Dao.SysXhDao
+// Assembly: Dao, Version=3.2.1.428, Culture=neutral, PublicKeyToken=c1a16487c920c3dc
+// MVID: 22E6EB3F-6D25-4B57-BE09-AD2F5391CFA5
+// Assembly location: C:\Users\Administrator\Desktop\wwww\bin\Dao.dll
+
+using Common;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Oracle.DataAccess.Client;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Common;
+using Model;
+
+namespace Dao
+{
+  public class SysXhDao : IDisposable
+  {
+
+        /**
+         * 鏍规嵁浜у搧ID鑾峰彇浜у搧淇℃伅
+         * API_SP_NOTICE:閫氱煡鐭俊API璐﹀彿鐢熸垚瑙勫垯
+         * API_SP_SECURITY_CODE:楠岃瘉鐮佺煭淇PI璐﹀彿鐢熸垚瑙勫垯
+         * API_SP_MARKETING:浼氬憳钀ラ攢鐭俊API璐﹀彿鐢熸垚瑙勫垯
+         * */
+        public string getXh(string xhId)
+        {
+            SysXh o = new SysXh();
+            if (string.IsNullOrEmpty(xhId) || string.Equals("0", xhId))
+                return null;
+
+            using (OracleDataReader reader = OracleHelper.ExecuteReader(string.Format("select * from SYS_XH where XH_ID=:XH_ID"), OracleHelper.Connection, new OracleParameter(":XH_ID", (object)xhId)))
+            {
+                if (reader.RowSize <= 0)
+                {
+                    return "鏃犻厤缃�" + xhId + "搴忓彿瑙勫垯";
+                }
+
+                //搴忓彿缁勫悎涓�
+                string xhStr = "";
+                if (((DbDataReader)reader).Read())
+                {
+                    this.ReadInfo(reader, o);
+
+                    //妫�鏌ュ簭鍙烽暱搴�
+                    if (o.xhLength == 0 )
+                    {
+                        return null;
+                    }
+
+                    //妫�鏌ュ簭鍙峰墠缂�
+                    if (!string.IsNullOrEmpty(o.xhPrefix))
+                    {
+                        xhStr += o.xhPrefix;
+                    }
+
+                    //妫�鏌ュ簭鍙峰洖褰掕鍒�
+                    if (!string.IsNullOrEmpty(o.returnRules))
+                    {
+                        //鎸夊勾
+                        if (string.Equals("Y", o.returnRules) )
+                        {
+                            //褰撳墠骞翠笉鍖归厤鏃�
+                            if (!string.Equals(DateTime.Now.ToString("yyyy"), o.currentReturnStr))
+                            {
+                                o.currentNum = 1;
+                            }
+                            else
+                            {
+                                o.currentNum += 1;
+                            }
+                            //鏇存柊褰撳墠骞�
+                            o.currentReturnStr = DateTime.Now.ToString("yyyy");
+                        }
+                        //鎸夋湀
+                        else if (string.Equals("M", o.returnRules))
+                        {
+                            //褰撳墠骞存湀涓嶅尮閰嶆椂
+                            if (!string.Equals(DateTime.Now.ToString("yyyyMM"), o.currentReturnStr))
+                            {
+                                o.currentNum = 1;
+                            }
+                            else
+                            {
+                                o.currentNum += 1;
+                            }
+
+                            //鏇存柊褰撳墠骞存湀
+                            o.currentReturnStr = DateTime.Now.ToString("yyyyMM");
+                        }
+                        //鎸夋棩
+                        else if (string.Equals("D", o.returnRules))
+                        {
+                            //褰撳墠骞存湀鏃ヤ笉鍖归厤鏃�
+                            if (!string.Equals(DateTime.Now.ToString("yyyyMMdd"), o.currentReturnStr))
+                            {
+                                o.currentNum = 1;
+                            }
+                            else
+                            {
+                                o.currentNum += 1;
+                            }
+
+                            //鏇存柊褰撳墠骞存湀鏃�
+                            o.currentReturnStr = DateTime.Now.ToString("yyyyMMdd");
+                        }
+
+                        xhStr += o.currentReturnStr;
+                    }
+                    else
+                    {
+                        o.currentNum += 1;
+                    }
+
+                    string tmpXhStr = "";
+                    //鍒ゆ柇搴忓彿闀垮害
+                    if (o.xhLength > (xhStr.Length + o.currentNum.ToString().Length))
+                    {
+                        for (int i = 0; i < (o.xhLength - xhStr.Length - o.currentNum.ToString().Length); i++)
+                        {
+                            //搴忔暟鍓嶈ˉ鈥�0鈥�
+                            tmpXhStr += "0";
+                        }
+                        tmpXhStr += o.currentNum ;
+                    }
+                    else if (o.xhLength == (xhStr.Length + o.currentNum.ToString().Length))
+                    {
+                        tmpXhStr = o.currentNum.ToString();
+                    }
+                    else
+                    {
+                        //搴忓彿婧㈠嚭
+                        return "搴忓彿婧㈠嚭";
+                    }
+
+                    //鏇存柊搴忓彿
+                    update(o);
+
+                    xhStr += tmpXhStr;
+
+                    return xhStr;
+                }
+            }
+
+            return null;
+        }
+
+        public bool update(SysXh o)
+        {
+            string sql = "";
+            sql += " update SYS_XH set XH_ID=:XH_ID, XH_NAME=:XH_NAME, XH_PREFIX=:XH_PREFIX, RETURN_RULES=:RETURN_RULES, CURRENT_RETURN_STR=:CURRENT_RETURN_STR, CURRENT_NUM=:CURRENT_NUM ";
+            sql += " ,XH_LENGTH=:XH_LENGTH, REMARK=:REMARK ";
+            sql += " where XH_ID=:XH_ID ";
+
+            return OracleHelper.ExecuteSql(sql, OracleHelper.Connection,
+                new OracleParameter(":XH_ID", (object)o.xhId),
+                new OracleParameter(":XH_NAME", (object)o.xhName),
+                new OracleParameter(":XH_PREFIX", (object)o.xhPrefix),
+                new OracleParameter(":RETURN_RULES", (object)o.returnRules),
+                new OracleParameter(":CURRENT_RETURN_STR", (object)o.currentReturnStr),
+                new OracleParameter(":CURRENT_NUM", (object)o.currentNum),
+                new OracleParameter(":XH_LENGTH", (object)o.xhLength),
+                new OracleParameter(":REMARK", (object)o.remark)
+                ) > 0;
+        }
+
+        public List<SysXh> GetSysXhList()
+        {
+            List<SysXh> list = new List<SysXh>();
+            using (OracleDataReader reader = OracleHelper.ExecuteReader("SELECT * FROM SYS_XH  ORDER BY XH_NAME ", OracleHelper.Connection))
+            {
+                while (reader != null && ((DbDataReader)reader).Read())
+                {
+                    SysXh o = new SysXh();
+                    if (this.ReadInfo(reader, o))
+                    {
+                        list.Add(o);
+                    }
+
+                }
+            }
+            return list;
+        }
+
+        public void Dispose()
+        {
+
+        }
+
+        /**
+         * 鏁版嵁杞崲灏佽
+         * */
+        private bool ReadInfo(OracleDataReader reader, SysXh sysXh)
+        {
+            OracleReaderWrapper oracleReaderWrapper = new OracleReaderWrapper(reader);
+            sysXh.xhId = oracleReaderWrapper.GetString("XH_ID", "");
+            sysXh.xhName = oracleReaderWrapper.GetString("XH_NAME", "");
+            sysXh.xhPrefix = oracleReaderWrapper.GetString("XH_PREFIX", "");
+            sysXh.returnRules = oracleReaderWrapper.GetString("RETURN_RULES", "");
+            sysXh.currentReturnStr = oracleReaderWrapper.GetString("CURRENT_RETURN_STR", "");
+            sysXh.xhLength = oracleReaderWrapper.GetInt("XH_LENGTH", 0);
+            sysXh.currentNum = oracleReaderWrapper.GetInt("CURRENT_NUM", 0);
+            sysXh.remark = oracleReaderWrapper.GetString("remark", "");
+
+            return true;
+        }
+  }
+}
diff --git a/web/Dao/obj/Debug/Dao.csproj.AssemblyReference.cache b/web/Dao/obj/Debug/Dao.csproj.AssemblyReference.cache
index f5e894a..21c1065 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.csproj.CoreCompileInputs.cache b/web/Dao/obj/Debug/Dao.csproj.CoreCompileInputs.cache
index e3d8de7..f946d8f 100644
--- a/web/Dao/obj/Debug/Dao.csproj.CoreCompileInputs.cache
+++ b/web/Dao/obj/Debug/Dao.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-d5ec7438d89fe18e3bec35b6f500682586a1659d
+99191e045427b8c77772d20e0f9eacbeab5c5bd3
diff --git a/web/Dao/obj/Debug/Dao.csproj.FileListAbsolute.txt b/web/Dao/obj/Debug/Dao.csproj.FileListAbsolute.txt
index f171bea..2976f19 100644
--- a/web/Dao/obj/Debug/Dao.csproj.FileListAbsolute.txt
+++ b/web/Dao/obj/Debug/Dao.csproj.FileListAbsolute.txt
@@ -73,3 +73,10 @@
 D:\Company\SMGW_NewWeb\web\Dao\obj\Debug\Dao.csproj.CopyComplete
 D:\Company\SMGW_NewWeb\web\Dao\obj\Debug\Dao.dll
 D:\Company\SMGW_NewWeb\web\Dao\obj\Debug\Dao.pdb
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Lib\Dao.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Lib\Dao.pdb
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\obj\Debug\Dao.csproj.AssemblyReference.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\obj\Debug\Dao.csproj.CoreCompileInputs.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\obj\Debug\Dao.csproj.CopyComplete
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\obj\Debug\Dao.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Dao\obj\Debug\Dao.pdb
diff --git a/web/Dao/obj/Debug/Dao.dll b/web/Dao/obj/Debug/Dao.dll
index 514c926..aee093f 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 d80eb94..7848570 100644
--- a/web/Dao/obj/Debug/Dao.pdb
+++ b/web/Dao/obj/Debug/Dao.pdb
Binary files differ
diff --git a/web/Dao/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/web/Dao/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
index 675b0b1..370c349 100644
--- a/web/Dao/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
+++ b/web/Dao/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
Binary files differ
diff --git a/web/Lib/Dao.dll b/web/Lib/Dao.dll
index 514c926..aee093f 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 d80eb94..7848570 100644
--- a/web/Lib/Dao.pdb
+++ b/web/Lib/Dao.pdb
Binary files differ
diff --git a/web/Lib/Model.dll b/web/Lib/Model.dll
index d439d79..6a96b73 100644
--- a/web/Lib/Model.dll
+++ b/web/Lib/Model.dll
Binary files differ
diff --git a/web/Lib/Model.pdb b/web/Lib/Model.pdb
index bb20d45..0567d8b 100644
--- a/web/Lib/Model.pdb
+++ b/web/Lib/Model.pdb
Binary files differ
diff --git a/web/Model/Model.csproj b/web/Model/Model.csproj
index 3f53208..0263a6d 100644
--- a/web/Model/Model.csproj
+++ b/web/Model/Model.csproj
@@ -67,6 +67,7 @@
     <Compile Include="Model\GwMobileArea.cs" />
     <Compile Include="Model\GwMoRoute.cs" />
     <Compile Include="Model\GwOpGroupItem.cs" />
+    <Compile Include="Model\GwProduct.cs" />
     <Compile Include="Model\GwRmResend.cs" />
     <Compile Include="Model\GwSmsTask.cs" />
     <Compile Include="Model\GwStatisV3.cs" />
@@ -76,10 +77,15 @@
     <Compile Include="Model\LgSmsTask.cs" />
     <Compile Include="Model\MessageCenter.cs" />
     <Compile Include="Model\SysOperationLog.cs" />
+    <Compile Include="Model\SysXh.cs" />
     <Compile Include="PageHandler.cs" />
     <Compile Include="PageContext.cs" />
-    <Compile Include="MasterPageBase.cs" />
-    <Compile Include="PageBase.cs" />
+    <Compile Include="MasterPageBase.cs">
+      <SubType>ASPXCodeBehind</SubType>
+    </Compile>
+    <Compile Include="PageBase.cs">
+      <SubType>ASPXCodeBehind</SubType>
+    </Compile>
     <Compile Include="Model\GwAp.cs" />
     <Compile Include="Model\SysMenu.cs" />
     <Compile Include="Model\SysUserMenu.cs" />
diff --git a/web/Model/Model/GwProduct.cs b/web/Model/Model/GwProduct.cs
new file mode 100644
index 0000000..00fb14f
--- /dev/null
+++ b/web/Model/Model/GwProduct.cs
@@ -0,0 +1,35 @@
+锘� 
+
+namespace Model
+{
+  public class GwProduct
+  {
+        public string id { get; set; }
+
+        public string name { get; set; }
+
+        public string icon { get; set; }
+
+        public string instructions { get; set; }
+
+        public int classes { get; set; }
+
+        public string parent_id { get; set; }
+
+        public string path { get; set; }
+
+        public int is_default { get; set; }
+
+        public int is_enable { get; set; }
+
+        public int sort { get; set; }
+
+        public int op_group_id { get; set; }
+
+        public int giving_num { get; set; }
+
+        public string remark { get; set; }
+
+        public string api_sp_xh_id { get; set; } //API璐﹀彿鐢熸垚瑙勫垯
+    }
+}
diff --git a/web/Model/Model/SysXh.cs b/web/Model/Model/SysXh.cs
new file mode 100644
index 0000000..6f0f06e
--- /dev/null
+++ b/web/Model/Model/SysXh.cs
@@ -0,0 +1,24 @@
+锘� 
+using System.Text.RegularExpressions;
+
+namespace Model
+{
+  public class SysXh
+    {
+        public string xhId { get; set; }
+        public string xhName { get; set; }  //搴忓彿鍚嶇О
+
+        public string xhPrefix { get; set; }    //搴忓彿鍓嶇紑
+
+        public string returnRules { get; set; } //鍥炲綊瑙勫垯锛歒-鎸夊勾銆丮-鎸夋湀銆丏-鎸夋棩
+
+        public string currentReturnStr { get; set; }    //褰撳墠鍥炲綊涓�
+
+        public int currentNum { get; set; } //褰撳墠搴忔暟
+
+        public int xhLength { get; set; }    //搴忓彿闀垮害
+
+        public string remark { get; set; }  //澶囨敞
+    }
+
+}
diff --git a/web/Model/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/web/Model/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
index 2743635..42e31cc 100644
--- a/web/Model/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
+++ b/web/Model/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
Binary files differ
diff --git a/web/Model/obj/Debug/Model.csproj.CoreCompileInputs.cache b/web/Model/obj/Debug/Model.csproj.CoreCompileInputs.cache
index 10944de..9a211ce 100644
--- a/web/Model/obj/Debug/Model.csproj.CoreCompileInputs.cache
+++ b/web/Model/obj/Debug/Model.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-d136e7243de12f847333601a3e3b0ceb3bb3ede8
+386caef0a68152082007ea9053d4fd5b4b62f129
diff --git a/web/Model/obj/Debug/Model.csproj.FileListAbsolute.txt b/web/Model/obj/Debug/Model.csproj.FileListAbsolute.txt
index db986d8..078eee5 100644
--- a/web/Model/obj/Debug/Model.csproj.FileListAbsolute.txt
+++ b/web/Model/obj/Debug/Model.csproj.FileListAbsolute.txt
@@ -54,3 +54,10 @@
 D:\Company\SMGW_NewWeb\web\Model\obj\Debug\Model.dll
 D:\Company\SMGW_NewWeb\web\Model\obj\Debug\Model.pdb
 D:\Company\SMGW_NewWeb\web\Model\obj\Debug\Model.csproj.AssemblyReference.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Lib\Model.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Lib\Model.pdb
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\obj\Debug\Model.csproj.AssemblyReference.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\obj\Debug\Model.csproj.CoreCompileInputs.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\obj\Debug\Model.csproj.CopyComplete
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\obj\Debug\Model.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\Model\obj\Debug\Model.pdb
diff --git a/web/Model/obj/Debug/Model.dll b/web/Model/obj/Debug/Model.dll
index d439d79..6a96b73 100644
--- a/web/Model/obj/Debug/Model.dll
+++ b/web/Model/obj/Debug/Model.dll
Binary files differ
diff --git a/web/Model/obj/Debug/Model.pdb b/web/Model/obj/Debug/Model.pdb
index bb20d45..0567d8b 100644
--- a/web/Model/obj/Debug/Model.pdb
+++ b/web/Model/obj/Debug/Model.pdb
Binary files differ
diff --git a/web/UMCLib/bin/Debug/UMCLib.dll b/web/UMCLib/bin/Debug/UMCLib.dll
index 1816571..d1a7bf3 100644
--- a/web/UMCLib/bin/Debug/UMCLib.dll
+++ b/web/UMCLib/bin/Debug/UMCLib.dll
Binary files differ
diff --git a/web/UMCLib/bin/Debug/UMCLib.pdb b/web/UMCLib/bin/Debug/UMCLib.pdb
index c26dc29..8b41c53 100644
--- a/web/UMCLib/bin/Debug/UMCLib.pdb
+++ b/web/UMCLib/bin/Debug/UMCLib.pdb
Binary files differ
diff --git a/web/UMCLib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/web/UMCLib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
index 6109698..4b3948e 100644
--- a/web/UMCLib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
+++ b/web/UMCLib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
Binary files differ
diff --git a/web/UMCLib/obj/Debug/UMCLib.csproj.AssemblyReference.cache b/web/UMCLib/obj/Debug/UMCLib.csproj.AssemblyReference.cache
index e3cc0c0..7290b53 100644
--- a/web/UMCLib/obj/Debug/UMCLib.csproj.AssemblyReference.cache
+++ b/web/UMCLib/obj/Debug/UMCLib.csproj.AssemblyReference.cache
Binary files differ
diff --git a/web/UMCLib/obj/Debug/UMCLib.csproj.CoreCompileInputs.cache b/web/UMCLib/obj/Debug/UMCLib.csproj.CoreCompileInputs.cache
index 3bc0822..3bf9622 100644
--- a/web/UMCLib/obj/Debug/UMCLib.csproj.CoreCompileInputs.cache
+++ b/web/UMCLib/obj/Debug/UMCLib.csproj.CoreCompileInputs.cache
@@ -1,5 +1 @@
-<<<<<<< HEAD
-ba5129b8c35f1e2785f99668fd04dd28b6d68368
-=======
-c546f08e5171d2ea11491af4c442ff223c9bb58c
->>>>>>> Release
+27f9b4fb5d36be9c155fb6557fe17e62c41ec4da
diff --git a/web/UMCLib/obj/Debug/UMCLib.csproj.FileListAbsolute.txt b/web/UMCLib/obj/Debug/UMCLib.csproj.FileListAbsolute.txt
index 855723c..9c5c17e 100644
--- a/web/UMCLib/obj/Debug/UMCLib.csproj.FileListAbsolute.txt
+++ b/web/UMCLib/obj/Debug/UMCLib.csproj.FileListAbsolute.txt
@@ -63,3 +63,11 @@
 D:\Company\SMGW_NewWeb\web\UMCLib\obj\Debug\UMCLib.dll
 D:\Company\SMGW_NewWeb\web\UMCLib\obj\Debug\UMCLib.pdb
 D:\Company\SMGW_NewWeb\web\UMCLib\obj\Debug\UMCLib.csproj.AssemblyReference.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\bin\Debug\UMCLib.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\bin\Debug\UMCLib.pdb
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\bin\Debug\Newtonsoft.Json.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\obj\Debug\UMCLib.csproj.AssemblyReference.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\obj\Debug\UMCLib.csproj.CoreCompileInputs.cache
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\obj\Debug\UMCLib.csproj.CopyComplete
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\obj\Debug\UMCLib.dll
+C:\AYZH\work\Git_Rep\SMGW_NewWeb\web\UMCLib\obj\Debug\UMCLib.pdb
diff --git a/web/UMCLib/obj/Debug/UMCLib.dll b/web/UMCLib/obj/Debug/UMCLib.dll
index 1816571..d1a7bf3 100644
--- a/web/UMCLib/obj/Debug/UMCLib.dll
+++ b/web/UMCLib/obj/Debug/UMCLib.dll
Binary files differ
diff --git a/web/UMCLib/obj/Debug/UMCLib.pdb b/web/UMCLib/obj/Debug/UMCLib.pdb
index c26dc29..8b41c53 100644
--- a/web/UMCLib/obj/Debug/UMCLib.pdb
+++ b/web/UMCLib/obj/Debug/UMCLib.pdb
Binary files differ
diff --git a/web/web/Bin/App_Code.dll b/web/web/Bin/App_Code.dll
index 465dc0d..346fa14 100644
--- a/web/web/Bin/App_Code.dll
+++ b/web/web/Bin/App_Code.dll
Binary files differ
diff --git a/web/web/Bin/App_Code.pdb b/web/web/Bin/App_Code.pdb
index ceaf345..9a85503 100644
--- a/web/web/Bin/App_Code.pdb
+++ b/web/web/Bin/App_Code.pdb
Binary files differ
diff --git a/web/web/Bin/Dao.dll b/web/web/Bin/Dao.dll
index 514c926..aee093f 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 d80eb94..7848570 100644
--- a/web/web/Bin/Dao.pdb
+++ b/web/web/Bin/Dao.pdb
Binary files differ
diff --git a/web/web/Bin/Model.dll b/web/web/Bin/Model.dll
index d439d79..6a96b73 100644
--- a/web/web/Bin/Model.dll
+++ b/web/web/Bin/Model.dll
Binary files differ
diff --git a/web/web/Bin/Model.pdb b/web/web/Bin/Model.pdb
index bb20d45..0567d8b 100644
--- a/web/web/Bin/Model.pdb
+++ b/web/web/Bin/Model.pdb
Binary files differ
diff --git a/web/web/Bin/UMCLib.pdb b/web/web/Bin/UMCLib.pdb
index c26dc29..8b41c53 100644
--- a/web/web/Bin/UMCLib.pdb
+++ b/web/web/Bin/UMCLib.pdb
Binary files differ
diff --git a/web/web/ExportDocument.aspx.cs b/web/web/ExportDocument.aspx.cs
index 0d28a08..7ce3bc4 100644
--- a/web/web/ExportDocument.aspx.cs
+++ b/web/web/ExportDocument.aspx.cs
@@ -25,6 +25,9 @@
             case "exportGwStatisV3"://瀵煎嚭缁熻鎶ヨ〃
                 this.ExprortGwStatisV3();
                 break;
+            case "exGwProduct":
+                this.ExGwProduct();
+                break;
         }
     }
 
@@ -333,4 +336,34 @@
             webTool.Export(dataTable, dictionary, "鏃ュ織_" + sDate, this.Context.Response);
         }
     }
+
+    //浜у搧瀵煎嚭Excel
+    private void ExGwProduct()
+    {
+        string name = this.AppContext.GetString("name");
+        string classes = this.AppContext.GetString("classes");
+        string is_default = this.AppContext.GetString("is_default");
+        string op_group_id = this.AppContext.GetString("op_group_id");
+        using (GwProductDao gwProductDao = new GwProductDao())
+        {
+            DataTable dataTable = gwProductDao.LoadGwProductDataTable(name, classes, is_default, op_group_id);
+            WebTool webTool = new WebTool();
+            Dictionary<string, string> dictionary = new Dictionary<string, string>();
+            //dictionary["浜у搧ID"] = "ID";
+            dictionary["浜у搧鍚嶇О"] = "NAME";
+            //dictionary["鍥炬爣"] = "ICON";
+            dictionary["浣跨敤璇存槑"] = "INSTRUCTIONS";
+            dictionary["绫诲埆"] = "CLASSES";
+            dictionary["鐖剁骇浜у搧鍒嗙被"] = "PARENT_ID";
+            //dictionary["璺緞"] = "PATH";
+            dictionary["鏄惁榛樿"] = "IS_DEFAULT";
+            dictionary["鏄惁鍚敤"] = "IS_ENABLE";
+            dictionary["鎺掑簭"] = "SORT";
+            dictionary["榛樿閫氶亾"] = "OP_GROUP_ID";
+            dictionary["API璐﹀彿鐢熸垚瑙勫垯"] = "API_SP_XH_ID";
+            dictionary["榛樿璧犻�佹潯鏁�"] = "GIVING_NUM";
+            dictionary["澶囨敞"] = "REMARK";
+            webTool.Export(dataTable, dictionary, "PRODUCT_" + (object)DateTime.Now.Ticks, this.Context.Response);
+        }
+    }
 }
diff --git a/web/web/GwProduct.ashx b/web/web/GwProduct.ashx
new file mode 100644
index 0000000..60338c9
--- /dev/null
+++ b/web/web/GwProduct.ashx
@@ -0,0 +1,503 @@
+锘�<%@ WebHandler Language="C#" Class="GwProductHandler" %>
+
+using Common;
+using Dao;
+using Model;
+using Newtonsoft.Json;
+using System;
+using System.Web;
+using System.IO;
+using System.Collections.Generic;
+using System.Text;
+using System.Text.RegularExpressions;
+
+public class GwProductHandler : PageHandler<SysUser>
+{
+    private GwProductDao _Dao = new GwProductDao();
+    private SysXhDao sysXhDao = new SysXhDao();
+    private List<GwOp> _OpList;
+    private List<GwOpGroup> _GwOpGroupList;
+    private List<SysXh> _SysXhList;
+    private List<GwProduct> _GwProductClassList;    //浜у搧鍒嗙被鍒楄〃
+
+    private List<GwOp> OpList
+    {
+        get
+        {
+            if (this._OpList == null)
+            {
+                using (GwOpDao gwOpDao = new GwOpDao())
+                    this._OpList = gwOpDao.LoadInfoList();
+            }
+            return this._OpList;
+        }
+    }
+
+    //鑾峰彇浜у搧鍒嗙被鍒楄〃
+    private List<GwProduct> GwProductClassList
+    {
+        get
+        {
+            if (this._GwProductClassList == null)
+            {
+                using (GwProductDao gwProductDao = new GwProductDao())
+                    this._GwProductClassList = gwProductDao.getGwProductClassList();
+            }
+            return this._GwProductClassList;
+        }
+    }
+
+    //鑾峰彇閫氶亾缁勫垪琛�
+    private List<GwOpGroup> GwOpGroupList
+    {
+        get
+        {
+            if (this._GwOpGroupList == null)
+            {
+                using (GwOpGroupDao gwOpGroupDao = new GwOpGroupDao())
+                    this._GwOpGroupList = gwOpGroupDao.GetGroupList();
+            }
+            return this._GwOpGroupList;
+        }
+    }
+
+    //鑾峰彇搴忓彿瑙勫垯鍒楄〃
+    private List<SysXh> SysXhList
+    {
+        get
+        {
+            if (this._SysXhList == null)
+            {
+                using (SysXhDao sysXhDao = new SysXhDao())
+                    this._SysXhList = sysXhDao.GetSysXhList();
+            }
+            return this._SysXhList;
+        }
+    }
+
+
+    public override JsonPageResult ProcessRequestInternal(PageContext<SysUser> context)
+    {
+        string @string = context.GetString("action");
+        switch (@string)
+        {
+
+            case "LoadGwProductPageList":
+                return this.LoadGwProductPageList(context);
+            case "getGwProduct":
+                return this.GetGwProduct(context);
+            case "delete":
+                return this.Delete(context);
+            case "add":
+                return this.Add(context);
+            case "update":
+                return this.Update(context);
+            case "updateIs_enable":
+                return this.UpdateIs_enable(context);
+
+            case "getGwspDetailed":
+                return this.GetGwspDetailed(context);
+            default:
+                throw new Exception("Invalid Action=" + @string);
+        }
+    }
+
+
+    private JsonPageResult GetGwspDetailed(PageContext<SysUser> context)
+    {
+        string @string = context.GetString("spID");
+        if (string.IsNullOrEmpty(@string))
+            throw new ArgumentException("鑾峰彇SPID閿欒");
+        using (GwSpDao gwSpDao = new GwSpDao())
+        {
+            GwSp gwSp = gwSpDao.Get(@string);
+            string[] strArray = gwSp.McExpression.Split(new char[1]
+            {
+        ';'
+            }, StringSplitOptions.RemoveEmptyEntries);
+            string str = (Convert.ToInt32(strArray[0]) != 0 ? strArray[0] + "鏉�/1鍒嗛挓;" : "") + (Convert.ToInt32(strArray[1]) != 0 ? strArray[1] + "鏉�/5鍒嗛挓;" : "") + (Convert.ToInt32(strArray[2]) != 0 ? strArray[2] + "鏉�/10鍒嗛挓;" : "") + (Convert.ToInt32(strArray[3]) != 0 ? strArray[3] + "鏉�/鍗婂皬鏃�;" : "") + (Convert.ToInt32(strArray[4]) != 0 ? strArray[4] + "鏉�/1灏忔椂;" : "") + (Convert.ToInt32(strArray[5]) != 0 ? strArray[5] + "鏉�/4灏忔椂;" : "") + (Convert.ToInt32(strArray[6]) != 0 ? strArray[6] + "鏉�/6灏忔椂;" : "") + (Convert.ToInt32(strArray[7]) != 0 ? strArray[7] + "鏉�/12灏忔椂;" : "") + (Convert.ToInt32(strArray[8]) != 0 ? strArray[8] + "鏉�/24灏忔椂;" : "");
+            return new JsonPageResult(true, (object)new
+            {
+                Get = gwSp,
+                McExpression = str
+            });
+        }
+    }
+
+    /// <summary>
+    /// 鍔犺浇浜у搧椤甸潰鍒楄〃
+    /// </summary>
+    /// <param name="context"></param>
+    /// <returns></returns>
+    private JsonPageResult LoadGwProductPageList(PageContext<SysUser> context)
+    {
+        string name = context.GetString("name");
+        string classes = context.GetString("classes");
+        string is_default = context.GetString("is_default");
+        string op_group_id = context.GetString("op_group_id")=="0" ? "": context.GetString("op_group_id");
+        int recordCount = 0;
+        int pageSize = context.GetInt("pageSize", 20);
+        int pageIndex = context.GetInt("pageIndex", 1);
+
+        GwProductDao gwProductDao = new GwProductDao();
+
+        //鍔犺浇浜у搧鍒楄〃淇℃伅
+        List<GwProduct> list = gwProductDao.LoadInfoList(name, classes, is_default, op_group_id, pageIndex, pageSize, out recordCount);
+        string str1 = "";
+        if (list != null && list.Count > 0)
+        {
+            foreach (GwProduct gwProduct in list)
+            {
+                str1 = str1 + "<tr><td  rowspan=\"1\" ><input type=\"checkbox\"name=\"checkbox\" value=\"" + gwProduct.id + "\"/></td><td rowspan=\"1\">" + gwProduct.name ;
+                str1 += "</td>";
+                str1 = str1 + "<td>" + "<img src=\'" + gwProduct.icon + "' />" ;
+                str1 += "</td>";
+                str1 = str1 + "<td>" + gwProduct.instructions ;
+                str1 += "</td>";
+                str1 = str1 + "<td>" + classesToName(gwProduct.classes) ;
+                str1 += "</td>";
+                str1 = str1 + "<td>" + this.gwProductClassToName(gwProduct.parent_id) ;
+                str1 += "</td>";
+                //str1 = str1 + "<td>" + gwProduct.path ;
+                //str1 += "</td>";
+                str1 = str1 + "<td>" + isDefaultToName(gwProduct.is_default) ;
+                str1 += "</td>";
+                //str1 = str1 + "<td>" + isEnableToName(gwProduct.is_enable) ;
+                str1 = str1 + "<td>" + GetStatusText(gwProduct.is_enable, gwProduct.id) ;
+                str1 += "</td>";
+                str1 = str1 + "<td>" + gwProduct.sort ;
+                str1 += "</td>";
+                str1 = str1 + "<td>" + this.opGroupIdToName(gwProduct.op_group_id) ;
+                str1 += "</td>";
+                str1 = str1 + "<td>" + this.apiSpXhIdToName(gwProduct.api_sp_xh_id) ;
+                str1 += "</td>";
+                str1 = str1 + "<td>" + gwProduct.giving_num ;
+                str1 += "</td>";
+                str1 = str1 + "<td>" + gwProduct.remark ;
+                str1 += "</td>";
+                str1 += "<td rowspan=\"1\" class=\"text-right\">";
+                if (context.HasRight("3023"))
+                    str1 += string.Format(" <a class=\"btn-block btn btn-primary btn-xs action-modal-edit\" data-id=\"{0}\"><i class=\"fa fa-edit\"></i>  缂栬緫</a>", (object)gwProduct.id);
+                if (context.HasRight("3024"))
+                    str1 += string.Format(" <a class=\"btn-block btn btn-xs btn-default action-delete\"  data-id=\"{0}\"><i class=\"fa fa-trash\"></i> 鍒犻櫎</a>", (object)gwProduct.id);
+                str1 += "</td>";
+                str1 += "</tr>";
+            }
+        }
+        else
+            str1 += "<tr><td colspan=\"14\" style=\"padding-left:5px; text-align: center;\">鏆傛棤淇℃伅</td></tr>";
+        return new JsonPageResult(true, (object)new
+        {
+            Table = str1.ToString(),
+            TotalCount = recordCount
+        });
+    }
+
+    //鏍规嵁浜у搧ID鑾峰彇浜у搧淇℃伅
+    private JsonPageResult GetGwProduct(PageContext<SysUser> context)
+    {
+        return new JsonPageResult(true, this._Dao.find(context.GetString("id")));
+    }
+
+    //浜у搧绫诲埆杞崲鍚嶇О
+    private string classesToName(int classes)
+    {
+        string str = "";
+        switch (classes)
+        {
+            case 0:
+                str = "浜у搧鍒嗙被";
+                break;
+            case 1:
+                str = "浜у搧";
+                break;
+        }
+        return str;
+    }
+
+    //浜у搧ID杞崲鍚嶇О
+    public string gwProductClassToName(string gwProductId)
+    {
+
+        if (this.GwProductClassList == null)
+            return string.Empty;
+        GwProduct newGwProduct = this.GwProductClassList.Find((Predicate<GwProduct>)(gwProduct => gwProduct.id == gwProductId));
+        if (newGwProduct != null)
+            return string.Format("{0}<div class=\"text-muted\">{1}</div>", (object)newGwProduct.id, (object)newGwProduct.name);
+
+        return string.Format("{0}", (object)gwProductId);
+
+    }
+
+    //鏄惁榛樿杞崲鍚嶇О
+    private string isDefaultToName(int isDefault)
+    {
+        string str = "";
+        switch (isDefault)
+        {
+            case 0:
+                str = "鍚�";
+                break;
+            case 1:
+                str = "鏄�";
+                break;
+        }
+        return str;
+    }
+
+    //鏄惁鍚敤杞崲鍚嶇О
+    private string isEnableToName(int isDefault)
+    {
+        string str = "";
+        switch (isDefault)
+        {
+            case 0:
+                str = "鍋滅敤";
+                break;
+            case 1:
+                str = "鍚敤";
+                break;
+        }
+        return str;
+    }
+
+    //閫氶亾缁勮浆鎹㈠悕绉�
+    public string opGroupIdToName(int opGroupId)
+    {
+
+        if (this.GwOpGroupList == null)
+            return string.Empty;
+        GwOpGroup newGwOpGroup = this.GwOpGroupList.Find((Predicate<GwOpGroup>)(gwGroup => gwGroup.GroupID == opGroupId));
+        if (newGwOpGroup != null)
+            return string.Format("{0}<div class=\"text-muted\">{1}</div>", (object)newGwOpGroup.GroupID, (object)newGwOpGroup.GroupName);
+
+        return string.Format("{0}", (object)opGroupId);
+
+    }
+
+    //搴忓彿瑙勫垯ID杞崲鍚嶇О
+    public string apiSpXhIdToName(string api_sp_xh_id)
+    {
+
+        if (this.SysXhList == null)
+            return string.Empty;
+        SysXh newSysXh = this.SysXhList.Find((Predicate<SysXh>)(sysXh => sysXh.xhId == api_sp_xh_id));
+        if (newSysXh != null)
+            return string.Format("{0}<div class=\"text-muted\">{1}</div>", (object)newSysXh.xhId, (object)newSysXh.xhName);
+
+        return string.Format("{0}", (object)api_sp_xh_id);
+
+        foreach (SysXh sysXh in this.SysXhList)
+        {
+            if (api_sp_xh_id == sysXh.xhId)
+                return sysXh.xhName;
+            else
+                continue;
+        }
+
+        return "搴忓彿瑙勫垯鏈畾涔�";
+
+    }
+
+    //浜у搧鏄惁鍚敤
+    private string GetStatusText(int is_enable, string productId)
+    {
+        if (is_enable == 0)
+            return string.Format("<span class=\"action-updateStatus btn btn-xs btn-default\" data-is_enable=\"1\" data-id=\"{0}\">宸插仠鐢�</span>", (object)productId);
+        return string.Format("<span class=\"action-updateStatus btn btn-xs  btn-success \" data-is_enable=\"0\" data-id=\"{0}\">宸插惎鐢�</span>", (object)productId);
+    }
+
+
+
+
+    //鏍规嵁鐖剁骇浜у搧ID鑾峰彇浜у搧璺緞
+    public string getProductPath(string parent_id, string productId)
+    {
+        string path = "";
+        if (string.IsNullOrEmpty(parent_id) || parent_id == "0" || this.GwProductClassList == null)
+        {
+            path += "0" + "," + productId;
+            return path;
+        }
+
+        GwProduct newGwProduct = this.GwProductClassList.Find((Predicate<GwProduct>)(gwProduct => gwProduct.id == parent_id));
+        if (newGwProduct == null)
+        {
+            path += "0" + "," + productId;
+            return path;
+        }
+        else if (newGwProduct != null)
+        {
+            path += (object)newGwProduct.path + "," + productId;
+            return path;
+        }
+
+        return productId;
+
+    }
+
+
+    public bool IsInt(string input)
+    {
+        for (int index = 0; index < input.Length; ++index)
+        {
+            if (!char.IsNumber(input, index))
+                return false;
+        }
+        return true;
+    }
+
+
+    private string FormatIpHtml(string p)
+    {
+        if (string.IsNullOrEmpty(p))
+            return string.Empty;
+        return p.Replace("|", "<br/>");
+    }
+
+
+    //淇濆瓨鏇存柊鍚庣殑璐﹀彿淇℃伅
+    private JsonPageResult Update(PageContext<SysUser> context)
+    {
+        GwProduct o = new GwProduct();
+        o.id = context.GetString("id");
+        o.name = context.GetString("name");
+        //o.icon = context.GetString("icon");
+        o.instructions = context.GetString("instructions");
+        o.classes = context.GetInt("classes", 0);
+        o.parent_id = context.GetString("parent_id");
+        //o.path = context.GetString("path");
+        o.path = getProductPath(o.parent_id, o.id);
+        o.is_default = context.GetInt("is_default", 0);
+        o.is_enable = context.GetInt("is_enable", 0);
+        o.sort = context.GetInt("sort", 0);
+        o.op_group_id = context.GetInt("op_group_id", 0);
+        o.api_sp_xh_id = context.GetString("api_sp_xh_id");
+        o.giving_num = context.GetInt("giving_num", 0);
+        o.remark = context.GetString("remark");
+
+        if (string.IsNullOrEmpty(o.name))
+            throw new Exception("璇疯緭鍏ヤ骇鍝佸悕绉帮紒");
+        if (!string.IsNullOrEmpty(context.GetString("sort")) && !Regex.IsMatch(context.GetString("sort"), "^[0-9]*$"))
+            throw new Exception("搴忓彿蹇呴』涓烘暟瀛�");
+        
+        //涓婁紶淇濆瓨鏂囦欢
+        HttpFileCollection _file = HttpContext.Current.Request.Files;
+        if (_file.Count > 0)
+        {
+            long size = _file[0].ContentLength; //鏂囦欢澶у皬
+            string type = _file[0].ContentType; //鏂囦欢绫诲瀷
+            string name = _file[0].FileName; //鏂囦欢鍚�
+            string _tp = Path.GetExtension(name);//鏂囦欢鎵╁睍鍚�
+            if (_tp.ToLower() == ".jpg" || _tp.ToLower() == ".jpeg" || _tp.ToLower() == ".gif" || _tp.ToLower() == ".png")
+            {
+                Stream stream = _file[0].InputStream;//鑾峰彇鏂囦欢娴�
+                string savaName = o.id + "-" + DateTime.Now.ToString("yyyyMMddHHssmm") + _tp; //淇濆瓨鏂囦欢銆傛枃浠跺悕
+                string filepath = "\\static\\images\\productIcon\\" + savaName;
+                string path = AppDomain.CurrentDomain.BaseDirectory + filepath;//鍥剧墖璺緞
+                _file[0].SaveAs(path);
+
+                o.icon = filepath;
+            }
+            else
+            {
+                throw new Exception("闈炲浘鐗囨枃浠讹紝璇烽噸鏂伴�夋嫨锛�");
+            }
+
+        }else
+        {
+                if(o.classes==0)
+            {
+                    o.icon = "";
+            }else { 
+                o.icon = context.GetString("icon");
+            }
+        }
+
+        this._Dao.Update(o);
+        return new JsonPageResult(true, (object)("浜у搧" + o.name + "淇敼鎴愬姛锛�"));
+    }
+
+    private JsonPageResult Add(PageContext<SysUser> context)
+    {
+        GwProduct o = new GwProduct();
+        //o.id = context.GetString("id");
+        o.id = sysXhDao.getXh("GW_PRODUCT");
+        o.name = context.GetString("name");
+        //o.icon = context.GetString("icon");
+        o.instructions = context.GetString("instructions");
+        o.classes = context.GetInt("classes", 0);
+        o.parent_id = context.GetString("parent_id");
+        //o.path = context.GetString("path");
+        o.path = getProductPath(o.parent_id, o.id);
+        o.is_default = context.GetInt("is_default", 0);
+        o.is_enable = context.GetInt("is_enable", 0);
+        o.sort = context.GetInt("sort", 0);
+        o.op_group_id = context.GetInt("op_group_id", 0);
+        o.api_sp_xh_id = context.GetString("api_sp_xh_id");
+        o.giving_num = context.GetInt("giving_num", 0);
+        o.remark = context.GetString("remark");
+
+        if (string.IsNullOrEmpty(o.name))
+            throw new Exception("璇疯緭鍏ヤ骇鍝佸悕绉帮紒");
+        if (!string.IsNullOrEmpty(context.GetString("sort")) && !Regex.IsMatch(context.GetString("sort"), "^[0-9]*$"))
+            throw new Exception("搴忓彿蹇呴』涓烘暟瀛�");
+
+        if (this._Dao.IsNameExists(o.name))
+            throw new Exception("浜у搧鍚嶇О宸茬粡瀛樺湪锛岃閲嶆柊濉啓锛�");
+
+        //涓婁紶淇濆瓨鏂囦欢
+        HttpFileCollection _file = HttpContext.Current.Request.Files;
+        if (_file.Count > 0)
+        {
+            long size = _file[0].ContentLength; //鏂囦欢澶у皬
+            string type = _file[0].ContentType; //鏂囦欢绫诲瀷
+            string name = _file[0].FileName; //鏂囦欢鍚�
+            string _tp = Path.GetExtension(name);//鏂囦欢鎵╁睍鍚�
+            if (_tp.ToLower() == ".jpg" || _tp.ToLower() == ".jpeg" || _tp.ToLower() == ".gif" || _tp.ToLower() == ".png")
+            {
+                Stream stream = _file[0].InputStream;//鑾峰彇鏂囦欢娴�
+                string savaName = o.id + "-" + DateTime.Now.ToString("yyyyMMddHHssmm") + _tp; //淇濆瓨鏂囦欢銆傛枃浠跺悕
+                string filepath = "\\static\\images\\productIcon\\" + savaName;
+                string path = AppDomain.CurrentDomain.BaseDirectory + filepath;//鍥剧墖璺緞
+                _file[0].SaveAs(path);
+
+                o.icon = filepath;
+            }
+            else
+            {
+                throw new Exception("闈炲浘鐗囨枃浠讹紝璇烽噸鏂伴�夋嫨锛�");
+            }
+        }
+
+        this._Dao.Add(o);
+        return new JsonPageResult(true, (object)("浜у搧" + o.name + "娣诲姞鎴愬姛锛�"));
+    }
+
+    //鏇存柊浜у搧鍚仠鐘舵��
+    private JsonPageResult UpdateIs_enable(PageContext<SysUser> context)
+    {
+        string productId = context.GetString("productId");
+        int is_enable = context.GetInt("is_enable");
+        if (string.IsNullOrEmpty(productId))
+            throw new ArgumentException("鑾峰彇浜у搧鐘舵�佸弬鏁板け璐�");
+        if (!this._Dao.UpdateIs_enable(productId, is_enable))
+            throw new ArgumentNullException("淇敼浜у搧鐘舵�佸け璐ワ紒");
+
+        return new JsonPageResult(true, (object)"鏇存敼浜у搧鐘舵�佹垚鍔燂紒");
+    }
+
+    private JsonPageResult Delete(PageContext<SysUser> context)
+    {
+        string productId = context.GetString("productId");
+        if (string.IsNullOrEmpty(productId))
+            throw new ArgumentException("浜у搧ID涓虹┖锛�");
+        this._Dao.Delete(productId);
+        return new JsonPageResult(true, (object)("浜у搧" + productId + "鍒犻櫎鎴愬姛锛�"));
+    }
+
+    private JsonPageResult GetPrePattern(PageContext<SysUser> context)
+    {
+        return new JsonPageResult(true, (object)new GwSpPrePatternDao().Get(context.GetString("patternID")));
+    }
+}
diff --git a/web/web/GwProduct.aspx b/web/web/GwProduct.aspx
new file mode 100644
index 0000000..8a252da
--- /dev/null
+++ b/web/web/GwProduct.aspx
@@ -0,0 +1,434 @@
+锘�<%@ Page Language="C#" masterpagefile="~/Main.master"  AutoEventWireup="true" CodeFile="GwProduct.aspx.cs" Inherits="_GwProduct" %>
+<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(20);
+
+            //鏌ヨ
+            function loadPageList() {
+                var name = $("#_name").val();
+                var classes = $("#_classes").val();
+                var is_default = $("#_is_default").val();
+                var op_group_id = $("#_op_group_id").val();
+                $.ajax({
+                    url: "GwProduct.ashx",
+                    type: "POST",
+                    data: { action: "LoadGwProductPageList", name: name, classes: classes, is_default: is_default, op_group_id: op_group_id, pageIndex: pagination.getPageIndex(), pageSize: pagination.getPageSize() },
+                    success: function (result) {
+                        if (result.OK) {
+                            $("#gwspTable tbody").html(result.Message.Table);
+                            pagination.setRecordCount(result.Message.TotalCount);
+                            $("#pagination").html(pagination.getHtml());
+                        } else {
+                            mytek.alert(result.Message, result.OK);
+                        }
+                    }
+                });
+            }
+
+            //瀵煎嚭Excel
+            $(document).on("click", ".action-export", function () {
+                var name = $("#_name").val();
+                var classes = $("#_classes").val();
+                var is_default = $("#_is_default").val();
+                var op_group_id = $("#_op_group_id").val();
+                var url = "ExportDocument.aspx?action=exGwProduct&name=" + name + "&classes=" + classes + "&is_default=" + is_default + "&op_group_id=" + op_group_id + "";
+                window.location.href = url;
+            });
+
+            $(document).on("click", "a[data-index]", function () {
+                pagination.setPageIndex($(this).attr("data-index"));
+                loadPageList();
+            });
+
+            $("#checkAll").click(function () {
+                $("input[name='checkbox']").prop("checked", $(this).is(":checked"));
+            });
+
+
+            $("#gwProductForm").ajaxForm({
+                success: function (r) {
+                    if (r.OK) {
+                        mytek.alert(r.Message, r.OK, function () {
+                            $("#gwProductDialog").modal("hide");
+                            loadPageList();
+                        });
+                    } else {
+                        mytek.alert(r.Message, r.OK);
+                    }
+                }
+            });
+
+            //娣诲姞浜у搧
+            $(document).on("click", ".action-create", function () {
+                $("#gwProductDialog .modal-title").text("娣诲姞浜у搧");
+                $("#gwProductDialog #action").val("add");
+                //$("#gwProductDialog #id").val("").attr("readonly", false);
+                $("#gwProductDialog #name").val("");
+                //$("#gwProductDialog #icon").val("");
+                $("#gwProductDialog #img_icon").attr("src", "");
+                $("#gwProductDialog #icon_file").val("");
+                $("#gwProductDialog #instructions").val("");
+                $("#gwProductDialog #classes").val("");
+                $("#gwProductDialog #parent_id").val("");
+                //$("#gwProductDialog #path").val("");
+                $("#gwProductDialog #is_default").val("");
+                $("#gwProductDialog #is_enable").val("1");  //娣诲姞鏃跺惎鐢�
+                $("#gwProductDialog #sort").val("");
+                $("#gwProductDialog #op_group_id").val("");
+                $("#gwProductDialog #api_sp_xh_id").val("");
+                $("#gwProductDialog #giving_num").val("");
+                $("#gwProductDialog #remark").val("");
+
+                $("#gwProductDialog").modal("show");
+            });
+
+            //缂栬緫浜у搧
+            $(document).on("click", ".action-modal-edit", function () {
+                var id = $(this).data("id");
+                $("#gwProductDialog .modal-title").text("缂栬緫浜у搧");
+                $("#gwProductDialog #id").val(id).attr("readonly", true);
+
+                $.get("GwProduct.ashx", { "action": "getGwProduct", id: id }, function (r) {
+                    if (r.OK) {
+                        $("#gwProductDialog #action").val("update");
+                        $("#gwProductDialog #id").val(r.Message.id);
+                        $("#gwProductDialog #name").val(r.Message.name);
+                        $("#gwProductDialog #icon").val(r.Message.icon);
+                        $("#gwProductDialog #img_icon").attr("src", r.Message.icon);
+                        $("#gwProductDialog #icon_file").val("");
+                        $("#gwProductDialog #instructions").val(r.Message.instructions);
+                        $("#gwProductDialog #classes").val(r.Message.classes);
+                        $("#gwProductDialog #parent_id").val(r.Message.parent_id);
+                        //$("#gwProductDialog #path").val(r.Message.path);
+                        $("#gwProductDialog #is_default").val(r.Message.is_default);
+                        $("#gwProductDialog #is_enable").val(r.Message.is_enable);
+                        $("#gwProductDialog #sort").val(r.Message.sort);
+                        $("#gwProductDialog #op_group_id").val(r.Message.op_group_id);
+                        $("#gwProductDialog #api_sp_xh_id").val(r.Message.api_sp_xh_id);
+                        $("#gwProductDialog #giving_num").val(r.Message.giving_num);
+                        //$("#gwProductDialog #splitMode").iCheck(r.Message.SplitMode == 1 ? "check" : "uncheck");
+                        //$("#gwProductDialog #clearFixMode").iCheck(r.Message.ClearFixMode == 1 ? "check" : "uncheck");
+                        $("#gwProductDialog #remark").val(r.Message.remark);
+                        //$("#gwProductDialog #price").val(r.Message.Price / 1000);
+
+                        $("#gwProductDialog").modal("show");
+                    }
+                    else {
+                        mytek.alert(r.Message, r.OK);
+                    }
+                }, "json");
+            });
+
+            //浜у搧闈㈡澘淇濆瓨
+            $(document).on("click", ".action-save", function (e) {
+                e.preventDefault();
+                $("#gwProductForm").ajaxSubmit({
+                    success: function (result) {
+                        if (result.OK) {
+                            mytek.alert(result.Message, result.OK, function () {
+                                $("#gwProductDialog").modal("hide");
+                                loadPageList();
+                            });
+                        } else {
+                            mytek.alert(result.Message, result.OK);
+                        }
+                    }
+                });
+            });
+
+            //鍚敤鎴栧仠鐢�
+            $(document).on("click", ".action-updateStatus", function () {
+                var productId = $(this).attr("data-id");
+                var is_enable = $(this).attr("data-is_enable");
+                mytek.confirm("鏄惁闇�瑕佷慨鏀硅浜у搧鐘舵�侊紵", "鏄惁鎿嶄綔锛�", function (b) {
+                    if (b) {
+                        $.post("GwProduct.ashx", { action: "updateIs_enable", productId: productId, is_enable: is_enable }, function (r) {
+                            mytek.alert(r.Message, r.OK, function () {
+                                loadPageList();
+                            });
+                        });
+                    }
+                });
+            });
+
+            //鍒犻櫎
+            $(document).on("click", ".action-delete", function () {
+                var productId = $(this).data("id");
+                mytek.confirm("鏄惁闇�瑕佸垹闄よ浜у搧锛�", "浜у搧鍒犻櫎鍚庡皢鏃犳硶鎭㈠锛岃璋ㄦ厧鎿嶄綔锛�", function (b) {
+                    if (b) {
+                        $.post("GwProduct.ashx", { action: "delete", productId: productId }, function (r) {
+                            mytek.alert(r.Message, r.OK, function () {
+                                loadPageList();
+                            });
+                        });
+                    }
+                });
+            });
+
+            $(document).on("click", ".action-query", 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="thisForm" method="get" action="GwProduct.aspx" id="thisForm">
+    <div class="listCanvas form-inline">
+        <div class="ibox">
+            <div class="form-group">
+                <div class="input-group m-b">
+                    <span class="input-group-addon">浜у搧鍚嶇О</span>
+                    <input type="text" name="_name" id="_name" class="form-control col-md-2" />
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="input-group m-b">
+                    <select name="_classes" class="form-control" id="_classes">
+                        <option value="">绫诲埆</option>
+                        <option value="0">浜у搧鍒嗙被</option>
+                        <option value="1">浜у搧</option>
+                    </select>
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="input-group m-b">
+                    <select name="_is_default" class="form-control" id="_is_default">
+                        <option value="">鏄惁榛樿</option>
+                        <option value="0">鍚�</option>
+                        <option value="1">鏄�</option>
+                    </select>
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="input-group m-b">
+                    <select name="_op_group_id" class="form-control" id="_op_group_id">
+                        <%=GetGroupOptionsAll() %>
+                    </select>
+                </div>
+            </div>
+            <div class="form-group">
+                <div class="input-group m-b">
+                    <input type="button" value="鏌ヨ" class="btn btn-primary action-query" />&nbsp;&nbsp;
+                    <input type="button" class="btn btn-info action-export" value="瀵煎嚭鏁版嵁" />&nbsp;&nbsp;
+                    <input class="btn btn-warning  action-create" value="鍒涘缓浜у搧" type="button" />
+                </div>
+            </div>
+        </div>
+    </div>
+    </form>
+    <div class="table-responsive">
+        <table class="table table-striped table-bordered table-hover" id="gwspTable">
+            <thead>
+                <tr class="header">
+                    <th>
+                        <input type='checkbox' name='checkAll' id='checkAll' />
+                    </th>
+                    <th>
+                        浜у搧鍚嶇О
+                    </th>
+                    <th>
+                        鍥炬爣
+                    </th>
+                    <th>
+                        浣跨敤璇存槑
+                    </th>
+                    <th>
+                        绫诲埆
+                    </th>
+                    <th>
+                        鐖剁骇浜у搧鍒嗙被ID
+                    </th>
+                    <!--
+                    <th>
+                        浜у搧璺緞
+                    </th>
+                    -->
+                    <th>
+                        鏄惁榛樿
+                    </th>
+                    <th>
+                        鏄惁鍚敤
+                    </th>
+                    <th>
+                        鎺掑簭
+                    </th>
+                    <th>
+                        榛樿閫氶亾缁�
+                    </th>
+                    <th>
+                        API璐﹀彿鐢熸垚瑙勫垯
+                    </th>
+                    <th>
+                        榛樿璧犻�佹潯鏁�
+                    </th>
+                    <th>
+                        澶囨敞
+                    </th>
+                    <th colspan="4">
+                        鎿嶄綔
+                    </th>
+                </tr>
+            </thead>
+            <tbody>
+            </tbody>
+        </table>
+    </div>
+    <div id="pagination">
+    </div>
+    
+    <div class="modal inmodal fade" id="gwProductDialog" tabindex="-1" role="dialog" aria-hidden="true">
+        <div class="modal-dialog">
+            <form class="form-horizontal" id="gwProductForm" name="gwProductForm" method="post" action="GwProduct.ashx">
+                <input type="hidden" class="form-control" name="action" id="action" value="update" />
+                <div class="modal-content ">
+                    <div class="modal-body">
+                        <div class="modal-header">
+                            <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="form-group" id="div_id" style="display:none">
+                            <label class="col-sm-4 control-label">
+                                浜у搧ID</label>
+                            <div class="col-sm-8 input-group">
+                                <input type="text" class="form-control" name="id" id="id" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-4 control-label">
+                                浜у搧鍚嶇О</label>
+                            <div class="col-sm-8 input-group">
+                                <input type="text" class="form-control" name="name" id="name" value="" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-4 control-label">
+                                鍥炬爣
+                            </label>
+                            <div class="col-sm-8 input-group">
+                                <input type="hidden" class="form-control" name="icon" id="icon" value="" />
+                                <img src="" name="img_icon" id="img_icon" alt="" /><input type="file" name="icon_file" id="icon_file"  class="file-loading" />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-4 control-label">
+                                浣跨敤璇存槑</label>
+                            <div class="col-sm-8  input-group">
+                                <input type="text" name="instructions" id="instructions" class="form-control" value=""  />
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-4 control-label">
+                                绫诲埆</label>
+                            <div class="col-sm-8  input-group">
+                                <select class="form-control" name="classes" id="classes">
+                                    <option value="">绫诲埆</option>
+                                    <option value="0">浜у搧鍒嗙被</option>
+                                    <option value="1">浜у搧</option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-4 control-label">
+                                鐖剁骇浜у搧鍒嗙被</label>
+                            <div class="col-sm-8  input-group">
+                                <select class="form-control" name="parent_id" id="parent_id">
+                                    <%=GetGwProductClassOptionsAll() %>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-4 control-label">
+                                鏄惁榛樿</label>
+                            <div class="col-sm-8  input-group">
+                                <select name="is_default" class="form-control" id="is_default">
+                                    <option value="">鏄惁榛樿</option>
+                                    <option value="0">鍚�</option>
+                                    <option value="1">鏄�</option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-4 control-label">
+                                鏄惁鍚敤</label>
+                            <div class="col-sm-8  input-group">
+                                <select name="is_enable" class="form-control" id="is_enable">
+                                    <option value="">鏄惁鍚敤</option>
+                                    <option value="0">鍋滅敤</option>
+                                    <option value="1">鍚敤</option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-4 control-label">
+                                鎺掑簭</label>
+                            <div class="col-sm-8  input-group">
+                                <input type="text" name="sort" id="sort" class="form-control"
+                                    value="" onkeyup="value=value.replace(/[^\d]/g,'')" onpaste="value=value.replace(/[^\d]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">搴忓彿瓒婂皬瓒婂墠</span>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-4 control-label">
+                                榛樿閫氶亾缁�</label>
+                            <div class="col-sm-8  input-group">
+                                <select class="form-control" name="op_group_id" id="op_group_id">
+                                    <%=GetGroupOptionsAll() %>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-4 control-label">
+                                API璐﹀彿鐢熸垚瑙勫垯</label>
+                            <div class="col-sm-8  input-group">
+                                <select class="form-control" name="api_sp_xh_id" id="api_sp_xh_id">
+                                    <%=GetSysXhOptionsAll() %>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-4 control-label">
+                                榛樿璧犻�佹潯鏁�</label>
+                            <div class="col-sm-8  input-group">
+                                <input type="text" name="giving_num" id="giving_num" class="form-control"
+                                    value="" onkeyup="value=value.replace(/[^\d]/g,'')" onpaste="value=value.replace(/[^\d]/g,'')"
+                                    oncontextmenu="return false" /><span class="input-group-addon">鏉�</span>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-4 control-label">
+                                澶囨敞</label>
+                            <div class="col-sm-8  input-group">
+                                <input type="text" name="remark" id="remark" class="form-control" value="" />
+                            </div>
+                        </div>
+                    </div>
+                    <div class="modal-footer">
+                        <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">
+                            鍙栨秷</button>&nbsp;&nbsp;
+                    <button class="btn btn-primary action-save">
+                        淇濆瓨</button>
+                    </div>
+                </div>
+            </form>
+        </div>
+    </div>
+
+    <div id="mask" class="mask">
+        <span></span>
+        <img src="img/spinning-circles.svg" alt="杞藉叆涓�..." /></div>
+    </div>
+   </asp:Content> 
\ No newline at end of file
diff --git a/web/web/GwProduct.aspx.cs b/web/web/GwProduct.aspx.cs
new file mode 100644
index 0000000..e167c04
--- /dev/null
+++ b/web/web/GwProduct.aspx.cs
@@ -0,0 +1,97 @@
+锘�
+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 _GwProduct : PageBase<SysUser>, IRequiresSessionState
+{
+    protected List<GwOp> OpList;
+    protected List<GwProduct> getGwProductClassList;    //浜у搧鍒嗙被
+    protected List<GwOpGroup> GroupList;
+    protected List<GwAp> ApList;
+    protected List<SysXh> SysXhList;
+
+    public IEnumerable<GwDiverter> DiverterList { get; set; }
+
+    protected void Page_Load(object sender, EventArgs e)
+    {
+        this.CheckRight("302", FailedOperation.HistoryGoBack);
+        using (GwApDao gwApDao = new GwApDao())
+            this.ApList = gwApDao.LoadInfoList();
+        using (GwProductDao gwProductDao = new GwProductDao())
+            this.getGwProductClassList = gwProductDao.getGwProductClassList();
+        using (GwOpGroupDao gwOpGroupDao = new GwOpGroupDao())
+            this.GroupList = gwOpGroupDao.GetGroupList();
+        using (GwDiverterDao gwDiverterDao = new GwDiverterDao())
+            this.DiverterList = (IEnumerable<GwDiverter>)gwDiverterDao.LoadList();
+        using (SysXhDao sysXhDao = new SysXhDao())
+            this.SysXhList = sysXhDao.GetSysXhList();
+
+    }
+
+    //浜у搧鍒嗙被涓嬫媺妗嗘暟鎹�
+    public string GetGwProductClassOptionsAll()
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.getGwProductClassList.Count == 0)
+            return "<option value=''>鏃犱骇鍝佸垎绫讳俊鎭�</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" >{1}</option>", 0, "--璇烽�夋嫨浜у搧鍒嗙被--");
+        foreach (GwProduct gwProduct in this.getGwProductClassList)
+        {
+            stringBuilder.AppendFormat("<option value=\"{0}\" >{0}-{1}</option>", gwProduct.id, gwProduct.name);
+        }
+        return stringBuilder.ToString();
+    }
+
+    //閫氶亾缁勪笅鎷夋鏁版嵁
+    public string GetGroupOptionsAll()
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.GroupList.Count == 0)
+            return "<option value=''>鏃犻�氶亾缁勪俊鎭�</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" >{1}</option>", 0, "--璇烽�夋嫨閫氶亾缁�--");
+        foreach (GwOpGroup gwOpGroup in this.GroupList)
+        {
+            stringBuilder.AppendFormat("<option value=\"{0}\" >{0}-{1}</option>", gwOpGroup.GroupID, gwOpGroup.GroupName);
+        }
+        return stringBuilder.ToString();
+    }
+
+    //搴忓彿瑙勫垯涓嬫媺妗嗘暟鎹�
+    public string GetSysXhOptionsAll()
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.SysXhList.Count == 0)
+            return "<option value=''>鏃犲簭鍙疯鍒欎俊鎭�</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" >{1}</option>", 0, "--璇烽�夋嫨搴忓彿瑙勫垯--");
+        foreach (SysXh sysXh in this.SysXhList)
+        {
+            stringBuilder.AppendFormat("<option value=\"{0}\" >{0}-{1}</option>", sysXh.xhId, sysXh.xhName);
+        }
+        return stringBuilder.ToString();
+    }
+
+    public string GetGroupOptions(int groupID)
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (this.GroupList.Count == 0)
+            return "<option value=''>鏃犻�氶亾缁勪俊鎭�</option>";
+        stringBuilder.AppendFormat("<option value=\"{0}\" >{1}</option>", 0, "璁剧疆涓虹┖");
+        foreach (GwOpGroup gwOpGroup in this.GroupList)
+        {
+            if (groupID == gwOpGroup.GroupID)
+                stringBuilder.AppendFormat("<option value=\"{0}\" selected>{0}-{1}</option>", gwOpGroup.GroupID, gwOpGroup.GroupName);
+            else
+                stringBuilder.AppendFormat("<option value=\"{0}\">{0}-{1}</option>", gwOpGroup.GroupID, gwOpGroup.GroupName);
+        }
+        return stringBuilder.ToString();
+    }
+
+
+}
diff --git a/web/web/GwStatisV3.aspx.cs b/web/web/GwStatisV3.aspx.cs
index 315b738..b7da0bf 100644
--- a/web/web/GwStatisV3.aspx.cs
+++ b/web/web/GwStatisV3.aspx.cs
@@ -1,12 +1,10 @@
-锘� 
+锘�
 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 GwStatisV3Page : PageBase<SysUser>, IRequiresSessionState
diff --git a/web/web/Index.aspx b/web/web/Index.aspx
index b8c0339..6394197 100644
--- a/web/web/Index.aspx
+++ b/web/web/Index.aspx
@@ -191,6 +191,7 @@
                             <!--<li><a href="GwRptCode.aspx" class="J_menuItem">鎵i噺鐘舵�佽缃�</a> </li>-->
                             <li><a href="GwMobileArea.aspx" class="J_menuItem">鍖哄煙鍙锋绠$悊</a> </li>
                             <li><a href="SysUser.aspx" class="J_menuItem">绯荤粺璐﹀彿绠$悊</a> </li>
+                            <li><a href="GwProduct.aspx" class="J_menuItem">浜у搧绠$悊</a> </li>
                             <li><a href="tablespace.aspx" class="J_menuItem">鏁版嵁搴撹〃绌洪棿</a> </li>
                             <li><a href="Setting.aspx" class="J_menuItem">绯荤粺鍙傛暟璁剧疆</a> </li>
 
diff --git a/web/web/logs/err.txt b/web/web/logs/err.txt
index 74a7495..c6d2578 100644
--- a/web/web/logs/err.txt
+++ b/web/web/logs/err.txt
@@ -648,3 +648,27 @@
    在 Dao.GwSmDao.LoadInfoListcount(String apID, String opName, String clientID, String spID, String destnationId, String sDate, String beginTime, String endTime, String content, String opstat, Int32 TStatus, Int32& recordcount) 位置 D:\Company\SMGW_NewWeb\web\Dao\GwSmDao.cs:行号 197
 >>>>>>> Release
 
+#35  2021-09-26 14:19:27,636 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 7248
+会话 ID: 81 序列号: 9801
+   在 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) 位置 C:\Users\mac\Desktop\Work-Archives\SMGW\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#42  2021-09-26 14:32:56,924 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: 5640
+会话 ID: 208 序列号: 44898
+
+#22  2021-09-27 16:49:48,131 Common.dll OracleHelper.ExecuteReader              ORA-00904: "OP_GROUP_ID": 标识符无效
+   在 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) 位置 C:\Users\mac\Desktop\Work-Archives\SMGW\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#27  2021-09-30 10:17:56,581 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: 17820
+会话 ID: 14 序列号: 14066
+
diff --git a/web/web/logs/logx.txt b/web/web/logs/logx.txt
index 74a7495..c6d2578 100644
--- a/web/web/logs/logx.txt
+++ b/web/web/logs/logx.txt
@@ -648,3 +648,27 @@
    在 Dao.GwSmDao.LoadInfoListcount(String apID, String opName, String clientID, String spID, String destnationId, String sDate, String beginTime, String endTime, String content, String opstat, Int32 TStatus, Int32& recordcount) 位置 D:\Company\SMGW_NewWeb\web\Dao\GwSmDao.cs:行号 197
 >>>>>>> Release
 
+#35  2021-09-26 14:19:27,636 Common.dll OracleHelper.ExecuteReader              ORA-03113: 通信通道的文件结尾
+进程 ID: 7248
+会话 ID: 81 序列号: 9801
+   在 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) 位置 C:\Users\mac\Desktop\Work-Archives\SMGW\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#42  2021-09-26 14:32:56,924 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: 5640
+会话 ID: 208 序列号: 44898
+
+#22  2021-09-27 16:49:48,131 Common.dll OracleHelper.ExecuteReader              ORA-00904: "OP_GROUP_ID": 标识符无效
+   在 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) 位置 C:\Users\mac\Desktop\Work-Archives\SMGW\SMGW_NewWeb\web\Common\OracleHelper.cs:行号 219
+
+#27  2021-09-30 10:17:56,581 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: 17820
+会话 ID: 14 序列号: 14066
+
diff --git a/web/web/static/images/img/avatar.jpg b/web/web/static/images/img/avatar.jpg
new file mode 100644
index 0000000..589a4f2
--- /dev/null
+++ b/web/web/static/images/img/avatar.jpg
Binary files differ
diff --git a/web/web/static/images/img/balance-48.png b/web/web/static/images/img/balance-48.png
new file mode 100644
index 0000000..be16cb1
--- /dev/null
+++ b/web/web/static/images/img/balance-48.png
Binary files differ
diff --git a/web/web/static/images/img/certified-16.png b/web/web/static/images/img/certified-16.png
new file mode 100644
index 0000000..1175a5b
--- /dev/null
+++ b/web/web/static/images/img/certified-16.png
Binary files differ
diff --git a/web/web/static/images/img/certified-32.png b/web/web/static/images/img/certified-32.png
new file mode 100644
index 0000000..a9d99cd
--- /dev/null
+++ b/web/web/static/images/img/certified-32.png
Binary files differ
diff --git a/web/web/static/images/img/email-16.png b/web/web/static/images/img/email-16.png
new file mode 100644
index 0000000..ee74976
--- /dev/null
+++ b/web/web/static/images/img/email-16.png
Binary files differ
diff --git a/web/web/static/images/img/money.png b/web/web/static/images/img/money.png
new file mode 100644
index 0000000..711e25f
--- /dev/null
+++ b/web/web/static/images/img/money.png
Binary files differ
diff --git a/web/web/static/images/img/phone-16.png b/web/web/static/images/img/phone-16.png
new file mode 100644
index 0000000..335e968
--- /dev/null
+++ b/web/web/static/images/img/phone-16.png
Binary files differ
diff --git a/web/web/static/images/img/unauthorized-16.png b/web/web/static/images/img/unauthorized-16.png
new file mode 100644
index 0000000..ebe60e0
--- /dev/null
+++ b/web/web/static/images/img/unauthorized-16.png
Binary files differ
diff --git a/web/web/static/images/img/unauthorized-32.png b/web/web/static/images/img/unauthorized-32.png
new file mode 100644
index 0000000..f0ad40f
--- /dev/null
+++ b/web/web/static/images/img/unauthorized-32.png
Binary files differ
diff --git a/web/web/static/images/img/user-16.png b/web/web/static/images/img/user-16.png
new file mode 100644
index 0000000..93e36d4
--- /dev/null
+++ b/web/web/static/images/img/user-16.png
Binary files differ
diff --git a/web/web/static/images/productIcon/VerificationCodeSMS-32.png b/web/web/static/images/productIcon/VerificationCodeSMS-32.png
new file mode 100644
index 0000000..2eff389
--- /dev/null
+++ b/web/web/static/images/productIcon/VerificationCodeSMS-32.png
Binary files differ
diff --git a/web/web/static/images/productIcon/marketingSMS-32.png b/web/web/static/images/productIcon/marketingSMS-32.png
new file mode 100644
index 0000000..5be1c91
--- /dev/null
+++ b/web/web/static/images/productIcon/marketingSMS-32.png
Binary files differ
diff --git a/web/web/static/images/productIcon/noticeSMS-32.png b/web/web/static/images/productIcon/noticeSMS-32.png
new file mode 100644
index 0000000..481bb0f
--- /dev/null
+++ b/web/web/static/images/productIcon/noticeSMS-32.png
Binary files differ

--
Gitblit v1.9.1