浏览代码

Api webservice

DESKTOP-IUICV2M\Quang 5 月之前
父节点
当前提交
e51511b024
共有 100 个文件被更改,包括 52527 次插入0 次删除
  1. 13 0
      ApiWeb/ApiProcessToken/.config/dotnet-tools.json
  2. 1 0
      ApiWeb/ApiProcessToken/20012025_09d480c4-21a5-46b2-b0a7-cd33b4eff6e9.txt
  3. 39 0
      ApiWeb/ApiProcessToken/ApiProcessToken.csproj
  4. 31 0
      ApiWeb/ApiProcessToken/ApiProcessToken.sln
  5. 9052 0
      ApiWeb/ApiProcessToken/Controllers/balance.cs
  6. 5093 0
      ApiWeb/ApiProcessToken/Controllers/balancebk.cs
  7. 80 0
      ApiWeb/ApiProcessToken/Controllers/dating.cs
  8. 728 0
      ApiWeb/ApiProcessToken/Controllers/edu.cs
  9. 113 0
      ApiWeb/ApiProcessToken/Controllers/happyCall.cs
  10. 3090 0
      ApiWeb/ApiProcessToken/Controllers/loto.cs
  11. 2501 0
      ApiWeb/ApiProcessToken/Controllers/luckyGame.cs
  12. 4776 0
      ApiWeb/ApiProcessToken/Controllers/luckyGameCms.cs
  13. 532 0
      ApiWeb/ApiProcessToken/Controllers/luckySix.cs
  14. 360 0
      ApiWeb/ApiProcessToken/Controllers/newsSms.cs
  15. 2216 0
      ApiWeb/ApiProcessToken/Controllers/newsWeb.cs
  16. 1815 0
      ApiWeb/ApiProcessToken/Controllers/subApi.cs
  17. 202 0
      ApiWeb/ApiProcessToken/Controllers/systemApi.cs
  18. 2507 0
      ApiWeb/ApiProcessToken/Controllers/thailanloto.cs
  19. 5333 0
      ApiWeb/ApiProcessToken/Controllers/userApi.cs
  20. 748 0
      ApiWeb/ApiProcessToken/Controllers/webservice.cs
  21. 二进制
      ApiWeb/ApiProcessToken/Dll/GenPrizeCode.dll
  22. 6 0
      ApiWeb/ApiProcessToken/Dll/GenPrizeCode.dll.config
  23. 二进制
      ApiWeb/ApiProcessToken/Dll/GenPrizeCode.pdb
  24. 二进制
      ApiWeb/ApiProcessToken/Dll/Newtonsoft.Json.dll
  25. 二进制
      ApiWeb/ApiProcessToken/Dll/Oracle.ManagedDataAccess.dll
  26. 二进制
      ApiWeb/ApiProcessToken/Dll/log4net.dll
  27. 361 0
      ApiWeb/ApiProcessToken/Models/Common.cs
  28. 317 0
      ApiWeb/ApiProcessToken/Models/DataAccess.cs
  29. 40 0
      ApiWeb/ApiProcessToken/Models/banlance/ResCommnon.cs
  30. 2629 0
      ApiWeb/ApiProcessToken/Models/banlance/balanceDataAccess.cs
  31. 362 0
      ApiWeb/ApiProcessToken/Models/banlance/balanceObj.cs
  32. 67 0
      ApiWeb/ApiProcessToken/Models/banlance/blackListGetList.cs
  33. 61 0
      ApiWeb/ApiProcessToken/Models/banlance/blackListObj.cs
  34. 452 0
      ApiWeb/ApiProcessToken/Models/banlance/campaignAddObj.cs
  35. 222 0
      ApiWeb/ApiProcessToken/Models/banlance/campaignObj.cs
  36. 97 0
      ApiWeb/ApiProcessToken/Models/banlance/company.cs
  37. 102 0
      ApiWeb/ApiProcessToken/Models/banlance/expireDate.cs
  38. 578 0
      ApiWeb/ApiProcessToken/Models/banlance/getListCommon.cs
  39. 25 0
      ApiWeb/ApiProcessToken/Models/banlance/loginObj.cs
  40. 87 0
      ApiWeb/ApiProcessToken/Models/banlance/ngamObj.cs
  41. 108 0
      ApiWeb/ApiProcessToken/Models/banlance/paramObj.cs
  42. 201 0
      ApiWeb/ApiProcessToken/Models/banlance/reportByCampaign.cs
  43. 103 0
      ApiWeb/ApiProcessToken/Models/banlance/serviceAddObj.cs
  44. 125 0
      ApiWeb/ApiProcessToken/Models/banlance/serviceObj.cs
  45. 86 0
      ApiWeb/ApiProcessToken/Models/banlance/usersObj.cs
  46. 195 0
      ApiWeb/ApiProcessToken/Models/bet/betGetTerm.cs
  47. 47 0
      ApiWeb/ApiProcessToken/Models/bet/betMoney.cs
  48. 42 0
      ApiWeb/ApiProcessToken/Models/bet/betProcessObj.cs
  49. 33 0
      ApiWeb/ApiProcessToken/Models/bet/betRes3GMsisdn.cs
  50. 44 0
      ApiWeb/ApiProcessToken/Models/bet/betResCheckPin.cs
  51. 40 0
      ApiWeb/ApiProcessToken/Models/bet/betResCommnon.cs
  52. 38 0
      ApiWeb/ApiProcessToken/Models/bet/betResWalletAcount.cs
  53. 25 0
      ApiWeb/ApiProcessToken/Models/bet/betResWalletCheckExist.cs
  54. 83 0
      ApiWeb/ApiProcessToken/Models/bet/betResWalletCus.cs
  55. 125 0
      ApiWeb/ApiProcessToken/Models/bet/betResWalletCusV2.cs
  56. 61 0
      ApiWeb/ApiProcessToken/Models/bet/betResponseObj.cs
  57. 109 0
      ApiWeb/ApiProcessToken/Models/bet/betTicketObj.cs
  58. 109 0
      ApiWeb/ApiProcessToken/Models/bet/betTicketWinObj.cs
  59. 100 0
      ApiWeb/ApiProcessToken/Models/bet/cmsParam.cs
  60. 83 0
      ApiWeb/ApiProcessToken/Models/bet/cmsRevenue.cs
  61. 73 0
      ApiWeb/ApiProcessToken/Models/bet/cmsSearchMsisdn.cs
  62. 97 0
      ApiWeb/ApiProcessToken/Models/bet/cmsTicketInfo.cs
  63. 97 0
      ApiWeb/ApiProcessToken/Models/bet/cmsTicketWin.cs
  64. 74 0
      ApiWeb/ApiProcessToken/Models/bet/cmsTotalByTerm.cs
  65. 92 0
      ApiWeb/ApiProcessToken/Models/bet/cmsTraficDetail.cs
  66. 68 0
      ApiWeb/ApiProcessToken/Models/bet/cmsTraficTotal.cs
  67. 73 0
      ApiWeb/ApiProcessToken/Models/bet/lkpwResultHis.cs
  68. 78 0
      ApiWeb/ApiProcessToken/Models/bet/lotoBlackGet.cs
  69. 56 0
      ApiWeb/ApiProcessToken/Models/bet/lotoBlackInsert.cs
  70. 916 0
      ApiWeb/ApiProcessToken/Models/bet/lotoCmsDataAccess.cs
  71. 110 0
      ApiWeb/ApiProcessToken/Models/bet/lotoCus.cs
  72. 1475 0
      ApiWeb/ApiProcessToken/Models/bet/lotoDataAccess.cs
  73. 78 0
      ApiWeb/ApiProcessToken/Models/bet/lotoDataObj.cs
  74. 78 0
      ApiWeb/ApiProcessToken/Models/bet/lotoDataRequestObj.cs
  75. 102 0
      ApiWeb/ApiProcessToken/Models/bet/lotoExportData.cs
  76. 115 0
      ApiWeb/ApiProcessToken/Models/bet/lotoExportGet.cs
  77. 67 0
      ApiWeb/ApiProcessToken/Models/bet/lotoExportHis.cs
  78. 65 0
      ApiWeb/ApiProcessToken/Models/bet/lotoImportData.cs
  79. 64 0
      ApiWeb/ApiProcessToken/Models/bet/lotoTopCus.cs
  80. 43 0
      ApiWeb/ApiProcessToken/Models/bet/lotoTraficTotal.cs
  81. 64 0
      ApiWeb/ApiProcessToken/Models/bet/objCurentTerm.cs
  82. 68 0
      ApiWeb/ApiProcessToken/Models/bet/objParams.cs
  83. 54 0
      ApiWeb/ApiProcessToken/Models/bet/prizeOfTerm.cs
  84. 48 0
      ApiWeb/ApiProcessToken/Models/blackObj.cs
  85. 59 0
      ApiWeb/ApiProcessToken/Models/chargeObj.cs
  86. 109 0
      ApiWeb/ApiProcessToken/Models/clsCustomEncryption.cs
  87. 231 0
      ApiWeb/ApiProcessToken/Models/common/FunctionThaiLan.cs
  88. 175 0
      ApiWeb/ApiProcessToken/Models/common/Queue.cs
  89. 108 0
      ApiWeb/ApiProcessToken/Models/edu/SubRequest.cs
  90. 294 0
      ApiWeb/ApiProcessToken/Models/edu/eduDataAccess.cs
  91. 94 0
      ApiWeb/ApiProcessToken/Models/edu/grammarContent.cs
  92. 232 0
      ApiWeb/ApiProcessToken/Models/edu/lessonContent.cs
  93. 72 0
      ApiWeb/ApiProcessToken/Models/edu/listenContent.cs
  94. 141 0
      ApiWeb/ApiProcessToken/Models/edu/questionContent.cs
  95. 78 0
      ApiWeb/ApiProcessToken/Models/edu/vocabularyContent.cs
  96. 61 0
      ApiWeb/ApiProcessToken/Models/hapCall.cs
  97. 49 0
      ApiWeb/ApiProcessToken/Models/happyDataAccess.cs
  98. 214 0
      ApiWeb/ApiProcessToken/Models/lksDataAccess .cs
  99. 124 0
      ApiWeb/ApiProcessToken/Models/lksObjBet.cs
  100. 38 0
      ApiWeb/ApiProcessToken/Models/lksObjBetResponse.cs

+ 13 - 0
ApiWeb/ApiProcessToken/.config/dotnet-tools.json

@@ -0,0 +1,13 @@
+{
+  "version": 1,
+  "isRoot": true,
+  "tools": {
+    "dotnet-ef": {
+      "version": "8.0.7",
+      "commands": [
+        "dotnet-ef"
+      ],
+      "rollForward": false
+    }
+  }
+}

+ 1 - 0
ApiWeb/ApiProcessToken/20012025_09d480c4-21a5-46b2-b0a7-cd33b4eff6e9.txt

@@ -0,0 +1 @@
+luckycard	luckycard123	KATANAFRUITS123	56000004	20250101033728	0	REAL	0	257	*733*5#	W568-54234-1735695448655

+ 39 - 0
ApiWeb/ApiProcessToken/ApiProcessToken.csproj

@@ -0,0 +1,39 @@
+<Project Sdk="Microsoft.NET.Sdk.Web">
+ 
+  <PropertyGroup>
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+	  <RuntimeFrameworkVersion>3.1.0</RuntimeFrameworkVersion>
+    <UserSecretsId>bef20c7e-0627-41ee-8414-1476a4d1aaba</UserSecretsId>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
+    <WarningsAsErrors>NU1605</WarningsAsErrors>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
+    <Optimize>false</Optimize>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Reference Include="GenPrizeCode">
+      <HintPath>Dll\GenPrizeCode.dll</HintPath>
+    </Reference>
+    <Reference Include="Newtonsoft.Json">
+      <HintPath>Dll\Newtonsoft.Json.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+
+  <ItemGroup>
+    <PackageReference Include="log4net" Version="2.0.11" />
+    <PackageReference Include="Microsoft.AspNetCore.Mvc.Formatters.Xml" Version="2.2.0" />
+    <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
+    <PackageReference Include="Oracle.ManagedDataAccess.Core" Version="2.19.90" />
+    <PackageReference Include="StackExchange.Redis" Version="2.2.88" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\CommonObj\CommonObj.csproj" />
+  </ItemGroup>
+
+
+</Project>

+ 31 - 0
ApiWeb/ApiProcessToken/ApiProcessToken.sln

@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.10.35004.147
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiProcessToken", "ApiProcessToken.csproj", "{4EA0D77F-24D3-49ED-AF6D-4CCB29B94B50}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommonObj", "..\CommonObj\CommonObj.csproj", "{95419B0D-C91E-48E2-8BDA-B774E2785F1D}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{4EA0D77F-24D3-49ED-AF6D-4CCB29B94B50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4EA0D77F-24D3-49ED-AF6D-4CCB29B94B50}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4EA0D77F-24D3-49ED-AF6D-4CCB29B94B50}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4EA0D77F-24D3-49ED-AF6D-4CCB29B94B50}.Release|Any CPU.Build.0 = Release|Any CPU
+		{95419B0D-C91E-48E2-8BDA-B774E2785F1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{95419B0D-C91E-48E2-8BDA-B774E2785F1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{95419B0D-C91E-48E2-8BDA-B774E2785F1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{95419B0D-C91E-48E2-8BDA-B774E2785F1D}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {1CF38F55-37B6-43AF-931E-7D9C4481B49E}
+	EndGlobalSection
+EndGlobal

+ 9052 - 0
ApiWeb/ApiProcessToken/Controllers/balance.cs

@@ -0,0 +1,9052 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+using ApiProcess.Models.balance;
+using ApiProcessToken.Models.banlance;
+using CommonObj.common;
+using CommonObj.model;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Server.IISIntegration;
+using Microsoft.Extensions.Caching.Memory;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using ResfullApi.Models;
+using ResfullApi.Models.balance;
+using StackExchange.Redis;
+
+namespace ApiProcess.Controllers
+{
+    [Route("api/[controller]/[action]/data")]
+    [ApiController]
+    public class balance : ControllerBase
+    {
+        
+
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(balance));
+
+        private IMemoryCache memoryCache;
+        public balance(IMemoryCache memoryCache)
+        {
+            this.memoryCache = memoryCache;
+        }
+
+
+
+        // {"users":"123","pass":"123"}
+        [HttpPost]
+        public IActionResult usersAdminLogin([FromBody] dynamic sendData)
+        {
+            ////log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            ////log4net.Config.XmlConfigurator.Configure();
+            ///
+            logger.Info("New request income admin Login :" + sendData.ToString());
+            responseObjLogin response = new responseObjLogin();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string pass = Convert.ToString(userObj["pass"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                if (string.IsNullOrEmpty(users)) users = "1";
+                if (string.IsNullOrEmpty(pass)) pass = "-1";
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass"); var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+
+                if (users == "-1" || pass == "-1" || channel == "-1")
+                {
+                    logger.Info("Authen false");
+                    response.status = "35";
+                    response.message = CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.status, "");// "Check Authen false";
+                    return Ok(response);
+                }
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.ADMIN_USERS_INFO(users, ResfullApi.Models.CustomEncryption.Encrypt(pass));
+                logger.Info("Call database ADMIN_USERS_INFO success:");
+
+                if (ds_regist == null || ds_regist.Tables[0].Rows.Count == 0)
+                {
+                    response.status = "1";
+                    response.message = "Login false";
+                    response.role = "";
+                    response.token = "";
+                    return Ok(response);
+                }
+                else
+                {
+                    string status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    if (status == "0")
+                    {
+                        //Tiep tuc lay danh sach chu nang cua Role
+                        DataSet ds = balanceDataAccess.ADMIN_USERS_FUNCTION(ds_regist.Tables[0].Rows[0]["role"].ToString());
+                        if (ds == null || ds.Tables[0].Rows.Count > 0)
+                        {
+                            response.function = new adminFunctionObj[ds.Tables[0].Rows.Count];
+                            for (int j = 0; j < ds.Tables[0].Rows.Count; j++)
+                            {
+                                adminFunctionObj _obj = new adminFunctionObj();
+                                _obj.id = ds.Tables[0].Rows[j]["id"].ToString();
+                                _obj.role = ds.Tables[0].Rows[j]["ROLE"].ToString();
+                                _obj.name = ds.Tables[0].Rows[j]["NAME"].ToString();
+                                _obj.link = ds.Tables[0].Rows[j]["LINK"].ToString();
+                                _obj.note = ds.Tables[0].Rows[j]["NOTE"].ToString();
+                                response.function[j] = _obj;
+                            }
+                        }
+
+
+                        tokenObj _token = CommonFunction.createToken(_redis, users, pass, channel, "LOGIN_ADMIN", "", ds_regist.Tables[0].Rows[0]["role"].ToString());
+                        response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                        response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                        response.role = ds_regist.Tables[0].Rows[0]["role"].ToString();
+                        response.token = _token.token;
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                        response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                        response.role = ds_regist.Tables[0].Rows[0]["role"].ToString();
+                        response.token = "";
+                        return Ok(response);
+                    }
+
+
+                }
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult companyGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income companyGetList :" + sendData.ToString());
+            companyList response = new companyList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+               
+
+              
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+               
+
+                string name = Convert.ToString(userObj["name"]);
+                string code = Convert.ToString(userObj["code"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+                string order = Convert.ToString(userObj["order"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(order)) order = "asc";
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+                /*
+                if (string.IsNullOrEmpty(requestId)) requestId = "";
+                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+                if (string.IsNullOrEmpty(token)) token = "";
+                */
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.comGetList(id,users, name, code, fromDate, toDate, order, rowsOnPage, seqPage);
+                logger.Info("Call database comGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+
+                    response.list = new company[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        company _obj = new company();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        _obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+                        _obj.phone = ds_regist.Tables[0].Rows[j]["phone"].ToString();
+                        _obj.email = ds_regist.Tables[0].Rows[j]["EMAIL"].ToString();
+                        _obj.address = ds_regist.Tables[0].Rows[j]["ADDRESS"].ToString();
+                        _obj.desciption = ds_regist.Tables[0].Rows[j]["DESCRIPTION"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+              
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        /*
+         {"code":"124","phone":"0961423229","name":"Cty Viettech 1","email":"quangbh@gmail.com","description":"Mo ta","note":"note 1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="} 
+         
+         */
+
+        public IActionResult companyInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income companyInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string phone = Convert.ToString(userObj["phone"]);
+                string email = Convert.ToString(userObj["email"]);
+                string address = Convert.ToString(userObj["address"]);
+                string description = Convert.ToString(userObj["description"]);
+                string note = Convert.ToString(userObj["note"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+                
+
+                
+                if (string.IsNullOrEmpty(code)) code = "-1";
+               if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(phone)) phone = "-1";
+                if (string.IsNullOrEmpty(email)) email = "-1";
+                if (string.IsNullOrEmpty(address)) address = "-1";
+                if (string.IsNullOrEmpty(description)) description = "-1";
+                if (string.IsNullOrEmpty(note)) note = "-1";
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+                /*
+                if (string.IsNullOrEmpty(requestId)) requestId = "";
+                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+                if (string.IsNullOrEmpty(token)) token = "";
+                */
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.comInsert(code,name,phone,email,address,description,note,users);
+                logger.Info("Call database comInsert success:");
+
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success comInsert not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success comInsert is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        /*
+         {"id":"2","code":"124","phone":"0961423229","name":"Cty Viettech New","email":"quangbh@gmail.com","description":"Mo ta","note":"note 1","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+
+
+         */
+
+        public IActionResult companyUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income companyUpdate :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string id = Convert.ToString(userObj["id"]);
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string phone = Convert.ToString(userObj["phone"]);
+                string email = Convert.ToString(userObj["email"]);
+                string address = Convert.ToString(userObj["address"]);
+                string description = Convert.ToString(userObj["description"]);
+                string note = Convert.ToString(userObj["note"]);
+
+                string type = Convert.ToString(userObj["type"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+              
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(phone)) phone = "-1";
+                if (string.IsNullOrEmpty(email)) email = "-1";
+                if (string.IsNullOrEmpty(address)) address = "-1";
+                if (string.IsNullOrEmpty(description)) description = "-1";
+                if (string.IsNullOrEmpty(note)) note = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+                /*
+                if (string.IsNullOrEmpty(requestId)) requestId = "";
+                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+                if (string.IsNullOrEmpty(token)) token = "";
+                */
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.comUpdate(id,code, name, phone, email, address, description, note, users,type);
+                logger.Info("Call database comUpdate success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success comUpdate not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success comUpdate is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult listSubGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income listSubGetList :" + sendData.ToString());
+            listSubList response = new listSubList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+                string name = Convert.ToString(userObj["name"]);
+                string subType = Convert.ToString(userObj["subType"]);
+                string code = Convert.ToString(userObj["code"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+
+                string isActive = Convert.ToString(userObj["isActive"]);
+                if (string.IsNullOrEmpty(isActive)) isActive = "-1";
+
+
+                string order = Convert.ToString(userObj["order"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(order)) order = "asc";
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+                if (string.IsNullOrEmpty(subType)) subType = "-1";
+
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+                /*
+                if (string.IsNullOrEmpty(requestId)) requestId = "";
+                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+                if (string.IsNullOrEmpty(token)) token = "";
+                */
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.listSubGetList(id, users, subType, name, code, fromDate, toDate, order, rowsOnPage, seqPage,isActive);
+
+                logger.Info("Call database listSubGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.list = new listSubObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        listSubObj _obj = new listSubObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        _obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+
+                        _obj.listType = ds_regist.Tables[0].Rows[j]["LIST_TYPE"].ToString();
+                        _obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        _obj.totalFile = ds_regist.Tables[0].Rows[j]["TOTAL_FILE"].ToString();
+                        _obj.totalRecord = ds_regist.Tables[0].Rows[j]["TOTAL_RECORD"].ToString();
+                        _obj.totalSuccess = ds_regist.Tables[0].Rows[j]["TOTAL_SUCCESS"].ToString();
+                        _obj.totalFalse = ds_regist.Tables[0].Rows[j]["TOTAL_FALSE"].ToString();
+                        _obj.isDelete = ds_regist.Tables[0].Rows[j]["IS_DELETE"].ToString();
+
+
+
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+                        _obj.isActive = ds_regist.Tables[0].Rows[j]["IS_ACTIVE"].ToString();
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        /*
+        {"code":"124","name":"Cty Viettech 1","min":"0","max":"5","note":"note 1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+
+        public IActionResult listSubInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income listSubInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string subType = Convert.ToString(userObj["subType"]);
+               
+
+                string note = Convert.ToString(userObj["note"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+
+
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(subType)) subType = "2";
+                
+
+                if (string.IsNullOrEmpty(note)) note = "-1";
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.blistSubInsert(code, name, note, users,subType);
+                logger.Info("Call database blistSubInsert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success blistSubInsert not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success blistSubInsert is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        /*
+         {"id":"3","code":"124","name":"Goi thu 1","min":"6","max":"10","note":"note 1","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+
+         */
+
+        public IActionResult listSubUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceUpdate :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string id = Convert.ToString(userObj["id"]);
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string subType = Convert.ToString(userObj["subType"]);
+              
+
+                string note = Convert.ToString(userObj["note"]);
+
+                string type = Convert.ToString(userObj["type"]);
+                string status = Convert.ToString(userObj["status"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(subType)) subType = "1";
+                
+
+                if (string.IsNullOrEmpty(note)) note = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.blistSubUpdate(id, code, name, subType, note, users, type,status);
+                logger.Info("Call database blistSubUpdate success:");
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success blistSubUpdate not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success blistSubUpdate is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult listSubFileGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income listSubFileGetList :" + sendData.ToString());
+            listSubFileList response = new listSubFileList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+                string name = Convert.ToString(userObj["name"]);
+                string subId = Convert.ToString(userObj["subId"]);
+                string code = Convert.ToString(userObj["code"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+                string order = Convert.ToString(userObj["order"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(order)) order = "asc";
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+                if (string.IsNullOrEmpty(subId)) subId = "-1";
+
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+                /*
+                if (string.IsNullOrEmpty(requestId)) requestId = "";
+                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+                if (string.IsNullOrEmpty(token)) token = "";
+                */
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.listSubFileGetList(id, users, subId, name, code, fromDate, toDate, order, rowsOnPage, seqPage);
+
+                logger.Info("Call database listSubFileGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.list = new listSubFileObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        listSubFileObj _obj = new listSubFileObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        _obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+
+                        _obj.fileId = ds_regist.Tables[0].Rows[j]["FILE_ID"].ToString();
+                        _obj.fileName = ds_regist.Tables[0].Rows[j]["FILE_NAME"].ToString();
+
+                        _obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+
+                     
+                        _obj.totalRecord = ds_regist.Tables[0].Rows[j]["TOTAL_RECORD"].ToString();
+                        _obj.totalSuccess = ds_regist.Tables[0].Rows[j]["TOTAL_SUCCESS"].ToString();
+                        _obj.totalFalse = ds_regist.Tables[0].Rows[j]["TOTAL_FALSE"].ToString();
+
+                        _obj.isDelete = ds_regist.Tables[0].Rows[j]["IS_DELETE"].ToString();
+                        _obj.startDate = ds_regist.Tables[0].Rows[j]["START_DATE"].ToString();
+                        _obj.endDate = ds_regist.Tables[0].Rows[j]["END_DATE"].ToString();
+
+
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+
+
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        /*
+        {"code":"124","name":"Cty Viettech 1","min":"0","max":"5","note":"note 1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+
+        public IActionResult listSubFileInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income listSubFileInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string subId = Convert.ToString(userObj["subId"]);
+                string fileId = Convert.ToString(userObj["fileId"]);
+                string fileName = Convert.ToString(userObj["fileName"]);
+
+
+                string note = Convert.ToString(userObj["note"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+
+
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(subId)) subId = "-1";
+
+
+                if (string.IsNullOrEmpty(note)) note = "-1";
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.blistSubFileInsert(code, name, note, users, subId, fileId,fileName);
+                logger.Info("Call database listSubFileInsert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success listSubFileInsert not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success listSubFileInsert is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        /*
+         {"id":"3","code":"124","name":"Goi thu 1","min":"6","max":"10","note":"note 1","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+
+         */
+
+        public IActionResult listSubFileUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income listSubFileUpdate :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string id = Convert.ToString(userObj["id"]);
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string subId = Convert.ToString(userObj["subId"]);
+
+                string status = Convert.ToString(userObj["status"]);
+                string note = Convert.ToString(userObj["note"]);
+
+                string type = Convert.ToString(userObj["type"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(subId)) subId = "1";
+
+
+                if (string.IsNullOrEmpty(note)) note = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+
+                if (string.IsNullOrEmpty(status)) status = "-1";
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.blistSubFileUpdate(id, code, name, subId, note, users, type,status);
+                logger.Info("Call database blistSubFileUpdate success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success blistSubFileUpdate not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success blistSubFileUpdate is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+       
+        [HttpPost]
+        public IActionResult shortCodeGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income shortCodeGetList :" + sendData.ToString());
+            shortCodeList response = new shortCodeList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+                string type = Convert.ToString(userObj["type"]);
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+                /*
+                if (string.IsNullOrEmpty(requestId)) requestId = "";
+                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+                if (string.IsNullOrEmpty(token)) token = "";
+                */
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.sortCodeGetList( type,users);
+
+                logger.Info("Call database shortCodeGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+
+                    response.list = new shortCodeObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        shortCodeObj _obj = new shortCodeObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        _obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult changeStatus([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income changeStatus :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+                string type = Convert.ToString(userObj["type"]);
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+                string id = Convert.ToString(userObj["id"]);
+                if (string.IsNullOrEmpty(id)) users = "-1";
+
+                string status = Convert.ToString(userObj["status"]);
+                if (string.IsNullOrEmpty(users)) status = "-1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+                /*
+                if (string.IsNullOrEmpty(requestId)) requestId = "";
+                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+                if (string.IsNullOrEmpty(token)) token = "";
+                */
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.changeStatus(type,id,status,users);
+
+                logger.Info("Call database changeStatus success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success changeStatus not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success changeStatus is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult balanceGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceGetList :" + sendData.ToString());
+            balanceList response = new balanceList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+                
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                
+
+
+                string name = Convert.ToString(userObj["name"]);
+                string code = Convert.ToString(userObj["code"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+
+                string isActive = Convert.ToString(userObj["isActive"]);
+                if (string.IsNullOrEmpty(isActive)) isActive = "-1";
+
+                string order = Convert.ToString(userObj["order"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(order)) order = "asc";
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+                /*
+                if (string.IsNullOrEmpty(requestId)) requestId = "";
+                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+                if (string.IsNullOrEmpty(token)) token = "";
+                */
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.balGetList(id, users,name,code,fromDate,toDate,order,rowsOnPage,seqPage, isActive);
+                
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.list = new balanceObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        balanceObj _obj = new balanceObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        _obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+                        _obj.min = ds_regist.Tables[0].Rows[j]["v_min"].ToString();
+                        _obj.max = ds_regist.Tables[0].Rows[j]["v_max"].ToString();
+                        _obj.isActive = ds_regist.Tables[0].Rows[j]["IS_ACTIVE"].ToString();
+
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+
+                       
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        /*
+        {"code":"124","name":"Cty Viettech 1","min":"0","max":"5","note":"note 1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+
+        public IActionResult balanceInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string min = Convert.ToString(userObj["min"]);
+                string max = Convert.ToString(userObj["max"]);
+                
+                string note = Convert.ToString(userObj["note"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+               
+
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(min)) min = "-1";
+                if (string.IsNullOrEmpty(max)) max = "-1";
+             
+                if (string.IsNullOrEmpty(note)) note = "-1";
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+               
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.balInsert(code, name, min, max, note, users);
+                logger.Info("Call database balInsert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success balInsert not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success balInsert is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        /*
+         {"id":"3","code":"124","name":"Goi thu 1","min":"6","max":"10","note":"note 1","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+
+         */
+
+        public IActionResult balanceUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceUpdate :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string id = Convert.ToString(userObj["id"]);
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string min = Convert.ToString(userObj["min"]);
+                string max = Convert.ToString(userObj["max"]);
+               
+                string note = Convert.ToString(userObj["note"]);
+
+                string type = Convert.ToString(userObj["type"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(min)) min = "-1";
+                if (string.IsNullOrEmpty(max)) max = "-1";
+               
+                if (string.IsNullOrEmpty(note)) note = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                
+                
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.balUpdate(id, code, name, min, max, note, users, type);
+                logger.Info("Call database balUpdate success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success balUpdate not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success balUpdate is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult expGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceGetList :" + sendData.ToString());
+            expireDateList response = new expireDateList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+
+                string isActive = Convert.ToString(userObj["isActive"]);
+                if (string.IsNullOrEmpty(isActive)) isActive = "-1";
+
+
+                string name = Convert.ToString(userObj["name"]);
+                string code = Convert.ToString(userObj["code"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+                string order = Convert.ToString(userObj["order"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(order)) order = "asc";
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+
+
+                
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.expGetList(id, users, name, code, fromDate, toDate, order, rowsOnPage, seqPage,isActive);
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+
+                    response.list = new expireDate[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        expireDate _obj = new expireDate();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        _obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+                        _obj.totalDay = ds_regist.Tables[0].Rows[j]["TOTAL_DAY_USE"].ToString();
+
+                        _obj.min = ds_regist.Tables[0].Rows[j]["V_MIN"].ToString();
+                        _obj.max = ds_regist.Tables[0].Rows[j]["V_MAX"].ToString();
+
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+                        _obj.isActive = ds_regist.Tables[0].Rows[j]["IS_ACTIVE"].ToString();
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        /*
+        {"code":"124","name":"Cty Viettech 1","totalDay":"0","note":"note 1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+        public IActionResult expInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string totalDay = Convert.ToString(userObj["totalDay"]);
+                string min = Convert.ToString(userObj["min"]);
+                string max = Convert.ToString(userObj["max"]);
+
+
+                string note = Convert.ToString(userObj["note"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(name)) name = "-1";
+
+                if (string.IsNullOrEmpty(min)) min = "0";
+                if (string.IsNullOrEmpty(max)) max = "100000";
+
+                if (string.IsNullOrEmpty(totalDay)) totalDay = "-1";
+                
+
+                if (string.IsNullOrEmpty(note)) note = "-1";
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+                DataSet ds_regist = balanceDataAccess.expInsert(code, name, totalDay, note, users,min,max);
+                logger.Info("Call database expInsert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success expInsert not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success expInsert is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        /*
+        {"id":"2","code":"124","name":"Gkaka","totalDay":"6","note":"note 1","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+
+         */
+
+        public IActionResult expUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income companyGetList :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string id = Convert.ToString(userObj["id"]);
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string totalDay = Convert.ToString(userObj["totalDay"]);
+
+                string min = Convert.ToString(userObj["min"]);
+                string max = Convert.ToString(userObj["max"]);
+
+
+                string note = Convert.ToString(userObj["note"]);
+
+                string type = Convert.ToString(userObj["type"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+              
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(totalDay)) totalDay = "-1";
+                if (string.IsNullOrEmpty(min)) min = "0";
+                if (string.IsNullOrEmpty(max)) max = "100000";
+
+
+                if (string.IsNullOrEmpty(note)) note = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+                DataSet ds_regist = balanceDataAccess.expUpdate(id, code, name, totalDay, note, users, type, min, max);
+                logger.Info("Call database expUpdate success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success expUpdate not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success expUpdate is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+        //{"id":"1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult paramGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceGetList :" + sendData.ToString());
+            ApiProcess.Models.balance.paramObjList response = new ApiProcess.Models.balance.paramObjList();
+            response.responseCode  = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+               
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+                DataSet ds_regist = balanceDataAccess.paramGetList(id, users);
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+
+
+
+                    response.list = new ApiProcess.Models.balance.paramObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        ApiProcess.Models.balance.paramObj _obj = new ApiProcess.Models.balance.paramObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+                        _obj.values = ds_regist.Tables[0].Rows[j]["SVALUES"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+                        _obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        _obj.codeGroup = ds_regist.Tables[0].Rows[j]["CODE_GROUP"].ToString();
+
+
+                        _obj.display0 = ds_regist.Tables[0].Rows[j]["DISPLAY0"].ToString();
+                        _obj.display1 = ds_regist.Tables[0].Rows[j]["DISPLAY1"].ToString();
+                        _obj.display2 = ds_regist.Tables[0].Rows[j]["DISPLAY2"].ToString();
+                        _obj.display3 = ds_regist.Tables[0].Rows[j]["DISPLAY3"].ToString();
+                        _obj.display4 = ds_regist.Tables[0].Rows[j]["DISPLAY4"].ToString();
+                        _obj.display5 = ds_regist.Tables[0].Rows[j]["DISPLAY5"].ToString();
+
+                        _obj.gameId = ds_regist.Tables[0].Rows[j]["GAME_ID"].ToString();
+                        _obj.channel = ds_regist.Tables[0].Rows[j]["CHANNEL"].ToString();
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        /*
+        {"code":"124","values":"Cty Viettech 1","note":"0","status":"1","codeGroup":"quangbh","display0":"display0","display1":"display1","display2":"display2","display3":"display3","display4":"display4","display5":"display5","gameId":"1","channel":"channel","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+        public IActionResult paramInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string code = Convert.ToString(userObj["code"]);
+                string values = Convert.ToString(userObj["values"]);
+                string note = Convert.ToString(userObj["note"]);
+                string status = Convert.ToString(userObj["status"]);
+                string codeGroup = Convert.ToString(userObj["codeGroup"]);
+
+                string display0 = Convert.ToString(userObj["display0"]);
+                string display1 = Convert.ToString(userObj["display1"]);
+                string display2 = Convert.ToString(userObj["display2"]);
+                string display3 = Convert.ToString(userObj["display3"]);
+                string display4 = Convert.ToString(userObj["display4"]);
+                string display5 = Convert.ToString(userObj["display5"]);
+
+                string gameId = Convert.ToString(userObj["gameId"]);
+                string channelParam = Convert.ToString(userObj["channelParam"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+               
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(codeGroup)) codeGroup = "-1";
+                
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.paramInsert(code,values,note,status,codeGroup,display0,display1,
+                    display2,display3,display4,display5,gameId, channelParam, users);
+                logger.Info("Call database paramInsert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success paramInsert not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success paramInsert is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        /*
+       {"id":"1","code":"124","values":"Cty Viettech 1","note":"0","status":"1","codeGroup":"quangbh","display0":"display0","display1":"display1","display2":"displayso 3","display3":"display3","display4":"display4","display5":"display5","gameId":"1","channel":"channel","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+
+         */
+
+        public IActionResult paramUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income companyGetList :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string id = Convert.ToString(userObj["id"]);
+
+                string code = Convert.ToString(userObj["code"]);
+                string values = Convert.ToString(userObj["values"]);
+                string note = Convert.ToString(userObj["note"]);
+                string status = Convert.ToString(userObj["status"]);
+                string codeGroup = Convert.ToString(userObj["codeGroup"]);
+
+                string display0 = Convert.ToString(userObj["display0"]);
+                string display1 = Convert.ToString(userObj["display1"]);
+                string display2 = Convert.ToString(userObj["display2"]);
+                string display3 = Convert.ToString(userObj["display3"]);
+                string display4 = Convert.ToString(userObj["display4"]);
+                string display5 = Convert.ToString(userObj["display5"]);
+
+                string gameId = Convert.ToString(userObj["gameId"]);
+                string channelParam = Convert.ToString(userObj["channelParam"]);
+
+                string type = Convert.ToString(userObj["type"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+               
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(type)) type = "0";
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.paramUpdate(id, code, values, note, status, codeGroup, display0, display1,
+                    display2, display3, display4, display5, gameId, channelParam, users, type);
+                logger.Info("Call database paramUpdate success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success paramUpdate not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success paramUpdate is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+        //{"id":"1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult svGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceGetList :" + sendData.ToString());
+            serviceObjList response = new serviceObjList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+             
+
+                string name = Convert.ToString(userObj["name"]);
+                string code = Convert.ToString(userObj["code"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+                string order = Convert.ToString(userObj["order"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(order)) order = "asc";
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+                string isActive = Convert.ToString(userObj["isActive"]);
+                if (string.IsNullOrEmpty(isActive)) isActive = "-1";
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.svGetList(id, users, name, code, fromDate, toDate, order, rowsOnPage, seqPage, isActive);
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+                    response.list = new serviceObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        serviceObj _obj = new serviceObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+                        _obj.name = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        _obj.description = ds_regist.Tables[0].Rows[j]["DESCRIPTION"].ToString();
+                        _obj.shortCode = ds_regist.Tables[0].Rows[j]["SHORT_CODE"].ToString();
+                        _obj.command = ds_regist.Tables[0].Rows[j]["COMMAND_REGISTER"].ToString();
+
+
+                        _obj.contentEn = ds_regist.Tables[0].Rows[j]["CONTENT_EN"].ToString();
+                        _obj.contentFr = ds_regist.Tables[0].Rows[j]["CONTENT_FR"].ToString();
+                        _obj.contentLc = ds_regist.Tables[0].Rows[j]["CONTENT_LC"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+                        _obj.companyId = ds_regist.Tables[0].Rows[j]["COMPANY_ID"].ToString();
+
+                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+                        _obj.msgRegisterSuccess = ds_regist.Tables[0].Rows[j]["USSD_MSG_REGISTER_SUC"].ToString();
+                        _obj.msgRegisterFlase = ds_regist.Tables[0].Rows[j]["USSD_MSG_REGISTER_FAIL"].ToString();
+                        _obj.msgConfirm = ds_regist.Tables[0].Rows[j]["USSD_CONFIRM"].ToString();
+
+                        _obj.isActive = ds_regist.Tables[0].Rows[j]["IS_ACTIVE"].ToString();
+                        _obj.isMyService = ds_regist.Tables[0].Rows[j]["IS_MYSERVICE"].ToString();
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        /*
+        {"code":"124","name":"Cty Viettech 1","description":"0","shortCode":"12345","command":"ON 123","contentEn":"contentEn","contentFr":"contentFr","contentLc":"contentLc","note":"note","companyId":"1","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+        public IActionResult svInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string description = Convert.ToString(userObj["description"]);
+                string shortCode = Convert.ToString(userObj["shortCode"]);
+                string command = Convert.ToString(userObj["command"]);
+
+                string contentEn = Convert.ToString(userObj["contentEn"]);
+                string contentFr = Convert.ToString(userObj["contentFr"]);
+                string contentLc = Convert.ToString(userObj["contentLc"]);
+                string note = Convert.ToString(userObj["note"]);
+                string companyId = Convert.ToString(userObj["companyId"]);
+                
+
+                string users = Convert.ToString(userObj["users"]);
+               
+
+
+                string msgRegisterSuccess = Convert.ToString(userObj["msgRegisterSuccess"]);
+                string msgRegisterFlase = Convert.ToString(userObj["msgRegisterFlase"]);
+                string msgConfirm = Convert.ToString(userObj["msgConfirm"]);
+
+                if (string.IsNullOrEmpty(msgRegisterSuccess)) msgRegisterSuccess = "-1";
+                if (string.IsNullOrEmpty(msgRegisterFlase)) msgRegisterFlase = "-1";
+
+
+
+
+
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(companyId)) companyId = "-1";
+
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+                DataSet ds_regist = balanceDataAccess.svInsert(code, name, description, shortCode, command, contentEn, contentFr,
+                    contentLc,note, companyId, users, msgRegisterSuccess, msgRegisterFlase, msgConfirm);
+                logger.Info("Call database svInsert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success svInsert not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success svInsert is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        /*
+      {"id":"2","code":"124","name":"name1","description":"123","shortCode":"123456","command":"ON 1231","contentEn":"contentEn","contentFr":"contentFr","contentLc":"contentLc","note":"note","companyId":"1","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+
+        public IActionResult svUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income companyGetList :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string id = Convert.ToString(userObj["id"]);
+
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string description = Convert.ToString(userObj["description"]);
+                string shortCode = Convert.ToString(userObj["shortCode"]);
+                string command = Convert.ToString(userObj["command"]);
+
+                string contentEn = Convert.ToString(userObj["contentEn"]);
+                string contentFr = Convert.ToString(userObj["contentFr"]);
+                string contentLc = Convert.ToString(userObj["contentLc"]);
+                string note = Convert.ToString(userObj["note"]);
+                string companyId = Convert.ToString(userObj["companyId"]);
+
+                string type = Convert.ToString(userObj["type"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+               
+
+
+                string msgRegisterSuccess = Convert.ToString(userObj["msgRegisterSuccess"]);
+                string msgRegisterFlase = Convert.ToString(userObj["msgRegisterFlase"]);
+                string msgConfirm = Convert.ToString(userObj["msgConfirm"]);
+                if (string.IsNullOrEmpty(msgRegisterSuccess)) msgRegisterSuccess = "-1";
+                if (string.IsNullOrEmpty(msgRegisterFlase)) msgRegisterFlase = "-1";
+
+
+
+               
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(type)) type = "0";
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.svUpdate(id, code, name, description, shortCode, command, contentEn, contentFr,
+                    contentLc, note, companyId, users, type, msgRegisterSuccess, msgRegisterFlase, msgConfirm);
+                logger.Info("Call database svUpdate success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success svUpdate not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success svUpdate is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        //************************     HIEN TAI KHONG DU SUNG PHAN SERVICE ADD
+
+        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult svAddGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceGetList :" + sendData.ToString());
+            serviceAddObjList response = new serviceAddObjList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+               
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+               
+
+
+                string name = Convert.ToString(userObj["name"]);
+                string code = Convert.ToString(userObj["code"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+                string order = Convert.ToString(userObj["order"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(order)) order = "asc";
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.svAddGetList(id, users, name, code, fromDate, toDate, order, rowsOnPage, seqPage);
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+
+                    response.list = new serviceAddObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        serviceAddObj _obj = new serviceAddObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+                        _obj.name = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        _obj.addType = ds_regist.Tables[0].Rows[j]["ADD_TYPE"].ToString();
+                        _obj.numberDisplay = ds_regist.Tables[0].Rows[j]["NUMBER_DISPLAY"].ToString();
+                        _obj.priority = ds_regist.Tables[0].Rows[j]["PRIORITY"].ToString();
+
+
+                        _obj.serviceId = ds_regist.Tables[0].Rows[j]["SERVICE_ID"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+
+                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        /*
+       {"code":"124","name":"Cty Viettech 1","addType":"0","shortCode":"12345","numberDisplay":"1","priority":"0","serviceId":"1","note":"note","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+        public IActionResult svAddInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string addType = Convert.ToString(userObj["addType"]);
+                string numberDisplay = Convert.ToString(userObj["numberDisplay"]);
+                string priority = Convert.ToString(userObj["priority"]);
+
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                string note = Convert.ToString(userObj["note"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+               
+
+                if (string.IsNullOrEmpty(code)) code = "-1";
+
+
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.svAddInsert(code, name, addType, numberDisplay, priority, serviceId, note, users);
+                logger.Info("Call database svAddInsert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success svAddInsert not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success svAddInsert is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        
+
+        /*
+      {"id":"2","code":"124","name":"quangbh","addType":"0","shortCode":"12345","numberDisplay":"1","priority":"0","serviceId":"1","note":"note","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+
+        public IActionResult svAddUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income companyGetList :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string id = Convert.ToString(userObj["id"]);
+
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string addType = Convert.ToString(userObj["addType"]);
+                string numberDisplay = Convert.ToString(userObj["numberDisplay"]);
+                string priority = Convert.ToString(userObj["priority"]);
+
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                string note = Convert.ToString(userObj["note"]);
+
+                string type = Convert.ToString(userObj["type"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+               
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(type)) type = "0";
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.svAddUpdate(id, code, name, addType, numberDisplay, priority, serviceId, note, users, type);
+                logger.Info("Call database comInsert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success svAddUpdate not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success svAddUpdate is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        //************************     KET THUC PHAN KHONG DU SUNG PHAN SERVICE ADD
+
+
+
+        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult camGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income camGetList :" + sendData.ToString());
+            campaignObjList response = new campaignObjList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+                string isDefault = Convert.ToString(userObj["isDefault"]);
+                string isMyservice = Convert.ToString(userObj["isMyservice"]);
+
+
+                string status = Convert.ToString(userObj["status"]);
+                string name = Convert.ToString(userObj["name"]);
+                string code = Convert.ToString(userObj["code"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+                string order = Convert.ToString(userObj["order"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(name)) name = "-1";
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(order)) order = "asc";
+
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+                if (string.IsNullOrEmpty(isDefault)) isDefault = "-1";
+                if (string.IsNullOrEmpty(isMyservice)) isMyservice = "-1";
+
+                if (string.IsNullOrEmpty(status)) status = "-1";
+
+
+
+
+
+               
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+                string _rowsOnPage, _seqPage, _totalPage;
+                List<campaignObj> _listBalanceOfCam = getListCommon.getListCam(id, users, name, code, fromDate, toDate, order, rowsOnPage, seqPage, status
+                    , out _rowsOnPage, out _seqPage, out _totalPage, isDefault, isMyservice);
+
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                response.rowsOnPage = _rowsOnPage;
+                response.seqPage = _seqPage;
+                response.totalPage = _totalPage;
+
+                response.list = _listBalanceOfCam;
+
+
+
+
+
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        /*
+       {"code":"124","name":"Cty Viettech 1","fromDate":"01/11/2021 00:00:00","toDate":"01/11/2022 00:00:00","fromHour":"08:08:09","toHour":"01:09:08","rule":"1","priority":"1","balanceId":"1","expireDateId":"1","status":"1","note":"123456","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+        public IActionResult camInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceInsert :" + sendData.ToString());
+            campaignInsert response = new campaignInsert();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+                string fromHour = Convert.ToString(userObj["fromHour"]);
+
+                string toHour = Convert.ToString(userObj["toHour"]);
+                string rule = Convert.ToString(userObj["rule"]);
+                string priority = Convert.ToString(userObj["priority"]);
+                string balanceId = Convert.ToString(userObj["balanceId"]);
+                string expireDateId = Convert.ToString(userObj["expireDateId"]);
+                string status = Convert.ToString(userObj["status"]);
+                string note = Convert.ToString(userObj["note"]);
+                string numberDisplay = Convert.ToString(userObj["numberDisplay"]);
+
+                string addType = Convert.ToString(userObj["addType"]);
+                string title = Convert.ToString(userObj["title"]);
+
+                string isDefault = Convert.ToString(userObj["isDefault"]);
+                string isMyservice = Convert.ToString(userObj["isMyservice"]);
+
+                string users = Convert.ToString(userObj["users"]);
+                
+
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(numberDisplay)) numberDisplay = "1";
+                if (string.IsNullOrEmpty(addType)) addType = "1";
+                
+
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.camInsert(code, name, fromDate, toDate, fromHour, toHour, rule,
+                    priority, balanceId, expireDateId, status, note, users, numberDisplay, addType, title, isDefault, isMyservice);
+                logger.Info("Call database balInsert success:");
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success ds_regist not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString();
+                    response.id= ds_regist.Tables[0].Rows[0]["id"].ToString();
+                }
+                else
+                {
+                    logger.Info("Call database success ds_regist is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        /*
+      {"id":"5","code":"124","name":"Cty  1","fromDate":"01/11/2021 00:00:00","toDate":"01/11/2022 00:00:00","fromHour":"08:08:09","toHour":"01:09:08","rule":"1","priority":"1","balanceId":"1","expireDateId":"1","status":"1","note":"123456","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+
+        public IActionResult camUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income companyGetList :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string id = Convert.ToString(userObj["id"]);
+
+                string code = Convert.ToString(userObj["code"]);
+                string name = Convert.ToString(userObj["name"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+                string fromHour = Convert.ToString(userObj["fromHour"]);
+
+                string toHour = Convert.ToString(userObj["toHour"]);
+                string rule = Convert.ToString(userObj["rule"]);
+                string priority = Convert.ToString(userObj["priority"]);
+                string balanceId = Convert.ToString(userObj["balanceId"]);
+                string expireDateId = Convert.ToString(userObj["expireDateId"]);
+                string status = Convert.ToString(userObj["status"]);
+                string note = Convert.ToString(userObj["note"]);
+
+
+                string type = Convert.ToString(userObj["type"]);
+                string numberDisplay = Convert.ToString(userObj["numberDisplay"]);
+                string addType = Convert.ToString(userObj["addType"]);
+
+                string title = Convert.ToString(userObj["title"]);
+                string isDefault = Convert.ToString(userObj["isDefault"]);
+                string isMyservice = Convert.ToString(userObj["isMyservice"]);
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+                
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(type)) type = "0";
+                if (string.IsNullOrEmpty(numberDisplay)) numberDisplay = "1";
+                if (string.IsNullOrEmpty(addType)) addType = "1";
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.camUpdate(id, code, name, fromDate, toDate, fromHour, toHour, rule,
+                    priority, balanceId, expireDateId, status, note, users, type, numberDisplay, addType,title,isDefault,isMyservice);
+                logger.Info("Call database comInsert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success ds_regist not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success ds_regist is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+        public IActionResult camCopy([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income camCopy :" + sendData.ToString());
+            campaignInsert response = new campaignInsert();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string id = Convert.ToString(userObj["id"]);
+                
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+                if (string.IsNullOrEmpty(id)) id = "-1";
+               
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.camCopy(id);
+                logger.Info("Call database camCopy success:");
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success ds_regist not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString();
+                    response.id = ds_regist.Tables[0].Rows[0]["id"].ToString();
+                }
+                else
+                {
+                    logger.Info("Call database success ds_regist is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult camBalanceGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income camBalanceGetList :" + sendData.ToString());
+            campaignBalObjList response = new campaignBalObjList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+
+
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+                string order = Convert.ToString(userObj["order"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(order)) order = "asc";
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+                string _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                string _rowsOnPage, _seqPage, _totalPage;
+                List<campaignBalObj> _listBalanceOfCam =getListCommon.getListBalanceOfCam(id, users, campaignId, fromDate, toDate, order, rowsOnPage, seqPage, channel, language
+                    ,out _rowsOnPage,out _seqPage,out _totalPage);
+
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                response.rowsOnPage = _rowsOnPage;
+                response.seqPage = _seqPage;
+                response.totalPage = _totalPage;
+
+                response.list = _listBalanceOfCam;
+
+                
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        ////{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        //[HttpPost]
+        //public IActionResult camBalanceGetListBk([FromBody] dynamic sendData)
+        //{
+
+        //    logger.Info("New request income camBalanceGetList :" + sendData.ToString());
+        //    campaignBalObjList response = new campaignBalObjList();
+        //    response.responseCode = "-1";
+        //    response.responseMessage = "Err unknow";
+
+        //    try
+        //    {
+
+        //        var userObj = JObject.Parse(sendData.ToString());
+
+        //        string users = Convert.ToString(userObj["users"]);
+        //        string id = Convert.ToString(userObj["id"]);
+
+
+        //        string campaignId = Convert.ToString(userObj["campaignId"]);
+
+        //        string fromDate = Convert.ToString(userObj["fromDate"]);
+        //        string toDate = Convert.ToString(userObj["toDate"]);
+
+        //        string order = Convert.ToString(userObj["order"]);
+        //        string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+        //        string seqPage = Convert.ToString(userObj["seqPage"]);
+        //        if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+
+        //        if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+        //        if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+        //        if (string.IsNullOrEmpty(order)) order = "asc";
+        //        if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+        //        if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+        //        string _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+        //        if (string.IsNullOrEmpty(users)) users = "-1";
+        //        if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+
+        //        string token = Convert.ToString(userObj["token"]);
+        //        string channel = Convert.ToString(userObj["channel"]);
+        //        string language = Convert.ToString(userObj["language"]);
+        //        if (string.IsNullOrEmpty(language)) language = "-1";
+
+        //        string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+        //        string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+        //        string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+        //        var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+        //        //---------------------Lay ra va luu mot redis tu cache-----------------------------
+        //        redisConnection _redis;
+        //        memoryCache.TryGetValue("redis", out _redis);
+        //        if (_redis == null)
+        //        {
+        //            var cacheExpiryOptions = new MemoryCacheEntryOptions
+        //            {
+        //                AbsoluteExpiration = DateTime.Now.AddMonths(12),
+        //                Priority = CacheItemPriority.High,
+        //                SlidingExpiration = TimeSpan.FromMinutes(2),
+        //                Size = 1024,
+        //            };
+        //            _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+        //            _redis.connet();
+        //            memoryCache.Set("redis", _redis, cacheExpiryOptions);
+        //        }
+        //        if (!_redis.isConnet())
+        //        {
+        //            if (!_redis.connet())
+        //            {
+        //                logger.Info("Connect to redis false");
+        //                response.responseCode = "-2";
+        //                response.responseMessage = "System Update";
+        //                logger.Info("confirmTicket response : " + response.ToString());
+        //                return Ok(response);
+        //            }
+        //            else
+        //            {
+        //                var cacheExpiryOptions = new MemoryCacheEntryOptions
+        //                {
+        //                    AbsoluteExpiration = DateTime.Now.AddMonths(12),
+        //                    Priority = CacheItemPriority.High,
+        //                    SlidingExpiration = TimeSpan.FromMinutes(2),
+        //                    Size = 1024,
+        //                };
+        //                memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+        //            }
+        //        }
+        //        //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+        //        tokenObj _tokenObj = null;
+        //        if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+        //        {
+        //            logger.Info("Authen token false");
+        //            response.responseCode = "35";
+        //            response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+        //            logger.Info("confirmTicket response : " + response.ToString());
+        //            return Ok(response);
+        //        }
+
+
+
+
+
+        //        DataSet ds_regist = balanceDataAccess.camBalGetList(id, users, campaignId, fromDate, toDate, order, rowsOnPage, seqPage, channel, language);
+        //        logger.Info("Call database balGetList success:");
+        //        response.responseCode = "0";
+        //        response.responseMessage = "Success";
+        //        if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+        //        {
+
+
+        //            response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+        //            response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+        //            response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+        //            response.list = new campaignBalObj[ds_regist.Tables[0].Rows.Count];
+        //            for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+        //            {
+        //                campaignBalObj _obj = new campaignBalObj();
+
+        //                _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+        //                _obj.campaignId = ds_regist.Tables[0].Rows[j]["CAMPAIGN_ID"].ToString();
+        //                _obj.balanceId = ds_regist.Tables[0].Rows[j]["REF_ID"].ToString();
+        //                _obj.isDelete = ds_regist.Tables[0].Rows[j]["IS_DELETE"].ToString();
+        //                _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+        //                _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+        //                _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+        //                _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+        //                _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+
+
+
+        //                response.list[j] = _obj;
+        //            }
+
+        //        }
+
+
+
+
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        logger.Info("exception: " + ex.ToString());
+        //        response.responseCode = "-2";
+        //        response.responseMessage = "System upgrade";
+
+        //    }
+        //    logger.Info("Responase to web: " + response.ToString());
+        //    return Ok(response);
+        //}
+
+
+
+        /*
+       {"code":"124","name":"Cty Viettech 1","fromDate":"01/11/2021 00:00:00","toDate":"01/11/2022 00:00:00","fromHour":"08:08:09","toHour":"01:09:08","rule":"1","priority":"1","balanceId":"1","expireDateId":"1","status":"1","note":"123456","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+        public IActionResult camBalanceInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income camBalanceInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+                string refId = Convert.ToString(userObj["balanceId"]);
+                string note = Convert.ToString(userObj["note"]);
+
+
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+           
+
+
+
+
+                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+                if (string.IsNullOrEmpty(refId)) refId = "-1";
+                
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.camBalInsert(campaignId,refId, note, users,
+                    channel, language);
+                logger.Info("Call database camBalInsert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success camBalInsert not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success ds_regist is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        public IActionResult camBalanceUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income camBalanceUpdate :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string type = Convert.ToString(userObj["type"]);
+                string id = Convert.ToString(userObj["id"]);
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+                string refId = Convert.ToString(userObj["balanceId"]);
+                string note = Convert.ToString(userObj["note"]);
+
+
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+
+
+
+
+                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+                if (string.IsNullOrEmpty(refId)) refId = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.camBalUpdate(campaignId, refId, note, users,
+                    channel, language,id,type);
+                logger.Info("Call database camBalanceUpdate success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success camBalanceUpdate not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success ds_regist is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult camSubGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income camSubGetList :" + sendData.ToString());
+            campaignSubObjList response = new campaignSubObjList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+
+
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+                string order = Convert.ToString(userObj["order"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(order)) order = "asc";
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+                string _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+                string _rowsOnPage, _seqPage, _totalPage;
+                List<campaignSubObj> _listBalanceOfCam = getListCommon.getListSubOfCam(id, users, campaignId, fromDate, toDate, order, rowsOnPage, seqPage, channel, language
+                    , out _rowsOnPage, out _seqPage, out _totalPage);
+
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                response.rowsOnPage = _rowsOnPage;
+                response.seqPage = _seqPage;
+                response.totalPage = _totalPage;
+
+                response.list = _listBalanceOfCam;
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+        //[HttpPost]
+        //public IActionResult camSubGetListbk([FromBody] dynamic sendData)
+        //{
+
+        //    logger.Info("New request income camSubGetList :" + sendData.ToString());
+        //    campaignSubObjList response = new campaignSubObjList();
+        //    response.responseCode = "-1";
+        //    response.responseMessage = "Err unknow";
+
+        //    try
+        //    {
+
+        //        var userObj = JObject.Parse(sendData.ToString());
+
+        //        string users = Convert.ToString(userObj["users"]);
+        //        string id = Convert.ToString(userObj["id"]);
+
+
+        //        string campaignId = Convert.ToString(userObj["campaignId"]);
+
+        //        string fromDate = Convert.ToString(userObj["fromDate"]);
+        //        string toDate = Convert.ToString(userObj["toDate"]);
+
+        //        string order = Convert.ToString(userObj["order"]);
+        //        string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+        //        string seqPage = Convert.ToString(userObj["seqPage"]);
+        //        if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+
+        //        if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+        //        if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+        //        if (string.IsNullOrEmpty(order)) order = "asc";
+        //        if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+        //        if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+        //        string _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+        //        if (string.IsNullOrEmpty(users)) users = "-1";
+        //        if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+
+        //        string token = Convert.ToString(userObj["token"]);
+        //        string channel = Convert.ToString(userObj["channel"]);
+        //        string language = Convert.ToString(userObj["language"]);
+        //        if (string.IsNullOrEmpty(language)) language = "-1";
+
+        //        string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+        //        string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+        //        string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+        //        var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+        //        //---------------------Lay ra va luu mot redis tu cache-----------------------------
+        //        redisConnection _redis;
+        //        memoryCache.TryGetValue("redis", out _redis);
+        //        if (_redis == null)
+        //        {
+        //            var cacheExpiryOptions = new MemoryCacheEntryOptions
+        //            {
+        //                AbsoluteExpiration = DateTime.Now.AddMonths(12),
+        //                Priority = CacheItemPriority.High,
+        //                SlidingExpiration = TimeSpan.FromMinutes(2),
+        //                Size = 1024,
+        //            };
+        //            _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+        //            _redis.connet();
+        //            memoryCache.Set("redis", _redis, cacheExpiryOptions);
+        //        }
+        //        if (!_redis.isConnet())
+        //        {
+        //            if (!_redis.connet())
+        //            {
+        //                logger.Info("Connect to redis false");
+        //                response.responseCode = "-2";
+        //                response.responseMessage = "System Update";
+        //                logger.Info("confirmTicket response : " + response.ToString());
+        //                return Ok(response);
+        //            }
+        //            else
+        //            {
+        //                var cacheExpiryOptions = new MemoryCacheEntryOptions
+        //                {
+        //                    AbsoluteExpiration = DateTime.Now.AddMonths(12),
+        //                    Priority = CacheItemPriority.High,
+        //                    SlidingExpiration = TimeSpan.FromMinutes(2),
+        //                    Size = 1024,
+        //                };
+        //                memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+        //            }
+        //        }
+        //        //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+        //        tokenObj _tokenObj = null;
+        //        if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+        //        {
+        //            logger.Info("Authen token false");
+        //            response.responseCode = "35";
+        //            response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+        //            logger.Info("confirmTicket response : " + response.ToString());
+        //            return Ok(response);
+        //        }
+
+
+
+
+
+        //        DataSet ds_regist = balanceDataAccess.camSubGetList(id, users, campaignId, fromDate, toDate, order, rowsOnPage, seqPage, channel, language);
+        //        logger.Info("Call database camSubGetList success:");
+        //        response.responseCode = "0";
+        //        response.responseMessage = "Success";
+        //        if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+        //        {
+
+
+        //            response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+        //            response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+        //            response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+        //            response.list = new List<campaignSubObj>[ds_regist.Tables[0].Rows.Count];
+        //            for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+        //            {
+        //                campaignBalObj _obj = new campaignBalObj();
+
+        //                _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+        //                _obj.campaignId = ds_regist.Tables[0].Rows[j]["CAMPAIGN_ID"].ToString();
+        //                _obj.balanceId = ds_regist.Tables[0].Rows[j]["REF_ID"].ToString();
+        //                _obj.isDelete = ds_regist.Tables[0].Rows[j]["IS_DELETE"].ToString();
+        //                _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+        //                _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+        //                _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+        //                _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+        //                _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+
+
+
+        //                response.list[j] = _obj;
+        //            }
+
+        //        }
+
+
+
+
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        logger.Info("exception: " + ex.ToString());
+        //        response.responseCode = "-2";
+        //        response.responseMessage = "System upgrade";
+
+        //    }
+        //    logger.Info("Responase to web: " + response.ToString());
+        //    return Ok(response);
+        //}
+
+
+
+        /*
+       {"code":"124","name":"Cty Viettech 1","fromDate":"01/11/2021 00:00:00","toDate":"01/11/2022 00:00:00","fromHour":"08:08:09","toHour":"01:09:08","rule":"1","priority":"1","balanceId":"1","expireDateId":"1","status":"1","note":"123456","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+        public IActionResult camSubInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income camSubInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+                string refId = Convert.ToString(userObj["subId"]);
+                string note = Convert.ToString(userObj["note"]);
+
+
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+
+
+
+
+                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+                if (string.IsNullOrEmpty(refId)) refId = "-1";
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.camSubInsert(campaignId, refId, note, users,
+                    channel, language);
+                logger.Info("Call database camSubInsert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success camSubInsert not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success ds_regist is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        public IActionResult camSubUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income camSubUpdate :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string type = Convert.ToString(userObj["type"]);
+                string id = Convert.ToString(userObj["id"]);
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+                string refId = Convert.ToString(userObj["subId"]);
+                string note = Convert.ToString(userObj["note"]);
+
+
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+
+
+
+
+                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+                if (string.IsNullOrEmpty(refId)) refId = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.camSubUpdate(campaignId, refId, note, users,
+                    channel, language, id, type);
+                logger.Info("Call database camBalanceUpdate success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success camBalanceUpdate not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success ds_regist is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        public IActionResult camExpireGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income camExpireGetList :" + sendData.ToString());
+            campaignExpObjList response = new campaignExpObjList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+
+
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+                string order = Convert.ToString(userObj["order"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(order)) order = "asc";
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+                string _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                string _rowsOnPage, _seqPage, _totalPage;
+                List<campaignExpObj> _listBalanceOfCam = getListCommon.getListExpireOfCam(id, users, campaignId, fromDate, toDate, order, rowsOnPage, seqPage, channel, language
+                    , out _rowsOnPage, out _seqPage, out _totalPage);
+
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                response.rowsOnPage = _rowsOnPage;
+                response.seqPage = _seqPage;
+                response.totalPage = _totalPage;
+
+                response.list = _listBalanceOfCam;
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        /*
+       {"code":"124","name":"Cty Viettech 1","fromDate":"01/11/2021 00:00:00","toDate":"01/11/2022 00:00:00","fromHour":"08:08:09","toHour":"01:09:08","rule":"1","priority":"1","balanceId":"1","expireDateId":"1","status":"1","note":"123456","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+        public IActionResult camExpireInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income camExpireInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+                string refId = Convert.ToString(userObj["expireId"]);
+                string note = Convert.ToString(userObj["note"]);
+
+
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+
+
+
+
+                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+                if (string.IsNullOrEmpty(refId)) refId = "-1";
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.camExpInsert(campaignId, refId, note, users,
+                    channel, language);
+                logger.Info("Call database camExpireInsert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success camExpireInsert not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success ds_regist is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        public IActionResult camExpireUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income camExpireUpdate :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string type = Convert.ToString(userObj["type"]);
+                string id = Convert.ToString(userObj["id"]);
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+                string refId = Convert.ToString(userObj["expireId"]);
+                string note = Convert.ToString(userObj["note"]);
+
+
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+
+
+
+
+                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+                if (string.IsNullOrEmpty(refId)) refId = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.camExpUpdate(campaignId, refId, note, users,
+                    channel, language, id, type);
+                logger.Info("Call database camExpireUpdate success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success camExpireUpdate not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success ds_regist is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+        public IActionResult caShortCodeGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income caShortCodeGetList :" + sendData.ToString());
+            campaignScObjList response = new campaignScObjList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+
+
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+                string order = Convert.ToString(userObj["order"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(order)) order = "asc";
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+                string _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                string _rowsOnPage, _seqPage, _totalPage;
+                List<campaignScObj> _listBalanceOfCam = getListCommon.getListShortCodeOfCam(id, users, campaignId, fromDate, toDate, order, rowsOnPage, seqPage, channel, language
+                    , out _rowsOnPage, out _seqPage, out _totalPage);
+
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                response.rowsOnPage = _rowsOnPage;
+                response.seqPage = _seqPage;
+                response.totalPage = _totalPage;
+
+                response.list = _listBalanceOfCam;
+
+
+                
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        /*
+       {"code":"124","name":"Cty Viettech 1","fromDate":"01/11/2021 00:00:00","toDate":"01/11/2022 00:00:00","fromHour":"08:08:09","toHour":"01:09:08","rule":"1","priority":"1","balanceId":"1","expireDateId":"1","status":"1","note":"123456","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+        public IActionResult camShortCodeInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income camShortCodeInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+                string refId = Convert.ToString(userObj["shortCodeId"]);
+                string note = Convert.ToString(userObj["note"]);
+
+
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+
+
+
+
+                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+                if (string.IsNullOrEmpty(refId)) refId = "-1";
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.camScInsert(campaignId, refId, note, users,
+                    channel, language);
+                logger.Info("Call database camShortCodeInsert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success camShortCodeInsert not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success ds_regist is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        
+        public IActionResult camShortCodeUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income camShortCodeUpdate :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string type = Convert.ToString(userObj["type"]);
+                string id = Convert.ToString(userObj["id"]);
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+                string refId = Convert.ToString(userObj["shortCodeId"]);
+                string note = Convert.ToString(userObj["note"]);
+
+
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+
+
+
+
+                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+                if (string.IsNullOrEmpty(refId)) refId = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.camScUpdate(campaignId, refId, note, users,
+                    channel, language, id, type);
+                logger.Info("Call database camShortCodeUpdate success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success camShortCodeUpdate not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success camShortCodeUpdate is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult camAddGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceGetList :" + sendData.ToString());
+            campaignAddObjList response = new campaignAddObjList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+                
+
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+                string order = Convert.ToString(userObj["order"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                logger.Info("order truc" + order);
+                if (string.IsNullOrEmpty(order)) order = "asc";
+                logger.Info("order sau"+ order);
+
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+                string _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                string _rowsOnPage, _seqPage, _totalPage;
+                List<campaignAddObj> _listOfCam = getListCommon.getListServiceOfCam(id, users, campaignId, fromDate, toDate, order, rowsOnPage, seqPage, channel, language
+                    , out _rowsOnPage, out _seqPage, out _totalPage);
+
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                response.rowsOnPage = _rowsOnPage;
+                response.seqPage = _seqPage;
+                response.totalPage = _totalPage;
+
+                response.list = _listOfCam;
+
+
+              
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        /*
+       {"code":"124","name":"Cty Viettech 1","fromDate":"01/11/2021 00:00:00","toDate":"01/11/2022 00:00:00","fromHour":"08:08:09","toHour":"01:09:08","rule":"1","priority":"1","balanceId":"1","expireDateId":"1","status":"1","note":"123456","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+        public IActionResult camAddInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+                string serviceAddId = Convert.ToString(userObj["serviceId"]);
+                string note = Convert.ToString(userObj["note"]);
+
+
+
+
+                string users = Convert.ToString(userObj["users"]);
+                
+                string ussdDisplay = Convert.ToString(userObj["ussdDisplay"]);
+                string keyRegister = Convert.ToString(userObj["keyRegister"]);
+
+
+
+               
+
+                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+                if (string.IsNullOrEmpty(serviceAddId)) serviceAddId = "-1";
+                if (string.IsNullOrEmpty(ussdDisplay)) ussdDisplay = "-1";
+                if (string.IsNullOrEmpty(keyRegister)) keyRegister = "-1";
+
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.camAddInsert(campaignId, serviceAddId, note, users,
+                    ussdDisplay, keyRegister);
+                logger.Info("Call database balInsert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success ds_regist not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success ds_regist is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        /*
+      {"id":"5","code":"124","name":"Cty  1","fromDate":"01/11/2021 00:00:00","toDate":"01/11/2022 00:00:00","fromHour":"08:08:09","toHour":"01:09:08","rule":"1","priority":"1","balanceId":"1","expireDateId":"1","status":"1","note":"123456","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+
+        public IActionResult camAddUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income companyGetList :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string id = Convert.ToString(userObj["id"]);
+
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+                string serviceAddId = Convert.ToString(userObj["serviceAddId"]);
+                string note = Convert.ToString(userObj["note"]);
+
+
+                string type = Convert.ToString(userObj["type"]);
+
+                string keyRegister = Convert.ToString(userObj["keyRegister"]);
+                string users = Convert.ToString(userObj["users"]);
+
+
+                
+                string ussdDisplay = Convert.ToString(userObj["ussdDisplay"]);
+
+
+
+
+                
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(keyRegister)) keyRegister = "-1";
+                if (string.IsNullOrEmpty(type)) type = "0";
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                
+                if (string.IsNullOrEmpty(ussdDisplay)) ussdDisplay = "-1";
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.camAddUpdate(id, campaignId, serviceAddId, note, users, type, ussdDisplay, keyRegister);
+                logger.Info("Call database comInsert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Call database success ds_regist not null");
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+                }
+                else
+                {
+                    logger.Info("Call database success ds_regist is null");
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err unknow";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        //{"id":"1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult usersGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceGetList :" + sendData.ToString());
+            usersObjList response = new usersObjList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+              
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.usersGetList(id, users);
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+
+
+
+                    response.list = new usersObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        usersObj _obj = new usersObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.userName = ds_regist.Tables[0].Rows[j]["USERNAME"].ToString();
+                        _obj.pasword =ResfullApi.Models.CustomEncryption.Decrypt(ds_regist.Tables[0].Rows[j]["PASSWORD"].ToString());
+                        _obj.role = ds_regist.Tables[0].Rows[j]["ROLE"].ToString();
+                        _obj.contryCode = ds_regist.Tables[0].Rows[j]["COUNTRY_CODE"].ToString();
+                        _obj.isLock = ds_regist.Tables[0].Rows[j]["IS_LOCK"].ToString();
+
+
+                        _obj.totalFalse = ds_regist.Tables[0].Rows[j]["TOTAL_FALSE"].ToString();
+                        _obj.timeLock = ds_regist.Tables[0].Rows[j]["TIME_LOCK"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        /*
+        {"code":"124","values":"Cty Viettech 1","note":"0","status":"1","codeGroup":"quangbh","display0":"display0","display1":"display1","display2":"display2","display3":"display3","display4":"display4","display5":"display5","gameId":"1","channel":"channel","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+        public IActionResult usersInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string userName = Convert.ToString(userObj["userName"]);
+                string pasword = ResfullApi.Models.CustomEncryption.Encrypt(Convert.ToString(userObj["pasword"]));
+                string role = Convert.ToString(userObj["role"]);
+                string contryCode = Convert.ToString(userObj["contryCode"]);
+                string isLock = Convert.ToString(userObj["isLock"]);
+                string timeLock = Convert.ToString(userObj["timeLock"]);
+                string totalFalse = Convert.ToString(userObj["totalFalse"]);
+                string note = Convert.ToString(userObj["note"]);
+
+
+
+                string users = Convert.ToString(userObj["users"]);
+               
+
+                if (string.IsNullOrEmpty(userName)) userName = "-1";
+                if (string.IsNullOrEmpty(isLock)) isLock = "0";
+
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.usersInsert(userName, pasword, role, contryCode, isLock, totalFalse, timeLock, note, users);
+                logger.Info("Call database balInsert success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        /*
+       {"id":"1","code":"124","values":"Cty Viettech 1","note":"0","status":"1","codeGroup":"quangbh","display0":"display0","display1":"display1","display2":"displayso 3","display3":"display3","display4":"display4","display5":"display5","gameId":"1","channel":"channel","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+
+         */
+
+        public IActionResult usersUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income companyGetList :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string id = Convert.ToString(userObj["id"]);
+
+                string userName = Convert.ToString(userObj["userName"]);
+                string pasword = ResfullApi.Models.CustomEncryption.Encrypt(Convert.ToString(userObj["pasword"]));
+                string role = Convert.ToString(userObj["role"]);
+                string contryCode = Convert.ToString(userObj["contryCode"]);
+                string isLock = Convert.ToString(userObj["isLock"]);
+                string timeLock = Convert.ToString(userObj["timeLock"]);
+                string totalFalse = Convert.ToString(userObj["totalFalse"]);
+                string note = Convert.ToString(userObj["note"]);
+
+
+                string type = Convert.ToString(userObj["type"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+              
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(type)) type = "0";
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.usersUpdate(id, userName, pasword, role, contryCode, isLock, totalFalse, timeLock, note, users, type);
+                logger.Info("Call database comInsert success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        //{"id":"1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult ngamGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceGetList :" + sendData.ToString());
+            ngamObjList response = new ngamObjList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+                string serviceAddId = Convert.ToString(userObj["serviceAddId"]);
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(serviceAddId)) serviceAddId = "-1";
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+
+                
+
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.ngamGetList(id, users);
+                //DataSet ds_regist = balanceDataAccess.ngamGetList(serviceAddId, users);
+                
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+
+
+
+                    response.list = new ngamObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        ngamObj _obj = new ngamObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.name = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        _obj.serviceId = ds_regist.Tables[0].Rows[j]["SV"].ToString();
+                        _obj.message = ds_regist.Tables[0].Rows[j]["MSG"].ToString();
+                        _obj.fromDate = ds_regist.Tables[0].Rows[j]["FD"].ToString();
+                        _obj.toDate = ds_regist.Tables[0].Rows[j]["TD"].ToString();
+
+
+                        _obj.percent = ds_regist.Tables[0].Rows[j]["PC"].ToString();
+                        _obj.addType = ds_regist.Tables[0].Rows[j]["ADD_TYPE"].ToString();
+                        _obj.sysdate = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        /*
+        {"code":"124","values":"Cty Viettech 1","note":"0","status":"1","codeGroup":"quangbh","display0":"display0","display1":"display1","display2":"display2","display3":"display3","display4":"display4","display5":"display5","gameId":"1","channel":"channel","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+        public IActionResult ngamInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string name = Convert.ToString(userObj["name"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                string serviceAddId = Convert.ToString(userObj["serviceAddId"]);
+                string message = Convert.ToString(userObj["message"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+                string percent = Convert.ToString(userObj["percent"]);
+                string addType = Convert.ToString(userObj["addType"]);
+
+
+
+                string users = Convert.ToString(userObj["users"]);
+                
+
+                if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+                if (string.IsNullOrEmpty(serviceAddId)) serviceAddId = "-1";
+                
+                if (string.IsNullOrEmpty(message)) message = "0";
+
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                //DataSet ds_regist = balanceDataAccess.ngamInsert(name, serviceId, message, fromDate, toDate, percent, addType, users);
+                DataSet ds_regist = balanceDataAccess.ngamInsert(name, serviceAddId, message, fromDate, toDate, percent, addType, users);
+                
+                logger.Info("Call database balInsert success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        /*
+       {"id":"1","code":"124","values":"Cty Viettech 1","note":"0","status":"1","codeGroup":"quangbh","display0":"display0","display1":"display1","display2":"displayso 3","display3":"display3","display4":"display4","display5":"display5","gameId":"1","channel":"channel","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+
+         */
+
+        public IActionResult gamUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income companyGetList :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string id = Convert.ToString(userObj["id"]);
+
+                string name = Convert.ToString(userObj["name"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                string serviceAddId = Convert.ToString(userObj["serviceAddId"]);
+                string message = Convert.ToString(userObj["message"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+                string percent = Convert.ToString(userObj["percent"]);
+                string addType = Convert.ToString(userObj["addType"]);
+                string sysdate = Convert.ToString(userObj["sysdate"]);
+
+
+                string type = Convert.ToString(userObj["type"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+                
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(serviceAddId)) serviceAddId = "-1";
+                if (string.IsNullOrEmpty(type)) type = "0";
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+                
+                //DataSet ds_regist = balanceDataAccess.ngamUpdate(id, name, serviceId, message, fromDate, toDate, percent, addType, users, type);
+                DataSet ds_regist = balanceDataAccess.ngamUpdate(id, name, serviceAddId, message, fromDate, toDate, percent, addType, users, type);
+                logger.Info("Call database comInsert success:");
+                
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+        //{"id":"1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult blacklistGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income blacklistGetList :" + sendData.ToString());
+            blackListGetListArr response = new blackListGetListArr();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+
+                string msisdn = Convert.ToString(userObj["msisdn"]);
+                string type = Convert.ToString(userObj["type"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                string campaignId = Convert.ToString(userObj["campaignId"]);
+                string users = Convert.ToString(userObj["users"]);
+
+
+               
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+                if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                //DataSet ds_regist = balanceDataAccess.blackGettList(msisdn, type, serviceId, users);
+                DataSet ds_regist = balanceDataAccess.blackGettList(msisdn, type, campaignId, users);
+                logger.Info("Call database blackGettList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+
+
+
+                    response.list = new blackListGetList[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        blackListGetList _obj = new blackListGetList();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.msisdn = ds_regist.Tables[0].Rows[j]["msisdn"].ToString();
+                        _obj.type = ds_regist.Tables[0].Rows[j]["type"].ToString();
+                        //_obj.serviceId = ds_regist.Tables[0].Rows[j]["SV_ID"].ToString();
+                        _obj.campaignId = ds_regist.Tables[0].Rows[j]["SV_ID"].ToString();
+                        _obj.sysdate = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        _obj.users = ds_regist.Tables[0].Rows[j]["USERS"].ToString();
+                        _obj.campaignName = ds_regist.Tables[0].Rows[j]["campaign_name"].ToString();
+
+                       
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+        //Import data vao Export
+        //--;
+
+        [HttpPost]
+        public IActionResult blacklistInsertData([FromBody] dynamic sendData)
+        {
+
+
+
+
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI blacklistInsertData: " + sendData.ToString());
+
+
+            var userObj = JObject.Parse(sendData.ToString());
+
+        
+
+            blackImportDataList _data = JsonConvert.DeserializeObject<blackImportDataList>(sendData.ToString());
+            if (string.IsNullOrEmpty(_data.type)) _data.type = "-1";
+            if (string.IsNullOrEmpty(_data.serviceId)) _data.serviceId = "-1";
+            if (string.IsNullOrEmpty(_data.campaignId)) _data.campaignId = "-1";
+            if (string.IsNullOrEmpty(_data.users)) _data.users = "-1";
+
+
+            
+
+
+            try
+            {
+                //Check key for authencation
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+                List<List<string>> DataColumms = new List<List<string>>();
+                var LIST_MSISDN = new List<string>();
+                var LIST_TYPE = new List<string>();
+                var LIST_SVID = new List<string>();
+                var LIST_ACTION = new List<string>();
+                var LIST_USERS = new List<string>();
+
+
+                foreach (blackListObj eachData in _data.data)
+                {
+
+                    LIST_TYPE.Add(_data.type);
+                    //LIST_SVID.Add(_data.serviceId);
+                    LIST_SVID.Add(_data.campaignId);
+                    LIST_USERS.Add(_data.users);
+
+                    LIST_MSISDN.Add(eachData.msisdn);
+                    LIST_ACTION.Add(eachData.action);
+
+
+
+                }
+                DataColumms.Add(LIST_MSISDN);
+                DataColumms.Add(LIST_TYPE);
+                DataColumms.Add(LIST_SVID);
+                DataColumms.Add(LIST_ACTION);
+                DataColumms.Add(LIST_USERS);
+
+
+
+
+
+
+                balanceDataAccess.InsertBulkBlackList("BALANCE_PKG.BLACK_INSERT", DataColumms);
+
+                logger.Info("Call database export_created success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+        public IActionResult reload([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income reload :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string type = Convert.ToString(userObj["type"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+              
+
+                if (string.IsNullOrEmpty(type)) type = "-1";
+
+
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.reload(type, users);
+                logger.Info("Call database reload success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+        //Khong dung ham hany
+        [HttpPost]
+        public IActionResult reportByCampaign_kodung([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income reportByCampaign :" + sendData.ToString());
+            reportByCampaignList response = new reportByCampaignList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string status = Convert.ToString(userObj["status"]);
+                
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+                if (string.IsNullOrEmpty(status)) status = "-1";
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+               
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.reportByCampaign( users, status, fromDate, toDate);
+                logger.Info("Call database reportByCampaign success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                  
+
+
+                    response.list = new reportByCampaign[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        reportByCampaign _obj = new reportByCampaign();
+
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["SEQ"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["CAM_CODE"].ToString();
+                        _obj.name = ds_regist.Tables[0].Rows[j]["CAM_NAME"].ToString();
+                        _obj.priority = ds_regist.Tables[0].Rows[j]["CAM_PRIORITY"].ToString();
+
+                        _obj.ruleAdd = ds_regist.Tables[0].Rows[j]["CAM_RULE_ADD"].ToString();
+                        _obj.addType = ds_regist.Tables[0].Rows[j]["CAM_ADD_TYPE"].ToString();
+
+                        _obj.createDate = ds_regist.Tables[0].Rows[j]["CAM_DATE_CREATED"].ToString();
+                        _obj.fromDate = ds_regist.Tables[0].Rows[j]["CAM_FROM_DATE"].ToString();
+                        _obj.toDate = ds_regist.Tables[0].Rows[j]["CAM_TO_DATE"].ToString();
+                        _obj.status = ds_regist.Tables[0].Rows[j]["CAM_STATUS"].ToString();
+                        _obj.serviceCode = ds_regist.Tables[0].Rows[j]["S_CODE"].ToString();
+                        _obj.serviceName = ds_regist.Tables[0].Rows[j]["S_NAME"].ToString();
+
+                        _obj.totalView = ds_regist.Tables[0].Rows[j]["TOTAL_VIEW"].ToString();
+                        _obj.activation = ds_regist.Tables[0].Rows[j]["ACTIVATION"].ToString();
+                        _obj.success = ds_regist.Tables[0].Rows[j]["REGIST_SUCCESS"].ToString();
+                        _obj.fail = ds_regist.Tables[0].Rows[j]["REGIST_FAIL"].ToString();
+
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult calendarGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income calendarGetList :" + sendData.ToString());
+            campaignCalebdarResponse response = new campaignCalebdarResponse();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string status = Convert.ToString(userObj["status"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+              
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(status)) status = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DateTime startDate=new DateTime();
+                DateTime endDate=new DateTime(); 
+
+              
+                try
+                {
+                    startDate = DateTime.ParseExact(fromDate, "dd/MM/yyyy", null);
+                    endDate = DateTime.ParseExact(toDate, "dd/MM/yyyy", null);
+                }
+                catch (Exception ex)
+                {
+                    logger.Info("exception convert date: " + ex.ToString());
+                    response.responseCode = "-2";
+                    response.responseMessage = "System upgrade";
+                }
+                TimeSpan ts = endDate - startDate;
+
+                int totalDay = ((int)ts.TotalDays);
+                List<campaignCalebdarObj> _listCalendar=new List<campaignCalebdarObj>();
+                for(int i=0;i<totalDay;i++)
+                {
+                    string now = startDate.AddDays(i).ToString("dd/MM/yyyy");
+                   
+                    List<campaignObj> _listCam = getListCommon.getListCamCalendar(users, now, now,status);
+                    campaignCalebdarObj _objCalendar = new campaignCalebdarObj();
+                    _objCalendar.date = now;
+                    _objCalendar.list = _listCam;
+                    _listCalendar.Add(_objCalendar);
+
+                }    
+
+          
+
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+
+                response.list = _listCalendar;
+
+
+
+
+
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+        [HttpPost]
+        public IActionResult reportByCampaign([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income reportByCampaign :" + sendData.ToString());
+            reportTotalByCampaignList response = new reportTotalByCampaignList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string status = Convert.ToString(userObj["status"]);
+                string isDefault = Convert.ToString(userObj["isDefault"]);
+
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+                if (string.IsNullOrEmpty(status)) status = "-1";
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(isDefault)) isDefault = "-1";
+
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.reportTotalByCampaign(users, fromDate, toDate, status,isDefault);
+                logger.Info("Call database reportTotalByCampaign success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    List<reportTotalByCampaign> _l = new List<reportTotalByCampaign>();
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        reportTotalByCampaign _obj = new reportTotalByCampaign();
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["SEQ"].ToString();
+                        _obj.campaignId = ds_regist.Tables[0].Rows[j]["CAMPAIGN_ID"].ToString();
+                        _obj.campaignName = ds_regist.Tables[0].Rows[j]["CAMPAIGN_NAME"].ToString();
+                        _obj.priority = ds_regist.Tables[0].Rows[j]["PRIORITY"].ToString();
+
+                        _obj.campaignType = ds_regist.Tables[0].Rows[j]["CAMPAIGN_TYPE"].ToString();
+                        _obj.serviceType = ds_regist.Tables[0].Rows[j]["SERVICE_TYPE"].ToString();
+
+                        _obj.serviceName = ds_regist.Tables[0].Rows[j]["SERVICE_NAME"].ToString();
+                        _obj.totalView1 = ds_regist.Tables[0].Rows[j]["VIEW1"].ToString();
+                        _obj.activation1 = ds_regist.Tables[0].Rows[j]["ACTIVATION1"].ToString();
+                        _obj.totalView2 = ds_regist.Tables[0].Rows[j]["VIEW2"].ToString();
+                        _obj.activation2 = ds_regist.Tables[0].Rows[j]["ACTIVATION2"].ToString();
+                        _obj.success = ds_regist.Tables[0].Rows[j]["TOTAL_SUCCESS"].ToString();
+
+                        _obj.fail = ds_regist.Tables[0].Rows[j]["TOTAL_FALISE"].ToString();
+                        
+                        _l.Add( _obj );
+                    }
+                    response.list = _l;
+
+
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        [HttpPost]
+        public IActionResult reportTotalGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income reportTotalGetList :" + sendData.ToString());
+            campaignCalebdarResponse response = new campaignCalebdarResponse();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string status = Convert.ToString(userObj["status"]);
+                string isDefault = Convert.ToString(userObj["isDefault"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+
+
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(status)) status = "-1";
+                if (string.IsNullOrEmpty(isDefault)) status = "-1";
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DateTime startDate = new DateTime();
+                DateTime endDate = new DateTime();
+
+
+                try
+                {
+                    startDate = DateTime.ParseExact(fromDate, "dd/MM/yyyy", null);
+                    endDate = DateTime.ParseExact(toDate, "dd/MM/yyyy", null);
+                }
+                catch (Exception ex)
+                {
+                    logger.Info("exception convert date: " + ex.ToString());
+                    response.responseCode = "-2";
+                    response.responseMessage = "System upgrade";
+                }
+                TimeSpan ts = endDate - startDate;
+
+                int totalDay = ((int)ts.TotalDays);
+                List<campaignCalebdarObj> _listCalendar = new List<campaignCalebdarObj>();
+                for (int i = 0; i < totalDay; i++)
+                {
+                    string now = startDate.AddDays(i).ToString("dd/MM/yyyy");
+
+                    List<campaignObj> _listCam = getListCommon.getListCamCalendar(users, now, now, status);
+                    campaignCalebdarObj _objCalendar = new campaignCalebdarObj();
+                    _objCalendar.date = now;
+                    _objCalendar.list = _listCam;
+                    _listCalendar.Add(_objCalendar);
+
+                }
+
+
+
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+
+                response.list = _listCalendar;
+
+
+
+
+
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+    }
+}

+ 5093 - 0
ApiWeb/ApiProcessToken/Controllers/balancebk.cs

@@ -0,0 +1,5093 @@
+//using System;
+//using System.Collections.Generic;
+//using System.Data;
+//using System.Linq;
+//using System.Threading.Tasks;
+//using ApiProcess.Models.balance;
+
+//using CommonObj.common;
+//using CommonObj.model;
+//using Microsoft.AspNetCore.Http;
+//using Microsoft.AspNetCore.Mvc;
+//using Microsoft.Extensions.Caching.Memory;
+//using Newtonsoft.Json;
+//using Newtonsoft.Json.Linq;
+//using ResfullApi.Models;
+//using ResfullApi.Models.balance;
+
+//namespace ApiProcess.Controllers
+//{
+//    [Route("api/[controller]/[action]/data")]
+//    [ApiController]
+//    public class balancebk : ControllerBase
+//    {
+        
+
+//        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(dating));
+
+//        private IMemoryCache memoryCache;
+//        public balancebk(IMemoryCache memoryCache)
+//        {
+//            this.memoryCache = memoryCache;
+//        }
+
+
+
+//        // {"users":"123","pass":"123"}
+//        [HttpPost]
+//        public IActionResult usersAdminLogin([FromBody] dynamic sendData)
+//        {
+//            ////log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+//            ////log4net.Config.XmlConfigurator.Configure();
+//            ///
+//            logger.Info("New request income admin Login :" + sendData.ToString());
+//            responseObjLogin response = new responseObjLogin();
+//            response.status = "-1";
+//            response.message = "Err unknow";
+//            try
+//            {
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string users = Convert.ToString(userObj["users"]);
+//                string pass = Convert.ToString(userObj["pass"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "0";
+
+//                if (string.IsNullOrEmpty(users)) users = "1";
+//                if (string.IsNullOrEmpty(pass)) pass = "-1";
+//                if (string.IsNullOrEmpty(channel)) channel = "-1";
+
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass"); var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.status = "-2";
+//                        response.message = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+
+//                if (users == "-1" || pass == "-1" || channel == "-1")
+//                {
+//                    logger.Info("Authen false");
+//                    response.status = "35";
+//                    response.message = CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.status, "");// "Check Authen false";
+//                    return Ok(response);
+//                }
+
+
+
+
+
+//                DataSet ds_regist = balanceDataAccess.ADMIN_USERS_INFO(users, ResfullApi.Models.CustomEncryption.Encrypt(pass));
+//                logger.Info("Call database ADMIN_USERS_INFO success:");
+
+//                if (ds_regist == null || ds_regist.Tables[0].Rows.Count == 0)
+//                {
+//                    response.status = "1";
+//                    response.message = "Login false";
+//                    response.role = "";
+//                    response.token = "";
+//                    return Ok(response);
+//                }
+//                else
+//                {
+//                    string status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+//                    if (status == "0")
+//                    {
+//                        //Tiep tuc lay danh sach chu nang cua Role
+//                        DataSet ds = balanceDataAccess.ADMIN_USERS_FUNCTION(ds_regist.Tables[0].Rows[0]["role"].ToString());
+//                        if (ds == null || ds.Tables[0].Rows.Count > 0)
+//                        {
+//                            response.function = new adminFunctionObj[ds.Tables[0].Rows.Count];
+//                            for (int j = 0; j < ds.Tables[0].Rows.Count; j++)
+//                            {
+//                                adminFunctionObj _obj = new adminFunctionObj();
+//                                _obj.id = ds.Tables[0].Rows[j]["id"].ToString();
+//                                _obj.role = ds.Tables[0].Rows[j]["ROLE"].ToString();
+//                                _obj.name = ds.Tables[0].Rows[j]["NAME"].ToString();
+//                                _obj.link = ds.Tables[0].Rows[j]["LINK"].ToString();
+//                                _obj.note = ds.Tables[0].Rows[j]["NOTE"].ToString();
+//                                response.function[j] = _obj;
+//                            }
+//                        }
+
+
+//                        tokenObj _token = CommonFunction.createToken(_redis, users, pass, channel, "LOGIN_ADMIN", "", ds_regist.Tables[0].Rows[0]["role"].ToString());
+//                        response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+//                        response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+//                        response.role = ds_regist.Tables[0].Rows[0]["role"].ToString();
+//                        response.token = _token.token;
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+//                        response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+//                        response.role = ds_regist.Tables[0].Rows[0]["role"].ToString();
+//                        response.token = "";
+//                        return Ok(response);
+//                    }
+
+
+//                }
+
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+
+//                logger.Info("Err:" + ex.ToString());
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+//        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//        [HttpPost]
+//        public IActionResult companyGetList([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income companyGetList :" + sendData.ToString());
+//            companyList response = new companyList();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+
+//                string users = Convert.ToString(userObj["users"]);
+//                string id = Convert.ToString(userObj["id"]);
+               
+
+              
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+               
+
+//                string name = Convert.ToString(userObj["name"]);
+//                string code = Convert.ToString(userObj["code"]);
+//                string fromDate = Convert.ToString(userObj["fromDate"]);
+//                string toDate = Convert.ToString(userObj["toDate"]);
+
+//                string order = Convert.ToString(userObj["order"]);
+//                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+//                string seqPage = Convert.ToString(userObj["seqPage"]);
+//                if (string.IsNullOrEmpty(name)) name = "-1";
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+//                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+//                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+//                if (string.IsNullOrEmpty(order)) order = "asc";
+//                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+//                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+//                /*
+//                if (string.IsNullOrEmpty(requestId)) requestId = "";
+//                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+//                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+//                if (string.IsNullOrEmpty(token)) token = "";
+//                */
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+
+
+
+//                DataSet ds_regist = balanceDataAccess.comGetList(id,users, name, code, fromDate, toDate, order, rowsOnPage, seqPage);
+//                logger.Info("Call database comGetList success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+
+//                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+//                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+//                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+
+//                    response.list = new company[ds_regist.Tables[0].Rows.Count];
+//                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+//                    {
+//                        company _obj = new company();
+
+//                        _obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+//                        _obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+//                        _obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+//                        _obj.phone = ds_regist.Tables[0].Rows[j]["phone"].ToString();
+//                        _obj.email = ds_regist.Tables[0].Rows[j]["EMAIL"].ToString();
+//                        _obj.address = ds_regist.Tables[0].Rows[j]["ADDRESS"].ToString();
+//                        _obj.desciption = ds_regist.Tables[0].Rows[j]["DESCRIPTION"].ToString();
+//                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+//                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+//                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+//                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+//                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+
+//                        response.list[j] = _obj;
+//                    }
+
+//                }
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+              
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+//        /*
+//         {"code":"124","phone":"0961423229","name":"Cty Viettech 1","email":"quangbh@gmail.com","description":"Mo ta","note":"note 1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="} 
+         
+//         */
+
+//        public IActionResult companyInsert([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income companyInsert :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string code = Convert.ToString(userObj["code"]);
+//                string name = Convert.ToString(userObj["name"]);
+//                string phone = Convert.ToString(userObj["phone"]);
+//                string email = Convert.ToString(userObj["email"]);
+//                string address = Convert.ToString(userObj["address"]);
+//                string description = Convert.ToString(userObj["description"]);
+//                string note = Convert.ToString(userObj["note"]);
+
+
+//                string users = Convert.ToString(userObj["users"]);
+                
+
+                
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+//               if (string.IsNullOrEmpty(name)) name = "-1";
+//                if (string.IsNullOrEmpty(phone)) phone = "-1";
+//                if (string.IsNullOrEmpty(email)) email = "-1";
+//                if (string.IsNullOrEmpty(address)) address = "-1";
+//                if (string.IsNullOrEmpty(description)) description = "-1";
+//                if (string.IsNullOrEmpty(note)) note = "-1";
+
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+//                /*
+//                if (string.IsNullOrEmpty(requestId)) requestId = "";
+//                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+//                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+//                if (string.IsNullOrEmpty(token)) token = "";
+//                */
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+
+
+//                DataSet ds_regist = balanceDataAccess.comInsert(code,name,phone,email,address,description,note,users);
+//                logger.Info("Call database comInsert success:");
+
+
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+//        /*
+//         {"id":"2","code":"124","phone":"0961423229","name":"Cty Viettech New","email":"quangbh@gmail.com","description":"Mo ta","note":"note 1","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+
+
+//         */
+
+//        public IActionResult companyUpdate([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income companyUpdate :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string id = Convert.ToString(userObj["id"]);
+//                string code = Convert.ToString(userObj["code"]);
+//                string name = Convert.ToString(userObj["name"]);
+//                string phone = Convert.ToString(userObj["phone"]);
+//                string email = Convert.ToString(userObj["email"]);
+//                string address = Convert.ToString(userObj["address"]);
+//                string description = Convert.ToString(userObj["description"]);
+//                string note = Convert.ToString(userObj["note"]);
+
+//                string type = Convert.ToString(userObj["type"]);
+
+
+//                string users = Convert.ToString(userObj["users"]);
+
+
+              
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+//                if (string.IsNullOrEmpty(name)) name = "-1";
+//                if (string.IsNullOrEmpty(phone)) phone = "-1";
+//                if (string.IsNullOrEmpty(email)) email = "-1";
+//                if (string.IsNullOrEmpty(address)) address = "-1";
+//                if (string.IsNullOrEmpty(description)) description = "-1";
+//                if (string.IsNullOrEmpty(note)) note = "-1";
+//                if (string.IsNullOrEmpty(type)) type = "-1";
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+//                /*
+//                if (string.IsNullOrEmpty(requestId)) requestId = "";
+//                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+//                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+//                if (string.IsNullOrEmpty(token)) token = "";
+//                */
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+
+
+//                DataSet ds_regist = balanceDataAccess.comUpdate(id,code, name, phone, email, address, description, note, users,type);
+//                logger.Info("Call database comInsert success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+
+
+       
+//        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//        [HttpPost]
+//        public IActionResult balanceGetList([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceGetList :" + sendData.ToString());
+//            balanceList response = new balanceList();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+
+//                string users = Convert.ToString(userObj["users"]);
+//                string id = Convert.ToString(userObj["id"]);
+                
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+                
+
+
+//                string name = Convert.ToString(userObj["name"]);
+//                string code = Convert.ToString(userObj["code"]);
+//                string fromDate = Convert.ToString(userObj["fromDate"]);
+//                string toDate = Convert.ToString(userObj["toDate"]);
+
+//                string isActive = Convert.ToString(userObj["isActive"]);
+//                if (string.IsNullOrEmpty(isActive)) isActive = "-1";
+
+//                string order = Convert.ToString(userObj["order"]);
+//                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+//                string seqPage = Convert.ToString(userObj["seqPage"]);
+//                if (string.IsNullOrEmpty(name)) name = "-1";
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+//                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+//                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+//                if (string.IsNullOrEmpty(order)) order = "asc";
+//                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+//                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+//                /*
+//                if (string.IsNullOrEmpty(requestId)) requestId = "";
+//                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+//                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+//                if (string.IsNullOrEmpty(token)) token = "";
+//                */
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.balGetList(id, users,name,code,fromDate,toDate,order,rowsOnPage,seqPage,isActive);
+                
+//                logger.Info("Call database balGetList success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+
+
+
+//                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+//                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+//                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+//                    response.list = new balanceObj[ds_regist.Tables[0].Rows.Count];
+//                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+//                    {
+//                        balanceObj _obj = new balanceObj();
+
+//                        _obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+//                        _obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+//                        _obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+//                        _obj.min = ds_regist.Tables[0].Rows[j]["v_min"].ToString();
+//                        _obj.max = ds_regist.Tables[0].Rows[j]["v_max"].ToString();
+                        
+//                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+//                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+//                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+//                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+//                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+
+                       
+
+
+
+//                        response.list[j] = _obj;
+//                    }
+
+//                }
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+//        /*
+//        {"code":"124","name":"Cty Viettech 1","min":"0","max":"5","note":"note 1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//         */
+
+//        public IActionResult balanceInsert([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceInsert :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string code = Convert.ToString(userObj["code"]);
+//                string name = Convert.ToString(userObj["name"]);
+//                string min = Convert.ToString(userObj["min"]);
+//                string max = Convert.ToString(userObj["max"]);
+                
+//                string note = Convert.ToString(userObj["note"]);
+
+
+//                string users = Convert.ToString(userObj["users"]);
+
+
+               
+
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+//                if (string.IsNullOrEmpty(name)) name = "-1";
+//                if (string.IsNullOrEmpty(min)) min = "-1";
+//                if (string.IsNullOrEmpty(max)) max = "-1";
+             
+//                if (string.IsNullOrEmpty(note)) note = "-1";
+
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+                
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+               
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.balInsert(code, name, min, max, note, users);
+//                logger.Info("Call database balInsert success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+//        /*
+//         {"id":"3","code":"124","name":"Goi thu 1","min":"6","max":"10","note":"note 1","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+
+//         */
+
+//        public IActionResult balanceUpdate([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceUpdate :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string id = Convert.ToString(userObj["id"]);
+//                string code = Convert.ToString(userObj["code"]);
+//                string name = Convert.ToString(userObj["name"]);
+//                string min = Convert.ToString(userObj["min"]);
+//                string max = Convert.ToString(userObj["max"]);
+               
+//                string note = Convert.ToString(userObj["note"]);
+
+//                string type = Convert.ToString(userObj["type"]);
+
+
+//                string users = Convert.ToString(userObj["users"]);
+
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+//                if (string.IsNullOrEmpty(name)) name = "-1";
+//                if (string.IsNullOrEmpty(min)) min = "-1";
+//                if (string.IsNullOrEmpty(max)) max = "-1";
+               
+//                if (string.IsNullOrEmpty(note)) note = "-1";
+//                if (string.IsNullOrEmpty(type)) type = "-1";
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+                
+                
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.balUpdate(id, code, name, min, max, note, users, type);
+//                logger.Info("Call database balUpdate success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+
+
+//        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//        [HttpPost]
+//        public IActionResult expGetList([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceGetList :" + sendData.ToString());
+//            expireDateList response = new expireDateList();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+
+//                string users = Convert.ToString(userObj["users"]);
+//                string id = Convert.ToString(userObj["id"]);
+                
+
+//                string name = Convert.ToString(userObj["name"]);
+//                string code = Convert.ToString(userObj["code"]);
+//                string fromDate = Convert.ToString(userObj["fromDate"]);
+//                string toDate = Convert.ToString(userObj["toDate"]);
+
+//                string order = Convert.ToString(userObj["order"]);
+//                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+//                string seqPage = Convert.ToString(userObj["seqPage"]);
+//                if (string.IsNullOrEmpty(name)) name = "-1";
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+//                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+//                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+//                if (string.IsNullOrEmpty(order)) order = "asc";
+//                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+//                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+
+
+                
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.expGetList(id, users, name, code, fromDate, toDate, order, rowsOnPage, seqPage);
+//                logger.Info("Call database balGetList success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+
+//                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+//                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+//                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+
+//                    response.list = new expireDate[ds_regist.Tables[0].Rows.Count];
+//                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+//                    {
+//                        expireDate _obj = new expireDate();
+
+//                        _obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+//                        _obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+//                        _obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+//                        _obj.totalDay = ds_regist.Tables[0].Rows[j]["TOTAL_DAY_USE"].ToString();
+
+//                        _obj.min = ds_regist.Tables[0].Rows[j]["V_MIN"].ToString();
+//                        _obj.max = ds_regist.Tables[0].Rows[j]["V_MAX"].ToString();
+
+//                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+//                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+//                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+//                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+//                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+
+//                        response.list[j] = _obj;
+//                    }
+
+//                }
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+//        /*
+//        {"code":"124","name":"Cty Viettech 1","totalDay":"0","note":"note 1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//         */
+//        public IActionResult expInsert([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceInsert :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string code = Convert.ToString(userObj["code"]);
+//                string name = Convert.ToString(userObj["name"]);
+//                string totalDay = Convert.ToString(userObj["totalDay"]);
+//                string min = Convert.ToString(userObj["min"]);
+//                string max = Convert.ToString(userObj["max"]);
+
+
+//                string note = Convert.ToString(userObj["note"]);
+
+
+//                string users = Convert.ToString(userObj["users"]);
+
+
+
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+//                if (string.IsNullOrEmpty(name)) name = "-1";
+
+//                if (string.IsNullOrEmpty(min)) min = "0";
+//                if (string.IsNullOrEmpty(max)) max = "100000";
+
+//                if (string.IsNullOrEmpty(totalDay)) totalDay = "-1";
+                
+
+//                if (string.IsNullOrEmpty(note)) note = "-1";
+
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+
+//                DataSet ds_regist = balanceDataAccess.expInsert(code, name, totalDay, note, users,min,max);
+//                logger.Info("Call database balInsert success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+//        /*
+//        {"id":"2","code":"124","name":"Gkaka","totalDay":"6","note":"note 1","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+
+//         */
+
+//        public IActionResult expUpdate([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income companyGetList :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string id = Convert.ToString(userObj["id"]);
+//                string code = Convert.ToString(userObj["code"]);
+//                string name = Convert.ToString(userObj["name"]);
+//                string totalDay = Convert.ToString(userObj["totalDay"]);
+
+//                string min = Convert.ToString(userObj["min"]);
+//                string max = Convert.ToString(userObj["max"]);
+
+
+//                string note = Convert.ToString(userObj["note"]);
+
+//                string type = Convert.ToString(userObj["type"]);
+
+
+//                string users = Convert.ToString(userObj["users"]);
+
+
+              
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+//                if (string.IsNullOrEmpty(name)) name = "-1";
+//                if (string.IsNullOrEmpty(totalDay)) totalDay = "-1";
+//                if (string.IsNullOrEmpty(min)) min = "0";
+//                if (string.IsNullOrEmpty(max)) max = "100000";
+
+
+//                if (string.IsNullOrEmpty(note)) note = "-1";
+//                if (string.IsNullOrEmpty(type)) type = "-1";
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+
+//                DataSet ds_regist = balanceDataAccess.expUpdate(id, code, name, totalDay, note, users, type, min, max);
+//                logger.Info("Call database comInsert success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+
+
+//        //{"id":"1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//        [HttpPost]
+//        public IActionResult paramGetList([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceGetList :" + sendData.ToString());
+//            ApiProcess.Models.balance.paramObjList response = new ApiProcess.Models.balance.paramObjList();
+//            response.responseCode  = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+
+//                string users = Convert.ToString(userObj["users"]);
+//                string id = Convert.ToString(userObj["id"]);
+               
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+
+//                DataSet ds_regist = balanceDataAccess.paramGetList(id, users);
+//                logger.Info("Call database balGetList success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+
+
+
+
+
+//                    response.list = new ApiProcess.Models.balance.paramObj[ds_regist.Tables[0].Rows.Count];
+//                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+//                    {
+//                        ApiProcess.Models.balance.paramObj _obj = new ApiProcess.Models.balance.paramObj();
+
+//                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+//                        _obj.code = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+//                        _obj.values = ds_regist.Tables[0].Rows[j]["SVALUES"].ToString();
+//                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+//                        _obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+//                        _obj.codeGroup = ds_regist.Tables[0].Rows[j]["CODE_GROUP"].ToString();
+
+
+//                        _obj.display0 = ds_regist.Tables[0].Rows[j]["DISPLAY0"].ToString();
+//                        _obj.display1 = ds_regist.Tables[0].Rows[j]["DISPLAY1"].ToString();
+//                        _obj.display2 = ds_regist.Tables[0].Rows[j]["DISPLAY2"].ToString();
+//                        _obj.display3 = ds_regist.Tables[0].Rows[j]["DISPLAY3"].ToString();
+//                        _obj.display4 = ds_regist.Tables[0].Rows[j]["DISPLAY4"].ToString();
+//                        _obj.display5 = ds_regist.Tables[0].Rows[j]["DISPLAY5"].ToString();
+
+//                        _obj.gameId = ds_regist.Tables[0].Rows[j]["GAME_ID"].ToString();
+//                        _obj.channel = ds_regist.Tables[0].Rows[j]["CHANNEL"].ToString();
+
+
+
+//                        response.list[j] = _obj;
+//                    }
+
+//                }
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+//        /*
+//        {"code":"124","values":"Cty Viettech 1","note":"0","status":"1","codeGroup":"quangbh","display0":"display0","display1":"display1","display2":"display2","display3":"display3","display4":"display4","display5":"display5","gameId":"1","channel":"channel","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//         */
+//        public IActionResult paramInsert([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceInsert :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string code = Convert.ToString(userObj["code"]);
+//                string values = Convert.ToString(userObj["values"]);
+//                string note = Convert.ToString(userObj["note"]);
+//                string status = Convert.ToString(userObj["status"]);
+//                string codeGroup = Convert.ToString(userObj["codeGroup"]);
+
+//                string display0 = Convert.ToString(userObj["display0"]);
+//                string display1 = Convert.ToString(userObj["display1"]);
+//                string display2 = Convert.ToString(userObj["display2"]);
+//                string display3 = Convert.ToString(userObj["display3"]);
+//                string display4 = Convert.ToString(userObj["display4"]);
+//                string display5 = Convert.ToString(userObj["display5"]);
+
+//                string gameId = Convert.ToString(userObj["gameId"]);
+//                string channelParam = Convert.ToString(userObj["channelParam"]);
+
+
+//                string users = Convert.ToString(userObj["users"]);
+               
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+//                if (string.IsNullOrEmpty(codeGroup)) codeGroup = "-1";
+                
+
+
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.paramInsert(code,values,note,status,codeGroup,display0,display1,
+//                    display2,display3,display4,display5,gameId, channelParam, users);
+//                logger.Info("Call database balInsert success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+//        /*
+//       {"id":"1","code":"124","values":"Cty Viettech 1","note":"0","status":"1","codeGroup":"quangbh","display0":"display0","display1":"display1","display2":"displayso 3","display3":"display3","display4":"display4","display5":"display5","gameId":"1","channel":"channel","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+
+//         */
+
+//        public IActionResult paramUpdate([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income companyGetList :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string id = Convert.ToString(userObj["id"]);
+
+//                string code = Convert.ToString(userObj["code"]);
+//                string values = Convert.ToString(userObj["values"]);
+//                string note = Convert.ToString(userObj["note"]);
+//                string status = Convert.ToString(userObj["status"]);
+//                string codeGroup = Convert.ToString(userObj["codeGroup"]);
+
+//                string display0 = Convert.ToString(userObj["display0"]);
+//                string display1 = Convert.ToString(userObj["display1"]);
+//                string display2 = Convert.ToString(userObj["display2"]);
+//                string display3 = Convert.ToString(userObj["display3"]);
+//                string display4 = Convert.ToString(userObj["display4"]);
+//                string display5 = Convert.ToString(userObj["display5"]);
+
+//                string gameId = Convert.ToString(userObj["gameId"]);
+//                string channelParam = Convert.ToString(userObj["channelParam"]);
+
+//                string type = Convert.ToString(userObj["type"]);
+
+
+//                string users = Convert.ToString(userObj["users"]);
+
+
+               
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+//                if (string.IsNullOrEmpty(type)) type = "0";
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+
+
+
+
+//                DataSet ds_regist = balanceDataAccess.paramUpdate(id, code, values, note, status, codeGroup, display0, display1,
+//                    display2, display3, display4, display5, gameId, channelParam, users, type);
+//                logger.Info("Call database comInsert success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+
+
+
+//        //{"id":"1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//        [HttpPost]
+//        public IActionResult svGetList([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceGetList :" + sendData.ToString());
+//            serviceObjList response = new serviceObjList();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+
+//                string users = Convert.ToString(userObj["users"]);
+//                string id = Convert.ToString(userObj["id"]);
+             
+
+//                string name = Convert.ToString(userObj["name"]);
+//                string code = Convert.ToString(userObj["code"]);
+//                string fromDate = Convert.ToString(userObj["fromDate"]);
+//                string toDate = Convert.ToString(userObj["toDate"]);
+
+//                string order = Convert.ToString(userObj["order"]);
+//                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+//                string seqPage = Convert.ToString(userObj["seqPage"]);
+//                if (string.IsNullOrEmpty(name)) name = "-1";
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+//                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+//                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+//                if (string.IsNullOrEmpty(order)) order = "asc";
+//                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+//                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+
+
+               
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+
+
+
+
+//                DataSet ds_regist = balanceDataAccess.svGetList(id, users, name, code, fromDate, toDate, order, rowsOnPage, seqPage);
+//                logger.Info("Call database balGetList success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+
+
+//                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+//                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+//                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+//                    response.list = new serviceObj[ds_regist.Tables[0].Rows.Count];
+//                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+//                    {
+//                        serviceObj _obj = new serviceObj();
+
+//                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+//                        _obj.code = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+//                        _obj.name = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+//                        _obj.description = ds_regist.Tables[0].Rows[j]["DESCRIPTION"].ToString();
+//                        _obj.shortCode = ds_regist.Tables[0].Rows[j]["SHORT_CODE"].ToString();
+//                        _obj.command = ds_regist.Tables[0].Rows[j]["COMMAND_REGISTER"].ToString();
+
+
+//                        _obj.contentEn = ds_regist.Tables[0].Rows[j]["CONTENT_EN"].ToString();
+//                        _obj.contentFr = ds_regist.Tables[0].Rows[j]["CONTENT_FR"].ToString();
+//                        _obj.contentLc = ds_regist.Tables[0].Rows[j]["CONTENT_LC"].ToString();
+//                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+//                        _obj.companyId = ds_regist.Tables[0].Rows[j]["COMPANY_ID"].ToString();
+
+//                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+//                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+//                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+//                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+//                        _obj.msgRegisterSuccess = ds_regist.Tables[0].Rows[j]["USSD_MSG_REGISTER_SUC"].ToString();
+//                        _obj.msgRegisterFlase = ds_regist.Tables[0].Rows[j]["USSD_MSG_REGISTER_FAIL"].ToString();
+
+
+//                        response.list[j] = _obj;
+//                    }
+
+//                }
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+//        /*
+//        {"code":"124","name":"Cty Viettech 1","description":"0","shortCode":"12345","command":"ON 123","contentEn":"contentEn","contentFr":"contentFr","contentLc":"contentLc","note":"note","companyId":"1","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//         */
+//        public IActionResult svInsert([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceInsert :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string code = Convert.ToString(userObj["code"]);
+//                string name = Convert.ToString(userObj["name"]);
+//                string description = Convert.ToString(userObj["description"]);
+//                string shortCode = Convert.ToString(userObj["shortCode"]);
+//                string command = Convert.ToString(userObj["command"]);
+
+//                string contentEn = Convert.ToString(userObj["contentEn"]);
+//                string contentFr = Convert.ToString(userObj["contentFr"]);
+//                string contentLc = Convert.ToString(userObj["contentLc"]);
+//                string note = Convert.ToString(userObj["note"]);
+//                string companyId = Convert.ToString(userObj["companyId"]);
+                
+
+//                string users = Convert.ToString(userObj["users"]);
+               
+
+
+//                string msgRegisterSuccess = Convert.ToString(userObj["msgRegisterSuccess"]);
+//                string msgRegisterFlase = Convert.ToString(userObj["msgRegisterFlase"]);
+//                if (string.IsNullOrEmpty(msgRegisterSuccess)) msgRegisterSuccess = "-1";
+//                if (string.IsNullOrEmpty(msgRegisterFlase)) msgRegisterFlase = "-1";
+
+
+
+
+
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+//                if (string.IsNullOrEmpty(companyId)) companyId = "-1";
+
+
+
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+
+//                DataSet ds_regist = balanceDataAccess.svInsert(code, name, description, shortCode, command, contentEn, contentFr,
+//                    contentLc,note, companyId, users, msgRegisterSuccess, msgRegisterFlase);
+//                logger.Info("Call database balInsert success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+//        /*
+//      {"id":"2","code":"124","name":"name1","description":"123","shortCode":"123456","command":"ON 1231","contentEn":"contentEn","contentFr":"contentFr","contentLc":"contentLc","note":"note","companyId":"1","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//         */
+
+//        public IActionResult svUpdate([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income companyGetList :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string id = Convert.ToString(userObj["id"]);
+
+//                string code = Convert.ToString(userObj["code"]);
+//                string name = Convert.ToString(userObj["name"]);
+//                string description = Convert.ToString(userObj["description"]);
+//                string shortCode = Convert.ToString(userObj["shortCode"]);
+//                string command = Convert.ToString(userObj["command"]);
+
+//                string contentEn = Convert.ToString(userObj["contentEn"]);
+//                string contentFr = Convert.ToString(userObj["contentFr"]);
+//                string contentLc = Convert.ToString(userObj["contentLc"]);
+//                string note = Convert.ToString(userObj["note"]);
+//                string companyId = Convert.ToString(userObj["companyId"]);
+
+//                string type = Convert.ToString(userObj["type"]);
+
+
+//                string users = Convert.ToString(userObj["users"]);
+
+
+               
+
+
+//                string msgRegisterSuccess = Convert.ToString(userObj["msgRegisterSuccess"]);
+//                string msgRegisterFlase = Convert.ToString(userObj["msgRegisterFlase"]);
+//                if (string.IsNullOrEmpty(msgRegisterSuccess)) msgRegisterSuccess = "-1";
+//                if (string.IsNullOrEmpty(msgRegisterFlase)) msgRegisterFlase = "-1";
+
+
+
+               
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+//                if (string.IsNullOrEmpty(type)) type = "0";
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.svUpdate(id, code, name, description, shortCode, command, contentEn, contentFr,
+//                    contentLc, note, companyId, users, type, msgRegisterSuccess, msgRegisterFlase);
+//                logger.Info("Call database comInsert success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+//        //************************     HIEN TAI KHONG DU SUNG PHAN SERVICE ADD
+
+//        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//        [HttpPost]
+//        public IActionResult svAddGetList([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceGetList :" + sendData.ToString());
+//            serviceAddObjList response = new serviceAddObjList();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+
+//                string users = Convert.ToString(userObj["users"]);
+//                string id = Convert.ToString(userObj["id"]);
+               
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+               
+
+
+//                string name = Convert.ToString(userObj["name"]);
+//                string code = Convert.ToString(userObj["code"]);
+//                string fromDate = Convert.ToString(userObj["fromDate"]);
+//                string toDate = Convert.ToString(userObj["toDate"]);
+
+//                string order = Convert.ToString(userObj["order"]);
+//                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+//                string seqPage = Convert.ToString(userObj["seqPage"]);
+//                if (string.IsNullOrEmpty(name)) name = "-1";
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+//                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+//                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+//                if (string.IsNullOrEmpty(order)) order = "asc";
+//                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+//                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+
+
+
+//                DataSet ds_regist = balanceDataAccess.svAddGetList(id, users, name, code, fromDate, toDate, order, rowsOnPage, seqPage);
+//                logger.Info("Call database balGetList success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+
+//                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+//                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+//                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+
+//                    response.list = new serviceAddObj[ds_regist.Tables[0].Rows.Count];
+//                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+//                    {
+//                        serviceAddObj _obj = new serviceAddObj();
+
+//                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+//                        _obj.code = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+//                        _obj.name = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+//                        _obj.addType = ds_regist.Tables[0].Rows[j]["ADD_TYPE"].ToString();
+//                        _obj.numberDisplay = ds_regist.Tables[0].Rows[j]["NUMBER_DISPLAY"].ToString();
+//                        _obj.priority = ds_regist.Tables[0].Rows[j]["PRIORITY"].ToString();
+
+
+//                        _obj.serviceId = ds_regist.Tables[0].Rows[j]["SERVICE_ID"].ToString();
+//                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+
+//                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+//                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+//                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+//                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+//                        response.list[j] = _obj;
+//                    }
+
+//                }
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+//        /*
+//       {"code":"124","name":"Cty Viettech 1","addType":"0","shortCode":"12345","numberDisplay":"1","priority":"0","serviceId":"1","note":"note","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//         */
+//        public IActionResult svAddInsert([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceInsert :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string code = Convert.ToString(userObj["code"]);
+//                string name = Convert.ToString(userObj["name"]);
+//                string addType = Convert.ToString(userObj["addType"]);
+//                string numberDisplay = Convert.ToString(userObj["numberDisplay"]);
+//                string priority = Convert.ToString(userObj["priority"]);
+
+//                string serviceId = Convert.ToString(userObj["serviceId"]);
+//                string note = Convert.ToString(userObj["note"]);
+
+
+//                string users = Convert.ToString(userObj["users"]);
+               
+
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+
+
+
+
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.svAddInsert(code, name, addType, numberDisplay, priority, serviceId, note, users);
+//                logger.Info("Call database balInsert success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+        
+
+//        /*
+//      {"id":"2","code":"124","name":"quangbh","addType":"0","shortCode":"12345","numberDisplay":"1","priority":"0","serviceId":"1","note":"note","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//         */
+
+//        public IActionResult svAddUpdate([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income companyGetList :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string id = Convert.ToString(userObj["id"]);
+
+//                string code = Convert.ToString(userObj["code"]);
+//                string name = Convert.ToString(userObj["name"]);
+//                string addType = Convert.ToString(userObj["addType"]);
+//                string numberDisplay = Convert.ToString(userObj["numberDisplay"]);
+//                string priority = Convert.ToString(userObj["priority"]);
+
+//                string serviceId = Convert.ToString(userObj["serviceId"]);
+//                string note = Convert.ToString(userObj["note"]);
+
+//                string type = Convert.ToString(userObj["type"]);
+
+
+//                string users = Convert.ToString(userObj["users"]);
+
+
+               
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+//                if (string.IsNullOrEmpty(type)) type = "0";
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.svAddUpdate(id, code, name, addType, numberDisplay, priority, serviceId, note, users, type);
+//                logger.Info("Call database comInsert success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+//        //************************     KET THUC PHAN KHONG DU SUNG PHAN SERVICE ADD
+
+
+
+//        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//        [HttpPost]
+//        public IActionResult camGetList([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income camGetList :" + sendData.ToString());
+//            campaignObjList response = new campaignObjList();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+
+//                string users = Convert.ToString(userObj["users"]);
+//                string id = Convert.ToString(userObj["id"]);
+               
+
+//                string status = Convert.ToString(userObj["status"]);
+//                string name = Convert.ToString(userObj["name"]);
+//                string code = Convert.ToString(userObj["code"]);
+//                string fromDate = Convert.ToString(userObj["fromDate"]);
+//                string toDate = Convert.ToString(userObj["toDate"]);
+
+//                string order = Convert.ToString(userObj["order"]);
+//                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+//                string seqPage = Convert.ToString(userObj["seqPage"]);
+//                if (string.IsNullOrEmpty(name)) name = "-1";
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+//                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+//                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+//                if (string.IsNullOrEmpty(order)) order = "asc";
+//                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+//                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+//                if (string.IsNullOrEmpty(status)) status = "-1";
+
+
+
+
+
+               
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.camGetList(id, users, name, code, fromDate, toDate, order, rowsOnPage, seqPage, status);
+//                logger.Info("Call database balGetList success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+
+//                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+//                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+//                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+
+//                    response.list = new campaignObj[ds_regist.Tables[0].Rows.Count];
+//                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+//                    {
+//                        campaignObj _obj = new campaignObj();
+
+//                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+//                        _obj.code = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+//                        _obj.name = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+//                        _obj.fromDate = ds_regist.Tables[0].Rows[j]["FROM_DATE"].ToString();
+//                        _obj.toDate = ds_regist.Tables[0].Rows[j]["TO_DATE"].ToString();
+//                        _obj.fromHour = ds_regist.Tables[0].Rows[j]["FROM_HOUR"].ToString();
+
+
+//                        _obj.toHour = ds_regist.Tables[0].Rows[j]["TO_HOUR"].ToString();
+//                        _obj.rule = ds_regist.Tables[0].Rows[j]["RULE_ADD"].ToString();
+
+
+//                        _obj.priority = ds_regist.Tables[0].Rows[j]["PRIORITY"].ToString();
+//                        _obj.balanceId = ds_regist.Tables[0].Rows[j]["BALANCE_ID"].ToString();
+//                        _obj.expireDateId = ds_regist.Tables[0].Rows[j]["EXPIRE_DATE_ID"].ToString();
+//                        _obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+//                        _obj.numberDisplay = ds_regist.Tables[0].Rows[j]["NUMBER_DISPLAY"].ToString();
+//                        _obj.addType = ds_regist.Tables[0].Rows[j]["ADD_TYPE"].ToString();
+
+
+//                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+//                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+//                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+//                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+//                        response.list[j] = _obj;
+//                    }
+
+//                }
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+//        /*
+//       {"code":"124","name":"Cty Viettech 1","fromDate":"01/11/2021 00:00:00","toDate":"01/11/2022 00:00:00","fromHour":"08:08:09","toHour":"01:09:08","rule":"1","priority":"1","balanceId":"1","expireDateId":"1","status":"1","note":"123456","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//         */
+//        public IActionResult camInsert([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceInsert :" + sendData.ToString());
+//            campaignInsert response = new campaignInsert();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string code = Convert.ToString(userObj["code"]);
+//                string name = Convert.ToString(userObj["name"]);
+//                string fromDate = Convert.ToString(userObj["fromDate"]);
+//                string toDate = Convert.ToString(userObj["toDate"]);
+//                string fromHour = Convert.ToString(userObj["fromHour"]);
+
+//                string toHour = Convert.ToString(userObj["toHour"]);
+//                string rule = Convert.ToString(userObj["rule"]);
+//                string priority = Convert.ToString(userObj["priority"]);
+//                string balanceId = Convert.ToString(userObj["balanceId"]);
+//                string expireDateId = Convert.ToString(userObj["expireDateId"]);
+//                string status = Convert.ToString(userObj["status"]);
+//                string note = Convert.ToString(userObj["note"]);
+//                string numberDisplay = Convert.ToString(userObj["numberDisplay"]);
+
+//                string addType = Convert.ToString(userObj["addType"]);
+
+
+//                string users = Convert.ToString(userObj["users"]);
+                
+
+//                if (string.IsNullOrEmpty(code)) code = "-1";
+//                if (string.IsNullOrEmpty(numberDisplay)) numberDisplay = "1";
+//                if (string.IsNullOrEmpty(addType)) addType = "1";
+
+
+
+
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.camInsert(code, name, fromDate, toDate, fromHour, toHour, rule,
+//                    priority, balanceId, expireDateId, status, note, users, numberDisplay, addType);
+//                logger.Info("Call database balInsert success:");
+
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+//                    logger.Info("Call database success ds_regist not null");
+//                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+//                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString();
+//                    response.id= ds_regist.Tables[0].Rows[0]["id"].ToString();
+//                }
+//                else
+//                {
+//                    logger.Info("Call database success ds_regist is null");
+//                    response.responseCode = "-1";
+//                    response.responseMessage = "Err unknow";
+//                }
+
+
+
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+//        /*
+//      {"id":"5","code":"124","name":"Cty  1","fromDate":"01/11/2021 00:00:00","toDate":"01/11/2022 00:00:00","fromHour":"08:08:09","toHour":"01:09:08","rule":"1","priority":"1","balanceId":"1","expireDateId":"1","status":"1","note":"123456","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//         */
+
+//        public IActionResult camUpdate([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income companyGetList :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string id = Convert.ToString(userObj["id"]);
+
+//                string code = Convert.ToString(userObj["code"]);
+//                string name = Convert.ToString(userObj["name"]);
+//                string fromDate = Convert.ToString(userObj["fromDate"]);
+//                string toDate = Convert.ToString(userObj["toDate"]);
+//                string fromHour = Convert.ToString(userObj["fromHour"]);
+
+//                string toHour = Convert.ToString(userObj["toHour"]);
+//                string rule = Convert.ToString(userObj["rule"]);
+//                string priority = Convert.ToString(userObj["priority"]);
+//                string balanceId = Convert.ToString(userObj["balanceId"]);
+//                string expireDateId = Convert.ToString(userObj["expireDateId"]);
+//                string status = Convert.ToString(userObj["status"]);
+//                string note = Convert.ToString(userObj["note"]);
+
+
+//                string type = Convert.ToString(userObj["type"]);
+//                string numberDisplay = Convert.ToString(userObj["numberDisplay"]);
+//                string addType = Convert.ToString(userObj["addType"]);
+//                string users = Convert.ToString(userObj["users"]);
+
+
+                
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+//                if (string.IsNullOrEmpty(type)) type = "0";
+//                if (string.IsNullOrEmpty(numberDisplay)) numberDisplay = "1";
+//                if (string.IsNullOrEmpty(addType)) addType = "1";
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.camUpdate(id, code, name, fromDate, toDate, fromHour, toHour, rule,
+//                    priority, balanceId, expireDateId, status, note, users, type, numberDisplay, addType);
+//                logger.Info("Call database comInsert success:");
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+//                    logger.Info("Call database success ds_regist not null");
+//                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+//                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+//                }
+//                else
+//                {
+//                    logger.Info("Call database success ds_regist is null");
+//                    response.responseCode = "-1";
+//                    response.responseMessage = "Err unknow";
+//                }
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+
+
+//        //{"id":"2","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//        [HttpPost]
+//        public IActionResult camAddGetList([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceGetList :" + sendData.ToString());
+//            campaignAddObjList response = new campaignAddObjList();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+
+//                string users = Convert.ToString(userObj["users"]);
+//                string id = Convert.ToString(userObj["id"]);
+                
+
+//                string campaignId = Convert.ToString(userObj["campaignId"]);
+
+//                string fromDate = Convert.ToString(userObj["fromDate"]);
+//                string toDate = Convert.ToString(userObj["toDate"]);
+
+//                string order = Convert.ToString(userObj["order"]);
+//                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+//                string seqPage = Convert.ToString(userObj["seqPage"]);
+//                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+
+//                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+//                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+//                if (string.IsNullOrEmpty(order)) order = "asc";
+//                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000000";
+//                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+//                string _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+
+
+
+//                DataSet ds_regist = balanceDataAccess.camAddGetList(id, users, campaignId, fromDate, toDate, order, rowsOnPage, seqPage);
+//                logger.Info("Call database balGetList success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+
+
+//                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+//                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+//                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+//                    response.list = new campaignAddObj[ds_regist.Tables[0].Rows.Count];
+//                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+//                    {
+//                        campaignAddObj _obj = new campaignAddObj();
+
+//                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+//                        _obj.campaignId = ds_regist.Tables[0].Rows[j]["CAMPAIGN_ID"].ToString();
+//                        _obj.serviceAddId = ds_regist.Tables[0].Rows[j]["SERVICE_ADD_ID"].ToString();
+//                        _obj.isDelete = ds_regist.Tables[0].Rows[j]["IS_DELETE"].ToString();
+//                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+//                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+//                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+//                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+//                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+//                        _obj.ussdDisplay = ds_regist.Tables[0].Rows[j]["USSD_DISPLAY"].ToString();
+//                        _obj.keyRegister = ds_regist.Tables[0].Rows[j]["KEY_REGISTER"].ToString();
+
+
+
+
+
+//                        response.list[j] = _obj;
+//                    }
+
+//                }
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+//        /*
+//       {"code":"124","name":"Cty Viettech 1","fromDate":"01/11/2021 00:00:00","toDate":"01/11/2022 00:00:00","fromHour":"08:08:09","toHour":"01:09:08","rule":"1","priority":"1","balanceId":"1","expireDateId":"1","status":"1","note":"123456","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//         */
+//        public IActionResult camAddInsert([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceInsert :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string campaignId = Convert.ToString(userObj["campaignId"]);
+//                string serviceAddId = Convert.ToString(userObj["serviceAddId"]);
+//                string note = Convert.ToString(userObj["note"]);
+
+
+
+
+//                string users = Convert.ToString(userObj["users"]);
+                
+//                string ussdDisplay = Convert.ToString(userObj["ussdDisplay"]);
+//                string keyRegister = Convert.ToString(userObj["keyRegister"]);
+
+
+
+               
+
+//                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+//                if (string.IsNullOrEmpty(serviceAddId)) serviceAddId = "-1";
+//                if (string.IsNullOrEmpty(ussdDisplay)) ussdDisplay = "-1";
+//                if (string.IsNullOrEmpty(keyRegister)) keyRegister = "-1";
+
+
+
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+
+
+
+
+
+//                DataSet ds_regist = balanceDataAccess.camAddInsert(campaignId, serviceAddId, note, users,
+//                    ussdDisplay, keyRegister);
+//                logger.Info("Call database balInsert success:");
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+//                    logger.Info("Call database success ds_regist not null");
+//                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+//                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+//                }
+//                else
+//                {
+//                    logger.Info("Call database success ds_regist is null");
+//                    response.responseCode = "-1";
+//                    response.responseMessage = "Err unknow";
+//                }
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+//        /*
+//      {"id":"5","code":"124","name":"Cty  1","fromDate":"01/11/2021 00:00:00","toDate":"01/11/2022 00:00:00","fromHour":"08:08:09","toHour":"01:09:08","rule":"1","priority":"1","balanceId":"1","expireDateId":"1","status":"1","note":"123456","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//         */
+
+//        public IActionResult camAddUpdate([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income companyGetList :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string id = Convert.ToString(userObj["id"]);
+
+//                string campaignId = Convert.ToString(userObj["campaignId"]);
+//                string serviceAddId = Convert.ToString(userObj["serviceAddId"]);
+//                string note = Convert.ToString(userObj["note"]);
+
+
+//                string type = Convert.ToString(userObj["type"]);
+
+//                string keyRegister = Convert.ToString(userObj["keyRegister"]);
+//                string users = Convert.ToString(userObj["users"]);
+
+
+                
+//                string ussdDisplay = Convert.ToString(userObj["ussdDisplay"]);
+
+
+
+
+                
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+//                if (string.IsNullOrEmpty(keyRegister)) keyRegister = "-1";
+//                if (string.IsNullOrEmpty(type)) type = "0";
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+                
+//                if (string.IsNullOrEmpty(ussdDisplay)) ussdDisplay = "-1";
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.camAddUpdate(id, campaignId, serviceAddId, note, users, type, ussdDisplay, keyRegister);
+//                logger.Info("Call database comInsert success:");
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+//                    logger.Info("Call database success ds_regist not null");
+//                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+//                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString(); ;
+//                }
+//                else
+//                {
+//                    logger.Info("Call database success ds_regist is null");
+//                    response.responseCode = "-1";
+//                    response.responseMessage = "Err unknow";
+//                }
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//        //{"id":"1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//        [HttpPost]
+//        public IActionResult usersGetList([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceGetList :" + sendData.ToString());
+//            usersObjList response = new usersObjList();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+
+//                string users = Convert.ToString(userObj["users"]);
+//                string id = Convert.ToString(userObj["id"]);
+              
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+                
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.usersGetList(id, users);
+//                logger.Info("Call database balGetList success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+
+
+
+
+
+//                    response.list = new usersObj[ds_regist.Tables[0].Rows.Count];
+//                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+//                    {
+//                        usersObj _obj = new usersObj();
+
+//                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+//                        _obj.userName = ds_regist.Tables[0].Rows[j]["USERNAME"].ToString();
+//                        _obj.pasword =ResfullApi.Models.CustomEncryption.Decrypt(ds_regist.Tables[0].Rows[j]["PASSWORD"].ToString());
+//                        _obj.role = ds_regist.Tables[0].Rows[j]["ROLE"].ToString();
+//                        _obj.contryCode = ds_regist.Tables[0].Rows[j]["COUNTRY_CODE"].ToString();
+//                        _obj.isLock = ds_regist.Tables[0].Rows[j]["IS_LOCK"].ToString();
+
+
+//                        _obj.totalFalse = ds_regist.Tables[0].Rows[j]["TOTAL_FALSE"].ToString();
+//                        _obj.timeLock = ds_regist.Tables[0].Rows[j]["TIME_LOCK"].ToString();
+//                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+
+//                        response.list[j] = _obj;
+//                    }
+
+//                }
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+//        /*
+//        {"code":"124","values":"Cty Viettech 1","note":"0","status":"1","codeGroup":"quangbh","display0":"display0","display1":"display1","display2":"display2","display3":"display3","display4":"display4","display5":"display5","gameId":"1","channel":"channel","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//         */
+//        public IActionResult usersInsert([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceInsert :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string userName = Convert.ToString(userObj["userName"]);
+//                string pasword = ResfullApi.Models.CustomEncryption.Encrypt(Convert.ToString(userObj["pasword"]));
+//                string role = Convert.ToString(userObj["role"]);
+//                string contryCode = Convert.ToString(userObj["contryCode"]);
+//                string isLock = Convert.ToString(userObj["isLock"]);
+//                string timeLock = Convert.ToString(userObj["timeLock"]);
+//                string totalFalse = Convert.ToString(userObj["totalFalse"]);
+//                string note = Convert.ToString(userObj["note"]);
+
+
+
+//                string users = Convert.ToString(userObj["users"]);
+               
+
+//                if (string.IsNullOrEmpty(userName)) userName = "-1";
+//                if (string.IsNullOrEmpty(isLock)) isLock = "0";
+
+
+
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.usersInsert(userName, pasword, role, contryCode, isLock, totalFalse, timeLock, note, users);
+//                logger.Info("Call database balInsert success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+//        /*
+//       {"id":"1","code":"124","values":"Cty Viettech 1","note":"0","status":"1","codeGroup":"quangbh","display0":"display0","display1":"display1","display2":"displayso 3","display3":"display3","display4":"display4","display5":"display5","gameId":"1","channel":"channel","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+
+//         */
+
+//        public IActionResult usersUpdate([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income companyGetList :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string id = Convert.ToString(userObj["id"]);
+
+//                string userName = Convert.ToString(userObj["userName"]);
+//                string pasword = ResfullApi.Models.CustomEncryption.Encrypt(Convert.ToString(userObj["pasword"]));
+//                string role = Convert.ToString(userObj["role"]);
+//                string contryCode = Convert.ToString(userObj["contryCode"]);
+//                string isLock = Convert.ToString(userObj["isLock"]);
+//                string timeLock = Convert.ToString(userObj["timeLock"]);
+//                string totalFalse = Convert.ToString(userObj["totalFalse"]);
+//                string note = Convert.ToString(userObj["note"]);
+
+
+//                string type = Convert.ToString(userObj["type"]);
+
+
+//                string users = Convert.ToString(userObj["users"]);
+
+
+              
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+//                if (string.IsNullOrEmpty(type)) type = "0";
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+
+
+
+//                DataSet ds_regist = balanceDataAccess.usersUpdate(id, userName, pasword, role, contryCode, isLock, totalFalse, timeLock, note, users, type);
+//                logger.Info("Call database comInsert success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+//        //{"id":"1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//        [HttpPost]
+//        public IActionResult ngamGetList([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceGetList :" + sendData.ToString());
+//            ngamObjList response = new ngamObjList();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+
+//                string users = Convert.ToString(userObj["users"]);
+//                string id = Convert.ToString(userObj["id"]);
+//                string serviceAddId = Convert.ToString(userObj["serviceAddId"]);
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+//                if (string.IsNullOrEmpty(serviceAddId)) serviceAddId = "-1";
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+
+                
+
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+
+
+
+//                DataSet ds_regist = balanceDataAccess.ngamGetList(id, users);
+//                //DataSet ds_regist = balanceDataAccess.ngamGetList(serviceAddId, users);
+                
+//                logger.Info("Call database balGetList success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+
+
+
+
+
+//                    response.list = new ngamObj[ds_regist.Tables[0].Rows.Count];
+//                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+//                    {
+//                        ngamObj _obj = new ngamObj();
+
+//                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+//                        _obj.name = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+//                        _obj.serviceId = ds_regist.Tables[0].Rows[j]["SV"].ToString();
+//                        _obj.message = ds_regist.Tables[0].Rows[j]["MSG"].ToString();
+//                        _obj.fromDate = ds_regist.Tables[0].Rows[j]["FD"].ToString();
+//                        _obj.toDate = ds_regist.Tables[0].Rows[j]["TD"].ToString();
+
+
+//                        _obj.percent = ds_regist.Tables[0].Rows[j]["PC"].ToString();
+//                        _obj.addType = ds_regist.Tables[0].Rows[j]["ADD_TYPE"].ToString();
+//                        _obj.sysdate = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+
+
+//                        response.list[j] = _obj;
+//                    }
+
+//                }
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+//        /*
+//        {"code":"124","values":"Cty Viettech 1","note":"0","status":"1","codeGroup":"quangbh","display0":"display0","display1":"display1","display2":"display2","display3":"display3","display4":"display4","display5":"display5","gameId":"1","channel":"channel","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//         */
+//        public IActionResult ngamInsert([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income balanceInsert :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string name = Convert.ToString(userObj["name"]);
+//                string serviceId = Convert.ToString(userObj["serviceId"]);
+//                string serviceAddId = Convert.ToString(userObj["serviceAddId"]);
+//                string message = Convert.ToString(userObj["message"]);
+//                string fromDate = Convert.ToString(userObj["fromDate"]);
+//                string toDate = Convert.ToString(userObj["toDate"]);
+//                string percent = Convert.ToString(userObj["percent"]);
+//                string addType = Convert.ToString(userObj["addType"]);
+
+
+
+//                string users = Convert.ToString(userObj["users"]);
+                
+
+//                if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+//                if (string.IsNullOrEmpty(serviceAddId)) serviceAddId = "-1";
+                
+//                if (string.IsNullOrEmpty(message)) message = "0";
+
+
+
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                //DataSet ds_regist = balanceDataAccess.ngamInsert(name, serviceId, message, fromDate, toDate, percent, addType, users);
+//                DataSet ds_regist = balanceDataAccess.ngamInsert(name, serviceAddId, message, fromDate, toDate, percent, addType, users);
+                
+//                logger.Info("Call database balInsert success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+//        /*
+//       {"id":"1","code":"124","values":"Cty Viettech 1","note":"0","status":"1","codeGroup":"quangbh","display0":"display0","display1":"display1","display2":"displayso 3","display3":"display3","display4":"display4","display5":"display5","gameId":"1","channel":"channel","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+
+//         */
+
+//        public IActionResult gamUpdate([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income companyGetList :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string id = Convert.ToString(userObj["id"]);
+
+//                string name = Convert.ToString(userObj["name"]);
+//                string serviceId = Convert.ToString(userObj["serviceId"]);
+//                string serviceAddId = Convert.ToString(userObj["serviceAddId"]);
+//                string message = Convert.ToString(userObj["message"]);
+//                string fromDate = Convert.ToString(userObj["fromDate"]);
+//                string toDate = Convert.ToString(userObj["toDate"]);
+//                string percent = Convert.ToString(userObj["percent"]);
+//                string addType = Convert.ToString(userObj["addType"]);
+//                string sysdate = Convert.ToString(userObj["sysdate"]);
+
+
+//                string type = Convert.ToString(userObj["type"]);
+
+
+//                string users = Convert.ToString(userObj["users"]);
+
+
+                
+//                if (string.IsNullOrEmpty(id)) id = "-1";
+//                if (string.IsNullOrEmpty(serviceAddId)) serviceAddId = "-1";
+//                if (string.IsNullOrEmpty(type)) type = "0";
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+                
+//                //DataSet ds_regist = balanceDataAccess.ngamUpdate(id, name, serviceId, message, fromDate, toDate, percent, addType, users, type);
+//                DataSet ds_regist = balanceDataAccess.ngamUpdate(id, name, serviceAddId, message, fromDate, toDate, percent, addType, users, type);
+//                logger.Info("Call database comInsert success:");
+                
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+
+
+
+
+//        //{"id":"1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+//        [HttpPost]
+//        public IActionResult blacklistGetList([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income blacklistGetList :" + sendData.ToString());
+//            blackListGetListArr response = new blackListGetListArr();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+
+
+//                string msisdn = Convert.ToString(userObj["msisdn"]);
+//                string type = Convert.ToString(userObj["type"]);
+//                string serviceId = Convert.ToString(userObj["serviceId"]);
+//                string campaignId = Convert.ToString(userObj["campaignId"]);
+//                string users = Convert.ToString(userObj["users"]);
+               
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+//                if (string.IsNullOrEmpty(type)) type = "-1";
+//                if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+//                if (string.IsNullOrEmpty(campaignId)) campaignId = "-1";
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                //DataSet ds_regist = balanceDataAccess.blackGettList(msisdn, type, serviceId, users);
+//                DataSet ds_regist = balanceDataAccess.blackGettList(msisdn, type, campaignId, users);
+//                logger.Info("Call database blackGettList success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+
+
+
+
+
+//                    response.list = new blackListGetList[ds_regist.Tables[0].Rows.Count];
+//                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+//                    {
+//                        blackListGetList _obj = new blackListGetList();
+
+//                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+//                        _obj.msisdn = ds_regist.Tables[0].Rows[j]["msisdn"].ToString();
+//                        _obj.type = ds_regist.Tables[0].Rows[j]["type"].ToString();
+//                        //_obj.serviceId = ds_regist.Tables[0].Rows[j]["SV_ID"].ToString();
+//                        _obj.campaignId = ds_regist.Tables[0].Rows[j]["SV_ID"].ToString();
+//                        _obj.sysdate = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+//                        _obj.users = ds_regist.Tables[0].Rows[j]["USERS"].ToString();
+//                        _obj.campaignName = ds_regist.Tables[0].Rows[j]["campaign_name"].ToString();
+                        
+
+//                        response.list[j] = _obj;
+//                    }
+
+//                }
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+
+
+//        //Import data vao Export
+//        //--;
+
+//        [HttpPost]
+//        public IActionResult blacklistInsertData([FromBody] dynamic sendData)
+//        {
+
+
+
+
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            logger.Info("Request from UI blacklistInsertData: " + sendData.ToString());
+
+
+//            var userObj = JObject.Parse(sendData.ToString());
+
+        
+
+//            blackImportDataList _data = JsonConvert.DeserializeObject<blackImportDataList>(sendData.ToString());
+//            if (string.IsNullOrEmpty(_data.type)) _data.type = "-1";
+//            if (string.IsNullOrEmpty(_data.serviceId)) _data.serviceId = "-1";
+//            if (string.IsNullOrEmpty(_data.campaignId)) _data.campaignId = "-1";
+//            if (string.IsNullOrEmpty(_data.users)) _data.users = "-1";
+
+
+            
+
+
+//            try
+//            {
+//                //Check key for authencation
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+
+
+//                List<List<string>> DataColumms = new List<List<string>>();
+//                var LIST_MSISDN = new List<string>();
+//                var LIST_TYPE = new List<string>();
+//                var LIST_SVID = new List<string>();
+//                var LIST_ACTION = new List<string>();
+//                var LIST_USERS = new List<string>();
+
+
+//                foreach (blackListObj eachData in _data.data)
+//                {
+
+//                    LIST_TYPE.Add(_data.type);
+//                    //LIST_SVID.Add(_data.serviceId);
+//                    LIST_SVID.Add(_data.campaignId);
+//                    LIST_USERS.Add(_data.users);
+
+//                    LIST_MSISDN.Add(eachData.msisdn);
+//                    LIST_ACTION.Add(eachData.action);
+
+
+
+//                }
+//                DataColumms.Add(LIST_MSISDN);
+//                DataColumms.Add(LIST_TYPE);
+//                DataColumms.Add(LIST_SVID);
+//                DataColumms.Add(LIST_ACTION);
+//                DataColumms.Add(LIST_USERS);
+
+
+
+
+
+
+//                balanceDataAccess.InsertBulkBlackList("BALANCE_PKG.BLACK_INSERT", DataColumms);
+
+//                logger.Info("Call database export_created success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("getResultOfTerm exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+
+//            return Ok(response);
+
+//        }
+
+
+
+
+
+
+
+
+
+
+//        public IActionResult reload([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income reload :" + sendData.ToString());
+//            Response response = new Response();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+
+//                string type = Convert.ToString(userObj["type"]);
+
+
+//                string users = Convert.ToString(userObj["users"]);
+              
+
+//                if (string.IsNullOrEmpty(type)) type = "-1";
+
+
+
+
+
+
+
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.reload(type, users);
+//                logger.Info("Call database reload success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+
+
+
+
+       
+//        [HttpPost]
+//        public IActionResult reportByCampaign([FromBody] dynamic sendData)
+//        {
+
+//            logger.Info("New request income reportByCampaign :" + sendData.ToString());
+//            reportByCampaignList response = new reportByCampaignList();
+//            response.responseCode = "-1";
+//            response.responseMessage = "Err unknow";
+
+//            try
+//            {
+
+//                var userObj = JObject.Parse(sendData.ToString());
+//                string users = Convert.ToString(userObj["users"]);
+//                string status = Convert.ToString(userObj["status"]);
+                
+//                string fromDate = Convert.ToString(userObj["fromDate"]);
+//                string toDate = Convert.ToString(userObj["toDate"]);
+
+//                if (string.IsNullOrEmpty(status)) status = "-1";
+//                if (string.IsNullOrEmpty(users)) users = "-1";
+//                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+//                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+               
+
+
+//                string token = Convert.ToString(userObj["token"]);
+//                string channel = Convert.ToString(userObj["channel"]);
+//                string language = Convert.ToString(userObj["language"]);
+//                if (string.IsNullOrEmpty(language)) language = "-1";
+
+//                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+//                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+//                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+//                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+//                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+//                redisConnection _redis;
+//                memoryCache.TryGetValue("redis", out _redis);
+//                if (_redis == null)
+//                {
+//                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                    {
+//                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                        Priority = CacheItemPriority.High,
+//                        SlidingExpiration = TimeSpan.FromMinutes(2),
+//                        Size = 1024,
+//                    };
+//                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+//                    _redis.connet();
+//                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+//                }
+//                if (!_redis.isConnet())
+//                {
+//                    if (!_redis.connet())
+//                    {
+//                        logger.Info("Connect to redis false");
+//                        response.responseCode = "-2";
+//                        response.responseMessage = "System Update";
+//                        logger.Info("confirmTicket response : " + response.ToString());
+//                        return Ok(response);
+//                    }
+//                    else
+//                    {
+//                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+//                        {
+//                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+//                            Priority = CacheItemPriority.High,
+//                            SlidingExpiration = TimeSpan.FromMinutes(2),
+//                            Size = 1024,
+//                        };
+//                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+//                    }
+//                }
+//                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+//                tokenObj _tokenObj = null;
+//                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+//                {
+//                    logger.Info("Authen token false");
+//                    response.responseCode = "35";
+//                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+//                    logger.Info("confirmTicket response : " + response.ToString());
+//                    return Ok(response);
+//                }
+
+
+//                DataSet ds_regist = balanceDataAccess.reportByCampaign( users, status, fromDate, toDate);
+//                logger.Info("Call database reportByCampaign success:");
+//                response.responseCode = "0";
+//                response.responseMessage = "Success";
+//                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+//                {
+
+                  
+
+
+//                    response.list = new reportByCampaign[ds_regist.Tables[0].Rows.Count];
+//                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+//                    {
+//                        reportByCampaign _obj = new reportByCampaign();
+
+//                        _obj.seq = ds_regist.Tables[0].Rows[j]["SEQ"].ToString();
+//                        _obj.code = ds_regist.Tables[0].Rows[j]["CAM_CODE"].ToString();
+//                        _obj.name = ds_regist.Tables[0].Rows[j]["CAM_NAME"].ToString();
+//                        _obj.priority = ds_regist.Tables[0].Rows[j]["CAM_PRIORITY"].ToString();
+
+//                        _obj.ruleAdd = ds_regist.Tables[0].Rows[j]["CAM_RULE_ADD"].ToString();
+//                        _obj.addType = ds_regist.Tables[0].Rows[j]["CAM_ADD_TYPE"].ToString();
+
+//                        _obj.createDate = ds_regist.Tables[0].Rows[j]["CAM_DATE_CREATED"].ToString();
+//                        _obj.fromDate = ds_regist.Tables[0].Rows[j]["CAM_FROM_DATE"].ToString();
+//                        _obj.toDate = ds_regist.Tables[0].Rows[j]["CAM_TO_DATE"].ToString();
+//                        _obj.status = ds_regist.Tables[0].Rows[j]["CAM_STATUS"].ToString();
+//                        _obj.serviceCode = ds_regist.Tables[0].Rows[j]["S_CODE"].ToString();
+//                        _obj.serviceName = ds_regist.Tables[0].Rows[j]["S_NAME"].ToString();
+
+//                        _obj.totalView = ds_regist.Tables[0].Rows[j]["TOTAL_VIEW"].ToString();
+//                        _obj.activation = ds_regist.Tables[0].Rows[j]["ACTIVATION"].ToString();
+//                        _obj.success = ds_regist.Tables[0].Rows[j]["REGIST_SUCCESS"].ToString();
+//                        _obj.fail = ds_regist.Tables[0].Rows[j]["REGIST_FAIL"].ToString();
+
+
+
+
+//                        response.list[j] = _obj;
+//                    }
+
+//                }
+
+
+
+
+//            }
+//            catch (Exception ex)
+//            {
+//                logger.Info("exception: " + ex.ToString());
+//                response.responseCode = "-2";
+//                response.responseMessage = "System upgrade";
+
+//            }
+//            logger.Info("Responase to web: " + response.ToString());
+//            return Ok(response);
+//        }
+
+
+
+
+
+
+
+
+
+
+
+
+//    }
+//}

+ 80 - 0
ApiWeb/ApiProcessToken/Controllers/dating.cs

@@ -0,0 +1,80 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using ResfullApi.Models;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System.Data;
+using Microsoft.AspNetCore.Mvc;
+namespace ApiProcess.Controllers
+{
+    public class dating : ControllerBase
+    {
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(dating));
+        //{"users":"2","serviceId":"30","usersReceived":"30","giftId":"2"}
+        [HttpPost]
+        public IActionResult sendGift([FromBody] dynamic sendData)
+        {
+            
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                string usersReceived = Convert.ToString(userObj["usersReceived"]);
+                string giftId = Convert.ToString(userObj["giftId"]);
+
+                logger.Info("New request income usersChatDelete :" + sendData.ToString());
+
+
+                //int a = Common.SocketUnSyn("quangbh", "127.0.0.1", 6017, 12000);
+
+
+
+
+
+                response.status = "0";
+                response.message = "success";
+
+                /*
+
+                DataSet ds_regist = usersDataAccess.USERS_CHAT_DEL(chatId);
+                logger.Info("Call database USERS_CHAT_DEL success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+
+
+                }
+                 * 
+                 * */
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+    }
+}

+ 728 - 0
ApiWeb/ApiProcessToken/Controllers/edu.cs

@@ -0,0 +1,728 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Xml;
+using System.Data;
+using ResfullApi.Models;
+using System.Configuration;
+using Newtonsoft.Json.Linq;
+using ResfullApi.Models.edu;
+using Newtonsoft.Json;
+using Microsoft.AspNetCore.Mvc;
+using CommonObj.model;
+
+namespace ApiProcess.Controllers
+{
+    [ApiController]
+    [Route("api/[controller]/[action]/data")]
+    public class edu : ControllerBase
+    {
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(edu));
+        //{"users":"50912345678","serviceId":"2","categoryCode":"VOCABULARY"}
+        [HttpPost]
+        public IActionResult getLessonOfCategory([FromBody] dynamic sendData)
+        {
+            ////log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            ////log4net.Config.XmlConfigurator.Configure();
+            LESSONOFCATEGORY  response = new LESSONOFCATEGORY();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string categoryCode = Convert.ToString(userObj["categoryCode"]);
+
+                if (string.IsNullOrEmpty(categoryCode)) categoryCode = "-1";
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                logger.Info("New request income getLessonOfCategory :" + sendData.ToString());
+                DataSet ds_regist = ResfullApi.Models.edu.lotoDataAccess.CATEGORY_GET(users, serviceid, categoryCode);
+                logger.Info("Call database CATEGORY_GET success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = "0";
+                    response.message = "success";
+                    response.LIST_CATEGORY = new CATEGORY[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        CATEGORY cateObj = new CATEGORY();
+                        cateObj.ID = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        cateObj.CODE = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+                        cateObj.NAME = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        cateObj.DESCRIPTION = ds_regist.Tables[0].Rows[j]["DESCRIPTION"].ToString();
+                        cateObj.INTRODUCTION = ds_regist.Tables[0].Rows[j]["INTRODUCTION"].ToString();
+                        cateObj.ICON_PATH = ds_regist.Tables[0].Rows[j]["ICON_PATH"].ToString();
+                        cateObj.SERVICE_ID = ds_regist.Tables[0].Rows[j]["SERVICE_ID"].ToString();
+                        DataSet dsCourse = ResfullApi.Models.edu.lotoDataAccess.COURSE_GET(users, serviceid, ds_regist.Tables[0].Rows[j]["ID"].ToString());
+                        if (dsCourse != null & dsCourse.Tables[0].Rows.Count > 0)
+                        {
+                            cateObj.LIST_COURSE = new COURSE[dsCourse.Tables[0].Rows.Count];
+                            for (int k = 0; k < dsCourse.Tables[0].Rows.Count; k++)
+                            {
+                                COURSE courseObj = new COURSE();
+                                courseObj.ID = dsCourse.Tables[0].Rows[k]["ID"].ToString();
+                                courseObj.CODE = dsCourse.Tables[0].Rows[k]["CODE"].ToString();
+                                courseObj.NAME = dsCourse.Tables[0].Rows[k]["NAME"].ToString();
+                                courseObj.DESCRIPTION = dsCourse.Tables[0].Rows[k]["DESCRIPTION"].ToString();
+                                courseObj.INTRODUCTION = dsCourse.Tables[0].Rows[k]["INTRODUCTION"].ToString();
+                                courseObj.IS_LEARN = dsCourse.Tables[0].Rows[k]["is_learn"].ToString();
+                                courseObj.EXP_DATE = dsCourse.Tables[0].Rows[k]["expdate"].ToString();
+                                courseObj.ICON_PATH = dsCourse.Tables[0].Rows[k]["ICON_PATH"].ToString();
+                                courseObj.LOGO_PAHT = dsCourse.Tables[0].Rows[k]["LOGO_PAHT"].ToString();
+                                courseObj.CATEGORY_ID = dsCourse.Tables[0].Rows[k]["CATEGORY_ID"].ToString();
+                                DataSet dsLesson = ResfullApi.Models.edu.lotoDataAccess.LESSON_GET(users, serviceid, dsCourse.Tables[0].Rows[k]["ID"].ToString());
+                                if (dsLesson != null & dsLesson.Tables[0].Rows.Count > 0)
+                                {
+                                    courseObj.LIST_LESSON = new LESSON[dsLesson.Tables[0].Rows.Count];
+                                    for(int m=0;m< dsLesson.Tables[0].Rows.Count;m++)
+                                    {
+                                        LESSON lessonObj = new LESSON();
+                                        lessonObj.ID = dsLesson.Tables[0].Rows[m]["ID"].ToString();
+                                        lessonObj.CODE = dsLesson.Tables[0].Rows[m]["CODE"].ToString();
+                                        lessonObj.NAME = dsLesson.Tables[0].Rows[m]["NAME"].ToString();
+                                        lessonObj.DESCRIPTION = dsLesson.Tables[0].Rows[m]["DESCRIPTION"].ToString();
+                                        lessonObj.INTRODUCTION = dsLesson.Tables[0].Rows[m]["INTRODUCTION"].ToString();
+                                        lessonObj.ICON_PATH = dsLesson.Tables[0].Rows[m]["ICON_PATH"].ToString();
+                                        lessonObj.LOGO_PAHT = dsLesson.Tables[0].Rows[m]["LOGO_PAHT"].ToString();
+                                        lessonObj.COURSE_ID = dsLesson.Tables[0].Rows[m]["COURSE_ID"].ToString();
+                                        courseObj.LIST_LESSON[m] = lessonObj;
+
+                                    }
+                                }
+                                cateObj.LIST_COURSE[k] = courseObj;
+
+                            }
+                        }
+
+                        response.LIST_CATEGORY[j] = cateObj;
+                    }
+                    
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "Nodata";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                response.message = "Err Exception";
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+        //{"users":"50912345678","serviceId":"2","lessonId":"1"}
+        [HttpPost]
+        public IActionResult getContentOfVocabulary([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            VOCABULARY_LIST response = new VOCABULARY_LIST();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string lessonId = Convert.ToString(userObj["lessonId"]);
+
+                if (string.IsNullOrEmpty(lessonId)) lessonId = "-1";
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                logger.Info("New request income getContentOfVocabulary :" + sendData.ToString());
+                DataSet ds_regist = ResfullApi.Models.edu.lotoDataAccess.VOCABULARY_GET(users, serviceid, lessonId);
+                logger.Info("Call database VOCABULARY_GET success:");
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.LIST_VOCABULARY = new VOCABULARY[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        VOCABULARY obj = new VOCABULARY();
+
+                        obj.ID = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        obj.NAME_GLOBAL = ds_regist.Tables[0].Rows[j]["NAME_GLOBAL"].ToString();
+                        obj.NAME_LOCAL = ds_regist.Tables[0].Rows[j]["NAME_LOCAL"].ToString();
+                        obj.DESCRIPTION_GLOBAL = ds_regist.Tables[0].Rows[j]["DESCRIPTION_GLOBAL"].ToString();
+                        obj.DESCRIPTION_LOCAL = ds_regist.Tables[0].Rows[j]["DESCRIPTION_LOCAL"].ToString();
+                        obj.INTRODUCTION_GLOBAL = ds_regist.Tables[0].Rows[j]["INTRODUCTION_GLOBAL"].ToString();
+                        obj.INTRODUCTION_LOCAL = ds_regist.Tables[0].Rows[j]["INTRODUCTION_LOCAL"].ToString();
+                        obj.CONTENT = ds_regist.Tables[0].Rows[j]["CONTENT"].ToString();
+                        obj.CONTENT_TYPE = ds_regist.Tables[0].Rows[j]["CONTENT_TYPE"].ToString();
+                        obj.EXAMPLE = ds_regist.Tables[0].Rows[j]["EXAMPLE"].ToString();
+                        obj.SPELL = ds_regist.Tables[0].Rows[j]["SPELL"].ToString();
+                        obj.PICTURE = ds_regist.Tables[0].Rows[j]["PICTURE"].ToString();
+                        obj.LESSON_ID = ds_regist.Tables[0].Rows[j]["LESSON_ID"].ToString();
+                        response.LIST_VOCABULARY[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                response.message = "Err unknow";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        //{"users":"50912345678","serviceId":"2","lessonId":"7"}
+        [HttpPost]
+        public IActionResult getContentOfListen([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            LISTEN_LIST response = new LISTEN_LIST();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string lessonId = Convert.ToString(userObj["lessonId"]);
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(lessonId)) lessonId = "-1";
+
+                logger.Info("New request income getContentOfVocabulary :" + sendData.ToString());
+                DataSet ds_regist = ResfullApi.Models.edu.lotoDataAccess.LISTEN_GET(users, serviceid, lessonId);
+                logger.Info("Call database VOCABULARY_GET success:");
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.LIST_LISTEN = new LISTEN[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        LISTEN obj = new LISTEN();
+
+                        obj.ID = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        obj.NAME = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        obj.DESCRIPTION = ds_regist.Tables[0].Rows[j]["DESCRIPTION"].ToString();
+                        obj.INTRODUCTION_GLOBAL = ds_regist.Tables[0].Rows[j]["INTRODUCTION_GLOBAL"].ToString();
+                        obj.INTRODUCTION_LOCAL = ds_regist.Tables[0].Rows[j]["INTRODUCTION_LOCAL"].ToString();
+                        obj.PICTURE = ds_regist.Tables[0].Rows[j]["PICTURE"].ToString();
+                        obj.CONTENT = ds_regist.Tables[0].Rows[j]["CONTENT"].ToString();
+                        obj.CONTENT_TYPE = ds_regist.Tables[0].Rows[j]["CONTENT_TYPE"].ToString();
+                        obj.LESSON_ID = ds_regist.Tables[0].Rows[j]["LESSON_ID"].ToString();
+                      
+                        response.LIST_LISTEN[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                response.message = "Err unknow";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+        //{"users":"50912345678","serviceId":"2","lessonId":"7"}
+        [HttpPost]
+        public IActionResult getContentOfGrammar([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            GRAMMAR_LIST response = new GRAMMAR_LIST();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string lessonId = Convert.ToString(userObj["lessonId"]);
+
+                if (string.IsNullOrEmpty(lessonId)) lessonId = "-1";
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                logger.Info("New request income getContentOfVocabulary :" + sendData.ToString());
+                DataSet ds_regist = ResfullApi.Models.edu.lotoDataAccess.GRAMMAR_GET(users, serviceid, lessonId);
+                logger.Info("Call database VOCABULARY_GET success:");
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.LIST_GRAMMAR = new GRAMMAR[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        GRAMMAR grammarObj = new GRAMMAR();
+
+                        grammarObj.ID = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        grammarObj.NAME = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        grammarObj.DESCRIPTION = ds_regist.Tables[0].Rows[j]["DESCRIPTION"].ToString();
+                        grammarObj.INTRODUCTION = ds_regist.Tables[0].Rows[j]["INTRODUCTION"].ToString();
+                        grammarObj.PICTURE = ds_regist.Tables[0].Rows[j]["PICTURE"].ToString();
+                        grammarObj.LESSON_ID = ds_regist.Tables[0].Rows[j]["LESSON_ID"].ToString();
+                        DataSet dsGrammarEx = ResfullApi.Models.edu.lotoDataAccess.GRAMMAR_EX_GET(users, serviceid, ds_regist.Tables[0].Rows[j]["ID"].ToString());
+                        if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                        {
+                            grammarObj.LIST_GRAMMAR_EX = new GRAMMAR_EX[dsGrammarEx.Tables[0].Rows.Count];
+                            for (int k = 0; k < dsGrammarEx.Tables[0].Rows.Count; k++)
+                            {
+                                GRAMMAR_EX grammarExObj = new GRAMMAR_EX();
+                                grammarExObj.ID = dsGrammarEx.Tables[0].Rows[k]["ID"].ToString();
+                                grammarExObj.NAME = dsGrammarEx.Tables[0].Rows[k]["NAME"].ToString();
+                                grammarExObj.DESCRIPTION = dsGrammarEx.Tables[0].Rows[k]["DESCRIPTION"].ToString();
+                                grammarExObj.INTRODUCTION = dsGrammarEx.Tables[0].Rows[k]["INTRODUCTION"].ToString();
+                                grammarExObj.PICTURE = dsGrammarEx.Tables[0].Rows[k]["PICTURE"].ToString();
+                                grammarExObj.CONTENT = dsGrammarEx.Tables[0].Rows[k]["CONTENT"].ToString();
+                                grammarExObj.CONTENT_TYPE = dsGrammarEx.Tables[0].Rows[k]["CONTENT_TYPE"].ToString();
+                                grammarExObj.GRAMMAR_ID = dsGrammarEx.Tables[0].Rows[k]["GRAMMAR_ID"].ToString();
+                                grammarObj.LIST_GRAMMAR_EX[k] = grammarExObj;
+
+                            }
+                        }
+                        
+
+
+                        response.LIST_GRAMMAR[j] = grammarObj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                response.message = "Err unknow";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+        //{"users":"50912345678","serviceId":"2","lessonId":"1"}
+        [HttpPost]
+        public IActionResult getContentOfQuestion([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            QUESTION_LIST response = new QUESTION_LIST();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string lessonId = Convert.ToString(userObj["lessonId"]);
+
+                if (string.IsNullOrEmpty(lessonId)) lessonId = "-1";
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                logger.Info("New request income getContentOfQuestion :" + sendData.ToString());
+                DataSet ds_regist = ResfullApi.Models.edu.lotoDataAccess.QUESTION_GET(users, serviceid, lessonId);
+                logger.Info("Call database VOCABULARY_GET success:");
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.LIST_QUESTION = new QUESTION[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        QUESTION obj = new QUESTION();
+
+                        obj.ID = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        obj.NAME = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        obj.DESCRIPTION = ds_regist.Tables[0].Rows[j]["DESCRIPTION"].ToString();
+                        obj.ICON_PATH = ds_regist.Tables[0].Rows[j]["ICON_PATH"].ToString();
+                        obj.CONTENT = ds_regist.Tables[0].Rows[j]["CONTENT"].ToString();
+                        obj.CONTENT_TYPE = ds_regist.Tables[0].Rows[j]["CONTENT_TYPE"].ToString();
+                        obj.QUESTION_TYPE = ds_regist.Tables[0].Rows[j]["QUESTION_TYPE"].ToString();
+                        obj.ANSWER_TRUE = ds_regist.Tables[0].Rows[j]["ANSWER_TRUE"].ToString();
+                        obj.ANSWER1 = ds_regist.Tables[0].Rows[j]["ANSWER1"].ToString();
+                        obj.ANSWER2 = ds_regist.Tables[0].Rows[j]["ANSWER2"].ToString();
+                        obj.ANSWER3 = ds_regist.Tables[0].Rows[j]["ANSWER3"].ToString();
+                        obj.ANSWER4 = ds_regist.Tables[0].Rows[j]["ANSWER4"].ToString();
+
+                        response.LIST_QUESTION[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                response.message = "Err unknow";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+        // {"users":"123","serviceId":"23","lessonId":"1",list}
+        [HttpPost]
+        public IActionResult getAnsweerOfQuestion([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                ANSWER_RESULT data = JsonConvert.DeserializeObject<ANSWER_RESULT>(sendData.ToString());
+                logger.Info("New request income getAnsweerOfQuestion :" + data.ToString());
+                string lessonId = data.LESSON_ID;
+                string question_info = "";
+                if(data.ANSWER_LIST.Length>0)
+                {
+                    for(int i=0;i<data.ANSWER_LIST.Length;i++)
+                    {
+                        ANSWER obj=(ANSWER)data.ANSWER_LIST[i];
+                        if(i==0)
+                            question_info = obj.QUESTION_ID + ";" + obj.ANSWERS + ";" + obj.RESULT + ";" + obj.TIME;
+                        else
+                            question_info = question_info + "$" + obj.QUESTION_ID + ";" + obj.ANSWERS + ";" + obj.RESULT + ";" + obj.TIME;
+                    }
+                }
+
+                DataSet ds_regist = ResfullApi.Models.edu.lotoDataAccess.QUESTION_UPDATE(data.users, data.serviceId, data.LESSON_ID, question_info);
+                logger.Info("Call database QUESTION_UPDATE success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+        //{"users":"50940240716","serviceId":"30","courseId":"50912345678","codeBuy":"1","requestId":"-1","otp":"-1"}
+       
+        public IActionResult buyCourse([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            mpsResponseEx response = new mpsResponseEx();
+            response.status = "-1";
+            response.message = "Err unknow";
+            logger.Info("New request income buyCourse :" + sendData.ToString());
+            string mps_ip = "127.0.0.1";
+            string mps_port = "0000";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string courseId = Convert.ToString(userObj["courseId"]);
+                string codeBuy = Convert.ToString(userObj["codeBuy"]);
+                string requestId = Convert.ToString(userObj["requestId"]);
+                string otp = Convert.ToString(userObj["otp"]);
+
+                if (string.IsNullOrEmpty(courseId)) courseId = "-1";
+                if (string.IsNullOrEmpty(requestId)) requestId = "-1";
+                if (string.IsNullOrEmpty(otp)) otp = "-1";
+
+                DataSet ds_mps_info = DataAccess.MPS_GET_BY_ID(serviceid);
+                mps_ip = ds_mps_info.Tables[0].Rows[0]["MPS_IP"].ToString();
+                mps_port = ds_mps_info.Tables[0].Rows[0]["MPS_PORT"].ToString();
+
+
+                logger.Info("Start call charg money");
+                string data = "requestId=" + requestId + "&msisdn=" + users + "&otp=" + otp + "&serviceid=" + serviceid + "&subServiceCode=" + codeBuy;
+                logger.Info("Request call charge: " + data);
+                string response111 = Common.SocketUnSyn(data, mps_ip, Convert.ToInt32(mps_port), 12000);
+                logger.Info("Result call charge: " + response111);
+                mpsResponse resCallMps = JsonConvert.DeserializeObject<mpsResponse>(response111);
+                if (resCallMps.responseCode == "0")
+                {
+                    logger.Info("charge money success :");
+                    DataSet ds_regist = ResfullApi.Models.edu.lotoDataAccess.COURSE_BUY(users, serviceid, courseId, codeBuy);
+                    logger.Info("Call database COURSE_BUY success:");
+                    if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                    {
+                        response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                        response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                        response.requestId = resCallMps.requestID;
+
+                        return Ok(response);
+
+                    }
+                }
+                else if (resCallMps.responseCode == "100")
+                {
+                    response.status = "100";
+                    response.message = "Send OTP success to user, pls send this function with OTP & requestID agian for finsh";
+                    response.requestId = resCallMps.requestID;
+                    return Ok(response);
+                }
+                else if (resCallMps.responseCode == "401")
+                {
+                    response.status = "-12";
+                    response.message = "Not enough money ";
+                    return Ok(response);
+                }
+                else if (resCallMps.responseCode == "415")
+                {
+                    response.status = "-13";
+                    response.message = "Invalid OTP code";
+                    return Ok(response);
+                }
+                else if (resCallMps.responseCode == "416")
+                {
+                    response.status = "-14";
+                    response.message = "Incorrect OTP code/ OTP code expired";
+                    return Ok(response);
+                }
+                else if (resCallMps.responseCode == "417")
+                {
+                    response.status = "-15";
+                    response.message = "Confirm OTP via USSD time out";
+                    return Ok(response);
+                }
+                else
+                {
+                    response.status = "-10";
+                    response.message = "System err";
+                    return Ok(response);
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+
+            return Ok(response);
+        }
+
+
+
+        //{"users":"856000111113","serviceId":"2","categoryCode":"VOCABULARY"}
+        [HttpPost]
+        public IActionResult getCourseHis([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            COURSE_HIS_LIST response = new COURSE_HIS_LIST();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string categoryCode = Convert.ToString(userObj["categoryCode"]);
+
+
+                logger.Info("New request income getCourseHis :" + sendData.ToString());
+                DataSet ds_regist = ResfullApi.Models.edu.lotoDataAccess.COURSE_GET_HIS(users, serviceid, categoryCode);
+                logger.Info("Call database COURSE_GET_HIS success:");
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.LIST_COURSE_HIS = new COURSE_HIS[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        COURSE_HIS courseObj = new COURSE_HIS();
+                        courseObj.ID = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        courseObj.CODE = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+                        courseObj.NAME = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        courseObj.DESCRIPTION = ds_regist.Tables[0].Rows[j]["DESCRIPTION"].ToString();
+                        courseObj.INTRODUCTION = ds_regist.Tables[0].Rows[j]["INTRODUCTION"].ToString();
+                        courseObj.IS_LEARN = ds_regist.Tables[0].Rows[j]["is_learn"].ToString();
+                        courseObj.EXP_DATE = ds_regist.Tables[0].Rows[j]["expdate"].ToString();
+                        
+                        courseObj.ICON_PATH = ds_regist.Tables[0].Rows[j]["ICON_PATH"].ToString();
+                        courseObj.LOGO_PAHT = ds_regist.Tables[0].Rows[j]["LOGO_PAHT"].ToString();
+                        courseObj.CATEGORY_ID = ds_regist.Tables[0].Rows[j]["CATEGORY_ID"].ToString();
+                        courseObj.TOTAL_LESSON = ds_regist.Tables[0].Rows[j]["TOTAL_LESSON"].ToString();
+                        courseObj.TOTAL_LESSON_LEARN = ds_regist.Tables[0].Rows[j]["TOTAL_LESSON_LEARN"].ToString();
+                        courseObj.PERCENT = ds_regist.Tables[0].Rows[j]["PERCENT"].ToString();
+                        response.LIST_COURSE_HIS[j] = courseObj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                response.message = "Err unknow";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+        //{"users":"856000111113","serviceId":"2"}
+        [HttpPost]
+        public IActionResult getRanking([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            RANKING_LIST response = new RANKING_LIST();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+
+
+                logger.Info("New request income getRanking :" + sendData.ToString());
+                DataSet ds_regist = ResfullApi.Models.edu.lotoDataAccess.RANKINGE_GET_LIST(users, serviceid);
+                logger.Info("Call database RANKINGE_GET_LIST success:");
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.LIST_RANKING = new RANKING[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        RANKING obj = new RANKING();
+                        obj.SEQ = ds_regist.Tables[0].Rows[j]["SEQ"].ToString();
+                        obj.USERS_ID = ds_regist.Tables[0].Rows[j]["USERS_ID"].ToString();
+                        obj.USERS = ds_regist.Tables[0].Rows[j]["USERS"].ToString();
+                        obj.MSISDN = ds_regist.Tables[0].Rows[j]["MSISDN"].ToString();
+                        obj.SERVICE_ID = ds_regist.Tables[0].Rows[j]["SERVICE_ID"].ToString();
+                        obj.FULLNAME = ds_regist.Tables[0].Rows[j]["FULLNAME"].ToString();
+                        obj.BIRTHDAY = ds_regist.Tables[0].Rows[j]["BIRTHDAY"].ToString();
+                        obj.PICTURE = ds_regist.Tables[0].Rows[j]["PICTURE"].ToString();
+                        obj.TOTAL_SCORE = ds_regist.Tables[0].Rows[j]["TOTAL_SCORE"].ToString();
+                       
+                        response.LIST_RANKING[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                response.message = "Err unknow";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+    }
+}

+ 113 - 0
ApiWeb/ApiProcessToken/Controllers/happyCall.cs

@@ -0,0 +1,113 @@
+using Newtonsoft.Json.Linq;
+using ResfullApi.Models;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using Microsoft.AspNetCore.Mvc;
+using ApiProcess.Models.bet;
+using Microsoft.Extensions.Caching.Memory;
+
+namespace ApiProcess.Controllers
+{
+    [ApiController]
+    [Route("api/[controller]/[action]/data")]
+    public class happyCall : ControllerBase
+    {
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(happyCall));
+        
+        private IMemoryCache memoryCache;
+        public happyCall(IMemoryCache memoryCache)
+        {
+            this.memoryCache = memoryCache;
+        }
+
+
+
+
+
+        //{"users":"50912345678","serviceId":"2","code":"-1","fromDate":"01/08/2020","toDate":"01/08/2020","winType":"-1"}
+        [HttpPost]
+        public IActionResult searchCode([FromBody] dynamic sendData)
+        {
+            ////log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            ////log4net.Config.XmlConfigurator.Configure();
+            happyCallList response = new happyCallList();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string code = Convert.ToString(userObj["code"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+                string winType = Convert.ToString(userObj["winType"]);
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(winType)) winType = "-1";
+
+                logger.Info("New request income searchCode Happy :" + sendData.ToString());
+
+                DataSet ds_regist = happyDataAccess.SearchCode(users, serviceid, code,fromDate,toDate,winType);
+                logger.Info("Call database SearchCode success:");
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.listHappCall = new ResfullApi.Models.happyCall[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        ResfullApi.Models.happyCall obj = new ResfullApi.Models.happyCall();
+
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.msisdn = ds_regist.Tables[0].Rows[j]["msisdn"].ToString();
+                        obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        obj.sysdate = ds_regist.Tables[0].Rows[j]["vsysdate"].ToString();
+                        obj.isSub = ds_regist.Tables[0].Rows[j]["IS_SUB"].ToString();
+                        obj.isWin = ds_regist.Tables[0].Rows[j]["IS_WIN"].ToString();
+                        obj.type = ds_regist.Tables[0].Rows[j]["CMD"].ToString();
+                     
+                        response.listHappCall[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                response.message = "Err unknow";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+
+    }
+}

+ 3090 - 0
ApiWeb/ApiProcessToken/Controllers/loto.cs

@@ -0,0 +1,3090 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using CommonObj.common;
+using CommonObj.lotoModel;
+using CommonObj.model;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Memory;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using ResfullApi.Models;
+using System.Data;
+using ResfullApi.Models.bet;
+
+namespace ApiProcessToken.Controllers
+{
+    [ApiController]
+    [Route("api/[controller]/[action]/data")]
+
+    public class loto : ControllerBase
+    {
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(loto));
+
+        private IMemoryCache memoryCache;
+        public loto(IMemoryCache memoryCache)
+        {
+            this.memoryCache = memoryCache;
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult buyTicket([FromBody] dynamic sendData)
+        {
+            buyTicketResponse response = new buyTicketResponse();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+
+
+
+            try
+            {
+                buyTicketObj data = JsonConvert.DeserializeObject<buyTicketObj>(sendData.ToString());
+                if (data.language != "0" || data.language != "1") data.language = "0";
+                logger.Info("New request income bet :" + data.ToString());
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("buyTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, data.token, data.channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                    logger.Info("buyTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                //Chu y:
+                // Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                if (_tokenObj != null)
+                {
+                    if (_tokenObj.msisdn != data.msisdn)
+                    {
+                        logger.Info("Authen token false");
+                        response.responseCode = "35";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                        logger.Info("buyTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                }
+
+                //Ket thuc check token
+
+
+
+                //Kiem tra xem co blaclist hay ko? Tham thoi dung voi muc dich whiteList
+
+                blacklistObj _blackObj = CommonFunction.getBlackListFromRedis(_redis, "2", "-1", data.msisdn);
+                if(_blackObj!=null)
+                {
+                    logger.Info("Blacklist roi"+ data.msisdn);
+                    response.responseCode = "26";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                    logger.Info("buyTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                logger.Info("So nay ko blacklist" + data.msisdn);
+
+
+                if (data.channel != "WALLET")
+                {
+                    logger.Info("Channel !=WALLET tuc la mua ve qua tai khoan goc cua thue bao: " + data.msisdn);
+                    string _pakage = CommonFunction.chargeGWGetPackage(_redis, CommonFunction.getGuiId(), data.msisdn, logger);
+                    if(_pakage=="unknow")
+                    {
+                        logger.Info("View :" + data.msisdn +" loi nen exit with update system");
+                        response.responseCode = "-2";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                        logger.Info("buyTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    string _listThueBaoTraSau = CommonFunction.getParamObjFromRedis(_redis, "THUEBAO_TRASAU", "THUEBAO_TRASAU", "SYSTEM").values;
+                    if(_listThueBaoTraSau.IndexOf(","+_pakage+",")>0)
+                    {
+                        logger.Info("Thue bao :" + data.msisdn + " la tra sau--> not play on ussd or web channel. Tra ma loi 23");
+                        response.responseCode = "23"; 
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                        logger.Info("buyTicket response : " + response.ToString());
+                        return Ok(response);
+                    }    
+                }
+
+
+
+                int is_promotion = 0, status_prompotion = 0;
+                long totalMoney = 0, totalPromotionMoney = 0, id_promotion = -1, totalPaymentMoney = 0;
+
+
+                //1. DUA VAO GAMEID DE KIEM TRA KY QUAY ID VA THOI GIAN QUAY THUONG
+                termObj _termObj = CommonFunction.getTermObjObjFromRedis(_redis, data.gameId);
+                //Kiem tra thoi gian hien tai > thoi gian dong cong + 10 phut thi exit
+                DateTime _endDate = new DateTime();
+                try { _endDate = DateTime.ParseExact(_termObj.endDate, "dd/MM/yyyy HH:mm:ss", null); }
+                catch { }
+                logger.Info("_endDate chua add 10 phut: "+ _endDate.ToString());
+
+
+                TimeSpan _addMore = new TimeSpan(0, 10, 0);
+                _endDate = _endDate + _addMore;
+
+                logger.Info("_endDate da add 10 phut: " + _endDate.ToString());
+
+                DateTime dNow = DateTime.Now;
+
+                logger.Info("dNow : " + dNow.ToString());
+
+                if (dNow > _endDate)
+                {
+                    logger.Info("He thong bi loi, het thoi gian choi cua ky nay roi nhe");
+                    response.responseCode = "-2";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                    logger.Info("buyTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                logger.Info("Check thoi gian da OK, xin moi tiep tuc");
+
+
+                //2. KIEM TRA TICKET NAY CO HOP LE VE TIEN HAY KO?
+                //Tinh tong tien cua ve
+                if (!CommonFunction.checkTicket(data, out totalMoney))
+                {
+                    //Ticke sai formart
+                    logger.Info("Check ticket false");
+                    response.responseCode = "3";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                    logger.Info("buyTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                if (!string.IsNullOrEmpty(data.promotionCode))
+                {
+                    DataSet _ds = lotoDataAccess.getPromotionByCode(data.promotionCode, data.msisdn);
+                    if (_ds != null && _ds.Tables[0].Rows.Count > 0)
+                    {
+                        id_promotion = Convert.ToUInt32(_ds.Tables[0].Rows[0]["ID"].ToString());
+                        totalPromotionMoney = Convert.ToUInt32(_ds.Tables[0].Rows[0]["MONEY"].ToString());
+                        status_prompotion = Convert.ToUInt16(_ds.Tables[0].Rows[0]["STATUS"].ToString());
+                        if (status_prompotion == 2)
+                        {
+                            //Ma code khuyen mai da su dung roi
+                            logger.Info("Promotion code have use");
+                            response.responseCode = "38";
+                            response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                            logger.Info("buyTicket response : " + response.ToString());
+                            return Ok(response);
+                        }
+                        else if (status_prompotion == 0)
+                        {
+                            //Ma code khuyen mai chua send
+                            logger.Info("Promotion is not active");
+                            response.responseCode = "40";
+                            response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                            logger.Info("buyTicket response : " + response.ToString());
+                            return Ok(response);
+                        }
+                        else if (status_prompotion == 1)
+                        {
+                            logger.Info("Promotion code OK");
+                            is_promotion = 1;
+                        }
+
+                    }
+                    else
+                    {
+                        //Promotion code ko hop le
+                        logger.Info("Promotion code invalid");
+                        response.responseCode = "39";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                        logger.Info("buyTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                }
+
+
+                if (totalPromotionMoney >= totalMoney)
+                    totalPaymentMoney = 0;
+                else
+                    totalPaymentMoney = totalMoney - totalPromotionMoney;
+
+
+                response.responseCode = "0";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                response.termObj = _termObj;
+                response.requestId = data.requestId;
+                response.transId = CommonFunction.getGuiId();
+                response.isPromotion = is_promotion.ToString();
+                response.totalMoney = totalMoney.ToString();
+                response.totalMoneyPromotion = totalPromotionMoney.ToString();
+                response.totalMoneyPayment = totalPaymentMoney.ToString();
+                response.promotionId = id_promotion.ToString();
+                data.buyTicketResponse = response;
+
+                //Ghi request nay vao select 2 cua DB
+                //ghi lai token vao DB(1)
+                int _token_timeout = Convert.ToInt16(((paramObj)CommonFunction.getParamObjFromRedis(_redis, "TICKET_CONFIRM_TIMEOUT", "TICKET_CONFIRM_TIMEOUT", "SYSTEM")).values);
+                TimeSpan _timeSpam = new TimeSpan(0, 0, _token_timeout);
+                _redis.setByKey(_redis.DB_INDEX_DATA_USER, response.transId, data.ToString(), _timeSpam);
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("buyTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+        [HttpPost]
+        public IActionResult confirmTicket([FromBody] dynamic sendData)
+        {
+
+            confirmTiketResponse response = new confirmTiketResponse();
+
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+            response.transId = CommonFunction.getGuiId();
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+            string paymentTransCode = "";
+            string requestId = string.Empty, language = string.Empty, transIdByTicket = string.Empty, paymentCode = string.Empty, token = string.Empty, channel = string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                requestId = Convert.ToString(obj["requestId"]);
+                transIdByTicket = Convert.ToString(obj["transIdByTicket"]);
+                paymentCode = Convert.ToString(obj["paymentCode"]);
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                paymentTransCode = paymentCode;
+                response.requestId = requestId;
+                /*
+                if (string.IsNullOrEmpty(requestId)) requestId = "";
+                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+                if (string.IsNullOrEmpty(token)) token = "";
+                */
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+                //Ket thuc check token
+
+                //Lay thong tin cua requetByTicket ve
+                if (!_redis.existsByKey(Convert.ToInt16(_redis.DB_INDEX_DATA_USER), transIdByTicket))
+                {
+                    logger.Info("Request buy ticket not exits");
+                    response.responseCode = "41";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+
+
+                }
+                else
+                {
+                    buyTicketObj data = JsonConvert.DeserializeObject<buyTicketObj>(_redis.getByKey(_redis.DB_INDEX_DATA_USER, transIdByTicket));
+                    _redis.delByKey(_redis.DB_INDEX_DATA_USER, transIdByTicket);
+                    string _resultCharge = "-2";
+
+                    if (channel != "WALLET")
+                    {
+                        //Tien hanh charge tien, gui ve ma loi va ma giao dich
+                        _resultCharge = CommonFunction.chargeGW(_redis,response.transId, data.msisdn, data.buyTicketResponse.totalMoneyPayment, logger);
+                        paymentTransCode = response.transId;
+                        if (_resultCharge != "0")
+                        {
+                            logger.Info("Charge false so exit");
+                            response.responseCode = _resultCharge;
+                            response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                            logger.Info("confirmTicket response : " + response.ToString());
+                            return Ok(response);
+                        }
+                    }
+                    //truong hop con lai thi da tru tien thanh cong va insert ve nay vao DB
+                    bool _resultInsert = false;
+                    try
+                    {
+                        //tao chuoi ticket co format: termId1#money#ticket1*termId2#money#tiket2*.......
+                        string _tiketformat = "";
+                        for (int i = 0; i < data.ticket.Length; i++)
+                        {
+                            if (i == 0)
+                                _tiketformat = data.buyTicketResponse.termObj.id + "#" + data.ticket[i].money + "#" + data.ticket[i].code;
+                            else
+                                _tiketformat = _tiketformat + "*" + data.buyTicketResponse.termObj.id + "#" + data.ticket[i].money + "#" + data.ticket[i].code;
+                        }
+
+                        DataSet _ds = lotoDataAccess.lotoInsertBet(data.msisdn, data.buyTicketResponse.promotionId, _tiketformat,
+                                        data.buyTicketResponse.totalMoneyPayment, data.requestId, data.buyTicketResponse.transId,
+                                        response.requestId, response.transId, paymentTransCode, "Success", DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")
+                                        , DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"), "0", data.gameId, data.channel, data.language);
+
+                        if (_ds != null && _ds.Tables[0].Rows.Count > 0)
+                        {
+                            //lay ve ma don hang, list betId
+                            response.orderId = _ds.Tables[0].Rows[0]["bill_code"].ToString();
+                            response.listTiketId = _ds.Tables[0].Rows[0]["tran_code"].ToString();
+                            response.responseCode = "0";
+                            response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                            logger.Info("confirmTicket response : " + response.ToString());
+
+                            return Ok(response);
+                        }
+                        else
+                        {
+
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        logger.Info("Insert bet into Database errr " + ex.Message, ex);
+                        _resultInsert = false;
+
+                    }
+                    if (!_resultInsert)
+                    {
+                        //Ghi lai log cua giao dich con hoan lai tien
+                        logger.Info("Insert bet into Database err so write log for revert");
+                        //Ghi log
+                        response.responseCode = "-2";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+
+                    }
+
+
+                }
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("confirmTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult sendOtp([FromBody] dynamic sendData)
+        {
+
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+
+            string msisdn = string.Empty, language = string.Empty, transIdByTicket = string.Empty, paymentCode = string.Empty, token = string.Empty, channel = string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                msisdn = Convert.ToString(obj["msisdn"]);
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+                /*
+                if (string.IsNullOrEmpty(requestId)) requestId = "";
+                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+                if (string.IsNullOrEmpty(token)) token = "";
+                */
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                //Chu y:
+                // Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                if (_tokenObj != null)
+                {
+                    if (_tokenObj.msisdn != msisdn && _tokenObj.role == "USER")
+                    {
+                        logger.Info("Authen token false");
+                        response.responseCode = "35";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                        logger.Info("buyTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                }
+                //Ket thuc check token
+                DataSet ds = lotoDataAccess.otpSend(msisdn, "1", channel, language);
+                if (ds != null && ds.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Send OTP success");
+                    response.responseCode = "0";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                else
+                {
+                    logger.Info("Send OTP not sucess");
+                    response.responseCode = "-2";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+
+                }
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("sendOtp exception: " + ex.ToString());
+
+            }
+            logger.Info("sendOtp response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+        [HttpPost]
+        public IActionResult confirmOtp([FromBody] dynamic sendData)
+        {
+
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+
+            string msisdn = string.Empty, language = string.Empty, otp = string.Empty, token = string.Empty, channel = string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                msisdn = Convert.ToString(obj["msisdn"]);
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                otp = Convert.ToString(obj["otp"]);
+                language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+                /*
+                if (string.IsNullOrEmpty(requestId)) requestId = "";
+                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+                if (string.IsNullOrEmpty(token)) token = "";
+                */
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                //Chu y:
+                // Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                if (_tokenObj != null && _tokenObj.role == "USER")
+                {
+                    if (_tokenObj.msisdn != msisdn)
+                    {
+                        logger.Info("Authen token false");
+                        response.responseCode = "35";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                        logger.Info("buyTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                }
+                //Ket thuc check token
+                DataSet ds = lotoDataAccess.otpConfirm(msisdn, "1", channel, otp, language);
+                if (ds != null && ds.Tables[0].Rows.Count > 0)
+                {
+                    string status = ds.Tables[0].Rows[0]["status"].ToString();
+                    string msg = ds.Tables[0].Rows[0]["mesage"].ToString();
+                    logger.Info("Send OTP success");
+                    response.responseCode = status;
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                else
+                {
+                    logger.Info("Send OTP not sucess");
+                    response.responseCode = "-2";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+
+                }
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("sendOtp exception: " + ex.ToString());
+
+            }
+            logger.Info("sendOtp response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+       
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult convertMoneyByUser([FromBody] dynamic sendData)
+        {
+
+            convertMoneyResponseObj response = new convertMoneyResponseObj();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+            string msisdn = string.Empty, msisdnReceive = string.Empty, money = string.Empty, language = string.Empty,
+                channelPayment = string.Empty, token = string.Empty, channel = string.Empty, serviceId = string.Empty, otp = string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+                serviceId = Convert.ToString(obj["serviceId"]);
+                msisdn = Convert.ToString(obj["msisdn"]);
+                msisdnReceive = Convert.ToString(obj["msisdnReceive"]);
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                channelPayment = Convert.ToString(obj["channelPayment"]);
+                money = Convert.ToString(obj["money"]);
+                language = Convert.ToString(obj["language"]);
+                otp = Convert.ToString(obj["otp"]);
+                if (string.IsNullOrEmpty(language)) language = "1";
+                if (string.IsNullOrEmpty(money)) money = "0";
+                if (string.IsNullOrEmpty(channelPayment)) channelPayment = "-1";
+                if (string.IsNullOrEmpty(channelPayment)) serviceId = "1";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                //Chu y:
+                // Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                if (_tokenObj != null && _tokenObj.role == "USER")
+                {
+                    if (_tokenObj.msisdn != msisdn)
+                    {
+                        logger.Info("_tokenObj.msisdn != msisdn Authen token false");
+                        response.responseCode = "35";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+
+                        return Ok(response);
+                    }
+                }
+                //Ket thuc check token
+
+                if (!(channelPayment == "1" || channelPayment == "2"))
+                {
+                    //He thong nang cap
+                    logger.Info("Tham so sai");
+                    response.responseCode = "4";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    return Ok(response);
+                }    
+
+                if (channelPayment=="2")
+                {
+                    //Kiem tra su ton tai cua vi
+                    string _reqeustCheckWallet = CommonFunction.getGuiId();
+                    //-1: He thong nang cap,1= Vi ton tai va active,2=Khong ton tai vi,3= Vi khong active
+                    string _isexitsWallet = CommonFunction.checkExistsWallet(_redis, _reqeustCheckWallet, msisdnReceive, logger);
+                    if (_isexitsWallet == "-1")
+                    {
+                        //He thong nang cap
+                        logger.Info("Khong check vi duoc");
+                        response.responseCode = "-2";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                        return Ok(response);
+                    }
+                    if (_isexitsWallet == "2")
+                    {
+                        //Vi khong ton tai
+                        logger.Info("Vi khong ton tai");
+                        response.responseCode = "20";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                        return Ok(response);
+                    }
+                    if (_isexitsWallet == "3")
+                    {
+                        //Vi khong active
+                        logger.Info("Vi khong active");
+                        response.responseCode = "21";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                        return Ok(response);
+                    }
+                }    
+                  
+
+/*
+                //Kiem tra them OTP neu ko phai kenh ussd
+                if (channel != "USSD")
+                {
+                    DataSet ds_otp = lotoDataAccess.otpConfirm(msisdn, "1", channel, otp, language);
+                    if (ds_otp != null && ds_otp.Tables[0].Rows.Count > 0)
+                    {
+                        string status = ds_otp.Tables[0].Rows[0]["status"].ToString();
+                        string msg = ds_otp.Tables[0].Rows[0]["mesage"].ToString();
+                        if (status != "0")
+                        {
+                            logger.Info("Confirm OTP not sucess");
+                            response.responseCode = status;
+                            response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                            logger.Info("confirmTicket response : " + response.ToString());
+                            return Ok(response);
+                        }
+
+                    }
+                    else
+                    {
+                        logger.Info("Confirm OTP not sucess");
+                        response.responseCode = "-2";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+
+                    }
+                }
+*/
+
+
+
+
+
+
+
+
+
+                //Kiem tra them vai dieu kien 
+                if (string.IsNullOrEmpty(msisdnReceive))
+                {
+                    logger.Info("msisdnReceive is null");
+                    response.responseCode = "4";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+
+                    return Ok(response);
+                }
+                int _money = 0;
+                if (int.TryParse(money, out _money))
+                {
+                    if (_money <= 0)
+                    {
+                        logger.Info("msisdnReceive is null");
+                        response.responseCode = "4";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                        return Ok(response);
+
+                    }
+
+                }
+                else
+                {
+                    logger.Info("msisdnReceive is null");
+                    response.responseCode = "4";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    return Ok(response);
+
+                }
+
+
+
+                DataSet ds = lotoDataAccess.convertMoney(msisdn, msisdnReceive, channel, channelPayment, money, language, serviceId);
+                if (ds != null && ds.Tables[0].Rows.Count > 0)
+                {
+                    logger.Info("Chuyen tien thanh cong");
+                    response.responseCode = ds.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    response.paymentCode = ds.Tables[0].Rows[0]["paymentCode"].ToString();
+                    return Ok(response);
+
+                }
+                else
+                {
+                    logger.Info("Send convert coins to money not sucess");
+                    response.responseCode = "-2";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+
+                }
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("sendOtp exception: " + ex.ToString());
+
+            }
+            logger.Info("sendOtp response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+        [HttpPost]
+        public IActionResult getListConvertByUser([FromBody] dynamic sendData)
+        {
+
+            convertMoneyListObj response = new convertMoneyListObj();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+                string serviceId = Convert.ToString(obj["serviceId"]);
+                string msisdn = Convert.ToString(obj["msisdn"]);
+
+                string id = Convert.ToString(obj["id"]);
+                string type = Convert.ToString(obj["type"]); // --0=dang thuc hien,1=thuc hien thanh cong,2=pending,3=revert
+                string order = Convert.ToString(obj["order"]); // ASC= tang dan theo ID ticket,DESC= giam dan theo Id ticket
+                string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+                string seqPage = Convert.ToString(obj["seqPage"]);
+
+                string channel = Convert.ToString(obj["channel"]);
+                string fromDate = Convert.ToString(obj["fromDate"]);
+                string toDate = Convert.ToString(obj["toDate"]);
+                string channelPayment = Convert.ToString(obj["channelPayment"]);
+
+                string token = Convert.ToString(obj["token"]);
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "1";
+
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+                if (string.IsNullOrEmpty(id)) id = "-1";
+
+                if (string.IsNullOrEmpty(type)) type = "-1";
+                if (string.IsNullOrEmpty(order)) order = "ASC";
+
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                if (string.IsNullOrEmpty(channelPayment)) channelPayment = "-1";
+                
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                //Chu y:
+                // Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                if (_tokenObj != null && _tokenObj.role == "USER")
+                {
+                    if (_tokenObj.msisdn != msisdn)
+                    {
+                        logger.Info("Authen token false");
+                        response.responseCode = "35";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+
+                        return Ok(response);
+                    }
+                }
+
+
+                DataSet ds_regist = lotoDataAccess.getListConvertByUser(serviceId, msisdn, type, order, rowsOnPage, seqPage, id, language, fromDate, toDate, channelPayment);
+                response.responseCode = "0";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                if (ds_regist != null && ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+                    response.totalRow = ds_regist.Tables[0].Rows[0]["TOTAL_ROW"].ToString();
+                    response.list = new convertMoneyObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        convertMoneyObj _obj = new convertMoneyObj();
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["SEQ"].ToString();
+                        _obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        _obj.acountSend = ds_regist.Tables[0].Rows[j]["ACOUNT_SEND"].ToString();
+                        _obj.acountRecieve = ds_regist.Tables[0].Rows[j]["ACOUNT_RECEIVE"].ToString();
+                        _obj.timeRequest = ds_regist.Tables[0].Rows[j]["TIMEREQUEST"].ToString();
+                        _obj.timeTopup = ds_regist.Tables[0].Rows[j]["TIMETOPUP"].ToString();
+                        _obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        _obj.money = ds_regist.Tables[0].Rows[j]["MONEY"].ToString();
+                        _obj.channelRequest = ds_regist.Tables[0].Rows[j]["CHANNEL_REQUEST"].ToString();
+                        _obj.channelPayment = ds_regist.Tables[0].Rows[j]["CHANNEL_PAYMENT"].ToString();
+                        _obj.reqeustId = ds_regist.Tables[0].Rows[j]["REQEUST_ID"].ToString();
+                        _obj.responseId = ds_regist.Tables[0].Rows[j]["RESPONSE_ID"].ToString();
+                        _obj.errCode = ds_regist.Tables[0].Rows[j]["ERR_CODE"].ToString();
+                        _obj.errMsg = ds_regist.Tables[0].Rows[j]["ERR_MSG"].ToString();
+                        _obj.serviceId = ds_regist.Tables[0].Rows[j]["SERVICE_ID"].ToString();
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                    return Ok(response);
+
+                }
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("sendOtp exception: " + ex.ToString());
+
+            }
+            logger.Info("sendOtp response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+        //{"id":"1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult paramGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceGetList :" + sendData.ToString());
+            paramObjList response = new paramObjList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string id = Convert.ToString(userObj["id"]);
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+
+                if (string.IsNullOrEmpty(language)) language = "1";
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(id)) id = "-1";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+                DataSet ds_regist = lotoDataAccess.paramGetList(id, users);
+                logger.Info("Call database balGetList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+
+
+
+                    response.list = new paramObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        paramObj _obj = new paramObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+                        _obj.values = ds_regist.Tables[0].Rows[j]["SVALUES"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+                        _obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        _obj.codeGroup = ds_regist.Tables[0].Rows[j]["CODE_GROUP"].ToString();
+
+
+                        _obj.display0 = ds_regist.Tables[0].Rows[j]["DISPLAY0"].ToString();
+                        _obj.display1 = ds_regist.Tables[0].Rows[j]["DISPLAY1"].ToString();
+                        _obj.display2 = ds_regist.Tables[0].Rows[j]["DISPLAY2"].ToString();
+                        _obj.display3 = ds_regist.Tables[0].Rows[j]["DISPLAY3"].ToString();
+                        _obj.display4 = ds_regist.Tables[0].Rows[j]["DISPLAY4"].ToString();
+                        _obj.display5 = ds_regist.Tables[0].Rows[j]["DISPLAY5"].ToString();
+
+                        _obj.gameId = ds_regist.Tables[0].Rows[j]["GAME_ID"].ToString();
+                        _obj.channel = ds_regist.Tables[0].Rows[j]["CHANNEL"].ToString();
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        /*
+        {"code":"124","values":"Cty Viettech 1","note":"0","status":"1","codeGroup":"quangbh","display0":"display0","display1":"display1","display2":"display2","display3":"display3","display4":"display4","display5":"display5","gameId":"1","channel":"channel","users":"haha","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+         */
+        public IActionResult paramInsert([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income balanceInsert :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string code = Convert.ToString(userObj["code"]);
+                string values = Convert.ToString(userObj["values"]);
+                string note = Convert.ToString(userObj["note"]);
+                string status = Convert.ToString(userObj["status"]);
+                string codeGroup = Convert.ToString(userObj["codeGroup"]);
+
+                string display0 = Convert.ToString(userObj["display0"]);
+                string display1 = Convert.ToString(userObj["display1"]);
+                string display2 = Convert.ToString(userObj["display2"]);
+                string display3 = Convert.ToString(userObj["display3"]);
+                string display4 = Convert.ToString(userObj["display4"]);
+                string display5 = Convert.ToString(userObj["display5"]);
+
+                string gameId = Convert.ToString(userObj["gameId"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string token = Convert.ToString(userObj["token"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+                string key = Convert.ToString(userObj["key"]);
+                    string language = Convert.ToString(userObj["language"]);
+
+                
+
+
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(codeGroup)) codeGroup = "-1";
+                if (string.IsNullOrEmpty(language)) language = "1";
+
+
+
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(key)) key = "-1";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = lotoDataAccess.paramInsert(code, values, note, status, codeGroup, display0, display1,
+                    display2, display3, display4, display5, gameId, channel, users);
+                logger.Info("Call database balInsert success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        /*
+       {"id":"1","code":"124","values":"Cty Viettech 1","note":"0","status":"1","codeGroup":"quangbh","display0":"display0","display1":"display1","display2":"displayso 3","display3":"display3","display4":"display4","display5":"display5","gameId":"1","channel":"channel","type":"0","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+
+         */
+
+        public IActionResult paramUpdate([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income companyGetList :" + sendData.ToString());
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string id = Convert.ToString(userObj["id"]);
+
+                string code = Convert.ToString(userObj["code"]);
+                string values = Convert.ToString(userObj["values"]);
+                string note = Convert.ToString(userObj["note"]);
+                string status = Convert.ToString(userObj["status"]);
+                string codeGroup = Convert.ToString(userObj["codeGroup"]);
+
+                string display0 = Convert.ToString(userObj["display0"]);
+                string display1 = Convert.ToString(userObj["display1"]);
+                string display2 = Convert.ToString(userObj["display2"]);
+                string display3 = Convert.ToString(userObj["display3"]);
+                string display4 = Convert.ToString(userObj["display4"]);
+                string display5 = Convert.ToString(userObj["display5"]);
+
+                string gameId = Convert.ToString(userObj["gameId"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+                string type = Convert.ToString(userObj["type"]);
+
+
+                string users = Convert.ToString(userObj["users"]);
+
+
+                string token = Convert.ToString(userObj["token"]);
+                string language = Convert.ToString(userObj["language"]);
+
+
+
+
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(type)) type = "0";
+                if (string.IsNullOrEmpty(language)) language = "1";
+
+
+
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+                DataSet ds_regist = lotoDataAccess.paramUpdate(id, code, values, note, status, codeGroup, display0, display1,
+                    display2, display3, display4, display5, gameId, channel, users, type);
+                logger.Info("Call database comInsert success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult rpTotalByDay([FromBody] dynamic sendData)
+        {
+
+            rpTotalByDayListObj response = new rpTotalByDayListObj();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+               
+                string msisdn = Convert.ToString(obj["msisdn"]);
+
+                string gameId = Convert.ToString(obj["gameId"]);
+                string gameType = Convert.ToString(obj["gameType"]); // --1=Newyork,2=Florida
+                string isEvening = Convert.ToString(obj["isEvening"]); // --1=evening,0= not evening
+                
+                string channel = Convert.ToString(obj["channel"]);
+                string fromDate = Convert.ToString(obj["fromDate"]);
+                string toDate = Convert.ToString(obj["toDate"]);
+                
+
+                string token = Convert.ToString(obj["token"]);
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "1";
+
+               
+
+                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+
+                if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+                if (string.IsNullOrEmpty(gameType)) gameType = "-1";
+
+                if (string.IsNullOrEmpty(isEvening)) isEvening = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                string channelPayment = Convert.ToString(obj["channelPayment"]);
+                if (string.IsNullOrEmpty(channelPayment)) channelPayment = "-1";
+
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                //Chu y:
+                // Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                //if (_tokenObj != null && _tokenObj.role == "USER")
+                //{
+                //    if (_tokenObj.msisdn != msisdn)
+                //    {
+                //        logger.Info("Authen token false");
+                //        response.responseCode = "35";
+                //        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+
+                //        return Ok(response);
+                //    }
+                //}
+
+
+                DataSet ds_regist = lotoDataAccess.reTotalByDay(msisdn, fromDate, toDate, gameId, gameType, isEvening, channelPayment);
+                response.responseCode = "0";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                if (ds_regist != null && ds_regist.Tables[0].Rows.Count > 0)
+                {
+                   
+                    response.list = new rpTotalByDayObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        rpTotalByDayObj _obj = new rpTotalByDayObj();
+                        _obj.date = ds_regist.Tables[0].Rows[j]["ngay"].ToString();
+                        _obj.player = ds_regist.Tables[0].Rows[j]["player"].ToString();
+                        _obj.ticket = ds_regist.Tables[0].Rows[j]["ticket"].ToString();
+                        _obj.money = ds_regist.Tables[0].Rows[j]["money"].ToString();
+                        _obj.palyerWin = ds_regist.Tables[0].Rows[j]["player_win"].ToString();
+                        _obj.ticketWin = ds_regist.Tables[0].Rows[j]["ticket_win"].ToString();
+                        _obj.moneyWin = ds_regist.Tables[0].Rows[j]["money_win"].ToString();
+                        _obj.benefit = ds_regist.Tables[0].Rows[j]["benefit"].ToString();
+                        _obj.sharing = ds_regist.Tables[0].Rows[j]["sharing"].ToString();
+
+
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                    return Ok(response);
+
+                }
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("sendOtp exception: " + ex.ToString());
+                
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("sendOtp response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult rpTotalByDayLkps([FromBody] dynamic sendData)
+        {
+
+            rpTotalByDayListObj response = new rpTotalByDayListObj();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                string msisdn = Convert.ToString(obj["msisdn"]);
+
+                string channel = Convert.ToString(obj["channel"]);
+                string fromDate = Convert.ToString(obj["fromDate"]);
+                string toDate = Convert.ToString(obj["toDate"]);
+
+
+                string token = Convert.ToString(obj["token"]);
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "1";
+
+
+
+                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+
+               
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                string channelPayment = Convert.ToString(obj["channelPayment"]);
+                if (string.IsNullOrEmpty(channelPayment)) channelPayment = "-1";
+
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                //Chu y:
+                // Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                //if (_tokenObj != null && _tokenObj.role == "USER")
+                //{
+                //    if (_tokenObj.msisdn != msisdn)
+                //    {
+                //        logger.Info("Authen token false");
+                //        response.responseCode = "35";
+                //        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+
+                //        return Ok(response);
+                //    }
+                //}
+
+
+                DataSet ds_regist = lotoDataAccess.reTotalByDayLkps(msisdn, fromDate, toDate, channelPayment);
+                response.responseCode = "0";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                if (ds_regist != null && ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.list = new rpTotalByDayObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        rpTotalByDayObj _obj = new rpTotalByDayObj();
+                        _obj.date = ds_regist.Tables[0].Rows[j]["ngay"].ToString();
+                        _obj.player = ds_regist.Tables[0].Rows[j]["player"].ToString();
+                        _obj.ticket = ds_regist.Tables[0].Rows[j]["ticket"].ToString();
+                        _obj.money = ds_regist.Tables[0].Rows[j]["money"].ToString();
+                        _obj.palyerWin = ds_regist.Tables[0].Rows[j]["player_win"].ToString();
+                        _obj.ticketWin = ds_regist.Tables[0].Rows[j]["ticket_win"].ToString();
+                        _obj.moneyWin = ds_regist.Tables[0].Rows[j]["money_win"].ToString();
+                        _obj.benefit = ds_regist.Tables[0].Rows[j]["benefit"].ToString();
+                        _obj.sharing = ds_regist.Tables[0].Rows[j]["sharing"].ToString();
+
+
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                    return Ok(response);
+
+                }
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("sendOtp exception: " + ex.ToString());
+
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("sendOtp response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+        [HttpPost]
+        public IActionResult rpTotalByDayConvertMoney([FromBody] dynamic sendData)
+        {
+
+            rpTotalByDayConvetMoneyListObj response = new rpTotalByDayConvetMoneyListObj();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+             
+
+                string channel = Convert.ToString(obj["channel"]);
+                
+                string fromDate = Convert.ToString(obj["fromDate"]);
+                string toDate = Convert.ToString(obj["toDate"]);
+
+
+                string token = Convert.ToString(obj["token"]);
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "1";
+
+
+
+              
+               
+               
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                string channelPayment = Convert.ToString(obj["channelPayment"]);
+                if (string.IsNullOrEmpty(channelPayment)) channelPayment = "-1";
+
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                //Chu y:
+                // Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                //if (_tokenObj != null && _tokenObj.role == "USER")
+                //{
+                //    if (_tokenObj.msisdn != msisdn)
+                //    {
+                //        logger.Info("Authen token false");
+                //        response.responseCode = "35";
+                //        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+
+                //        return Ok(response);
+                //    }
+                //}
+
+
+                DataSet ds_regist = lotoDataAccess.reTotalByDayConvertMoney(fromDate, toDate,  channelPayment);
+                response.responseCode = "0";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                if (ds_regist != null && ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.list = new rpTotalByDayConvetMoneyObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        rpTotalByDayConvetMoneyObj _obj = new rpTotalByDayConvetMoneyObj();
+                        _obj.date = ds_regist.Tables[0].Rows[j]["ngay"].ToString();
+                        _obj.total = ds_regist.Tables[0].Rows[j]["total"].ToString();
+                        _obj.money = ds_regist.Tables[0].Rows[j]["money"].ToString();
+                        _obj.totalSuccess = ds_regist.Tables[0].Rows[j]["totalSucces"].ToString();
+                        _obj.moneySuccess = ds_regist.Tables[0].Rows[j]["moneySuccess"].ToString();
+                        _obj.totalRevert = ds_regist.Tables[0].Rows[j]["totalRevert"].ToString();
+                        _obj.moneyRevert = ds_regist.Tables[0].Rows[j]["moneyRevert"].ToString();
+                        _obj.totalPending = ds_regist.Tables[0].Rows[j]["totalPending"].ToString();
+                        _obj.moneyPending = ds_regist.Tables[0].Rows[j]["moneyPending"].ToString();
+
+
+                        response.list[j] = _obj;
+                    }
+
+                    return Ok(response);
+
+                }
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("sendOtp exception: " + ex.ToString());
+
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("sendOtp response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+        [HttpPost]
+        public IActionResult rpTotalByPrizeBolet([FromBody] dynamic sendData)
+        {
+
+            rpTotalByDayPrizwBoletListObj response = new rpTotalByDayPrizwBoletListObj();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                string msisdn = Convert.ToString(obj["msisdn"]);
+
+               
+                string gameType = Convert.ToString(obj["gameType"]); // --1=Newyork,2=Florida
+                string isEvening = Convert.ToString(obj["isEvening"]); // --1=evening,0= not evening
+
+                string channel = Convert.ToString(obj["channel"]);
+                string fromDate = Convert.ToString(obj["fromDate"]);
+                string toDate = Convert.ToString(obj["toDate"]);
+
+
+                string token = Convert.ToString(obj["token"]);
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "1";
+
+
+
+                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+
+                
+                if (string.IsNullOrEmpty(gameType)) gameType = "-1";
+
+                if (string.IsNullOrEmpty(isEvening)) isEvening = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+
+
+                string channelPayment = Convert.ToString(obj["channelPayment"]);
+                if (string.IsNullOrEmpty(channelPayment)) channelPayment = "-1";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                //Chu y:
+                // Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                //if (_tokenObj != null && _tokenObj.role == "USER")
+                //{
+                //    if (_tokenObj.msisdn != msisdn)
+                //    {
+                //        logger.Info("Authen token false");
+                //        response.responseCode = "35";
+                //        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+
+                //        return Ok(response);
+                //    }
+                //}
+
+
+                DataSet ds_regist = lotoDataAccess.reTotalByDayPrizeBolet(msisdn, fromDate, toDate, gameType, isEvening, channelPayment);
+                response.responseCode = "0";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                if (ds_regist != null && ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.list = new rpTotalByDayPrizeBoletObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        rpTotalByDayPrizeBoletObj _obj = new rpTotalByDayPrizeBoletObj();
+                        _obj.date = ds_regist.Tables[0].Rows[j]["ngay"].ToString();
+                        _obj.player = ds_regist.Tables[0].Rows[j]["player"].ToString();
+                        _obj.ticket = ds_regist.Tables[0].Rows[j]["ticket"].ToString();
+                        _obj.money = ds_regist.Tables[0].Rows[j]["money"].ToString();
+                        _obj.palyerWin = ds_regist.Tables[0].Rows[j]["player_win"].ToString();
+                        _obj.ticketWin = ds_regist.Tables[0].Rows[j]["ticket_win"].ToString();
+                        _obj.moneyWin = ds_regist.Tables[0].Rows[j]["money_win"].ToString();
+                        _obj.ticketWinLot1 = ds_regist.Tables[0].Rows[j]["ticket_win_lot1"].ToString();
+                        _obj.moneyWinLot1 = ds_regist.Tables[0].Rows[j]["money_win_lot1"].ToString();
+                        _obj.ticketWinLot2 = ds_regist.Tables[0].Rows[j]["ticket_win_lot2"].ToString();
+                        _obj.moneyWinLot2 = ds_regist.Tables[0].Rows[j]["money_win_lot2"].ToString();
+                        _obj.ticketWinLot3 = ds_regist.Tables[0].Rows[j]["ticket_win_lot3"].ToString();
+                        _obj.moneyWinLot3 = ds_regist.Tables[0].Rows[j]["money_win_lot3"].ToString();
+
+
+                        response.list[j] = _obj;
+                    }
+
+                    return Ok(response);
+
+                }
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("sendOtp exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("sendOtp response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+        [HttpPost]
+        public IActionResult rpSearchDetailTicket([FromBody] dynamic sendData)
+        {
+
+            reSearchDetailBetListObj response = new reSearchDetailBetListObj();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                string msisdn = Convert.ToString(obj["msisdn"]);
+
+                string gameId = Convert.ToString(obj["gameId"]);
+                string gameType = Convert.ToString(obj["gameType"]); // --1=Newyork,2=Florida
+                string isEvening = Convert.ToString(obj["isEvening"]); // --1=evening,0= not evening
+
+                string channel = Convert.ToString(obj["channel"]);
+                string fromDate = Convert.ToString(obj["fromDate"]);
+                string toDate = Convert.ToString(obj["toDate"]);
+                string isWin = Convert.ToString(obj["isWin"]);
+
+
+                string token = Convert.ToString(obj["token"]);
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "1";
+
+
+
+                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+
+                if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+                if (string.IsNullOrEmpty(gameType)) gameType = "-1";
+
+                if (string.IsNullOrEmpty(isEvening)) isEvening = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(isWin)) isWin = "-1";
+
+                string channelPayment = Convert.ToString(obj["channelPayment"]);
+                if (string.IsNullOrEmpty(channelPayment)) channelPayment = "-1";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                ////Chu y:
+                //// Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                //if (_tokenObj != null && _tokenObj.role == "USER")
+                //{
+                //    if (_tokenObj.msisdn != msisdn)
+                //    {
+                //        logger.Info("Authen token false");
+                //        response.responseCode = "35";
+                //        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+
+                //        return Ok(response);
+                //    }
+                //}
+
+
+                DataSet ds_regist = lotoDataAccess.reSearDeatailBet(msisdn, fromDate, toDate, gameId, gameType, isEvening, channelPayment, isWin);
+                response.responseCode = "0";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                if (ds_regist != null && ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.list = new reSearchDetailBetObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        reSearchDetailBetObj _obj = new reSearchDetailBetObj();
+                        _obj.msisdn = ds_regist.Tables[0].Rows[j]["USERS"].ToString();
+                        _obj.lottery = ds_regist.Tables[0].Rows[j]["LOTTERY"].ToString();
+                        _obj.game = ds_regist.Tables[0].Rows[j]["GAME"].ToString();
+                        _obj.channel = ds_regist.Tables[0].Rows[j]["CHANNEL"].ToString();
+                        _obj.ticketId = ds_regist.Tables[0].Rows[j]["ticketID"].ToString();
+                        _obj.ticketCode = ds_regist.Tables[0].Rows[j]["ticketCode"].ToString();
+                        _obj.buyTime = ds_regist.Tables[0].Rows[j]["vsysdate"].ToString();
+                        _obj.isEvening = ds_regist.Tables[0].Rows[j]["IS_EVENING"].ToString();
+                        _obj.drawTime = ds_regist.Tables[0].Rows[j]["DATE_RANDOM"].ToString();
+                        _obj.money = ds_regist.Tables[0].Rows[j]["MONEY"].ToString();
+                        _obj.moneyWin = ds_regist.Tables[0].Rows[j]["MONEY_WIN"].ToString();
+                        _obj.result = ds_regist.Tables[0].Rows[j]["str"].ToString();
+
+
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                    return Ok(response);
+
+                }
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("sendOtp exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("sendOtp response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult rpSearchDetailTicketLkps([FromBody] dynamic sendData)
+        {
+
+            reSearchDetailBetListObj response = new reSearchDetailBetListObj();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                string msisdn = Convert.ToString(obj["msisdn"]);
+
+              
+
+                string channel = Convert.ToString(obj["channel"]);
+                string fromDate = Convert.ToString(obj["fromDate"]);
+                string toDate = Convert.ToString(obj["toDate"]);
+                string isWin = Convert.ToString(obj["isWin"]);
+
+
+                string token = Convert.ToString(obj["token"]);
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "1";
+
+
+
+                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+
+               
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(isWin)) isWin = "-1";
+
+                string channelPayment = Convert.ToString(obj["channelPayment"]);
+                if (string.IsNullOrEmpty(channelPayment)) channelPayment = "-1";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                ////Chu y:
+                //// Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                //if (_tokenObj != null && _tokenObj.role == "USER")
+                //{
+                //    if (_tokenObj.msisdn != msisdn)
+                //    {
+                //        logger.Info("Authen token false");
+                //        response.responseCode = "35";
+                //        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+
+                //        return Ok(response);
+                //    }
+                //}
+
+
+                DataSet ds_regist = lotoDataAccess.reSearDeatailBetLkps(msisdn, fromDate, toDate,  channelPayment, isWin);
+                response.responseCode = "0";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                if (ds_regist != null && ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.list = new reSearchDetailBetObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        reSearchDetailBetObj _obj = new reSearchDetailBetObj();
+                        _obj.msisdn = ds_regist.Tables[0].Rows[j]["USERS"].ToString();
+                        
+                     
+                        _obj.channel = ds_regist.Tables[0].Rows[j]["CHANNEL"].ToString();
+                        _obj.ticketId = ds_regist.Tables[0].Rows[j]["ticketID"].ToString();
+                        _obj.ticketCode = ds_regist.Tables[0].Rows[j]["ticketCode"].ToString();
+                        _obj.buyTime = ds_regist.Tables[0].Rows[j]["vsysdate"].ToString();
+                    
+                        _obj.drawTime = ds_regist.Tables[0].Rows[j]["DATE_RANDOM"].ToString();
+                        _obj.money = ds_regist.Tables[0].Rows[j]["MONEY"].ToString();
+                        _obj.moneyWin = ds_regist.Tables[0].Rows[j]["MONEY_WIN"].ToString();
+                        _obj.result = ds_regist.Tables[0].Rows[j]["str"].ToString();
+
+
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                    return Ok(response);
+
+                }
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("sendOtp exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("sendOtp response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult rpSearchDetailTicketUniqueMsisdn([FromBody] dynamic sendData)
+        {
+
+            reSearchDetailBetListObj response = new reSearchDetailBetListObj();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                string msisdn = Convert.ToString(obj["msisdn"]);
+
+                string gameId = Convert.ToString(obj["gameId"]);
+                string gameType = Convert.ToString(obj["gameType"]); // --1=Newyork,2=Florida
+                string isEvening = Convert.ToString(obj["isEvening"]); // --1=evening,0= not evening
+
+                string channel = Convert.ToString(obj["channel"]);
+                string fromDate = Convert.ToString(obj["fromDate"]);
+                string toDate = Convert.ToString(obj["toDate"]);
+                string isWin = Convert.ToString(obj["isWin"]);
+
+
+                string token = Convert.ToString(obj["token"]);
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "1";
+
+
+
+                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+
+                if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+                if (string.IsNullOrEmpty(gameType)) gameType = "-1";
+
+                if (string.IsNullOrEmpty(isEvening)) isEvening = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(isWin)) isWin = "-1";
+
+                string channelPayment = Convert.ToString(obj["channelPayment"]);
+                if (string.IsNullOrEmpty(channelPayment)) channelPayment = "-1";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                ////Chu y:
+                //// Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                //if (_tokenObj != null && _tokenObj.role == "USER")
+                //{
+                //    if (_tokenObj.msisdn != msisdn)
+                //    {
+                //        logger.Info("Authen token false");
+                //        response.responseCode = "35";
+                //        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+
+                //        return Ok(response);
+                //    }
+                //}
+
+
+                DataSet ds_regist = lotoDataAccess.reSearDeatailBetUniqueMsisdn(msisdn, fromDate, toDate, gameId, gameType, isEvening, channelPayment, isWin);
+                response.responseCode = "0";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                if (ds_regist != null && ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.list = new reSearchDetailBetObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        reSearchDetailBetObj _obj = new reSearchDetailBetObj();
+                        _obj.msisdn = ds_regist.Tables[0].Rows[j]["USERS"].ToString();
+                        _obj.lottery = ds_regist.Tables[0].Rows[j]["LOTTERY"].ToString();
+                        _obj.game = ds_regist.Tables[0].Rows[j]["GAME"].ToString();
+                        _obj.channel = ds_regist.Tables[0].Rows[j]["CHANNEL"].ToString();
+                        _obj.ticketId = ds_regist.Tables[0].Rows[j]["ticketID"].ToString();
+                        _obj.ticketCode = ds_regist.Tables[0].Rows[j]["ticketCode"].ToString();
+                        _obj.buyTime = ds_regist.Tables[0].Rows[j]["vsysdate"].ToString();
+                        _obj.isEvening = ds_regist.Tables[0].Rows[j]["IS_EVENING"].ToString();
+                        _obj.drawTime = ds_regist.Tables[0].Rows[j]["DATE_RANDOM"].ToString();
+                        _obj.money = ds_regist.Tables[0].Rows[j]["MONEY"].ToString();
+                        _obj.moneyWin = ds_regist.Tables[0].Rows[j]["MONEY_WIN"].ToString();
+                        _obj.result = ds_regist.Tables[0].Rows[j]["str"].ToString();
+
+
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                    return Ok(response);
+
+                }
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("sendOtp exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("sendOtp response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+        [HttpPost]
+        public IActionResult updateResultManua([FromBody] dynamic sendData)
+        {
+
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                string termId = Convert.ToString(obj["termId"]);
+
+                string result = Convert.ToString(obj["result"]);
+                string users = Convert.ToString(obj["users"]); 
+                
+
+                string channel = Convert.ToString(obj["channel"]);
+               
+
+                string token = Convert.ToString(obj["token"]);
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "1";
+
+
+
+                if (string.IsNullOrEmpty(termId)) termId = "-1";
+                if (string.IsNullOrEmpty(result)) result = "-1";
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+                DataSet ds_regist = lotoDataAccess.resultUpdateManual(termId,result,users);
+                logger.Info("Call database resultUpdateManual success:");
+                if(ds_regist!=null && ds_regist.Tables[0].Rows.Count>0)
+                {
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                }    
+                else
+                {
+                    response.responseCode = "0";
+                    response.responseMessage = "nodata";
+                }    
+                
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("sendOtp exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("sendOtp response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult rpSearchDetailMtBuyMsisdn([FromBody] dynamic sendData)
+        {
+
+            mtList response = new mtList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                string msisdn = Convert.ToString(obj["msisdn"]);
+
+              
+                string channel = Convert.ToString(obj["channel"]);
+                string fromDate = Convert.ToString(obj["fromDate"]);
+                string toDate = Convert.ToString(obj["toDate"]);
+               
+
+                string token = Convert.ToString(obj["token"]);
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "1";
+
+
+
+                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+
+               
+             
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+            
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                ////Chu y:
+                //// Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                //if (_tokenObj != null && _tokenObj.role == "USER")
+                //{
+                //    if (_tokenObj.msisdn != msisdn)
+                //    {
+                //        logger.Info("Authen token false");
+                //        response.responseCode = "35";
+                //        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+
+                //        return Ok(response);
+                //    }
+                //}
+
+
+                DataSet ds_regist = lotoDataAccess.reSearDeatailMt(msisdn, fromDate, toDate);
+                response.responseCode = "0";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                if (ds_regist != null && ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.list = new mtObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        mtObj _obj = new mtObj();
+                        _obj.id = ds_regist.Tables[0].Rows[j]["MT_HIS_ID"].ToString();
+                        _obj.msisdn = ds_regist.Tables[0].Rows[j]["MSISDN"].ToString();
+                        _obj.message = ds_regist.Tables[0].Rows[j]["MESSAGE"].ToString();
+                        _obj.sendTime = ds_regist.Tables[0].Rows[j]["SENT_TIME"].ToString();
+                        _obj.receiveTime = ds_regist.Tables[0].Rows[j]["RECEIVE_TIME"].ToString();
+                        _obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        _obj.channel = ds_regist.Tables[0].Rows[j]["CHANNEL"].ToString();
+                        
+                        response.list[j] = _obj;
+                    }
+
+                    return Ok(response);
+
+                }
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("sendOtp exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("sendOtp response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+    }
+}

+ 2501 - 0
ApiWeb/ApiProcessToken/Controllers/luckyGame.cs

@@ -0,0 +1,2501 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Memory;
+
+using Newtonsoft.Json.Linq;
+using ResfullApi.Models;
+
+using System.Data;
+
+using System.Net;
+using System.Net.Http;
+
+using ApiProcess.Models.bet;
+using Newtonsoft.Json;
+using System.Collections;
+using System.Web;
+using System.Text;
+using System.Security.Cryptography;
+using ResfullApi.Models.bet;
+using System.Globalization;
+using System.IO;
+using System.Xml;
+using CommonObj.common;
+using CommonObj.model;
+
+namespace ApiProcess.Controllers
+{
+    
+
+    [ApiController]
+    [Route("api/[controller]/[action]/data")]
+    public class luckyGame : ControllerBase
+    {
+
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(luckyGame));
+
+        private IMemoryCache memoryCache;
+        public luckyGame(IMemoryCache memoryCache)
+        {
+            this.memoryCache = memoryCache;
+        }
+
+
+
+        [HttpPost]
+        public IActionResult getCurentAndPreviousTerm([FromBody] dynamic sendData)
+        {
+            objCurentTerm response = new objCurentTerm();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+
+            string serviceId = string.Empty, gameId = string.Empty, language = string.Empty, key = string.Empty,channel=string.Empty;
+           
+
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage=string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig=string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+            
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                 serviceId = Convert.ToString(obj["serviceId"]);
+                 gameId = Convert.ToString(obj["gameId"]);
+                 language = Convert.ToString(obj["language"]);
+                channel = Convert.ToString(obj["channel"]);
+                key = Convert.ToString(obj["key"]);
+
+
+                if (string.IsNullOrEmpty(gameId)) gameId = "1";
+                if (string.IsNullOrEmpty(key)) key = "-1";
+                if (string.IsNullOrEmpty(language)) language = "0";
+                if (string.IsNullOrEmpty(channel)) channel = "APP";
+
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                //string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+               
+
+
+
+
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+                
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, language, urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, channel);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+                DataSet ds_regist = ResfullApi.Models.bet.lotoDataAccess.getCurentTerm(serviceId, gameId, language);
+                logger.Info("Call database getCurentTerm success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+                    objTerm _term = new objTerm();
+                    _term.dateStart = ds_regist.Tables[0].Rows[0]["DATE_START"].ToString();
+                    _term.dateEnd = ds_regist.Tables[0].Rows[0]["DATE_END"].ToString();
+                    _term.dateRandom = ds_regist.Tables[0].Rows[0]["DATE_RANDOM"].ToString();
+                    _term.termId = ds_regist.Tables[0].Rows[0]["id"].ToString();
+                    _term.money = ds_regist.Tables[0].Rows[0]["money"].ToString();
+                    response.curentTerm = _term;
+
+
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, language, urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, channel);
+            }
+            //response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, language, urlPostGetErrCodeMessage,keyPostGetErrCodeMessage);
+            return Ok(response);
+
+        }
+
+
+
+
+
+        [HttpPost]
+        public IActionResult getParam([FromBody] dynamic sendData)
+        {
+
+
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+            
+
+            objParams response = new objParams();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+
+               
+
+                logger.Info("Request from UI getMoney: " + sendData.ToString());
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                string serviceId = Convert.ToString(obj["serviceId"]);
+                string gameId = Convert.ToString(obj["gameId"]);
+                string groupCode = Convert.ToString(obj["groupCode"]);
+                string code = Convert.ToString(obj["code"]);
+                string language = Convert.ToString(obj["language"]);
+                string key = Convert.ToString(obj["key"]);
+                string channel = Convert.ToString(obj["channel"]);
+
+
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+                if (string.IsNullOrEmpty(key)) key = "-1";
+                if (string.IsNullOrEmpty(language)) language = "0";
+                if (string.IsNullOrEmpty(groupCode)) groupCode = "-1";
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(channel)) channel = "APP";
+
+
+/*
+            if (_isCheckToken == "1")
+            {
+
+                string token = Convert.ToString(obj["token"]);
+                logger.Info("****************************Xu ly check token*****************************");
+                string _msisdnfromToken = "", _resultCheckToken = "1", _msgCheckToken = "";
+                if (true)
+                {
+                    _resultCheckToken = Common.checkToken("", "WEB", token, out _msisdnfromToken, out _msgCheckToken);
+                    if (_resultCheckToken != "0")
+                    {
+                        logger.Info("the command: check token false with code: " + _resultCheckToken + " and message" + _msgCheckToken + " and msisdn: " + _msisdnfromToken);
+                        response.responseCode = "35";
+                        response.responseMessage = "check token false";
+
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        logger.Info("check token success");
+                    }
+                }
+                logger.Info("****************************Het xu ly check token*****************************");
+            }
+
+*/
+
+
+
+
+
+
+
+
+
+            try
+            {
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, language, urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, channel);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+                DataSet ds_regist = ResfullApi.Models.bet.lotoDataAccess.getParams(serviceId, gameId, language, groupCode, code);
+                logger.Info("Call database getMoney success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+
+                    response.paramList = new objParam[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        objParam _obj = new objParam();
+
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        _obj.codeGroup = ds_regist.Tables[0].Rows[j]["CODE_GROUP"].ToString();
+                        _obj.values = ds_regist.Tables[0].Rows[j]["SVALUES"].ToString();
+                        _obj.display = ds_regist.Tables[0].Rows[j]["display"].ToString();
+
+
+                        response.paramList[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getParam exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, language, urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, channel);
+
+            }
+
+
+           
+
+
+
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+        [HttpPost]
+        public IActionResult getMoney([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+           
+
+
+
+            betMoneyObjList response = new betMoneyObjList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getMoney: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+            string serviceId = Convert.ToString(obj["serviceId"]);
+            string gameId = Convert.ToString(obj["gameId"]);
+            string language = Convert.ToString(obj["language"]);
+            string key = Convert.ToString(obj["key"]);
+            string channel = Convert.ToString(obj["channel"]);
+
+
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(key)) key = "-1";
+            if (string.IsNullOrEmpty(language)) language = "0";
+            if (string.IsNullOrEmpty(channel)) channel = "APP";
+
+
+
+            //Check token
+            var userObj = JObject.Parse(sendData.ToString());
+            string token = Convert.ToString(userObj["token"]);
+            //string channel = Convert.ToString(userObj["channel"]);
+
+
+            string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+            string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+            string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+            redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+            if (!_redis.connet())
+            {
+                logger.Info("Connect to redis false");
+                response.responseCode = "-2";
+                response.responseMessage = "System Update";
+                return Ok(response);
+            }
+            if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+            {
+                logger.Info("Authen token false");
+                response.responseCode = "35";
+                response.responseMessage = "Check Authen false";
+                return Ok(response);
+            }
+            //Ket thuc check token
+
+
+
+
+
+
+
+
+            try
+            {
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, language, urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, channel);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+                DataSet ds_regist = ResfullApi.Models.bet.lotoDataAccess.getMoney(serviceId, gameId, language);
+                logger.Info("Call database getMoney success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+                    response.gameId = gameId;
+                    response.listMoney = new betMoneyObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        betMoneyObj _obj = new betMoneyObj();
+
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        _obj.money = ds_regist.Tables[0].Rows[j]["money"].ToString();
+
+                        response.listMoney[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("getMoney exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, language, urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, channel);
+            }
+
+
+
+            return Ok(response);
+
+        }
+
+
+        //Chuyen doi trang thai cua mot export
+        //--;0=delete data ,1=start upload data,2=finish upload data xong, doi duyet,3=reject,4= duyet;5=delete export
+
+        [HttpPost]
+        public IActionResult actionViaSms([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+           
+
+
+            ResCommnon response = new ResCommnon();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI export_created: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+            string serviceId = Convert.ToString(obj["serviceId"]);
+            string gameId = Convert.ToString(obj["gameId"]);
+            string users = Convert.ToString(obj["users"]);
+            string type = Convert.ToString(obj["type"]);
+            string param = Convert.ToString(obj["param"]);
+            string language = Convert.ToString(obj["language"]);
+            string channel = Convert.ToString(obj["channel"]);
+
+            string key = Convert.ToString(obj["key"]);
+
+
+
+
+            if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(users)) users = "-1";
+            if (string.IsNullOrEmpty(type)) type = "-1";
+            if (string.IsNullOrEmpty(param)) param = "-1";
+            if (string.IsNullOrEmpty(language)) language = "0";
+            if (string.IsNullOrEmpty(channel)) channel = "APP";
+            
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+
+
+
+
+
+
+
+
+
+
+            //Check token
+            var userObj = JObject.Parse(sendData.ToString());
+            string token = Convert.ToString(userObj["token"]);
+            //string channel = Convert.ToString(userObj["channel"]);
+
+
+            string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+            string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+            string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+            redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+            if (!_redis.connet())
+            {
+                logger.Info("Connect to redis false");
+                response.responseCode = "-2";
+                response.responseMessage = "System Update";
+                return Ok(response);
+            }
+            if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+            {
+                logger.Info("Authen token false");
+                response.responseCode = "35";
+                response.responseMessage = "Check Authen false";
+                return Ok(response);
+            }
+            //Ket thuc check token
+
+
+
+
+
+
+            try
+            {
+                //Check key for authencation
+                string _keyDecrypt = ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                DataSet ds_regist = ResfullApi.Models.bet.lotoDataAccess.searchBySms(serviceId, gameId, users, type, param, language, channel); ;
+                logger.Info("Call database export_created success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString();
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+        
+
+
+
+
+        [HttpPost]
+        public IActionResult getResultOfTerm([FromBody] dynamic sendData)
+        {
+              
+             
+
+
+
+            betGetTermList response = new betGetTermList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getRerultOfTerm: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            string serviceId ="1";
+            string gameId = Convert.ToString(obj["gameId"]);
+            string id = Convert.ToString(obj["id"]);
+            string type = Convert.ToString(obj["type"]); // 0= chua quay so,1=da quay so ;-1: all
+            string order = Convert.ToString(obj["order"]); // ASC= tang dan theo ID ticket,DESC= giam dan theo Id ticket
+            string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+            string seqPage = Convert.ToString(obj["seqPage"]);
+            
+            string channel = Convert.ToString(obj["channel"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "1";
+
+            if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000";
+            if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+            if (string.IsNullOrEmpty(id)) id = "-1";
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(type)) type = "-1";
+            if (string.IsNullOrEmpty(order)) order = "ASC";
+            
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+            if (string.IsNullOrEmpty(channel)) channel = "APP";
+
+            //Check token
+            
+            string token = Convert.ToString(obj["token"]);
+            //string channel = Convert.ToString(userObj["channel"]);
+
+
+            string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+            string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+            string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+            var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+            redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+            if (!_redis.connet())
+            {
+                logger.Info("Connect to redis false");
+                response.responseCode = "-2";
+                response.responseMessage = "System Update";
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+            tokenObj _tokenObj = null;
+            if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+            {
+                logger.Info("Authen token false");
+                response.responseCode = "35";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+            
+            //Ket thuc check token
+
+
+
+
+
+
+            try
+            {
+               
+
+
+
+                DataSet ds_regist = ResfullApi.Models.bet.lotoDataAccess.getRerultOfTerm(serviceId, gameId, type, order, rowsOnPage, seqPage, id, language, fromDate, toDate);
+                logger.Info("Call database getRerultOfTerm success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+                    response.totalRow = ds_regist.Tables[0].Rows[0]["TOTAL_ROW"].ToString();
+
+                    response.listTerm = new betGetTerm[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        betGetTerm _obj = new betGetTerm();
+
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["seq"].ToString();
+                        _obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        _obj.status = ds_regist.Tables[0].Rows[j]["status"].ToString();
+                        _obj.date_start = ds_regist.Tables[0].Rows[j]["date_start"].ToString();
+                        _obj.date_end = ds_regist.Tables[0].Rows[j]["date_end"].ToString();
+                        _obj.date_random = ds_regist.Tables[0].Rows[j]["date_random"].ToString();
+                        _obj.gameId = ds_regist.Tables[0].Rows[j]["gameId"].ToString();
+                        _obj.result = ds_regist.Tables[0].Rows[j]["result"].ToString();
+                        _obj.split = ds_regist.Tables[0].Rows[j]["split"].ToString();
+                        try
+                        {
+                            _obj.money_winner = ds_regist.Tables[0].Rows[j]["money_win"].ToString();
+                        }
+                        catch (Exception)
+                        {
+
+                           
+                        }
+
+                        
+                        _obj.isEvening = ds_regist.Tables[0].Rows[j]["IS_EVENING"].ToString();
+                        _obj.numberGame = ds_regist.Tables[0].Rows[j]["vNUMBER"].ToString();
+                        _obj.win4Game = ds_regist.Tables[0].Rows[j]["vWin4"].ToString();
+                        _obj.bolet = ds_regist.Tables[0].Rows[j]["vBolet"].ToString();
+                        _obj.mariaj = ds_regist.Tables[0].Rows[j]["vMariaj"].ToString();
+                        _obj.lotto3 = ds_regist.Tables[0].Rows[j]["vLotto3"].ToString();
+
+
+
+                        response.listTerm[j] = _obj;
+                    }
+
+                }
+                
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System Update";
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult getPrizeOfCurrentTerm([FromBody] dynamic sendData)
+        {
+
+
+
+
+
+            moneyPrizeOfTerm response = new moneyPrizeOfTerm();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getRerultOfTerm: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            string serviceId = "1";
+            string gameId = Convert.ToString(obj["gameId"]);
+          
+
+            string channel = Convert.ToString(obj["channel"]);
+         
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "1";
+
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(channel)) channel = "-1";
+
+            //Check token
+
+            string token = Convert.ToString(obj["token"]);
+            //string channel = Convert.ToString(userObj["channel"]);
+
+
+            string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+            string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+            string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+            var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+            redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+            if (!_redis.connet())
+            {
+                logger.Info("Connect to redis false");
+                response.responseCode = "-2";
+                response.responseMessage = "System Update";
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+            tokenObj _tokenObj = null;
+            if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+            {
+                logger.Info("Authen token false");
+                response.responseCode = "35";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+
+            //Ket thuc check token
+
+
+
+
+
+
+            try
+            {
+
+
+
+
+                DataSet ds_regist = ResfullApi.Models.bet.lotoDataAccess.getPrizeOfCurrentTerm( gameId);
+                logger.Info("Call database getPrizeOfCurrentTerm success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.id = ds_regist.Tables[0].Rows[0]["id"].ToString();
+                    response.startDate = ds_regist.Tables[0].Rows[0]["DATE_START"].ToString();
+                    response.endDate = ds_regist.Tables[0].Rows[0]["DATE_END"].ToString();
+                    response.randomDate = ds_regist.Tables[0].Rows[0]["DATE_RANDOM"].ToString();
+                    response.money = ds_regist.Tables[0].Rows[0]["MONEY_WIN_7"].ToString();
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    return Ok(response);
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System Update";
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult getPrizeList([FromBody] dynamic sendData)
+        {
+
+
+
+
+
+            prizeList response = new prizeList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getRerultOfTerm: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            string serviceId = "1";
+            string gameId = Convert.ToString(obj["gameId"]);
+
+
+            string channel = Convert.ToString(obj["channel"]);
+
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "1";
+
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(channel)) channel = "-1";
+
+            //Check token
+
+            string token = Convert.ToString(obj["token"]);
+            //string channel = Convert.ToString(userObj["channel"]);
+
+
+            string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+            string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+            string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+            var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+            redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+            if (!_redis.connet())
+            {
+                logger.Info("Connect to redis false");
+                response.responseCode = "-2";
+                response.responseMessage = "System Update";
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+            tokenObj _tokenObj = null;
+            if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+            {
+                logger.Info("Authen token false");
+                response.responseCode = "35";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+
+            //Ket thuc check token
+
+
+
+
+
+
+            try
+            {
+
+
+
+
+                DataSet ds_regist = ResfullApi.Models.bet.lotoDataAccess.getPrizeList(gameId);
+                logger.Info("Call database getPrizeList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                 
+                    response.list = new prizeObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        prizeObj _obj = new prizeObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        _obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+                        _obj.money = ds_regist.Tables[0].Rows[j]["money"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getPrizeList exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System Update";
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+
+            return Ok(response);
+
+        }
+
+
+        [HttpPost]
+        public IActionResult getTopResultOfTermSendSms([FromBody] dynamic sendData)
+        {
+
+            ResCommnon response = new ResCommnon();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTopResultOfTermSendSms: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            string serviceId = "1";
+            string gameId = Convert.ToString(obj["gameId"]);
+            string msisdn = Convert.ToString(obj["msisdn"]);
+            string totalRows = Convert.ToString(obj["totalRows"]);
+
+            string channel = Convert.ToString(obj["channel"]);
+            
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "1";
+            if (string.IsNullOrEmpty(totalRows)) totalRows = "1";
+
+
+
+            //Check token
+
+            string token = Convert.ToString(obj["token"]);
+            //string channel = Convert.ToString(userObj["channel"]);
+
+
+            string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+            string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+            string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+            var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+            //---------------------Lay ra va luu mot redis tu cache-----------------------------
+            redisConnection _redis;
+            memoryCache.TryGetValue("redis", out _redis);
+            if (_redis == null)
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                _redis.connet();
+                memoryCache.Set("redis", _redis, cacheExpiryOptions);
+            }
+            if (!_redis.isConnet())
+            {
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                else
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                }
+            }
+            //----------------------Ket thuc lay redis tu cache -------------------------------------
+            tokenObj _tokenObj = null;
+            if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+            {
+                logger.Info("Authen token false");
+                response.responseCode = "35";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+
+            //Ket thuc check token
+
+            try
+            {
+
+
+
+
+                DataSet ds_regist = ResfullApi.Models.bet.lotoDataAccess.getRerultTopSendSms(serviceId, gameId, msisdn, totalRows, channel);
+                logger.Info("Call database getRerultTopSendSms success:");
+                response.responseCode = "0";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System Update";
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult getExecuteSendSms([FromBody] dynamic sendData)
+        {
+
+            ResCommnon response = new ResCommnon();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getExecuteSendSms: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            string serviceId = "1";
+            string gameId = Convert.ToString(obj["gameId"]);
+            string msisdn = Convert.ToString(obj["msisdn"]);
+            string totalRows = Convert.ToString(obj["totalRows"]);
+
+            string channel = Convert.ToString(obj["channel"]);
+            string type = Convert.ToString(obj["type"]);
+
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "1";
+            if (string.IsNullOrEmpty(totalRows)) totalRows = "1";
+            if (string.IsNullOrEmpty(type)) type = "-1";
+
+
+            //Check token
+
+            string token = Convert.ToString(obj["token"]);
+            //string channel = Convert.ToString(userObj["channel"]);
+
+
+            string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+            string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+            string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+            var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+            //---------------------Lay ra va luu mot redis tu cache-----------------------------
+            redisConnection _redis;
+            memoryCache.TryGetValue("redis", out _redis);
+            if (_redis == null)
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                _redis.connet();
+                memoryCache.Set("redis", _redis, cacheExpiryOptions);
+            }
+            if (!_redis.isConnet())
+            {
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                else
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                }
+            }
+            //----------------------Ket thuc lay redis tu cache -------------------------------------
+            tokenObj _tokenObj = null;
+            if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+            {
+                logger.Info("Authen token false");
+                response.responseCode = "35";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+
+            //Ket thuc check token
+
+            try
+            {
+
+
+
+
+                DataSet ds_regist = ResfullApi.Models.bet.lotoDataAccess.getExecuteSendSms(serviceId, gameId, msisdn, totalRows, channel,type);
+                logger.Info("Call database getRerultTopSendSms success:");
+                response.responseCode = "0";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System Update";
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult getTotalWinnerByBet([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+            
+
+
+
+            prizeOfTermList response = new prizeOfTermList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            string serviceId = Convert.ToString(obj["serviceId"]);
+            string gameId = Convert.ToString(obj["gameId"]);
+            string betId = Convert.ToString(obj["betId"]);
+            string users = Convert.ToString(obj["users"]); 
+            string ticket = Convert.ToString(obj["ticket"]); 
+            
+            string key = Convert.ToString(obj["key"]);
+            string channel = Convert.ToString(obj["channel"]);
+           
+
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+           
+
+            if (string.IsNullOrEmpty(betId)) betId = "-1";
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(users)) users = "-1";
+            if (string.IsNullOrEmpty(ticket)) ticket = "-1";
+            if (string.IsNullOrEmpty(key)) key = "-1";
+           
+            if (string.IsNullOrEmpty(channel)) channel = "APP";
+
+
+
+            //Check token
+            var userObj = JObject.Parse(sendData.ToString());
+            string token = Convert.ToString(userObj["token"]);
+            //string channel = Convert.ToString(userObj["channel"]);
+
+
+            string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+            string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+            string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+            redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+            if (!_redis.connet())
+            {
+                logger.Info("Connect to redis false");
+                response.responseCode = "-2";
+                response.responseMessage = "System Update";
+                return Ok(response);
+            }
+            if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+            {
+                logger.Info("Authen token false");
+                response.responseCode = "35";
+                response.responseMessage = "Check Authen false";
+                return Ok(response);
+            }
+            //Ket thuc check token
+
+
+
+
+
+
+
+
+            try
+            {
+                //Check key for authencation
+                string _keyDecrypt = ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, language, urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, channel);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+                DataSet ds_regist = ResfullApi.Models.bet.lotoDataAccess.getTotalWinnerByBet(serviceId, gameId, betId, users, ticket, channel,  language);
+                logger.Info("Call database getRerultOfTerm success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+
+                    
+
+                    response.listPrize = new prizeOfTerm[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        prizeOfTerm _obj = new prizeOfTerm();
+
+                        _obj.result = ds_regist.Tables[0].Rows[j]["result"].ToString();
+                        _obj.prizeName = ds_regist.Tables[0].Rows[j]["name"].ToString();
+                        _obj.prizeDisplay = ds_regist.Tables[0].Rows[j]["DISPLAY"].ToString();
+                        _obj.prizeMoney = ds_regist.Tables[0].Rows[j]["svalues"].ToString();
+                        _obj.prizeTotal = ds_regist.Tables[0].Rows[j]["total"].ToString();
+                        
+                        
+                        response.listPrize[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, language, urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, channel);
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+        /*
+         -1:unknow
+         -2: he thong dang nang cap
+         
+         */
+
+        [HttpPost]
+        public IActionResult getTicketByUser([FromBody] dynamic sendData)
+        {
+            
+          
+            betTicketObjList response = new betTicketObjList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTicketByUser: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+            
+           
+            
+                                string serviceId = "1";
+                                string gameId = Convert.ToString(obj["gameId"]);
+                                string msisdn = Convert.ToString(obj["msisdn"]);
+                                string id = Convert.ToString(obj["id"]);
+                                string type = Convert.ToString(obj["type"]); // 0= chua quay so,1=da quay so ;-1: all
+                                string order= Convert.ToString(obj["order"]); // ASC= tang dan theo ID ticket,DESC= giam dan theo Id ticket
+                                string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+                                string seqPage = Convert.ToString(obj["seqPage"]);
+                                string token = Convert.ToString(obj["token"]);
+         
+
+                                string language = Convert.ToString(obj["language"]);
+                                if (string.IsNullOrEmpty(language)) language = "1";
+
+                                string channel = Convert.ToString(obj["channel"]);
+           
+
+                                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000";
+                                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+                                if (string.IsNullOrEmpty(id)) id = "-1";
+                                if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+                                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+                                if (string.IsNullOrEmpty(type)) type = "-1";
+                                if (string.IsNullOrEmpty(order)) order = "ASC";
+           
+
+
+
+
+                                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                                redisConnection _redis;
+                                memoryCache.TryGetValue("redis", out _redis);
+                                if (_redis == null)
+                                {
+                                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                                    {
+                                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                                        Priority = CacheItemPriority.High,
+                                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                                        Size = 1024,
+                                    };
+                                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                                    _redis.connet();
+                                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                                }
+                                if (!_redis.isConnet())
+                                {
+                                    if (!_redis.connet())
+                                    {
+                                        logger.Info("Connect to redis false");
+                                        response.responseCode = "-2";
+                                        response.responseMessage = "System Update";
+                                        logger.Info("confirmTicket response : " + response.ToString());
+                                        return Ok(response);
+                                    }
+                                    else
+                                    {
+                                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                                        {
+                                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                                            Priority = CacheItemPriority.High,
+                                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                                            Size = 1024,
+                                        };
+                                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                                    }
+                                }
+                                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                                tokenObj _tokenObj = null;
+                                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                                {
+                                    logger.Info("Authen token false");
+                                    response.responseCode = "35";
+                                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                                    logger.Info("confirmTicket response : " + response.ToString());
+                                    return Ok(response);
+                                }
+                                //Chu y:
+                                // Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                                //if (_tokenObj != null && _tokenObj.role == "USER")
+                                //{
+                                //    if (_tokenObj.msisdn != msisdn)
+                                //    {
+                                //        logger.Info("Authen token false");
+                                //        response.responseCode = "35";
+                                //        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+
+                                //        return Ok(response);
+                                //    }
+                                //}
+                                //Ket thuc check token
+
+
+
+            try
+            {
+
+
+
+                                    DataSet ds_regist = ResfullApi.Models.bet.lotoDataAccess.getTicketByUser(serviceId, gameId, msisdn, type, order, rowsOnPage, seqPage, id, language);
+                                    logger.Info("Call database getTicketByUser success:");
+                                   
+                                    response.responseCode = "0";
+                                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                                    {
+                                        logger.Info("Co da ta roi nha:");
+                                        response.responseCode = "0";
+                                        response.responseMessage = "Success";
+
+                                        response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                                        response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                                        response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                                        response.listTicket = new betTicketObj[ds_regist.Tables[0].Rows.Count];
+                                        for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                                        {
+                                            betTicketObj _obj = new betTicketObj();
+
+                                            _obj.seq = ds_regist.Tables[0].Rows[j]["seq"].ToString();
+                                            _obj.status = ds_regist.Tables[0].Rows[j]["status"].ToString();
+
+                                            _obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                                            _obj.money = ds_regist.Tables[0].Rows[j]["money"].ToString();
+                                            _obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+
+                                            _obj.createDate = ds_regist.Tables[0].Rows[j]["createDate"].ToString();
+                                            _obj.termId = ds_regist.Tables[0].Rows[j]["termId"].ToString();
+                                            _obj.paymentCode = ds_regist.Tables[0].Rows[j]["paymentCode"].ToString();
+
+                                            _obj.paymentMessage = ds_regist.Tables[0].Rows[j]["paymentMessage"].ToString();
+                                            _obj.split = ds_regist.Tables[0].Rows[j]["split"].ToString();
+
+
+                                            _obj.billCode = ds_regist.Tables[0].Rows[j]["BILL_CODE"].ToString();
+                                            _obj.channel = ds_regist.Tables[0].Rows[j]["CHANNEL"].ToString();
+                                            _obj.channelPayment = ds_regist.Tables[0].Rows[j]["CHANNEL_PAYMENT"].ToString();
+                                            _obj.termStartDate = ds_regist.Tables[0].Rows[j]["term_startdate"].ToString();
+                                            _obj.termEndDate = ds_regist.Tables[0].Rows[j]["term_endate"].ToString();
+                                            _obj.termRandomDate = ds_regist.Tables[0].Rows[j]["term_randomfate"].ToString();
+                                            _obj.termResult = ds_regist.Tables[0].Rows[j]["random_result"].ToString();
+                                            _obj.isEvening = ds_regist.Tables[0].Rows[j]["IS_EVENING"].ToString();
+                                            _obj.moneyWin = ds_regist.Tables[0].Rows[j]["MONEY_WIN"].ToString();
+                                            _obj.gameId = ds_regist.Tables[0].Rows[j]["GAME_ID"].ToString();
+
+                                             response.listTicket[j] = _obj;
+                                        }
+                                        logger.Info("Hoan thanhf goi:");
+
+                                    }
+                                  
+            }
+            catch (Exception ex)
+            {
+
+                    logger.Info("search ticket by user false");
+                    response.responseCode = "-2";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+            }
+          
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult getTicketWinByUser([FromBody] dynamic sendData)
+        {
+
+
+
+
+
+            betTicketWinObjList response = new betTicketWinObjList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTicketWinByUser: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            string serviceId = "1";
+            string gameId = Convert.ToString(obj["gameId"]);
+            string prizeCode = Convert.ToString(obj["prizeCode"]);
+            string msisdn = Convert.ToString(obj["msisdn"]); //
+            string order = Convert.ToString(obj["order"]); // ASC= tang dan theo ID ticket,DESC= giam dan theo Id ticket
+            string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+            string seqPage = Convert.ToString(obj["seqPage"]);
+
+            string channel = Convert.ToString(obj["channel"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "1";
+
+            if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000";
+            if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+            if (string.IsNullOrEmpty(prizeCode)) prizeCode = "-1";
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+            if (string.IsNullOrEmpty(order)) order = "ASC";
+
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+            if (string.IsNullOrEmpty(channel)) channel = "APP";
+
+            //Check token
+
+            string token = Convert.ToString(obj["token"]);
+            //string channel = Convert.ToString(userObj["channel"]);
+
+
+            string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+            string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+            string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+            var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+            redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+            if (!_redis.connet())
+            {
+                logger.Info("Connect to redis false");
+                response.responseCode = "-2";
+                response.responseMessage = "System Update";
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+            tokenObj _tokenObj = null;
+            if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+            {
+                logger.Info("Authen token false");
+                response.responseCode = "35";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+
+            //Ket thuc check token
+
+
+
+
+
+
+            try
+            {
+
+
+
+
+                DataSet ds_regist = ResfullApi.Models.bet.lotoDataAccess.getTicketWinByUser(serviceId, gameId, msisdn, prizeCode, order, rowsOnPage, seqPage,language, fromDate, toDate);
+                logger.Info("Call database getRerultOfTerm success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+                    response.totalRow = ds_regist.Tables[0].Rows[0]["TOTAL_ROW"].ToString();
+
+                    response.list = new betTicketWinObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        betTicketWinObj _obj = new betTicketWinObj();
+
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["seq"].ToString();
+                        _obj.msisdn = ds_regist.Tables[0].Rows[j]["users"].ToString();
+                        _obj.tiket = ds_regist.Tables[0].Rows[j]["tiket"].ToString();
+                        _obj.ticketDate = ds_regist.Tables[0].Rows[j]["ticket_date"].ToString();
+                        _obj.ticketMoney = ds_regist.Tables[0].Rows[j]["ticket_money"].ToString();
+                        _obj.winnerCode = ds_regist.Tables[0].Rows[j]["winner_code"].ToString();
+                        _obj.winnerDetail = ds_regist.Tables[0].Rows[j]["winner_detail"].ToString();
+                        _obj.randomId = ds_regist.Tables[0].Rows[j]["random_id"].ToString();
+                        _obj.termDateStart = ds_regist.Tables[0].Rows[j]["date_start"].ToString();
+
+                        _obj.termDateEnd = ds_regist.Tables[0].Rows[j]["date_end"].ToString();
+                        _obj.termDateRandom = ds_regist.Tables[0].Rows[j]["date_random"].ToString();
+                        _obj.eCreateDate = ds_regist.Tables[0].Rows[j]["e_create_date"].ToString();
+                        _obj.eExpireDate = ds_regist.Tables[0].Rows[j]["e_expire_date"].ToString();
+                        _obj.evoucher = ds_regist.Tables[0].Rows[j]["evoucher"].ToString();
+                        _obj.emoney = ds_regist.Tables[0].Rows[j]["money"].ToString();
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System Update";
+                logger.Info("confirmTicket response : " + response.ToString());
+                return Ok(response);
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+        //key=jqB3Vi1fIlu+9a2ODQs65w==
+        //{"requestId":"1234","users":"50912345678","serviceId":"2","code":"12$12%34$34","money":"10","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult executes([FromBody] dynamic sendData)
+        {
+
+
+
+
+
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty
+                , _url_vaa = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+            
+
+            memoryCache.TryGetValue("_url_vaa", out _url_vaa);
+            if (string.IsNullOrEmpty(_url_vaa))
+            {
+                var cacheExpiryOptions3 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _url_vaa = Common.GetValuesAppSetting("webConfig", "url_vaa");
+                memoryCache.Set("_url_vaa", _url_vaa, cacheExpiryOptions3);
+            }
+            
+
+
+
+            ResCommnon _return = new ResCommnon();
+            _return.responseCode = "-1";
+            _return.responseMessage = "Err unknow";
+            string jSonFromApp = "{\"responseCode\": \"-1\", \"responseMessage\": \"Err unknow\"}";
+
+            string requestId = "1", cmd = "-1", key = "-1", serviceId = "-1", gameId = "-1", data = "-1",channel="0", HeaderIpRemote="-1", HeaderIsdn="-1";
+            lotoDataObj _dataObj = null;
+
+            try
+            {
+
+                
+                var userObj = JObject.Parse(sendData.ToString());
+
+                requestId = Convert.ToString(userObj["requestId"]);
+                key = Convert.ToString(userObj["key"]);
+                cmd = Convert.ToString(userObj["cmd"]);
+                serviceId = Convert.ToString(userObj["serviceId"]);
+                gameId = Convert.ToString(userObj["gameId"]);
+                channel = Convert.ToString(userObj["channel"]);
+                data = Convert.ToString(userObj["data"]);
+
+                HeaderIpRemote = Convert.ToString(userObj["HeaderIpRemote"]);
+                HeaderIsdn = Convert.ToString(userObj["HeaderIsdn"]);
+
+
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                logger.Info("Request from UI: " + sendData.ToString());
+                if (string.IsNullOrEmpty(requestId)) requestId = "-1";
+                if (string.IsNullOrEmpty(key)) key = "-1";
+                if (string.IsNullOrEmpty(cmd)) cmd = "-1";
+                if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+                if (string.IsNullOrEmpty(gameId)) gameId = "1";
+                if (string.IsNullOrEmpty(data)) data = "-1";
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                //string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    _return.responseCode = "-2";
+                    _return.responseMessage = "System Update";
+                    return Ok(_return);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    _return.responseCode = "35";
+                    _return.responseMessage = "Check Authen false";
+                    return Ok(_return);
+                }
+                //Ket thuc check token
+
+
+
+                logger.Info("HeaderIpRemote of body: " + HeaderIpRemote);
+                logger.Info("HeaderIsdn of body: " + sendData.ToString());
+
+
+
+
+
+                /*
+                logger.Info("Full hearder are: ");
+                foreach (var header in Request.Headers)
+                {
+                            logger.Info("hearder key : "+ header.Key +" values: "+ header.Value);
+                    
+                }
+                        
+                bool tryGetValue = Request.Headers.TryGetValue("msisdn", out var headerValue);
+                logger.Info("Msisd from hearder : "+ headerValue);
+                bool tryGetValue1 = Request.Headers.TryGetValue("ip", out var clinetIp);
+                logger.Info("IP from hearder : " + clinetIp);
+
+
+                var ip = HttpContext.Connection.RemoteIpAddress.ToString();
+                var ip2 = HttpContext.Connection.LocalIpAddress.ToString();
+                logger.Info("IP remote : " + ip +" IP client: "+ip2);
+
+                _dataObj = JsonConvert.DeserializeObject<lotoDataObj>(data);
+
+                logger.Info("Msisdn from Data of body : "+_dataObj.users);
+
+                
+                if(_dataObj.users!= headerValue)
+                {
+                    logger.Info("Msisdn from Data of body != from hearder so exit ");
+                    //system update
+                    betResponseObj _returnObj = new betResponseObj();
+                    _returnObj.responseCode = "-2";
+                    _returnObj.responseMessage = "System upgrade(err msisdn)";
+                    return Ok(_returnObj);
+
+
+                }
+                //logger.Info("Goood !!!!!!! Msisdn from Data of body == from hearder ");
+
+                */
+
+
+
+
+
+
+
+
+
+
+
+
+                //goi VAAA
+                string request = "";
+                request = request + @" <?xml version=""1.0"" encoding=""UTF-8""?>";
+                request = request + @" <SOAP-ENV:Envelope xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:ns1=""http://viettel.com/xsd"">";
+                request = request + @"<SOAP-ENV:Body>";
+                request = request + @"<ns1:getMSISDN>";
+                request = request + @"<ns1:username>wap3g</ns1:username>";
+                request = request + @"<ns1:password>wap3g!@#</ns1:password>";
+                request = request + @"<ns1:ip>{?ip}</ns1:ip>";
+                request = request + @"</ns1:getMSISDN>";
+                request = request + @"</SOAP-ENV:Body>";
+                request = request + @"</SOAP-ENV:Envelope>";
+                request = request.Replace("{?ip}", HeaderIpRemote);
+
+                string resultPost = getContent(_url_vaa, "12000", request);
+
+                logger.Info("URL of VAAA: " + _url_vaa);
+                logger.Info("Request to VAAA: "+ request);
+                logger.Info("Response from VAAA: " + resultPost);
+
+
+                if (!string.IsNullOrEmpty(resultPost))
+                {
+                    XmlDocument xmlDoc = new XmlDocument();
+                    xmlDoc.LoadXml(resultPost);
+                    
+                        string err_code = xmlDoc.GetElementsByTagName("code").Item(0).InnerText;
+                        string desc = xmlDoc.GetElementsByTagName("desc").Item(0).InnerText;
+                        logger.Info("Errcode & msisdn from VAAA: " + err_code +", "+desc);
+                        if (err_code!="0")
+                        {
+                                logger.Info("VAAA code return !=0 so exit ");
+                                betResponseObj _returnObj = new betResponseObj();
+                                _returnObj.responseCode = "-2";
+                                _returnObj.responseMessage = "System upgrade(err msisdn)";
+                                return Ok(_returnObj);
+
+                        }    
+                        else
+                        {
+                                if(desc!= HeaderIsdn)
+                                {
+                                    logger.Info("VAAA msisdn != hearder so exit ");
+                                    betResponseObj _returnObj = new betResponseObj();
+                                    _returnObj.responseCode = "-2";
+                                    _returnObj.responseMessage = "System upgrade(err msisdn)";
+                                    return Ok(_returnObj);
+
+                                }
+                                logger.Info("check msisdn success! gooooooood. set msisdn to data of json");
+                                logger.Info("Old data: "+data);
+                                _dataObj.users = desc;  
+                                data = _dataObj.ToString();
+                                logger.Info("New data: " + data);
+
+
+                    }    
+                  
+
+                }
+                else
+                {
+                    logger.Info("VAAA return null so exit ");
+                    //system update
+                    betResponseObj _returnObj = new betResponseObj();
+                    _returnObj.responseCode = "-2";
+                    _returnObj.responseMessage = "System upgrade(err msisdn)";
+                    return Ok(_returnObj);
+
+                }    
+
+
+
+                    //Check key for authencation
+                    string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    _return.responseCode = "-3";
+                    _return.responseMessage = "Authentication is false";
+                    logger.Info("Responase to web: " + _return.ToString());
+                    return Ok(_return);
+                }
+
+
+
+                string key_memory = "id_process";
+                string values = string.Empty;
+                memoryCache.TryGetValue(key_memory, out values);
+                if (string.IsNullOrEmpty(values))
+                {
+                    values = "-1";
+                }
+
+
+                string key_memory_arr = "arr_process";
+                ArrayList values1 = null;
+                memoryCache.TryGetValue(key_memory_arr, out values1);
+
+
+
+                ArrayList _arrProcessNow = null;
+                betProcessObj _obj = Common.GetBetProcess(Convert.ToInt32(values), gameId, values1, out _arrProcessNow);
+                if (_obj == null)
+                {
+                    _return.responseCode = "-2";
+                    _return.responseMessage = "System upgrade";
+                    logger.Info("Responase to web: " + _return.ToString());
+                    return Ok(_return);
+                }
+
+                //set cache
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                //set cache tin trinh dang xu lý
+                memoryCache.Set(key_memory, _obj.seq, cacheExpiryOptions);
+                //set cache mang cac tien trinh dang hoat dong tot
+                memoryCache.Set(key_memory_arr, _arrProcessNow, cacheExpiryOptions);
+
+
+
+                //string request_process = Guid.NewGuid().ToString();
+                Random _rd = new Random();
+                string strRandom = _rd.Next(1, 999999).ToString("000000");
+                //string strRandom = Guid.NewGuid().ToString();
+                string request_process = strRandom + DateTime.Now.ToString("ddMMyyyyhhmmssfff");
+                logger.Info("Reqeust from UI: " + requestId + " map to request : " + request_process);
+
+                string query = "cmd=" + cmd + "&requestIdUi=" + requestId + "&requestIdApi=" + request_process + "&serviceId=" + serviceId + "&gameId=" + gameId + "&language=" + language + "&channel=" + channel + "&data=" + data;
+                logger.Info("Send Process Bet ip :" + _obj.ip + " port: " + _obj.port + " data: " + query);
+
+
+
+
+             
+
+                if (cmd == "bet")
+                {
+                    DataSet ds_regist = null;
+                    string s_sys_key = "";
+                    DateTime sys_date;
+                    try
+                    {
+                        ds_regist = ResfullApi.Models.bet.lotoDataAccess.getParams("9", "1", "0", "SYS_KEY", "SYS_KEY");
+
+                    }
+                    catch (Exception ex)
+                    {
+
+                    }
+
+
+                    if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                    {
+                        s_sys_key = ds_regist.Tables[0].Rows[0]["SVALUES"].ToString();
+                        string s_sys_key_Descrip =ResfullApi.Models.CustomEncryption.Decrypt(s_sys_key);
+                        logger.Info("ds_regist not null encode s_sys_skey : " + s_sys_key_Descrip);
+                        if(!string.IsNullOrEmpty(s_sys_key_Descrip))
+                        {
+                            logger.Info("s_sys_key_Descrip not null");
+                            try
+                            {
+                                sys_date = DateTime.ParseExact(s_sys_key_Descrip, "dd/MM/yyyy", CultureInfo.InvariantCulture);
+                                logger.Info("Convert date success");
+                            }
+                            catch (Exception wx)
+                            {
+
+                                sys_date = DateTime.ParseExact("01/01/2019", "dd/MM/yyyy", CultureInfo.InvariantCulture);
+                                logger.Info("Convert date false and 01/01/2019");
+                            }
+                        }
+                        else
+                        {
+                            logger.Info("s_sys_key_Descrip null");
+                            //system update
+                            betResponseObj _returnObj = new betResponseObj();
+                            _returnObj.responseCode = "-2";
+                            _returnObj.responseMessage = "System upgrade";
+                            return Ok(_returnObj);
+                        }
+                        
+
+                        if (DateTime.Now > sys_date)
+                        {
+                            //system update
+                            betResponseObj _returnObj = new betResponseObj();
+                            _returnObj.responseCode = "-2";
+                            _returnObj.responseMessage = "System upgrade";
+                            return Ok(_returnObj);
+                        }
+                        
+                    }
+                    else
+                    {
+                        logger.Info("ds_regist skey null");
+                        //system update
+                        betResponseObj _returnObj = new betResponseObj();
+                        _returnObj.responseCode = "-2";
+                        _returnObj.responseMessage = "System upgrade";
+                        return Ok(_returnObj);
+                    }
+
+                  
+
+                }
+              
+
+                logger.Info("Start ..... ");
+              
+
+
+                string response111 = Common.SocketUnSyn(query, _obj.ip, Convert.ToInt32(_obj.port), Convert.ToInt32(_obj.timeout));
+                if (response111 == "-1000")
+                {
+                    //Remove key id_process & arr_process, for reset cache
+                    memoryCache.Remove(key_memory);
+                    memoryCache.Remove(key_memory_arr);
+                    _return.responseCode = "-2";
+                    _return.responseMessage = "System upgrade";
+                    logger.Info("Responase to web: " + _return.ToString());
+                    return Ok(_return);
+
+                }
+
+
+                //jSonFromApp = response111.Replace("\t", "\\t").Replace("\n", "\\n").Replace("\r", "\\r").Replace("\r","\\r").Replace(@"\","\\");
+                jSonFromApp = response111;
+            }
+            catch (Exception ex)
+            {
+                _return.responseCode = "-1";
+                _return.responseMessage = "Err unknow";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + jSonFromApp);
+            //dynamic parsedJson = JsonConvert.DeserializeObject(jSonFromApp);
+            //return Ok(JsonConvert.SerializeObject(parsedJson, Formatting.Indented));
+            //betResponseObj _betrp = JsonConvert.DeserializeObject<betResponseObj>(jSonFromApp);
+            //dynamic json = JsonConvert.DeserializeObject(jSonFromApp);
+            //string _js = json.ToString();
+            //string output = JsonConvert.SerializeObject(jSonFromApp);
+            //return Ok(jSonFromApp);
+            //return Ok(_betrp);
+            if(cmd=="bet")
+            {
+                betResponseObj _returnObj = JsonConvert.DeserializeObject<betResponseObj>(jSonFromApp);
+                return Ok(_returnObj);
+
+            }
+            if (cmd == "getTernList")
+            {
+                betGetTermList _returnObj = JsonConvert.DeserializeObject<betGetTermList>(jSonFromApp);
+                return Ok(_returnObj);
+            }
+
+            else if (cmd == "IsExistWallet")
+            {
+                betResWalletCheckExist _returnObj = JsonConvert.DeserializeObject<betResWalletCheckExist>(jSonFromApp);
+                return Ok(_returnObj);
+            }
+            else if (cmd == "CustomerSync")
+            {
+                betResWalletCusExtenV2 _returnObj = JsonConvert.DeserializeObject<betResWalletCusExtenV2>(jSonFromApp);
+                return Ok(_returnObj);
+            }
+            else if (cmd == "checkPin")
+            {
+                ResCommnon _returnObj = JsonConvert.DeserializeObject<ResCommnon>(jSonFromApp);
+                //cap nhat ket qua check Pin
+
+                return Ok(_returnObj);
+            }
+            else if (cmd == "sendOtp")
+            {
+                ResCommnon _returnObj = JsonConvert.DeserializeObject<ResCommnon>(jSonFromApp);
+                return Ok(_returnObj);
+            }
+            else if (cmd == "confirmOtp")
+            {
+                ResCommnon _returnObj = JsonConvert.DeserializeObject<ResCommnon>(jSonFromApp);
+                return Ok(_returnObj);
+            }
+            else if (cmd == "confirmCus")
+            {
+                ResCommnon _returnObj = JsonConvert.DeserializeObject<ResCommnon>(jSonFromApp);
+                return Ok(_returnObj);
+            }
+            else if (cmd == "getErrCodeToMessage")
+            {
+                ResCommnon _returnObj = JsonConvert.DeserializeObject<ResCommnon>(jSonFromApp);
+                return Ok(_returnObj);
+            }
+            
+            else if (cmd == "getMsisdn")
+            {
+                betRes3GMsisdn _returnObj = JsonConvert.DeserializeObject<betRes3GMsisdn>(jSonFromApp);
+                return Ok(_returnObj);
+            }
+            else if (cmd == "SyncChannel")
+            {
+                betResWalletAcount _returnObj = JsonConvert.DeserializeObject<betResWalletAcount>(jSonFromApp);
+                return Ok(_returnObj);
+            }
+            else if (cmd == "getParam")
+            {
+                objParams _returnObj = JsonConvert.DeserializeObject<objParams>(jSonFromApp);
+                return Ok(_returnObj);
+                
+            }
+            else if (cmd == "resultPreviousTerm")
+            {
+                ResCommnon _returnObj = JsonConvert.DeserializeObject<ResCommnon>(jSonFromApp);
+                return Ok(_returnObj);
+            }
+            else if (cmd == "checkCus")
+            {
+                ResCommnon _returnObj = JsonConvert.DeserializeObject<ResCommnon>(jSonFromApp);
+                return Ok(_returnObj);
+            }
+            
+
+
+
+
+
+            return Ok(_return);
+
+
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+        private string getContent(string api_path, string timeout, string xml)
+        {
+            string rp = "";
+            try
+            {
+
+
+                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(api_path);
+
+                byte[] bytes;
+                bytes = System.Text.Encoding.UTF8.GetBytes(xml);
+                request.ContentType = "text/xml; encoding='utf-8'";
+                request.ContentLength = bytes.Length;
+                request.Method = "POST";
+                request.Timeout = Convert.ToInt32(timeout);
+
+                Stream requestStream = request.GetRequestStream();
+                requestStream.Write(bytes, 0, bytes.Length);
+
+                requestStream.Close();
+                HttpWebResponse response;
+
+                response = (HttpWebResponse)request.GetResponse();
+
+
+                Stream responseStream = response.GetResponseStream();
+
+                rp = new StreamReader(responseStream).ReadToEnd();
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("Err when post: " + ex.ToString());
+            }
+
+
+            return rp;
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    }
+
+
+
+
+}

+ 4776 - 0
ApiWeb/ApiProcessToken/Controllers/luckyGameCms.cs

@@ -0,0 +1,4776 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Memory;
+
+using Newtonsoft.Json.Linq;
+using ResfullApi.Models;
+
+using System.Data;
+
+using System.Net;
+using System.Net.Http;
+
+using ApiProcess.Models.bet;
+using Newtonsoft.Json;
+using System.Collections;
+using System.Web;
+using System.Text;
+using System.Security.Cryptography;
+using ResfullApi.Models.bet;
+using CommonObj.common;
+
+namespace ApiProcess.Controllers
+{
+    
+
+    [ApiController]
+    [Route("api/[controller]/[action]/data")]
+    public class luckyGameCms : ControllerBase
+    {
+
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(luckyGame));
+
+        private IMemoryCache memoryCache;
+        public luckyGameCms(IMemoryCache memoryCache)
+        {
+            this.memoryCache = memoryCache;
+        }
+
+
+
+
+        //  Lay ve danh sach cac term cua game_id
+        //chu y voi status nhu sau:
+        //--1: dang cho phep mua ticket,2: khoa va ko cho phep mua ticket doi nhap ket qua,3: da nhap ket qua roi,4=tu choi,5=duyet
+        //Voi game LKPW muon lay danh sach term de nhap ket qua thi phai du status=2,4
+
+        [HttpPost]
+        public IActionResult getTermList([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            betGetTermList response = new betGetTermList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+            string usersName = Convert.ToString(obj["usersName"]);
+            string gameId = Convert.ToString(obj["gameId"]);
+            string id = Convert.ToString(obj["id"]);
+            string serviceId = Convert.ToString(obj["serviceId"]);
+            string channel = Convert.ToString(obj["channel"]);
+            string language = Convert.ToString(obj["language"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+            string status = Convert.ToString(obj["status"]);
+            string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+            string seqPage = Convert.ToString(obj["seqPage"]);
+            
+
+            string key = Convert.ToString(obj["key"]);
+            
+           
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+           
+
+            if (string.IsNullOrEmpty(usersName)) usersName = "-1";
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+            if (string.IsNullOrEmpty(channel)) channel = "APP";
+            if (string.IsNullOrEmpty(language)) language = "0";
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+            if (string.IsNullOrEmpty(status)) status = "-1";
+            if (string.IsNullOrEmpty(key)) key = "-1";
+            if (string.IsNullOrEmpty(id)) id = "-1";
+
+            if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000";
+            if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+            if (string.IsNullOrEmpty(status)) status = "-1";
+
+            try
+            {
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                //string channel = Convert.ToString(userObj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, language, urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, channel);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+               
+
+                DataSet ds_regist = balanceDataAccess.getListTerm(usersName, gameId, serviceId, channel, language, fromDate, toDate, status, rowsOnPage, seqPage,id);
+                logger.Info("Call database getTermList success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.gameId = gameId;
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listTerm = new betGetTerm[ds_regist.Tables[0].Rows.Count];
+
+                   for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        betGetTerm _obj = new betGetTerm();
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["seq"].ToString();
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.date_start = ds_regist.Tables[0].Rows[j]["DATE_START"].ToString();
+                        _obj.date_end = ds_regist.Tables[0].Rows[j]["DATE_END"].ToString();
+                        _obj.date_random = ds_regist.Tables[0].Rows[j]["DATE_RANDOM"].ToString();
+                        _obj.status = ds_regist.Tables[0].Rows[j]["status"].ToString();
+                        _obj.gameId = ds_regist.Tables[0].Rows[j]["gameID"].ToString();
+                        _obj.result = ds_regist.Tables[0].Rows[j]["STR"].ToString();
+                        _obj.split = ds_regist.Tables[0].Rows[j]["SPLT"].ToString();
+                        _obj.countDownSeconds = ds_regist.Tables[0].Rows[j]["countDown"].ToString();
+
+
+                        response.listTerm[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, language, urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, channel);
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+
+        //Ham nay ho tro nhan vien nhap du lieu giai thuong vao he thong
+        //status: --0=nhap lieu,1=tu choi,2=accept
+
+
+        [HttpPost]
+        public IActionResult lkpwResultUpdate([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            ResCommnon response = new ResCommnon();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+            string usersName = Convert.ToString(obj["usersName"]);
+            string randomId = Convert.ToString(obj["randomId"]);
+            string result = Convert.ToString(obj["result"]);
+            string status = Convert.ToString(obj["action"]); //0=nhap lieu;1=tu choi;2=chap nhan
+            string note = Convert.ToString(obj["note"]);
+            string key = Convert.ToString(obj["key"]);
+            string channel = Convert.ToString(obj["channel"]);
+            string language = Convert.ToString(obj["language"]);
+
+
+
+            if (string.IsNullOrEmpty(usersName)) usersName = "-1";
+            if (string.IsNullOrEmpty(randomId)) randomId = "-1";
+            if (string.IsNullOrEmpty(result)) result = "-1";
+            if (string.IsNullOrEmpty(status)) status = "-1";
+            if (string.IsNullOrEmpty(note)) note = "";
+           
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+            if (string.IsNullOrEmpty(channel)) channel = "APP";
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+            try
+            {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                //string channel = Convert.ToString(userObj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, language, urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, channel);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                DataSet ds_regist = balanceDataAccess.lkpw_result_update(randomId, usersName, result, status, note);
+                logger.Info("Call database lkpwResultUpdate success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString();
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, language, urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, channel);
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+        //Ham nay lay ve lich su cua mot ket qua nhap lieu
+        [HttpPost]
+        public IActionResult lkpwResultGetHis([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            lkpwResultHisList response = new lkpwResultHisList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+            string usersName = Convert.ToString(obj["usersName"]);
+            string randomId = Convert.ToString(obj["randomId"]);
+            string channel = Convert.ToString(obj["channel"]);
+            string language = Convert.ToString(obj["language"]);
+            
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(randomId)) randomId = "-1";
+            if (string.IsNullOrEmpty(usersName)) usersName = "-1";
+            if (string.IsNullOrEmpty(channel)) channel = "APP";
+            if (string.IsNullOrEmpty(language)) language = "0";
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+           
+
+            try
+            {
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, language, urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, channel);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.lkpw_result_get_his(randomId,usersName);
+                logger.Info("Call database lkpwResultGetHis success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+
+                   
+                    response.listHis = new lkpwResultHis[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        lkpwResultHis _obj = new lkpwResultHis();
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.randomId = ds_regist.Tables[0].Rows[j]["RANDOM_ID"].ToString();
+                        _obj.date = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        _obj.result = ds_regist.Tables[0].Rows[j]["STR"].ToString();
+                        _obj.usersName = ds_regist.Tables[0].Rows[j]["USERS"].ToString();
+                        _obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        _obj.action = ds_regist.Tables[0].Rows[j]["ACTION"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+                        response.listHis[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, language, urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, channel);
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+
+        //Them mot export du lieu
+        
+        [HttpPost]
+        public IActionResult exportCreated([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            ResCommnon response = new ResCommnon();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI export_created: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+            string usersName = Convert.ToString(obj["usersName"]);
+            string gameId = Convert.ToString(obj["gameId"]);
+            string name = Convert.ToString(obj["name"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+            string key = Convert.ToString(obj["key"]);
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+
+
+            if (string.IsNullOrEmpty(usersName)) usersName = "-1";
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(name)) name = "-1";
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "";
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+
+            try
+            {
+
+
+
+
+
+
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                DataSet ds_regist = balanceDataAccess.export_created(usersName, gameId, name, fromDate, toDate);
+                logger.Info("Call database export_created success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString();
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+        //Chuyen doi trang thai cua mot export
+        //--;0=delete data ,1=start upload data,2=finish upload data xong, doi duyet,3=reject,4= duyet;5=delete export
+
+        [HttpPost]
+        public IActionResult exportAction([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            ResCommnon response = new ResCommnon();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI export_created: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+            string usersName = Convert.ToString(obj["usersName"]);
+            string exportId = Convert.ToString(obj["exportId"]);
+            string type = Convert.ToString(obj["type"]);
+            string note = Convert.ToString(obj["note"]);
+           
+            string key = Convert.ToString(obj["key"]);
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+
+
+            if (string.IsNullOrEmpty(usersName)) usersName = "-1";
+            if (string.IsNullOrEmpty(exportId)) exportId = "-1";
+            if (string.IsNullOrEmpty(type)) type = "-1";
+            if (string.IsNullOrEmpty(note)) note = "-1";
+            
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+
+            try
+            {
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                DataSet ds_regist = balanceDataAccess.export_action(usersName, exportId, type, note);
+                logger.Info("Call database export_created success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.responseMessage = ds_regist.Tables[0].Rows[0]["msg"].ToString();
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+        //Cho phep lay danh sach nguoi trung thuong tu he thong ve 
+        //du vao gameId, tu ngay, den ngayf
+
+
+        [HttpPost]
+        public IActionResult exportWinnerGetData([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            lotoExportDataList response = new lotoExportDataList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+            string usersName = Convert.ToString(obj["usersName"]);
+            string gameId = Convert.ToString(obj["gameId"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+            string isPayOnline = Convert.ToString(obj["isPayOnline"]);
+            string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+            string seqPage = Convert.ToString(obj["seqPage"]);
+            string isPayType = Convert.ToString(obj["isPayType"]);
+
+
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(usersName)) usersName = "-1";
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+            if (string.IsNullOrEmpty(isPayOnline)) isPayOnline = "-1";
+            if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "10000000";
+            if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+            if (string.IsNullOrEmpty(isPayType)) isPayType = "-1";
+
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+
+
+            try
+            {
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.export_winner_get_data(usersName, gameId, fromDate, toDate, isPayOnline, rowsOnPage, seqPage, isPayType);
+                logger.Info("Call database export_winner_get_data success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+                    
+                    response.listLotoExportData = new lotoExportData[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        lotoExportData _obj = new lotoExportData();
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["seq"].ToString();
+                        _obj.winnerId = ds_regist.Tables[0].Rows[j]["WINNER_ID"].ToString();
+                        _obj.msisdn = ds_regist.Tables[0].Rows[j]["MSISDN"].ToString();
+                        _obj.date = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        _obj.gameId = ds_regist.Tables[0].Rows[j]["GAME_ID"].ToString();
+                        _obj.randomId = ds_regist.Tables[0].Rows[j]["RANDOM_ID"].ToString();
+                        _obj.betId = ds_regist.Tables[0].Rows[j]["BET_ID"].ToString();
+                        _obj.isPayOnline = ds_regist.Tables[0].Rows[j]["IS_PAY_ONLINE"].ToString();
+                        _obj.isPay = ds_regist.Tables[0].Rows[j]["IS_PAY"].ToString();
+                        _obj.winnerCode = ds_regist.Tables[0].Rows[j]["WINNER_CODE"].ToString();
+                        _obj.winnerName = ds_regist.Tables[0].Rows[j]["WINNER_NAME"].ToString();
+                        _obj.money = ds_regist.Tables[0].Rows[j]["MONEY"].ToString();
+                        response.listLotoExportData[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        //Cho phep lay danh sach nguoi trung thuong tu he thong ve 
+        //du vao gameId, tu ngay, den ngayf
+
+
+        [HttpPost]
+        public IActionResult exportWinnerGetDataById([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            lotoExportDataList response = new lotoExportDataList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+            string usersName = Convert.ToString(obj["usersName"]);
+            string exportId = Convert.ToString(obj["exportId"]);
+            string type = Convert.ToString(obj["type"]);
+          
+            string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+            string seqPage = Convert.ToString(obj["seqPage"]);
+
+
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(usersName)) usersName = "-1";
+            if (string.IsNullOrEmpty(exportId)) exportId = "-1";
+            if (string.IsNullOrEmpty(type)) type = "-1";
+
+            if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "100000000";
+            if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+
+
+            try
+            {
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.export_winner_get_data_byId(usersName, exportId, type, rowsOnPage, seqPage);
+                logger.Info("Call database export_winner_get_data_byId success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listLotoExportData = new lotoExportData[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        lotoExportData _obj = new lotoExportData();
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["seq"].ToString();
+                        _obj.winnerId = ds_regist.Tables[0].Rows[j]["WINNER_ID"].ToString();
+                        _obj.msisdn = ds_regist.Tables[0].Rows[j]["MSISDN"].ToString();
+                        _obj.date = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        _obj.gameId = ds_regist.Tables[0].Rows[j]["GAME_ID"].ToString();
+                        _obj.randomId = ds_regist.Tables[0].Rows[j]["RANDOM_ID"].ToString();
+                        _obj.betId = ds_regist.Tables[0].Rows[j]["BET_ID"].ToString();
+                        _obj.isPayOnline = ds_regist.Tables[0].Rows[j]["IS_PAY_ONLINE"].ToString();
+                        _obj.isPay = ds_regist.Tables[0].Rows[j]["IS_PAY"].ToString();
+                        _obj.winnerCode = ds_regist.Tables[0].Rows[j]["WINNER_CODE"].ToString();
+                        _obj.winnerName = ds_regist.Tables[0].Rows[j]["WINNER_NAME"].ToString();
+                        _obj.money = ds_regist.Tables[0].Rows[j]["MONEY"].ToString();
+                        response.listLotoExportData[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+        //Ham nay lay ve lich su cua mot export
+
+        [HttpPost]
+        public IActionResult exportGetHis([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            lotoExportHisList response = new lotoExportHisList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+            string usersName = Convert.ToString(obj["usersName"]);
+            string exportId = Convert.ToString(obj["exportId"]);
+           
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(exportId)) exportId = "-1";
+            if (string.IsNullOrEmpty(usersName)) usersName = "-1";
+          
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+
+
+            try
+            {
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.export_get_his(exportId, usersName);
+                logger.Info("Call database export_get_his success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+
+
+                    response.listLotoExportHis = new lotoExportHis[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        lotoExportHis _obj = new lotoExportHis();
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.users = ds_regist.Tables[0].Rows[j]["USERS"].ToString();
+                        _obj.date = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+                        _obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        _obj.exportId = ds_regist.Tables[0].Rows[j]["EXPORT_ID"].ToString();
+                        _obj.action = ds_regist.Tables[0].Rows[j]["ACTION"].ToString();
+                        
+                        response.listLotoExportHis[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+        //Ham nay lay ve danh sach export
+
+        [HttpPost]
+        public IActionResult exportGetList([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            lotoExportGetList response = new lotoExportGetList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+            string usersName = Convert.ToString(obj["usersName"]);
+            string exportId = Convert.ToString(obj["exportId"]);
+            string gameId = Convert.ToString(obj["gameId"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+            string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+            string seqPage = Convert.ToString(obj["seqPage"]);
+            string status = Convert.ToString(obj["status"]);
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(usersName)) usersName = "-1";
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+            if (string.IsNullOrEmpty(status)) status = "-1";
+            if (string.IsNullOrEmpty(exportId)) exportId = "-1";
+
+            
+            if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000";
+            if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+
+
+
+            try
+            {
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.export_get_list( usersName, gameId, fromDate, toDate,rowsOnPage,seqPage, status,exportId);
+                logger.Info("Call database export_get_list success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listLotoExportGet = new lotoExportGet[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        lotoExportGet _obj = new lotoExportGet();
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["seq"].ToString();
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+                        _obj.name = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        _obj.gameId = ds_regist.Tables[0].Rows[j]["GAME_ID"].ToString();
+                        _obj.fromDate = ds_regist.Tables[0].Rows[j]["FROM_DATE"].ToString();
+                        _obj.toDate = ds_regist.Tables[0].Rows[j]["TO_DATE"].ToString();
+                        _obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        _obj.createUsers = ds_regist.Tables[0].Rows[j]["CREATED_USERS"].ToString();
+                        _obj.createDate = ds_regist.Tables[0].Rows[j]["CREATED_DATE"].ToString();
+                        _obj.acceptUsers = ds_regist.Tables[0].Rows[j]["ACCEPT_USERS"].ToString();
+                        _obj.acceptDate = ds_regist.Tables[0].Rows[j]["ACCEPT_DATE"].ToString();
+                        _obj.moneySystem = ds_regist.Tables[0].Rows[j]["MONEY_SYSTEM"].ToString();
+                        _obj.moneyImport = ds_regist.Tables[0].Rows[j]["MONEY_IMPORT"].ToString();
+                        _obj.moneyNotImport = ds_regist.Tables[0].Rows[j]["MONEY_NOT_IN_IMPORT"].ToString();
+                        _obj.moneyNotSys = ds_regist.Tables[0].Rows[j]["MONEY_NOT_IN_SYS"].ToString();
+
+
+                        response.listLotoExportGet[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+        //Import data vao Export
+        //--;
+
+        [HttpPost]
+        public IActionResult exportInsertData([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            ResCommnon response = new ResCommnon();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI export_created: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+            
+            lotoImportDataList _data = JsonConvert.DeserializeObject<lotoImportDataList>(sendData.ToString());
+
+            string key = Convert.ToString(obj["key"]);
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+
+            try
+            {
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                string export_id = _data.exportId;
+
+
+                List<List<string>> DataColumms = new List<List<string>>();
+                var LIST_EXPORT_ID = new List<string>();
+                var LIST_WINNER_ID = new List<string>();
+                var LIST_MSISDN = new List<string>();
+                var LIST_MONEY = new List<string>();
+                var LIST_RANDOM_ID = new List<string>();
+                var LIST_BET_ID = new List<string>();
+                var LIST_WINNER_CODE = new List<string>();
+
+                foreach (lotoImportData eachData in _data.data)
+                {
+                    LIST_EXPORT_ID.Add(export_id);
+                    LIST_WINNER_ID.Add(eachData.winnerId);
+                    LIST_MSISDN.Add(eachData.msisdn);
+                    LIST_MONEY.Add(eachData.money);
+                    LIST_RANDOM_ID.Add(eachData.randomId);
+                    LIST_BET_ID.Add(eachData.betId);
+                    LIST_WINNER_CODE.Add(eachData.winnerCode);
+
+                }
+                DataColumms.Add(LIST_EXPORT_ID);
+                DataColumms.Add(LIST_WINNER_ID);
+                DataColumms.Add(LIST_MSISDN);
+                DataColumms.Add(LIST_MONEY);
+                DataColumms.Add(LIST_RANDOM_ID);
+                DataColumms.Add(LIST_BET_ID);
+                DataColumms.Add(LIST_WINNER_CODE);
+
+
+
+                balanceDataAccess.InsertBulkExport("LOTO_CMS_PKG.export_insert_data", DataColumms);
+
+                logger.Info("Call database export_created success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+        //Import blacklist
+        //
+        //format: msisdn,isLock (1=lock,0=ko lock)
+        [HttpPost]
+        public IActionResult blackInsertData([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            ResCommnon response = new ResCommnon();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI export_created: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            lotoBlackInsertList _data = JsonConvert.DeserializeObject<lotoBlackInsertList>(sendData.ToString());
+
+            string key = Convert.ToString(obj["key"]);
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+
+            try
+            {
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                string users = _data.users;
+
+
+                List<List<string>> DataColumms = new List<List<string>>();
+                var LIST_USERS = new List<string>();
+                var LIST_MSISDN = new List<string>();
+                var LIST_ISLOCK = new List<string>();
+                var LIST_NOTE = new List<string>();
+
+                foreach (lotoBlackInsert eachData in _data.data)
+                {
+                    LIST_USERS.Add(users);
+                    LIST_MSISDN.Add(eachData.msisdn);
+                    LIST_ISLOCK.Add(eachData.isLock);
+                    LIST_NOTE.Add(eachData.note);
+
+                }
+                DataColumms.Add(LIST_USERS);
+                DataColumms.Add(LIST_MSISDN);
+                DataColumms.Add(LIST_ISLOCK);
+                DataColumms.Add(LIST_NOTE);
+
+
+
+                balanceDataAccess.InsertBulkBlack("LOTO_CMS_PKG.blacklist_insert_data", DataColumms);
+
+                logger.Info("Call database export_created success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+        //Ham nay lay ve lich su cua mot export
+
+        [HttpPost]
+        public IActionResult backListGetList([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            lotoBlackGetList response = new lotoBlackGetList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+
+            var obj = JObject.Parse(sendData.ToString());
+
+            string usersName = Convert.ToString(obj["usersName"]);
+            string msisdn = Convert.ToString(obj["msisdn"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+            string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+            string seqPage = Convert.ToString(obj["seqPage"]);
+
+            string key = Convert.ToString(obj["key"]);
+            
+
+
+            if (string.IsNullOrEmpty(usersName)) usersName = "-1";
+            if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+            if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000";
+            if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+
+
+            try
+            {
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.blackList_get_list(usersName, msisdn, fromDate, toDate, rowsOnPage, seqPage);
+                logger.Info("Call database blackList_get_list success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listLotoBlackList = new lotoBlackGet[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        lotoBlackGet _obj = new lotoBlackGet();
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["seq"].ToString();
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.msisdn = ds_regist.Tables[0].Rows[j]["MSISDN"].ToString();
+                        _obj.date = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        _obj.users = ds_regist.Tables[0].Rows[j]["USERS"].ToString();
+                        _obj.isLock= ds_regist.Tables[0].Rows[j]["ISLOCK"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+                        response.listLotoBlackList[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        //Ham nay lay ve lich su cua mot ket qua nhap lieu
+        [HttpPost]
+        public IActionResult cmsGetTraficByDay([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            cmsRevenueList response = new cmsRevenueList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+            
+            string gameId = Convert.ToString(obj["gameId"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+
+            string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+            string seqPage = Convert.ToString(obj["seqPage"]);
+
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+           
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+            if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000";
+            if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+
+            try
+            {
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.report_get_total_trafic(gameId, fromDate,toDate, rowsOnPage, seqPage);
+                logger.Info("Call database report_get_total_trafic success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listRevenue = new cmsRevenue[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        cmsRevenue _obj = new cmsRevenue();
+                        _obj.date = ds_regist.Tables[0].Rows[j]["ngay"].ToString();
+                        _obj.gameId = ds_regist.Tables[0].Rows[j]["gameId"].ToString();
+                        _obj.totalUser = ds_regist.Tables[0].Rows[j]["unique_users"].ToString();
+                        _obj.totalTicket = ds_regist.Tables[0].Rows[j]["ticket"].ToString();
+                        _obj.totalMoney = ds_regist.Tables[0].Rows[j]["money_buy"].ToString();
+                        _obj.totalTicketWin = ds_regist.Tables[0].Rows[j]["ticket_win"].ToString();
+                        _obj.totalMoneyWin = ds_regist.Tables[0].Rows[j]["money_win"].ToString();
+                        _obj.rate = ds_regist.Tables[0].Rows[j]["tyle"].ToString();
+                        response.listRevenue[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+        //Ham nay lay ve lich su cua mot ket qua nhap lieu
+        [HttpPost]
+        public IActionResult cmsSearMsisdn([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            cmsSearchMsisdnList response = new cmsSearchMsisdnList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            string subId = Convert.ToString(obj["subId"]);
+            string msisdn = Convert.ToString(obj["msisdn"]);
+          
+
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(subId)) subId = "-1";
+            if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+           
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+            try
+            {
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.cmsSearMsisdn(subId, msisdn);
+                logger.Info("Call database cmsSearMsisdn success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+
+                    response.listSeachMsisdn = new cmsSearchMsisdn[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        cmsSearchMsisdn _obj = new cmsSearchMsisdn();
+                        
+                        _obj.subId = ds_regist.Tables[0].Rows[j]["sub_id"].ToString();
+                        _obj.msg = ds_regist.Tables[0].Rows[j]["msg"].ToString();
+                        _obj.msisdn = ds_regist.Tables[0].Rows[j]["msisdn"].ToString();
+                        _obj.lastLogin = ds_regist.Tables[0].Rows[j]["lastLogin"].ToString();
+                        _obj.createDate = ds_regist.Tables[0].Rows[j]["createDate"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["note"].ToString();
+                        _obj.status= ds_regist.Tables[0].Rows[j]["status"].ToString();
+                        _obj.lockDate = ds_regist.Tables[0].Rows[j]["lockDate"].ToString();
+                        response.listSeachMsisdn[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsLockByMsisdn([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            ResCommnon response = new ResCommnon();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            string subId = Convert.ToString(obj["subId"]);
+            string msisdn = Convert.ToString(obj["msisdn"]);
+            string users = Convert.ToString(obj["users"]);
+            string isLock = Convert.ToString(obj["isLock"]);
+            string note = Convert.ToString(obj["note"]);
+
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(subId)) subId = "-1";
+            if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+            if (string.IsNullOrEmpty(users)) users = "-1";
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+            try
+            {
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.cmsLockByMsisdn(subId, msisdn, users,isLock,note);
+                logger.Info("Call database cmsSearMsisdn success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+
+
+                }
+                else
+                {
+                    response.responseCode = "-1";
+                    response.responseMessage = "Err";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsGetInfoTicket([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            cmsTicketInfoList response = new cmsTicketInfoList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            string gameId = Convert.ToString(obj["gameId"]);
+            string msisdn = Convert.ToString(obj["msisdn"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+
+            string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+            string seqPage = Convert.ToString(obj["seqPage"]);
+
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+            if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000";
+            if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+            try
+            {
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.cmsGetInfoTicket(gameId,msisdn, fromDate, toDate, rowsOnPage, seqPage);
+                logger.Info("Call database cmsGetInfoTicket success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listTicketInfo = new cmsTicketInfo[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        cmsTicketInfo _obj = new cmsTicketInfo();
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["SEQ"].ToString();
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.billCode = ds_regist.Tables[0].Rows[j]["BILL_CODE"].ToString();
+                        _obj.subId = ds_regist.Tables[0].Rows[j]["SUBID"].ToString();
+                        _obj.users = ds_regist.Tables[0].Rows[j]["USERS"].ToString();
+                        _obj.date = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        _obj.money = ds_regist.Tables[0].Rows[j]["MONEY"].ToString();
+                        _obj.gameId = ds_regist.Tables[0].Rows[j]["gameId"].ToString();
+                        _obj.ticket = ds_regist.Tables[0].Rows[j]["STR"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+                        _obj.randomId = ds_regist.Tables[0].Rows[j]["RANDOM_ID"].ToString();
+                        response.listTicketInfo[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+    
+
+        [HttpPost]
+        public IActionResult cmsGetTicketWin([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+
+
+            cmsTicketWinList response = new cmsTicketWinList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            string gameId = Convert.ToString(obj["gameId"]);
+            string msisdn = Convert.ToString(obj["msisdn"]);
+            string subId = Convert.ToString(obj["subId"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+
+            string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+            string seqPage = Convert.ToString(obj["seqPage"]);
+
+
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+            if (string.IsNullOrEmpty(subId)) subId = "-1";
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+            if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000";
+            if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+
+
+            try
+            {
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.cmsGetTicketWin(gameId,msisdn,subId, fromDate, toDate, rowsOnPage, seqPage);
+                logger.Info("Call database cmsGetTicketWin success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listTicketWin = new cmsTicketWin[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        cmsTicketWin _obj = new cmsTicketWin();
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["SEQ"].ToString();
+                        _obj.id = ds_regist.Tables[0].Rows[j]["WINNER_ID"].ToString();
+                        _obj.date = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        _obj.msisdn = ds_regist.Tables[0].Rows[j]["MSISDN"].ToString();
+                        _obj.gameId = ds_regist.Tables[0].Rows[j]["GAME_ID"].ToString();
+                        _obj.randomId = ds_regist.Tables[0].Rows[j]["RANDOM_ID"].ToString();
+                        _obj.betId = ds_regist.Tables[0].Rows[j]["BET_ID"].ToString();
+                        _obj.isPayOnline = ds_regist.Tables[0].Rows[j]["IS_PAY_ONLINE"].ToString();
+                        _obj.isPay = ds_regist.Tables[0].Rows[j]["IS_PAY"].ToString();
+                        _obj.winnerCode = ds_regist.Tables[0].Rows[j]["WINNER_CODE"].ToString();
+                        _obj.winnerName = ds_regist.Tables[0].Rows[j]["WINNER_NAME"].ToString();
+                        response.listTicketWin[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsGetTraficTotal([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+
+
+            lotoTraficTotal response = new lotoTraficTotal();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            string gameId = Convert.ToString(obj["gameId"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+
+            
+
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+
+            try
+            {
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                DataSet ds_regist = balanceDataAccess.cmsGetTraficTotal(gameId, fromDate, toDate);
+                logger.Info("Call database cmsGetTraficTotal success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+
+                    response.uniqueUsers = ds_regist.Tables[0].Rows[0]["unique_users"].ToString();
+                    response.totalTicket = ds_regist.Tables[0].Rows[0]["ticket"].ToString();
+                    response.totalMoney = ds_regist.Tables[0].Rows[0]["money_buy"].ToString();
+                    response.totalTicketWin = ds_regist.Tables[0].Rows[0]["ticket_win"].ToString();
+                    response.totalMoneyWin = ds_regist.Tables[0].Rows[0]["money_win"].ToString();
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsGetTop([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+
+
+            lotoTopCusList response = new lotoTopCusList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI getTotalWinnerByBet: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            string gameId = Convert.ToString(obj["gameId"]);
+         
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+            string type = Convert.ToString(obj["type"]);
+            string totalRow = Convert.ToString(obj["totalRow"]);
+            string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+            string seqPage = Convert.ToString(obj["seqPage"]);
+
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(type)) type = "1";
+            if (string.IsNullOrEmpty(totalRow)) totalRow = "1000";
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+            if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000000";
+            if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+            try
+            {
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+
+                DataSet ds_regist = balanceDataAccess.cmsGetTop(gameId, fromDate, toDate, type, totalRow, rowsOnPage, seqPage);
+                logger.Info("Call database cmsGetTop success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listLotoCusTop = new lotoTopCus[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        lotoTopCus _obj = new lotoTopCus();
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["SEQ"].ToString();
+                        _obj.money = ds_regist.Tables[0].Rows[j]["MONEY"].ToString();
+                        _obj.cusId = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.actStatus= ds_regist.Tables[0].Rows[j]["ACTSTATUS"].ToString();
+                        _obj.address = ds_regist.Tables[0].Rows[j]["ADDRESS"].ToString();
+                        _obj.birthday = ds_regist.Tables[0].Rows[j]["BIRTHDATE"].ToString();
+                        _obj.district = ds_regist.Tables[0].Rows[j]["DISTRICT"].ToString();
+                        _obj.gentder = ds_regist.Tables[0].Rows[j]["GENDER"].ToString();
+                        _obj.idno=ds_regist.Tables[0].Rows[j]["IDNO"].ToString();
+                        _obj.idtype = ds_regist.Tables[0].Rows[j]["IDTYPE"].ToString();
+                        _obj.imageName1 = ds_regist.Tables[0].Rows[j]["IMAGENAME1"].ToString();
+                        _obj.imageName2 = ds_regist.Tables[0].Rows[j]["IMAGENAME2"].ToString();
+                        _obj.imageName3 = ds_regist.Tables[0].Rows[j]["IMAGENAME3"].ToString();
+                        _obj.imagePath = ds_regist.Tables[0].Rows[j]["IMAGEPATH"].ToString();
+                        _obj.isdn = ds_regist.Tables[0].Rows[j]["users"].ToString();
+                        _obj.language = ds_regist.Tables[0].Rows[j]["LANGUAGE"].ToString();
+                        _obj.precinct = ds_regist.Tables[0].Rows[j]["PRECINCT"].ToString();
+                        _obj.province = ds_regist.Tables[0].Rows[j]["PROVINCE"].ToString();
+                        _obj.subId = ds_regist.Tables[0].Rows[j]["SUBID"].ToString();
+                        _obj.subName = ds_regist.Tables[0].Rows[j]["SUBNAME"].ToString();
+
+                        _obj.isConfirm = ds_regist.Tables[0].Rows[j]["IS_CONFIRM"].ToString();
+                        _obj.date = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        _obj.lastUpdate = ds_regist.Tables[0].Rows[j]["LAST_UPDATE"].ToString();
+                        
+
+
+                        response.listLotoCusTop[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsGetParamList([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            cmsParamList response = new cmsParamList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI cmsGetParamList: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            string channel = Convert.ToString(obj["channel"]);
+            string codeGroup = Convert.ToString(obj["codeGroup"]);
+            string code = Convert.ToString(obj["code"]);
+            
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(channel)) channel = "-1";
+            if (string.IsNullOrEmpty(codeGroup)) codeGroup = "-1";
+            if (string.IsNullOrEmpty(code)) code = "-1";
+            
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+
+
+            try
+            {
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                //string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                DataSet ds_regist = balanceDataAccess.param_get_list(channel, codeGroup, code);
+                logger.Info("Call database param_get_list success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+                  
+
+                    response.listParam = new cmsParam [ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        cmsParam _obj = new cmsParam();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+                        _obj.values = ds_regist.Tables[0].Rows[j]["SVALUES"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+                        _obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        _obj.codeGroup = ds_regist.Tables[0].Rows[j]["CODE_GROUP"].ToString();
+                        _obj.display0 = ds_regist.Tables[0].Rows[j]["DISPLAY0"].ToString();
+                        _obj.display1 = ds_regist.Tables[0].Rows[j]["DISPLAY1"].ToString();
+                        _obj.display2 = ds_regist.Tables[0].Rows[j]["DISPLAY2"].ToString();
+                        _obj.display3 = ds_regist.Tables[0].Rows[j]["DISPLAY3"].ToString();
+                        _obj.display4 = ds_regist.Tables[0].Rows[j]["DISPLAY4"].ToString();
+                        _obj.display5 = ds_regist.Tables[0].Rows[j]["DISPLAY5"].ToString();
+                        _obj.gameId = ds_regist.Tables[0].Rows[j]["GAME_ID"].ToString();
+                        _obj.channel = ds_regist.Tables[0].Rows[j]["CHANNEL"].ToString();
+
+                        response.listParam[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsParamUpdate([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            ResCommnon response = new ResCommnon();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI cmsParamUpdate: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+            string id = Convert.ToString(obj["id"]);
+            string values = Convert.ToString(obj["values"]);
+            string note = Convert.ToString(obj["note"]);
+
+            string display0 = Convert.ToString(obj["display0"]);
+            string display1 = Convert.ToString(obj["display1"]);
+            string display2 = Convert.ToString(obj["display2"]);
+            string display3 = Convert.ToString(obj["display3"]);
+            string display4 = Convert.ToString(obj["display4"]);
+            string display5 = Convert.ToString(obj["display5"]);
+
+            string key = Convert.ToString(obj["key"]);
+
+            if (string.IsNullOrEmpty(id)) id = "-1";
+            if (string.IsNullOrEmpty(values)) values = "-1";
+            if (string.IsNullOrEmpty(note)) note = "-1";
+            if (string.IsNullOrEmpty(display0)) display0 = "-1";
+            if (string.IsNullOrEmpty(display1)) display1 = "-1";
+            if (string.IsNullOrEmpty(display2)) display2 = "-1";
+            if (string.IsNullOrEmpty(display3)) display3 = "-1";
+            if (string.IsNullOrEmpty(display4)) display4 = "-1";
+            if (string.IsNullOrEmpty(display5)) display5 = "-1";
+
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+            try
+            {
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                if (id=="-1" || values=="-1" || note == "-1" || display0 == "-1" || display1 == "-1" || display2 == "-1" || display3 == "-1" || display4 == "-1" || display5 == "-1")
+                {
+                    response.responseCode = "4"; //sai tham so
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "4", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = balanceDataAccess.param_update(id, values, note, display0, display1, display2, display3, display4, display5);
+                logger.Info("Call database param_get_list success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsRevenueTotal([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            cmsTraficTotalList response = new cmsTraficTotalList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI cmsGetParamList: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+
+            string channel = Convert.ToString(obj["channel"]);
+            string serviceId = Convert.ToString(obj["serviceId"]);
+            string gameId = Convert.ToString(obj["gameId"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(channel)) channel = "-1";
+            if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+            try
+            {
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                //string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                DataSet ds_regist = balanceDataAccess.cmsDoanhThuTongHop(channel,serviceId, gameId, fromDate,toDate);
+                logger.Info("Call database param_get_list success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+
+
+                    response.list = new cmsTraficTotal[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        cmsTraficTotal _obj = new cmsTraficTotal();
+
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["seq"].ToString();
+                        _obj.gameName = ds_regist.Tables[0].Rows[j]["tenGiai"].ToString();
+                        _obj.total = ds_regist.Tables[0].Rows[j]["tongBet"].ToString();
+                        _obj.moneyAfterTax = ds_regist.Tables[0].Rows[j]["tienSauThue"].ToString();
+                        _obj.moneyBeforeTax = ds_regist.Tables[0].Rows[j]["tienTruocThue"].ToString();
+                        _obj.tax = ds_regist.Tables[0].Rows[j]["thue"].ToString();
+                        _obj.moneyTax = ds_regist.Tables[0].Rows[j]["tienThue"].ToString();
+                        response.list[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsPaymentTotal([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            cmsTraficTotalList response = new cmsTraficTotalList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI cmsGetParamList: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+
+            string channel = Convert.ToString(obj["channel"]);
+            string serviceId = Convert.ToString(obj["serviceId"]);
+            string gameId = Convert.ToString(obj["gameId"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(channel)) channel = "-1";
+            if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+            try
+            {
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                //string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                DataSet ds_regist = balanceDataAccess.cmsTraThuongTongHop(channel, serviceId, gameId, fromDate, toDate);
+                logger.Info("Call database param_get_list success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+
+
+                    response.list = new cmsTraficTotal[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        cmsTraficTotal _obj = new cmsTraficTotal();
+
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["seq"].ToString();
+                        _obj.gameName = ds_regist.Tables[0].Rows[j]["tenGiai"].ToString();
+                        _obj.total = ds_regist.Tables[0].Rows[j]["tongBet"].ToString();
+                        _obj.moneyAfterTax = ds_regist.Tables[0].Rows[j]["tienSauThue"].ToString();
+                        _obj.moneyBeforeTax = ds_regist.Tables[0].Rows[j]["tienTruocThue"].ToString();
+                        _obj.tax = ds_regist.Tables[0].Rows[j]["thue"].ToString();
+                        _obj.moneyTax = ds_regist.Tables[0].Rows[j]["tienThue"].ToString();
+                        response.list[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+        [HttpPost]
+        public IActionResult cmsRevenueDetail([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            cmsTraficDetailList response = new cmsTraficDetailList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI cmsGetParamList: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+
+            string channel = Convert.ToString(obj["channel"]);
+            string serviceId = Convert.ToString(obj["serviceId"]);
+            string gameId = Convert.ToString(obj["gameId"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(channel)) channel = "-1";
+            if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+            try
+            {
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                //string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                DataSet ds_regist = balanceDataAccess.cmsDoanhThuChiTiet(channel, serviceId, gameId, fromDate, toDate);
+                logger.Info("Call database param_get_list success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+
+
+                    response.list = new cmsTraficDetail[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        cmsTraficDetail _obj = new cmsTraficDetail();
+
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["seq"].ToString();
+                        _obj.gameName = ds_regist.Tables[0].Rows[j]["tenGiai"].ToString();
+                        _obj.billCode = ds_regist.Tables[0].Rows[j]["BILL_CODE"].ToString();
+                        _obj.tranCode = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.date = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        _obj.cusName = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                       
+                        _obj.msisdn = ds_regist.Tables[0].Rows[j]["USERS"].ToString();
+                        _obj.quantity = ds_regist.Tables[0].Rows[j]["SOLUONG"].ToString();
+                        _obj.price = ds_regist.Tables[0].Rows[j]["DONGIA"].ToString();
+
+                        _obj.moneyAfterTax = ds_regist.Tables[0].Rows[j]["TIEN_SAU_THUE"].ToString();
+                        _obj.moneyBeforeTax = ds_regist.Tables[0].Rows[j]["TIEN_TRUOC_THUE"].ToString();
+                        _obj.tax = ds_regist.Tables[0].Rows[j]["THUE"].ToString();
+                        _obj.moneyTax = ds_regist.Tables[0].Rows[j]["TIEN_THUE"].ToString();
+                        response.list[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsPaymentDetail([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            cmsTraficDetailList response = new cmsTraficDetailList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI cmsGetParamList: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+
+            string channel = Convert.ToString(obj["channel"]);
+            string serviceId = Convert.ToString(obj["serviceId"]);
+            string gameId = Convert.ToString(obj["gameId"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(channel)) channel = "-1";
+            if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+
+            try
+            {
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                //string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                DataSet ds_regist = balanceDataAccess.cmsTraThuongChiTiet(channel, serviceId, gameId, fromDate, toDate);
+                logger.Info("Call database param_get_list success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+
+
+                    response.list = new cmsTraficDetail[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        cmsTraficDetail _obj = new cmsTraficDetail();
+
+                        _obj.seq = ds_regist.Tables[0].Rows[j]["seq"].ToString();
+                        _obj.gameName = ds_regist.Tables[0].Rows[j]["tenGiai"].ToString();
+                        _obj.billCode = ds_regist.Tables[0].Rows[j]["BILL_CODE"].ToString();
+                        _obj.tranCode = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.date = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        _obj.cusName = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+
+                        _obj.msisdn = ds_regist.Tables[0].Rows[j]["USERS"].ToString();
+                        _obj.quantity = ds_regist.Tables[0].Rows[j]["SOLUONG"].ToString();
+                        _obj.price = ds_regist.Tables[0].Rows[j]["DONGIA"].ToString();
+
+                        _obj.moneyAfterTax = ds_regist.Tables[0].Rows[j]["TIEN_SAU_THUE"].ToString();
+                        _obj.moneyBeforeTax = ds_regist.Tables[0].Rows[j]["TIEN_TRUOC_THUE"].ToString();
+                        _obj.tax = ds_regist.Tables[0].Rows[j]["THUE"].ToString();
+                        _obj.moneyTax = ds_regist.Tables[0].Rows[j]["TIEN_THUE"].ToString();
+                        response.list[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsTotalByTern([FromBody] dynamic sendData)
+        {
+            //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+            string urlPostGetErrCodeMessage = string.Empty, keyPostGetErrCodeMessage = string.Empty, _keyConfig = string.Empty;
+            memoryCache.TryGetValue("urlPostGetErrCodeMessage", out urlPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(urlPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                urlPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "urlPostGetErrCodeMessage");
+                memoryCache.Set("urlPostGetErrCodeMessage", urlPostGetErrCodeMessage, cacheExpiryOptions);
+            }
+
+            memoryCache.TryGetValue("keyPostGetErrCodeMessage", out keyPostGetErrCodeMessage);
+            if (string.IsNullOrEmpty(keyPostGetErrCodeMessage))
+            {
+                var cacheExpiryOptions1 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                keyPostGetErrCodeMessage = Common.GetValuesAppSetting("webConfig", "keyPostGetErrCodeMessage");
+                memoryCache.Set("keyPostGetErrCodeMessage", keyPostGetErrCodeMessage, cacheExpiryOptions1);
+            }
+
+            memoryCache.TryGetValue("_keyConfig", out _keyConfig);
+            if (string.IsNullOrEmpty(_keyConfig))
+            {
+                var cacheExpiryOptions2 = new MemoryCacheEntryOptions
+                {
+                    AbsoluteExpiration = DateTime.Now.AddMinutes(5),
+                    Priority = CacheItemPriority.High,
+                    SlidingExpiration = TimeSpan.FromMinutes(2),
+                    Size = 1024,
+                };
+                _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+                memoryCache.Set("_keyConfig", _keyConfig, cacheExpiryOptions2);
+            }
+
+
+
+            cmsTotalByTermList response = new cmsTotalByTermList();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI cmsTotalByTern: " + sendData.ToString());
+            var obj = JObject.Parse(sendData.ToString());
+
+
+
+            string channel = Convert.ToString(obj["channel"]);
+            string serviceId = Convert.ToString(obj["serviceId"]);
+            string gameId = Convert.ToString(obj["gameId"]);
+            string fromDate = Convert.ToString(obj["fromDate"]);
+            string toDate = Convert.ToString(obj["toDate"]);
+
+            string key = Convert.ToString(obj["key"]);
+
+
+            if (string.IsNullOrEmpty(channel)) channel = "-1";
+            if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+            if (string.IsNullOrEmpty(gameId)) gameId = "-1";
+            if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+            if (string.IsNullOrEmpty(toDate)) toDate = "-1";
+
+            if (string.IsNullOrEmpty(key)) key = "-1";
+            //var obj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(obj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+
+            try
+            {
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                //string channel = Convert.ToString(obj["channel"]);
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.responseMessage = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+                //Check key for authencation
+                string _keyDecrypt =ResfullApi.Models.CustomEncryption.Decrypt(key);
+
+
+                if (_keyDecrypt != _keyConfig)
+                {
+                    response.responseCode = "-3";
+                    //response.responseMessage = "Authentication is false";
+                    response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                DataSet ds_regist = balanceDataAccess.cmsTongHopTheoKyQuay(channel, serviceId, gameId, fromDate, toDate);
+                logger.Info("Call database param_get_list success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+
+
+                    response.list = new cmsTotalByTerm[ds_regist.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        cmsTotalByTerm _obj = new cmsTotalByTerm();
+
+                        _obj.randomId = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.startDate = ds_regist.Tables[0].Rows[j]["DATE_START"].ToString();
+                        _obj.endDate = ds_regist.Tables[0].Rows[j]["DATE_END"].ToString();
+                        _obj.result = ds_regist.Tables[0].Rows[j]["RESULT"].ToString();
+                        _obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        _obj.money = ds_regist.Tables[0].Rows[j]["money"].ToString();
+
+                        _obj.moneyWin = ds_regist.Tables[0].Rows[j]["money_win"].ToString();
+                        _obj.rate = ds_regist.Tables[0].Rows[j]["rate"].ToString();
+                        
+                        response.list[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.responseCode = "1";
+                    response.responseMessage = "Nodata";
+                }
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+                response.responseMessage = Common.GetErrMessageFromErrCode(response.responseCode, "0", urlPostGetErrCodeMessage, keyPostGetErrCodeMessage, "APP");
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    }
+
+
+   
+
+}

+ 532 - 0
ApiWeb/ApiProcessToken/Controllers/luckySix.cs

@@ -0,0 +1,532 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+
+using ResfullApi.Models;
+using Newtonsoft.Json;
+using System.Data;
+using Newtonsoft.Json.Linq;
+using Microsoft.AspNetCore.Mvc;
+
+namespace ApiProcess.Controllers
+{
+    [ApiController]
+    [Route("api/[controller]/[action]/data")]
+    public class luckySix : ControllerBase
+    {
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(luckySix));
+        // {"users":"50940227941","serviceId":"30","listNumber":"1$12$23%65$23$23","money":"30","times":"3"}
+        [HttpPost]
+        public IActionResult bet([FromBody] dynamic sendData)
+        {
+            ////log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            ////log4net.Config.XmlConfigurator.Configure();
+            lksObjBetResponse response = new lksObjBetResponse();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                lksObjBetResquest data = JsonConvert.DeserializeObject<lksObjBetResquest>(sendData.ToString());
+                logger.Info("New request income bet :" + data.ToString());
+                DataSet ds_regist = lksDataAccess.LKS_BET(data.users, data.serviceid, data.listNumber, data.money, data.times);
+                logger.Info("Call database LKS_BET success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.listBetId = ds_regist.Tables[0].Rows[0]["listBetId"].ToString();
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                    response.listRandomId = ds_regist.Tables[0].Rows[0]["listRandomId"].ToString();
+                    response.bet_coin = ds_regist.Tables[0].Rows[0]["bet_coin"].ToString();
+                    response.cash_coin = ds_regist.Tables[0].Rows[0]["cash_coin"].ToString();
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        //lay danh sach cac bet gan nhat
+        //{"users":"50940227941","serviceId":"30","status":"0","date":"-1","top":"100","isWin":"1"}
+        [HttpPost]
+        public IActionResult getListBet([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            lksObjGetBetResponse response = new lksObjGetBetResponse();
+            response.status = "-1";
+            response.message = "Err unknow";
+            logger.Info("New request income getListBet :" + sendData.ToString());
+
+            
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string status = Convert.ToString(userObj["status"]);
+                string date = Convert.ToString(userObj["date"]);
+                string top = Convert.ToString(userObj["top"]);
+                string isWin = Convert.ToString(userObj["isWin"]);
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(serviceid)) serviceid = "-1";
+                if (string.IsNullOrEmpty(status)) status = "-1";
+                if (string.IsNullOrEmpty(date)) date = "-1";
+                if (string.IsNullOrEmpty(top)) top = "-1";
+                if (string.IsNullOrEmpty(isWin)) isWin = "0";
+
+                DataSet ds_regist = lksDataAccess.LKS_BET_GET_LIST(users, serviceid, status, date, top, isWin);
+                logger.Info("Call database LKS_BET_GET_LIST success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = "0";
+                    response.message = "Get list Bet of user is success";
+                    response.listBet = new lksObjBet[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        lksObjBet obj = new lksObjBet();
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.userId = ds_regist.Tables[0].Rows[j]["USERS_ID"].ToString();
+                        obj.listNumber = ds_regist.Tables[0].Rows[j]["STR"].ToString();
+                        obj.listNumberSort = ds_regist.Tables[0].Rows[j]["STR_SORT"].ToString();
+                        obj.randomResult = ds_regist.Tables[0].Rows[j]["randomResult"].ToString();
+                        obj.dateBet = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        obj.typeBet = ds_regist.Tables[0].Rows[j]["TYPE"].ToString();
+                        obj.moneyBet = ds_regist.Tables[0].Rows[j]["BET_MONEY"].ToString();
+                        obj.moneyWin = ds_regist.Tables[0].Rows[j]["MONEY_WIN"].ToString();
+                        obj.randomId = ds_regist.Tables[0].Rows[j]["RANDOM_ID"].ToString();
+                        obj.randomStatus = ds_regist.Tables[0].Rows[j]["RANDOM_STATUS"].ToString();
+                        obj.randomStartDate = ds_regist.Tables[0].Rows[j]["RANDOM_START_DATE"].ToString();
+                        obj.randomEndDate = ds_regist.Tables[0].Rows[j]["RANDOM_END_DATE"].ToString();
+                        obj.randomSysDate = ds_regist.Tables[0].Rows[j]["RANDOM_SYS_DATE"].ToString();
+
+
+                        //Thong tin usser
+                        obj.users = ds_regist.Tables[0].Rows[0]["users"].ToString();
+                        obj.serviceid = ds_regist.Tables[0].Rows[0]["serviceid"].ToString();
+                        obj.fullName = ds_regist.Tables[0].Rows[0]["fullName"].ToString();
+                        obj.sex = ds_regist.Tables[0].Rows[0]["sex"].ToString();
+                        obj.address = ds_regist.Tables[0].Rows[0]["address"].ToString();
+                        obj.provinceId = ds_regist.Tables[0].Rows[0]["provinceId"].ToString();
+                        obj.cardNumber = ds_regist.Tables[0].Rows[0]["cardNumber"].ToString();
+                        obj.email = ds_regist.Tables[0].Rows[0]["email"].ToString();
+                        obj.company = ds_regist.Tables[0].Rows[0]["company"].ToString();
+                        obj.description = ds_regist.Tables[0].Rows[0]["description"].ToString();
+                        obj.picture = ds_regist.Tables[0].Rows[0]["picture"].ToString();
+                        obj.sexNeed = ds_regist.Tables[0].Rows[0]["sexNeed"].ToString();
+                        obj.birthday = ds_regist.Tables[0].Rows[0]["birthday"].ToString();
+                        obj.height = ds_regist.Tables[0].Rows[0]["height"].ToString();
+
+
+                        obj.weight = ds_regist.Tables[0].Rows[0]["weight"].ToString();
+                        obj.work = ds_regist.Tables[0].Rows[0]["work"].ToString();
+
+
+
+
+                        response.listBet[j] = obj;
+                    }
+                    
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+
+        //{"users":"50940227941","serviceId":"30","date":"-1","top":"100"}
+        [HttpPost]
+        public IActionResult getTopUsersBet([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersObjProfileList response = new usersObjProfileList();
+            
+            logger.Info("New request income getListBet :" + sendData.ToString());
+
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string date = Convert.ToString(userObj["date"]);
+                string top = Convert.ToString(userObj["top"]);
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(serviceid)) serviceid = "-1";
+                
+                if (string.IsNullOrEmpty(date)) date = "-1";
+                if (string.IsNullOrEmpty(top)) top = "-1";
+
+                DataSet ds_regist = lksDataAccess.LKS_BET_GET_TOP_USERS(users, serviceid, date, top);
+                logger.Info("Call database LKS_BET_GET_TOP_USERS success:");
+
+
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listProfile = new usersObjProfile[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        usersObjProfile obj = new usersObjProfile();
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.users = ds_regist.Tables[0].Rows[j]["users"].ToString();
+                        obj.serviceid = ds_regist.Tables[0].Rows[j]["serviceid"].ToString();
+                        obj.fullName = ds_regist.Tables[0].Rows[j]["fullName"].ToString();
+                        obj.sex = ds_regist.Tables[0].Rows[j]["sex"].ToString();
+                        obj.address = ds_regist.Tables[0].Rows[j]["address"].ToString();
+                        obj.provinceId = ds_regist.Tables[0].Rows[j]["provinceId"].ToString();
+                        obj.cardNumber = ds_regist.Tables[0].Rows[j]["cardNumber"].ToString();
+                        obj.email = ds_regist.Tables[0].Rows[j]["email"].ToString();
+                        obj.company = ds_regist.Tables[0].Rows[j]["company"].ToString();
+                        obj.description = ds_regist.Tables[0].Rows[j]["description"].ToString();
+                        obj.picture = ds_regist.Tables[0].Rows[j]["picture"].ToString();
+                        obj.sexNeed = ds_regist.Tables[0].Rows[j]["sexNeed"].ToString();
+                        obj.birthday = ds_regist.Tables[0].Rows[j]["birthday"].ToString();
+                        obj.height = ds_regist.Tables[0].Rows[j]["height"].ToString();
+
+
+                        obj.weight = ds_regist.Tables[0].Rows[j]["weight"].ToString();
+                        obj.work = ds_regist.Tables[0].Rows[j]["work"].ToString();
+                        obj.isLike = ds_regist.Tables[0].Rows[j]["isLike"].ToString();
+                        obj.usersId = ds_regist.Tables[0].Rows[j]["USER_ID"].ToString();
+                        obj.totalPic = ds_regist.Tables[0].Rows[j]["PIC_TOTAL"].ToString();
+                        obj.totalLike = ds_regist.Tables[0].Rows[j]["TOTALLIKE"].ToString();
+                        obj.totalView = ds_regist.Tables[0].Rows[j]["TOTALVIEW"].ToString();
+
+                        obj.lookingFor = ds_regist.Tables[0].Rows[j]["LOOKING_FOR"].ToString();
+
+
+                        DataSet dsInterests = new DataSet();
+                        dsInterests = usersDataAccess.USERS_GET_INTERESTS_BY_USER("-1", users, serviceid);
+                        if (dsInterests != null & dsInterests.Tables[0].Rows.Count > 0)
+                        {
+                            obj.listInterests = new usersInterests[dsInterests.Tables[0].Rows.Count];
+                            for (int k = 0; k < dsInterests.Tables[0].Rows.Count; k++)
+                            {
+                                usersInterests obj1 = new usersInterests();
+                                obj1.id = dsInterests.Tables[0].Rows[k]["id"].ToString();
+                                obj1.code = dsInterests.Tables[0].Rows[k]["code"].ToString();
+                                obj1.name = dsInterests.Tables[0].Rows[k]["name"].ToString();
+                                obj1.picture = dsInterests.Tables[0].Rows[k]["PICTURE"].ToString();
+
+                                obj.listInterests[k] = obj1;
+
+
+                            }
+                        }
+
+
+                        DataSet dsGift = new DataSet();
+                        dsGift = usersDataAccess.USERS_GIFT_GET_BUY_TOTAL_USERS(users, serviceid);
+                        if (dsGift != null & dsGift.Tables[0].Rows.Count > 0)
+                        {
+                            obj.listGift = new usersGift[dsGift.Tables[0].Rows.Count];
+                            for (int n = 0; n < dsGift.Tables[0].Rows.Count; n++)
+                            {
+                                usersGift obj2 = new usersGift();
+                                obj2.id = dsGift.Tables[0].Rows[n]["id"].ToString();
+                                obj2.code = dsGift.Tables[0].Rows[n]["code"].ToString();
+                                obj2.name = dsGift.Tables[0].Rows[n]["name"].ToString();
+                                obj2.chargMoney = dsGift.Tables[0].Rows[n]["CHARGE_MONEY"].ToString();
+                                obj2.chargeCode = dsGift.Tables[0].Rows[n]["CHARGE_CODE"].ToString();
+                                obj2.coin = dsGift.Tables[0].Rows[n]["COIN"].ToString();
+                                obj2.status = dsGift.Tables[0].Rows[n]["STATUS"].ToString();
+
+                                obj.listGift[n] = obj2;
+
+
+                            }
+                        }
+
+
+                        response.listProfile[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+        //{"users":"50940227941","serviceId":"30","totalDay":"30"}
+        [HttpPost]
+        public IActionResult getTotalBet([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            lksObjGetBetTotalResponse response = new lksObjGetBetTotalResponse();
+            response.status = "-1";
+            response.message = "Err unknow";
+            string total_day = "30";
+            try
+            {
+                lksObjGetBetTotalRequest data = JsonConvert.DeserializeObject<lksObjGetBetTotalRequest>(sendData.ToString());
+                if (!string.IsNullOrEmpty(data.totalDay)) total_day = data.totalDay;
+                logger.Info("New request income getTotalBet :" + data.ToString());
+                DataSet ds_regist = lksDataAccess.LKS_BET_GET_TOTAL(data.users, data.serviceid, total_day);
+                logger.Info("Call database LKS_BET_GET_TOTAL success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = "0";
+                    response.message = "Get list Bet of user is success";
+                    response.listTotalBet = new lksObjGetBetTotal[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        lksObjGetBetTotal obj = new lksObjGetBetTotal();
+                        obj.date = ds_regist.Tables[0].Rows[j]["vdate"].ToString();
+                        obj.betWin = ds_regist.Tables[0].Rows[j]["is_win"].ToString();
+                        obj.betLost = ds_regist.Tables[0].Rows[j]["is_lost"].ToString();
+                        response.listTotalBet[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+        // {"randomId":"3","status":"-1","date":"02/02/2020"}
+        [HttpPost]
+        public IActionResult getListRandom([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            lksObjRandomGetResponse response = new lksObjRandomGetResponse();
+
+            try
+            {
+                lksObjRandomGetRequest data = JsonConvert.DeserializeObject<lksObjRandomGetRequest>(sendData.ToString());
+                logger.Info("New request income getListRandom :" + data.ToString());
+                DataSet ds_regist = lksDataAccess.LKS_RANDOM_GET_BY_DATE(data.randomId,data.status,data.date);
+                logger.Info("Call database LKS_RANDOM_GET_BY_DATE success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = "0";
+                    response.message = "Get list Bet of user is success";
+                    response.listRandom = new lksObjRandom[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        lksObjRandom obj = new lksObjRandom();
+
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        obj.randomStr = ds_regist.Tables[0].Rows[j]["STR"].ToString();
+                        obj.dateStart = ds_regist.Tables[0].Rows[j]["DATE_START"].ToString();
+                        obj.dateEnd = ds_regist.Tables[0].Rows[j]["DATE_END"].ToString();
+                        obj.sysdate = ds_regist.Tables[0].Rows[j]["DATE_SYS"].ToString();
+
+
+                        
+                        response.listRandom[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+        // {"randomId":"3"}
+        [HttpPost]
+        public IActionResult getRandomById([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            lksObjRandomResponse response = new lksObjRandomResponse();
+            
+            try
+            {
+                lksObjRandomRequest data = JsonConvert.DeserializeObject<lksObjRandomRequest>(sendData.ToString());
+                logger.Info("New request income getRandomById :" + data.ToString());
+                DataSet ds_regist = lksDataAccess.LKS_RANDOM_GET(data.randomId);
+                logger.Info("Call database LKS_RANDOM_GET success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.id = ds_regist.Tables[0].Rows[0]["id"].ToString();
+                    response.status = ds_regist.Tables[0].Rows[0]["STATUS"].ToString();
+                    response.randomStr = ds_regist.Tables[0].Rows[0]["STR"].ToString();
+                    response.dateStart = ds_regist.Tables[0].Rows[0]["DATE_START"].ToString();
+                    response.dateEnd = ds_regist.Tables[0].Rows[0]["DATE_END"].ToString();
+                    response.sysdate = ds_regist.Tables[0].Rows[0]["DATE_SYS"].ToString();
+                    
+                    
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        [HttpPost]
+        //{"users":"10","serviceId":"30","fromdDate":"01/01/2020","toDate":"01/10/2020" } 
+        public IActionResult reportTotalBuyDate([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            lksReportTotalList response = new lksReportTotalList();
+            response.status = "-1";
+            response.message = "Err unknow";
+            logger.Info("New request income report_total :" + sendData.ToString());
+
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string fromdate = Convert.ToString(userObj["fromDate"]);
+                string todate = Convert.ToString(userObj["toDate"]);
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(serviceid)) serviceid = "-1";
+                if (string.IsNullOrEmpty(fromdate)) fromdate = "01/01/1990";
+                if (string.IsNullOrEmpty(todate)) todate = "01/01/1990";
+
+
+                DataSet ds_regist = lksDataAccess.LKS_REPORT_TOTAL(users, serviceid, fromdate, todate);
+                logger.Info("Call database LKS_REPORT_TOTAL success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.listOfDate = new lksReportTotalObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        lksReportTotalObj obj = new lksReportTotalObj();
+                        obj.date = ds_regist.Tables[0].Rows[j]["ngay"].ToString();
+                        obj.totalBet = ds_regist.Tables[0].Rows[j]["total_bet"].ToString();
+                        obj.totalBetWin = ds_regist.Tables[0].Rows[j]["total_bet_win"].ToString();
+                        obj.totalBetNotWin = ds_regist.Tables[0].Rows[j]["total_bet_not_win"].ToString();
+                        obj.totalCoins = ds_regist.Tables[0].Rows[j]["total_coins"].ToString();
+                        obj.totalCoinsWin = ds_regist.Tables[0].Rows[j]["total_coins_win"].ToString();
+                        obj.totalMoneyBuy = ds_regist.Tables[0].Rows[j]["total_money_buy"].ToString();
+                        obj.totalCoinsBuy = ds_regist.Tables[0].Rows[j]["total_coins_buy"].ToString();
+                        obj.totalMoneyChange = ds_regist.Tables[0].Rows[j]["total_money_change"].ToString();
+                        obj.totalCoinsChange = ds_regist.Tables[0].Rows[j]["total_coins_change"].ToString();
+
+                        response.listOfDate[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        
+
+
+
+    }
+}

+ 360 - 0
ApiWeb/ApiProcessToken/Controllers/newsSms.cs

@@ -0,0 +1,360 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+
+using ResfullApi.Models;
+using Newtonsoft.Json;
+using System.Data;
+using Microsoft.AspNetCore.Mvc;
+using CommonObj.common;
+using Newtonsoft.Json.Linq;
+using Microsoft.Extensions.Caching.Memory;
+
+namespace ApiProcess.Controllers
+{
+    [ApiController]
+    [Route("api/[controller]/[action]/data")]
+    public class newsSms : ControllerBase
+    {
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(newsSms));
+        private IMemoryCache memoryCache;
+        public newsSms(IMemoryCache memoryCache)
+        {
+            this.memoryCache = memoryCache;
+        }
+
+        // {"title":"xxxx","serviceId":"30","content":"cong hoa xa hoi chu nghia","dateSend":"01/12/2020 01:01:10"}
+        [HttpPost]
+        public IActionResult Insert([FromBody] dynamic sendData)
+        {
+            ////log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            ////log4net.Config.XmlConfigurator.Configure();
+            newsObjResponse response = new newsObjResponse();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                newsSmsObjRequest data = JsonConvert.DeserializeObject<newsSmsObjRequest>(sendData.ToString());
+                logger.Info("New request income news_insert :" + data.ToString());
+
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var obj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+                DataSet ds_regist = newsSmsDataAccess.sms_news_insert(data.title, data.serviceid, data.content, data.dateSend);
+                logger.Info("Call database news_insert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                    response.newsId = ds_regist.Tables[0].Rows[0]["newsId"].ToString();
+                    
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        //{"id":"2","title":"content1","serviceId":"30","content":"haha","dateSend":"01/12/2020 01:01:10","type":"1"}
+        //--0=delete,1=update
+        [HttpPost]
+        public IActionResult Update([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                newsSmsObjUpdateRequest data = JsonConvert.DeserializeObject<newsSmsObjUpdateRequest>(sendData.ToString());
+                logger.Info("New request income Update :" + data.ToString());
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var obj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+                DataSet ds_regist = newsSmsDataAccess.sms_news_update(data.id, data.title, data.serviceid, data.content, data.dateSend,data.type);
+                logger.Info("Call database Update success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                    
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        [HttpPost]
+        //{"id":"10","serviceId":"30","status":"-1","date":"13/02/2020" } 
+        public IActionResult GetList([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            newsSmsObjGetResponse response = new newsSmsObjGetResponse();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                newsObjGetRequest data = JsonConvert.DeserializeObject<newsObjGetRequest>(sendData.ToString());
+                logger.Info("New request income Get :" + data.ToString());
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var obj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds_regist = newsSmsDataAccess.sms_news_get( data.serviceid, data.status, data.date,data.id,data.top);
+                logger.Info("Call database Get success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.listNewsSms = new newsSmsObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        newsSmsObj obj = new newsSmsObj();
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.serviceid = ds_regist.Tables[0].Rows[j]["serviceid"].ToString();
+                        obj.status = ds_regist.Tables[0].Rows[j]["newsStatus"].ToString();
+                        obj.title = ds_regist.Tables[0].Rows[j]["title"].ToString();
+                        obj.content = ds_regist.Tables[0].Rows[j]["content"].ToString();
+                        obj.dateSend = ds_regist.Tables[0].Rows[j]["dateSend"].ToString();
+                        obj.sysdate = ds_regist.Tables[0].Rows[j]["vsysdate"].ToString();
+                        
+                        response.listNewsSms[j] = obj;
+                    }
+                    
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+      
+
+
+
+
+    }
+}

+ 2216 - 0
ApiWeb/ApiProcessToken/Controllers/newsWeb.cs

@@ -0,0 +1,2216 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+
+using ResfullApi.Models;
+using Newtonsoft.Json;
+using System.Data;
+
+
+using Newtonsoft.Json.Linq;
+using System.Data;
+using System.Configuration;
+using Microsoft.AspNetCore.Mvc;
+using CommonObj.common;
+using Microsoft.Extensions.Caching.Memory;
+using CommonObj.model;
+
+namespace ApiProcess.Controllers
+{
+    [ApiController]
+    [Route("api/[controller]/[action]/data")]
+    public class newsWeb : ControllerBase
+    {
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(newsWeb));
+        private IMemoryCache memoryCache;
+        public newsWeb(IMemoryCache memoryCache)
+        {
+            this.memoryCache = memoryCache;
+        }
+
+
+        // {"USERS":"123","SV_ID":"1","USERS":"NEWS_ID"}
+
+        [HttpPost]
+        public IActionResult newsUpdateRead([FromBody] dynamic sendData)
+        {
+            ////log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            ////log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                logger.Info("New request income newsUpdateRead :" + sendData.ToString());
+                var obj = JObject.Parse(sendData.ToString());
+                string USERS = Convert.ToString(obj["users"]);
+                string SV_ID = Convert.ToString(obj["serviceId"]);
+                string NEWS_ID = Convert.ToString(obj["NEWS_ID"]);
+
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+                DataSet ds_regist = newsWebDataAccess.sv_news_up_read(USERS, SV_ID, NEWS_ID);
+                logger.Info("Call database sv_news_up_read success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                   
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        // {"users":"123","serviceId":"1","NEWS_ID":"100029"}
+
+        [HttpPost]
+        public IActionResult newsSendMt([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                logger.Info("New request income newsUpdateRead :" + sendData.ToString());
+                var obj = JObject.Parse(sendData.ToString());
+                string USERS = Convert.ToString(obj["users"]);
+                string SV_ID = Convert.ToString(obj["serviceId"]);
+                string NEWS_ID = Convert.ToString(obj["NEWS_ID"]);
+
+                //var obj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds_regist = newsWebDataAccess.sv_news_sendMT(USERS, SV_ID, NEWS_ID);
+                logger.Info("Call database sv_news_up_read success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        //{"PARENT_ID":"-1","serviceId":"4","CODE":"1234","NAME_GLOBAL":"New1","NAME_LOCAL":"New1","DESCRIPTION_GLOBAL":"New1","DESCRIPTION_LOCAL":"New1","INTRODUCTION_GLOBAL":"New1","INTRODUCTION_LOCAL":"New1","ICON":"New1","LOGO":"New1","CONTENT":"123","CONTENT_TYPE":"1","PROVINCE_ID":"1","TOPIC_ID":"1","FROM_DATE":"01/07/2020","TO_DATE":"16/07/2020","IS_SHOW":"0","TYPE":"1","users":"346464534"}
+        [HttpPost]
+        public IActionResult newsInsert([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            newsObjResponse response = new newsObjResponse();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                logger.Info("New request income newsInsert :" + sendData.ToString());
+                var obj = JObject.Parse(sendData.ToString());
+                string USERS = Convert.ToString(obj["users"]);
+                string SV_ID = Convert.ToString(obj["serviceId"]);
+                string PARENT_ID = Convert.ToString(obj["PARENT_ID"]);
+                string CODE = Convert.ToString(obj["CODE"]);
+                string NAME_GLOBAL = Convert.ToString(obj["NAME_GLOBAL"]);
+                string NAME_LOCAL = Convert.ToString(obj["NAME_LOCAL"]);
+                string DESCRIPTION_GLOBAL = Convert.ToString(obj["DESCRIPTION_GLOBAL"]);
+                string DESCRIPTION_LOCAL = Convert.ToString(obj["DESCRIPTION_LOCAL"]);
+                string INTRODUCTION_GLOBAL = Convert.ToString(obj["INTRODUCTION_GLOBAL"]);
+                string INTRODUCTION_LOCAL = Convert.ToString(obj["INTRODUCTION_LOCAL"]);
+                string ICON = Convert.ToString(obj["ICON"]);
+                string LOGO = Convert.ToString(obj["LOGO"]);
+                string CONTENT = Convert.ToString(obj["CONTENT"]);
+                string CONTENT_TYPE = Convert.ToString(obj["CONTENT_TYPE"]);
+
+                string PROVINCE_ID = Convert.ToString(obj["PROVINCE_ID"]);
+                string TOPIC_ID = Convert.ToString(obj["TOPIC_ID"]);
+                string FROM_DATE = Convert.ToString(obj["FROM_DATE"]);
+                string TO_DATE = Convert.ToString(obj["TO_DATE"]);
+                string IS_SHOW = Convert.ToString(obj["IS_SHOW"]);
+                string TYPE = Convert.ToString(obj["TYPE"]);
+                string NOTE = Convert.ToString(obj["NOTE"]);
+
+               
+                if (string.IsNullOrEmpty(PARENT_ID)) PARENT_ID = "-1";
+
+
+                if (string.IsNullOrEmpty(PROVINCE_ID)) PROVINCE_ID = "-1";
+                if (string.IsNullOrEmpty(TOPIC_ID)) TOPIC_ID = "-1";
+                if (string.IsNullOrEmpty(FROM_DATE)) FROM_DATE = "01/01/1900 00:00:00";
+                if (string.IsNullOrEmpty(TO_DATE)) TO_DATE = "01/01/1900 00:00:00";
+                if (string.IsNullOrEmpty(IS_SHOW)) IS_SHOW = "0";
+                if (string.IsNullOrEmpty(TYPE)) TYPE = "0";
+                if (string.IsNullOrEmpty(USERS)) USERS = "0";
+                if (string.IsNullOrEmpty(NOTE)) NOTE = "null";
+
+
+                string NAME_GLOBAL1 = Convert.ToString(obj["NAME_GLOBAL1"]);
+                string NAME_GLOBAL2 = Convert.ToString(obj["NAME_GLOBAL2"]);
+                string DESCRIPTION_GLOBAL1 = Convert.ToString(obj["DESCRIPTION_GLOBAL1"]);
+                string DESCRIPTION_GLOBAL2 = Convert.ToString(obj["DESCRIPTION_GLOBAL2"]);
+                string INTRODUCTION_GLOBAL1 = Convert.ToString(obj["INTRODUCTION_GLOBAL1"]);
+                string INTRODUCTION_GLOBAL2 = Convert.ToString(obj["INTRODUCTION_GLOBAL2"]);
+                string CONTENT_GLOBAL = Convert.ToString(obj["CONTENT_GLOBAL"]);
+                string CONTENT_GLOBAL1 = Convert.ToString(obj["INTRODUCTION_GLOBAL2"]);
+                string CONTENT_GLOBAL2 = Convert.ToString(obj["INTRODUCTION_GLOBAL2"]);
+
+                //var obj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                logger.Info("SV_ID=" + SV_ID + " PARENT_ID=" + PARENT_ID + " CODE=" + CODE + " PROVINCE_ID=" + PROVINCE_ID + " TOPIC_ID=" + TOPIC_ID + " IS_SHOW=" + IS_SHOW + " TYPE=" + TYPE);
+
+                DataSet ds_regist = newsWebDataAccess.sv_news_insert(SV_ID,PARENT_ID, CODE, NAME_GLOBAL, NAME_LOCAL,DESCRIPTION_GLOBAL,DESCRIPTION_LOCAL,
+                    INTRODUCTION_GLOBAL, INTRODUCTION_LOCAL, ICON, LOGO, CONTENT, CONTENT_TYPE, PROVINCE_ID, TOPIC_ID, FROM_DATE, TO_DATE, IS_SHOW, TYPE, USERS,NOTE,
+                    NAME_GLOBAL1, NAME_GLOBAL2, DESCRIPTION_GLOBAL1, DESCRIPTION_GLOBAL2, CONTENT_GLOBAL, CONTENT_GLOBAL1, CONTENT_GLOBAL2, INTRODUCTION_GLOBAL1, INTRODUCTION_GLOBAL2);
+                logger.Info("Call database sv_news_insert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                    response.newsId = ds_regist.Tables[0].Rows[0]["newsId"].ToString();
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        // {"ID":"123","PARENT_ID":"-1","SV_ID":"1","CODE":"1234","NAME_GLOBAL":"New1","NAME_LOCAL":"New1","DESCRIPTION_GLOBAL":"New1","DESCRIPTION_LOCAL":"New1","INTRODUCTION_GLOBAL":"New1",
+        //"INTRODUCTION_LOCAL":"New1","ICON":"New1","LOGO":"New1","CONTENT":"123","CONTENT_TYPE":"1","TYPE":"0"}
+        [HttpPost]
+        public IActionResult newsUpdate([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            newsObjResponse response = new newsObjResponse();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                logger.Info("New request income newsUpdate :" + sendData.ToString());
+                var obj = JObject.Parse(sendData.ToString());
+                string SV_ID = Convert.ToString(obj["serviceId"]);
+                string PARENT_ID = Convert.ToString(obj["PARENT_ID"]);
+                string CODE = Convert.ToString(obj["CODE"]);
+                string NAME_GLOBAL = Convert.ToString(obj["NAME_GLOBAL"]);
+                string NAME_LOCAL = Convert.ToString(obj["NAME_LOCAL"]);
+                string DESCRIPTION_GLOBAL = Convert.ToString(obj["DESCRIPTION_GLOBAL"]);
+                string DESCRIPTION_LOCAL = Convert.ToString(obj["DESCRIPTION_LOCAL"]);
+                string INTRODUCTION_GLOBAL = Convert.ToString(obj["INTRODUCTION_GLOBAL"]);
+                string INTRODUCTION_LOCAL = Convert.ToString(obj["INTRODUCTION_LOCAL"]);
+                string ICON = Convert.ToString(obj["ICON"]);
+                string LOGO = Convert.ToString(obj["LOGO"]);
+                string CONTENT = Convert.ToString(obj["CONTENT"]);
+                string CONTENT_TYPE = Convert.ToString(obj["CONTENT_TYPE"]);
+
+                string PROVINCE_ID = Convert.ToString(obj["PROVINCE_ID"]);
+                string TOPIC_ID = Convert.ToString(obj["TOPIC_ID"]);
+                string FROM_DATE = Convert.ToString(obj["FROM_DATE"]);
+                string TO_DATE = Convert.ToString(obj["TO_DATE"]);
+                string IS_SHOW = Convert.ToString(obj["IS_SHOW"]);
+
+                string TYPE = Convert.ToString(obj["TYPE"]); //0=delete,1=update
+                string ID = Convert.ToString(obj["ID"]);
+                string NOTE = Convert.ToString(obj["NOTE"]);
+
+
+                string NAME_GLOBAL1 = Convert.ToString(obj["NAME_GLOBAL1"]);
+                string NAME_GLOBAL2 = Convert.ToString(obj["NAME_GLOBAL2"]);
+                string DESCRIPTION_GLOBAL1 = Convert.ToString(obj["DESCRIPTION_GLOBAL1"]);
+                string DESCRIPTION_GLOBAL2 = Convert.ToString(obj["DESCRIPTION_GLOBAL2"]);
+                string INTRODUCTION_GLOBAL1 = Convert.ToString(obj["INTRODUCTION_GLOBAL1"]);
+                string INTRODUCTION_GLOBAL2 = Convert.ToString(obj["INTRODUCTION_GLOBAL2"]);
+                string CONTENT_GLOBAL = Convert.ToString(obj["CONTENT_GLOBAL"]);
+                string CONTENT_GLOBAL1 = Convert.ToString(obj["INTRODUCTION_GLOBAL2"]);
+                string CONTENT_GLOBAL2 = Convert.ToString(obj["INTRODUCTION_GLOBAL2"]);
+
+
+                if (string.IsNullOrEmpty(PARENT_ID)) PARENT_ID = "-1";
+
+                if (string.IsNullOrEmpty(PROVINCE_ID)) PROVINCE_ID = "-1";
+                if (string.IsNullOrEmpty(TOPIC_ID)) TOPIC_ID = "-1";
+                if (string.IsNullOrEmpty(FROM_DATE)) FROM_DATE = "01/01/1900 00:00:00";
+                if (string.IsNullOrEmpty(TO_DATE)) TO_DATE = "01/01/1900 00:00:00";
+
+               
+                if (string.IsNullOrEmpty(IS_SHOW)) IS_SHOW = "-1";
+
+
+                //var obj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+
+
+                DataSet ds_regist = newsWebDataAccess.sv_news_update(SV_ID, PARENT_ID, CODE, NAME_GLOBAL, NAME_LOCAL, DESCRIPTION_GLOBAL, DESCRIPTION_LOCAL,
+                    INTRODUCTION_GLOBAL, INTRODUCTION_LOCAL, ICON, LOGO, CONTENT, CONTENT_TYPE, TYPE, ID, PROVINCE_ID, TOPIC_ID, FROM_DATE, TO_DATE, IS_SHOW, NOTE,
+                    NAME_GLOBAL1, NAME_GLOBAL2, DESCRIPTION_GLOBAL1, DESCRIPTION_GLOBAL2, CONTENT_GLOBAL, CONTENT_GLOBAL1,CONTENT_GLOBAL2, INTRODUCTION_GLOBAL1, INTRODUCTION_GLOBAL2
+
+                    );
+                logger.Info("Call database sv_news_update success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                    response.newsId = ds_regist.Tables[0].Rows[0]["newsId"].ToString();
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        // {"ID":"123","SV_ID":"1","USERS":"1234"}
+        [HttpPost]
+        public IActionResult newsGetById([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            svNewsList response = new svNewsList();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                logger.Info("New request income newsGetById :" + sendData.ToString());
+                var obj = JObject.Parse(sendData.ToString());
+                string ID = Convert.ToString(obj["ID"]);
+                string SV_ID = Convert.ToString(obj["serviceId"]);
+                string USERS = Convert.ToString(obj["users"]);
+                if (string.IsNullOrEmpty(ID)) ID = "-1";
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+                DataSet ds_regist = newsWebDataAccess.sv_news_getById(ID, SV_ID, USERS, language);
+                logger.Info("Call database sv_news_getById success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.listNews = new svNews[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        svNews _obj = new svNews();
+
+
+
+                        _obj.ID = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.PARENT_ID = ds_regist.Tables[0].Rows[j]["PARENT_ID"].ToString();
+                        _obj.SV_ID = ds_regist.Tables[0].Rows[j]["SV_ID"].ToString();
+                        _obj.CODE = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+
+                        _obj.NAME = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        _obj.NAME_GLOBAL = ds_regist.Tables[0].Rows[j]["NAME_GLOBAL"].ToString();
+                        _obj.NAME_LOCAL = ds_regist.Tables[0].Rows[j]["NAME_LOCAL"].ToString();
+
+                        _obj.DESCRIPTION = ds_regist.Tables[0].Rows[j]["DESCRIPTION"].ToString();
+                        _obj.DESCRIPTION_GLOBAL = ds_regist.Tables[0].Rows[j]["DESCRIPTION_GLOBAL"].ToString();
+                        _obj.DESCRIPTION_LOCAL = ds_regist.Tables[0].Rows[j]["DESCRIPTION_LOCAL"].ToString();
+
+                        _obj.INTRODUCTION = ds_regist.Tables[0].Rows[j]["INTRODUCTION"].ToString();
+                        _obj.INTRODUCTION_GLOBAL = ds_regist.Tables[0].Rows[j]["INTRODUCTION_GLOBAL"].ToString();
+                        _obj.INTRODUCTION_LOCAL = ds_regist.Tables[0].Rows[j]["INTRODUCTION_LOCAL"].ToString();
+
+                        _obj.ICON = ds_regist.Tables[0].Rows[j]["ICON"].ToString();
+                        _obj.LOGO = ds_regist.Tables[0].Rows[j]["LOGO"].ToString();
+                        _obj.CONTENT = ds_regist.Tables[0].Rows[j]["CONTENT"].ToString();
+                        _obj.CONTENT_TYPE = ds_regist.Tables[0].Rows[j]["CONTENT_TYPE"].ToString();
+                        _obj.CREATED_DATE = ds_regist.Tables[0].Rows[j]["CREATED_DATE"].ToString();
+                        _obj.UPDATE_DATE = ds_regist.Tables[0].Rows[j]["UPDATE_DATE"].ToString();
+                        _obj.LEVEL = ds_regist.Tables[0].Rows[j]["LEVELS"].ToString();
+                        _obj.IS_READ = ds_regist.Tables[0].Rows[j]["IS_READ"].ToString();
+
+                        _obj.PROVINCE_ID = ds_regist.Tables[0].Rows[j]["PROVINCE_ID"].ToString();
+                        _obj.TOPIC_ID = ds_regist.Tables[0].Rows[j]["TOPIC_ID"].ToString();
+                        _obj.FROM_DATE = ds_regist.Tables[0].Rows[j]["FROM_DATE"].ToString();
+                        _obj.TO_DATE = ds_regist.Tables[0].Rows[j]["TO_DATE"].ToString();
+                        _obj.IS_SHOW = ds_regist.Tables[0].Rows[j]["IS_SHOW"].ToString();
+                        _obj.TYPE = ds_regist.Tables[0].Rows[j]["TYPE"].ToString();
+                        _obj.STATUS = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        _obj.NOTE = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+                        _obj.NAME_GLOBAL1 = ds_regist.Tables[0].Rows[j]["NAME_GLOBAL1"].ToString();
+                        _obj.NAME_GLOBAL2 = ds_regist.Tables[0].Rows[j]["NAME_GLOBAL2"].ToString();
+
+                        _obj.DESCRIPTION_GLOBAL1 = ds_regist.Tables[0].Rows[j]["DESCRIPTION_GLOBAL1"].ToString();
+                        _obj.DESCRIPTION_GLOBAL2 = ds_regist.Tables[0].Rows[j]["DESCRIPTION_GLOBAL2"].ToString();
+
+                        _obj.INTRODUCTION_GLOBAL1 = ds_regist.Tables[0].Rows[j]["INTRODUCTION_GLOBAL1"].ToString();
+                        _obj.INTRODUCTION_GLOBAL2 = ds_regist.Tables[0].Rows[j]["INTRODUCTION_GLOBAL2"].ToString();
+
+
+                        _obj.CONTENT_GLOBAL = ds_regist.Tables[0].Rows[j]["CONTENT_GLOBAL"].ToString();
+                        _obj.CONTENT_GLOBAL1 = ds_regist.Tables[0].Rows[j]["CONTENT_GLOBAL1"].ToString();
+                        _obj.CONTENT_GLOBAL2 = ds_regist.Tables[0].Rows[j]["CONTENT_GLOBAL2"].ToString();
+
+
+
+                        response.listNews[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        // {"ID":"1","serviceId":"1","users":"9540240715","rowsOnPage":"1","seqPage":"1","isGetContet":"1","isShow":"1","type":"1"}
+        //isShow=-1 la all,0= khong show, 1= co show
+        //type -1: all,0: cua user,1= cua admin
+        [HttpPost]
+        public IActionResult newsGetByParentId([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            svNewsList response = new svNewsList();
+            response.status = "-1";
+            response.message = "Err unknow";
+            logger.Info("haha:");
+            try
+            {
+                logger.Info("bat dau:");
+                logger.Info("New request income newsGetByParentId :" + sendData.ToString());
+                logger.Info("ketthuc:");
+                var obj = JObject.Parse(sendData.ToString());
+                string ID = Convert.ToString(obj["ID"]);
+                string SV_ID = Convert.ToString(obj["serviceId"]);
+                string USERS = Convert.ToString(obj["users"]);
+                string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+                string seqPage = Convert.ToString(obj["seqPage"]);
+                string isGetContet = Convert.ToString(obj["isGetContet"]);
+                string isShow = Convert.ToString(obj["isShow"]);
+                string type = Convert.ToString(obj["type"]);
+                string channel = Convert.ToString(obj["channel"]);
+                string code = Convert.ToString(obj["code"]);
+                string isGetChildById = Convert.ToString(obj["isGetChildById"]);
+
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "100000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+               
+                if (string.IsNullOrEmpty(isGetContet)) isGetContet = "-1";
+                if (string.IsNullOrEmpty(isShow)) isShow = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+
+                if (string.IsNullOrEmpty(code)) code = "-1";
+                if (string.IsNullOrEmpty(ID)) ID = "-1000";
+
+
+                if (string.IsNullOrEmpty(channel)) channel = "APP";
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+                if (string.IsNullOrEmpty(isGetChildById)) isGetChildById = "0";
+
+                
+
+
+                logger.Info("ID="+ID+" SV_ID="+SV_ID+" USERS="+USERS+" rowsOnPage="+rowsOnPage+" seqPage="+seqPage+" isGetContet="+isGetContet+" isShow="+isShow+" type="+type);
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                //string channel = Convert.ToString(obj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+                DataSet ds_regist = newsWebDataAccess.sv_news_getByParentId(ID, SV_ID, USERS, rowsOnPage, seqPage, isGetContet,isShow,type, channel,language,code, isGetChildById);
+                logger.Info("Call database sv_news_getByParentId success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+                    response.totalSub = ds_regist.Tables[0].Rows[0]["TOTAL_SUB"].ToString();
+                    response.totalNotRead = ds_regist.Tables[0].Rows[0]["TOTAL_NOT_READ"].ToString();
+
+
+                    response.listNews = new svNews[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        svNews _obj = new svNews();
+
+
+
+                        _obj.ID = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.PARENT_ID = ds_regist.Tables[0].Rows[j]["PARENT_ID"].ToString();
+                        _obj.SV_ID = ds_regist.Tables[0].Rows[j]["SV_ID"].ToString();
+                        _obj.CODE = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+
+
+                        _obj.NAME = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        _obj.NAME_GLOBAL = ds_regist.Tables[0].Rows[j]["NAME_GLOBAL"].ToString();
+                        _obj.NAME_LOCAL = ds_regist.Tables[0].Rows[j]["NAME_LOCAL"].ToString();
+
+                        _obj.DESCRIPTION = ds_regist.Tables[0].Rows[j]["DESCRIPTION"].ToString();
+                        _obj.DESCRIPTION_GLOBAL = ds_regist.Tables[0].Rows[j]["DESCRIPTION_GLOBAL"].ToString();
+                        _obj.DESCRIPTION_LOCAL = ds_regist.Tables[0].Rows[j]["DESCRIPTION_LOCAL"].ToString();
+
+                        _obj.INTRODUCTION = ds_regist.Tables[0].Rows[j]["INTRODUCTION"].ToString();
+                        _obj.INTRODUCTION_GLOBAL = ds_regist.Tables[0].Rows[j]["INTRODUCTION_GLOBAL"].ToString();
+                        _obj.INTRODUCTION_LOCAL = ds_regist.Tables[0].Rows[j]["INTRODUCTION_LOCAL"].ToString();
+
+
+
+                        _obj.ICON = ds_regist.Tables[0].Rows[j]["ICON"].ToString();
+                        _obj.LOGO = ds_regist.Tables[0].Rows[j]["LOGO"].ToString();
+                        _obj.CONTENT = ds_regist.Tables[0].Rows[j]["CONTENT"].ToString();
+                        _obj.CONTENT_TYPE = ds_regist.Tables[0].Rows[j]["CONTENT_TYPE"].ToString();
+                        _obj.CREATED_DATE = ds_regist.Tables[0].Rows[j]["CREATED_DATE"].ToString();
+                        _obj.UPDATE_DATE = ds_regist.Tables[0].Rows[j]["UPDATE_DATE"].ToString();
+                        _obj.LEVEL = ds_regist.Tables[0].Rows[j]["LEVELS"].ToString();
+                        _obj.UPDATE_DATE = ds_regist.Tables[0].Rows[j]["UPDATE_DATE"].ToString();
+                        _obj.IS_READ = ds_regist.Tables[0].Rows[j]["IS_READ"].ToString();
+
+                        _obj.PROVINCE_ID = ds_regist.Tables[0].Rows[j]["PROVINCE_ID"].ToString();
+                        _obj.TOPIC_ID = ds_regist.Tables[0].Rows[j]["TOPIC_ID"].ToString();
+                        _obj.FROM_DATE = ds_regist.Tables[0].Rows[j]["FROM_DATE"].ToString();
+                        _obj.TO_DATE = ds_regist.Tables[0].Rows[j]["TO_DATE"].ToString();
+                        _obj.IS_SHOW = ds_regist.Tables[0].Rows[j]["IS_SHOW"].ToString();
+                        _obj.TYPE = ds_regist.Tables[0].Rows[j]["TYPE"].ToString();
+                        _obj.STATUS = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        _obj.NOTE = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+                        _obj.NAME_GLOBAL1 = ds_regist.Tables[0].Rows[j]["NAME_GLOBAL1"].ToString();
+                        _obj.NAME_GLOBAL2 = ds_regist.Tables[0].Rows[j]["NAME_GLOBAL2"].ToString();
+
+                        _obj.DESCRIPTION_GLOBAL1 = ds_regist.Tables[0].Rows[j]["DESCRIPTION_GLOBAL1"].ToString();
+                        _obj.DESCRIPTION_GLOBAL2 = ds_regist.Tables[0].Rows[j]["DESCRIPTION_GLOBAL2"].ToString();
+
+                        _obj.INTRODUCTION_GLOBAL1 = ds_regist.Tables[0].Rows[j]["INTRODUCTION_GLOBAL1"].ToString();
+                        _obj.INTRODUCTION_GLOBAL2 = ds_regist.Tables[0].Rows[j]["INTRODUCTION_GLOBAL2"].ToString();
+
+
+                        _obj.CONTENT_GLOBAL = ds_regist.Tables[0].Rows[j]["CONTENT_GLOBAL"].ToString();
+                        _obj.CONTENT_GLOBAL1 = ds_regist.Tables[0].Rows[j]["CONTENT_GLOBAL1"].ToString();
+                        _obj.CONTENT_GLOBAL2 = ds_regist.Tables[0].Rows[j]["CONTENT_GLOBAL2"].ToString();
+
+                        response.listNews[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err: loi roi" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+        // {"serviceId":"4","users":"9540240715","rowsOnPage":"1","seqPage":"1","isGetContet":"1","isShow":"1"}
+        //isShow=-1 la all,0= khong show, 1= co show
+        //type -1: all,0: cua user,1= cua admin
+        [HttpPost]
+        public IActionResult newsGetByUsers([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            svNewsList response = new svNewsList();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                logger.Info("New request income newsGetByUsers :" + sendData.ToString());
+                var obj = JObject.Parse(sendData.ToString());
+                
+                string SV_ID = Convert.ToString(obj["serviceId"]);
+                string USERS = Convert.ToString(obj["users"]);
+                string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+                string seqPage = Convert.ToString(obj["seqPage"]);
+                string isGetContet = Convert.ToString(obj["isGetContet"]);
+                string isShow = Convert.ToString(obj["isShow"]);
+                string type = Convert.ToString(obj["type"]);
+
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "100000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+                if (string.IsNullOrEmpty(isGetContet)) isGetContet = "-1";
+                if (string.IsNullOrEmpty(isShow)) isShow = "-1";
+
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                logger.Info( " SV_ID=" + SV_ID + " USERS=" + USERS + " rowsOnPage=" + rowsOnPage + " seqPage=" + seqPage + " isGetContet=" + isGetContet + " isShow=" + isShow );
+
+
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                DataSet ds_regist = newsWebDataAccess.sv_news_getByUsers( SV_ID, USERS, rowsOnPage, seqPage, isGetContet, isShow,language);
+                logger.Info("Call database sv_news_getByUsers success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+                    response.totalSub = ds_regist.Tables[0].Rows[0]["TOTAL_SUB"].ToString();
+
+
+                    response.listNews = new svNews[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        svNews _obj = new svNews();
+
+
+
+                        _obj.ID = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.PARENT_ID = ds_regist.Tables[0].Rows[j]["PARENT_ID"].ToString();
+                        _obj.SV_ID = ds_regist.Tables[0].Rows[j]["SV_ID"].ToString();
+                        _obj.CODE = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+
+
+                        _obj.NAME = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        _obj.NAME_GLOBAL = ds_regist.Tables[0].Rows[j]["NAME_GLOBAL"].ToString();
+                        _obj.NAME_LOCAL = ds_regist.Tables[0].Rows[j]["NAME_LOCAL"].ToString();
+
+                        _obj.DESCRIPTION = ds_regist.Tables[0].Rows[j]["DESCRIPTION"].ToString();
+                        _obj.DESCRIPTION_GLOBAL = ds_regist.Tables[0].Rows[j]["DESCRIPTION_GLOBAL"].ToString();
+                        _obj.DESCRIPTION_LOCAL = ds_regist.Tables[0].Rows[j]["DESCRIPTION_LOCAL"].ToString();
+
+                        _obj.INTRODUCTION = ds_regist.Tables[0].Rows[j]["INTRODUCTION"].ToString();
+                        _obj.INTRODUCTION_GLOBAL = ds_regist.Tables[0].Rows[j]["INTRODUCTION_GLOBAL"].ToString();
+                        _obj.INTRODUCTION_LOCAL = ds_regist.Tables[0].Rows[j]["INTRODUCTION_LOCAL"].ToString();
+
+
+
+                        _obj.ICON = ds_regist.Tables[0].Rows[j]["ICON"].ToString();
+                        _obj.LOGO = ds_regist.Tables[0].Rows[j]["LOGO"].ToString();
+                        _obj.CONTENT = ds_regist.Tables[0].Rows[j]["CONTENT"].ToString();
+                        _obj.CONTENT_TYPE = ds_regist.Tables[0].Rows[j]["CONTENT_TYPE"].ToString();
+                        _obj.CREATED_DATE = ds_regist.Tables[0].Rows[j]["CREATED_DATE"].ToString();
+                        _obj.UPDATE_DATE = ds_regist.Tables[0].Rows[j]["UPDATE_DATE"].ToString();
+                        _obj.LEVEL = ds_regist.Tables[0].Rows[j]["LEVELS"].ToString();
+                        _obj.UPDATE_DATE = ds_regist.Tables[0].Rows[j]["UPDATE_DATE"].ToString();
+                        _obj.IS_READ = ds_regist.Tables[0].Rows[j]["IS_READ"].ToString();
+
+                        _obj.PROVINCE_ID = ds_regist.Tables[0].Rows[j]["PROVINCE_ID"].ToString();
+                        _obj.TOPIC_ID = ds_regist.Tables[0].Rows[j]["TOPIC_ID"].ToString();
+                        _obj.FROM_DATE = ds_regist.Tables[0].Rows[j]["FROM_DATE"].ToString();
+                        _obj.TO_DATE = ds_regist.Tables[0].Rows[j]["TO_DATE"].ToString();
+                        _obj.IS_SHOW = ds_regist.Tables[0].Rows[j]["IS_SHOW"].ToString();
+                        _obj.TYPE = ds_regist.Tables[0].Rows[j]["TYPE"].ToString();
+                        _obj.STATUS = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        _obj.NOTE = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+
+                        obj.NAME_GLOBAL1 = ds_regist.Tables[0].Rows[j]["NAME_GLOBAL1"].ToString();
+                        _obj.NAME_GLOBAL2 = ds_regist.Tables[0].Rows[j]["NAME_GLOBAL2"].ToString();
+
+                        _obj.DESCRIPTION_GLOBAL1 = ds_regist.Tables[0].Rows[j]["DESCRIPTION_GLOBAL1"].ToString();
+                        _obj.DESCRIPTION_GLOBAL2 = ds_regist.Tables[0].Rows[j]["DESCRIPTION_GLOBAL2"].ToString();
+
+                        _obj.INTRODUCTION_GLOBAL1 = ds_regist.Tables[0].Rows[j]["INTRODUCTION_GLOBAL1"].ToString();
+                        _obj.INTRODUCTION_GLOBAL2 = ds_regist.Tables[0].Rows[j]["INTRODUCTION_GLOBAL2"].ToString();
+
+
+                        _obj.CONTENT_GLOBAL = ds_regist.Tables[0].Rows[j]["CONTENT_GLOBAL"].ToString();
+                        _obj.CONTENT_GLOBAL1 = ds_regist.Tables[0].Rows[j]["CONTENT_GLOBAL1"].ToString();
+                        _obj.CONTENT_GLOBAL2 = ds_regist.Tables[0].Rows[j]["CONTENT_GLOBAL2"].ToString();
+
+
+
+
+
+                        response.listNews[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+        // {"serviceId":"1","users":"9540240715","proviceId":"1","topicId":"1","fromDate":"01/07/2020","toDate":"30/07/2020","rowsOnPage":"1","seqPage":"1",isGetContet":"1"}
+        [HttpPost]
+        public IActionResult newsSearchProTopDate([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            svNewsList response = new svNewsList();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                logger.Info("New request income newsSearchProTopDate :" + sendData.ToString());
+                var obj = JObject.Parse(sendData.ToString());
+                string SV_ID = Convert.ToString(obj["serviceId"]);
+                string USERS = Convert.ToString(obj["users"]);
+
+                string proviceId = Convert.ToString(obj["proviceId"]);
+                string topicId = Convert.ToString(obj["topicId"]);
+                string fromDate = Convert.ToString(obj["fromDate"]);
+                string toDate = Convert.ToString(obj["toDate"]);
+                string name = Convert.ToString(obj["name"]);
+
+                string rowsOnPage = Convert.ToString(obj["rowsOnPage"]);
+                string seqPage = Convert.ToString(obj["seqPage"]);
+                string isGetContet = Convert.ToString(obj["isGetContet"]);
+
+                if (string.IsNullOrEmpty(proviceId)) proviceId = "-1";
+                if (string.IsNullOrEmpty(topicId)) topicId = "-1";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "01/01/1990";
+                if (string.IsNullOrEmpty(toDate)) toDate = "01/01/5050";
+
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "100000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+                if (string.IsNullOrEmpty(isGetContet)) isGetContet = "-1";
+                if (string.IsNullOrEmpty(name)) name = "-1";
+
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+                DataSet ds_regist = newsWebDataAccess.newsSearchProTopDate(SV_ID, USERS, proviceId, topicId, fromDate, toDate, rowsOnPage, seqPage, isGetContet,name,language);
+                logger.Info("Call database newsSearchProTopDate success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+                    response.listNews = new svNews[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        svNews _obj = new svNews();
+
+
+
+                        _obj.ID = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.PARENT_ID = ds_regist.Tables[0].Rows[j]["PARENT_ID"].ToString();
+                        _obj.SV_ID = ds_regist.Tables[0].Rows[j]["SV_ID"].ToString();
+                        _obj.CODE = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+                        _obj.NAME = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        _obj.DESCRIPTION = ds_regist.Tables[0].Rows[j]["DESCRIPTION"].ToString();
+                        _obj.INTRODUCTION = ds_regist.Tables[0].Rows[j]["INTRODUCTION"].ToString();
+                       
+                        _obj.ICON = ds_regist.Tables[0].Rows[j]["ICON"].ToString();
+                        _obj.LOGO = ds_regist.Tables[0].Rows[j]["LOGO"].ToString();
+                        _obj.CONTENT = ds_regist.Tables[0].Rows[j]["CONTENT"].ToString();
+                        _obj.CONTENT_TYPE = ds_regist.Tables[0].Rows[j]["CONTENT_TYPE"].ToString();
+                        _obj.CREATED_DATE = ds_regist.Tables[0].Rows[j]["CREATED_DATE"].ToString();
+                        _obj.UPDATE_DATE = ds_regist.Tables[0].Rows[j]["UPDATE_DATE"].ToString();
+                        _obj.LEVEL = ds_regist.Tables[0].Rows[j]["LEVELS"].ToString();
+                        _obj.UPDATE_DATE = ds_regist.Tables[0].Rows[j]["UPDATE_DATE"].ToString();
+                        _obj.IS_READ = ds_regist.Tables[0].Rows[j]["IS_READ"].ToString();
+
+                        _obj.PROVINCE_ID = ds_regist.Tables[0].Rows[j]["PROVINCE_ID"].ToString();
+                        _obj.TOPIC_ID = ds_regist.Tables[0].Rows[j]["TOPIC_ID"].ToString();
+                        _obj.FROM_DATE = ds_regist.Tables[0].Rows[j]["FROM_DATE"].ToString();
+                        _obj.TO_DATE = ds_regist.Tables[0].Rows[j]["TO_DATE"].ToString();
+                        _obj.IS_SHOW = ds_regist.Tables[0].Rows[j]["IS_SHOW"].ToString();
+                        _obj.TYPE = ds_regist.Tables[0].Rows[j]["TYPE"].ToString();
+                        _obj.STATUS = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+
+                        _obj.NOTE = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+
+                        obj.NAME_GLOBAL1 = ds_regist.Tables[0].Rows[j]["NAME_GLOBAL1"].ToString();
+                        _obj.NAME_GLOBAL2 = ds_regist.Tables[0].Rows[j]["NAME_GLOBAL2"].ToString();
+
+                        _obj.DESCRIPTION_GLOBAL1 = ds_regist.Tables[0].Rows[j]["DESCRIPTION_GLOBAL1"].ToString();
+                        _obj.DESCRIPTION_GLOBAL2 = ds_regist.Tables[0].Rows[j]["DESCRIPTION_GLOBAL2"].ToString();
+
+                        _obj.INTRODUCTION_GLOBAL1 = ds_regist.Tables[0].Rows[j]["INTRODUCTION_GLOBAL1"].ToString();
+                        _obj.INTRODUCTION_GLOBAL2 = ds_regist.Tables[0].Rows[j]["INTRODUCTION_GLOBAL2"].ToString();
+
+
+                        _obj.CONTENT_GLOBAL = ds_regist.Tables[0].Rows[j]["CONTENT_GLOBAL"].ToString();
+                        _obj.CONTENT_GLOBAL1 = ds_regist.Tables[0].Rows[j]["CONTENT_GLOBAL1"].ToString();
+                        _obj.CONTENT_GLOBAL2 = ds_regist.Tables[0].Rows[j]["CONTENT_GLOBAL2"].ToString();
+
+
+                        response.listNews[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+        // {"serviceId":"1","users":"9540240715","top":"10",isGetContet":"1"}
+        [HttpPost]
+        public IActionResult newsGetTop([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            svNewsList response = new svNewsList();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                logger.Info("New request income newsGetTop :" + sendData.ToString());
+                var obj = JObject.Parse(sendData.ToString());
+                string SV_ID = Convert.ToString(obj["serviceId"]);
+                string USERS = Convert.ToString(obj["users"]);
+
+                string top = Convert.ToString(obj["top"]);
+                string level = Convert.ToString(obj["level"]);
+              
+
+
+                
+                string isGetContet = Convert.ToString(obj["isGetContet"]);
+
+                if (string.IsNullOrEmpty(top)) top = "100";
+                if (string.IsNullOrEmpty(isGetContet)) isGetContet = "-1";
+                if (string.IsNullOrEmpty(level)) level = "-1";
+
+                string language = Convert.ToString(obj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(obj["token"]);
+                string channel = Convert.ToString(obj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+                DataSet ds_regist = newsWebDataAccess.newsGetTop(SV_ID, USERS, top, isGetContet, level,language);
+                logger.Info("Call database newsGetTop success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+
+                    response.rowsOnPage = "-1";
+                    response.seqPage = "-1";
+                    response.totalPage = "-1";
+
+
+                    response.listNews = new svNews[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        svNews _obj = new svNews();
+
+
+
+                        _obj.ID = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.PARENT_ID = ds_regist.Tables[0].Rows[j]["PARENT_ID"].ToString();
+                        _obj.SV_ID = ds_regist.Tables[0].Rows[j]["SV_ID"].ToString();
+                        _obj.CODE = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+                        _obj.NAME = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        _obj.DESCRIPTION = ds_regist.Tables[0].Rows[j]["DESCRIPTION"].ToString();
+                        _obj.INTRODUCTION = ds_regist.Tables[0].Rows[j]["INTRODUCTION"].ToString();
+
+                        _obj.ICON = ds_regist.Tables[0].Rows[j]["ICON"].ToString();
+                        _obj.LOGO = ds_regist.Tables[0].Rows[j]["LOGO"].ToString();
+                        _obj.CONTENT = ds_regist.Tables[0].Rows[j]["CONTENT"].ToString();
+                        _obj.CONTENT_TYPE = ds_regist.Tables[0].Rows[j]["CONTENT_TYPE"].ToString();
+                        _obj.CREATED_DATE = ds_regist.Tables[0].Rows[j]["CREATED_DATE"].ToString();
+                        _obj.UPDATE_DATE = ds_regist.Tables[0].Rows[j]["UPDATE_DATE"].ToString();
+                        _obj.LEVEL = ds_regist.Tables[0].Rows[j]["LEVELS"].ToString();
+                        _obj.UPDATE_DATE = ds_regist.Tables[0].Rows[j]["UPDATE_DATE"].ToString();
+                        _obj.IS_READ = ds_regist.Tables[0].Rows[j]["IS_READ"].ToString();
+
+                        _obj.PROVINCE_ID = ds_regist.Tables[0].Rows[j]["PROVINCE_ID"].ToString();
+                        _obj.TOPIC_ID = ds_regist.Tables[0].Rows[j]["TOPIC_ID"].ToString();
+                        _obj.FROM_DATE = ds_regist.Tables[0].Rows[j]["FROM_DATE"].ToString();
+                        _obj.TO_DATE = ds_regist.Tables[0].Rows[j]["TO_DATE"].ToString();
+                        _obj.IS_SHOW = ds_regist.Tables[0].Rows[j]["IS_SHOW"].ToString();
+                        _obj.TYPE = ds_regist.Tables[0].Rows[j]["TYPE"].ToString();
+                        _obj.STATUS = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+
+
+                        _obj.NOTE = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+
+                        obj.NAME_GLOBAL1 = ds_regist.Tables[0].Rows[j]["NAME_GLOBAL1"].ToString();
+                        _obj.NAME_GLOBAL2 = ds_regist.Tables[0].Rows[j]["NAME_GLOBAL2"].ToString();
+
+                        _obj.DESCRIPTION_GLOBAL1 = ds_regist.Tables[0].Rows[j]["DESCRIPTION_GLOBAL1"].ToString();
+                        _obj.DESCRIPTION_GLOBAL2 = ds_regist.Tables[0].Rows[j]["DESCRIPTION_GLOBAL2"].ToString();
+
+                        _obj.INTRODUCTION_GLOBAL1 = ds_regist.Tables[0].Rows[j]["INTRODUCTION_GLOBAL1"].ToString();
+                        _obj.INTRODUCTION_GLOBAL2 = ds_regist.Tables[0].Rows[j]["INTRODUCTION_GLOBAL2"].ToString();
+
+
+                        _obj.CONTENT_GLOBAL = ds_regist.Tables[0].Rows[j]["CONTENT_GLOBAL"].ToString();
+                        _obj.CONTENT_GLOBAL1 = ds_regist.Tables[0].Rows[j]["CONTENT_GLOBAL1"].ToString();
+                        _obj.CONTENT_GLOBAL2 = ds_regist.Tables[0].Rows[j]["CONTENT_GLOBAL2"].ToString();
+
+
+                        response.listNews[j] = _obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+        //{"users":"50940240716","serviceId":"30","newsId":"1","codeBuy":"1","requestId":"-1","otp":"-1"}
+
+        public IActionResult newsBuy([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            mpsResponseEx response = new mpsResponseEx();
+            response.status = "-1";
+            response.message = "Err unknow";
+            logger.Info("New request income newsBuy :" + sendData.ToString());
+            string mps_ip = "127.0.0.1";
+            string mps_port = "0000";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string newsId = Convert.ToString(userObj["newsId"]);
+                string codeBuy = Convert.ToString(userObj["codeBuy"]);
+                string requestId = Convert.ToString(userObj["requestId"]);
+                string otp = Convert.ToString(userObj["otp"]);
+
+                if (string.IsNullOrEmpty(newsId)) newsId = "-1";
+                if (string.IsNullOrEmpty(requestId)) requestId = "-1";
+                if (string.IsNullOrEmpty(otp)) otp = "-1";
+
+
+                //var obj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+                DataSet ds_mps_info = DataAccess.MPS_GET_BY_ID(serviceid);
+                mps_ip = ds_mps_info.Tables[0].Rows[0]["MPS_IP"].ToString();
+                mps_port = ds_mps_info.Tables[0].Rows[0]["MPS_PORT"].ToString();
+
+
+                logger.Info("Start call charg money");
+                string data = "requestId=" + requestId + "&msisdn=" + users + "&otp=" + otp + "&serviceid=" + serviceid + "&subServiceCode=" + codeBuy;
+                logger.Info("Request call charge: " + data);
+                string response111 = Common.SocketUnSyn(data, mps_ip, Convert.ToInt32(mps_port), 12000);
+                logger.Info("Result call charge: " + response111);
+                mpsResponse resCallMps = JsonConvert.DeserializeObject<mpsResponse>(response111);
+                if (resCallMps.responseCode == "0")
+                {
+                    logger.Info("charge money success :");
+                    DataSet ds_regist = newsWebDataAccess.newsBuy(users, serviceid, newsId, codeBuy);
+                    logger.Info("Call database newsBuy success:");
+                    if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                    {
+                        response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                        response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                        response.requestId = resCallMps.requestID;
+
+                        return Ok(response);
+
+                    }
+                }
+                else if (resCallMps.responseCode == "100")
+                {
+                    response.status = "100";
+                    response.message = "Send OTP success to user, pls send this function with OTP & requestID agian for finsh";
+                    response.requestId = resCallMps.requestID;
+                    return Ok(response);
+                }
+                else if (resCallMps.responseCode == "401")
+                {
+                    response.status = "-12";
+                    response.message = "Not enough money ";
+                    return Ok(response);
+                }
+                else if (resCallMps.responseCode == "415")
+                {
+                    response.status = "-13";
+                    response.message = "Invalid OTP code";
+                    return Ok(response);
+                }
+                else if (resCallMps.responseCode == "416")
+                {
+                    response.status = "-14";
+                    response.message = "Incorrect OTP code/ OTP code expired";
+                    return Ok(response);
+                }
+                else if (resCallMps.responseCode == "417")
+                {
+                    response.status = "-15";
+                    response.message = "Confirm OTP via USSD time out";
+                    return Ok(response);
+                }
+                else
+                {
+                    response.status = "-10";
+                    response.message = "System err";
+                    return Ok(response);
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+
+        // {"title":"xxxx","serviceId":"30","content":"cong hoa xa hoi chu nghia","description":"vi du 1","urlPicture":"http://123.jpg"}
+        [HttpPost]
+        public IActionResult Insert([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            newsObjResponse response = new newsObjResponse();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                newsWebObjRequest data = JsonConvert.DeserializeObject<newsWebObjRequest>(sendData.ToString());
+                logger.Info("New request income news_insert :" + data.ToString());
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var obj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+                DataSet ds_regist = newsWebDataAccess.web_news_insert(data.title, data.serviceid, data.content, data.description,data.urlPicture);
+                logger.Info("Call database news_insert success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                    response.newsId = ds_regist.Tables[0].Rows[0]["newsId"].ToString();
+                    
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        // {"id":"2","title":"xxxx","serviceId":"30","content":"cong hoa xa hoi chu nghia","description":"01/12/2020 01:01:10","urlPicture":"http://quangbh.jpg","type":"1"}
+        //--0=delete,1=update
+        [HttpPost]
+        public IActionResult Update([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                newsWebObjUpdateRequest data = JsonConvert.DeserializeObject<newsWebObjUpdateRequest>(sendData.ToString());
+                logger.Info("New request income Update :" + data.ToString());
+
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var obj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+                DataSet ds_regist = newsWebDataAccess.web_news_update(data.id, data.title, data.serviceid, data.content, data.description,data.urlPicture,data.type);
+                logger.Info("Call database Update success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                    
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        [HttpPost]
+        //{"id":"10","serviceId":"30","status":"-1","date":"13/02/2020" } 
+        public IActionResult GetList([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            newsWebObjGetResponse response = new newsWebObjGetResponse();
+            response.status = "-1";
+            response.message = "Err unknow";
+            string vTop = "-1";
+            try
+            {
+                newsObjGetRequest data = JsonConvert.DeserializeObject<newsObjGetRequest>(sendData.ToString());
+                logger.Info("New request income Get :" + data.ToString());
+                if (!string.IsNullOrEmpty(data.top)) vTop = data.top;
+
+
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var obj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+
+
+                DataSet ds_regist = newsWebDataAccess.web_news_get(data.serviceid, data.status, data.date, data.id, vTop, data.isGetContent);
+                logger.Info("Call database Get success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.listNewsWeb = new newsWebObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        newsWebObj obj = new newsWebObj();
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.serviceid = ds_regist.Tables[0].Rows[j]["serviceid"].ToString();
+                        obj.status = ds_regist.Tables[0].Rows[j]["newsStatus"].ToString();
+                        obj.title = ds_regist.Tables[0].Rows[j]["title"].ToString();
+                        obj.content = ds_regist.Tables[0].Rows[j]["content"].ToString();
+                        obj.description = ds_regist.Tables[0].Rows[j]["description"].ToString();
+                        obj.urlPicture = ds_regist.Tables[0].Rows[j]["urlPicture"].ToString();
+                        obj.sysdate = ds_regist.Tables[0].Rows[j]["vsysdate"].ToString();
+                        
+                        response.listNewsWeb[j] = obj;
+                    }
+                    
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+        [HttpPost]
+        //{"fromDate":"01/02/2020","toDate":"20/02/2020"}
+        public IActionResult GetLotteryList([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            newsWebLotteryResponse response = new newsWebLotteryResponse();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                newsWebLotteryRequest data = JsonConvert.DeserializeObject<newsWebLotteryRequest>(sendData.ToString());
+                logger.Info("New request income GetLotteryList :" + data.ToString());
+
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var obj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+
+                DataSet ds_regist = newsWebDataAccess.web_lettery_get(data.fromDate,data.toDate);
+                logger.Info("Call database GetLotteryList success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.listLottery = new newsWebLotteryObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        newsWebLotteryObj obj = new newsWebLotteryObj();
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.sysdate = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        obj.numberMorning = ds_regist.Tables[0].Rows[j]["NUMBER_MORNING"].ToString();
+                        obj.numberEvening = ds_regist.Tables[0].Rows[j]["NUMBER_EVENING"].ToString();
+                        obj.win4Morning = ds_regist.Tables[0].Rows[j]["WIN4_MORNING"].ToString();
+                        obj.win4Evening = ds_regist.Tables[0].Rows[j]["WIN4_EVENING"].ToString();
+                       
+
+                        response.listLottery[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+      
+
+
+
+
+    }
+}

+ 1815 - 0
ApiWeb/ApiProcessToken/Controllers/subApi.cs

@@ -0,0 +1,1815 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+
+using ResfullApi.Models;
+using Newtonsoft.Json;
+using System.Data;
+using Newtonsoft.Json.Linq;
+using System.Configuration;
+using Microsoft.AspNetCore.Mvc;
+
+using CommonObj.common;
+using CommonObj.model;
+using System.Threading.Channels;
+
+namespace ApiProcess.Controllers
+{
+    [ApiController]
+    [Route("api/[controller]/[action]/data")]
+    public class subApi : ControllerBase
+    {
+
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(subApi));
+
+
+
+
+
+
+
+
+        // {"msisdn":"50940227941","serviceId":"20","subServiceCode":"1","requestId":"-1","otp":"-1"}
+        [HttpPost]
+        public IActionResult mpsRequest([FromBody] dynamic sendData)
+        {
+            ////log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            ////log4net.Config.XmlConfigurator.Configure();
+            mpsResponse response = new mpsResponse();
+            response.responseCode = "-1";
+            string mps_ip = "127.0.0.1";
+            string mps_port = "0000";
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string msisdn = Convert.ToString(userObj["msisdn"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string subServiceCode = Convert.ToString(userObj["subServiceCode"]);
+
+                string requestId = Convert.ToString(userObj["requestId"]);
+                if (string.IsNullOrEmpty(requestId)) requestId = "-1";
+                string otp = Convert.ToString(userObj["otp"]);
+                if (string.IsNullOrEmpty(otp)) otp = "-1";
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+                
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+                response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.responseCode = "-2";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+
+
+
+
+                //Truong hop nay ko can goi sang MPS, update thang vao DB voi truong hop DK, HUY, Tru tien ..vv
+                //string freefix = ConfigurationSettings.AppSettings["PREFIX"];
+                string freefix = Common.GetValuesAppSetting("webConfig", "PREFIX");
+                //Voi thi truong Metphone thi luon vao case nay, vi tai thi truong nay Ko goi thang vao MPS
+                if (freefix == "855")
+                {
+                    //Truong hop nay ko can goi sang MPS va boc tach subServiceCode de lay tien ngay trong commnand
+                    //neu dang nhap qua web của CAMID thi minh sẽ đưa thẳng vào DB
+                    string moneyCharge = "0";
+                    string subesrviceNew = "";
+                    try
+                    {
+                        logger.Info("subServiceCode: " + subServiceCode);
+                        subesrviceNew = subServiceCode.Split('|')[0];
+                        moneyCharge = subServiceCode.Split('|')[1];
+                        logger.Info("subesrviceNew: " + subesrviceNew);
+                        logger.Info("moneyCharge: " + moneyCharge);
+                    }
+                    catch (Exception ee)
+                    {
+                        logger.Info("loi: " + ee.ToString());
+
+                    }
+
+
+                    DataSet ds_UpdateMps = DataAccess.UPDATE_MPS_DB(msisdn, serviceid, subesrviceNew, requestId, otp, "0", moneyCharge, "");
+                    response.responseCode = "0";
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+
+                }
+
+
+
+                if(otp=="-1")
+                {
+                    //Neu khong thay OTP thi minh se tu gui OTP
+                    DataSet ds_sendOtp = DataAccess.SEND_OTP(msisdn, serviceid, channel, language);
+                    if (ds_sendOtp == null || ds_sendOtp.Tables[0].Rows.Count == 0)
+                    {
+                        logger.Info("Check send OTP err");
+                        response.responseCode = "-2";
+                        response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                        return Ok(response);
+                    }
+
+                    string check_send_otp = ds_sendOtp.Tables[0].Rows[0]["status"].ToString();
+                    if (check_send_otp != "0")
+                    {
+                        string checksendOTPMsg = ds_sendOtp.Tables[0].Rows[0]["mesage"].ToString();
+                        response.responseCode = check_send_otp;
+                        response.message = checksendOTPMsg;
+                        logger.Info("Check send OTP result: " + check_send_otp + " msg: " + checksendOTPMsg);
+                        return Ok(response);
+                    }
+
+                    logger.Info("Check send OTP success!!!");
+                    response.responseCode = "100";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language); ;
+                    
+                    return Ok(response);
+
+                }    
+                else
+                {
+                    //Truong hop nay la co truyền OTP để kiểm tra
+                    DataSet ds_confirmOtp = DataAccess.CONFIRM_OTP(msisdn, serviceid, channel, language,otp);
+                    if (ds_confirmOtp == null || ds_confirmOtp.Tables[0].Rows.Count == 0)
+                    {
+                        logger.Info("Check send OTP err");
+                        response.responseCode = "-2";
+                        response.message =Common.GetErrMsgByCode(response.responseCode, serviceid,channel,language);
+                        return Ok(response);
+                    }
+
+                    string check_confirm_otp = ds_confirmOtp.Tables[0].Rows[0]["status"].ToString();
+                    if (check_confirm_otp != "0")
+                    {
+                        string checkConfirmOTPMsg = ds_confirmOtp.Tables[0].Rows[0]["mesage"].ToString();
+                        response.responseCode = check_confirm_otp;
+                        response.message = checkConfirmOTPMsg;
+                        logger.Info("Check send OTP result: " + check_confirm_otp + " msg: " + check_confirm_otp);
+                        return Ok(response);
+                    }
+                    logger.Info("Check confirm OTP success!!!");
+
+                }    
+                
+
+
+
+                //truong hop con lai xu ly binh thuong
+                DataSet ds_mps_info = DataAccess.MPS_GET_BY_ID(serviceid);
+                mps_ip = ds_mps_info.Tables[0].Rows[0]["MPS_IP"].ToString();
+                mps_port = ds_mps_info.Tables[0].Rows[0]["MPS_PORT"].ToString();
+
+                string data = "requestId=" + requestId + "&msisdn=" + msisdn + "&otp=" + otp + "&serviceid=" + serviceid + "&subServiceCode=" + subServiceCode;
+                logger.Info("Send MPS Thuc ip :" + mps_ip + " port: " + mps_port + " data: " + data);
+                string response111 = Common.SocketUnSyn(data, mps_ip, Convert.ToInt32(mps_port), 12000);
+                //string response111 = "{\"requestID\":\"1_25765600004_202409251833450855\",\"responseCode\":\"0\",\"msisdn\":\"65600004\",\"cmd\":\"CHARGE\",\"money\":\"200\",\"source\":\"CLIENT\",\"otpType\":\"1\"}";
+
+                logger.Info("New request income usersGetInterests :" + sendData.ToString());
+                response = JsonConvert.DeserializeObject<mpsResponse>(response111);
+
+                if (response.responseCode == "0")
+                {
+                    response.message=Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+                else if (response.responseCode == "100")
+                {
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+                else if (response.responseCode == "401")
+                {
+                    response.responseCode = "-12";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+                else if (response.responseCode == "415")
+                {
+                    response.responseCode = "8001";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+                else if (response.responseCode == "416")
+                {
+                    response.responseCode = "8001";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+                else if (response.responseCode == "417")
+                {
+                    response.responseCode = "-15";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+                else if (response.responseCode == "408")
+                {
+                    response.responseCode = "2";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+                else if (response.responseCode == "411" || response.responseCode == "412" || response.responseCode == "414" || response.responseCode == "204" || response.responseCode == "205")
+                {
+                    response.responseCode = "0";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                else
+                {
+                    response.responseCode = "-10";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            
+            return Ok(response);
+        }
+
+
+
+
+
+
+        // {"msisdn":"50940227941","serviceId":"20","subServiceCode":"1","requestId":"-1","otp":"-1"}
+        [HttpPost]
+        public IActionResult mpsRequestNotAuthen151080([FromBody] dynamic sendData)
+        {
+            ////log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            ////log4net.Config.XmlConfigurator.Configure();
+            mpsResponse response = new mpsResponse();
+            response.responseCode = "-1";
+            string mps_ip = "127.0.0.1";
+            string mps_port = "0000";
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string msisdn = Convert.ToString(userObj["msisdn"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string subServiceCode = Convert.ToString(userObj["subServiceCode"]);
+
+                string requestId = Convert.ToString(userObj["requestId"]);
+                if (string.IsNullOrEmpty(requestId)) requestId = "-1";
+                string otp = Convert.ToString(userObj["otp"]);
+                if (string.IsNullOrEmpty(otp)) otp = "-1";
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+                response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass"); var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                //if (!_redis.connet())
+                //{
+                //    logger.Info("Connect to redis false");
+                //    response.responseCode = "-2";
+                //    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                //    return Ok(response);
+                //}
+                //if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger))
+                //{
+                //    logger.Info("Authen token false");
+                //    response.responseCode = "35";
+                //    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                //    return Ok(response);
+                //}
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+
+
+
+
+                //Truong hop nay ko can goi sang MPS, update thang vao DB voi truong hop DK, HUY, Tru tien ..vv
+                //string freefix = ConfigurationSettings.AppSettings["PREFIX"];
+                string freefix = Common.GetValuesAppSetting("webConfig", "PREFIX");
+                //Voi thi truong Metphone thi luon vao case nay, vi tai thi truong nay Ko goi thang vao MPS
+                
+
+
+                if (otp == "-1")
+                {
+                    //Neu khong thay OTP thi minh se tu gui OTP
+                    DataSet ds_sendOtp = DataAccess.SEND_OTP(msisdn, serviceid, channel, language);
+                    if (ds_sendOtp == null || ds_sendOtp.Tables[0].Rows.Count == 0)
+                    {
+                        logger.Info("Check send OTP err");
+                        response.responseCode = "-2";
+                        response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                        return Ok(response);
+                    }
+
+                    string check_send_otp = ds_sendOtp.Tables[0].Rows[0]["status"].ToString();
+                    if (check_send_otp != "0")
+                    {
+                        string checksendOTPMsg = ds_sendOtp.Tables[0].Rows[0]["mesage"].ToString();
+                        response.responseCode = check_send_otp;
+                        response.message = checksendOTPMsg;
+                        logger.Info("Check send OTP result: " + check_send_otp + " msg: " + checksendOTPMsg);
+                        return Ok(response);
+                    }
+
+                    logger.Info("Check send OTP success!!!");
+                    response.responseCode = "100";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language); ;
+
+                    return Ok(response);
+
+                }
+                else
+                {
+                    //Truong hop nay la co truyền OTP để kiểm tra
+                    DataSet ds_confirmOtp = DataAccess.CONFIRM_OTP(msisdn, serviceid, channel, language, otp);
+                    if (ds_confirmOtp == null || ds_confirmOtp.Tables[0].Rows.Count == 0)
+                    {
+                        logger.Info("Check send OTP err");
+                        response.responseCode = "-2";
+                        response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                        return Ok(response);
+                    }
+
+                    string check_confirm_otp = ds_confirmOtp.Tables[0].Rows[0]["status"].ToString();
+                    if (check_confirm_otp != "0")
+                    {
+                        string checkConfirmOTPMsg = ds_confirmOtp.Tables[0].Rows[0]["mesage"].ToString();
+                        response.responseCode = check_confirm_otp;
+                        response.message = checkConfirmOTPMsg;
+                        logger.Info("Check send OTP result: " + check_confirm_otp + " msg: " + check_confirm_otp);
+                        return Ok(response);
+                    }
+                    logger.Info("Check confirm OTP success!!!");
+
+                }
+
+
+
+
+                //truong hop con lai xu ly binh thuong
+                DataSet ds_mps_info = DataAccess.MPS_GET_BY_ID(serviceid);
+                mps_ip = ds_mps_info.Tables[0].Rows[0]["MPS_IP"].ToString();
+                mps_port = ds_mps_info.Tables[0].Rows[0]["MPS_PORT"].ToString();
+
+                string data = "requestId=" + requestId + "&msisdn=" + msisdn + "&otp=" + otp + "&serviceid=" + serviceid + "&subServiceCode=" + subServiceCode;
+                logger.Info("Send MPS Thuc ip :" + mps_ip + " port: " + mps_port + " data: " + data);
+                string response111 = Common.SocketUnSyn(data, mps_ip, Convert.ToInt32(mps_port), 12000);
+                //string response111 = "{\"requestID\":\"1_25765600004_202409251833450855\",\"responseCode\":\"0\",\"msisdn\":\"65600004\",\"cmd\":\"CHARGE\",\"money\":\"200\",\"source\":\"CLIENT\",\"otpType\":\"1\"}";
+
+                logger.Info("New request income usersGetInterests :" + sendData.ToString());
+                response = JsonConvert.DeserializeObject<mpsResponse>(response111);
+
+                if (response.responseCode == "0")
+                {
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+                else if (response.responseCode == "100")
+                {
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+                else if (response.responseCode == "401")
+                {
+                    response.responseCode = "-12";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+                else if (response.responseCode == "415")
+                {
+                    response.responseCode = "8001";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+                else if (response.responseCode == "416")
+                {
+                    response.responseCode = "8001";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+                else if (response.responseCode == "417")
+                {
+                    response.responseCode = "-15";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+                else if (response.responseCode == "408")
+                {
+                    response.responseCode = "2";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+                else if (response.responseCode == "411" || response.responseCode == "412" || response.responseCode == "414" || response.responseCode == "204" || response.responseCode == "205")
+                {
+                    response.responseCode = "0";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+                else
+                {
+                    response.responseCode = "-10";
+                    response.message = Common.GetErrMsgByCode(response.responseCode, serviceid, channel, language);
+                    logger.Info("Responase to web: " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+
+            return Ok(response);
+        }
+
+
+
+
+        //{"users":"50940240716","serviceId":"30","codeCoins":"1","requestId":"-1","otp":"-1"}
+
+        public IActionResult buyCoins([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            mpsResponseEx response = new mpsResponseEx();
+            response.status = "-1";
+            response.message = "Err unknow";
+            logger.Info("New request income newsBuy :" + sendData.ToString());
+            string mps_ip = "127.0.0.1";
+            string mps_port = "0000";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string codeBuy = Convert.ToString(userObj["codeCoins"]);
+                string requestId = Convert.ToString(userObj["requestId"]);
+                string otp = Convert.ToString(userObj["otp"]);
+
+                
+                if (string.IsNullOrEmpty(requestId)) requestId = "-1";
+                if (string.IsNullOrEmpty(otp)) otp = "-1";
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+
+                DataSet ds_mps_info = DataAccess.MPS_GET_BY_ID(serviceid);
+                mps_ip = ds_mps_info.Tables[0].Rows[0]["MPS_IP"].ToString();
+                mps_port = ds_mps_info.Tables[0].Rows[0]["MPS_PORT"].ToString();
+
+
+                logger.Info("Start call charg money");
+                string data = "requestId=" + requestId + "&msisdn=" + users + "&otp=" + otp + "&serviceid=" + serviceid + "&subServiceCode=" + codeBuy;
+                logger.Info("Request call charge: " + data);
+                string response111 = Common.SocketUnSyn(data, mps_ip, Convert.ToInt32(mps_port), 12000);
+                logger.Info("Result call charge: " + response111);
+                mpsResponse resCallMps = JsonConvert.DeserializeObject<mpsResponse>(response111);
+                if (resCallMps.responseCode == "0")
+                {
+                    logger.Info("charge money success :");
+                    DataSet ds_regist = subDataAccess.subBuyCoins(users, serviceid, codeBuy);
+                    logger.Info("Call database newsBuy success:");
+                    if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                    {
+                        response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                        response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                        response.requestId = resCallMps.requestID;
+
+                        return Ok(response);
+
+                    }
+                }
+                else if (resCallMps.responseCode == "100")
+                {
+                    response.status = "100";
+                    response.message = "Send OTP success to user, pls send this function with OTP & requestID agian for finsh";
+                    response.requestId = resCallMps.requestID;
+                    return Ok(response);
+                }
+                else if (resCallMps.responseCode == "401")
+                {
+                    response.status = "-12";
+                    response.message = "Not enough money ";
+                    return Ok(response);
+                }
+                else if (resCallMps.responseCode == "415")
+                {
+                    response.status = "-13";
+                    response.message = "Invalid OTP code";
+                    return Ok(response);
+                }
+                else if (resCallMps.responseCode == "416")
+                {
+                    response.status = "-14";
+                    response.message = "Incorrect OTP code/ OTP code expired";
+                    return Ok(response);
+                }
+                else if (resCallMps.responseCode == "417")
+                {
+                    response.status = "-15";
+                    response.message = "Confirm OTP via USSD time out";
+                    return Ok(response);
+                }
+                else
+                {
+                    response.status = "-10";
+                    response.message = "System err";
+                    return Ok(response);
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+
+            return Ok(response);
+        }
+
+
+        [HttpPost]
+        //{"users":"10","serviceId":"30","codeCoins":"123","type":"0" } //type 1=Topup,2=The
+        public IActionResult changeCoins([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+            logger.Info("New request income changeCoins :" + sendData.ToString());
+            
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string codeChange = Convert.ToString(userObj["codeCoins"]);
+                string type = Convert.ToString(userObj["type"]);
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(serviceid)) serviceid = "-1";
+                if (string.IsNullOrEmpty(codeChange)) codeChange = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                DataSet ds_regist = subDataAccess.subChangeCoins(users, serviceid, codeChange, type);
+                logger.Info("Call database subChangeCoins success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+        [HttpPost]
+        //{"users":"10","serviceId":"30","codeCoins":"123","totalCoins":"123","type":"0" } //type 1=Topup,2=The
+        public IActionResult updateCoins([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+            logger.Info("New request income updateCoins :" + sendData.ToString());
+
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string codeChange = Convert.ToString(userObj["codeCoins"]);
+                string totalCoins = Convert.ToString(userObj["totalCoins"]);
+                string type = Convert.ToString(userObj["type"]);
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(serviceid)) serviceid = "-1";
+                if (string.IsNullOrEmpty(codeChange)) codeChange = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass"); var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                DataSet ds_regist = subDataAccess.subUpdateCoins(users, serviceid, codeChange,totalCoins, type);
+                logger.Info("Call database subChangeCoins success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+        [HttpPost]
+        //{"users":"10","serviceId":"30","type":"0" } 
+        public IActionResult listChangeCoins([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            subCoinsList response = new subCoinsList();
+            response.status = "-1";
+            response.message = "Err unknow";
+            logger.Info("New request income changeCoins :" + sendData.ToString());
+
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string type = Convert.ToString(userObj["type"]);
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(serviceid)) serviceid = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                DataSet ds_regist = subDataAccess.subGetListChangeCoins(users, serviceid, type);
+                logger.Info("Call database subGetListChangeCoins success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.listChangeCoin = new subCoins[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        subCoins obj = new subCoins();
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.codeCoins = ds_regist.Tables[0].Rows[j]["codeCoins"].ToString();
+                        obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+
+
+                        response.listChangeCoin[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+        [HttpPost]
+        //{"users":"10","serviceId":"30","type":"0" ,"fromDate":"01/08/2020","toDate":"01/09/2020"} 
+        public IActionResult listHisCoins([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            coinsHisList response = new coinsHisList();
+            response.status = "-1";
+            response.message = "Err unknow";
+            logger.Info("New request income listHisCoins :" + sendData.ToString());
+
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string type = Convert.ToString(userObj["type"]);
+                string fromdate = Convert.ToString(userObj["fromDate"]);
+                string todate = Convert.ToString(userObj["toDate"]);
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(serviceid)) serviceid = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+                if (string.IsNullOrEmpty(fromdate)) fromdate = "01/01/1990";
+                if (string.IsNullOrEmpty(todate)) todate = "01/01/1990";
+
+
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+                DataSet ds_regist = subDataAccess.subGetListHisCoins(users, serviceid, type, fromdate, todate);
+                logger.Info("Call database subGetListHisCoins success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.listHisCoin = new coinsHis[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        coinsHis obj = new coinsHis();
+                        obj.users = ds_regist.Tables[0].Rows[j]["USERS"].ToString();
+                        obj.buyDate = ds_regist.Tables[0].Rows[j]["BUY_DATE"].ToString();
+                        obj.money = ds_regist.Tables[0].Rows[j]["MONEY"].ToString();
+                        obj.coins = ds_regist.Tables[0].Rows[j]["COINS"].ToString();
+                        obj.type = ds_regist.Tables[0].Rows[j]["TYPE"].ToString();
+
+
+                        response.listHisCoin[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+        //{"msisdn":"50940227949","serviceId":"24"}
+        [HttpPost]
+        public IActionResult subCheckStatus([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                subObjCheckStatus data = JsonConvert.DeserializeObject<subObjCheckStatus>(sendData.ToString());
+                logger.Debug("New request income subCheckStatus:" + data.ToString());
+
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+                DataSet ds = subDataAccess.SUB_API_CHECK_STATUS(data.msisdn, data.serviceid);
+                logger.Info("Call database SUB_API_CHECK_STATUS success:");
+                if (ds != null & ds.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds.Tables[0].Rows[0]["message"].ToString();
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        //{"msisdn":"50940227949","serviceId":"24"}
+        [HttpPost]
+        public IActionResult subGetList([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            subList response = new subList();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                subObjCheckStatus data = JsonConvert.DeserializeObject<subObjCheckStatus>(sendData.ToString());
+                logger.Debug("New request income subGetList:" + data.ToString());
+
+
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+                DataSet ds_regist = subDataAccess.SUB_API_GET_LIST(data.msisdn, data.serviceid);
+                logger.Info("Call database SUB_API_GET_LIST success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "success";
+                    response.list = new subObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        subObj obj = new subObj();
+                        obj.msisdn = ds_regist.Tables[0].Rows[j]["msisdn"].ToString();
+                        obj.isactive = ds_regist.Tables[0].Rows[j]["isactive"].ToString();
+                        obj.registerChannel = ds_regist.Tables[0].Rows[j]["kenh_dk"].ToString();
+                        obj.registerDate = ds_regist.Tables[0].Rows[j]["ngay_dk"].ToString();
+                        obj.cancelChannel = ds_regist.Tables[0].Rows[j]["kenh_huy"].ToString();
+                        obj.cancelDate = ds_regist.Tables[0].Rows[j]["ngay_huy"].ToString();
+                        obj.chargeDate = ds_regist.Tables[0].Rows[j]["ngay_update_cuoc"].ToString();
+                        obj.serviceCode = ds_regist.Tables[0].Rows[j]["sv_code"].ToString();
+                        obj.serviceName = ds_regist.Tables[0].Rows[j]["sv_name"].ToString();
+                        obj.serviceId = ds_regist.Tables[0].Rows[j]["serviceid"].ToString();
+                        obj.subserviceId= ds_regist.Tables[0].Rows[j]["subserviceid"].ToString();
+                        response.list[j] = obj;
+                    }
+
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        
+
+        //{"msisdn":"50940227949","serviceId":"24"}
+        [HttpPost]
+        public IActionResult subGetListsubServiceCode([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            subServiceCodeList response = new subServiceCodeList();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string msisdn = Convert.ToString(userObj["msisdn"]);
+                string sid = Convert.ToString(userObj["serviceId"]);
+                logger.Info("New request income subGetListsubServiceCode :" + sendData.ToString());
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+
+
+                DataSet ds_regist = subDataAccess.SUB_API_GET_SUBSEVICECODE(msisdn, sid);
+                logger.Info("Call database SUB_API_GET_SUBSEVICECODE success:");
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    
+
+                    response.listSubServiceCode = new subServiceCodeObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        subServiceCodeObj obj = new subServiceCodeObj();
+                        obj.subServiceCode = ds_regist.Tables[0].Rows[j]["subServiceCode"].ToString();
+                        obj.subServiceName = ds_regist.Tables[0].Rows[j]["subServiceName"].ToString();
+                        obj.dateRigister = ds_regist.Tables[0].Rows[j]["NGAY_DK"].ToString();
+                        obj.channelRegister = ds_regist.Tables[0].Rows[j]["KENH_DK"].ToString();
+
+                        
+                        response.listSubServiceCode[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+
+
+
+
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+        //{"msisdn":"50940227941","serviceId":"24","message":"sms for test"}
+        [HttpPost]
+        public IActionResult subSendMt([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                subObjSendMt data = JsonConvert.DeserializeObject<subObjSendMt>(sendData.ToString());
+                logger.Debug("New request income subSendMt:" + data.ToString());
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds = subDataAccess.API_SEND_MT(data.msisdn, data.serviceid, data.message);
+                logger.Info("Call database API_SEND_MT success:");
+                if (ds != null & ds.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds.Tables[0].Rows[0]["message"].ToString();
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        //{"msisdn":"50940227941","serviceId":"24",”money”:”1000”,"message":"chuc mung ban ban da duoc cong tien"}
+        [HttpPost]
+        public IActionResult subTopup([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                subObjTopup data = JsonConvert.DeserializeObject<subObjTopup>(sendData.ToString());
+                logger.Debug("New request income Topup:" + data.ToString());
+
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds = subDataAccess.API_TOPUP(data.msisdn, data.serviceid, data.money, data.message);
+                logger.Info("Call database Topup success:");
+                if (ds != null & ds.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds.Tables[0].Rows[0]["message"].ToString();
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+        //{"msisdn":"50940227941","serviceId":"24"}
+        [HttpPost]
+        public IActionResult playGameCheck([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            subCheckPlayGame response = new subCheckPlayGame();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                subObjTopup data = JsonConvert.DeserializeObject<subObjTopup>(sendData.ToString());
+                logger.Debug("New request income playGameCheck:" + data.ToString());
+
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string users = Convert.ToString(userObj["users"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass"); var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds = subDataAccess.PLAYGAME_CHECK(users,serviceId);
+                logger.Info("Call database Topup success:");
+                if (ds != null & ds.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds.Tables[0].Rows[0]["errCode"].ToString();
+                    response.message = ds.Tables[0].Rows[0]["errMesage"].ToString();
+                    response.word = ds.Tables[0].Rows[0]["vword"].ToString();
+                    response.description = ds.Tables[0].Rows[0]["description"].ToString();
+                    response.playId = ds.Tables[0].Rows[0]["playId"].ToString();
+                    response.playKey = ds.Tables[0].Rows[0]["playKey"].ToString();
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        //{"msisdn":"50940227941","serviceId":"24"}
+        [HttpPost]
+        public IActionResult playGameUpdate([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                subObjTopup data = JsonConvert.DeserializeObject<subObjTopup>(sendData.ToString());
+                logger.Debug("New request income playGameCheck:" + data.ToString());
+
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string playId = Convert.ToString(userObj["playId"]);
+                string playKey = Convert.ToString(userObj["playKey"]);
+                string score = Convert.ToString(userObj["score"]);
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(playId)) language = "0";
+                if (string.IsNullOrEmpty(score)) language = "0";
+
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass"); var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds = subDataAccess.PLAYGAME_UPDATE(playId, score, playKey);
+                logger.Info("Call database PLAYGAME_UPDATE success:");
+                if (ds != null & ds.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds.Tables[0].Rows[0]["errCode"].ToString();
+                    response.message = ds.Tables[0].Rows[0]["errMesage"].ToString();
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        public IActionResult playTop([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            playTopList response = new playTopList();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                subObjTopup data = JsonConvert.DeserializeObject<subObjTopup>(sendData.ToString());
+                logger.Debug("New request income playTop:" + data.ToString());
+
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string fromdate = Convert.ToString(userObj["fromdate"]);
+                string todate = Convert.ToString(userObj["todate"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                string top = Convert.ToString(userObj["top"]);
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+
+                if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+                if (string.IsNullOrEmpty(top)) top = "100";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass"); var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds_regist = subDataAccess.PLAYGAME_TOP(fromdate, todate, top,serviceId);
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+
+
+                    response.listTop = new playTop[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        playTop obj = new playTop();
+                        obj.msisdn = ds_regist.Tables[0].Rows[j]["msisdn"].ToString();
+                        obj.totalScore = ds_regist.Tables[0].Rows[j]["total_score"].ToString();
+                        obj.totalTime = ds_regist.Tables[0].Rows[j]["total_time"].ToString();
+                        
+
+                        response.listTop[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        public IActionResult getWin([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            playWinList response = new playWinList();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                subObjTopup data = JsonConvert.DeserializeObject<subObjTopup>(sendData.ToString());
+                logger.Debug("New request income playTop:" + data.ToString());
+
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+
+                string fromdate = Convert.ToString(userObj["fromdate"]);
+                string todate = Convert.ToString(userObj["todate"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                string top = Convert.ToString(userObj["top"]);
+                string msisdn = Convert.ToString(userObj["msisdn"]);
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+
+                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+                if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+                if (string.IsNullOrEmpty(top)) top = "100";
+                
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass"); var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds_regist = subDataAccess.PLAYGAME_WIN(fromdate, todate, top, serviceId, msisdn);
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+
+
+                    response.list = new playWin[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        playWin obj = new playWin();
+                        obj.msisdn = ds_regist.Tables[0].Rows[j]["msisdn"].ToString();
+                        obj.date = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        obj.errCode = ds_regist.Tables[0].Rows[j]["ERR_CODE"].ToString();
+                        obj.errMsg = ds_regist.Tables[0].Rows[j]["ERR_MSG"].ToString();
+                        obj.money = ds_regist.Tables[0].Rows[j]["MONEY"].ToString();
+                        obj.transCode = ds_regist.Tables[0].Rows[j]["TRANSCODE"].ToString();
+                        obj.transDate = ds_regist.Tables[0].Rows[j]["TRANSDATE"].ToString();
+                        obj.transAmount = ds_regist.Tables[0].Rows[j]["TRANSAMOUNT"].ToString();
+                        obj.transFee = ds_regist.Tables[0].Rows[j]["TRANSFEE"].ToString();
+                        obj.serviceId = ds_regist.Tables[0].Rows[j]["SERVICE_ID"].ToString();
+                       
+                        response.list[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+    }
+}

+ 202 - 0
ApiWeb/ApiProcessToken/Controllers/systemApi.cs

@@ -0,0 +1,202 @@
+using System; 
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+
+using ResfullApi.Models;
+using Newtonsoft.Json;
+using System.Data;
+using System.IO;
+using System.Xml;
+using Microsoft.AspNetCore.Mvc;
+
+namespace ApiProcess.Controllers
+{
+    [ApiController]
+    [Route("api/[controller]/[action]/data")]
+    public class systemApi : ControllerBase
+    {
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(systemApi));
+        // {"msisdn":"50940227941","serviceId":"23","money":"2000"}
+        [HttpPost]
+        public IActionResult systemCharge([FromBody] dynamic sendData)
+        {
+            ////log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            ////log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                systemObjChargeRequest data = JsonConvert.DeserializeObject<systemObjChargeRequest>(sendData.ToString());
+                logger.Info("New request income systemCharge :" + data.ToString());
+                //lay ve thong tin cua CGW ung voi service
+                DataSet ds_sv = systemDataAccess.SYS_GET_SERVICE_BY_ID(data.serviceId);
+                logger.Info("Call database SYS_GET_SERVICE_BY_ID success:");
+                if (ds_sv != null & ds_sv.Tables[0].Rows.Count > 0)
+                {
+                    DataRow dr = ds_sv.Tables[0].Rows[0];
+                    string SV_CODE = dr["sv_code"].ToString();
+                    string sv_charg_shortcode = dr["sv_charg_shortcode"].ToString();
+                    string sv_command = dr["sv_command"].ToString();
+                    string sv_charg_url = dr["sv_charg_url"].ToString();
+                    string sv_charg_user = dr["sv_charg_user"].ToString();
+                    string sv_charg_pass = dr["sv_charg_pass"].ToString();
+                    string sv_char_timeout = dr["sv_char_timeout"].ToString();
+                    string sv_char_wscode = dr["sv_char_wscode"].ToString();
+                    string sv_charg_rawdata = dr["sv_charg_rawdata"].ToString();
+                    string sv_charg_gworder = dr["sv_charg_gworder"].ToString();
+                    string msisdn_temp = data.msisdn;
+                    string money = data.money;
+                    string reqid = SV_CODE + "_" + msisdn_temp+"_" + System.DateTime.Now.ToString("ddMMyyyyHHmmsss");
+
+                    string request = createdRequest(reqid, msisdn_temp, money, sv_charg_shortcode, sv_command, sv_charg_user, sv_charg_pass,
+                    sv_char_wscode, sv_charg_rawdata, sv_charg_gworder);
+                    logger.Info("Request :" + request);
+                    string resultPost = getContent(sv_charg_url, sv_char_timeout, request);
+                    logger.Info("Response :" + resultPost);
+
+                    string err_code_cmd = "-2000";
+                    string err_msg_cmd = "cmd err unknow";
+                    string ketqua = "-1000|unknow";
+                    string err_code = "-1000";
+                    string err_msg = "unknow";
+                    if (!string.IsNullOrEmpty(resultPost))
+                    {
+                        XmlDocument xmlDoc = new XmlDocument();
+                        xmlDoc.LoadXml(resultPost);
+                        err_code_cmd = xmlDoc.GetElementsByTagName("error").Item(0).InnerText;
+                        err_msg_cmd = xmlDoc.GetElementsByTagName("description").Item(0).InnerText;
+                        if (err_code_cmd == "0")
+                        {
+                            
+                            ketqua = xmlDoc.GetElementsByTagName("return").Item(0).InnerText;
+
+                            err_code = ketqua.Split('|')[0];
+                            err_msg = ketqua.Split('|')[1];
+                            logger.Info("send request id :" + reqid + " err_code: " + err_code + " err_msg: " + err_msg);
+                            
+                        }
+                        //update log charge
+                        DataSet ds_updateLog = systemDataAccess.SYS_UPDATE_LOG_CHARGE(data.msisdn, data.serviceId, data.money, err_code_cmd, err_msg_cmd, err_code, err_msg, data.isRenew);
+                        if (ds_updateLog != null & ds_updateLog.Tables[0].Rows.Count > 0)
+                        {
+                            response.status = ds_updateLog.Tables[0].Rows[0]["status"].ToString();
+                            response.message = ds_updateLog.Tables[0].Rows[0]["message"].ToString();
+                        }    
+
+                    }
+
+
+                }
+                
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        private string createdRequest(string requestid, string msisdn, string money, string shortcode, string command,
+             string user, string pass, string sv_char_wscode, string sv_charg_rawdata, string sv_charg_gworder)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            string request = "";
+            try
+            {
+
+                string input = msisdn + "|" + shortcode + "|" + command + "|1|" + money + "|" + requestid;
+                request = request + @"<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:web=""http://webservice.bccsgw.viettel.com/"">";
+                request = request + @"<soapenv:Header/>";
+                request = request + @"<soapenv:Body>";
+                request = request + @"<web:gwOperation>";
+                request = request + @"<Input>";
+                request = request + @"<username>" + user + @"</username>";
+                request = request + @"<password>" + pass + @"</password>";
+                request = request + @"<wscode>" + sv_char_wscode + @"</wscode>";
+                request = request + @"<param name=""GWORDER"" value=""" + sv_charg_gworder + @"""/>";
+                request = request + @"<param name=""input"" value=""" + input + @"""/>";
+                request = request + @"<rawData></rawData>";
+                request = request + @"</Input>";
+                request = request + @"</web:gwOperation>";
+                request = request + @"</soapenv:Body>";
+                request = request + @"</soapenv:Envelope>";
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err when create request: " + ex.ToString());
+            }
+            return request;
+        }
+
+
+        private string getContent(string api_path, string timeout, string xml)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            string rp = "";
+            try
+            {
+
+
+                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(api_path);
+
+                byte[] bytes;
+                bytes = System.Text.Encoding.UTF8.GetBytes(xml);
+                request.ContentType = "text/xml; encoding='utf-8'";
+                request.ContentLength = bytes.Length;
+                request.Method = "POST";
+                request.Timeout = Convert.ToInt32(timeout);
+
+                Stream requestStream = request.GetRequestStream();
+                requestStream.Write(bytes, 0, bytes.Length);
+
+                requestStream.Close();
+                HttpWebResponse response;
+
+                response = (HttpWebResponse)request.GetResponse();
+
+
+                Stream responseStream = response.GetResponseStream();
+
+                rp = new StreamReader(responseStream).ReadToEnd();
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("Err when post: " + ex.ToString());
+            }
+
+
+            return rp;
+        }
+
+
+
+
+    }
+}

+ 2507 - 0
ApiWeb/ApiProcessToken/Controllers/thailanloto.cs

@@ -0,0 +1,2507 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using CommonObj.common;
+using CommonObj.lotoModel;
+using CommonObj.model;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Memory;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using ResfullApi.Models;
+using System.Data;
+using ResfullApi.Models.bet;
+using ApiProcessToken.Models.common;
+using System.Net.Http;
+using ApiProcessToken.Models.edu;
+
+namespace ApiProcessToken.Controllers
+{
+    [ApiController]
+    [Route("api/[controller]/[action]/data")]
+
+    public class thailanloto : ControllerBase
+    {
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(loto));
+
+        private IMemoryCache memoryCache;
+        public thailanloto(IMemoryCache memoryCache)
+        {
+            this.memoryCache = memoryCache;
+        }
+
+
+       
+
+
+        [HttpPost]
+        public IActionResult buyTicket([FromBody] dynamic sendData)
+        {
+            buyTicketResponse response = new buyTicketResponse();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+
+
+
+            try
+            {
+                buyTicketObj data = JsonConvert.DeserializeObject<buyTicketObj>(sendData.ToString());
+                if (data.language != "0" || data.language != "1") data.language = "0";
+                logger.Info("New request income bet :" + data.ToString());
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("buyTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, data.token, data.channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                    logger.Info("buyTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                //Chu y:
+                // Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                if (_tokenObj != null)
+                {
+                    if (_tokenObj.msisdn != data.msisdn)
+                    {
+                        logger.Info("Authen token false");
+                        response.responseCode = "35";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                        logger.Info("buyTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                }
+
+                //Ket thuc check token
+
+
+
+                //Kiem tra xem co blaclist hay ko? Tham thoi dung voi muc dich whiteList
+
+                blacklistObj _blackObj = CommonFunction.getBlackListFromRedis(_redis, "2", "-1", data.msisdn);
+                if (_blackObj != null)
+                {
+                    logger.Info("Blacklist roi" + data.msisdn);
+                    response.responseCode = "26";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                    logger.Info("buyTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                logger.Info("So nay ko blacklist" + data.msisdn);
+
+
+
+
+                int is_promotion = 0, status_prompotion = 0;
+                long totalMoney = 0, totalPromotionMoney = 0, id_promotion = -1, totalPaymentMoney = 0;
+
+
+                //1. DUA VAO GAMEID DE KIEM TRA KY QUAY ID VA THOI GIAN QUAY THUONG
+                termObj _termObj = CommonFunction.getTermObjObjFromRedis(_redis, data.gameId);
+                //Kiem tra thoi gian hien tai > thoi gian dong cong + 10 phut thi exit
+                DateTime _endDate = new DateTime();
+                try { _endDate = DateTime.ParseExact(_termObj.endDate, "dd/MM/yyyy HH:mm:ss", null); }
+                catch { }
+                logger.Info("_endDate chua add 5 phut: " + _endDate.ToString());
+
+
+                TimeSpan _addMore = new TimeSpan(0, 5, 0);
+                _endDate = _endDate + _addMore;
+
+                logger.Info("_endDate da add 10 phut: " + _endDate.ToString());
+
+                DateTime dNow = DateTime.Now;
+
+                logger.Info("dNow : " + dNow.ToString());
+
+                if (dNow > _endDate ||_termObj.status!="1")
+                {
+                    logger.Info("He thong bi loi, het thoi gian choi cua ky nay roi nhe");
+                    response.responseCode = "-2";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                    logger.Info("buyTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                logger.Info("Check thoi gian da OK, xin moi tiep tuc");
+
+
+                //2. KIEM TRA TICKET NAY CO HOP LE VE TIEN HAY KO?
+                //Tinh tong tien cua ve, kiem tra tinh hop le cua ve
+
+                //Voi channel USSD thi xo lock tam thoi cu di
+                if (data.channel == "USSD")
+                    _redis.delByKey(_redis.DB_INDEX_DATA_USER, "TRANS_" + data.msisdn);
+
+                    if (!CommonFunction.checkTicket_THAILAN(data, out totalMoney))
+                {
+                    //Ticke sai formart
+                    logger.Info("Check ticket false");
+                    response.responseCode = "3";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                    logger.Info("buyTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                //Lay ve mang da duoc mua tren cache va tren DB
+                List<string> _listBuy = FunctionThaiLan.getListTicketBuy(_redis, data, _termObj.id);
+                if (_listBuy.Count > 0)
+                {
+                    //truong hop co ve da bi mua roi
+                    logger.Info("Check ticket da co ve bi mua roi");
+                    response.responseCode = "42";
+                    //response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                    response.responseMessage = string.Join(",", _listBuy);
+                    logger.Info("buyTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+                if (!string.IsNullOrEmpty(data.promotionCode))
+                {
+                    DataSet _ds = lotoDataAccess.getPromotionByCode(data.promotionCode, data.msisdn);
+                    if (_ds != null && _ds.Tables[0].Rows.Count > 0)
+                    {
+                        id_promotion = Convert.ToUInt32(_ds.Tables[0].Rows[0]["ID"].ToString());
+                        totalPromotionMoney = Convert.ToUInt32(_ds.Tables[0].Rows[0]["MONEY"].ToString());
+                        status_prompotion = Convert.ToUInt16(_ds.Tables[0].Rows[0]["STATUS"].ToString());
+                        if (status_prompotion == 2)
+                        {
+                            //Ma code khuyen mai da su dung roi
+                            logger.Info("Promotion code have use");
+                            response.responseCode = "38";
+                            response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                            logger.Info("buyTicket response : " + response.ToString());
+                            return Ok(response);
+                        }
+                        else if (status_prompotion == 0)
+                        {
+                            //Ma code khuyen mai chua send
+                            logger.Info("Promotion is not active");
+                            response.responseCode = "40";
+                            response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                            logger.Info("buyTicket response : " + response.ToString());
+                            return Ok(response);
+                        }
+                        else if (status_prompotion == 1)
+                        {
+                            logger.Info("Promotion code OK");
+                            is_promotion = 1;
+                        }
+
+                    }
+                    else
+                    {
+                        //Promotion code ko hop le
+                        logger.Info("Promotion code invalid");
+                        response.responseCode = "39";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                        logger.Info("buyTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                }
+                //Tinh lai tong tien va gian lai so tien cho moi ve.
+                int moneyOnTicket = 0;
+                int moneyBlockTicket = 0;
+                if(data.ticket.Length==1)
+                {
+                    moneyOnTicket = 199;
+                    moneyBlockTicket = 199;
+                }
+                else if(data.ticket.Length == 2)
+                {
+                    moneyOnTicket = 199;
+                    moneyBlockTicket = 398;
+                }
+                else if (data.ticket.Length == 3)
+                {
+                    moneyOnTicket = 199;
+                    moneyBlockTicket = 597;
+                }
+                else if (data.ticket.Length == 4)
+                {
+                    moneyOnTicket = 199;
+                    moneyBlockTicket = 769;
+
+                }
+                else if (data.ticket.Length == 5)
+                {
+                    moneyOnTicket = 191;
+                    moneyBlockTicket = 955;
+
+                }
+                else
+                {
+                    logger.Info("Ticket ko qua 5 ve");
+                    response.responseCode = "3";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                    logger.Info("buyTicket response : " + response.ToString());
+                    return Ok(response);
+
+                }
+                for(int i=0;i< data.ticket.Length;i++)
+                {
+                    data.ticket[i].money = moneyOnTicket.ToString();
+                }
+                totalMoney = moneyBlockTicket;
+                if (totalPromotionMoney >= totalMoney)
+                    totalPaymentMoney = 0;
+                else
+                    totalPaymentMoney = totalMoney - totalPromotionMoney;
+
+
+                response.responseCode = "0";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, data.channel, response.responseCode, data.language);
+                response.termObj = _termObj;
+                response.requestId = data.requestId;
+                if(data.channel=="USSD")
+                    //response.transId = data.msisdn+"_" +data.requestId;
+                    response.transId = "TRANS_" + data.msisdn;
+                else
+                    response.transId = "TRANS_" + CommonFunction.getGuiId();
+                response.isPromotion = is_promotion.ToString();
+                response.totalMoney = totalMoney.ToString();
+                response.totalMoneyPromotion = totalPromotionMoney.ToString();
+                response.totalMoneyPayment = totalPaymentMoney.ToString();
+                response.promotionId = id_promotion.ToString();
+                data.buyTicketResponse = response;
+
+                //Ghi request nay vao select 2 cua DB
+                //ghi lai token vao DB(1)
+                int _token_timeout = Convert.ToInt16(((paramObj)CommonFunction.getParamObjFromRedis(_redis, "TICKET_CONFIRM_TIMEOUT", "TICKET_CONFIRM_TIMEOUT", "SYSTEM")).values);
+                TimeSpan _timeSpam = new TimeSpan(0, 0, _token_timeout);
+                _redis.setByKey(_redis.DB_INDEX_DATA_USER, response.transId, data.ToString(), _timeSpam);
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("buyTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult confirmTicket([FromBody] dynamic sendData)
+        {
+
+            confirmTiketResponse response = new confirmTiketResponse();
+
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+            response.transId = CommonFunction.getGuiId();
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+            string paymentTransCode = "";
+            string requestId = string.Empty, language = string.Empty, transIdByTicket = string.Empty, paymentCode = string.Empty, token = string.Empty, channel = string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                requestId = Convert.ToString(obj["requestId"]);
+                transIdByTicket = Convert.ToString(obj["transIdByTicket"]); //voi ussd thi co dinh msisdn_tranId
+                paymentCode = Convert.ToString(obj["paymentCode"]);
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                paymentTransCode = paymentCode;
+                response.requestId = requestId;
+
+                if (channel == "USSD")
+                    transIdByTicket = "TRANS_" + transIdByTicket;
+
+                    /*
+                    if (string.IsNullOrEmpty(requestId)) requestId = "";
+                    if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+                    if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+                    if (string.IsNullOrEmpty(token)) token = "";
+                    */
+                    string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+                //Ket thuc check token
+
+                //Lay thong tin cua requetByTicket ve
+                if (!_redis.existsByKey(Convert.ToInt16(_redis.DB_INDEX_DATA_USER), transIdByTicket))
+                {
+                    logger.Info("Request buy ticket not exits");
+                    response.responseCode = "41";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+
+
+                }
+                else
+                {
+                    buyTicketObj data = JsonConvert.DeserializeObject<buyTicketObj>(_redis.getByKey(_redis.DB_INDEX_DATA_USER, transIdByTicket));
+                    _redis.delByKey(_redis.DB_INDEX_DATA_USER, transIdByTicket);
+                    //data.buyTicketResponse.promotionId
+
+
+                    //Truoc khi tien hanh charge thi can kiem tra lai
+
+                    //Tien hanh charge tien, gui ve ma loi va ma giao dich
+                    string _resultCharge = "-2";
+                    if (channel == "USSD")
+                    {
+                        _resultCharge = "0";
+                    }
+                    else
+                    {
+                         string mps_ip=  Common.GetValuesAppSetting("webConfig", "MPS_IP");
+                         string mps_port = Common.GetValuesAppSetting("webConfig", "MPS_PORT");
+                         string isTest = Common.GetValuesAppSetting("webConfig", "isTest");
+                        if (isTest == "1")
+                            _resultCharge = "0";
+                        else
+                            _resultCharge = CommonFunction.chargeMPS_THAILAN(_redis, response.transId, data.msisdn, data.buyTicketResponse.totalMoneyPayment, mps_ip, mps_port, logger);
+
+                    }
+                        
+                    
+                    
+                    
+                    paymentTransCode = response.transId;
+                    if (_resultCharge != "0")
+                    {
+                        logger.Info("Charge false so exit");
+                        response.responseCode = _resultCharge;
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+
+
+                    //truong hop con lai thi da tru tien thanh cong va insert ve nay vao DB
+                    bool _resultInsert = false;
+                    try
+                    {
+                        //tao chuoi ticket co format: termId1#money#ticket1*termId2#money#tiket2*.......
+                        string _tiketformat = "";
+                        for (int i = 0; i < data.ticket.Length; i++)
+                        {
+                            if (i == 0)
+                                _tiketformat = data.buyTicketResponse.termObj.id + "#" + data.ticket[i].money + "#" + data.ticket[i].code;
+                            else
+                                _tiketformat = _tiketformat + "*" + data.buyTicketResponse.termObj.id + "#" + data.ticket[i].money + "#" + data.ticket[i].code;
+                        }
+
+                        DataSet _ds = lotoDataAccess.lotoInsertBet(data.msisdn, data.buyTicketResponse.promotionId, _tiketformat,
+                                        data.buyTicketResponse.totalMoneyPayment, data.requestId, data.buyTicketResponse.transId,
+                                        response.requestId, response.transId, paymentTransCode, "Success", DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")
+                                        , DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"), "0", data.gameId, data.channel, data.language);
+
+                        if (_ds != null && _ds.Tables[0].Rows.Count > 0)
+                        {
+                            //lay ve ma don hang, list betId
+                            response.orderId = _ds.Tables[0].Rows[0]["bill_code"].ToString();
+                            response.listTiketId = _ds.Tables[0].Rows[0]["tran_code"].ToString();
+                            response.responseCode = "0";
+                            response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                            logger.Info("confirmTicket response : " + response.ToString());
+
+                            //Luu lai toan bo ve nay vao cache, phuc vu viec tim kiem nhanh nhat
+                            for (int i = 0; i < data.ticket.Length; i++)
+                            {
+                                string _code = data.ticket[i].code;
+                                TimeSpan _timeSpam = new TimeSpan(360, 0, 0); //Time out trong 15 ngay
+                                _redis.setByKey(_redis.DB_INDEX_DATA_TICKET_UNIQUE_BUY, _code + "_" + data.buyTicketResponse.termObj.id, _code, _timeSpam);
+                                _redis.delByKey(_redis.DB_INDEX_DATA_TICKET_UNIQUE_FREE, _code);
+
+                            }
+
+
+
+                            return Ok(response);
+                        }
+                        else
+                        {
+
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        logger.Info("Insert bet into Database errr " + ex.Message, ex);
+                        _resultInsert = false;
+
+                    }
+                    if (!_resultInsert)
+                    {
+                        //Ghi lai log cua giao dich con hoan lai tien
+                        logger.Info("Insert bet into Database err so write log for revert");
+                        //Ghi log
+                        response.responseCode = "-2";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+
+                    }
+
+
+                }
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("confirmTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult getRandomListTicket([FromBody] dynamic sendData)
+        {
+
+            getListTicketResponse response = new getListTicketResponse();
+
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+          
+            logger.Info("Request from UI getRandomListTicket: " + sendData.ToString());
+            string paymentTransCode = "";
+            string requestId = string.Empty, language = string.Empty, total = string.Empty, 
+            token = string.Empty, channel = string.Empty, gameId=string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                requestId = Convert.ToString(obj["requestId"]);
+                language = Convert.ToString(obj["language"]);
+                total = Convert.ToString(obj["total"]);
+
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                gameId = Convert.ToString(obj["gameId"]);
+                response.requestId = requestId;
+
+                
+
+                
+                if (string.IsNullOrEmpty(requestId)) requestId = "";
+                if (string.IsNullOrEmpty(language)) language = "0";
+                if (string.IsNullOrEmpty(token)) token = "";
+                if (string.IsNullOrEmpty(total)) total = "10";
+
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+
+               
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+               
+
+
+                //1. DUA VAO GAMEID DE KIEM TRA KY QUAY ID VA THOI GIAN QUAY THUONG
+                termObj _termObj = CommonFunction.getTermObjObjFromRedis(_redis, gameId);
+                //Kiem tra thoi gian hien tai > thoi gian dong cong + 10 phut thi exit
+                DateTime _endDate = new DateTime();
+                try { _endDate = DateTime.ParseExact(_termObj.endDate, "dd/MM/yyyy HH:mm:ss", null); }
+                catch { }
+                logger.Info("_endDate chua add 5 phut: " + _endDate.ToString());
+
+
+                TimeSpan _addMore = new TimeSpan(0, 5, 0);
+                _endDate = _endDate + _addMore;
+
+                logger.Info("_endDate da add 5 phut: " + _endDate.ToString());
+
+                DateTime dNow = DateTime.Now;
+
+                logger.Info("dNow : " + dNow.ToString());
+
+                if (dNow > _endDate)
+                {
+                    logger.Info("He thong bi loi, het thoi gian choi cua ky nay roi nhe");
+                    response.responseCode = "2";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("buyTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                logger.Info("Check thoi gian da OK, xin moi tiep tuc");
+                if(_termObj.status!="1")
+                {
+                    logger.Info("He thong bi loi, het thoi gian choi cua ky nay roi nhe");
+                    response.responseCode = "2";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("buyTicket response : " + response.ToString());
+                    return Ok(response);
+
+                }    
+
+
+
+                //Cuoi cung lay ra mang ticket roi tra lai ket qua
+                List<string> _listTicketFree=FunctionThaiLan.getListTicketFree(_redis,Convert.ToInt16(total), _termObj.id);
+                response.requestId = requestId;
+                response.termObj = _termObj;
+                response.responseCode = "0";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                response.ticket = _listTicketFree.ToArray();
+                logger.Info("getListTicketFree response : " + response.ToString());
+                return Ok(response);
+                //Ket thuc check token
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("confirmTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult startSeach([FromBody] dynamic sendData)
+        {
+            searchTicketResponse response = new searchTicketResponse();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI startSeach: " + sendData.ToString());
+            string requestId = string.Empty, language = string.Empty, total = string.Empty,
+            token = string.Empty, channel = string.Empty, gameId = string.Empty, ticket = string.Empty, msisdn=string.Empty;
+            string rowOnPage = "0";
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                requestId = Convert.ToString(obj["requestId"]);
+                language = Convert.ToString(obj["language"]);
+                ticket = Convert.ToString(obj["ticket"]);
+                msisdn = Convert.ToString(obj["msisdn"]);
+                rowOnPage= Convert.ToString(obj["rowOnPage"]);
+
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                gameId = Convert.ToString(obj["gameId"]);
+                response.requestId = requestId;
+
+
+
+
+                if (string.IsNullOrEmpty(requestId)) requestId = "";
+                if (string.IsNullOrEmpty(language)) language = "0";
+                if (string.IsNullOrEmpty(token)) token = "";
+                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+                if (string.IsNullOrEmpty(rowOnPage)) rowOnPage = "10";
+
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("buyTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("buyTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+                //Chu y:
+                // Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                if (_tokenObj != null)
+                {
+                    if (_tokenObj.msisdn != msisdn)
+                    {
+                        logger.Info("Authen token false");
+                        response.responseCode = "35";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                        logger.Info("buyTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                }
+
+                //Ket thuc check token
+
+
+
+                //Kiem tra xem co blaclist hay ko? Tham thoi dung voi muc dich whiteList
+
+                blacklistObj _blackObj = CommonFunction.getBlackListFromRedis(_redis, "2", "-1", msisdn);
+                if (_blackObj != null)
+                {
+                    logger.Info("Blacklist roi" + msisdn);
+                    response.responseCode = "26";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("buyTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                logger.Info("So nay ko blacklist" + msisdn);
+
+
+                //Ket thuc check token
+
+
+
+
+             
+
+                //1. DUA VAO GAMEID DE KIEM TRA KY QUAY ID VA THOI GIAN QUAY THUONG
+                termObj _termObj = CommonFunction.getTermObjObjFromRedis(_redis, gameId);
+                //Kiem tra thoi gian hien tai > thoi gian dong cong + 10 phut thi exit
+                DateTime _endDate = new DateTime();
+                try { _endDate = DateTime.ParseExact(_termObj.endDate, "dd/MM/yyyy HH:mm:ss", null); }
+                catch { }
+                logger.Info("_endDate chua add 5 phut: " + _endDate.ToString());
+
+
+                TimeSpan _addMore = new TimeSpan(0, 5, 0);
+                _endDate = _endDate + _addMore;
+
+                logger.Info("_endDate da add 10 phut: " + _endDate.ToString());
+
+                DateTime dNow = DateTime.Now;
+
+                logger.Info("dNow : " + dNow.ToString());
+
+                if (dNow > _endDate)
+                {
+                    logger.Info("He thong bi loi, het thoi gian choi cua ky nay roi nhe");
+                    response.responseCode = "-2";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("buyTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+                logger.Info("Check thoi gian da OK, xin moi tiep tuc");
+
+                //Bat dau tim kiem va ghi lai ket qua vao cache
+                List<string> _search = _redis.getAllkeyByPatternRegex(_redis.DB_INDEX_DATA_TICKET_UNIQUE_FREE,  ticket );
+                long totalRow = _search.Count;
+                long phandu = totalRow %Convert.ToInt32(rowOnPage);
+                long totalPage = 0;
+                if(phandu==0)
+                    totalPage= totalRow / Convert.ToInt32(rowOnPage);
+                else
+                    totalPage = (totalRow / Convert.ToInt32(rowOnPage))+1;
+
+
+
+
+
+                response.responseCode = "0";
+                response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+
+                response.termObj = _termObj;
+                response.requestId = requestId;
+                response.rowOnPage = rowOnPage.ToString();
+                response.totalRow = totalRow.ToString();
+                response.totalPage = totalPage.ToString();
+                response.transId =  CommonFunction.getGuiId();
+
+                // Ghi request nay vao select 6 cua DB
+                //List<string> _a = new List<string>();
+                //string str = string.Join(",", _a);
+                //List<string> b = str.Split(',').ToList();
+                searchTicketResult _resultSearch = new searchTicketResult();
+                _resultSearch.listTicket = _search;
+                _resultSearch.searchInfo = response;
+
+                int _token_timeout = _redis.TOKEN_TIMEOUT_DEFAULT;
+                TimeSpan _timeSpam = new TimeSpan(0, 0, _token_timeout);
+                //_redis.setByKey(_redis.DB_INDEX_DATA_TICKET_SEARCH, response.transId, _resultSearch.ToString(), _timeSpam);
+                _redis.setByKey(_redis.DB_INDEX_DATA_TICKET_SEARCH, msisdn, _resultSearch.ToString(), _timeSpam);
+
+                //searchTicketResult _token = JsonConvert.DeserializeObject<searchTicketResult>("String o day");
+
+
+
+
+                return Ok(response);
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("buyTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult search([FromBody] dynamic sendData)
+        {
+
+            searchTicketResult response = new searchTicketResult();
+
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+            
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+           
+            string requestId = string.Empty, language = string.Empty
+                , seqPage = string.Empty, token = string.Empty, channel = string.Empty,msisdn=string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                requestId = Convert.ToString(obj["requestId"]);
+                
+                seqPage = Convert.ToString(obj["seqPage"]);
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                msisdn = Convert.ToString(obj["msisdn"]);
+
+
+
+                /*
+                if (string.IsNullOrEmpty(requestId)) requestId = "";
+                if (string.IsNullOrEmpty(transIdByTicket)) transIdByTicket = "";
+                if (string.IsNullOrEmpty(paymentCode)) paymentCode = "";
+                if (string.IsNullOrEmpty(token)) token = "";
+                */
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+                //Chu y:
+                // Voi nhung ham quan trong thi neu out _tokenObj !=null thi ta len kiem tra msisdn trong body voi msisdn trong token
+                if (_tokenObj != null)
+                {
+                    if (_tokenObj.msisdn != msisdn)
+                    {
+                        logger.Info("Authen token false");
+                        response.responseCode = "35";
+                        response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                        logger.Info("buyTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                }
+
+
+                //Ket thuc check token
+
+                //Lay thong tin cua ve ket qua serache
+                if (!_redis.existsByKey(Convert.ToInt16(_redis.DB_INDEX_DATA_TICKET_SEARCH), msisdn))
+                {
+                    logger.Info("Request search");
+                    response.responseCode = "41";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+
+
+                }
+                else
+                {
+                    //Lay va tang thoi gia cho ket qua
+                    string redisData = _redis.getByKey(_redis.DB_INDEX_DATA_TICKET_SEARCH, msisdn);
+                    int _token_timeout = _redis.TOKEN_TIMEOUT_DEFAULT;
+                    TimeSpan _timeSpam = new TimeSpan(0, 0, _token_timeout);
+                    //_redis.setByKey(_redis.DB_INDEX_DATA_TICKET_SEARCH, response.transId, _resultSearch.ToString(), _timeSpam);
+                    _redis.setByKey(_redis.DB_INDEX_DATA_TICKET_SEARCH, msisdn, redisData, _timeSpam);
+
+                    searchTicketResult data = JsonConvert.DeserializeObject<searchTicketResult>(redisData);
+                    int rowOnPage =Convert.ToInt16(data.searchInfo.rowOnPage);
+                    int min = (Convert.ToInt16(seqPage) - 1) * rowOnPage;
+                    int max = Convert.ToInt16(seqPage) * rowOnPage-1;
+                    List<string> _resultSearch = new List<string>();
+                    for (int j = min; j <= max; j++)
+                    {
+                         if(j<= data.listTicket.Count-1)
+                            _resultSearch.Add(data.listTicket[j]);
+                    }
+
+                    response.searchInfo = data.searchInfo;
+                    response.searchInfo.seqPage = seqPage;
+                    response.listTicket = _resultSearch;
+                    response.responseCode = "0";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("Search response : " + response.ToString());
+                    return Ok(response);
+
+
+
+                }
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("confirmTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult uploadEvoucher([FromBody] dynamic sendData)
+        {
+
+            Response response = new Response();
+
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI uploadEvoucher: " + sendData.ToString());
+            string paymentTransCode = "";
+            string requestId = string.Empty, language = string.Empty, total = string.Empty,
+            token = string.Empty, channel = string.Empty, gameId = string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+               
+                language = Convert.ToString(obj["language"]);
+               
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                gameId = Convert.ToString(obj["gameId"]);
+               
+
+
+
+
+                if (string.IsNullOrEmpty(requestId)) requestId = "";
+                if (string.IsNullOrEmpty(language)) language = "0";
+                if (string.IsNullOrEmpty(token)) token = "";
+               
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+
+
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+                uploadEvoucherObj _data = JsonConvert.DeserializeObject<uploadEvoucherObj>(sendData.ToString());
+
+                DataSet _ds = lotoDataAccess.THAILAN_EVOUCHER_IN(_data.name, _data.code, _data.users, _data.totalRow, _data.totalMoney);
+                if (_ds != null && _ds.Tables[0].Rows.Count > 0)
+                {
+                    string evoucherId = _ds.Tables[0].Rows[0]["id"].ToString();
+                    List<List<string>> DataColumms = new List<List<string>>();
+                    var LIST_VOUCHERID = new List<string>();
+                    var LIST_SERIAL = new List<string>();
+                    var LIST_EVOUCHER = new List<string>();
+                    var LIST_MONEY = new List<string>();
+                    var LIST_EXPIRE = new List<string>();
+                    var LIST_CREATE = new List<string>();
+
+                    foreach (evoucherObj _evoucher in _data.list)
+                    {
+                        LIST_VOUCHERID.Add(evoucherId);
+                        LIST_SERIAL.Add(_evoucher.serial);
+                        LIST_EVOUCHER.Add(_evoucher.evoucher);
+                        LIST_MONEY.Add(_evoucher.money);
+                        LIST_EXPIRE.Add(_evoucher.expireDate);
+                        LIST_CREATE.Add(_evoucher.createDate);
+
+                    }
+                    DataColumms.Add(LIST_VOUCHERID);
+                    DataColumms.Add(LIST_SERIAL);
+                    DataColumms.Add(LIST_EVOUCHER);
+                    DataColumms.Add(LIST_MONEY);
+                    DataColumms.Add(LIST_EXPIRE);
+                    DataColumms.Add(LIST_CREATE);
+
+                    lotoDataAccess.THAILAN_EVOUCHER_DETAIL_IN("LOTO_PKG.THAILAN_EVOUCHER_DETAIL_IN", DataColumms);
+                    logger.Info("Call database export_created success:");
+                    response.responseCode = "0";
+                    response.responseMessage = "Success";
+                    return Ok(response);
+
+                }
+                else
+                {
+                    response.responseCode = "-2";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("upload evoucher response : " + response.ToString());
+                    return Ok(response);
+                }    
+                
+
+
+
+
+
+                logger.Info("getListTicketFree response : " + response.ToString());
+                return Ok(response);
+                //Ket thuc check token
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("confirmTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult getRandomNotDraw([FromBody] dynamic sendData)
+        {
+
+            listTermNotDraw response = new listTermNotDraw();
+
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+
+            string requestId = string.Empty, language = string.Empty,type = string.Empty
+                , seqPage = string.Empty, token = string.Empty, channel = string.Empty, msisdn = string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                requestId = Convert.ToString(obj["requestId"]);
+
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                msisdn = Convert.ToString(obj["msisdn"]);
+                type = Convert.ToString(obj["type"]);
+
+
+
+                
+                if (string.IsNullOrEmpty(type)) type = "-1";
+               
+              
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet _ds = lotoDataAccess.THAILAN_GET_RANDOM_NOT_DRAW (type);
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+                logger.Info("Call database THAILAN_GET_RANDOM_NOT_DRAW success:");
+                if (_ds != null & _ds.Tables[0].Rows.Count > 0)
+                {
+
+                    
+                    
+
+                    response.list = new termNotDraw[_ds.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < _ds.Tables[0].Rows.Count; j++)
+                    {
+                        termNotDraw _obj = new termNotDraw();
+                        _obj.id = _ds.Tables[0].Rows[j]["id"].ToString();
+                        _obj.status = _ds.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.createDate = _ds.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        _obj.startDate = _ds.Tables[0].Rows[j]["DATE_START"].ToString();
+                        _obj.endDate = _ds.Tables[0].Rows[j]["DATE_END"].ToString();
+                        _obj.randomDate = _ds.Tables[0].Rows[j]["DATE_RANDOM"].ToString();
+                        _obj.g1 = _ds.Tables[0].Rows[j]["G1"].ToString();
+                        _obj.g2 = _ds.Tables[0].Rows[j]["G2"].ToString();
+                        _obj.g3 = _ds.Tables[0].Rows[j]["G3"].ToString();
+                        _obj.g4 = _ds.Tables[0].Rows[j]["G4"].ToString();
+                        _obj.g5 = _ds.Tables[0].Rows[j]["G5"].ToString();
+                        _obj.g6 = _ds.Tables[0].Rows[j]["G6"].ToString();
+                        _obj.g7 = _ds.Tables[0].Rows[j]["G7"].ToString();
+                        _obj.g1Draw = _ds.Tables[0].Rows[j]["G1_IS_DRAW"].ToString();
+                        _obj.g2Draw = _ds.Tables[0].Rows[j]["G2_IS_DRAW"].ToString();
+                        _obj.g3Draw = _ds.Tables[0].Rows[j]["G3_IS_DRAW"].ToString();
+                        _obj.g4Draw = _ds.Tables[0].Rows[j]["G4_IS_DRAW"].ToString();
+                        _obj.g5Draw = _ds.Tables[0].Rows[j]["G5_IS_DRAW"].ToString();
+                        _obj.g6Draw = _ds.Tables[0].Rows[j]["G6_IS_DRAW"].ToString();
+                        _obj.g7Draw = _ds.Tables[0].Rows[j]["G7_IS_DRAW"].ToString();
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+                return Ok(response);
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("confirmTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult upRandomNotDraw([FromBody] dynamic sendData)
+        {
+
+            Response response = new Response();
+
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+
+            logger.Info("Request from UI getCurentTerm: " + sendData.ToString());
+
+            string requestId = string.Empty, language = string.Empty, randomId = string.Empty, seq = string.Empty
+                , seqPage = string.Empty, token = string.Empty, channel = string.Empty, msisdn = string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                requestId = Convert.ToString(obj["requestId"]);
+
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                msisdn = Convert.ToString(obj["msisdn"]);
+                randomId = Convert.ToString(obj["randomId"]);
+                seq = Convert.ToString(obj["seq"]);
+
+
+
+
+                if (string.IsNullOrEmpty(randomId)) randomId = "-1";
+                if (string.IsNullOrEmpty(seq)) seq = "-1";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet _ds = lotoDataAccess.THAILAN_UP_RANDOM_NOT_DRAW(randomId, seq);
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+
+                return Ok(response);
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("confirmTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult upPrize([FromBody] dynamic sendData)
+        {
+
+            Response response = new Response();
+
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+
+            logger.Info("Request from UI upPrize: " + sendData.ToString());
+
+            string requestId = string.Empty, language = string.Empty, randomId = string.Empty, type = string.Empty
+                , seqPage = string.Empty, token = string.Empty, channel = string.Empty, msisdn = string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+                requestId = Convert.ToString(obj["requestId"]);
+
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                msisdn = Convert.ToString(obj["msisdn"]);
+                randomId = Convert.ToString(obj["randomId"]);
+                type = Convert.ToString(obj["type"]);
+
+
+
+
+                if (string.IsNullOrEmpty(randomId)) randomId = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("upPrize response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("upPrize response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet _ds = lotoDataAccess.THAILAN_UP_PRIZE(randomId, type);
+                response.responseCode = "0";
+                response.responseMessage = _ds.Tables[0].Rows[0]["msg"].ToString();
+
+                logger.Info(" Response upPrize : " + response.ToString());
+                return Ok(response);
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("upPrize exception: " + ex.ToString());
+
+            }
+            logger.Info("upPrize response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsTotalRevenue([FromBody] dynamic sendData)
+        {
+
+            totalRevenueList response = new totalRevenueList();
+
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+
+            logger.Info("Request from UI cmsTotalRevenue: " + sendData.ToString());
+
+            string language = string.Empty, tungay = string.Empty
+                , denngay = string.Empty, pack = string.Empty, token = string.Empty, channel = string.Empty, channelBuy = string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+               
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                tungay = Convert.ToString(obj["fromDate"]);
+                denngay = Convert.ToString(obj["toDate"]);
+                channelBuy = Convert.ToString(obj["channelBuy"]);
+                pack = Convert.ToString(obj["pack"]);
+
+
+
+
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                if (string.IsNullOrEmpty(tungay)) tungay = "-1";
+                if (string.IsNullOrEmpty(denngay)) denngay = "-1";
+                if (string.IsNullOrEmpty(channelBuy)) channelBuy = "-1";
+                if (string.IsNullOrEmpty(pack)) pack = "-1";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+               
+                DataSet _ds = lotoDataAccess.THAILAN_CMS_TOTAL_REVENUE(tungay,denngay,channelBuy,pack);
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+                logger.Info("Call database THAILAN_CMS_TOTAL_REVENUE success:");
+                if (_ds != null & _ds.Tables[0].Rows.Count > 0)
+                {
+
+                    response.list = new totalRevenueObj[_ds.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < _ds.Tables[0].Rows.Count; j++)
+                    {
+                        totalRevenueObj _obj = new totalRevenueObj();
+                        _obj.stt = _ds.Tables[0].Rows[j]["stt"].ToString();
+                        _obj.date = _ds.Tables[0].Rows[j]["ngay"].ToString();
+                        _obj.totalUser = _ds.Tables[0].Rows[j]["total_users"].ToString();
+                        _obj.totalTrans = _ds.Tables[0].Rows[j]["total_tran"].ToString();
+                        _obj.totalTicket = _ds.Tables[0].Rows[j]["total_ticket"].ToString();
+                        _obj.totalMoney = _ds.Tables[0].Rows[j]["total_money"].ToString();
+                        _obj.totalWin = _ds.Tables[0].Rows[j]["total_win"].ToString();
+                        _obj.moneyWin = _ds.Tables[0].Rows[j]["money_win"].ToString();
+                        _obj.profit = _ds.Tables[0].Rows[j]["profit"].ToString();
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+                return Ok(response);
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("confirmTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsDetailPrize([FromBody] dynamic sendData)
+        {
+
+            detailPrizeList response = new detailPrizeList();
+
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+
+            logger.Info("Request from UI cmsDetailPrize: " + sendData.ToString());
+
+            string language = string.Empty, tungay = string.Empty, prize = string.Empty
+                , denngay = string.Empty, msisdn = string.Empty, token = string.Empty, channel = string.Empty, channelBuy = string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                tungay = Convert.ToString(obj["fromDate"]);
+                denngay = Convert.ToString(obj["toDate"]);
+                channelBuy = Convert.ToString(obj["channelBuy"]);
+                msisdn = Convert.ToString(obj["msisdn"]);
+                prize = Convert.ToString(obj["prizeMoney"]);
+
+
+
+
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                if (string.IsNullOrEmpty(tungay)) tungay = "-1";
+                if (string.IsNullOrEmpty(denngay)) denngay = "-1";
+                if (string.IsNullOrEmpty(channelBuy)) channelBuy = "-1";
+                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+                if (string.IsNullOrEmpty(prize)) prize = "-1";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+
+                DataSet _ds = lotoDataAccess.THAILAN_CMS_DETAIL_PRIZE(tungay, denngay,msisdn, channelBuy, prize);
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+                logger.Info("Call database THAILAN_CMS_DETAIL_PRIZE success:");
+                if (_ds != null & _ds.Tables[0].Rows.Count > 0)
+                {
+
+                    response.list = new detailPrizeObj[_ds.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < _ds.Tables[0].Rows.Count; j++)
+                    {
+                        detailPrizeObj _obj = new detailPrizeObj();
+                        _obj.stt = _ds.Tables[0].Rows[j]["stt"].ToString();
+                        _obj.msisdn = _ds.Tables[0].Rows[j]["msisdn"].ToString();
+                        _obj.ticket = _ds.Tables[0].Rows[j]["ticket"].ToString();
+                        _obj.pack = _ds.Tables[0].Rows[j]["pack"].ToString();
+                        _obj.packId = _ds.Tables[0].Rows[j]["pack_id"].ToString();
+                        _obj.dateBuy = _ds.Tables[0].Rows[j]["time_buy"].ToString();
+                        _obj.channel = _ds.Tables[0].Rows[j]["channel"].ToString();
+                        _obj.termId = _ds.Tables[0].Rows[j]["term_id"].ToString();
+                        _obj.termDateStart = _ds.Tables[0].Rows[j]["time_term_start"].ToString();
+                        _obj.termDateEnd = _ds.Tables[0].Rows[j]["time_term_end"].ToString();
+                        _obj.termDateRandom = _ds.Tables[0].Rows[j]["time_term_random"].ToString();
+                        _obj.prizeCode = _ds.Tables[0].Rows[j]["winner_code"].ToString();
+                        _obj.prizeName = _ds.Tables[0].Rows[j]["winner_detail"].ToString();
+                        _obj.prizeMoney = _ds.Tables[0].Rows[j]["winner_money"].ToString();
+                        _obj.reuslt = _ds.Tables[0].Rows[j]["result"].ToString();
+                        _obj.dateSendEvoucher = _ds.Tables[0].Rows[j]["time_send_evoucher"].ToString();
+                        _obj.status = _ds.Tables[0].Rows[j]["status"].ToString();
+                        _obj.evoucher = _ds.Tables[0].Rows[j]["evoucher"].ToString();
+                        _obj.expireDate = _ds.Tables[0].Rows[j]["e_expire_date"].ToString();
+
+                        _obj.mt = _ds.Tables[0].Rows[j]["mt_winner"].ToString();
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+                return Ok(response);
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("confirmTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsTotalPrize([FromBody] dynamic sendData)
+        {
+
+            totalPrizeList response = new totalPrizeList();
+
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+
+            logger.Info("Request from UI cmsTotalPrize: " + sendData.ToString());
+
+            string language = string.Empty, tungay = string.Empty
+                , denngay = string.Empty, msisdn = string.Empty, token = string.Empty, channel = string.Empty, channelBuy = string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                tungay = Convert.ToString(obj["fromDate"]);
+                denngay = Convert.ToString(obj["toDate"]);
+                channelBuy = Convert.ToString(obj["channelBuy"]);
+           
+
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                if (string.IsNullOrEmpty(tungay)) tungay = "-1";
+                if (string.IsNullOrEmpty(denngay)) denngay = "-1";
+                if (string.IsNullOrEmpty(channelBuy)) channelBuy = "-1";
+                
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+
+                DataSet _ds = lotoDataAccess.THAILAN_CMS_TOTAL_PRIZE(tungay, denngay, channelBuy);
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+                logger.Info("Call database THAILAN_CMS_TOTAL_PRIZE success:");
+                if (_ds != null & _ds.Tables[0].Rows.Count > 0)
+                {
+
+                    response.list = new totalPrizeObj[_ds.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < _ds.Tables[0].Rows.Count; j++)
+                    {
+                        totalPrizeObj _obj = new totalPrizeObj();
+                        _obj.stt = _ds.Tables[0].Rows[j]["stt"].ToString();
+                        _obj.prizeName = _ds.Tables[0].Rows[j]["winner_detail"].ToString();
+                        _obj.totalTicket = _ds.Tables[0].Rows[j]["total_ticket"].ToString();
+                        _obj.totalPlayer = _ds.Tables[0].Rows[j]["total_player"].ToString();
+                        _obj.totalMoney = _ds.Tables[0].Rows[j]["total_money"].ToString();
+                      
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+                return Ok(response);
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("confirmTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsDetailTicket([FromBody] dynamic sendData)
+        {
+
+            detailTicketList response = new detailTicketList();
+
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+
+            logger.Info("Request from UI cmsDetailTicket: " + sendData.ToString());
+
+            string language = string.Empty, tungay = string.Empty
+                , denngay = string.Empty, msisdn = string.Empty, token = string.Empty, channel = string.Empty, channelBuy = string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                tungay = Convert.ToString(obj["fromDate"]);
+                denngay = Convert.ToString(obj["toDate"]);
+                channelBuy = Convert.ToString(obj["channelBuy"]);
+                msisdn = Convert.ToString(obj["msisdn"]);
+
+
+
+
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                if (string.IsNullOrEmpty(tungay)) tungay = "-1";
+                if (string.IsNullOrEmpty(denngay)) denngay = "-1";
+                if (string.IsNullOrEmpty(channelBuy)) channelBuy = "-1";
+                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+
+                DataSet _ds = lotoDataAccess.THAILAN_CMS_DETAIL_TICKET(tungay, denngay,msisdn,channelBuy);
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+                logger.Info("Call database THAILAN_CMS_DETAIL_TICKET success:");
+                if (_ds != null & _ds.Tables[0].Rows.Count > 0)
+                {
+
+                    response.list = new detailTicketObj[_ds.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < _ds.Tables[0].Rows.Count; j++)
+                    {
+                        detailTicketObj _obj = new detailTicketObj();
+                        _obj.stt = _ds.Tables[0].Rows[j]["stt"].ToString();
+                        _obj.msisdn = _ds.Tables[0].Rows[j]["users"].ToString();
+                        _obj.dateBuy = _ds.Tables[0].Rows[j]["time_buy"].ToString();
+                        _obj.ticket = _ds.Tables[0].Rows[j]["ticket"].ToString();
+                        _obj.pack = _ds.Tables[0].Rows[j]["pack"].ToString();
+                        _obj.packId = _ds.Tables[0].Rows[j]["pack_id"].ToString();
+                        _obj.packMoney = _ds.Tables[0].Rows[j]["pack_money"].ToString();
+                        _obj.termId = _ds.Tables[0].Rows[j]["random_id"].ToString();
+                        _obj.termDateStart = _ds.Tables[0].Rows[j]["time_term_start"].ToString();
+                        _obj.termDateEnd = _ds.Tables[0].Rows[j]["time_term_end"].ToString();
+                        _obj.termDateRandom = _ds.Tables[0].Rows[j]["time_term_random"].ToString();
+                        _obj.mt = _ds.Tables[0].Rows[j]["mt_ticket"].ToString();
+                        _obj.channel = _ds.Tables[0].Rows[j]["channel"].ToString();
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+                return Ok(response);
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("confirmTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsDetailEvoucher([FromBody] dynamic sendData)
+        {
+
+            detailEvoucherList response = new detailEvoucherList();
+
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+
+            logger.Info("Request from UI cmsDetailEvoucher: " + sendData.ToString());
+
+            string language = string.Empty, tungay = string.Empty
+                , denngay = string.Empty, msisdn = string.Empty, token = string.Empty
+                , channel = string.Empty, channelBuy = string.Empty, evoucher = string.Empty, status = string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                tungay = Convert.ToString(obj["fromDate"]);
+                denngay = Convert.ToString(obj["toDate"]);
+                msisdn = Convert.ToString(obj["msisdn"]);
+                evoucher = Convert.ToString(obj["evoucher"]);
+                status = Convert.ToString(obj["status"]);
+
+
+
+
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                if (string.IsNullOrEmpty(tungay)) tungay = "-1";
+                if (string.IsNullOrEmpty(denngay)) denngay = "-1";
+                if (string.IsNullOrEmpty(channelBuy)) channelBuy = "-1";
+                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+                if (string.IsNullOrEmpty(evoucher)) evoucher = "-1";
+                if (string.IsNullOrEmpty(status)) status = "-1";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+
+                DataSet _ds = lotoDataAccess.THAILAN_CMS_DETAIL_EVOUCHER(tungay, denngay, msisdn, evoucher,status);
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+                logger.Info("Call database THAILAN_CMS_DETAIL_EVOUCHER success:");
+                if (_ds != null & _ds.Tables[0].Rows.Count > 0)
+                {
+
+                    response.list = new detailEvoucherObj[_ds.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < _ds.Tables[0].Rows.Count; j++)
+                    {
+                        detailEvoucherObj _obj = new detailEvoucherObj();
+                        _obj.stt = _ds.Tables[0].Rows[j]["stt"].ToString();
+                        _obj.msisdn = _ds.Tables[0].Rows[j]["msisdn"].ToString();
+                        _obj.evoucher = _ds.Tables[0].Rows[j]["evoucher"].ToString();
+                        _obj.money = _ds.Tables[0].Rows[j]["money"].ToString();
+                        _obj.status = _ds.Tables[0].Rows[j]["status"].ToString();
+                        _obj.expireDate = _ds.Tables[0].Rows[j]["e_expire_date"].ToString();
+                        _obj.createDate = _ds.Tables[0].Rows[j]["create_date"].ToString();
+                        _obj.sendDate = _ds.Tables[0].Rows[j]["update_date"].ToString();
+                        
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+                return Ok(response);
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("confirmTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+        [HttpPost]
+        public IActionResult cmsTotalEvoucher([FromBody] dynamic sendData)
+        {
+
+            totalEvoucherList response = new totalEvoucherList();
+
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+
+            logger.Info("Request from UI cmsTotalEvoucher: " + sendData.ToString());
+
+            string language = string.Empty, tungay = string.Empty
+                , denngay = string.Empty, msisdn = string.Empty, token = string.Empty
+                , channel = string.Empty, channelBuy = string.Empty, evoucher = string.Empty, status = string.Empty;
+
+
+            try
+            {
+                var obj = JObject.Parse(sendData.ToString());
+
+
+
+                token = Convert.ToString(obj["token"]);
+                channel = Convert.ToString(obj["channel"]);
+                tungay = Convert.ToString(obj["fromDate"]);
+                denngay = Convert.ToString(obj["toDate"]);
+          
+                status = Convert.ToString(obj["status"]);
+
+
+
+
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+                if (string.IsNullOrEmpty(tungay)) tungay = "-1";
+                if (string.IsNullOrEmpty(denngay)) denngay = "-1";
+               
+
+                if (string.IsNullOrEmpty(status)) status = "-1";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+
+                DataSet _ds = lotoDataAccess.THAILAN_CMS_TOTAL_EVOUCHER(tungay, denngay, status);
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+
+                logger.Info("Call database THAILAN_CMS_TOTAL_EVOUCHER success:");
+                if (_ds != null & _ds.Tables[0].Rows.Count > 0)
+                {
+
+                    response.list = new totalEvoucherObj[_ds.Tables[0].Rows.Count];
+
+                    for (int j = 0; j < _ds.Tables[0].Rows.Count; j++)
+                    {
+                        totalEvoucherObj _obj = new totalEvoucherObj();
+                        _obj.stt = _ds.Tables[0].Rows[j]["stt"].ToString();
+                        _obj.money = _ds.Tables[0].Rows[j]["money"].ToString();
+                        _obj.total = _ds.Tables[0].Rows[j]["sl"].ToString();
+                        
+
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+                return Ok(response);
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getCurentTerm exception: " + ex.ToString());
+
+            }
+            logger.Info("confirmTicket response : " + response.ToString());
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+    }
+}

+ 5333 - 0
ApiWeb/ApiProcessToken/Controllers/userApi.cs

@@ -0,0 +1,5333 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using ResfullApi.Models;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System.Data;
+using System.Configuration;
+using Microsoft.AspNetCore.Mvc;
+using ApiProcess.Models;
+using CommonObj.model;
+using CommonObj.common;
+using Microsoft.Extensions.Caching.Memory;
+using ApiProcess.Models.balance;
+
+namespace ApiProcess.Controllers
+{
+    [ApiController]
+    [Route("api/[controller]/[action]/data")]
+   
+    public class userApi : ControllerBase
+    {
+
+
+
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(userApi));
+        private IMemoryCache memoryCache;
+        public userApi(IMemoryCache memoryCache)
+        {
+            this.memoryCache = memoryCache;
+        }
+
+        // {"users":"1234","pass":"123","partnerCode":"123","channel":"WEB"}
+        /*
+        [HttpPost]
+        public IActionResult getToken([FromBody] dynamic sendData)
+        {
+            ////log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            ////log4net.Config.XmlConfigurator.Configure();
+            responseObjLogin response = new responseObjLogin();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            
+            var ip = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string pass = Convert.ToString(userObj["pass"]);
+                string partnerCode = Convert.ToString(userObj["partnerCode"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                if (string.IsNullOrEmpty(users)) users = "1";
+                if (string.IsNullOrEmpty(pass)) pass = "-1";
+                if (string.IsNullOrEmpty(partnerCode)) partnerCode = "-1";
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+
+                if(users=="-1"|| pass == "-1" || partnerCode == "-1" || channel == "-1")
+                {
+                    logger.Info("Authen false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if(!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }    
+                channelObj _channelObj =(channelObj) CommonFunction.getChannelObjFromRedis(_redis, channel);
+                if (users != _channelObj.usersName || pass != _channelObj.password || partnerCode != _channelObj.partnerCode)
+                {
+                    logger.Info("Authen false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //truong hop con lai la thanh cong. Tien hanh lay token
+                tokenObj _token = CommonFunction.createToken(_redis,users,pass,channel);
+                response.status = "0";
+                response.message = "Success";
+                response.role = "";
+                response.token = _token.token;
+                return Ok(response);
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString(),ex);
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+*/
+
+
+
+
+
+
+
+        // {"users":"123","pass":"123"}
+        [HttpPost]
+        public IActionResult usersAdminLogin([FromBody] dynamic sendData)
+        {
+            ////log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            ////log4net.Config.XmlConfigurator.Configure();
+            ///
+            logger.Info("New request income admin Login :" + sendData.ToString());
+            responseObjLogin response = new responseObjLogin();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string pass = Convert.ToString(userObj["pass"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                if (string.IsNullOrEmpty(users)) users = "1";
+                if (string.IsNullOrEmpty(pass)) pass = "-1";
+                if (string.IsNullOrEmpty(channel)) channel = "-1";
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+
+                if (users == "-1" || pass == "-1" || channel == "-1")
+                {
+                    logger.Info("Authen false");
+                    response.status = "35";
+                    response.message = CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.status,"");// "Check Authen false";
+                    return Ok(response);
+                }
+                
+
+
+
+                
+                DataSet ds_regist = usersDataAccess.ADMIN_USERS_INFO(users, ResfullApi.Models.CustomEncryption.Encrypt(pass));
+                logger.Info("Call database ADMIN_USERS_INFO success:");
+
+                if (ds_regist == null || ds_regist.Tables[0].Rows.Count == 0)
+                {
+                    response.status = "1";
+                    response.message = "Login false";
+                    response.role = "";
+                    response.token = "";
+                    return Ok(response);
+                }
+                else
+                {
+                    string status= ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    if(status=="0")
+                    {
+                        //Tiep tuc lay danh sach chu nang cua Role
+                        DataSet ds = usersDataAccess.ADMIN_USERS_FUNCTION(ds_regist.Tables[0].Rows[0]["role"].ToString());
+                        if(ds == null || ds.Tables[0].Rows.Count > 0)
+                        {
+                            response.function = new adminFunctionObj[ds.Tables[0].Rows.Count];
+                            for (int j = 0; j < ds.Tables[0].Rows.Count; j++)
+                            {
+                                adminFunctionObj _obj = new adminFunctionObj();
+                                _obj.id = ds.Tables[0].Rows[j]["id"].ToString();
+                                _obj.role = ds.Tables[0].Rows[j]["ROLE"].ToString();
+                                _obj.name = ds.Tables[0].Rows[j]["NAME"].ToString();
+                                _obj.link = ds.Tables[0].Rows[j]["LINK"].ToString();
+                                _obj.note = ds.Tables[0].Rows[j]["NOTE"].ToString();
+                                response.function[j] = _obj;
+                            }
+                        }    
+
+
+                        tokenObj _token = CommonFunction.createToken(_redis, users, pass, channel,"LOGIN_ADMIN","", ds_regist.Tables[0].Rows[0]["role"].ToString());
+                        response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                        response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                        response.role = ds_regist.Tables[0].Rows[0]["role"].ToString();
+                        response.token = _token.token;
+                        return Ok(response);
+                    }
+                    else 
+                    {
+                        response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                        response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                        response.role = ds_regist.Tables[0].Rows[0]["role"].ToString();
+                        response.token = "";
+                        return Ok(response);
+                    }
+                    
+                    
+                }
+
+
+              
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        // {"msisdn":"50940227941","users":"123","pass":"123","passnew":"123","serviceId":"23","channel":"WEB"}
+        [HttpPost]
+        public IActionResult usersRegister([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjLogin response = new responseObjLogin();
+            response.status = "-1";
+            response.message = "Err unknow";
+            var userObj = JObject.Parse(sendData.ToString());
+            string language = Convert.ToString(userObj["language"]);
+            if (string.IsNullOrEmpty(language)) language = "0";
+
+            try
+            {
+                usersObjRegist data = JsonConvert.DeserializeObject<usersObjRegist>(sendData.ToString());
+                logger.Info("New request income usersRegister :" + data.ToString());
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+
+
+
+
+                //Ngoai tru 2 lenh (data.command == "REGIST" || data.command=="LOGIN") thi cac lenh con lai deu phai check token
+                if (!(data.command == "REGIST" || data.command == "LOGIN" || data.command == "RESETPASS"))
+                {
+                    if (!CommonFunction.checkToken(clientIp,data.token, data.channel, _redis, logger))
+                    {
+                        logger.Info("Authen token false");
+                        response.status = "35";
+                        response.message = "Check Authen false";
+                        return Ok(response);
+                    }
+                }    
+                    
+
+
+               
+
+                DataSet ds_regist = usersDataAccess.USERS_API_DK_HUY(data.msisdn, data.users, data.pass,data.passnew, data.serviceid,data.command, data.channel,data.role);
+                logger.Info("Call database USERS_API_DK_HUY success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    string status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    if(status=="0" && (data.command == "REGIST" || data.command == "LOGIN"))
+                    {
+                        string _role = ds_regist.Tables[0].Rows[0]["role"].ToString();
+                        //string _msisdn = ds_regist.Tables[0].Rows[0]["msisdn"].ToString();
+                        string _msisdn = data.users;
+                        tokenObj _token = CommonFunction.createToken(_redis, data.users, data.pass, data.channel, "LOGIN_USER", _msisdn, _role);
+                        response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                        response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                        response.role = ds_regist.Tables[0].Rows[0]["role"].ToString();
+                        response.token = _token.token;
+                        logger.Info("Response :"+response.ToString());
+                        return Ok(response);
+                    }    
+                    else
+                    {
+                        response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                        response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                        response.role = ds_regist.Tables[0].Rows[0]["role"].ToString();
+                        response.token = "";
+                        logger.Info("Response :" + response.ToString());
+                        return Ok(response);
+                    }    
+                    
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        //Input
+        //{"users":"50912345","serviceId":"30"}
+
+        //Output
+        // {"status":"1","id":"23","msisdn":"5091234","users":"23","pass":"23","serviceId":"23","dateregist":"01/01/2019 00:00:00","isactive":"1","channel":"web","best_coin":"0","cast_coin":"0"}
+        [HttpPost]
+        public IActionResult usersCheckStatus([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersObjStatusResponse response = new usersObjStatusResponse();
+            
+            
+            try
+            {
+                usersObjStatusRequest data = JsonConvert.DeserializeObject<usersObjStatusRequest>(sendData.ToString());
+                logger.Info("New request income usersCheckStatus :" + data.ToString());
+
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_GET_STATUS(data.users, data.serviceid);
+                logger.Info("Call database USERS_GET_STATUS success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = "0";
+                    response.id = ds_regist.Tables[0].Rows[0]["id"].ToString();
+                    response.msisdn = ds_regist.Tables[0].Rows[0]["msisdn"].ToString();
+                    response.users = ds_regist.Tables[0].Rows[0]["users"].ToString();
+                    response.pass = ds_regist.Tables[0].Rows[0]["pass"].ToString();
+                    response.serviceid = ds_regist.Tables[0].Rows[0]["serviceid"].ToString();
+                    response.dateregist = ds_regist.Tables[0].Rows[0]["dateregist"].ToString();
+                    response.isactive = ds_regist.Tables[0].Rows[0]["isactive"].ToString();
+                    response.channel = ds_regist.Tables[0].Rows[0]["channel"].ToString();
+                    response.bet_coin = ds_regist.Tables[0].Rows[0]["bet_coin"].ToString();
+                    response.cash_coin = ds_regist.Tables[0].Rows[0]["cash_coin"].ToString();
+                    response.role = ds_regist.Tables[0].Rows[0]["role"].ToString();
+                    response.ranking = ds_regist.Tables[0].Rows[0]["ranking"].ToString();
+                    response.language = ds_regist.Tables[0].Rows[0]["LANGUAGE"].ToString(); //0=global,1=local
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        
+
+
+
+
+
+        //{"users":"50912345678","serviceId":"30","fullName":"Do thi Hong Hanh","sex":"Nam","address":"Yen nghia","provinceId":"2","cardNumber":"123","email":"quangbh@yahoo.com","company":"Viettech","description":"ha ha hehe","picture":"/data/quangbh.jpg","sexNeed":"Nu","birthday":"12/10/1980","height":"12","weight":"60","work":"Ke toan","lookingFor":"Ke toan truong"}
+        [HttpPost]
+        public IActionResult usersUpdateProfile([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                
+                usersObjProfile data = JsonConvert.DeserializeObject<usersObjProfile>(sendData.ToString());
+                logger.Info("New request income usersUpdateProfile :" + data.ToString());
+
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_UPDATE_PROFILE(data.users, data.fullName, data.sex, data.address, data.provinceId, data.cardNumber, data.email, data.company,
+                    data.description, data.picture,data.sexNeed,data.birthday,data.height,data.weight,data.work,data.serviceid,data.lookingFor);
+                logger.Info("Call database USERS_UPDATE_PROFILE success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                    
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        //{"users":"50912345678","serviceId":"30","language":"0"}
+        [HttpPost]
+        public IActionResult usersGetProfile([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersObjProfile response = new usersObjProfile();
+            
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string uid = Convert.ToString(userObj["users"]);
+                string uidQuery = Convert.ToString(userObj["usersQuery"]);
+                string sid = Convert.ToString(userObj["serviceId"]);
+                string language = Convert.ToString(userObj["language"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                //string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+                logger.Info("New request income usersGetProfile :" + sendData.ToString());
+
+
+                //Check token
+                
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_GET_PROFILE(uid,sid,uidQuery);
+                logger.Info("Call database usersGetProfile success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.id = ds_regist.Tables[0].Rows[0]["id"].ToString();
+                    response.usersId = ds_regist.Tables[0].Rows[0]["user_id"].ToString();
+                    response.users = ds_regist.Tables[0].Rows[0]["users"].ToString();
+                    response.serviceid = ds_regist.Tables[0].Rows[0]["serviceid"].ToString();
+                    response.fullName = ds_regist.Tables[0].Rows[0]["fullName"].ToString();
+                    response.sex = ds_regist.Tables[0].Rows[0]["sex"].ToString();
+                    response.address = ds_regist.Tables[0].Rows[0]["address"].ToString();
+                    response.provinceId = ds_regist.Tables[0].Rows[0]["provinceId"].ToString();
+                    response.cardNumber = ds_regist.Tables[0].Rows[0]["cardNumber"].ToString();
+                    response.email = ds_regist.Tables[0].Rows[0]["email"].ToString();
+                    response.company = ds_regist.Tables[0].Rows[0]["company"].ToString();
+                    response.description = ds_regist.Tables[0].Rows[0]["description"].ToString();
+                    response.picture = ds_regist.Tables[0].Rows[0]["picture"].ToString();
+                    response.sexNeed = ds_regist.Tables[0].Rows[0]["sexNeed"].ToString();
+                    response.birthday = ds_regist.Tables[0].Rows[0]["birthday"].ToString();
+                    response.height = ds_regist.Tables[0].Rows[0]["height"].ToString();
+
+                 
+                    response.weight = ds_regist.Tables[0].Rows[0]["weight"].ToString();
+                    response.work = ds_regist.Tables[0].Rows[0]["work"].ToString();
+                    response.isLike = ds_regist.Tables[0].Rows[0]["isLike"].ToString();
+                    response.totalLike = ds_regist.Tables[0].Rows[0]["totalLike"].ToString();
+                    response.totalPic = ds_regist.Tables[0].Rows[0]["totalPicture"].ToString();
+                    response.totalView = ds_regist.Tables[0].Rows[0]["TOTALVIEW"].ToString();
+
+
+                    response.lookingFor = ds_regist.Tables[0].Rows[0]["LOOKING_FOR"].ToString();
+
+                    DataSet dsInterests = new DataSet();
+                    dsInterests = usersDataAccess.USERS_GET_INTERESTS_BY_USER(language, uid, sid);
+                    if (dsInterests != null & dsInterests.Tables[0].Rows.Count > 0)
+                    {
+                        response.listInterests = new usersInterests[dsInterests.Tables[0].Rows.Count];
+                        for (int j = 0; j < dsInterests.Tables[0].Rows.Count; j++)
+                        {
+                            usersInterests obj = new usersInterests();
+                            obj.id = dsInterests.Tables[0].Rows[j]["id"].ToString();
+                            obj.code = dsInterests.Tables[0].Rows[j]["code"].ToString();
+                            obj.name = dsInterests.Tables[0].Rows[j]["name"].ToString();
+                            obj.picture = dsInterests.Tables[0].Rows[j]["PICTURE"].ToString();
+
+                            response.listInterests[j] = obj;
+
+                            
+                        }
+                    }
+
+
+                    DataSet dsGift = new DataSet();
+                    dsGift = usersDataAccess.USERS_GIFT_GET_BUY_TOTAL_USERS(uid, sid);
+                    if (dsGift != null & dsGift.Tables[0].Rows.Count > 0)
+                    {
+                        response.listGift = new usersGift[dsGift.Tables[0].Rows.Count];
+                        for (int j = 0; j < dsGift.Tables[0].Rows.Count; j++)
+                        {
+                            usersGift obj = new usersGift();
+                            obj.id = dsGift.Tables[0].Rows[j]["id"].ToString();
+                            obj.code = dsGift.Tables[0].Rows[j]["code"].ToString();
+                            obj.name = dsGift.Tables[0].Rows[j]["name"].ToString();
+                            obj.chargMoney = dsGift.Tables[0].Rows[j]["CHARGE_MONEY"].ToString();
+                            obj.chargeCode = dsGift.Tables[0].Rows[j]["CHARGE_CODE"].ToString();
+                            obj.coin = dsGift.Tables[0].Rows[j]["COIN"].ToString();
+                            obj.status = dsGift.Tables[0].Rows[j]["STATUS"].ToString();
+
+                            response.listGift[j] = obj;
+
+                            
+                        }
+                    }
+
+
+
+
+
+                    
+                    
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+               
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+        //{"users":"50912345678","serviceId":"30","proviceId":"1","fromAge":"1","toAge":"50","rowsOnPage":"2","seqPage":"1","language":"0","isLike":"1","type":"0"}
+        [HttpPost]
+        public IActionResult usersSeachProfile([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersObjProfileList response = new usersObjProfileList();
+
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string uid = Convert.ToString(userObj["users"]);
+                string sid = Convert.ToString(userObj["serviceId"]);
+                string prid = Convert.ToString(userObj["proviceId"]);
+                string fromAge = Convert.ToString(userObj["fromAge"]);
+                string toAge = Convert.ToString(userObj["toAge"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                string language = Convert.ToString(userObj["language"]);
+                string isLike = Convert.ToString(userObj["isLike"]);
+                string type = Convert.ToString(userObj["type"]);
+                string seek = Convert.ToString(userObj["seek"]);
+                if (string.IsNullOrEmpty(isLike)) isLike = "-1";
+                if (string.IsNullOrEmpty(seek)) seek = "-1";
+                if (string.IsNullOrEmpty(prid)) prid = "-1";
+                if (string.IsNullOrEmpty(fromAge)) fromAge = "-1";
+                if (string.IsNullOrEmpty(toAge)) toAge = "-1";
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "100000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+                if (string.IsNullOrEmpty(type) || type=="-1") type = "0";
+
+                //var userObj = JObject.Parse(sendData.ToString());
+                //string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                logger.Info("New request income usersSeachProfile :" + sendData.ToString());
+
+
+
+                //Check token
+                
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_SEARCHE_PROFILE(uid, sid, prid, fromAge, toAge, rowsOnPage, seqPage, isLike, type, seek);
+
+                logger.Info("Call database usersSeachProfile success:");
+
+
+
+
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listProfile = new usersObjProfile[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        usersObjProfile obj = new usersObjProfile();
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.users = ds_regist.Tables[0].Rows[j]["users"].ToString();
+                        obj.serviceid = ds_regist.Tables[0].Rows[j]["serviceid"].ToString();
+                        obj.fullName = ds_regist.Tables[0].Rows[j]["fullName"].ToString();
+                        obj.sex = ds_regist.Tables[0].Rows[j]["sex"].ToString();
+                        obj.address = ds_regist.Tables[0].Rows[j]["address"].ToString();
+                        obj.provinceId = ds_regist.Tables[0].Rows[j]["provinceId"].ToString();
+                        obj.cardNumber = ds_regist.Tables[0].Rows[j]["cardNumber"].ToString();
+                        obj.email = ds_regist.Tables[0].Rows[j]["email"].ToString();
+                        obj.company = ds_regist.Tables[0].Rows[j]["company"].ToString();
+                        obj.description = ds_regist.Tables[0].Rows[j]["description"].ToString();
+                        obj.picture = ds_regist.Tables[0].Rows[j]["picture"].ToString();
+                        obj.sexNeed = ds_regist.Tables[0].Rows[j]["sexNeed"].ToString();
+                        obj.birthday = ds_regist.Tables[0].Rows[j]["birthday"].ToString();
+                        obj.height = ds_regist.Tables[0].Rows[j]["height"].ToString();
+
+
+                        obj.weight = ds_regist.Tables[0].Rows[j]["weight"].ToString();
+                        obj.work = ds_regist.Tables[0].Rows[j]["work"].ToString();
+                        obj.isLike = ds_regist.Tables[0].Rows[j]["isLike"].ToString();
+                        obj.usersId = ds_regist.Tables[0].Rows[j]["USER_ID"].ToString();
+                        obj.totalPic = ds_regist.Tables[0].Rows[j]["PIC_TOTAL"].ToString();
+                        obj.totalLike = ds_regist.Tables[0].Rows[j]["TOTALLIKE"].ToString();
+                        obj.totalView = ds_regist.Tables[0].Rows[j]["TOTALVIEW"].ToString();
+
+                        obj.lookingFor = ds_regist.Tables[0].Rows[j]["LOOKING_FOR"].ToString();
+
+
+                        DataSet dsInterests = new DataSet();
+                        dsInterests = usersDataAccess.USERS_GET_INTERESTS_BY_USER(language, obj.users, obj.serviceid);
+                        if (dsInterests != null & dsInterests.Tables[0].Rows.Count > 0)
+                        {
+                            obj.listInterests = new usersInterests[dsInterests.Tables[0].Rows.Count];
+                            for (int k = 0; k < dsInterests.Tables[0].Rows.Count; k++)
+                            {
+                                usersInterests obj1 = new usersInterests();
+                                obj1.id = dsInterests.Tables[0].Rows[k]["id"].ToString();
+                                obj1.code = dsInterests.Tables[0].Rows[k]["code"].ToString();
+                                obj1.name = dsInterests.Tables[0].Rows[k]["name"].ToString();
+                                obj1.picture = dsInterests.Tables[0].Rows[k]["PICTURE"].ToString();
+
+                                obj.listInterests[k] = obj1;
+
+
+                            }
+                        }
+
+
+                        DataSet dsGift = new DataSet();
+                        dsGift = usersDataAccess.USERS_GIFT_GET_BUY_TOTAL_USERS(uid, sid);
+                        if (dsGift != null & dsGift.Tables[0].Rows.Count > 0)
+                        {
+                            obj.listGift = new usersGift[dsGift.Tables[0].Rows.Count];
+                            for (int n = 0; n < dsGift.Tables[0].Rows.Count; n++)
+                            {
+                                usersGift obj2 = new usersGift();
+                                obj2.id = dsGift.Tables[0].Rows[n]["id"].ToString();
+                                obj2.code = dsGift.Tables[0].Rows[n]["code"].ToString();
+                                obj2.name = dsGift.Tables[0].Rows[n]["name"].ToString();
+                                obj2.chargMoney = dsGift.Tables[0].Rows[n]["CHARGE_MONEY"].ToString();
+                                obj2.chargeCode = dsGift.Tables[0].Rows[n]["CHARGE_CODE"].ToString();
+                                obj2.coin = dsGift.Tables[0].Rows[n]["COIN"].ToString();
+                                obj2.status = dsGift.Tables[0].Rows[n]["STATUS"].ToString();
+
+                                obj.listGift[n] = obj2;
+
+
+                            }
+                        }
+                        
+
+                        response.listProfile[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+        // {"users":"50912345678","serviceId":"30","users_receved":"50912345671123"}
+        [HttpPost]
+        public IActionResult usersViewUpdate([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                string users_receved = Convert.ToString(userObj["users_receved"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                logger.Info("New request income usersViewUpdate :" + sendData.ToString());
+
+
+                //Check token
+                
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_VIEW_UPDATE(users, serviceId, users_receved);
+                logger.Info("Call database USERS_VIEW_UPDATE success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        //{"users":"50912345678","serviceId":"30","rowsOnPage":"2","seqPage":"1"}
+        [HttpPost]
+        public IActionResult usersChatGet_BK([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersChatList response = new usersChatList();
+
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string uid = Convert.ToString(userObj["users"]);
+                string sid = Convert.ToString(userObj["serviceId"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "100000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                logger.Info("New request income usersChatGetList :" + sendData.ToString());
+
+
+                //Check token
+                
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_CHAT_GET(uid, sid, rowsOnPage, seqPage);
+
+                logger.Info("Call database USERS_CHAT_GET success:");
+
+
+
+
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listUsersChat = new usersChat[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        usersChat obj = new usersChat();
+                        obj.seq = ds_regist.Tables[0].Rows[j]["SEQ"].ToString();
+                        obj.id = ds_regist.Tables[0].Rows[j]["CHAT_ID"].ToString();
+                        obj.title = ds_regist.Tables[0].Rows[j]["TITLE"].ToString();
+                        
+                        obj.createdDate = ds_regist.Tables[0].Rows[j]["vsysdate"].ToString();
+                        obj.lastUpdateDate = ds_regist.Tables[0].Rows[j]["LASTUPDATE"].ToString();
+                        obj.youId = ds_regist.Tables[0].Rows[j]["YOU_ID"].ToString();
+                        obj.youName = ds_regist.Tables[0].Rows[j]["YOU_NAME"].ToString();
+                        obj.youUsers = ds_regist.Tables[0].Rows[j]["YOU_USER"].ToString();
+                        obj.youPictrure = ds_regist.Tables[0].Rows[j]["YOU_PIC"].ToString();
+                        obj.frendId = ds_regist.Tables[0].Rows[j]["FREND_ID"].ToString();
+                        obj.frendName = ds_regist.Tables[0].Rows[j]["FREND_NAME"].ToString();
+                        obj.frendUsers = ds_regist.Tables[0].Rows[j]["FREND_USER"].ToString();
+                        obj.frendPicture = ds_regist.Tables[0].Rows[j]["FREND_PIC"].ToString();
+                        obj.totalNotCheck = ds_regist.Tables[0].Rows[j]["TOTAL_NOT_CHECK"].ToString();
+                        response.listUsersChat[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        //{"users":"50912345678","serviceId":"30","rowsOnPage":"2","seqPage":"1","keyword":"1123"}
+        [HttpPost]
+        public IActionResult usersChatGet([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersChatList response = new usersChatList();
+
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string uid = Convert.ToString(userObj["users"]);
+                string sid = Convert.ToString(userObj["serviceId"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                string keyword = Convert.ToString(userObj["keyword"]);
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "100000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+                if (string.IsNullOrEmpty(keyword)) keyword = "-1";
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                logger.Info("New request income usersChatGetList :" + sendData.ToString());
+
+
+                //Check token
+                
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_CHAT_GET(uid, sid, rowsOnPage, seqPage);
+
+                logger.Info("Call database USERS_CHAT_GET success:");
+
+
+
+
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listUsersChat = new usersChat[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        usersChat obj = new usersChat();
+                        obj.seq = ds_regist.Tables[0].Rows[j]["SEQ"].ToString();
+                        obj.id = ds_regist.Tables[0].Rows[j]["CHAT_ID"].ToString();
+                        obj.title = ds_regist.Tables[0].Rows[j]["TITLE"].ToString();
+
+                        obj.createdDate = ds_regist.Tables[0].Rows[j]["vsysdate"].ToString();
+                        obj.lastUpdateDate = ds_regist.Tables[0].Rows[j]["LASTUPDATE"].ToString();
+                        obj.youId = ds_regist.Tables[0].Rows[j]["YOU_ID"].ToString();
+                        obj.youName = ds_regist.Tables[0].Rows[j]["YOU_NAME"].ToString();
+                        obj.youUsers = ds_regist.Tables[0].Rows[j]["YOU_USER"].ToString();
+                        obj.youPictrure = ds_regist.Tables[0].Rows[j]["YOU_PIC"].ToString();
+                        obj.frendId = ds_regist.Tables[0].Rows[j]["FREND_ID"].ToString();
+                        obj.frendName = ds_regist.Tables[0].Rows[j]["FREND_NAME"].ToString();
+                        obj.frendUsers = ds_regist.Tables[0].Rows[j]["FREND_USER"].ToString();
+                        obj.frendPicture = ds_regist.Tables[0].Rows[j]["FREND_PIC"].ToString();
+                        obj.totalNotCheck = ds_regist.Tables[0].Rows[j]["TOTAL_NOT_CHECK"].ToString();
+                        response.listUsersChat[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+        //{"chatId":"1","rowsOnPage":"2","seqPage":"1"}
+        [HttpPost]
+        public IActionResult usersChatDetailGet([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersChatDetailList response = new usersChatDetailList();
+
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string chatId = Convert.ToString(userObj["chatId"]);
+                string uid = Convert.ToString(userObj["users"]);
+                string sid = Convert.ToString(userObj["serviceId"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "100000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                logger.Info("New request income usersChatDetailGet :" + sendData.ToString());
+
+
+
+                //Check token
+                
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_CHAT_DETAIL_GET(chatId, rowsOnPage, seqPage, uid, sid);
+
+                logger.Info("Call database USERS_CHAT_DETAIL_GET success:");
+
+                
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listUsersChatDetail = new usersChatDetail[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        usersChatDetail obj = new usersChatDetail();
+                        obj.seq = ds_regist.Tables[0].Rows[j]["SEQ"].ToString();
+                        obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        obj.message = ds_regist.Tables[0].Rows[j]["MESSAGE"].ToString();
+                        obj.chatId = ds_regist.Tables[0].Rows[j]["CHAT_ID"].ToString();
+                        obj.isCheck = ds_regist.Tables[0].Rows[j]["IS_CHECK"].ToString();
+                        obj.createdDate = ds_regist.Tables[0].Rows[j]["vsysdate"].ToString();
+                        obj.userIdSend = ds_regist.Tables[0].Rows[j]["USER_ID_SEND"].ToString();
+                        obj.fullNamSend = ds_regist.Tables[0].Rows[j]["USER_NAME_SEND"].ToString();
+                        obj.userIdReceived = ds_regist.Tables[0].Rows[j]["USER_ID_RECEIVED"].ToString();
+                        obj.fullNamReceived = ds_regist.Tables[0].Rows[j]["USER_NAME_RECEIVED"].ToString();
+                       
+                        response.listUsersChatDetail[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+        //{"users":"50912345678","serviceId":"30","users_receved":"509123456789","message":"Nam","title":"than gui ban","chatId":"123"}
+        [HttpPost]
+        public IActionResult usersChatSend([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersChatSend response = new usersChatSend();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string users_receved = Convert.ToString(userObj["users_receved"]);
+                string message = Convert.ToString(userObj["message"]);
+                string title = Convert.ToString(userObj["title"]);
+                string chatId = Convert.ToString(userObj["chatId"]);
+                if (string.IsNullOrEmpty(chatId)) chatId = "-1";
+
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                logger.Info("New request income usersChatSend :" + sendData.ToString());
+
+                //Check token
+                
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_CHAT_SEND_MSG(users, serviceid, users_receved, message, title,chatId);
+                logger.Info("Call database USERS_CHAT_SEND_MSG success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                    response.chatId = ds_regist.Tables[0].Rows[0]["CHAT_ID"].ToString();
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+        //{"chatDetailId":"2"}
+        [HttpPost]
+        public IActionResult usersChatDetailUpCheck([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string chatDetailId = Convert.ToString(userObj["chatDetailId"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+                logger.Info("New request income usersChatDetailUpCheck :" + sendData.ToString());
+
+                //Check token
+                
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_CHAT_DETAIL_CHECK(chatDetailId);
+                logger.Info("Call database USERS_CHAT_DETAIL_CHECK success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                    
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        //{"chatId":"2"}
+        [HttpPost]
+        public IActionResult usersChatDelete([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string chatId = Convert.ToString(userObj["chatId"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+                logger.Info("New request income usersChatDelete :" + sendData.ToString());
+
+
+
+                //Check token
+                
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_CHAT_DEL(chatId);
+                logger.Info("Call database USERS_CHAT_DEL success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        //{"chatDetailId":"2"}
+        [HttpPost]
+        public IActionResult usersChatDetailDelete([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string chatDetailId = Convert.ToString(userObj["chatDetailId"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                logger.Info("New request income usersChatDetailDelete :" + sendData.ToString());
+
+
+
+                //Check token
+                
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_CHAT_DETAIL_DEL(chatDetailId);
+                logger.Info("Call database USERS_CHAT_DETAIL_DEL success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+                }
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+        //{"users":"50912345678","serviceId":"30","users_receved":"509123456789","message":"Nam","title":"than gui ban"}
+        [HttpPost]
+        public IActionResult usersMesageSend([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string users_receved = Convert.ToString(userObj["users_receved"]);
+                string messageLocal = Convert.ToString(userObj["messageLocal"]);
+                string messageGlobal = Convert.ToString(userObj["messageGlobal"]);
+                string titleLocal = Convert.ToString(userObj["titleLocal"]);
+                string titleGlobal = Convert.ToString(userObj["titleGlobal"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                logger.Info("New request income usersMesageSend :" + sendData.ToString());
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_MSG_SEND(users, serviceid, users_receved, messageLocal, titleLocal, messageGlobal, titleGlobal);
+                logger.Info("Call database USERS_MSG_SEND success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        //{"messageId":"8"}
+        [HttpPost]
+        public IActionResult usersMesageCheck([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string messageId = Convert.ToString(userObj["messageId"]);
+
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                logger.Info("New request income usersMesageCheck :" + sendData.ToString());
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_MSG_CHECK(messageId);
+                logger.Info("Call database USERS_MSG_CHECK success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+        //{"messageId":"8","users":"50912345678","serviceId":"30","isSend":"1","top":"10"}
+        [HttpPost]
+        public IActionResult usersMesageGet([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersMsgList response = new usersMsgList();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string messageId = Convert.ToString(userObj["messageId"]);
+                string isSend = Convert.ToString(userObj["isSend"]);
+
+                string langegua = Convert.ToString(userObj["langegua"]);
+                string fromDate = Convert.ToString(userObj["fromDate"]);
+                string toDate = Convert.ToString(userObj["toDate"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(serviceid)) serviceid = "-1";
+                if (string.IsNullOrEmpty(messageId)) messageId = "-1";
+                if (string.IsNullOrEmpty(isSend)) isSend = "1";
+                if (string.IsNullOrEmpty(langegua)) langegua = "0";
+                if (string.IsNullOrEmpty(fromDate)) fromDate = "-1";
+                if(string.IsNullOrEmpty(toDate)) toDate = "-1";
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "1000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+
+
+                logger.Info("New request income usersMesageSend :" + sendData.ToString());
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_MSG_GET(users, serviceid, isSend, messageId, language, fromDate, toDate, rowsOnPage, seqPage);
+                logger.Info("Call database USERS_MSG_SEND success:");
+                
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listMesage = new usersMsgObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        usersMsgObj obj = new usersMsgObj();
+
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.usersFrom = ds_regist.Tables[0].Rows[j]["usersFrom"].ToString();
+                        obj.userFromId = ds_regist.Tables[0].Rows[j]["userFromId"].ToString();
+                        obj.usersFromName = ds_regist.Tables[0].Rows[j]["usersFromName"].ToString();
+                        obj.usersTo = ds_regist.Tables[0].Rows[j]["usersTo"].ToString();
+                        obj.usersToId = ds_regist.Tables[0].Rows[j]["usersToId"].ToString();
+                        obj.usersToName = ds_regist.Tables[0].Rows[j]["usersToName"].ToString();
+                        obj.serviceId = ds_regist.Tables[0].Rows[j]["serviceId"].ToString();
+                        obj.message = ds_regist.Tables[0].Rows[j]["message"].ToString();
+                        obj.dateSend = ds_regist.Tables[0].Rows[j]["dateSend"].ToString();
+                        obj.isCheck = ds_regist.Tables[0].Rows[j]["isCheck"].ToString();
+                       
+
+
+                        response.listMesage[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                response.message = "Err unknow";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        // {"users":"50912345678","serviceId":"30","url":"quangbh/abc.jpg","note":"1"}
+        [HttpPost]
+        public IActionResult usersPicUpload([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                string url = Convert.ToString(userObj["url"]);
+                string note = Convert.ToString(userObj["note"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                logger.Info("New request income usersPicUpload :" + sendData.ToString());
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_PIC_ADD(users,serviceId, url, note);
+                logger.Info("Call database USERS_PIC_ADD success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+        // {"users":"50912345678","serviceId":"30","usersLike":"509123456789","isLike":"1"}
+        [HttpPost]
+        public IActionResult usersLikeUpdate([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                string usersLike = Convert.ToString(userObj["usersLike"]);
+                string isLike = Convert.ToString(userObj["isLike"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                logger.Info("New request income usersLikeUpdate :" + sendData.ToString());
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_LIKE_UPDATE(users, serviceId, usersLike, isLike);
+                logger.Info("Call database USERS_LIKE_UPDATE success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+        //{"users":"50912345678","serviceId":"30","type":"1","rowsOnPage":"2","seqPage":"1","language":"0"}
+        // "type":"0" : danh sach nguoi dung da like cho users và serviceId truyen vao
+        // "type":"0" : danh sach nguoi dung ma users va serviceId truyen vao da like
+        [HttpPost]
+        public IActionResult usersGetListLike([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersObjProfileList response = new usersObjProfileList();
+
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string uid = Convert.ToString(userObj["users"]);
+                string sid = Convert.ToString(userObj["serviceId"]);
+                string type = Convert.ToString(userObj["type"]);
+                
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "100000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+                if (string.IsNullOrEmpty(language)) language = "-1";
+                logger.Info("New request income usersGetListLike :" + sendData.ToString());
+
+
+                //Check token
+                
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_GET_LIKE_PROFILE(uid, sid, type, rowsOnPage, seqPage);
+
+                logger.Info("Call database usersSeachProfile success:");
+
+
+
+
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listProfile = new usersObjProfile[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        usersObjProfile obj = new usersObjProfile();
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.users = ds_regist.Tables[0].Rows[j]["users"].ToString();
+                        obj.serviceid = ds_regist.Tables[0].Rows[j]["serviceid"].ToString();
+                        obj.fullName = ds_regist.Tables[0].Rows[j]["fullName"].ToString();
+                        obj.sex = ds_regist.Tables[0].Rows[j]["sex"].ToString();
+                        obj.address = ds_regist.Tables[0].Rows[j]["address"].ToString();
+                        obj.provinceId = ds_regist.Tables[0].Rows[j]["provinceId"].ToString();
+                        obj.cardNumber = ds_regist.Tables[0].Rows[j]["cardNumber"].ToString();
+                        obj.email = ds_regist.Tables[0].Rows[j]["email"].ToString();
+                        obj.company = ds_regist.Tables[0].Rows[j]["company"].ToString();
+                        obj.description = ds_regist.Tables[0].Rows[j]["description"].ToString();
+                        obj.picture = ds_regist.Tables[0].Rows[j]["picture"].ToString();
+                        obj.sexNeed = ds_regist.Tables[0].Rows[j]["sexNeed"].ToString();
+                        obj.birthday = ds_regist.Tables[0].Rows[j]["birthday"].ToString();
+                        obj.height = ds_regist.Tables[0].Rows[j]["height"].ToString();
+
+
+                        obj.weight = ds_regist.Tables[0].Rows[j]["weight"].ToString();
+                        obj.work = ds_regist.Tables[0].Rows[j]["work"].ToString();
+                        obj.isLike = ds_regist.Tables[0].Rows[j]["isLike"].ToString();
+                        obj.usersId = ds_regist.Tables[0].Rows[j]["USER_ID"].ToString();
+                        obj.totalPic = ds_regist.Tables[0].Rows[j]["PIC_TOTAL"].ToString();
+                        obj.lookingFor = ds_regist.Tables[0].Rows[j]["LOOKING_FOR"].ToString();
+
+
+                        DataSet dsInterests = new DataSet();
+                        dsInterests = usersDataAccess.USERS_GET_INTERESTS_BY_USER(language, uid, sid);
+                        if (dsInterests != null & dsInterests.Tables[0].Rows.Count > 0)
+                        {
+                            obj.listInterests = new usersInterests[dsInterests.Tables[0].Rows.Count];
+                            for (int k = 0; k < dsInterests.Tables[0].Rows.Count; k++)
+                            {
+                                usersInterests obj1 = new usersInterests();
+                                obj1.id = dsInterests.Tables[0].Rows[k]["id"].ToString();
+                                obj1.code = dsInterests.Tables[0].Rows[k]["code"].ToString();
+                                obj1.name = dsInterests.Tables[0].Rows[k]["name"].ToString();
+                                obj1.picture = dsInterests.Tables[0].Rows[k]["PICTURE"].ToString();
+
+                                obj.listInterests[k] = obj1;
+
+
+                            }
+                        }
+
+
+                        response.listProfile[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+           // {"picId":"123"}
+
+            [HttpPost]
+        public IActionResult usersPicDel([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string picId = Convert.ToString(userObj["picId"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                logger.Info("New request income usersPicDel :" + sendData.ToString());
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_PIC_DEL(picId);
+                logger.Info("Call database USERS_LIKE_UPDATE success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+        //{"picId":"4","users":"50912345678","serviceId":"30","top":"10"}
+        [HttpPost]
+        public IActionResult usersPicGet([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersPicList response = new usersPicList();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string picId = Convert.ToString(userObj["picId"]);
+                string users = Convert.ToString(userObj["users"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                string top = Convert.ToString(userObj["top"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                if (string.IsNullOrEmpty(picId)) picId = "-1";
+
+                logger.Info("New request income usersPicGet :" + sendData.ToString());
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_PIC_GET(picId, users,serviceId, top);
+                logger.Info("Call database USERS_PIC_GET success:");
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.listPic = new usersPic[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        usersPic obj = new usersPic();
+
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.usersId = ds_regist.Tables[0].Rows[j]["USER_ID"].ToString();
+                        obj.url = ds_regist.Tables[0].Rows[j]["URL"].ToString();
+                        obj.createdDate = ds_regist.Tables[0].Rows[j]["vsysdate"].ToString();
+                        obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+                        
+                        response.listPic[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                response.message = "Err unknow";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+        // {"users":"50912345678","serviceId":"30","language":"1"}
+        [HttpPost]
+        public IActionResult usersSetLanguage([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                string language = Convert.ToString(userObj["language"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                //string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+
+                logger.Info("New request income usersSetLanguage :" + sendData.ToString());
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_UPDATE_LANGUAGE(users, serviceId, language);
+                logger.Info("Call database USERS_UPDATE_LANGUAGE success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+        //{"type":"1"}
+        [HttpPost]
+        public IActionResult usersGetListService([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            subServiceList response = new subServiceList();
+            response.status = "-1";
+            response.message = "Err unknow";
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string type = Convert.ToString(userObj["type"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+
+                logger.Info("New request income subGetListsubServiceCode :" + sendData.ToString());
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                redisConnection _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                if (!_redis.connet())
+                {
+                    logger.Info("Connect to redis false");
+                    response.status = "-2";
+                    response.message = "System Update";
+                    return Ok(response);
+                }
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+                DataSet ds_regist = subDataAccess.SUB_API_GET_SUBSEVICE(type);
+                logger.Info("Call database SUB_API_GET_SUBSEVICE success:");
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+
+
+                    response.listSubService = new subServiceObj[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        subServiceObj obj = new subServiceObj();
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+                        obj.country = ds_regist.Tables[0].Rows[j]["COUNTRY_CODE"].ToString();
+                        obj.shortCode = ds_regist.Tables[0].Rows[j]["SHORT_CODE"].ToString();
+
+
+                        response.listSubService[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+
+
+
+
+
+
+
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+        //{"language":"0","serviceId":"1"}
+
+        public IActionResult usersGetProvice([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersProviceList response = new usersProviceList();
+
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                //string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                logger.Info("New request income usersGetProvice :" + sendData.ToString());
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_GET_PROVICE(language,serviceId);
+                logger.Info("Call database usersGetProvice success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.listProvice = new usersProvice[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        usersProvice obj = new usersProvice();
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+
+
+                        response.listProvice[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        //{"language":"0","serviceId":"1"}
+
+        public IActionResult usersGetTopic([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersTopicList response = new usersTopicList();
+
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                //string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                logger.Info("New request income usersGetTopic :" + sendData.ToString());
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_GET_TOPIC(language, serviceId);
+                logger.Info("Call database usersGetProvice success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.listTopic = new usersTopic[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        usersTopic obj = new usersTopic();
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+
+
+                        response.listTopic[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        //{"language":"0"}
+
+        public IActionResult usersGiftGetList([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersGiftList response = new usersGiftList();
+
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+                string id = Convert.ToString(userObj["id"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                if (string.IsNullOrEmpty(id)) id = "-1";
+                if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+                //var userObj = JObject.Parse(sendData.ToString());
+                //string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                logger.Info("New request income usersGetGift :" + sendData.ToString());
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_GIFT_GET(language, id,serviceId);
+                logger.Info("Call database USERS_GET_GIFT success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.listGift = new usersGift[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        usersGift obj = new usersGift();
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+                        obj.chargMoney = ds_regist.Tables[0].Rows[j]["CHARGE_MONEY"].ToString();
+                        obj.chargeCode = ds_regist.Tables[0].Rows[j]["CHARGE_CODE"].ToString();
+                        obj.coin = ds_regist.Tables[0].Rows[j]["COIN"].ToString();
+                        obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+
+
+                        response.listGift[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        /*
+        public IActionResult usersGiftSendNotOtp([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+            logger.Info("New request income usersGiftSendNotOtp :" + sendData.ToString());
+            string mps_ip = ConfigurationSettings.AppSettings["MPS_IP"];
+            string mps_port = ConfigurationSettings.AppSettings["MPS_PORT"];
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string users_receved = Convert.ToString(userObj["users_receved"]);
+                string giftId = Convert.ToString(userObj["giftId"]);
+                if (string.IsNullOrEmpty(giftId)) giftId = "-1";
+                DataSet ds_Gift = usersDataAccess.USERS_GIFT_GET("0", giftId);
+                if (ds_Gift == null || ds_Gift.Tables[0].Rows.Count > 0)
+                {
+                    response.status = "-10";
+                    response.message = "Invalid Gift";
+                    return Ok(response);
+
+                }
+                else
+                {
+
+                    logger.Info("Start call charg money");
+                    string subServiceCode = ds_Gift.Tables[0].Rows[0]["CHARGE_CODE"].ToString();
+                    string data = "requestId=" + "&msisdn=" + users + "&otp=" + "&serviceid=" + serviceid + "&subServiceCode=" + subServiceCode;
+                    logger.Info("Request call charge: " + data);
+                    string response111 = Common.SocketUnSyn(data, mps_ip, Convert.ToInt32(mps_port), 12000);
+                    logger.Info("Result call charge: " + response111);
+                    mpsResponse resCallMps = JsonConvert.DeserializeObject<mpsResponse>(response111);
+                    if (resCallMps.responseCode=="0")
+                    {
+                        logger.Info("charge money success :" );
+                        DataSet ds_regist = usersDataAccess.USERS_GIFT_SEND(users, serviceid, users_receved, giftId);
+                        logger.Info("Call database USERS_GIFT_SEND success:");
+                        if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                        {
+                            response.status = "0";
+                            response.message = "Success";
+                            return Ok(response);
+
+                        }
+                    }
+                    else if (resCallMps.responseCode == "401")
+                    {
+                        response.status = "-11";
+                        response.message = "Not enough money ";
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        response.status = "-12";
+                        response.message = "System err";
+                        return Ok(response);
+                    }
+
+                    
+                }
+                
+                
+
+
+            }
+            catch (Exception ex)
+            {
+               
+                logger.Info("Err:" + ex.ToString());
+            }
+            
+            return Ok(response);
+        }
+
+
+
+
+        public IActionResult usersGiftSendOtp([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            mpsResponseEx response = new mpsResponseEx();
+            response.status = "-1";
+            response.message = "Err unknow";
+            logger.Info("New request income usersGiftSendNotOtp :" + sendData.ToString());
+            string mps_ip = ConfigurationSettings.AppSettings["MPS_IP"];
+            string mps_port = ConfigurationSettings.AppSettings["MPS_PORT"];
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string users_receved = Convert.ToString(userObj["users_receved"]);
+                string giftId = Convert.ToString(userObj["giftId"]);
+                
+
+                if (string.IsNullOrEmpty(giftId)) giftId = "-1";
+                DataSet ds_Gift = usersDataAccess.USERS_GIFT_GET("0", giftId);
+                if (ds_Gift == null || ds_Gift.Tables[0].Rows.Count > 0)
+                {
+                    response.status = "-10";
+                    response.message = "Invalid Gift";
+                    return Ok(response);
+
+                }
+                else
+                {
+
+                    logger.Info("Start call charg money");
+                    string subServiceCode = ds_Gift.Tables[0].Rows[0]["CHARGE_CODE"].ToString();
+                    string data = "requestId=" + "&msisdn=" + users + "&otp=" + "&serviceid=" + serviceid + "&subServiceCode=" + subServiceCode;
+                    logger.Info("Request call charge: " + data);
+                    string response111 = Common.SocketUnSyn(data, mps_ip, Convert.ToInt32(mps_port), 12000);
+                    logger.Info("Result call charge: " + response111);
+                    mpsResponse resCallMps = JsonConvert.DeserializeObject<mpsResponse>(response111);
+                    if (resCallMps.responseCode == "0")
+                    {
+                        logger.Info("charge money success :");
+                        DataSet ds_regist = usersDataAccess.USERS_GIFT_SEND(users, serviceid, users_receved, giftId);
+                        logger.Info("Call database USERS_GIFT_SEND success:");
+                        if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                        {
+                            response.status = "0";
+                            response.message = "Success";
+                            response.message = resCallMps.requestID;
+                            return Ok(response);
+
+                        }
+                    }
+                    else if (resCallMps.responseCode == "401")
+                    {
+                        response.status = "-11";
+                        response.message = "Not enough money ";
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        response.status = "-12";
+                        response.message = "System err";
+                        return Ok(response);
+                    }
+
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+
+            return Ok(response);
+        }
+        */
+
+
+        //{"users":"50940240716","serviceId":"30","users_receved":"50912345678","giftId":"1","giftType":"1","requestId":"-1","otp":"-1"}
+        //giftType=1 charge va tang qua, giftType=2 la move qua cua user login sang cho users_receved;
+        public IActionResult usersGiftSend([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            mpsResponseEx response = new mpsResponseEx();
+            response.status = "-1";
+            response.message = "Err unknow";
+            logger.Info("New request income usersGiftSendNotOtp :" + sendData.ToString());
+            string mps_ip = "127.0.0.1";
+            string mps_port = "0000";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+                string users = Convert.ToString(userObj["users"]);
+                string serviceid = Convert.ToString(userObj["serviceId"]);
+                string users_receved = Convert.ToString(userObj["users_receved"]);
+                string giftId = Convert.ToString(userObj["giftId"]);
+                string giftType = Convert.ToString(userObj["giftType"]);
+                string requestId = Convert.ToString(userObj["requestId"]);
+                string otp = Convert.ToString(userObj["otp"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                if (string.IsNullOrEmpty(giftId)) giftId = "-1";
+                if (string.IsNullOrEmpty(giftType)) giftType = "-1";
+
+                if (string.IsNullOrEmpty(requestId)) requestId = "-1";
+                if (string.IsNullOrEmpty(otp)) otp = "-1";
+
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+                if (giftId=="-1" || giftType=="-1")
+                {
+                    response.status = "-11";
+                    response.message = "GiftID or giftType param invalid";
+                    return Ok(response);
+                }
+
+                DataSet ds_mps_info = DataAccess.MPS_GET_BY_ID(serviceid);
+                mps_ip = ds_mps_info.Tables[0].Rows[0]["MPS_IP"].ToString();
+                mps_port = ds_mps_info.Tables[0].Rows[0]["MPS_PORT"].ToString();
+
+                DataSet ds_subServiceCodeofGift = usersDataAccess.USERS_GIFT_GET_SUBSERVICECODE(users, serviceid, users_receved, giftId, giftType);
+                if (ds_subServiceCodeofGift == null || ds_subServiceCodeofGift.Tables[0].Rows.Count == 0)
+                {
+                    response.status = "-11";
+                    response.message = "Invalid Gift(No gift found)";
+                    return Ok(response);
+
+                }
+                else
+                {
+                    string status = ds_subServiceCodeofGift.Tables[0].Rows[0]["STATUS"].ToString();
+                    logger.Info("Status when find subsserviceCode is: status" + status);
+                    if(status=="0")
+                    {
+                        logger.Info("Send gift from acount coint success");
+                        response.status = "0";
+                        response.message = "Send gift from coin acount success";
+                        return Ok(response);
+                    }
+                    else if(status=="1")
+                    {
+                        logger.Info("Khong ton tai gift trong acount cua coin");
+                        response.status = "-11";
+                        response.message = "Invalid Gift(No gift found in acount coin)";
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        logger.Info("Start call charg money");
+                        string subServiceCode = ds_subServiceCodeofGift.Tables[0].Rows[0]["CHARGE_CODE"].ToString();
+                        string data = "requestId=" + requestId + "&msisdn=" + users + "&otp=" + otp + "&serviceid=" + serviceid + "&subServiceCode=" + subServiceCode;
+                        logger.Info("Request call charge: " + data);
+                        string response111 = Common.SocketUnSyn(data, mps_ip, Convert.ToInt32(mps_port), 12000);
+                        logger.Info("Result call charge: " + response111);
+                        mpsResponse resCallMps = JsonConvert.DeserializeObject<mpsResponse>(response111);
+                        if (resCallMps.responseCode == "0")
+                        {
+                            logger.Info("charge money success :");
+                            DataSet ds_regist = usersDataAccess.USERS_GIFT_SEND(users, serviceid, users_receved, giftId);
+                            logger.Info("Call database USERS_GIFT_SEND success:");
+                            if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                            {
+                                response.status = "0";
+                                response.message = "Success";
+                                response.requestId = resCallMps.requestID;
+
+                                return Ok(response);
+
+                            }
+                        }
+                        else if (resCallMps.responseCode == "100")
+                        {
+                            response.status = "100";
+                            response.message = "Send OTP success to user, pls send this function with OTP & requestID agian for finsh";
+                            response.requestId = resCallMps.requestID;
+                            return Ok(response);
+                        }
+                        else if (resCallMps.responseCode == "401")
+                        {
+                            response.status = "-12";
+                            response.message = "Not enough money ";
+                            return Ok(response);
+                        }
+                        else if (resCallMps.responseCode == "415")
+                        {
+                            response.status = "-13";
+                            response.message = "Invalid OTP code";
+                            return Ok(response);
+                        }
+                        else if (resCallMps.responseCode == "416")
+                        {
+                            response.status = "-14";
+                            response.message = "Incorrect OTP code/ OTP code expired";
+                            return Ok(response);
+                        }
+                        else if (resCallMps.responseCode == "417")
+                        {
+                            response.status = "-15";
+                            response.message = "Confirm OTP via USSD time out";
+                            return Ok(response);
+                        }
+                        else
+                        {
+                            response.status = "-10";
+                            response.message = "System err";
+                            return Ok(response);
+                        }
+                    }
+                    
+                    
+
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+                logger.Info("Err:" + ex.ToString());
+            }
+
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+        
+
+
+        //{"users":"50912345678","serviceId":"30","rowsOnPage":"2","seqPage":"1","type":"0"}
+        //type: 0= user send,1= user receved (defualt)
+        [HttpPost]
+        public IActionResult usersGiftGetByUsers([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersGiftSendList response = new usersGiftSendList();
+
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+               
+                string uid = Convert.ToString(userObj["users"]);
+                string sid = Convert.ToString(userObj["serviceId"]);
+                string type = Convert.ToString(userObj["type"]);
+                string rowsOnPage = Convert.ToString(userObj["rowsOnPage"]);
+                string seqPage = Convert.ToString(userObj["seqPage"]);
+                if (string.IsNullOrEmpty(rowsOnPage)) rowsOnPage = "100000000";
+                if (string.IsNullOrEmpty(seqPage)) seqPage = "1";
+                if (string.IsNullOrEmpty(type)) type = "1";
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                logger.Info("New request income usersGiftGetByUsers :" + sendData.ToString());
+
+
+
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_GIFT_GET_BUY_USERS( uid, sid, rowsOnPage, seqPage, type);
+
+                logger.Info("Call database USERS_GIFT_GET_BUY_USERS success:");
+
+
+
+
+
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    response.seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    response.totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+                    response.listGiftSend = new usersGiftSend[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        usersGiftSend obj = new usersGiftSend();
+                        obj.seq = ds_regist.Tables[0].Rows[j]["SEQ"].ToString();
+                        obj.giftSendId = ds_regist.Tables[0].Rows[j]["giftSendId"].ToString();
+                        obj.usersSendId = ds_regist.Tables[0].Rows[j]["usersSendId"].ToString();
+
+                        obj.usersSendName = ds_regist.Tables[0].Rows[j]["usersSendName"].ToString();
+                        obj.usersRecevedId = ds_regist.Tables[0].Rows[j]["usersRecevedId"].ToString();
+                        obj.usersRecevedName = ds_regist.Tables[0].Rows[j]["usersRecevedName"].ToString();
+                        obj.dateSend = ds_regist.Tables[0].Rows[j]["dateSend"].ToString();
+                        obj.giftId = ds_regist.Tables[0].Rows[j]["giftId"].ToString();
+                        obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+                        obj.chargMoney = ds_regist.Tables[0].Rows[j]["chargMoney"].ToString();
+                        obj.chargeCode = ds_regist.Tables[0].Rows[j]["chargeCode"].ToString();
+                        obj.coin = ds_regist.Tables[0].Rows[j]["coin"].ToString();
+                        obj.status = ds_regist.Tables[0].Rows[j]["status"].ToString();
+                        
+
+                        response.listGiftSend[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+        //{"language":"0"}
+
+        public IActionResult usersGetInterests([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersInterestsList response = new usersInterestsList();
+
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                //string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                logger.Info("New request income usersGetInterests :" + sendData.ToString());
+
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_GET_INTERESTS(language);
+                logger.Info("Call database USERS_GET_INTERESTS success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.listInterests = new usersInterests[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        usersInterests obj = new usersInterests();
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+                        obj.picture = ds_regist.Tables[0].Rows[j]["PICTURE"].ToString();
+
+                        response.listInterests[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        //{"users":"50912345678","serviceId":"30","language":"0"}
+        public IActionResult usersGetInterestsByUser([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            usersInterestsList response = new usersInterestsList();
+
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                string users = Convert.ToString(userObj["users"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                //string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                logger.Info("New request income usersGetInterests :" + sendData.ToString());
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_GET_INTERESTS_BY_USER(language, users,serviceId);
+                logger.Info("Call database USERS_GET_INTERESTS success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = "0";
+                    response.message = "Success";
+                    response.listInterests = new usersInterests[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        usersInterests obj = new usersInterests();
+                        obj.id = ds_regist.Tables[0].Rows[j]["id"].ToString();
+                        obj.code = ds_regist.Tables[0].Rows[j]["code"].ToString();
+                        obj.name = ds_regist.Tables[0].Rows[j]["name"].ToString();
+                        obj.picture = ds_regist.Tables[0].Rows[j]["PICTURE"].ToString();
+
+                        response.listInterests[j] = obj;
+                    }
+
+                }
+                else
+                {
+                    response.status = "1";
+                    response.message = "No data";
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        //{"users":"50912345678","serviceId":"30","listInterests":"1$2"}
+        public IActionResult usersInterestsUpdate([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+                var userObj = JObject.Parse(sendData.ToString());
+                string listInterests = Convert.ToString(userObj["listInterests"]);
+                string users = Convert.ToString(userObj["users"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+
+                logger.Info("New request income usersInterestsUpdate :" + sendData.ToString());
+
+
+                //Check token
+                //var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+
+
+
+
+                DataSet ds_regist = usersDataAccess.USERS_INTERESTS_UPDATE(users, serviceId, listInterests);
+                logger.Info("Call database USERS_INTERESTS_UPDATE success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        
+
+        // {"userId":"123","coin":"23","type":"1","tranCode":"ADD"}
+        [HttpPost]
+        public IActionResult usersUpdateCoin([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+            response.status = "-1";
+            response.message = "Err unknow";
+
+            try
+            {
+                usersObjCoin data = JsonConvert.DeserializeObject<usersObjCoin>(sendData.ToString());
+                logger.Info("New request income usersUpdateCoin :" + data.ToString());
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+                DataSet ds_regist = usersDataAccess.USERS_UPDATE_COIN(data.userId, data.coin, data.type, data.tranCode);
+                logger.Info("Call database USERS_UPDATE_COIN success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+        //{"users":"50940227941","serviceId":"30","money":"10"}
+        [HttpPost]
+        public IActionResult ChangeCoinToMoney([FromBody] dynamic sendData)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+            responseObjUtil response = new responseObjUtil();
+
+            try
+            {
+                usersObjChangeCoinRequest data = JsonConvert.DeserializeObject<usersObjChangeCoinRequest>(sendData.ToString());
+                logger.Info("New request income ChangeCoinToMoney :" + data.ToString());
+
+
+
+                //Check token
+                var userObj = JObject.Parse(sendData.ToString());
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                //var userObj = JObject.Parse(sendData.ToString());
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "0";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.status = "-2";
+                        response.message = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+                if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+                {
+                    logger.Info("Authen token false");
+                    response.status = "35";
+                    response.message = "Check Authen false";
+                    return Ok(response);
+                }
+                //Ket thuc check token
+
+
+
+                DataSet ds_regist = usersDataAccess.ChangeCoinToMoney(data.userId, data.serviceid, data.money);
+                logger.Info("Call database ChangeCoinToMoney success:");
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+                    response.status = ds_regist.Tables[0].Rows[0]["status"].ToString();
+                    response.message = ds_regist.Tables[0].Rows[0]["message"].ToString();
+
+
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                response.status = "-1";
+                response.message = "Unknow";
+                logger.Info("Err:" + ex.ToString());
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+
+
+        //[HttpPost]
+        //public IActionResult blacklistInsertData([FromBody] dynamic sendData)
+        //{
+        //    //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+        //    string _keyConfig = string.Empty;
+        //    _keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+
+
+
+
+
+        //    responseObjUtil response = new responseObjUtil();
+        //    response.status = "-1";
+        //    response.message = "Err unknow";
+
+
+        //    logger.Info("Request from UI : " + sendData.ToString());
+        //    var obj = JObject.Parse(sendData.ToString());
+
+
+        //    //Check token
+        //    var userObj = JObject.Parse(sendData.ToString());
+        //    string token = Convert.ToString(userObj["token"]);
+        //    string channel = Convert.ToString(userObj["channel"]);
+        //    //var userObj = JObject.Parse(sendData.ToString());
+        //    string language = Convert.ToString(userObj["language"]);
+        //    if (string.IsNullOrEmpty(language)) language = "0";
+
+        //    string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+        //    string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+        //    string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+        //    //---------------------Lay ra va luu mot redis tu cache-----------------------------
+        //    redisConnection _redis;
+        //    memoryCache.TryGetValue("redis", out _redis);
+        //    if (_redis == null)
+        //    {
+        //        var cacheExpiryOptions = new MemoryCacheEntryOptions
+        //        {
+        //            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+        //            Priority = CacheItemPriority.High,
+        //            SlidingExpiration = TimeSpan.FromMinutes(2),
+        //            Size = 1024,
+        //        };
+        //        _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+        //        _redis.connet();
+        //        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+        //    }
+        //    if (!_redis.isConnet())
+        //    {
+        //        if (!_redis.connet())
+        //        {
+        //            logger.Info("Connect to redis false");
+        //            response.status = "-2";
+        //            response.message = "System Update";
+        //            logger.Info("confirmTicket response : " + response.ToString());
+        //            return Ok(response);
+        //        }
+        //        else
+        //        {
+        //            var cacheExpiryOptions = new MemoryCacheEntryOptions
+        //            {
+        //                AbsoluteExpiration = DateTime.Now.AddMonths(12),
+        //                Priority = CacheItemPriority.High,
+        //                SlidingExpiration = TimeSpan.FromMinutes(2),
+        //                Size = 1024,
+        //            };
+        //            memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+        //        }
+        //    }
+        //    //----------------------Ket thuc lay redis tu cache -------------------------------------
+        //    if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+        //    {
+        //        logger.Info("Authen token false");
+        //        response.status = "35";
+        //        response.message = "Check Authen false";
+        //        return Ok(response);
+        //    }
+        //    //Ket thuc check token
+
+
+
+
+
+        //    blackObjList _data = JsonConvert.DeserializeObject<blackObjList>(sendData.ToString());
+
+        //    string user = Convert.ToString(obj["userName"]);
+        //    if (string.IsNullOrEmpty(user)) user = "-1";
+
+
+        //    try
+        //    {
+        //        //Check key for authencation
+        //        /*
+        //        string _keyDecrypt = CustomEncryption.Decrypt(key);
+        //        if (_keyDecrypt != _keyConfig)
+        //        {
+        //            response.status = "-3";
+        //            response.message = "Authentication is false";
+        //            logger.Info("Responase to web: " + response.ToString());
+        //            return Ok(response);
+        //        }
+        //        */
+        //        List<List<string>> DataColumms = new List<List<string>>();
+
+        //        var LIST_MSISDN = new List<string>();
+        //        var LIST_TYPE = new List<string>();
+        //        var USERS = new List<string>();
+        //        foreach (blackObj eachData in _data.data)
+        //        {
+
+        //            LIST_MSISDN.Add(eachData.msisdn);
+        //            LIST_TYPE.Add(eachData.isBlackList);
+        //            USERS.Add(user);
+
+
+        //        }
+
+
+        //        DataColumms.Add(LIST_MSISDN);
+        //        DataColumms.Add(LIST_TYPE);
+        //        DataColumms.Add(USERS);
+
+
+
+
+        //        usersDataAccess.InsertBulkBlackData("MPS_PKG.BLACKLIST_UPLOAD_DATA", DataColumms);
+
+        //        logger.Info("Call database export_created success:");
+        //        response.status = "0";
+        //        response.message = "Success";
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        logger.Info("getResultOfTerm exception: " + ex.ToString());
+        //        logger.Info("getParam exception: " + ex.ToString());
+        //        response.status = "-2";
+        //        response.message = "System upgrade";
+        //    }
+
+        //    return Ok(response);
+
+        //}
+
+
+
+
+        //[HttpPost]
+        //public IActionResult seachBlackList([FromBody] dynamic sendData)
+        //{
+
+
+        //    //Lay ve url va key voi muc dich post vao lay Message cua Errcode
+        //    //string _keyConfig = string.Empty;
+        //    //_keyConfig = Common.GetValuesAppSetting("webConfig", "key");
+
+
+        //    rpBlackList response = new rpBlackList();
+        //    response.status = "-1";
+        //    response.message = "Err unknow";
+        //    logger.Info("Request from UI : " + sendData.ToString());
+        //    var obj = JObject.Parse(sendData.ToString());
+        //    string msisdn = Convert.ToString(obj["msisdn"]);
+          
+
+        //    //string key = Convert.ToString(obj["key"]);
+
+        //    if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+           
+
+
+        //    try
+        //    {
+        //        //Check token
+        //        var userObj = JObject.Parse(sendData.ToString());
+        //        string token = Convert.ToString(userObj["token"]);
+        //        string channel = Convert.ToString(userObj["channel"]);
+        //        //var userObj = JObject.Parse(sendData.ToString());
+        //        string language = Convert.ToString(userObj["language"]);
+        //        if (string.IsNullOrEmpty(language)) language = "0";
+
+
+        //        string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+        //        string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+        //        string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+        //        //---------------------Lay ra va luu mot redis tu cache-----------------------------
+        //        redisConnection _redis;
+        //        memoryCache.TryGetValue("redis", out _redis);
+        //        if (_redis == null)
+        //        {
+        //            var cacheExpiryOptions = new MemoryCacheEntryOptions
+        //            {
+        //                AbsoluteExpiration = DateTime.Now.AddMonths(12),
+        //                Priority = CacheItemPriority.High,
+        //                SlidingExpiration = TimeSpan.FromMinutes(2),
+        //                Size = 1024,
+        //            };
+        //            _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+        //            _redis.connet();
+        //            memoryCache.Set("redis", _redis, cacheExpiryOptions);
+        //        }
+        //        if (!_redis.isConnet())
+        //        {
+        //            if (!_redis.connet())
+        //            {
+        //                logger.Info("Connect to redis false");
+        //                response.status = "-2";
+        //                response.message = "System Update";
+        //                logger.Info("confirmTicket response : " + response.ToString());
+        //                return Ok(response);
+        //            }
+        //            else
+        //            {
+        //                var cacheExpiryOptions = new MemoryCacheEntryOptions
+        //                {
+        //                    AbsoluteExpiration = DateTime.Now.AddMonths(12),
+        //                    Priority = CacheItemPriority.High,
+        //                    SlidingExpiration = TimeSpan.FromMinutes(2),
+        //                    Size = 1024,
+        //                };
+        //                memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+        //            }
+        //        }
+        //        //----------------------Ket thuc lay redis tu cache -------------------------------------
+        //        if (!CommonFunction.checkToken(clientIp,token, channel, _redis, logger))
+        //        {
+        //            logger.Info("Authen token false");
+        //            response.status = "35";
+        //            response.message = "Check Authen false";
+        //            return Ok(response);
+        //        }
+        //        //Ket thuc check token
+
+
+
+        //        DataSet ds_regist = usersDataAccess.GET_BLACKLIST(msisdn);
+        //        logger.Info("Call database getMoney success:");
+
+        //        if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+        //        {
+        //            response.status = "0";
+        //            response.message = "Success";
+
+
+        //            response.listData = new rpBlack[ds_regist.Tables[0].Rows.Count];
+        //            for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+        //            {
+        //                rpBlack _obj = new rpBlack();
+
+                  
+        //                _obj.msisdn = ds_regist.Tables[0].Rows[j]["MSISDN"].ToString();
+        //                _obj.createDate = ds_regist.Tables[0].Rows[j]["createDate"].ToString();
+        //                _obj.users = ds_regist.Tables[0].Rows[j]["USER_NAME"].ToString();
+        //                _obj.type = ds_regist.Tables[0].Rows[j]["type"].ToString();
+
+
+
+        //                response.listData[j] = _obj;
+        //            }
+
+
+        //        }
+        //        else
+        //        {
+        //            response.status = "1";
+        //            response.message = "Nodata";
+        //        }
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        logger.Info("getParam exception: " + ex.ToString());
+        //        response.status = "-2";
+        //        response.message = "System upgrade";
+
+
+        //    }
+
+
+
+
+
+
+
+        //    return Ok(response);
+
+        //}
+
+
+
+
+        //{"id":"1","users":"quangbh","key":"jqB3Vi1fIlu+9a2ODQs65w=="}
+        [HttpPost]
+        public IActionResult blacklistGetList([FromBody] dynamic sendData)
+        {
+
+            logger.Info("New request income blacklistGetList :" + sendData.ToString());
+            blackListGetListArr response = new blackListGetListArr();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            try
+            {
+
+                var userObj = JObject.Parse(sendData.ToString());
+
+
+                string msisdn = Convert.ToString(userObj["msisdn"]);
+                string type = Convert.ToString(userObj["type"]);
+                string serviceId = Convert.ToString(userObj["serviceId"]);
+                string users = Convert.ToString(userObj["users"]);
+
+                if (string.IsNullOrEmpty(users)) users = "-1";
+                if (string.IsNullOrEmpty(msisdn)) msisdn = "-1";
+                if (string.IsNullOrEmpty(type)) type = "-1";
+                if (string.IsNullOrEmpty(serviceId)) serviceId = "-1";
+
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+                DataSet ds_regist = usersDataAccess.blackGettList(msisdn, type, serviceId, users);
+                logger.Info("Call database blackGettList success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+
+
+
+                    response.list = new blackListGetList[ds_regist.Tables[0].Rows.Count];
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        blackListGetList _obj = new blackListGetList();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.msisdn = ds_regist.Tables[0].Rows[j]["msisdn"].ToString();
+                        _obj.type = ds_regist.Tables[0].Rows[j]["type"].ToString();
+                        _obj.serviceId = ds_regist.Tables[0].Rows[j]["SV_ID"].ToString();
+                        _obj.sysdate = ds_regist.Tables[0].Rows[j]["VSYSDATE"].ToString();
+                        _obj.users = ds_regist.Tables[0].Rows[j]["USERS"].ToString();
+
+
+                        response.list[j] = _obj;
+                    }
+
+                }
+
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Info("exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+            logger.Info("Responase to web: " + response.ToString());
+            return Ok(response);
+        }
+
+
+
+
+
+        //Import data vao Export
+        //--;
+
+        [HttpPost]
+        public IActionResult blacklistInsertData([FromBody] dynamic sendData)
+        {
+
+
+
+
+            Response response = new Response();
+            response.responseCode = "-1";
+            response.responseMessage = "Err unknow";
+
+            logger.Info("Request from UI blacklistInsertData: " + sendData.ToString());
+
+
+            var userObj = JObject.Parse(sendData.ToString());
+
+
+
+            blackImportDataList _data = JsonConvert.DeserializeObject<blackImportDataList>(sendData.ToString());
+            if (string.IsNullOrEmpty(_data.type)) _data.type = "-1";
+            if (string.IsNullOrEmpty(_data.serviceId)) _data.serviceId = "-1";
+            if (string.IsNullOrEmpty(_data.users)) _data.users = "-1";
+
+
+
+
+
+            try
+            {
+                //Check key for authencation
+                string token = Convert.ToString(userObj["token"]);
+                string channel = Convert.ToString(userObj["channel"]);
+                string language = Convert.ToString(userObj["language"]);
+                if (string.IsNullOrEmpty(language)) language = "-1";
+
+                string RedisIp = Common.GetValuesAppSetting("webConfig", "RedisIp");
+                string RedisPort = Common.GetValuesAppSetting("webConfig", "RedisPort");
+                string RedisPass = Common.GetValuesAppSetting("webConfig", "RedisPass");
+                var clientIp = HttpContext.Connection.RemoteIpAddress.ToString();
+
+
+                //---------------------Lay ra va luu mot redis tu cache-----------------------------
+                redisConnection _redis;
+                memoryCache.TryGetValue("redis", out _redis);
+                if (_redis == null)
+                {
+                    var cacheExpiryOptions = new MemoryCacheEntryOptions
+                    {
+                        AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                        Priority = CacheItemPriority.High,
+                        SlidingExpiration = TimeSpan.FromMinutes(2),
+                        Size = 1024,
+                    };
+                    _redis = new redisConnection(RedisIp, RedisPort, RedisPass);
+                    _redis.connet();
+                    memoryCache.Set("redis", _redis, cacheExpiryOptions);
+                }
+                if (!_redis.isConnet())
+                {
+                    if (!_redis.connet())
+                    {
+                        logger.Info("Connect to redis false");
+                        response.responseCode = "-2";
+                        response.responseMessage = "System Update";
+                        logger.Info("confirmTicket response : " + response.ToString());
+                        return Ok(response);
+                    }
+                    else
+                    {
+                        var cacheExpiryOptions = new MemoryCacheEntryOptions
+                        {
+                            AbsoluteExpiration = DateTime.Now.AddMonths(12),
+                            Priority = CacheItemPriority.High,
+                            SlidingExpiration = TimeSpan.FromMinutes(2),
+                            Size = 1024,
+                        };
+                        memoryCache.Set("redis", _redis, cacheExpiryOptions);
+
+                    }
+                }
+                //----------------------Ket thuc lay redis tu cache -------------------------------------
+
+                tokenObj _tokenObj = null;
+                if (!CommonFunction.checkToken(clientIp, token, channel, _redis, logger, out _tokenObj))
+                {
+                    logger.Info("Authen token false");
+                    response.responseCode = "35";
+                    response.responseMessage = CommonObj.common.CommonFunction.getErrCodeObjFromRedis(_redis, channel, response.responseCode, language);
+                    logger.Info("confirmTicket response : " + response.ToString());
+                    return Ok(response);
+                }
+
+
+
+
+                List<List<string>> DataColumms = new List<List<string>>();
+                var LIST_MSISDN = new List<string>();
+                var LIST_TYPE = new List<string>();
+                var LIST_SVID = new List<string>();
+                var LIST_ACTION = new List<string>();
+                var LIST_USERS = new List<string>();
+
+
+                foreach (blackListObj eachData in _data.data)
+                {
+
+                    LIST_TYPE.Add(_data.type);
+                    LIST_SVID.Add(_data.serviceId);
+                    LIST_USERS.Add(_data.users);
+
+                    LIST_MSISDN.Add(eachData.msisdn);
+                    LIST_ACTION.Add(eachData.action);
+
+
+
+                }
+                DataColumms.Add(LIST_MSISDN);
+                DataColumms.Add(LIST_TYPE);
+                DataColumms.Add(LIST_SVID);
+                DataColumms.Add(LIST_ACTION);
+                DataColumms.Add(LIST_USERS);
+
+
+
+
+
+
+                usersDataAccess.InsertBulkBlackList("BALANCE_PKG.BLACK_INSERT", DataColumms);
+
+                logger.Info("Call database export_created success:");
+                response.responseCode = "0";
+                response.responseMessage = "Success";
+            }
+            catch (Exception ex)
+            {
+                logger.Info("getResultOfTerm exception: " + ex.ToString());
+                response.responseCode = "-2";
+                response.responseMessage = "System upgrade";
+
+            }
+
+            return Ok(response);
+
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+    }
+
+}

+ 748 - 0
ApiWeb/ApiProcessToken/Controllers/webservice.cs

@@ -0,0 +1,748 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+
+using System.Xml;
+using System.Data;
+using ResfullApi.Models;
+using System.Configuration;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
+using System.Xml.Linq;
+using ApiProcess.Process;
+
+namespace ApiProcess.Controllers
+{
+   
+   
+   
+    [Route("api/[controller]/[action]/data")]
+    [ApiController]
+   
+
+    public class webservice : ControllerBase
+    {
+        /*
+            http://10.226.40.11:8383/api/webservice/subRequest/data
+         * Nhan cac dang ky va huy qua SMS
+         * 
+         * 
+         * */
+
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(webservice));
+
+
+
+
+        
+        [HttpPost]
+
+        //public string subRequest(HttpRequestMessage request)
+        // public HttpResponseMessage subRequest(HttpRequestMessage request)
+        //[Produces("text/xml")]
+        public IActionResult subRequest([FromBody] XElement xml1)
+        {
+            
+
+            string request = xml1.ToString();
+            logger.Info("Request subRequest from MPS:" + request);
+            string result = "";
+            //string username1 = xml1.GetElementsByTagName("username")[0].InnerText;
+            string ketqua = "0|success";
+            ////log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            ////log4net.Config.XmlConfigurator.Configure();
+
+            try
+            {
+
+                //string ten = xml1.Element("username").Value;
+
+                //string prefix = ConfigurationSettings.AppSettings["PREFIX"];
+                string prefix = Common.GetValuesAppSetting("webConfig", "PREFIX");
+                XmlDocument xml = new XmlDocument();
+              
+                
+                //logger.Debug(request.Content.ReadAsStreamAsync().Result);
+                //xml.Load(request);
+                xml.LoadXml(request);
+                
+
+                string username = xml.GetElementsByTagName("username")[0].InnerText;
+                string password = xml.GetElementsByTagName("password")[0].InnerText;
+                string serviceid = xml.GetElementsByTagName("serviceid")[0].InnerText;
+                string msisdn = xml.GetElementsByTagName("msisdn")[0].InnerText;
+                string chargetime = xml.GetElementsByTagName("chargetime")[0].InnerText;
+                string paramss = xml.GetElementsByTagName("params")[0].InnerText;
+                string mode = xml.GetElementsByTagName("mode")[0].InnerText;
+                string amount = xml.GetElementsByTagName("amount")[0].InnerText;
+                string command = xml.GetElementsByTagName("command")[0].InnerText;
+                string transaction = xml.GetElementsByTagName("transaction")[0].InnerText;
+                
+                DataSet ds = webserviceDataAccess.ProcessSub(username,
+                                                    password,
+                                                    serviceid,
+                                                    msisdn,
+                                                    chargetime,
+                                                    paramss,
+                                                    mode,
+                                                    amount,
+                                                    command, prefix, transaction);
+
+
+                if (ds != null & ds.Tables[0].Rows.Count > 0)
+                {
+                    ketqua = ds.Tables[0].Rows[0][0].ToString();
+
+                }
+                logger.Debug("Process Request from MPS suceess");
+               
+            }
+            catch (Exception ex)
+            {
+                logger.Debug("Process sub err: " + ex.ToString());
+            }
+
+
+
+
+
+            result = result + @"<?xml version=""1.0""?> <S:Envelope xmlns:S=""http://schemas.xmlsoap.org/soap/envelope/"" >";
+            result = result + @"<S:Body>";
+            result = result + @"<subRequestResponse xmlns=""http://contentws/xsd"">";
+            result = result + @"<return>";
+            result = result + ketqua;
+            result = result + @"</return>";
+            result = result + @"</subRequestResponse>";
+            result = result + @"</S:Body>";
+            result = result + @"</S:Envelope>";
+            logger.Debug(result);
+            //return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(result, System.Text.Encoding.UTF8, "text/xml") }; ;
+            Response.Headers.Add("Content-Type", "text/xml");
+            //return Ok(result);
+            return Content(result);
+
+        }
+
+
+
+        [HttpPost]
+
+        //public string subRequest(HttpRequestMessage request)
+        // public HttpResponseMessage subRequest(HttpRequestMessage request)
+        //[Produces("text/xml")]
+        public IActionResult subCheckBuy1Time([FromBody] XElement xml1)
+        {
+
+
+            string request = xml1.ToString();
+            logger.Info("Request subCheckBuy1Time to MPS:" + request);
+            string result = "";
+            //string username1 = xml1.GetElementsByTagName("username")[0].InnerText;
+            string ketqua = "0|success";
+            ////log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            ////log4net.Config.XmlConfigurator.Configure();
+
+            try
+            {
+
+                //string ten = xml1.Element("username").Value;
+
+                //string prefix = ConfigurationSettings.AppSettings["PREFIX"];
+                string prefix = Common.GetValuesAppSetting("webConfig", "PREFIX");
+                XmlDocument xml = new XmlDocument();
+
+
+                //logger.Debug(request.Content.ReadAsStreamAsync().Result);
+                //xml.Load(request);
+                xml.LoadXml(request);
+
+
+                string username = xml.GetElementsByTagName("username")[0].InnerText;
+                string password = xml.GetElementsByTagName("password")[0].InnerText;
+                string serviceid = xml.GetElementsByTagName("serviceid")[0].InnerText;
+                string msisdn = xml.GetElementsByTagName("msisdn")[0].InnerText;
+                string chargetime = xml.GetElementsByTagName("chargetime")[0].InnerText;
+                string paramss = xml.GetElementsByTagName("params")[0].InnerText;
+                string mode = xml.GetElementsByTagName("mode")[0].InnerText;
+                string amount = xml.GetElementsByTagName("amount")[0].InnerText;
+                string command = xml.GetElementsByTagName("command")[0].InnerText;
+                string transaction = xml.GetElementsByTagName("transaction")[0].InnerText;
+
+                DataSet ds = webserviceDataAccess.ProcessCheckBuy1Time(username,
+                                                    password,
+                                                    serviceid,
+                                                    msisdn,
+                                                    chargetime,
+                                                    paramss,
+                                                    mode,
+                                                    amount,
+                                                    command, prefix, transaction);
+
+
+                if (ds != null & ds.Tables[0].Rows.Count > 0)
+                {
+                    ketqua = ds.Tables[0].Rows[0][0].ToString();
+
+                }
+                logger.Debug("Process Request from MPS suceess");
+
+            }
+            catch (Exception ex)
+            {
+                logger.Debug("Process sub err: " + ex.ToString());
+            }
+
+
+
+
+
+            result = result + @"<?xml version=""1.0""?> <S:Envelope xmlns:S=""http://schemas.xmlsoap.org/soap/envelope/"" >";
+            result = result + @"<S:Body>";
+            result = result + @"<subRequestResponse xmlns=""http://contentws/xsd"">";
+            result = result + @"<return>";
+            result = result + ketqua;
+            result = result + @"</return>";
+            result = result + @"</subRequestResponse>";
+            result = result + @"</S:Body>";
+            result = result + @"</S:Envelope>";
+            logger.Debug(result);
+            //return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(result, System.Text.Encoding.UTF8, "text/xml") }; ;
+            Response.Headers.Add("Content-Type", "text/xml");
+            //return Ok(result);
+            return Content(result);
+
+        }
+
+
+
+
+
+
+
+        /*
+            http://10.226.40.11:8383/api/webservice/subUssdRequest/data
+         * Nhan cac dang ky va huy qua USSD
+         * 
+         * 
+         * */
+        [HttpPost]
+        //public string subRequest(HttpRequestMessage request)
+        //public HttpResponseMessage subUssdRequest(HttpRequestMessage request)
+        public IActionResult subUssdRequest([FromBody] XElement xml1)
+        {
+            string request = xml1.ToString();
+            logger.Info("Request subUssdRequest from MPS:" + request);
+            string result = "";
+            string ketqua = "0";
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+
+            try
+            {
+                //string prefix = ConfigurationSettings.AppSettings["PREFIX"];
+                string prefix = Common.GetValuesAppSetting("webConfig", "PREFIX");
+                XmlDocument xml = new XmlDocument();
+                
+                xml.LoadXml(request);
+
+
+                string username = xml.GetElementsByTagName("username")[0].InnerText;
+                string password = xml.GetElementsByTagName("password")[0].InnerText;
+                string servicename = xml.GetElementsByTagName("servicename")[0].InnerText;
+                string msisdn = xml.GetElementsByTagName("msisdn")[0].InnerText;
+                string chargetime = xml.GetElementsByTagName("chargetime")[0].InnerText;
+                string paramss = xml.GetElementsByTagName("params")[0].InnerText;
+                string mode = xml.GetElementsByTagName("mode")[0].InnerText;
+                string amount = xml.GetElementsByTagName("amount")[0].InnerText;
+                string transactionId = xml.GetElementsByTagName("transactionId")[0].InnerText;
+                string other_and_more = xml.GetElementsByTagName("other_and_more")[0].InnerText;
+                DataSet ds = webserviceDataAccess.ProcessSubUssd(username,
+                                                    password,
+                                                    servicename,
+                                                    msisdn,
+                                                    chargetime,
+                                                    paramss,
+                                                    mode,
+                                                    amount,
+                                                    transactionId,
+                                                    other_and_more,
+                                                    prefix);
+                if (ds != null & ds.Tables[0].Rows.Count > 0)
+                {
+                    ketqua = "0";
+
+                }
+                logger.Debug("Process Request from MPS suceess");
+
+            }
+            catch (Exception ex)
+            {
+                logger.Debug("Process sub err: " + ex.ToString());
+            }
+
+
+
+
+
+            result = result + @"<?xml version=""1.0""?> <S:Envelope xmlns:S=""http://schemas.xmlsoap.org/soap/envelope/"" >";
+            result = result + @"<S:Body>";
+            result = result + @"<subRequestResponse xmlns=""http://contentws/xsd"">";
+            result = result + @"<return>";
+            result = result + ketqua;
+            result = result + @"</return>";
+            result = result + @"</subRequestResponse>";
+            result = result + @"</S:Body>";
+            result = result + @"</S:Envelope>";
+            logger.Debug(result);
+            //return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(result, System.Text.Encoding.UTF8, "text/xml") }; ;
+            //return result;
+            Response.Headers.Add("Content-Type", "text/xml");
+            //return Ok(result);
+            return Content(result);
+
+        }
+
+
+
+
+
+
+
+
+
+
+
+        /*
+            http://10.226.40.11:8383/api/webservice/resultRequest/data
+         * Nhan cac ket qua charge tu MPS
+         * 
+         * 
+         * */
+
+        [HttpPost]
+        //public string resultRequest(HttpRequestMessage request)
+        //public HttpResponseMessage resultRequest(HttpRequestMessage request)
+        public IActionResult resultRequest([FromBody] XElement xml1)
+        {
+            string request = xml1.ToString();
+            logger.Info("Request resultRequest from MPS:" + request);
+            string result = "";
+            string ketqua = "0|success";
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+
+            try
+            {
+
+
+                //string prefix = ConfigurationSettings.AppSettings["PREFIX"];
+                string prefix = Common.GetValuesAppSetting("webConfig", "PREFIX");
+                if (request == null)  logger.Debug("Request charge from MPS is null");
+
+             
+                XmlDocument xml = new XmlDocument();
+                xml.LoadXml(request);
+
+
+                string username = xml.GetElementsByTagName("username")[0].InnerText;
+                string password = xml.GetElementsByTagName("password")[0].InnerText;
+                string serviceid = xml.GetElementsByTagName("serviceid")[0].InnerText;
+                string msisdn = xml.GetElementsByTagName("msisdn")[0].InnerText;
+                string chargetime = xml.GetElementsByTagName("chargetime")[0].InnerText;
+                string paramss = xml.GetElementsByTagName("params")[0].InnerText;
+                string mode = xml.GetElementsByTagName("mode")[0].InnerText;
+                string amount = xml.GetElementsByTagName("amount")[0].InnerText;
+                string cmd = xml.GetElementsByTagName("command")[0].InnerText;
+                string transaction = xml.GetElementsByTagName("transaction")[0].InnerText;
+
+
+                chargeObj _obj=new chargeObj();
+                _obj.username = username;
+                _obj.password = password;
+                _obj.serviceid = serviceid;
+                _obj.msisdn = msisdn;
+                _obj.chargetime = chargetime;
+                _obj.paramss = paramss;
+                _obj.mode = mode;
+                _obj.amount = amount;
+                _obj.cmd = cmd;
+                _obj.transaction = transaction;
+                _obj.prefix = prefix;
+
+                Variable.chargerObj.Enqueue(_obj);
+
+
+                /*
+                DataSet ds = webserviceDataAccess.ProcessCharge(username,
+                                                    password,
+                                                    serviceid,
+                                                    msisdn,
+                                                    chargetime,
+                                                    paramss,
+                                                    mode,
+                                                    amount,
+                                                    prefix,cmd,transaction);
+
+                */
+                //if (ds != null & ds.Tables[0].Rows.Count > 0)
+                //{
+                //    ketqua = ds.Tables[0].Rows[0][0].ToString();
+
+                //}
+                logger.Debug("Input queu success");
+
+
+
+            }
+            catch (Exception ex)
+            {
+                logger.Debug("Process charge err: " + ex.ToString());
+            }
+
+
+            ketqua = "0";
+
+
+            result = result + @"<?xml version=""1.0""?> <S:Envelope xmlns:S=""http://schemas.xmlsoap.org/soap/envelope/"" >";
+            result = result + @"<S:Body>";
+            result = result + @"<subRequestResponse xmlns=""http://contentws/xsd"">";
+            result = result + @"<return>";
+            result = result + ketqua;
+            result = result + @"</return>";
+            result = result + @"</subRequestResponse>";
+            result = result + @"</S:Body>";
+            result = result + @"</S:Envelope>";
+            //return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(result, System.Text.Encoding.UTF8, "text/xml") }; ;
+            logger.Debug(result);
+            Response.Headers.Add("Content-Type", "text/xml");
+            //return Ok(result);
+            return Content(result);
+
+        }
+
+
+
+        /*
+            http://10.226.40.11:8383/api/webservice/proKeyWord/data
+         * Xu ly cu phap tu MPS
+         * 
+         * 
+         * */
+
+        [HttpPost]
+        //public string resultRequest(HttpRequestMessage request)
+        //public HttpResponseMessage proKeyWord(HttpRequestMessage request)
+        public IActionResult proKeyWord([FromBody] XElement xml1)
+        {
+            string request = xml1.ToString();
+            logger.Info("Request proKeyWord from MPS:" + request);
+            string result = "";
+            string ketqua = "0|success";
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+
+            try
+            {
+
+
+                //string prefix = ConfigurationSettings.AppSettings["PREFIX"];
+                string prefix = Common.GetValuesAppSetting("webConfig", "PREFIX");
+                if (request == null) logger.Debug("Request proKeyWord from MPS is null");
+
+
+                XmlDocument xml = new XmlDocument();
+                xml.LoadXml(request);
+
+
+                string username = xml.GetElementsByTagName("username")[0].InnerText;
+                string password = xml.GetElementsByTagName("password")[0].InnerText;
+                string serviceid = xml.GetElementsByTagName("serviceid")[0].InnerText;
+                string msisdn = xml.GetElementsByTagName("msisdn")[0].InnerText;
+                string chargetime = xml.GetElementsByTagName("chargetime")[0].InnerText;
+                string paramss = xml.GetElementsByTagName("params")[0].InnerText;
+                string mode = xml.GetElementsByTagName("mode")[0].InnerText;
+                string amount = xml.GetElementsByTagName("amount")[0].InnerText;
+                string cmd = xml.GetElementsByTagName("command")[0].InnerText;
+                string transaction = xml.GetElementsByTagName("transaction")[0].InnerText;
+
+
+                DataSet ds = webserviceDataAccess.ProcessKeyWord(username,
+                                                    password,
+                                                    serviceid,
+                                                    msisdn,
+                                                    chargetime,
+                                                    paramss,
+                                                    mode,
+                                                    amount,
+                                                    prefix, cmd, transaction);
+                if (ds != null & ds.Tables[0].Rows.Count > 0)
+                {
+                    ketqua = ds.Tables[0].Rows[0][0].ToString();
+
+                }
+                logger.Debug("Process Charge from MPS suceess");
+
+            }
+            catch (Exception ex)
+            {
+                logger.Debug("Process charge err: " + ex.ToString());
+            }
+
+
+
+
+
+            result = result + @"<?xml version=""1.0""?> <S:Envelope xmlns:S=""http://schemas.xmlsoap.org/soap/envelope/"" >";
+            result = result + @"<S:Body>";
+            result = result + @"<subRequestResponse xmlns=""http://contentws/xsd"">";
+            result = result + @"<return>";
+            result = result + ketqua;
+            result = result + @"</return>";
+            result = result + @"</subRequestResponse>";
+            result = result + @"</S:Body>";
+            result = result + @"</S:Envelope>";
+            //return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(result, System.Text.Encoding.UTF8, "text/xml") }; ;
+            logger.Debug(result);
+            //return result;
+            Response.Headers.Add("Content-Type", "text/xml");
+            //return Ok(result);
+            return Content(result);
+
+        }
+
+
+
+
+        [HttpPost]
+        //public string resultRequest(HttpRequestMessage request)
+        //public HttpResponseMessage contentRequest(HttpRequestMessage request)
+        public IActionResult contentRequest([FromBody] XElement xml1)
+        {
+            string request = xml1.ToString();
+            logger.Info("Request contentRequest from MPS:" + request);
+
+            string result = "";
+            string ketqua = "";
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+
+            try
+            {
+                //string prefix = ConfigurationSettings.AppSettings["PREFIX"];
+                string prefix = Common.GetValuesAppSetting("webConfig", "PREFIX");
+                XmlDocument xml = new XmlDocument();
+                xml.LoadXml(request);
+
+
+                string username = xml.GetElementsByTagName("username")[0].InnerText;
+                string password = xml.GetElementsByTagName("password")[0].InnerText;
+                string serviceid = xml.GetElementsByTagName("serviceid")[0].InnerText;
+                string msisdn = xml.GetElementsByTagName("msisdn")[0].InnerText;
+                
+                string paramss = xml.GetElementsByTagName("params")[0].InnerText;
+                string mode = xml.GetElementsByTagName("mode")[0].InnerText;
+                string amount = xml.GetElementsByTagName("amount")[0].InnerText;
+                string transid = xml.GetElementsByTagName("transid")[0].InnerText;
+
+
+                DataSet ds = webserviceDataAccess.ProcessGetContent(username,
+                                                    password,
+                                                    serviceid,
+                                                    msisdn,
+                                                    transid,
+                                                    paramss,
+                                                    mode,
+                                                    amount,
+                                                    prefix);
+                if (ds != null & ds.Tables[0].Rows.Count > 0)
+                {
+                    string status = ds.Tables[0].Rows[0]["status"].ToString();
+                    string msg = ds.Tables[0].Rows[0]["msg"].ToString();
+                    if (string.IsNullOrEmpty(msg))
+                        ketqua = "0";
+                    else
+                        ketqua = "0|" + msg;
+
+                }
+                logger.Debug("Process Charge from MPS suceess");
+
+            }
+            catch (Exception ex)
+            {
+                logger.Debug("Process charge err: " + ex.ToString());
+            }
+
+
+
+
+
+            result = result + @"<?xml version=""1.0""?> <S:Envelope xmlns:S=""http://schemas.xmlsoap.org/soap/envelope/"" >";
+            result = result + @"<S:Body>";
+            result = result + @"<contentRequestResponse  xmlns=""http://contentws/xsd"">";
+            result = result + @"<return>";
+            result = result + ketqua;
+            result = result + @"</return>";
+            result = result + @"</contentRequestResponse>";
+            result = result + @"</S:Body>";
+            result = result + @"</S:Envelope>";
+            logger.Debug(result);
+            //return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(result, System.Text.Encoding.UTF8, "text/xml") }; ;
+            Response.Headers.Add("Content-Type", "text/xml");
+            //return Ok(result);
+            return Content(result);
+
+        }
+
+
+
+
+
+
+
+
+        [HttpPost]
+        //public HttpResponseMessage changeZodiacNew(HttpRequestMessage request)
+        public IActionResult changeZodiacNew([FromBody] XElement xml1)
+        {
+            string request = xml1.ToString();
+            logger.Info("Request changeZodiacNew from MPS:" + request);
+
+
+            string result = "";
+            string ketqua = "0|success";
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+
+            try
+            {
+                //string prefix = ConfigurationSettings.AppSettings["PREFIX"];
+                string prefix = Common.GetValuesAppSetting("webConfig", "PREFIX");
+                XmlDocument xml = new XmlDocument();
+                xml.LoadXml(request);
+
+
+                string username = xml.GetElementsByTagName("username")[0].InnerText;
+                string password = xml.GetElementsByTagName("password")[0].InnerText;
+                string serviceid = xml.GetElementsByTagName("subServiceId")[0].InnerText;
+                string msisdn = xml.GetElementsByTagName("msisdn")[0].InnerText;
+                string paramss = xml.GetElementsByTagName("params")[0].InnerText;
+
+
+                DataSet ds = webserviceDataAccess.changeZodiacNew(username,
+                                                    password,
+                                                    serviceid,
+                                                    msisdn,
+                                                    paramss
+                                                   );
+                if (ds != null & ds.Tables[0].Rows.Count > 0)
+                {
+                    ketqua = ds.Tables[0].Rows[0][0].ToString();
+
+                }
+                logger.Debug("Process Request change changeZodiacNew suceess");
+
+            }
+            catch (Exception ex)
+            {
+                logger.Debug("Process change Zodiac err: " + ex.ToString());
+            }
+
+
+
+
+
+            result = result + @"<?xml version=""1.0""?> <S:Envelope xmlns:S=""http://schemas.xmlsoap.org/soap/envelope/"" >";
+            result = result + @"<S:Body>";
+            result = result + @"<subRequestResponse xmlns=""http://contentws/xsd"">";
+            result = result + @"<return>";
+            result = result + ketqua;
+            result = result + @"</return>";
+            result = result + @"</subRequestResponse>";
+            result = result + @"</S:Body>";
+            result = result + @"</S:Envelope>";
+            logger.Debug(result);
+            //return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(result, System.Text.Encoding.UTF8, "text/xml") }; ;
+            //return result;
+            Response.Headers.Add("Content-Type", "text/xml");
+            //return Ok(result);
+            return Content(result);
+
+        }
+
+
+
+
+
+        [HttpPost]
+        //public HttpResponseMessage changeZodiac(HttpRequestMessage request)
+        public IActionResult changeZodiac([FromBody] XElement xml1)
+        {
+            string request = xml1.ToString();
+            logger.Info("Request changeZodiac from MPS:" + request);
+
+            string result = "";
+            string ketqua = "0|success";
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+
+            try
+            {
+                //string prefix = ConfigurationSettings.AppSettings["PREFIX"];
+                string prefix = Common.GetValuesAppSetting("webConfig", "PREFIX");
+                XmlDocument xml = new XmlDocument();
+                xml.LoadXml(request);
+
+
+                string username = xml.GetElementsByTagName("username")[0].InnerText;
+                string password = xml.GetElementsByTagName("password")[0].InnerText;
+                string serviceid = xml.GetElementsByTagName("subServiceId")[0].InnerText;
+                string msisdn = xml.GetElementsByTagName("msisdn")[0].InnerText;
+                string paramss = xml.GetElementsByTagName("params")[0].InnerText;
+
+
+                DataSet ds = webserviceDataAccess.changeZodiac(username,
+                                                    password,
+                                                    serviceid,
+                                                    msisdn,
+                                                    paramss
+                                                   );
+                if (ds != null & ds.Tables[0].Rows.Count > 0)
+                {
+                    ketqua = ds.Tables[0].Rows[0][0].ToString();
+
+                }
+                logger.Debug("Process Request change Zodiac suceess");
+
+            }
+            catch (Exception ex)
+            {
+                logger.Debug("Process change Zodiac err: " + ex.ToString());
+            }
+
+
+
+
+
+            result = result + @"<?xml version=""1.0""?> <S:Envelope xmlns:S=""http://schemas.xmlsoap.org/soap/envelope/"" >";
+            result = result + @"<S:Body>";
+            result = result + @"<subRequestResponse xmlns=""http://contentws/xsd"">";
+            result = result + @"<return>";
+            result = result + ketqua;
+            result = result + @"</return>";
+            result = result + @"</subRequestResponse>";
+            result = result + @"</S:Body>";
+            result = result + @"</S:Envelope>";
+            logger.Debug(result);
+            //return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(result, System.Text.Encoding.UTF8, "text/xml") }; ;
+            //return result;
+            Response.Headers.Add("Content-Type", "text/xml");
+            //return Ok(result);
+            return Content(result);
+        }
+
+
+
+    }
+}

二进制
ApiWeb/ApiProcessToken/Dll/GenPrizeCode.dll


+ 6 - 0
ApiWeb/ApiProcessToken/Dll/GenPrizeCode.dll.config

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <connectionStrings>
+    <add name="CKRedSeasonEntities" connectionString="metadata=res://*/DAL.CKRedSeasonEntities.csdl|res://*/DAL.CKRedSeasonEntities.ssdl|res://*/DAL.CKRedSeasonEntities.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=localhost;initial catalog=CKRedSeason;user id=sa;password=ck@123;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
+  </connectionStrings>
+</configuration>

二进制
ApiWeb/ApiProcessToken/Dll/GenPrizeCode.pdb


二进制
ApiWeb/ApiProcessToken/Dll/Newtonsoft.Json.dll


二进制
ApiWeb/ApiProcessToken/Dll/Oracle.ManagedDataAccess.dll


二进制
ApiWeb/ApiProcessToken/Dll/log4net.dll


+ 361 - 0
ApiWeb/ApiProcessToken/Models/Common.cs

@@ -0,0 +1,361 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Net;
+using System.Net.Sockets;
+using System.IO;
+using Microsoft.Extensions.Configuration;
+using ApiProcess.Models;
+using ApiProcess.Models.bet;
+using System.Collections;
+using Newtonsoft.Json;
+using System.Net.Http;
+using System.Data;
+using System.Text;
+using ResfullApi.Models.bet;
+
+namespace ResfullApi.Models
+{
+    public class Common
+    {
+        static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(Common));
+
+
+
+
+        public static string GetErrMsgByCode(string code,string service,string channel,string language)
+        {
+            string result = "";
+            try
+            {
+                DataSet ds=DataAccess.GET_ERR_MSG_BY_CODE(code,service,channel,language);
+                if (ds != null & ds.Tables[0].Rows.Count > 0)
+                {
+                    result = ds.Tables[0].Rows[0]["mesage"].ToString();
+                }
+            }
+            catch (Exception ex)
+            {
+
+                
+            }
+            return result;
+        }
+
+
+
+
+        public static string SocketUnSyn(string msg, string host, int port, int timeout)
+        {
+            //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+            //log4net.Config.XmlConfigurator.Configure();
+
+            string result = "-1000";
+            TcpClient client = null;
+            NetworkStream stream = null;
+            try
+            {
+
+
+
+                byte[] data = System.Text.Encoding.ASCII.GetBytes(msg);
+
+                client = new TcpClient(host, port);
+
+                client.SendTimeout = timeout;
+                stream = client.GetStream();
+                BinaryWriter writer = new BinaryWriter(stream);
+                writer.Write(data);
+
+
+
+
+                String _readFromStream = String.Empty;
+                byte[] data_read = new byte[1024];
+                using (MemoryStream ms = new MemoryStream())
+                {
+
+                    int numBytesRead;
+                    while ((numBytesRead = stream.Read(data_read, 0, data_read.Length)) > 0)
+                    {
+                        ms.Write(data_read, 0, numBytesRead);
+
+
+                    }
+                    _readFromStream = System.Text.Encoding.ASCII.GetString(ms.ToArray(), 0, (int)ms.Length);
+                }
+
+
+
+
+
+                //string _readFromStream = GetResponse(stream);
+                /*
+                data = new Byte[1024];
+                String responseData = String.Empty;
+                Int32 bytes = stream.Read(data, 0, data.Length);
+                responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
+                */
+                logger.Info("Response from:" + host + ":" + port + " is:" + _readFromStream);
+                // Close everything.
+                stream.Close();
+                client.Close();
+                //Phan tich data tra ve:
+                result = _readFromStream;
+
+
+
+
+            }
+            catch (ArgumentNullException e)
+            {
+                logger.Info("ArgumentNullException and close connection:" + e.ToString());
+                stream.Close();
+                client.Close();
+                return "-1000";
+            }
+            catch (SocketException e)
+            {
+
+               
+                return "-1000";
+            }
+            return result;
+        }
+
+        
+
+
+            public static string GetResponse(NetworkStream stream)
+        {
+            byte[] data = new byte[1024];
+            using (MemoryStream memoryStream = new MemoryStream())
+            {
+                do
+                {
+                    stream.Read(data, 0, data.Length);
+                    memoryStream.Write(data, 0, data.Length);
+                } while (stream.DataAvailable);
+
+                return System.Text.Encoding.ASCII.GetString(memoryStream.ToArray(), 0, (int)memoryStream.Length);
+            }
+        }
+
+
+        public static string checkToken(string ip,string channel,string token, out string msisdn,out string message)
+        {
+            string result = "1"; //check token ko thanh cong
+            msisdn = "";
+            message = "";
+            try
+            {
+                DataSet ds_check = usersDataAccess.TKcheckToken(ip, channel, token);
+                if (ds_check != null & ds_check.Tables[0].Rows.Count > 0)
+                {
+                    msisdn = ds_check.Tables[0].Rows[0]["msisdn"].ToString();
+                    result = ds_check.Tables[0].Rows[0]["status"].ToString();
+                    message = ds_check.Tables[0].Rows[0]["mesage"].ToString();
+
+                }
+            }
+            catch (Exception ex)
+            {
+                int a = 1;
+              
+            }
+            
+            return result;
+        }
+
+
+
+        public static betProcessObj GetBetProcess(int id_process, string svId, ArrayList inputArrProcess, out ArrayList outputArrProcess)
+        {
+            betProcessObj result = null;
+            outputArrProcess = inputArrProcess;
+            ArrayList _temp = null;
+            string ischeckMemoryCache = GetValuesAppSetting("webConfig", "ischeckMemoryCache");
+            if (inputArrProcess == null || ischeckMemoryCache == "1")
+                _temp = getArrProcessActive(svId);
+            else
+                _temp = inputArrProcess;
+
+            if (_temp.Count == 0)
+                return null;
+            int id = 0;
+            if (id_process < 0 || id_process >= _temp.Count - 1)
+                id = 0;
+            else
+                id = id_process + 1;
+            result = (betProcessObj)_temp[id];
+            result.seq = id.ToString();
+            outputArrProcess = _temp;
+            return result;
+
+        }
+
+
+
+        public static string GetErrMessageFromErrCode(string errCode, string language, string url, string _keyPost,string channel)
+        {
+
+            Random _rd = new Random();
+            string strRandom = _rd.Next(1, 999999).ToString("000000");
+            string request_process = strRandom + DateTime.Now.ToString("ddMMyyyyhhmmssfff");
+
+
+            string jsomPost = "{\"requestId\":\"#?rqeustID#\",\"serviceId\":\"10\",\"key\":\"#?key# \",\"cmd\":\"getErrCodeToMessage\",\"language\":\"#?language#\",\"channel\":\"#?channel#\",\"data\":\"#?errCode#\"}";
+            jsomPost = jsomPost.Replace("#?rqeustID#", request_process);
+            jsomPost = jsomPost.Replace("#?key#", _keyPost);
+            jsomPost = jsomPost.Replace("#?language#", language);
+            jsomPost = jsomPost.Replace("#?errCode#", errCode);
+            jsomPost = jsomPost.Replace("#?channel#", channel);
+
+            string strResponse = Common.SendPost(url, jsomPost);
+            ResCommnon response = JsonConvert.DeserializeObject<ResCommnon>(strResponse);
+            return response.responseMessage;
+        }
+
+
+        public static String SendPost(string url, string str)
+        {
+
+
+            var data = new StringContent(str, Encoding.UTF8, "application/json");
+            //StringBuilder sb = new StringBuilder();
+            //sb.Append("Request: " + data);
+
+
+            using (var client = new HttpClient())
+            {
+                var response = client.PostAsync(url, data).Result;
+
+                if (response.IsSuccessStatusCode)
+                {
+                    var responseContent = response.Content;
+                    //sb.Append("\r\nResponse: " + responseContent);
+                    //log.Debug(sb.ToString());
+
+                    // by calling .Result you are synchronously reading the result
+                    string responseString = responseContent.ReadAsStringAsync().Result;
+
+                    return responseString;
+                }
+                //sb.Append("\r\nResponse: " + response);
+                //log.Debug(sb.ToString());
+                return response.StatusCode.ToString();
+            }
+        }
+
+
+
+
+        public static ArrayList getArrProcessActive(string svId)
+
+        {
+            ArrayList _arrListProcess = null;
+            string keyOfBetType = "";
+            if (svId == "1")
+                keyOfBetType = "betProcessListPower";
+            else if (svId == "2")
+                keyOfBetType = "betProcessListDay";
+            else if (svId == "3")
+                keyOfBetType = "betProcessListPlus";
+            
+            
+            string strBetList = GetValuesAppSetting("webConfig", keyOfBetType);
+            string[] arrList = strBetList.Split('$');
+            if (arrList.Length == 0)
+                return null;
+            List<betProcessObj> listProcess = new List<betProcessObj>();
+            _arrListProcess = new ArrayList();
+            int j = 0;
+            for (int i = 0; i < arrList.Length; i++)
+            {
+                string iteam = arrList[i];
+                string[] arrItem = iteam.Split(':');
+                betProcessObj temp = new betProcessObj();
+
+                temp.ip = (string)arrItem[0];
+                temp.port = (string)arrItem[1];
+                temp.timeout = (string)arrItem[2];
+                //if(CheckPort(temp.ip, temp.port))
+                if (CheckPortV2(temp.ip, temp.port))
+                {
+                    temp.seq = j.ToString();
+                    _arrListProcess.Add(temp);
+                    j++;
+                }
+
+            }
+            return _arrListProcess;
+
+        }
+
+        public static bool CheckPortV2(string ip, string port)
+        {
+            bool result = false;
+            try
+            {
+                TcpClient c = new TcpClient(ip,Convert.ToInt32(port));
+                result = true;
+                c.Close();
+            }
+            catch (System.Net.Sockets.SocketException ex)
+            {
+
+
+            }
+            return result;
+        }
+
+
+        public static bool CheckPort(string ip,string port)
+        {
+            bool result = false;
+            string hostname = ip;
+            int portno =Convert.ToInt32(port);
+            IPAddress ipa = (IPAddress)Dns.GetHostAddresses(hostname)[0];
+            try
+            {
+                System.Net.Sockets.Socket sock =
+                        new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,
+                                                      System.Net.Sockets.SocketType.Stream,
+                                                      System.Net.Sockets.ProtocolType.Tcp);
+                sock.Connect(ipa, portno);
+                if (sock.Connected == true) // Port is in use and connection is successful
+                    result = true;
+                sock.Close();
+            }
+            catch (System.Net.Sockets.SocketException ex)
+            {
+                
+
+            }
+            return result;
+        }
+
+
+
+
+
+
+
+
+        public static string GetValuesAppSetting(string key, string subkey)
+        {
+            IConfigurationBuilder builder = new ConfigurationBuilder();
+            builder.AddJsonFile(Path.Combine(Directory.GetCurrentDirectory(), "appsettings.json"));
+
+            var root = builder.Build();
+            var sampleConnectionString = root.GetSection(key)[subkey];
+            return sampleConnectionString;
+        }
+
+
+
+
+
+    }
+}

+ 317 - 0
ApiWeb/ApiProcessToken/Models/DataAccess.cs

@@ -0,0 +1,317 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Oracle.ManagedDataAccess.Client;
+using System.Data;
+using System.Configuration;
+namespace ResfullApi.Models
+{
+    public class DataAccess
+    {
+       
+        public DataAccess()
+        {
+
+        }
+
+
+
+        public static void updateCharge(string sSQL, List<List<string>> dataColumn)
+        {
+            OracleConnection connection = null;
+            try
+            {
+
+                connection = getPoolingConnection();
+                connection.Open();
+                OracleTransaction transaction;
+
+                // Start a local transaction
+                transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
+                using (var command = connection.CreateCommand())
+                {
+                    command.CommandText = sSQL;
+                    command.CommandType = CommandType.StoredProcedure;
+                    command.ArrayBindCount = dataColumn[0].Count;
+                    command.Transaction = transaction;
+
+
+
+
+                    var v_username = dataColumn[0].ToArray();
+                    OracleParameter param0 = new OracleParameter("v_username", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param0.Value = v_username;
+                    param0.Size = v_username.Length;
+                    command.Parameters.Add(param0);
+
+                    var v_password = dataColumn[1].ToArray();
+                    OracleParameter param1 = new OracleParameter("v_password", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param1.Value = v_password;
+                    param1.Size = v_password.Length;
+                    command.Parameters.Add(param1);
+
+                    var v_serviceid = dataColumn[2].ToArray();
+                    OracleParameter param2 = new OracleParameter("v_serviceid", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param2.Value = v_serviceid;
+                    param2.Size = v_serviceid.Length;
+                    command.Parameters.Add(param2);
+
+
+                    var v_msisdn = dataColumn[3].ToArray();
+                    OracleParameter param3 = new OracleParameter("v_msisdn", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param3.Value = v_msisdn;
+                    param3.Size = v_msisdn.Length;
+                    command.Parameters.Add(param3);
+
+                    var v_chargetime = dataColumn[4].ToArray();
+                    OracleParameter param4 = new OracleParameter("v_chargetime", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param4.Value = v_chargetime;
+                    param4.Size = v_chargetime.Length;
+                    command.Parameters.Add(param4);
+
+                    var v_paramss = dataColumn[5].ToArray();
+                    OracleParameter param5 = new OracleParameter("v_paramss", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param5.Value = v_paramss;
+                    param5.Size = v_paramss.Length;
+                    command.Parameters.Add(param5);
+
+                    var v_mode = dataColumn[6].ToArray();
+                    OracleParameter param6 = new OracleParameter("v_mode", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param6.Value = v_mode;
+                    param6.Size = v_mode.Length;
+                    command.Parameters.Add(param6);
+
+                    var v_amount = dataColumn[7].ToArray();
+                    OracleParameter param7 = new OracleParameter("v_amount", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param7.Value = v_amount;
+                    param7.Size = v_amount.Length;
+                    command.Parameters.Add(param7);
+
+                    var v_prefix = dataColumn[8].ToArray();
+                    OracleParameter param8 = new OracleParameter("v_prefix", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param8.Value = v_prefix;
+                    param8.Size = v_prefix.Length;
+                    command.Parameters.Add(param8);
+
+                    var v_command = dataColumn[9].ToArray();
+                    OracleParameter param9 = new OracleParameter("v_command", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param9.Value = v_command;
+                    param9.Size = v_command.Length;
+                    command.Parameters.Add(param9);
+
+                    var v_transaction = dataColumn[10].ToArray();
+                    OracleParameter param10 = new OracleParameter("v_transaction", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param10.Value = v_transaction;
+                    param10.Size = v_transaction.Length;
+                    command.Parameters.Add(param10);
+
+
+                    command.ExecuteNonQuery();
+
+
+
+                    transaction.Commit();
+
+                }
+
+            }
+            catch (OracleException ex)
+            {
+                Console.WriteLine(ex.ToString());
+                throw;
+            }
+            finally
+            {
+                connection.Close();
+            }
+        }
+
+
+
+        //coi nhu update cac reqeust tu MPS vao DB
+        public static DataSet UPDATE_MPS_DB(string msisdn, string svId, string subService, string requestId, string otp, string responseCode, string moneyCharge, string resultCall)
+        {
+            // {"title":"xxxx","serviceId":"30","content":"cong hoa xa hoi chu nghia","dateSend":"01/12/2020 01:01:10"}
+            string str;
+            str = "";
+            str = "MPS_PKG.UPDATE_RESPONSE_MPS";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceID", OracleDbType.NVarchar2),
+                                new OracleParameter("v_subServiceCode", OracleDbType.NVarchar2),
+                                new OracleParameter("v_requestID", OracleDbType.NVarchar2),
+                                new OracleParameter("v_otp", OracleDbType.NVarchar2),
+                                new OracleParameter("v_responseCode", OracleDbType.NVarchar2),
+                                new OracleParameter("v_money", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fullResult", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = msisdn;
+            parms[1].Value = svId;
+            parms[2].Value = subService;
+            parms[3].Value = requestId;
+            parms[4].Value = otp;
+            parms[5].Value = responseCode;
+            parms[6].Value = moneyCharge;
+            parms[7].Value = resultCall;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet MPS_GET_BY_ID(string id)
+        {
+            // {"title":"xxxx","serviceId":"30","content":"cong hoa xa hoi chu nghia","dateSend":"01/12/2020 01:01:10"}
+            string str;
+            str = "";
+            str = "MPS_PKG.MPS_GET_BY_ID";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = id;
+        
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet SEND_OTP(string msisdn,string serviceId,string channel,string language)
+        {
+            // {"title":"xxxx","serviceId":"30","content":"cong hoa xa hoi chu nghia","dateSend":"01/12/2020 01:01:10"}
+            string str;
+            str = "";
+            str = "MPS_PKG.OTP_SEND";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("v_user", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = msisdn;
+            parms[1].Value = serviceId;
+            parms[2].Value = channel;
+            parms[3].Value = language;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet CONFIRM_OTP(string msisdn, string serviceId, string channel, string language,string otp)
+        {
+            // {"title":"xxxx","serviceId":"30","content":"cong hoa xa hoi chu nghia","dateSend":"01/12/2020 01:01:10"}
+            string str;
+            str = "";
+            str = "MPS_PKG.OTP_CONFIRM";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("v_user", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+                                new OracleParameter("v_otp", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = msisdn;
+            parms[1].Value = serviceId;
+            parms[2].Value = channel;
+            parms[3].Value = language;
+            parms[4].Value = otp;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet GET_ERR_MSG_BY_CODE(string errCode,string serviceId, string channel, string language)
+        {
+            // {"title":"xxxx","serviceId":"30","content":"cong hoa xa hoi chu nghia","dateSend":"01/12/2020 01:01:10"}
+            string str;
+            str = "";
+            str = "MPS_PKG.GET_ERR_MSG_BY_CODE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("v_err_code", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = errCode;
+            parms[1].Value = serviceId;
+            parms[2].Value = channel;
+            parms[3].Value = language;
+           
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+        public static DataSet getDataFromProcedure(string sSQL, string sTableName, params OracleParameter[] cmdParms)
+        {
+            DataSet ds = new DataSet();
+            OracleConnection dbConnection = getPoolingConnection();
+            OracleDataAdapter dataAdapter;
+            dataAdapter = new OracleDataAdapter();
+            try
+            {
+                dataAdapter.SelectCommand = new OracleCommand(sSQL, dbConnection);
+                dataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
+                for (int i = 0; i < cmdParms.Length; i++)
+                    dataAdapter.SelectCommand.Parameters.Add(cmdParms[i]);
+                if (sTableName != "")
+                {
+                    dataAdapter.Fill(ds, sTableName);
+                }
+                else
+                    dataAdapter.Fill(ds);
+            }
+            catch (OracleException loadException)
+            {
+                
+                throw loadException;
+            }
+            catch (Exception unException)
+            {
+                throw unException;
+            }
+            finally
+            {
+                dbConnection.Close();
+            }
+            return ds;
+        }
+
+
+
+
+        public static OracleConnection getPoolingConnection()
+        {
+            //string conn = ConfigurationSettings.AppSettings["Connection"];
+            string conn = Common.GetValuesAppSetting("webConfig", "Connection");
+            OracleConnection dbConn = new OracleConnection(conn);
+            return dbConn;
+        }
+
+
+
+
+
+    }
+
+}

+ 40 - 0
ApiWeb/ApiProcessToken/Models/banlance/ResCommnon.cs

@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.balance
+{
+    public class ResCommnon
+    {
+        [JsonProperty("errCode")]
+        public string errCode { get; set; }
+
+        [JsonProperty("errMessage")]
+        public string errMessage { get; set; }
+
+        
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+        public ResCommnon()
+        {
+
+        }
+        public ResCommnon(string _responseCode,string _responseMessage)
+        {
+            this.errCode = _responseCode;
+            this.errMessage = _responseMessage;
+        }
+
+
+
+    }
+
+  
+
+}

+ 2629 - 0
ApiWeb/ApiProcessToken/Models/banlance/balanceDataAccess.cs

@@ -0,0 +1,2629 @@
+using Oracle.ManagedDataAccess.Client;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Threading.Channels;
+using System.Web;
+
+namespace ResfullApi.Models.balance
+{
+    public class balanceDataAccess
+    {
+        public balanceDataAccess()
+        {
+
+        }
+
+
+
+
+        public static void InsertBulkBlackList(string sSQL, List<List<string>> dataColumn)
+        {
+            OracleConnection connection = null;
+            try
+            {
+                connection = DataAccess.getPoolingConnection();
+                connection.Open();
+                OracleTransaction transaction;
+
+                // Start a local transaction
+                transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
+                using (var command = connection.CreateCommand())
+                {
+                    command.CommandText = sSQL;
+                    command.CommandType = CommandType.StoredProcedure;
+                    command.ArrayBindCount = dataColumn[0].Count;
+                    command.Transaction = transaction;
+
+
+
+
+                    var v_msisdn = dataColumn[0].ToArray();
+                    OracleParameter param0 = new OracleParameter("v_msisdn", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param0.Value = v_msisdn;
+                    param0.Size = v_msisdn.Length;
+                    command.Parameters.Add(param0);
+
+                    var v_type = dataColumn[1].ToArray();
+                    OracleParameter param1 = new OracleParameter("v_type", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param1.Value = v_type;
+                    param1.Size = v_type.Length;
+                    command.Parameters.Add(param1);
+
+                    var v_sv_id = dataColumn[2].ToArray();
+                    OracleParameter param2 = new OracleParameter("v_sv_id", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param2.Value = v_sv_id;
+                    param2.Size = v_sv_id.Length;
+                    command.Parameters.Add(param2);
+
+                    var v_action = dataColumn[3].ToArray();
+                    OracleParameter param3 = new OracleParameter("v_action", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param3.Value = v_action;
+                    param3.Size = v_action.Length;
+                    command.Parameters.Add(param3);
+
+
+                    var v_users = dataColumn[4].ToArray();
+                    OracleParameter param4 = new OracleParameter("v_users", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param4.Value = v_users;
+                    param4.Size = v_users.Length;
+                    command.Parameters.Add(param4);
+
+                    
+
+                    command.ExecuteNonQuery();
+
+
+
+                    transaction.Commit();
+
+                }
+
+            }
+            catch (OracleException ex)
+            {
+                Console.WriteLine(ex.ToString());
+                throw;
+            }
+            finally
+            {
+                connection.Close();
+            }
+        }
+
+
+
+
+
+
+        public static DataSet reportByCampaign(string v_users, string status,string v_fromDate, string v_toDate)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.REPORT_BY_CAMPAIGN";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_status", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_FROMDATE", OracleDbType.NVarchar2),
+                                new OracleParameter("v_TODATE", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_users;
+            parms[1].Value = status;
+
+            parms[2].Value = v_fromDate;
+            parms[3].Value = v_toDate;
+           
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet reportTotalByCampaign(string v_users,  string v_fromDate, string v_toDate,string status,string isDefault)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_GET_REPORT_TOTAL";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_status", OracleDbType.NVarchar2),
+                                new OracleParameter("v_isDefault", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_users;
+            parms[1].Value = v_fromDate;
+
+            parms[2].Value = v_toDate;
+            parms[3].Value = status;
+            parms[4].Value = isDefault;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+
+
+        public static DataSet comGetList(string v_id,string v_users, string v_name, string v_code, string v_fromDate, string v_toDate
+            , string v_order, string v_rowsOnPage, string v_seqPage)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.COM_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_name", OracleDbType.NVarchar2),
+                                new OracleParameter("v_code", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+
+            parms[2].Value = v_name;
+            parms[3].Value = v_code;
+            parms[4].Value = v_fromDate;
+            parms[5].Value = v_toDate;
+            parms[6].Value = v_order;
+            parms[7].Value = v_rowsOnPage;
+            parms[8].Value = v_seqPage;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet comInsert(string V_CODE, string V_NAME,string V_PHONE,string V_EMAIL,string V_ADDRESS,string V_DESCRIPTION,
+            string V_NOTE,string V_USERS)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.COM_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_PHONE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_EMAIL", OracleDbType.NVarchar2),
+                                new OracleParameter("V_ADDRESS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DESCRIPTION", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CODE;
+            parms[1].Value = V_NAME;
+            parms[2].Value = V_PHONE;
+            parms[3].Value = V_EMAIL;
+            parms[4].Value = V_ADDRESS;
+            parms[5].Value = V_DESCRIPTION;
+
+            parms[6].Value = V_NOTE;
+            parms[7].Value = V_USERS;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet comUpdate(string V_ID,string V_CODE, string V_NAME, string V_PHONE, string V_EMAIL, string V_ADDRESS, string V_DESCRIPTION,
+            string V_NOTE, string V_USERS,string V_TYPE)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.COM_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_PHONE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_EMAIL", OracleDbType.NVarchar2),
+                                new OracleParameter("V_ADDRESS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DESCRIPTION", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_ID;
+            parms[1].Value = V_CODE;
+            parms[2].Value = V_NAME;
+            parms[3].Value = V_PHONE;
+            parms[4].Value = V_EMAIL;
+            parms[5].Value = V_ADDRESS;
+            parms[6].Value = V_DESCRIPTION;
+
+            parms[7].Value = V_NOTE;
+            parms[8].Value = V_USERS;
+            parms[9].Value = V_TYPE;
+            
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet listSubGetList(string v_id, string v_users,string V_sub_type, string v_name,string v_code,string v_fromDate,string v_toDate
+            , string v_order,string v_rowsOnPage,string v_seqPage,string v_isActive)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.LIST_SUB_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("V_sub_type", OracleDbType.NVarchar2),
+                                new OracleParameter("v_name", OracleDbType.NVarchar2),
+                                new OracleParameter("v_code", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_isActive", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+            parms[2].Value = V_sub_type;
+            parms[3].Value = v_name;
+            parms[4].Value = v_code;
+            parms[5].Value = v_fromDate;
+            parms[6].Value = v_toDate;
+            parms[7].Value = v_order;
+            parms[8].Value = v_rowsOnPage;
+            parms[9].Value = v_seqPage;
+            parms[10].Value = v_isActive;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet blistSubInsert(string V_CODE, string V_NAME,
+            string V_NOTE, string V_USERS,string V_SUB_TYPE)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.LIST_SUB_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_SUB_TYPE", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CODE;
+            parms[1].Value = V_NAME;
+           
+
+            parms[2].Value = V_NOTE;
+            parms[3].Value = V_USERS;
+            parms[4].Value = V_SUB_TYPE;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet blistSubUpdate(string V_ID, string V_CODE, string V_NAME,string V_SUB_TYPE,
+            string V_NOTE, string V_USERS, string V_TYPE,string status)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.LIST_SUB_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_SUB_TYPE", OracleDbType.NVarchar2),
+                                
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_STATUS", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_ID;
+            parms[1].Value = V_CODE;
+            parms[2].Value = V_NAME;
+            parms[3].Value = V_SUB_TYPE;
+           
+
+
+            parms[4].Value = V_NOTE;
+            parms[5].Value = V_USERS;
+            parms[6].Value = V_TYPE;
+            parms[7].Value = status;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+        public static DataSet listSubFileGetList(string v_id, string v_users, string V_list_sub_id, string v_name, string v_code, string v_fromDate, string v_toDate
+            , string v_order, string v_rowsOnPage, string v_seqPage)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.LIST_SUB_FILE_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("V_list_sub_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_name", OracleDbType.NVarchar2),
+                                new OracleParameter("v_code", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+
+
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+            parms[2].Value = V_list_sub_id;
+            parms[3].Value = v_name;
+            parms[4].Value = v_code;
+            parms[5].Value = v_fromDate;
+            parms[6].Value = v_toDate;
+            parms[7].Value = v_order;
+            parms[8].Value = v_rowsOnPage;
+            parms[9].Value = v_seqPage;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet blistSubFileInsert(string V_CODE, string V_NAME,
+            string V_NOTE, string V_USERS, string V_LIST_SUB_ID, string V_FILE_ID, string V_FILE_NAME)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.LIST_SUB_FILE_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_LIST_SUB_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_FILE_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_FILE_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CODE;
+            parms[1].Value = V_NAME;
+
+
+            parms[2].Value = V_NOTE;
+            parms[3].Value = V_USERS;
+            parms[4].Value = V_LIST_SUB_ID;
+            parms[5].Value = V_FILE_ID;
+            parms[6].Value = V_FILE_NAME;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet blistSubFileUpdate(string V_ID, string V_CODE, string V_NAME, string V_LIST_SUB_ID,
+            string V_NOTE, string V_USERS, string V_TYPE,string status)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.LIST_SUB_FILE_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_LIST_SUB_ID", OracleDbType.NVarchar2),
+
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_STATUS", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_ID;
+            parms[1].Value = V_CODE;
+            parms[2].Value = V_NAME;
+            parms[3].Value = V_LIST_SUB_ID;
+
+
+
+            parms[4].Value = V_NOTE;
+            parms[5].Value = V_USERS;
+            parms[6].Value = V_TYPE;
+            parms[7].Value = status;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet sortCodeGetList(  string v_type, string v_users)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.SORT_CODE_GET_LIST";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_type", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_type;
+            parms[1].Value = v_users;
+
+           
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet changeStatus(string v_type,string v_id, string v_status, string v_users)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CHANGE_STATUS";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_type", OracleDbType.NVarchar2),
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_status", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_type;
+            parms[1].Value = v_id;
+            parms[2].Value = v_status;
+            parms[3].Value = v_users;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+        public static DataSet balGetList(string v_id, string v_users,string v_name,string v_code,string v_fromDate,string v_toDate
+            , string v_order,string v_rowsOnPage,string v_seqPage,string isActive)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.BL_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_name", OracleDbType.NVarchar2),
+                                new OracleParameter("v_code", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_isActive", OracleDbType.NVarchar2),
+
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+
+            parms[2].Value = v_name;
+            parms[3].Value = v_code;
+            parms[4].Value = v_fromDate;
+            parms[5].Value = v_toDate;
+            parms[6].Value = v_order;
+            parms[7].Value = v_rowsOnPage;
+            parms[8].Value = v_seqPage;
+            parms[9].Value = isActive;
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet balInsert(string V_CODE, string V_NAME, string V_MIN, string V_MAX,
+            string V_NOTE, string V_USERS)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.BL_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_MIN", OracleDbType.NVarchar2),
+                                new OracleParameter("V_MAX", OracleDbType.NVarchar2),
+                               
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CODE;
+            parms[1].Value = V_NAME;
+            parms[2].Value = V_MIN;
+            parms[3].Value = V_MAX;
+          
+
+            parms[4].Value = V_NOTE;
+            parms[5].Value = V_USERS;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet balUpdate(string V_ID,string V_CODE, string V_NAME, string V_MIN, string V_MAX,
+            string V_NOTE, string V_USERS,string V_TYPE)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.BL_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_MIN", OracleDbType.NVarchar2),
+                                new OracleParameter("V_MAX", OracleDbType.NVarchar2),
+
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_ID;
+            parms[1].Value = V_CODE;
+            parms[2].Value = V_NAME;
+            parms[3].Value = V_MIN;
+            parms[4].Value = V_MAX;
+            
+
+            parms[5].Value = V_NOTE;
+            parms[6].Value = V_USERS;
+            parms[7].Value = V_TYPE;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+        public static DataSet expGetList(string v_id, string v_users, string v_name, string v_code, string v_fromDate, string v_toDate
+            , string v_order, string v_rowsOnPage, string v_seqPage,string v_isActive)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.EP_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_name", OracleDbType.NVarchar2),
+                                new OracleParameter("v_code", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_isActive", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+
+            parms[2].Value = v_name;
+            parms[3].Value = v_code;
+            parms[4].Value = v_fromDate;
+            parms[5].Value = v_toDate;
+            parms[6].Value = v_order;
+            parms[7].Value = v_rowsOnPage;
+            parms[8].Value = v_seqPage;
+            parms[9].Value = v_isActive;
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet expInsert(string V_CODE, string V_NAME, string V_TOTAL_DAY_USE,
+            string V_NOTE, string V_USERS,string min,string max)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.EP_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TOTAL_DAY_USE", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_MIN", OracleDbType.NVarchar2),
+                                new OracleParameter("V_MAX", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CODE;
+            parms[1].Value = V_NAME;
+            parms[2].Value = V_TOTAL_DAY_USE;
+           
+
+            parms[3].Value = V_NOTE;
+            parms[4].Value = V_USERS;
+
+            parms[5].Value = min;
+            parms[6].Value = max;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet expUpdate(string V_ID, string V_CODE, string V_NAME, string V_TOTAL_DAY_USE,
+            string V_NOTE, string V_USERS, string V_TYPE,string min,string max)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.EP_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TOTAL_DAY_USE", OracleDbType.NVarchar2),
+                              
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_MIN", OracleDbType.NVarchar2),
+                                new OracleParameter("V_MAX", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_ID;
+            parms[1].Value = V_CODE;
+            parms[2].Value = V_NAME;
+            parms[3].Value = V_TOTAL_DAY_USE;
+            
+            parms[4].Value = V_NOTE;
+            parms[5].Value = V_USERS;
+            parms[6].Value = V_TYPE;
+
+            parms[7].Value = min;
+            parms[8].Value = max;
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+
+
+        public static DataSet paramGetList(string v_id, string v_users)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.PAM_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet paramInsert(string V_CODE, string V_SVALUES, string V_NOTE,
+            string V_STATUS, string V_CODE_GROUP, string V_DISPLAY0, string V_DISPLAY1, string V_DISPLAY2, string V_DISPLAY3,
+            string V_DISPLAY4, string V_DISPLAY5, string V_GAME_ID, string V_CHANNEL, string V_USERS)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.PAM_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_SVALUES", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_STATUS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CODE_GROUP", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_DISPLAY0", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY1", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY2", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY3", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY4", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY5", OracleDbType.NVarchar2),
+                                new OracleParameter("V_GAME_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CHANNEL", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CODE;
+            parms[1].Value = V_SVALUES;
+            parms[2].Value = V_NOTE;
+            parms[3].Value = V_STATUS;
+            parms[4].Value = V_CODE_GROUP;
+
+            parms[5].Value = V_DISPLAY0;
+            parms[6].Value = V_DISPLAY1;
+            parms[7].Value = V_DISPLAY2;
+            parms[8].Value = V_DISPLAY3;
+            parms[9].Value = V_DISPLAY4;
+            parms[10].Value = V_DISPLAY5;
+
+            parms[11].Value = V_GAME_ID;
+            parms[12].Value = V_CHANNEL;
+            parms[13].Value = V_USERS;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet paramUpdate(string V_ID, string V_CODE, string V_SVALUES, string V_NOTE,
+            string V_STATUS, string V_CODE_GROUP, string V_DISPLAY0, string V_DISPLAY1, string V_DISPLAY2, string V_DISPLAY3,
+            string V_DISPLAY4, string V_DISPLAY5, string V_GAME_ID, string V_CHANNEL, string V_USERS, string V_TYPE)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.PAM_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_SVALUES", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_STATUS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CODE_GROUP", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_DISPLAY0", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY1", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY2", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY3", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY4", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY5", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_GAME_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CHANNEL", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_ID;
+            parms[1].Value = V_CODE;
+            parms[2].Value = V_SVALUES;
+            parms[3].Value = V_NOTE;
+            parms[4].Value = V_STATUS;
+            parms[5].Value = V_CODE_GROUP;
+
+            parms[6].Value = V_DISPLAY0;
+            parms[7].Value = V_DISPLAY1;
+            parms[8].Value = V_DISPLAY2;
+            parms[9].Value = V_DISPLAY3;
+            parms[10].Value = V_DISPLAY4;
+            parms[11].Value = V_DISPLAY5;
+
+            parms[12].Value = V_GAME_ID;
+            parms[13].Value = V_CHANNEL;
+            parms[14].Value = V_USERS;
+            parms[15].Value = V_TYPE;
+
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+
+
+
+
+        public static DataSet usersGetList(string v_id, string v_users)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.USERS_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet usersInsert(string V_USERNAME, string V_PASSWORD, string V_ROLE,
+            string V_COUNTRY_CODE, string V_IS_LOCK, string V_TOTAL_FALSE, string V_TIME_LOCK, string V_NOTE, string V_USERS)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.USERS_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_USERNAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_PASSWORD", OracleDbType.NVarchar2),
+                                new OracleParameter("V_ROLE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_COUNTRY_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_IS_LOCK", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_TOTAL_FALSE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TIME_LOCK", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_USERNAME;
+            parms[1].Value = V_PASSWORD;
+            parms[2].Value = V_ROLE;
+            parms[3].Value = V_COUNTRY_CODE;
+            parms[4].Value = V_IS_LOCK;
+
+            parms[5].Value = V_TOTAL_FALSE;
+            parms[6].Value = V_TIME_LOCK;
+            parms[7].Value = V_NOTE;
+            parms[8].Value = V_USERS;
+            
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet usersUpdate(string V_ID, string V_USERNAME, string V_PASSWORD, string V_ROLE,
+            string V_COUNTRY_CODE, string V_IS_LOCK, string V_TOTAL_FALSE, string V_TIME_LOCK, string V_NOTE, string V_USERS, string V_TYPE)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.USERS_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERNAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_PASSWORD", OracleDbType.NVarchar2),
+                                new OracleParameter("V_ROLE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_COUNTRY_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_IS_LOCK", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_TOTAL_FALSE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TIME_LOCK", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_ID;
+            parms[1].Value = V_USERNAME;
+            parms[2].Value = V_PASSWORD;
+            parms[3].Value = V_ROLE;
+            parms[4].Value = V_COUNTRY_CODE;
+            parms[5].Value = V_IS_LOCK;
+
+            parms[6].Value = V_TOTAL_FALSE;
+            parms[7].Value = V_TIME_LOCK;
+            parms[8].Value = V_NOTE;
+            parms[9].Value = V_USERS;
+            parms[10].Value = V_TYPE;
+
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+        public static DataSet svGetList(string v_id, string v_users, string v_name, string v_code, string v_fromDate, string v_toDate
+            , string v_order, string v_rowsOnPage, string v_seqPage,string isActive)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.SV_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                 new OracleParameter("v_name", OracleDbType.NVarchar2),
+                                new OracleParameter("v_code", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_isActive", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+
+            parms[2].Value = v_name;
+            parms[3].Value = v_code;
+            parms[4].Value = v_fromDate;
+            parms[5].Value = v_toDate;
+            parms[6].Value = v_order;
+            parms[7].Value = v_rowsOnPage;
+            parms[8].Value = v_seqPage;
+            parms[9].Value = isActive;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet svInsert(string V_CODE, string V_NAME, string V_DESCRIPTION,
+            string V_SHORT_CODE, string V_COMMAND_REGISTER, string V_CONTENT_EN, string V_CONTENT_FR, string V_CONTENT_LC, string V_NOTE,
+            string V_COMPANY_ID, string V_USERS, string msgRegisterSuccess, string msgRegisterFlase,string msgConfirm)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.SV_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DESCRIPTION", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_SHORT_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_COMMAND_REGISTER", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_CONTENT_EN", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CONTENT_FR", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CONTENT_LC", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_COMPANY_ID", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+
+                                 new OracleParameter("V_USSD_MSG_REGISTER_SUC", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USSD_MSG_REGISTER_FAIL", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USSD_CONFIRM", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CODE;
+            parms[1].Value = V_NAME;
+            parms[2].Value = V_DESCRIPTION;
+            parms[3].Value = V_SHORT_CODE;
+            parms[4].Value = V_COMMAND_REGISTER;
+
+            parms[5].Value = V_CONTENT_EN;
+            parms[6].Value = V_CONTENT_FR;
+            parms[7].Value = V_CONTENT_LC;
+            parms[8].Value = V_NOTE;
+            parms[9].Value = V_COMPANY_ID;
+            parms[10].Value = V_USERS;
+
+            parms[11].Value = msgRegisterSuccess;
+            parms[12].Value = msgRegisterFlase;
+            parms[13].Value = msgConfirm;
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet svUpdate(string V_ID,string V_CODE, string V_NAME, string V_DESCRIPTION,
+            string V_SHORT_CODE, string V_COMMAND_REGISTER, string V_CONTENT_EN, string V_CONTENT_FR, string V_CONTENT_LC, string V_NOTE,
+            string V_COMPANY_ID, string V_USERS, string V_TYPE, string msgRegisterSuccess, string msgRegisterFlase,string msgConfirm)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.SV_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+
+                                 new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DESCRIPTION", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_SHORT_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_COMMAND_REGISTER", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_CONTENT_EN", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CONTENT_FR", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CONTENT_LC", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_COMPANY_ID", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+                                 new OracleParameter("V_USSD_MSG_REGISTER_SUC", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USSD_MSG_REGISTER_FAIL", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USSD_CONFIRM", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_ID;
+            parms[1].Value = V_CODE;
+            parms[2].Value = V_NAME;
+            parms[3].Value = V_DESCRIPTION;
+            parms[4].Value = V_SHORT_CODE;
+            parms[5].Value = V_COMMAND_REGISTER;
+
+            parms[6].Value = V_CONTENT_EN;
+            parms[7].Value = V_CONTENT_FR;
+            parms[8].Value = V_CONTENT_LC;
+            parms[9].Value = V_NOTE;
+            parms[10].Value = V_COMPANY_ID;
+          
+            parms[11].Value = V_USERS;
+            parms[12].Value = V_TYPE;
+
+            parms[13].Value = msgRegisterSuccess;
+            parms[14].Value = msgRegisterFlase;
+            parms[15].Value = msgConfirm;
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet svAddGetList(string v_id, string v_users, string v_name, string v_code, string v_fromDate, string v_toDate
+            , string v_order, string v_rowsOnPage, string v_seqPage)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.SVADD_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_name", OracleDbType.NVarchar2),
+                                new OracleParameter("v_code", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+
+            parms[2].Value = v_name;
+            parms[3].Value = v_code;
+            parms[4].Value = v_fromDate;
+            parms[5].Value = v_toDate;
+            parms[6].Value = v_order;
+            parms[7].Value = v_rowsOnPage;
+            parms[8].Value = v_seqPage;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet svAddInsert(string V_CODE, string V_NAME, string V_ADD_TYPE,
+            string V_NUMBER_DISPLAY, string V_PRIORITY, string V_SERVICE_ID, string V_NOTE,
+             string V_USERS)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.SVADD_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_ADD_TYPE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_NUMBER_DISPLAY", OracleDbType.NVarchar2),
+                                new OracleParameter("V_PRIORITY", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_SERVICE_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                               
+
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CODE;
+            parms[1].Value = V_NAME;
+            parms[2].Value = V_ADD_TYPE;
+            parms[3].Value = V_NUMBER_DISPLAY;
+            parms[4].Value = V_PRIORITY;
+
+            parms[5].Value = V_SERVICE_ID;
+            parms[6].Value = V_NOTE;
+            parms[7].Value = V_USERS;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet svAddUpdate(string V_ID, string V_CODE, string V_NAME, string V_ADD_TYPE,
+            string V_NUMBER_DISPLAY, string V_PRIORITY, string V_SERVICE_ID, string V_NOTE, string V_USERS, string V_TYPE)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.SVADD_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_ADD_TYPE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_NUMBER_DISPLAY", OracleDbType.NVarchar2),
+                                new OracleParameter("V_PRIORITY", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_SERVICE_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+
+
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_ID;
+            parms[1].Value = V_CODE;
+            parms[2].Value = V_NAME;
+            parms[3].Value = V_ADD_TYPE;
+            parms[4].Value = V_NUMBER_DISPLAY;
+            parms[5].Value = V_PRIORITY;
+
+            parms[6].Value = V_SERVICE_ID;
+            parms[7].Value = V_NOTE;
+
+            parms[8].Value = V_USERS;
+            parms[9].Value = V_TYPE;
+
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+
+
+        public static DataSet camGetList(string v_id, string v_users, string v_name, string v_code, string v_fromDate, string v_toDate
+            , string v_order, string v_rowsOnPage, string v_seqPage,string v_status,string isDefault,string isMyservice)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_name", OracleDbType.NVarchar2),
+                                new OracleParameter("v_code", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_status", OracleDbType.NVarchar2),
+                                new OracleParameter("v_isDefault", OracleDbType.NVarchar2),
+                                new OracleParameter("v_isMyservice", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+
+            parms[2].Value = v_name;
+            parms[3].Value = v_code;
+            parms[4].Value = v_fromDate;
+            parms[5].Value = v_toDate;
+            parms[6].Value = v_order;
+            parms[7].Value = v_rowsOnPage;
+            parms[8].Value = v_seqPage;
+            parms[9].Value = v_status;
+            parms[10].Value = isDefault;
+            parms[11].Value = isMyservice;
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet camGetListCalendar( string v_users, string v_fromDate, string v_toDate,string status)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_GET_CALENDAR";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                               
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_status", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+           
+            parms[0].Value = v_users;
+
+          
+            parms[1].Value = v_fromDate;
+            parms[2].Value = v_toDate;
+            parms[3].Value = status;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+        public static DataSet camInsert(string V_CODE, string V_NAME, string V_FROM_DATE,
+            string V_TO_DATE, string V_FROM_HOUR, string V_TO_HOUR, string V_RULE_ADD,
+             string V_PRIORITY, string V_BALANCE_ID, string V_EXPIRE_DATE_ID, string V_STATUS, string V_NOTE, string V_USERS,string V_NUMBERDIS,string addType,string title,string isDefault,string isMyservice)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_FROM_DATE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_TO_DATE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_FROM_HOUR", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_TO_HOUR", OracleDbType.NVarchar2),
+                                new OracleParameter("V_RULE_ADD", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_PRIORITY", OracleDbType.NVarchar2),
+                                new OracleParameter("V_BALANCE_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_EXPIRE_DATE_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_STATUS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY", OracleDbType.NVarchar2),
+                                new OracleParameter("V_ADD_TYPE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TITLE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DEFAULT", OracleDbType.NVarchar2),
+                                new OracleParameter("V_MYSERVICE", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CODE;
+            parms[1].Value = V_NAME;
+            parms[2].Value = V_FROM_DATE;
+            parms[3].Value = V_TO_DATE;
+            parms[4].Value = V_FROM_HOUR;
+
+            parms[5].Value = V_TO_HOUR;
+            parms[6].Value = V_RULE_ADD;
+            parms[7].Value = V_PRIORITY;
+            parms[8].Value = V_BALANCE_ID;
+            parms[9].Value = V_EXPIRE_DATE_ID;
+            parms[10].Value = V_STATUS;
+            parms[11].Value = V_NOTE;
+            parms[12].Value = V_USERS;
+            parms[13].Value = V_NUMBERDIS;
+            parms[14].Value = addType;
+            parms[15].Value = title;
+            parms[16].Value = isDefault;
+            parms[17].Value = isMyservice;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet camUpdate(string V_ID, string V_CODE, string V_NAME, string V_FROM_DATE,
+            string V_TO_DATE, string V_FROM_HOUR, string V_TO_HOUR, string V_RULE_ADD,
+             string V_PRIORITY, string V_BALANCE_ID, string V_EXPIRE_DATE_ID, string V_STATUS, string V_NOTE, string V_USERS, string V_TYPE,string DISPLAY,string addType,string title,string isDefault,string isMyService)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_FROM_DATE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_TO_DATE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_FROM_HOUR", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_TO_HOUR", OracleDbType.NVarchar2),
+                                new OracleParameter("V_RULE_ADD", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_PRIORITY", OracleDbType.NVarchar2),
+                                new OracleParameter("V_BALANCE_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_EXPIRE_DATE_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_STATUS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+
+
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY", OracleDbType.NVarchar2),
+                                new OracleParameter("V_ADD_TYPE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TITLE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DEFAULT", OracleDbType.NVarchar2),
+                                new OracleParameter("V_MYSERVICE", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_ID;
+            parms[1].Value = V_CODE;
+            parms[2].Value = V_NAME;
+            parms[3].Value = V_FROM_DATE;
+            parms[4].Value = V_TO_DATE;
+            parms[5].Value = V_FROM_HOUR;
+
+            parms[6].Value = V_TO_HOUR;
+            parms[7].Value = V_RULE_ADD;
+            parms[8].Value = V_PRIORITY;
+            parms[9].Value = V_BALANCE_ID;
+            parms[10].Value = V_EXPIRE_DATE_ID;
+            parms[11].Value = V_STATUS;
+            parms[12].Value = V_NOTE;
+
+            parms[13].Value = V_USERS;
+            parms[14].Value = V_TYPE;
+            parms[15].Value = DISPLAY;
+            parms[16].Value = addType;
+            parms[17].Value = title;
+            parms[18].Value = isDefault;
+            parms[19].Value = isMyService;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet camCopy(string id)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_COPPY";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = id;
+            
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet camBalGetList(string v_id, string v_users, string v_campaignId, string v_fromDate, string v_toDate
+            , string v_order, string v_rowsOnPage, string v_seqPage,string  channel,string language)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_BAL_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_campaignId", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_channel", OracleDbType.Varchar2),
+                                new OracleParameter("v_language", OracleDbType.Varchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+
+            parms[2].Value = v_campaignId;
+
+            parms[3].Value = v_fromDate;
+            parms[4].Value = v_toDate;
+            parms[5].Value = v_order;
+            parms[6].Value = v_rowsOnPage;
+            parms[7].Value = v_seqPage;
+            parms[8].Value = channel;
+            parms[9].Value = language;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet camBalInsert(string V_CAMPAING_ID, string V_REF_ID, string V_NOTE, string V_USERS, string v_channel
+            , string v_language)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_BAL_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CAMPAING_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_REF_ID", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CAMPAING_ID;
+            parms[1].Value = V_REF_ID;
+
+            parms[2].Value = V_NOTE;
+
+            parms[3].Value = V_USERS;
+            parms[4].Value = v_channel;
+            parms[5].Value = v_language;
+            
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet camBalUpdate(string V_CAMPAING_ID, string V_REF_ID, string V_NOTE, string V_USERS, string v_channel
+            , string v_language,string id,string type)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_BAL_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CAMPAING_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_REF_ID", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CAMPAING_ID;
+            parms[1].Value = V_REF_ID;
+
+            parms[2].Value = V_NOTE;
+
+            parms[3].Value = V_USERS;
+            parms[4].Value = v_channel;
+            parms[5].Value = v_language;
+            parms[6].Value = id;
+            parms[7].Value = type;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+        public static DataSet camSubGetList(string v_id, string v_users, string v_campaignId, string v_fromDate, string v_toDate
+            , string v_order, string v_rowsOnPage, string v_seqPage, string channel, string language)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_SUB_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_campaignId", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_channel", OracleDbType.Varchar2),
+                                new OracleParameter("v_language", OracleDbType.Varchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+
+            parms[2].Value = v_campaignId;
+
+            parms[3].Value = v_fromDate;
+            parms[4].Value = v_toDate;
+            parms[5].Value = v_order;
+            parms[6].Value = v_rowsOnPage;
+            parms[7].Value = v_seqPage;
+            parms[8].Value = channel;
+            parms[9].Value = language;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet camSubInsert(string V_CAMPAING_ID, string V_REF_ID, string V_NOTE, string V_USERS, string v_channel
+            , string v_language)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_SUB_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CAMPAING_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_REF_ID", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CAMPAING_ID;
+            parms[1].Value = V_REF_ID;
+
+            parms[2].Value = V_NOTE;
+
+            parms[3].Value = V_USERS;
+            parms[4].Value = v_channel;
+            parms[5].Value = v_language;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet camSubUpdate(string V_CAMPAING_ID, string V_REF_ID, string V_NOTE, string V_USERS, string v_channel
+            , string v_language, string id, string type)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_SUB_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CAMPAING_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_REF_ID", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CAMPAING_ID;
+            parms[1].Value = V_REF_ID;
+
+            parms[2].Value = V_NOTE;
+
+            parms[3].Value = V_USERS;
+            parms[4].Value = v_channel;
+            parms[5].Value = v_language;
+            parms[6].Value = id;
+            parms[7].Value = type;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet camExpGetList(string v_id, string v_users, string v_campaignId, string v_fromDate, string v_toDate
+            , string v_order, string v_rowsOnPage, string v_seqPage, string channel, string language)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_EXP_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_campaignId", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_channel", OracleDbType.Varchar2),
+                                new OracleParameter("v_language", OracleDbType.Varchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+
+            parms[2].Value = v_campaignId;
+
+            parms[3].Value = v_fromDate;
+            parms[4].Value = v_toDate;
+            parms[5].Value = v_order;
+            parms[6].Value = v_rowsOnPage;
+            parms[7].Value = v_seqPage;
+            parms[8].Value = channel;
+            parms[9].Value = language;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet camExpInsert(string V_CAMPAING_ID, string V_REF_ID, string V_NOTE, string V_USERS, string v_channel
+            , string v_language)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_EXP_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CAMPAING_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_REF_ID", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CAMPAING_ID;
+            parms[1].Value = V_REF_ID;
+
+            parms[2].Value = V_NOTE;
+
+            parms[3].Value = V_USERS;
+            parms[4].Value = v_channel;
+            parms[5].Value = v_language;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet camExpUpdate(string V_CAMPAING_ID, string V_REF_ID, string V_NOTE, string V_USERS, string v_channel
+            , string v_language, string id, string type)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_EXP_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CAMPAING_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_REF_ID", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CAMPAING_ID;
+            parms[1].Value = V_REF_ID;
+
+            parms[2].Value = V_NOTE;
+
+            parms[3].Value = V_USERS;
+            parms[4].Value = v_channel;
+            parms[5].Value = v_language;
+            parms[6].Value = id;
+            parms[7].Value = type;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+
+
+
+        public static DataSet camScGetList(string v_id, string v_users, string v_campaignId, string v_fromDate, string v_toDate
+            , string v_order, string v_rowsOnPage, string v_seqPage, string channel, string language)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_SC_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_campaignId", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_channel", OracleDbType.Varchar2),
+                                new OracleParameter("v_language", OracleDbType.Varchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+
+            parms[2].Value = v_campaignId;
+
+            parms[3].Value = v_fromDate;
+            parms[4].Value = v_toDate;
+            parms[5].Value = v_order;
+            parms[6].Value = v_rowsOnPage;
+            parms[7].Value = v_seqPage;
+            parms[8].Value = channel;
+            parms[9].Value = language;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet camScInsert(string V_CAMPAING_ID, string V_REF_ID, string V_NOTE, string V_USERS, string v_channel
+            , string v_language)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_SC_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CAMPAING_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_REF_ID", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CAMPAING_ID;
+            parms[1].Value = V_REF_ID;
+
+            parms[2].Value = V_NOTE;
+
+            parms[3].Value = V_USERS;
+            parms[4].Value = v_channel;
+            parms[5].Value = v_language;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet camScUpdate(string V_CAMPAING_ID, string V_REF_ID, string V_NOTE, string V_USERS, string v_channel
+            , string v_language, string id, string type)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAM_SC_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CAMPAING_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_REF_ID", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CAMPAING_ID;
+            parms[1].Value = V_REF_ID;
+
+            parms[2].Value = V_NOTE;
+
+            parms[3].Value = V_USERS;
+            parms[4].Value = v_channel;
+            parms[5].Value = v_language;
+            parms[6].Value = id;
+            parms[7].Value = type;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+
+
+        public static DataSet camAddGetList(string v_id, string v_users, string v_campaignId, string v_fromDate, string v_toDate
+            , string v_order, string v_rowsOnPage, string v_seqPage)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAMADD_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_campaignId", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+
+            parms[2].Value = v_campaignId;
+          
+            parms[3].Value = v_fromDate;
+            parms[4].Value = v_toDate;
+            parms[5].Value = v_order;
+            parms[6].Value = v_rowsOnPage;
+            parms[7].Value = v_seqPage;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet camAddInsert(string V_CAMPAING_ID, string V_SERVICE_ADD_ID, string V_NOTE, string V_USERS,
+            string ussdDisplay,string keyRegister)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAMADD_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CAMPAING_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_SERVICE_ADD_ID", OracleDbType.NVarchar2),
+                             
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USSD_DIS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_KEY_REGIS", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CAMPAING_ID;
+            parms[1].Value = V_SERVICE_ADD_ID;
+            parms[2].Value = V_NOTE;
+            parms[3].Value = V_USERS;
+            parms[4].Value = ussdDisplay;
+            parms[5].Value = keyRegister;
+
+          
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet camAddUpdate(string V_ID, string V_CAMPAING_ID, string V_SERVICE_ADD_ID, string V_NOTE, 
+            string V_USERS, string V_TYPE,string ussdDisplay,string keyRegister)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.CAMADD_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_CAMPAING_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_SERVICE_ADD_ID", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+
+
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USSD_DIS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_KEY_REGIS", OracleDbType.NVarchar2),
+
+                               
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_ID;
+            parms[1].Value = V_CAMPAING_ID;
+            parms[2].Value = V_SERVICE_ADD_ID;
+            
+            parms[3].Value = V_NOTE;
+
+            parms[4].Value = V_USERS;
+            parms[5].Value = V_TYPE;
+            parms[6].Value = ussdDisplay;
+            parms[7].Value = keyRegister;
+
+           
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet ADMIN_USERS_FUNCTION(string role)
+        {
+            // {"msisdn":"50940227941","users":"123","pass":"123","serviceId":"23","type":"DK","channel":"WEB"}
+            string str;
+            str = "";
+            str = "BALANCE_PKG.ADMIN_GET_ROLE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_role", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = role;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet ADMIN_USERS_INFO(string v_users, string v_pass)
+        {
+            // {"msisdn":"50940227941","users":"123","pass":"123","serviceId":"23","type":"DK","channel":"WEB"}
+            string str;
+            str = "";
+            str = "BALANCE_PKG.ADMIN_LOGIN";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_user", OracleDbType.NVarchar2),
+                                new OracleParameter("v_pass", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_users;
+            parms[1].Value = v_pass;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+        public static DataSet ngamGetList(string v_id, string v_users)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.TMP_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet ngamInsert(string V_NAME, string V_SV, string V_MSG,
+            string V_FD, string V_TD, string V_PC, string V_ADD_TYPE, string V_USERS)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.TMP_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_SV", OracleDbType.NVarchar2),
+                                new OracleParameter("V_MSG", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_FD", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TD", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_PC", OracleDbType.NVarchar2),
+                                new OracleParameter("V_ADD_TYPE", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_NAME;
+            parms[1].Value = V_SV;
+            parms[2].Value = V_MSG;
+            parms[3].Value = V_FD;
+            parms[4].Value = V_TD;
+            parms[5].Value = V_PC;
+            parms[6].Value = V_ADD_TYPE;
+            parms[7].Value = V_USERS;
+           
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet ngamUpdate(string V_ID, string V_NAME, string V_SV, string V_MSG,
+            string V_FD, string V_TD, string V_PC, string V_ADD_TYPE, string V_USERS, string V_TYPE)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.TMP_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+                                 new OracleParameter("V_NAME", OracleDbType.NVarchar2),
+                                new OracleParameter("V_SV", OracleDbType.NVarchar2),
+                                new OracleParameter("V_MSG", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_FD", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TD", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_PC", OracleDbType.NVarchar2),
+                                new OracleParameter("V_ADD_TYPE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_ID;
+            parms[1].Value = V_NAME;
+            parms[2].Value = V_SV;
+            parms[3].Value = V_MSG;
+            parms[4].Value = V_FD;
+            parms[5].Value = V_TD;
+            parms[6].Value = V_PC;
+            parms[7].Value = V_ADD_TYPE;
+            parms[8].Value = V_USERS;
+            parms[9].Value = V_TYPE;
+
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+        public static DataSet blackGettList(string msisdn,string type,string  svid, string v_users)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.BLACK_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_type", OracleDbType.NVarchar2),
+                                new OracleParameter("v_sv_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = msisdn;
+            parms[1].Value = type;
+            parms[2].Value = svid;
+            parms[3].Value = v_users;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+        public static DataSet lkpw_result_update(string v_randomId, string v_users, string v_result, string v_status, string v_note)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.lkpw_result_update";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_randomId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_result", OracleDbType.NVarchar2),
+                                new OracleParameter("v_status", OracleDbType.NVarchar2),
+                                new OracleParameter("v_note", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_randomId;
+            parms[1].Value = v_users;
+            parms[2].Value = v_result;
+            parms[3].Value = v_status;
+            parms[4].Value = v_note;
+           
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+
+
+        public static void InsertBulkExport(string sSQL, List<List<string>> dataColumn)
+        {
+            OracleConnection connection = null;
+            try
+            {
+                connection =DataAccess.getPoolingConnection();
+                connection.Open();
+                OracleTransaction transaction;
+
+                // Start a local transaction
+                transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
+                using (var command = connection.CreateCommand())
+                {
+                    command.CommandText = sSQL;
+                    command.CommandType = CommandType.StoredProcedure;
+                    command.ArrayBindCount = dataColumn[0].Count;
+                    command.Transaction = transaction;
+
+
+
+
+                    var v_export_id = dataColumn[0].ToArray();
+                    OracleParameter param0 = new OracleParameter("v_export_id", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param0.Value = v_export_id;
+                    param0.Size = v_export_id.Length;
+                    command.Parameters.Add(param0);
+
+                    var v_winner_id = dataColumn[1].ToArray();
+                    OracleParameter param1 = new OracleParameter("v_winner_id", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param1.Value = v_winner_id;
+                    param1.Size = v_winner_id.Length;
+                    command.Parameters.Add(param1);
+
+                    var v_msisdn = dataColumn[2].ToArray();
+                    OracleParameter param2 = new OracleParameter("v_msisdn", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param2.Value = v_msisdn;
+                    param2.Size = v_msisdn.Length;
+                    command.Parameters.Add(param2);
+
+                    var v_money = dataColumn[3].ToArray();
+                    OracleParameter param3 = new OracleParameter("v_money", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param3.Value = v_money;
+                    param3.Size = v_money.Length;
+                    command.Parameters.Add(param3);
+
+
+                    var v_random_id = dataColumn[4].ToArray();
+                    OracleParameter param4 = new OracleParameter("v_random_id", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param4.Value = v_random_id;
+                    param4.Size = v_random_id.Length;
+                    command.Parameters.Add(param4);
+
+                    var v_bet_id = dataColumn[5].ToArray();
+                    OracleParameter param5 = new OracleParameter("v_bet_id", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param5.Value = v_bet_id;
+                    param5.Size = v_bet_id.Length;
+                    command.Parameters.Add(param5);
+
+
+                    var v_winner_code = dataColumn[6].ToArray();
+                    OracleParameter param6 = new OracleParameter("v_winner_code", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param6.Value = v_winner_code;
+                    param6.Size = v_winner_code.Length;
+                    command.Parameters.Add(param6);
+
+
+
+
+                    command.ExecuteNonQuery();
+
+
+
+                    transaction.Commit();
+
+                }
+
+            }
+            catch (OracleException ex)
+            {
+                Console.WriteLine(ex.ToString());
+                throw;
+            }
+            finally
+            {
+                connection.Close();
+            }
+        }
+
+
+
+        public static void InsertBulkBlack(string sSQL, List<List<string>> dataColumn)
+        {
+            OracleConnection connection = null;
+            try
+            {
+                connection = DataAccess.getPoolingConnection();
+                connection.Open();
+                OracleTransaction transaction;
+
+                // Start a local transaction
+                transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
+                using (var command = connection.CreateCommand())
+                {
+                    command.CommandText = sSQL;
+                    command.CommandType = CommandType.StoredProcedure;
+                    command.ArrayBindCount = dataColumn[0].Count;
+                    command.Transaction = transaction;
+
+
+
+
+                    var v_users = dataColumn[0].ToArray();
+                    OracleParameter param0 = new OracleParameter("v_users", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param0.Value = v_users;
+                    param0.Size = v_users.Length;
+                    command.Parameters.Add(param0);
+
+                    var v_msisdn = dataColumn[1].ToArray();
+                    OracleParameter param1 = new OracleParameter("v_msisdn", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param1.Value = v_msisdn;
+                    param1.Size = v_msisdn.Length;
+                    command.Parameters.Add(param1);
+
+                    var v_isLock = dataColumn[2].ToArray();
+                    OracleParameter param2 = new OracleParameter("v_isLock", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param2.Value = v_isLock;
+                    param2.Size = v_isLock.Length;
+                    command.Parameters.Add(param2);
+
+
+                    var v_note = dataColumn[3].ToArray();
+                    OracleParameter param3 = new OracleParameter("v_note", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param3.Value = v_note;
+                    param3.Size = v_note.Length;
+                    command.Parameters.Add(param3);
+
+
+                    command.ExecuteNonQuery();
+
+
+
+                    transaction.Commit();
+
+                }
+
+            }
+            catch (OracleException ex)
+            {
+                Console.WriteLine(ex.ToString());
+                throw;
+            }
+            finally
+            {
+                connection.Close();
+            }
+        }
+
+
+
+
+
+
+        public static DataSet reload(  string V_TYPE, string V_USERS)
+        {
+
+            string str;
+            str = "";
+            str = "BALANCE_PKG.pro_get_update";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("v_prId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_user", OracleDbType.NVarchar2),
+
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_TYPE;
+            parms[1].Value = V_USERS;
+            
+
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+    }
+}

+ 362 - 0
ApiWeb/ApiProcessToken/Models/banlance/balanceObj.cs

@@ -0,0 +1,362 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ApiProcess.Models.bet;
+using CommonObj.model;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.balance
+{
+    public class balanceObj
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("code")]
+
+        public string code { get; set; }
+
+        [JsonProperty("name")]
+
+        public string name { get; set; }
+
+        [JsonProperty("min")]
+
+        public string min { get; set; }
+
+        [JsonProperty("max")]
+
+        public string max { get; set; }
+
+        [JsonProperty("note")]
+
+        public string isActive { get; set; }
+
+        [JsonProperty("isActive")]
+
+        public string note { get; set; }
+
+
+
+        [JsonProperty("usersCreated")]
+
+        public string usersCreated { get; set; }
+
+        [JsonProperty("dateCreated")]
+
+        public string dateCreated { get; set; }
+
+        [JsonProperty("usersUpdate")]
+
+        public string usersUpdate { get; set; }
+
+        [JsonProperty("dateUpdate")]
+
+        public string dateUpdate { get; set; }
+
+
+
+        
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class balanceList : Response
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+
+        [JsonProperty("balanceList")]
+        public balanceObj[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+
+
+
+
+
+
+    public class shortCodeObj
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("name")]
+
+        public string name { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class shortCodeList : Response
+    {
+        
+        public shortCodeObj[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    public class listSubObj
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("code")]
+
+        public string code { get; set; }
+
+        [JsonProperty("name")]
+
+        public string name { get; set; }
+
+ 
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+
+
+        [JsonProperty("usersCreated")]
+
+        public string usersCreated { get; set; }
+
+        [JsonProperty("dateCreated")]
+
+        public string dateCreated { get; set; }
+
+        [JsonProperty("usersUpdate")]
+
+        public string usersUpdate { get; set; }
+
+        [JsonProperty("dateUpdate")]
+        public string dateUpdate { get; set; }
+
+
+        [JsonProperty("listType")]
+        public string listType { get; set; }
+
+
+        [JsonProperty("status")]
+        public string status { get; set; }
+
+        [JsonProperty("totalFile")]
+        public string totalFile { get; set; }
+
+        [JsonProperty("totalRecord")]
+        public string totalRecord { get; set; }
+
+
+        [JsonProperty("totalSuccess")]
+        public string totalSuccess { get; set; }
+
+        [JsonProperty("totalFalse")]
+        public string totalFalse { get; set; }
+
+        [JsonProperty("isDelete")]
+        public string isDelete { get; set; }
+
+        [JsonProperty("isActive")]
+        public string isActive { get; set; }
+
+        
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class listSubList : Response
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+
+        [JsonProperty("list")]
+        public listSubObj[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+
+
+
+
+
+
+    public class listSubFileObj
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("code")]
+
+        public string code { get; set; }
+
+        [JsonProperty("name")]
+
+        public string name { get; set; }
+
+
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+
+
+        [JsonProperty("usersCreated")]
+
+        public string usersCreated { get; set; }
+
+        [JsonProperty("dateCreated")]
+
+        public string dateCreated { get; set; }
+
+        [JsonProperty("usersUpdate")]
+
+        public string usersUpdate { get; set; }
+
+        [JsonProperty("dateUpdate")]
+        public string dateUpdate { get; set; }
+
+
+
+        [JsonProperty("fileId")]
+        public string fileId { get; set; }
+
+
+        [JsonProperty("fileName")]
+        public string fileName { get; set; }
+
+        [JsonProperty("status")]
+        public string status { get; set; }
+
+        [JsonProperty("totalRecord")]
+        public string totalRecord { get; set; }
+
+
+        [JsonProperty("totalSuccess")]
+        public string totalSuccess { get; set; }
+
+        [JsonProperty("totalFalse")]
+        public string totalFalse { get; set; }
+
+        [JsonProperty("isDelete")]
+        public string isDelete { get; set; }
+
+        [JsonProperty("startDate")]
+        public string startDate { get; set; }
+
+        [JsonProperty("endDate")]
+        public string endDate { get; set; }
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class listSubFileList : Response
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+
+        [JsonProperty("list")]
+        public listSubFileObj[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+
+}

+ 67 - 0
ApiWeb/ApiProcessToken/Models/banlance/blackListGetList.cs

@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ApiProcess.Models.bet;
+using CommonObj.model;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.balance
+{
+    public class blackListGetList
+    {
+        [JsonProperty("id")]
+        public string id { get; set; }
+
+        [JsonProperty("msisdn")]
+        public string msisdn { get; set; }
+
+        [JsonProperty("type")]
+        public string type { get; set; }
+
+        [JsonProperty("serviceId")]
+        public string serviceId { get; set; }
+
+        [JsonProperty("campaignId")]
+        public string campaignId { get; set; }
+
+
+
+        [JsonProperty("sysdate")]
+        public string sysdate { get; set; }
+
+        [JsonProperty("users")]
+        public string users { get; set; }
+
+        [JsonProperty("campaignName")]
+        public string campaignName { get; set; }
+
+        [JsonProperty("isActive")]
+        public string isActive { get; set; }
+
+        
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+    }
+
+    public class blackListGetListArr : Response
+    {
+
+        
+
+
+        [JsonProperty("list")]
+        public blackListGetList[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+    }
+
+
+
+}

+ 61 - 0
ApiWeb/ApiProcessToken/Models/banlance/blackListObj.cs

@@ -0,0 +1,61 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ApiProcess.Models.bet;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.balance
+{
+    public class blackListObj
+    {
+        [JsonProperty("msisdn")]
+
+        public string msisdn { get; set; }
+
+        [JsonProperty("action")]
+
+        public string action { get; set; }
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+    }
+
+    public class blackImportDataList
+    {
+
+        [JsonProperty("type")]
+
+        public string type { get; set; }
+
+        [JsonProperty("serviceId")]
+
+        public string serviceId { get; set; }
+
+        [JsonProperty("campaignId")]
+
+        public string campaignId { get; set; }
+
+
+
+        [JsonProperty("users")]
+        public string users { get; set; }
+
+
+
+        [JsonProperty("data")]
+        public blackListObj[] data { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+    }
+
+
+
+}

+ 452 - 0
ApiWeb/ApiProcessToken/Models/banlance/campaignAddObj.cs

@@ -0,0 +1,452 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ApiProcess.Models.bet;
+using CommonObj.model;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.balance
+{
+    public class campaignAddObj
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("campaignId")]
+
+        public string campaignId { get; set; }
+
+        [JsonProperty("serviceAddId")]
+
+        public string serviceAddId { get; set; }
+
+        [JsonProperty("isDelete")]
+
+        public string isDelete { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+
+
+        [JsonProperty("usersCreated")]
+
+        public string usersCreated { get; set; }
+
+        [JsonProperty("dateCreated")]
+
+        public string dateCreated { get; set; }
+
+        [JsonProperty("usersUpdate")]
+
+        public string usersUpdate { get; set; }
+
+        [JsonProperty("dateUpdate")]
+
+        public string dateUpdate { get; set; }
+
+        [JsonProperty("ussdDisplay")]
+
+        public string ussdDisplay { get; set; }
+
+        [JsonProperty("keyRegister")]
+        public string keyRegister { get; set; }
+
+
+
+        [JsonProperty("serviceObj")]
+        public serviceObj serviceObj { get; set; }
+
+        
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class campaignAddObjList : Response
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+
+        [JsonProperty("list")]
+        public List<campaignAddObj> list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+
+
+    public class campaignBalObj
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("campaignId")]
+
+        public string campaignId { get; set; }
+
+        [JsonProperty("balanceId")]
+
+        public string balanceId { get; set; }
+
+        [JsonProperty("isDelete")]
+
+        public string isDelete { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+
+
+        [JsonProperty("usersCreated")]
+
+        public string usersCreated { get; set; }
+
+        [JsonProperty("dateCreated")]
+
+        public string dateCreated { get; set; }
+
+        [JsonProperty("usersUpdate")]
+
+        public string usersUpdate { get; set; }
+
+        [JsonProperty("dateUpdate")]
+
+        public string dateUpdate { get; set; }
+
+
+
+
+        [JsonProperty("balanceObj")]
+
+        public balanceObj balanceObj { get; set; }
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+
+    public class campaignBalObjList : Response
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+
+        [JsonProperty("list")]
+        public List<campaignBalObj> list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+
+
+
+
+    public class campaignExpObj
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("campaignId")]
+
+        public string campaignId { get; set; }
+
+        [JsonProperty("expireId")]
+
+        public string expireId { get; set; }
+
+        [JsonProperty("isDelete")]
+
+        public string isDelete { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+
+
+        [JsonProperty("usersCreated")]
+
+        public string usersCreated { get; set; }
+
+        [JsonProperty("dateCreated")]
+
+        public string dateCreated { get; set; }
+
+        [JsonProperty("usersUpdate")]
+
+        public string usersUpdate { get; set; }
+
+        [JsonProperty("dateUpdate")]
+
+        public string dateUpdate { get; set; }
+
+
+        [JsonProperty("expireDate")]
+
+        public expireDate expireDate { get; set; }
+
+
+
+        
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+
+    public class campaignExpObjList : Response
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+
+        [JsonProperty("list")]
+        public List<campaignExpObj> list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+
+    public class campaignScObj
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("campaignId")]
+
+        public string campaignId { get; set; }
+
+        [JsonProperty("shortCodeId")]
+
+        public string shortCodeId { get; set; }
+
+        [JsonProperty("isDelete")]
+
+        public string isDelete { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+
+
+        [JsonProperty("usersCreated")]
+
+        public string usersCreated { get; set; }
+
+        [JsonProperty("dateCreated")]
+
+        public string dateCreated { get; set; }
+
+        [JsonProperty("usersUpdate")]
+
+        public string usersUpdate { get; set; }
+
+        [JsonProperty("dateUpdate")]
+
+        public string dateUpdate { get; set; }
+
+
+        [JsonProperty("shortCodeObj")]
+
+        public shortCodeObj shortCodeObj { get; set; }
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+
+    public class campaignScObjList : Response
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+
+        [JsonProperty("list")]
+        public List<campaignScObj> list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    public class campaignSubObj
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("campaignId")]
+
+        public string campaignId { get; set; }
+
+        [JsonProperty("subId")]
+
+        public string subId { get; set; }
+
+        [JsonProperty("isDelete")]
+
+        public string isDelete { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+
+
+        [JsonProperty("usersCreated")]
+
+        public string usersCreated { get; set; }
+
+        [JsonProperty("dateCreated")]
+
+        public string dateCreated { get; set; }
+
+        [JsonProperty("usersUpdate")]
+
+        public string usersUpdate { get; set; }
+
+        [JsonProperty("dateUpdate")]
+
+        public string dateUpdate { get; set; }
+
+
+
+        [JsonProperty("listSubObj")]
+
+        public listSubObj listSubObj { get; set; }
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+
+    public class campaignSubObjList : Response
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+
+        [JsonProperty("list")]
+        public List<campaignSubObj> list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 222 - 0
ApiWeb/ApiProcessToken/Models/banlance/campaignObj.cs

@@ -0,0 +1,222 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ApiProcess.Models.bet;
+using CommonObj.model;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.balance
+{
+    public class campaignObj
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("code")]
+
+        public string code { get; set; }
+
+        [JsonProperty("name")]
+
+        public string name { get; set; }
+
+        [JsonProperty("fromDate")]
+
+        public string fromDate { get; set; }
+
+        [JsonProperty("toDate")]
+
+        public string toDate { get; set; }
+
+        [JsonProperty("fromHour")]
+
+        public string fromHour { get; set; }
+
+        [JsonProperty("toHour")]
+
+        public string toHour { get; set; }
+
+        [JsonProperty("rule")]
+
+        public string rule { get; set; }
+
+        [JsonProperty("priority")]
+
+        public string priority { get; set; }
+
+        [JsonProperty("numberDisplay")]
+
+        public string numberDisplay { get; set; }
+
+        [JsonProperty("addType")]
+        public string addType { get; set; }
+
+        [JsonProperty("title")]
+        public string title { get; set; }
+
+        [JsonProperty("isReload")]
+        public string isReload { get; set; }
+
+        [JsonProperty("isDefault")]
+        public string isDefault { get; set; }
+
+        [JsonProperty("isMyService")]
+        public string isMyService { get; set; }
+
+
+
+        [JsonProperty("balanceId")]
+
+        public string balanceId { get; set; }
+
+        [JsonProperty("expireDateId")]
+
+        public string expireDateId { get; set; }
+
+        [JsonProperty("status")]
+
+        public string status { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+
+
+
+        [JsonProperty("usersCreated")]
+
+        public string usersCreated { get; set; }
+
+        [JsonProperty("dateCreated")]
+
+        public string dateCreated { get; set; }
+
+        [JsonProperty("usersUpdate")]
+
+        public string usersUpdate { get; set; }
+
+        [JsonProperty("dateUpdate")]
+        public string dateUpdate { get; set; }
+
+
+        [JsonProperty("listShortCodeMapCam")]
+        public List<campaignScObj> listShortCodeMapCam { get; set; }
+
+        [JsonProperty("listBalanceMapCam")]
+        public List<campaignBalObj> listBalanceMapCam { get; set; }
+
+        [JsonProperty("listExpireMapCam")]
+        public List<campaignExpObj> listExpireMapCam { get; set; }
+
+
+        [JsonProperty("listServiceMapCam")]
+        public List<campaignAddObj> listServiceMapCam { get; set; }
+
+
+        [JsonProperty("listSubMapCam")]
+        public List<campaignSubObj> listSubMapCam { get; set; }
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class campaignObjList : Response
+    {
+
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+        [JsonProperty("campaignObjList")]
+        public List<campaignObj> list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+    public class campaignInsert : Response
+    {
+
+        [JsonProperty("id")]
+        public string id { get; set; }
+
+        
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+
+    public class campaignCalebdarObj
+    {
+
+        [JsonProperty("date")]
+        public string date { get; set; }
+
+
+        [JsonProperty("list")]
+        public List<campaignObj> list { get; set; }
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+    public class campaignCalebdarResponse : Response
+    {
+
+
+        [JsonProperty("list")]
+        public List<campaignCalebdarObj> list { get; set; }
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+}

+ 97 - 0
ApiWeb/ApiProcessToken/Models/banlance/company.cs

@@ -0,0 +1,97 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ApiProcess.Models.bet;
+using CommonObj.model;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.balance
+{
+    public class company
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("code")]
+
+        public string code { get; set; }
+
+        [JsonProperty("name")]
+
+        public string name { get; set; }
+
+        [JsonProperty("phone")]
+
+        public string phone { get; set; }
+
+        [JsonProperty("email")]
+
+        public string email { get; set; }
+
+        [JsonProperty("address")]
+
+        public string address { get; set; }
+
+        [JsonProperty("desciption")]
+
+        public string desciption { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+        [JsonProperty("usersCreated")]
+
+        public string usersCreated { get; set; }
+
+        [JsonProperty("dateCreated")]
+
+        public string dateCreated { get; set; }
+
+        [JsonProperty("usersUpdate")]
+
+        public string usersUpdate { get; set; }
+
+        [JsonProperty("dateUpdate")]
+
+        public string dateUpdate { get; set; }
+
+
+       
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class companyList : Response
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+        [JsonProperty("companyList")]
+        public company[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 102 - 0
ApiWeb/ApiProcessToken/Models/banlance/expireDate.cs

@@ -0,0 +1,102 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ApiProcess.Models.bet;
+using CommonObj.model;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.balance
+{
+    public class expireDate
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("code")]
+
+        public string code { get; set; }
+
+        [JsonProperty("name")]
+
+        public string name { get; set; }
+
+        [JsonProperty("totalDay")]
+
+        public string totalDay { get; set; }
+
+
+
+        [JsonProperty("min")]
+        public string min { get; set; }
+
+        [JsonProperty("max")]
+        public string max { get; set; }
+
+
+
+
+
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+
+
+        [JsonProperty("usersCreated")]
+
+        public string usersCreated { get; set; }
+
+        [JsonProperty("dateCreated")]
+
+        public string dateCreated { get; set; }
+
+        [JsonProperty("usersUpdate")]
+
+        public string usersUpdate { get; set; }
+
+        [JsonProperty("dateUpdate")]
+
+        public string dateUpdate { get; set; }
+
+        [JsonProperty("isActive")]
+
+        public string isActive { get; set; }
+
+        
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class expireDateList : Response
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+        [JsonProperty("expireDateList")]
+        public expireDate[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 578 - 0
ApiWeb/ApiProcessToken/Models/banlance/getListCommon.cs

@@ -0,0 +1,578 @@
+using ApiProcess.Models.balance;
+using CommonObj.common;
+using CommonObj.model;
+using ResfullApi.Models.balance;
+using StackExchange.Redis;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Threading.Channels;
+using System.Xml.Linq;
+
+namespace ApiProcessToken.Models.banlance
+{
+    public class getListCommon
+    {
+
+
+
+      
+
+
+        public static List<campaignObj> getListCam(string id,string users, string name, string code, string fromDate, string toDate
+            , string order, string rowsOnPage, string seqPage, string status, out string _rowsOnPage, out string _seqPage, out string _totalPage,string isDefault,string isMyservice)
+        {
+            string v1, v2, v3;
+            _rowsOnPage = rowsOnPage;
+            _seqPage = seqPage;
+            _totalPage = "100";
+            List<campaignObj> _result = new List<campaignObj>();
+            try
+            {
+                DataSet ds_regist = balanceDataAccess.camGetList(id, users, name, code, fromDate, toDate, order, rowsOnPage, seqPage, status, isDefault, isMyservice);
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+                    _rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    _seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    _totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        campaignObj _obj = new campaignObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+                        _obj.name = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        _obj.fromDate = ds_regist.Tables[0].Rows[j]["FROM_DATE"].ToString();
+                        _obj.toDate = ds_regist.Tables[0].Rows[j]["TO_DATE"].ToString();
+                        _obj.fromHour = ds_regist.Tables[0].Rows[j]["FROM_HOUR"].ToString();
+
+
+                        _obj.toHour = ds_regist.Tables[0].Rows[j]["TO_HOUR"].ToString();
+                        _obj.rule = ds_regist.Tables[0].Rows[j]["RULE_ADD"].ToString();
+
+
+                        _obj.priority = ds_regist.Tables[0].Rows[j]["PRIORITY"].ToString();
+                        _obj.balanceId = ds_regist.Tables[0].Rows[j]["BALANCE_ID"].ToString();
+                        _obj.expireDateId = ds_regist.Tables[0].Rows[j]["EXPIRE_DATE_ID"].ToString();
+                        _obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        _obj.numberDisplay = ds_regist.Tables[0].Rows[j]["NUMBER_DISPLAY"].ToString();
+                        _obj.addType = ds_regist.Tables[0].Rows[j]["ADD_TYPE"].ToString();
+
+                        _obj.title = ds_regist.Tables[0].Rows[j]["TITLE"].ToString();
+                        _obj.isReload = ds_regist.Tables[0].Rows[j]["IS_RELOAD"].ToString();
+                        _obj.isDefault = ds_regist.Tables[0].Rows[j]["IS_DEFAULT"].ToString();
+                        _obj.isMyService = ds_regist.Tables[0].Rows[j]["IS_MYSERVICE"].ToString();
+
+                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+
+                        _obj.listServiceMapCam = getListServiceOfCam("-1", users, _obj.id, fromDate
+                        , toDate, order, "100000", "1", "WEB",
+                        "EN", out v1, out v2, out v3);
+
+                        _obj.listBalanceMapCam = getListBalanceOfCam("-1", users, _obj.id, fromDate
+                        , toDate, order, "100000", "1", "WEB",
+                        "EN", out v1, out v2, out v3);
+
+
+                        _obj.listExpireMapCam = getListExpireOfCam("-1", users, _obj.id, fromDate
+                        , toDate, order, "100000", "1", "WEB",
+                        "EN", out v1, out v2, out v3);
+
+                        _obj.listShortCodeMapCam = getListShortCodeOfCam("-1", users, _obj.id, fromDate
+                        , toDate, order, "100000", "1", "WEB",
+                        "EN", out v1, out v2, out v3);
+
+                        _obj.listSubMapCam = getListSubOfCam("-1", users, _obj.id, fromDate
+                        , toDate, order, "100000", "1", "WEB",
+                        "EN", out v1, out v2, out v3);
+
+                        _result.Add(_obj);
+                    }
+
+
+                    
+
+                }
+            }
+            catch (Exception ex)
+            {
+
+            }
+            return _result;
+        }
+
+
+
+
+
+        public static List<campaignObj> getListCamCalendar(string users, string fromDate, string toDate,string status)
+        {
+            string v1, v2, v3;
+            List<campaignObj> _result = new List<campaignObj>();
+            try
+            {
+                DataSet ds_regist = balanceDataAccess.camGetListCalendar(users,fromDate,toDate,status);
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        campaignObj _obj = new campaignObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.code = ds_regist.Tables[0].Rows[j]["CODE"].ToString();
+                        _obj.name = ds_regist.Tables[0].Rows[j]["NAME"].ToString();
+                        _obj.fromDate = ds_regist.Tables[0].Rows[j]["FROM_DATE"].ToString();
+                        _obj.toDate = ds_regist.Tables[0].Rows[j]["TO_DATE"].ToString();
+                        _obj.fromHour = ds_regist.Tables[0].Rows[j]["FROM_HOUR"].ToString();
+
+
+                        _obj.toHour = ds_regist.Tables[0].Rows[j]["TO_HOUR"].ToString();
+                        _obj.rule = ds_regist.Tables[0].Rows[j]["RULE_ADD"].ToString();
+
+
+                        _obj.priority = ds_regist.Tables[0].Rows[j]["PRIORITY"].ToString();
+                        _obj.balanceId = ds_regist.Tables[0].Rows[j]["BALANCE_ID"].ToString();
+                        _obj.expireDateId = ds_regist.Tables[0].Rows[j]["EXPIRE_DATE_ID"].ToString();
+                        _obj.status = ds_regist.Tables[0].Rows[j]["STATUS"].ToString();
+                        _obj.numberDisplay = ds_regist.Tables[0].Rows[j]["NUMBER_DISPLAY"].ToString();
+                        _obj.addType = ds_regist.Tables[0].Rows[j]["ADD_TYPE"].ToString();
+
+                        _obj.title = ds_regist.Tables[0].Rows[j]["TITLE"].ToString();
+                        _obj.isReload = ds_regist.Tables[0].Rows[j]["IS_RELOAD"].ToString();
+                        _obj.isDefault = ds_regist.Tables[0].Rows[j]["IS_DEFAULT"].ToString();
+                        _obj.isMyService = ds_regist.Tables[0].Rows[j]["IS_MYSERVICE"].ToString();
+
+                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+
+                        _obj.listServiceMapCam = getListServiceOfCam("-1", users, _obj.id, fromDate
+                        , toDate, "asc", "100000", "1", "WEB",
+                        "EN", out v1, out v2, out v3);
+
+                        _obj.listBalanceMapCam = getListBalanceOfCam("-1", users, _obj.id, fromDate
+                        , toDate, "asc", "100000", "1", "WEB",
+                        "EN", out v1, out v2, out v3);
+
+
+                        _obj.listExpireMapCam = getListExpireOfCam("-1", users, _obj.id, fromDate
+                        , toDate, "asc", "100000", "1", "WEB",
+                        "EN", out v1, out v2, out v3);
+
+                        _obj.listShortCodeMapCam = getListShortCodeOfCam("-1", users, _obj.id, fromDate
+                        , toDate, "asc", "100000", "1", "WEB",
+                        "EN", out v1, out v2, out v3);
+
+                        _obj.listSubMapCam = getListSubOfCam("-1", users, _obj.id, fromDate
+                        , toDate, "asc", "100000", "1", "WEB",
+                        "EN", out v1, out v2, out v3);
+
+                        _result.Add(_obj);
+                    }
+
+
+
+
+                }
+            }
+            catch (Exception ex)
+            {
+
+            }
+            return _result;
+        }
+
+
+        public static List<campaignAddObj> getListServiceOfCam(string id, string users, string campaignId, string fromDate
+            , string toDate, string order, string rowsOnPage, string seqPage, string channel,
+            string language, out string _rowsOnPage, out string _seqPage, out string _totalPage)
+        {
+
+            _rowsOnPage = rowsOnPage;
+            _seqPage = seqPage;
+            _totalPage = "100";
+            List<campaignAddObj> _result = new List<campaignAddObj>();
+            try
+            {
+                DataSet ds_regist = balanceDataAccess.camAddGetList(id, users, campaignId, fromDate, toDate, order, rowsOnPage, seqPage);
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+                    _rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    _seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    _totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        campaignAddObj _obj = new campaignAddObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.campaignId = ds_regist.Tables[0].Rows[j]["CAMPAIGN_ID"].ToString();
+                        _obj.serviceAddId = ds_regist.Tables[0].Rows[j]["SERVICE_ADD_ID"].ToString();
+                        _obj.isDelete = ds_regist.Tables[0].Rows[j]["IS_DELETE"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+                        _obj.ussdDisplay = ds_regist.Tables[0].Rows[j]["USSD_DISPLAY"].ToString();
+                        _obj.keyRegister = ds_regist.Tables[0].Rows[j]["KEY_REGISTER"].ToString();
+
+
+                        //Lay them danh sach nua
+                        serviceObj _obj1 = new serviceObj();
+
+                        _obj1.id = ds_regist.Tables[0].Rows[j]["oID"].ToString();
+                        _obj1.code = ds_regist.Tables[0].Rows[j]["oCODE"].ToString();
+                        _obj1.name = ds_regist.Tables[0].Rows[j]["oNAME"].ToString();
+                        _obj1.description = ds_regist.Tables[0].Rows[j]["oDESCRIPTION"].ToString();
+                        _obj1.shortCode = ds_regist.Tables[0].Rows[j]["oSHORT_CODE"].ToString();
+                        _obj1.command = ds_regist.Tables[0].Rows[j]["oCOMMAND_REGISTER"].ToString();
+
+
+                        _obj1.contentEn = ds_regist.Tables[0].Rows[j]["oCONTENT_EN"].ToString();
+                        _obj1.contentFr = ds_regist.Tables[0].Rows[j]["oCONTENT_FR"].ToString();
+                        _obj1.contentLc = ds_regist.Tables[0].Rows[j]["oCONTENT_LC"].ToString();
+                        _obj1.note = ds_regist.Tables[0].Rows[j]["oNOTE"].ToString();
+                        _obj1.companyId = ds_regist.Tables[0].Rows[j]["oCOMPANY_ID"].ToString();
+
+                        _obj1.usersCreated = ds_regist.Tables[0].Rows[j]["oUSERS_CREATED"].ToString();
+                        _obj1.dateCreated = ds_regist.Tables[0].Rows[j]["oDATE_CREATED"].ToString();
+                        _obj1.usersUpdate = ds_regist.Tables[0].Rows[j]["oUSERS_UPDATE"].ToString();
+                        _obj1.dateUpdate = ds_regist.Tables[0].Rows[j]["oDATE_UPDATE"].ToString();
+
+                        _obj1.dateUpdate = ds_regist.Tables[0].Rows[j]["oDATE_UPDATE"].ToString();
+
+                        _obj1.msgRegisterSuccess = ds_regist.Tables[0].Rows[j]["oUSSD_MSG_REGISTER_SUC"].ToString();
+                        _obj1.msgRegisterFlase = ds_regist.Tables[0].Rows[j]["oUSSD_MSG_REGISTER_FAIL"].ToString();
+                        _obj1.msgConfirm = ds_regist.Tables[0].Rows[j]["oUSSD_CONFIRM"].ToString();
+
+                        _obj1.isActive = ds_regist.Tables[0].Rows[j]["oIS_ACTIVE"].ToString();
+
+                        _obj.serviceObj = _obj1;
+
+
+                        _result.Add(_obj);
+                    }
+
+                }
+            }
+            catch (Exception ex)
+            {
+
+            }
+            return _result;
+        }
+
+
+
+
+
+        public static List<campaignExpObj> getListExpireOfCam(string id, string users, string campaignId, string fromDate
+            , string toDate, string order, string rowsOnPage, string seqPage, string channel,
+            string language, out string _rowsOnPage, out string _seqPage, out string _totalPage)
+        {
+
+            _rowsOnPage = rowsOnPage;
+            _seqPage = seqPage;
+            _totalPage = "100";
+            List<campaignExpObj> _result = new List<campaignExpObj>();
+            try
+            {
+                DataSet ds_regist = balanceDataAccess.camExpGetList(id, users, campaignId, fromDate, toDate, order, rowsOnPage, seqPage, channel, language);
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+                    _rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    _seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    _totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        campaignExpObj _obj = new campaignExpObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.campaignId = ds_regist.Tables[0].Rows[j]["CAMPAIGN_ID"].ToString();
+                        _obj.expireId = ds_regist.Tables[0].Rows[j]["REF_ID"].ToString();
+                        _obj.isDelete = ds_regist.Tables[0].Rows[j]["IS_DELETE"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+                        expireDate _obj1 = new expireDate();
+
+                        _obj1.id = ds_regist.Tables[0].Rows[j]["oid"].ToString();
+                        _obj1.code = ds_regist.Tables[0].Rows[j]["ocode"].ToString();
+                        _obj1.name = ds_regist.Tables[0].Rows[j]["oname"].ToString();
+                        _obj1.totalDay = ds_regist.Tables[0].Rows[j]["oTOTAL_DAY_USE"].ToString();
+
+                        _obj1.min = ds_regist.Tables[0].Rows[j]["oV_MIN"].ToString();
+                        _obj1.max = ds_regist.Tables[0].Rows[j]["oV_MAX"].ToString();
+
+                        _obj1.note = ds_regist.Tables[0].Rows[j]["oNOTE"].ToString();
+                        _obj1.usersCreated = ds_regist.Tables[0].Rows[j]["oUSERS_CREATED"].ToString();
+                        _obj1.dateCreated = ds_regist.Tables[0].Rows[j]["oDATE_CREATED"].ToString();
+                        _obj1.usersUpdate = ds_regist.Tables[0].Rows[j]["oUSERS_UPDATE"].ToString();
+                        _obj1.dateUpdate = ds_regist.Tables[0].Rows[j]["oDATE_UPDATE"].ToString();
+
+                        _obj1.isActive = ds_regist.Tables[0].Rows[j]["oIS_ACTIVE"].ToString();
+
+                        _obj.expireDate = _obj1;
+
+                        _result.Add(_obj);
+                    }
+
+                }
+            }
+            catch (Exception ex)
+            {
+
+            }
+            return _result;
+        }
+
+
+
+
+        public static List<campaignScObj> getListShortCodeOfCam(string id, string users, string campaignId, string fromDate
+            , string toDate, string order, string rowsOnPage, string seqPage, string channel,
+            string language, out string _rowsOnPage, out string _seqPage, out string _totalPage)
+        {
+
+            _rowsOnPage = rowsOnPage;
+            _seqPage = seqPage;
+            _totalPage = "100";
+            List<campaignScObj> _result = new List<campaignScObj>();
+            try
+            {
+                DataSet ds_regist = balanceDataAccess.camScGetList(id, users, campaignId, fromDate, toDate, order, rowsOnPage, seqPage, channel, language);
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+                    _rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    _seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    _totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        campaignScObj _obj = new campaignScObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.campaignId = ds_regist.Tables[0].Rows[j]["CAMPAIGN_ID"].ToString();
+                        _obj.shortCodeId = ds_regist.Tables[0].Rows[j]["REF_ID"].ToString();
+                        _obj.isDelete = ds_regist.Tables[0].Rows[j]["IS_DELETE"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+                        shortCodeObj _obj1 = new shortCodeObj();
+
+                        _obj1.id = ds_regist.Tables[0].Rows[j]["oid"].ToString();
+                        _obj1.name = ds_regist.Tables[0].Rows[j]["oname"].ToString();
+                        _obj.shortCodeObj = _obj1;
+
+                        _result.Add(_obj);
+                    }
+
+                }
+            }
+            catch (Exception ex)
+            {
+
+            }
+            return _result;
+        }
+
+
+
+        public static List<campaignBalObj> getListBalanceOfCam(string id, string users, string campaignId, string fromDate
+            ,string toDate, string order, string rowsOnPage, string seqPage, string channel, 
+            string language, out string _rowsOnPage, out string _seqPage, out string _totalPage)
+        {
+
+            _rowsOnPage = rowsOnPage;
+            _seqPage = seqPage;
+            _totalPage = "100";
+            List<campaignBalObj> _result = new List<campaignBalObj>();
+            try
+            {
+                DataSet ds_regist = balanceDataAccess.camBalGetList(id, users, campaignId, fromDate, toDate, order, rowsOnPage, seqPage, channel, language);
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+                    _rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    _seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    _totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+                    
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        campaignBalObj _obj = new campaignBalObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.campaignId = ds_regist.Tables[0].Rows[j]["CAMPAIGN_ID"].ToString();
+                        _obj.balanceId = ds_regist.Tables[0].Rows[j]["REF_ID"].ToString();
+                        _obj.isDelete = ds_regist.Tables[0].Rows[j]["IS_DELETE"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+
+                        balanceObj _obj1 = new balanceObj();
+
+                        _obj1.id = ds_regist.Tables[0].Rows[j]["oid"].ToString();
+                        _obj1.code = ds_regist.Tables[0].Rows[j]["ocode"].ToString();
+                        _obj1.name = ds_regist.Tables[0].Rows[j]["oname"].ToString();
+                        _obj1.min = ds_regist.Tables[0].Rows[j]["ov_min"].ToString();
+                        _obj1.max = ds_regist.Tables[0].Rows[j]["ov_max"].ToString();
+                        _obj1.isActive = ds_regist.Tables[0].Rows[j]["oIS_ACTIVE"].ToString();
+
+                        _obj1.note = ds_regist.Tables[0].Rows[j]["oNOTE"].ToString();
+                        _obj1.usersCreated = ds_regist.Tables[0].Rows[j]["oUSERS_CREATED"].ToString();
+                        _obj1.dateCreated = ds_regist.Tables[0].Rows[j]["oDATE_CREATED"].ToString();
+                        _obj1.usersUpdate = ds_regist.Tables[0].Rows[j]["oUSERS_UPDATE"].ToString();
+                        _obj1.dateUpdate = ds_regist.Tables[0].Rows[j]["oDATE_UPDATE"].ToString();
+
+                        _obj.balanceObj = _obj1;
+
+
+                        _result.Add(_obj);
+                    }
+
+                }
+            }
+            catch (Exception ex)
+            {
+
+            }
+            return _result;
+        }
+
+
+
+
+        public static List<campaignSubObj> getListSubOfCam(string id, string users, string campaignId, string fromDate
+            , string toDate, string order, string rowsOnPage, string seqPage, string channel,
+            string language, out string _rowsOnPage, out string _seqPage, out string _totalPage)
+        {
+
+            _rowsOnPage = rowsOnPage;
+            _seqPage = seqPage;
+            _totalPage = "100";
+            List<campaignSubObj> _result = new List<campaignSubObj>();
+            try
+            {
+                DataSet ds_regist = balanceDataAccess.camSubGetList(id, users, campaignId, fromDate, toDate, order, rowsOnPage, seqPage, channel, language);
+                if (ds_regist != null & ds_regist.Tables[0].Rows.Count > 0)
+                {
+
+
+                    _rowsOnPage = ds_regist.Tables[0].Rows[0]["ROW_ON_PAGE"].ToString();
+                    _seqPage = ds_regist.Tables[0].Rows[0]["SEQ_PAGE"].ToString();
+                    _totalPage = ds_regist.Tables[0].Rows[0]["TOTAL_PAGE"].ToString();
+
+
+
+                    for (int j = 0; j < ds_regist.Tables[0].Rows.Count; j++)
+                    {
+                        campaignSubObj _obj = new campaignSubObj();
+
+                        _obj.id = ds_regist.Tables[0].Rows[j]["ID"].ToString();
+                        _obj.campaignId = ds_regist.Tables[0].Rows[j]["CAMPAIGN_ID"].ToString();
+                        _obj.subId = ds_regist.Tables[0].Rows[j]["REF_ID"].ToString();
+                        _obj.isDelete = ds_regist.Tables[0].Rows[j]["IS_DELETE"].ToString();
+                        _obj.note = ds_regist.Tables[0].Rows[j]["NOTE"].ToString();
+
+                        _obj.usersCreated = ds_regist.Tables[0].Rows[j]["USERS_CREATED"].ToString();
+                        _obj.dateCreated = ds_regist.Tables[0].Rows[j]["DATE_CREATED"].ToString();
+                        _obj.usersUpdate = ds_regist.Tables[0].Rows[j]["USERS_UPDATE"].ToString();
+                        _obj.dateUpdate = ds_regist.Tables[0].Rows[j]["DATE_UPDATE"].ToString();
+
+
+
+                        listSubObj _obj1 = new listSubObj();
+
+                        _obj1.id = ds_regist.Tables[0].Rows[j]["oid"].ToString();
+                        _obj1.code = ds_regist.Tables[0].Rows[j]["ocode"].ToString();
+                        _obj1.name = ds_regist.Tables[0].Rows[j]["oname"].ToString();
+
+                        _obj1.listType = ds_regist.Tables[0].Rows[j]["oLIST_TYPE"].ToString();
+                        _obj1.status = ds_regist.Tables[0].Rows[j]["oSTATUS"].ToString();
+                        _obj1.totalFile = ds_regist.Tables[0].Rows[j]["oTOTAL_FILE"].ToString();
+                        _obj1.totalRecord = ds_regist.Tables[0].Rows[j]["oTOTAL_RECORD"].ToString();
+                        _obj1.totalSuccess = ds_regist.Tables[0].Rows[j]["oTOTAL_SUCCESS"].ToString();
+                        _obj1.totalFalse = ds_regist.Tables[0].Rows[j]["oTOTAL_FALSE"].ToString();
+                        _obj1.isDelete = ds_regist.Tables[0].Rows[j]["oIS_DELETE"].ToString();
+
+
+
+                        _obj1.note = ds_regist.Tables[0].Rows[j]["oNOTE"].ToString();
+                        _obj1.usersCreated = ds_regist.Tables[0].Rows[j]["oUSERS_CREATED"].ToString();
+                        _obj1.dateCreated = ds_regist.Tables[0].Rows[j]["oDATE_CREATED"].ToString();
+                        _obj1.usersUpdate = ds_regist.Tables[0].Rows[j]["oUSERS_UPDATE"].ToString();
+                        _obj1.dateUpdate = ds_regist.Tables[0].Rows[j]["oDATE_UPDATE"].ToString();
+
+                        _obj1.isActive = ds_regist.Tables[0].Rows[j]["oIS_ACTIVE"].ToString();
+
+                        _obj.listSubObj = _obj1;
+
+
+
+
+                        _result.Add(_obj);
+                    }
+
+                }
+            }
+            catch (Exception ex)
+            {
+
+            }
+            return _result;
+        }
+
+
+
+    }
+}       

+ 25 - 0
ApiWeb/ApiProcessToken/Models/banlance/loginObj.cs

@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ApiProcess.Models.bet;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.balance
+{
+    public class loginObj: ResCommnon
+    {
+        [JsonProperty("role")]
+
+        public string role { get; set; }
+
+        
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+
+
+
+}

+ 87 - 0
ApiWeb/ApiProcessToken/Models/banlance/ngamObj.cs

@@ -0,0 +1,87 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ApiProcess.Models.bet;
+using CommonObj.model;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.balance
+{
+    public class ngamObj
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("name")]
+
+        public string name { get; set; }
+
+        [JsonProperty("serviceId")]
+
+        public string serviceId { get; set; }
+
+        [JsonProperty("message")]
+
+        public string message { get; set; }
+
+        [JsonProperty("fromDate")]
+
+        public string fromDate { get; set; }
+
+        [JsonProperty("toDate")]
+
+        public string toDate { get; set; }
+
+        [JsonProperty("percent")]
+
+        public string percent { get; set; }
+
+        [JsonProperty("addType")]
+
+        public string addType { get; set; }
+
+        [JsonProperty("sysdate")]
+
+        public string sysdate { get; set; }
+
+
+        
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class ngamObjList : Response
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+        [JsonProperty("usersObjList")]
+        public ngamObj[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 108 - 0
ApiWeb/ApiProcessToken/Models/banlance/paramObj.cs

@@ -0,0 +1,108 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ApiProcess.Models.bet;
+using CommonObj.model;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.balance
+{
+    public class paramObj
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("code")]
+
+        public string code { get; set; }
+
+        [JsonProperty("values")]
+
+        public string values { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+        [JsonProperty("status")]
+
+        public string status { get; set; }
+
+        [JsonProperty("codeGroup")]
+
+        public string codeGroup { get; set; }
+
+        [JsonProperty("display0")]
+
+        public string display0 { get; set; }
+
+
+        [JsonProperty("display1")]
+
+        public string display1 { get; set; }
+
+        [JsonProperty("display2")]
+
+        public string display2 { get; set; }
+
+        [JsonProperty("display3")]
+
+        public string display3 { get; set; }
+
+        [JsonProperty("display4")]
+
+        public string display4 { get; set; }
+
+        [JsonProperty("display5")]
+
+        public string display5 { get; set; }
+
+        [JsonProperty("gameId")]
+
+        public string gameId { get; set; }
+
+        [JsonProperty("channel")]
+
+        public string channel { get; set; }
+
+
+        
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class paramObjList : Response
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+        [JsonProperty("paramObjList")]
+        public paramObj[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 201 - 0
ApiWeb/ApiProcessToken/Models/banlance/reportByCampaign.cs

@@ -0,0 +1,201 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ApiProcess.Models.bet;
+using CommonObj.model;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.balance
+{
+    public class reportByCampaign
+    {
+        [JsonProperty("seq")]
+
+        public string seq { get; set; }
+
+        [JsonProperty("code")]
+
+        public string code { get; set; }
+
+        [JsonProperty("name")]
+
+        public string name { get; set; }
+
+        [JsonProperty("priority")]
+
+        public string priority { get; set; }
+
+        [JsonProperty("ruleAdd")]
+
+        public string ruleAdd { get; set; }
+
+        [JsonProperty("addType")]
+
+        public string addType { get; set; }
+
+        [JsonProperty("createDate")]
+
+        public string createDate { get; set; }
+
+        [JsonProperty("fromDate")]
+
+        public string fromDate { get; set; }
+
+        [JsonProperty("toDate")]
+
+        public string toDate { get; set; }
+
+        [JsonProperty("status")]
+
+        public string status { get; set; }
+
+        [JsonProperty("serviceCode")]
+
+        public string serviceCode { get; set; }
+
+        [JsonProperty("serviceName")]
+
+        public string serviceName { get; set; }
+
+        [JsonProperty("totalView")]
+
+        public string totalView { get; set; }
+
+        [JsonProperty("activation")]
+
+        public string activation { get; set; }
+
+        [JsonProperty("success")]
+
+        public string success { get; set; }
+
+        [JsonProperty("fail")]
+        public string fail { get; set; }
+
+
+
+
+
+
+
+    public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class reportByCampaignList : Response
+    {
+        
+
+        [JsonProperty("list")]
+        public reportByCampaign[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+
+
+
+
+
+
+    public class reportTotalByCampaign
+    {
+        [JsonProperty("seq")]
+
+        public string seq { get; set; }
+
+        [JsonProperty("campaignId")]
+
+        public string campaignId { get; set; }
+
+        [JsonProperty("campaignName")]
+
+        public string campaignName { get; set; }
+
+        [JsonProperty("priority")]
+
+        public string priority { get; set; }
+
+        [JsonProperty("campaignType")]
+
+        public string campaignType { get; set; }
+
+        [JsonProperty("serviceType")]
+
+        public string serviceType { get; set; }
+
+        [JsonProperty("serviceName")]
+
+        public string serviceName { get; set; }
+
+        [JsonProperty("totalView1")]
+
+        public string totalView1 { get; set; }
+
+        [JsonProperty("totalView2")]
+
+        public string totalView2 { get; set; }
+
+        [JsonProperty("activation1")]
+
+        public string activation1 { get; set; }
+
+        [JsonProperty("activation2")]
+
+        public string activation2 { get; set; }
+
+        
+
+        [JsonProperty("success")]
+
+        public string success { get; set; }
+
+        [JsonProperty("fail")]
+        public string fail { get; set; }
+
+
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+
+    public class reportTotalByCampaignList : Response
+    {
+
+
+        [JsonProperty("list")]
+        public List<reportTotalByCampaign>list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 103 - 0
ApiWeb/ApiProcessToken/Models/banlance/serviceAddObj.cs

@@ -0,0 +1,103 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ApiProcess.Models.bet;
+using CommonObj.model;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.balance
+{
+    public class serviceAddObj
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("code")]
+
+        public string code { get; set; }
+
+        [JsonProperty("name")]
+
+        public string name { get; set; }
+
+        [JsonProperty("addType")]
+
+        public string addType { get; set; }
+
+        [JsonProperty("numberDisplay")]
+
+        public string numberDisplay { get; set; }
+
+        [JsonProperty("priority")]
+
+        public string priority { get; set; }
+
+        [JsonProperty("serviceId")]
+
+        public string serviceId { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+
+
+
+
+        [JsonProperty("usersCreated")]
+
+        public string usersCreated { get; set; }
+
+        [JsonProperty("dateCreated")]
+
+        public string dateCreated { get; set; }
+
+        [JsonProperty("usersUpdate")]
+
+        public string usersUpdate { get; set; }
+
+        [JsonProperty("dateUpdate")]
+
+        public string dateUpdate { get; set; }
+
+
+        
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class serviceAddObjList : Response
+    {
+
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+        [JsonProperty("serviceAddObjList")]
+        public serviceAddObj[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 125 - 0
ApiWeb/ApiProcessToken/Models/banlance/serviceObj.cs

@@ -0,0 +1,125 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ApiProcess.Models.bet;
+using CommonObj.model;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.balance
+{
+    public class serviceObj
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("code")]
+
+        public string code { get; set; }
+
+        [JsonProperty("name")]
+
+        public string name { get; set; }
+
+        [JsonProperty("description")]
+
+        public string description { get; set; }
+
+        [JsonProperty("shortCode")]
+
+        public string shortCode { get; set; }
+
+        [JsonProperty("command")]
+
+        public string command { get; set; }
+
+        [JsonProperty("contentEn")]
+
+        public string contentEn { get; set; }
+
+        [JsonProperty("contentFr")]
+
+        public string contentFr { get; set; }
+
+        [JsonProperty("contentLc")]
+
+        public string contentLc { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+        [JsonProperty("companyId")]
+
+        public string companyId { get; set; }
+
+
+
+        [JsonProperty("usersCreated")]
+
+        public string usersCreated { get; set; }
+
+        [JsonProperty("dateCreated")]
+
+        public string dateCreated { get; set; }
+
+        [JsonProperty("usersUpdate")]
+
+        public string usersUpdate { get; set; }
+
+        [JsonProperty("dateUpdate")]
+
+        public string dateUpdate { get; set; }
+
+
+
+        [JsonProperty("msgRegisterSuccess")]
+        public string msgRegisterSuccess { get; set; }
+
+        [JsonProperty("msgRegisterFlase")]
+        public string msgRegisterFlase { get; set; }
+
+        [JsonProperty("msgConfirm")]
+        public string msgConfirm { get; set; }
+
+        [JsonProperty("isActive")]
+        public string isActive { get; set; }
+
+        [JsonProperty("isMyService")]
+        public string isMyService { get; set; }
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class serviceObjList : Response
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+        [JsonProperty("serviceObjList")]
+        public serviceObj[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 86 - 0
ApiWeb/ApiProcessToken/Models/banlance/usersObj.cs

@@ -0,0 +1,86 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ApiProcess.Models.bet;
+using CommonObj.model;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.balance
+{
+    public class usersObj
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("userName")]
+
+        public string userName { get; set; }
+
+        [JsonProperty("pasword")]
+
+        public string pasword { get; set; }
+
+        [JsonProperty("role")]
+
+        public string role { get; set; }
+
+        [JsonProperty("contryCode")]
+
+        public string contryCode { get; set; }
+
+        [JsonProperty("isLock")]
+
+        public string isLock { get; set; }
+
+        [JsonProperty("totalFalse")]
+
+        public string totalFalse { get; set; }
+
+        [JsonProperty("timeLock")]
+
+        public string timeLock { get; set; }
+
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+
+        
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class usersObjList : Response
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+        [JsonProperty("usersObjList")]
+        public usersObj[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 195 - 0
ApiWeb/ApiProcessToken/Models/bet/betGetTerm.cs

@@ -0,0 +1,195 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class betGetTerm 
+    {
+        [JsonProperty("seq")]
+        public string seq { get; set; }
+
+        [JsonProperty("id")]
+        public string id { get; set; }
+
+        [JsonProperty("status")]
+        public string status { get; set; }
+
+        [JsonProperty("date_start")]
+        public string date_start { get; set; }
+
+        [JsonProperty("date_end")]
+        public string date_end { get; set; }
+
+
+        [JsonProperty("date_random")]
+        public string date_random { get; set; }
+
+        [JsonProperty("money_winner")]
+        public string money_winner { get; set; }
+
+
+        [JsonProperty("gameId")]
+        public string gameId { get; set; }
+
+        [JsonProperty("result")]
+        public string result { get; set; }
+
+
+        [JsonProperty("split")]
+        public string split { get; set; }
+
+
+        [JsonProperty("countDownSeconds")]
+        public string countDownSeconds { get; set; }
+
+
+        [JsonProperty("isEvening")]
+        public string isEvening { get; set; }
+
+        [JsonProperty("numberGame")]
+        public string numberGame { get; set; }
+
+        [JsonProperty("win4Game")]
+        public string win4Game { get; set; }
+
+        [JsonProperty("bolet")]
+        public string bolet { get; set; }
+
+        [JsonProperty("mariaj")]
+        public string mariaj { get; set; }
+
+        [JsonProperty("lotto3")]
+        public string lotto3 { get; set; }
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class betGetTermList : ResCommnon
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+        [JsonProperty("totalRow")]
+        public string totalRow { get; set; }
+
+
+        [JsonProperty("gameId")]
+        public string gameId { get; set; }
+
+
+
+        [JsonProperty("listTerm")]
+        public betGetTerm[] listTerm { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+
+    public class moneyPrizeOfTerm : ResCommnon
+    {
+        [JsonProperty("id")]
+        public string id { get; set; }
+
+        [JsonProperty("startDate")]
+        public string startDate { get; set; }
+
+        [JsonProperty("endDate")]
+        public string endDate { get; set; }
+
+        [JsonProperty("randomDate")]
+        public string randomDate { get; set; }
+
+
+        [JsonProperty("money")]
+        public string money { get; set; }
+
+
+        [JsonProperty("status")]
+        public string status { get; set; }
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+    public class prizeObj
+    {
+        [JsonProperty("id")]
+        public string id { get; set; }
+
+        [JsonProperty("name")]
+        public string name { get; set; }
+
+        [JsonProperty("code")]
+        public string code { get; set; }
+
+
+
+        [JsonProperty("money")]
+        public string money { get; set; }
+
+        
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+    public class prizeList : ResCommnon
+    {
+      
+
+
+        [JsonProperty("list")]
+        public prizeObj[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 47 - 0
ApiWeb/ApiProcessToken/Models/bet/betMoney.cs

@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class betMoneyObj
+    {
+        [JsonProperty("id")]
+        public string id { get; set; }
+
+        [JsonProperty("code")]
+        public string code { get; set; }
+
+        [JsonProperty("money")]
+        public string money { get; set; }
+
+       
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class betMoneyObjList : ResCommnon
+    {
+       
+        [JsonProperty("gameId")]
+        public string gameId { get; set; }
+
+
+        [JsonProperty("listMoney")]
+        public betMoneyObj[] listMoney { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+    }
+
+
+
+}

+ 42 - 0
ApiWeb/ApiProcessToken/Models/bet/betProcessObj.cs

@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class betProcessObj
+    {
+        [JsonProperty("seq")]
+        public string seq { get; set; }
+
+        [JsonProperty("ip")]
+        public string ip { get; set; }
+
+        [JsonProperty("port")]
+        public string port { get; set; }
+
+        [JsonProperty("timeout")]
+        public string timeout { get; set; }
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class betProcessObjList
+    {
+        [JsonProperty("listBetProcess")]
+        public betProcessObj[] listBetProcess { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+
+
+}

+ 33 - 0
ApiWeb/ApiProcessToken/Models/bet/betRes3GMsisdn.cs

@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class betRes3GMsisdn : ResCommnon
+    {
+        [JsonProperty("msisdn")]
+        public string msisdn { get; set; }
+
+       
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+        public betRes3GMsisdn()
+        {
+
+        }
+       
+
+
+
+    }
+
+  
+
+}

+ 44 - 0
ApiWeb/ApiProcessToken/Models/bet/betResCheckPin.cs

@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class betResCheckPin
+    {
+        [JsonProperty("responseCode")]
+        public string responseCode { get; set; }
+
+        [JsonProperty("responseMessage")]
+        public string responseMessage { get; set; }
+
+        [JsonProperty("token")]
+        public string token { get; set; }
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+        public betResCheckPin()
+        {
+
+        }
+        public betResCheckPin(string _responseCode,string _responseMessage,string _token)
+        {
+            this.responseCode = _responseCode;
+            this.responseMessage = _responseMessage;
+            this.token = _token;
+        }
+
+
+
+    }
+
+  
+
+}

+ 40 - 0
ApiWeb/ApiProcessToken/Models/bet/betResCommnon.cs

@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class ResCommnon
+    {
+        [JsonProperty("responseCode")]
+        public string responseCode { get; set; }
+
+        [JsonProperty("responseMessage")]
+        public string responseMessage { get; set; }
+
+        
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+        public ResCommnon()
+        {
+
+        }
+        public ResCommnon(string _responseCode,string _responseMessage)
+        {
+            this.responseCode = _responseCode;
+            this.responseMessage = _responseMessage;
+        }
+
+
+
+    }
+
+  
+
+}

+ 38 - 0
ApiWeb/ApiProcessToken/Models/bet/betResWalletAcount.cs

@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class betResWalletAcount : ResCommnon
+    {
+        [JsonProperty("Status")]
+        public string Status { get; set; }
+
+        [JsonProperty("Balance")]
+        public string Balance { get; set; }
+
+        [JsonProperty("CommissionBalance")]
+        public string CommissionBalance { get; set; }
+
+        [JsonProperty("ChannelCode")]
+        public string ChannelCode { get; set; }
+
+        [JsonProperty("RegisterDate")]
+        public string RegisterDate { get; set; }
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+       
+
+    }
+
+  
+
+}

+ 25 - 0
ApiWeb/ApiProcessToken/Models/bet/betResWalletCheckExist.cs

@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class betResWalletCheckExist : ResCommnon
+    {
+        [JsonProperty("createdDate")]
+        public string createdDate { get; set; }
+
+      
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+       
+
+    }
+
+  
+
+}

+ 83 - 0
ApiWeb/ApiProcessToken/Models/bet/betResWalletCus.cs

@@ -0,0 +1,83 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class betResWalletCus 
+    {
+        [JsonProperty("Idsn")]
+        public string Idsn { get; set; }
+
+        [JsonProperty("Name")]
+        public string Name { get; set; }
+
+        [JsonProperty("IdNo")]
+        public string IdNo { get; set; }
+
+        [JsonProperty("IdType")]
+        public string IdType { get; set; }
+
+        [JsonProperty("Address")]
+        public string Address { get; set; }
+
+        [JsonProperty("Gender")]
+        public string Gender { get; set; }
+
+        [JsonProperty("DoB")]
+        public string DoB { get; set; }
+
+        [JsonProperty("Balance")]
+        public string Balance { get; set; }
+
+        [JsonProperty("ActiveDate")]
+        public string ActiveDate { get; set; }
+
+        [JsonProperty("RefId")]
+        public string RefId { get; set; }
+
+        [JsonProperty("CustomerCode")]
+        public string CustomerCode { get; set; }
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+       
+
+    }
+
+
+    public class betResWalletCusExten : ResCommnon
+    {
+
+        
+       
+
+
+        [JsonProperty("custormer")]
+        public betResWalletCus custormer { get; set; }
+
+        
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+    }
+
+
+
+}

+ 125 - 0
ApiWeb/ApiProcessToken/Models/bet/betResWalletCusV2.cs

@@ -0,0 +1,125 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class betResWalletCusV2 
+    {
+        [JsonProperty("actStatus")]
+
+        public string actStatus { get; set; }
+
+        [JsonProperty("address")]
+
+        public string address { get; set; }
+
+        [JsonProperty("birthDate")]
+
+        public string birthDate { get; set; }
+
+        [JsonProperty("district")]
+
+        public string district { get; set; }
+
+        [JsonProperty("gender")]
+
+        public string gender { get; set; }
+
+        [JsonProperty("idNo")]
+
+        public string idNo { get; set; }
+
+        [JsonProperty("idType")]
+
+        public string idType { get; set; }
+
+        [JsonProperty("imageName1")]
+
+        public string imageName1 { get; set; }
+
+        [JsonProperty("imageName2")]
+
+        public string imageName2 { get; set; }
+
+        [JsonProperty("imageName3")]
+
+        public string imageName3 { get; set; }
+
+        [JsonProperty("imagePath")]
+
+        public string imagePath { get; set; }
+
+        [JsonProperty("isdn")]
+
+        public string isdn { get; set; }
+
+        [JsonProperty("language")]
+
+        public string language { get; set; }
+
+        [JsonProperty("precinct")]
+
+        public string precinct { get; set; }
+
+        [JsonProperty("province")]
+
+        public string province { get; set; }
+
+        [JsonProperty("subId")]
+
+        public string subId { get; set; }
+
+        [JsonProperty("subName")]
+
+        public string subName { get; set; }
+
+
+
+        [JsonProperty("isConfirm")]
+
+        public string isConfirm { get; set; }
+
+        
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+       
+
+    }
+
+
+    public class betResWalletCusExtenV2 : ResCommnon
+    {
+
+        
+       
+
+
+        [JsonProperty("custormer")]
+        public betResWalletCusV2 custormer { get; set; }
+
+        
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+    }
+
+
+
+}

+ 61 - 0
ApiWeb/ApiProcessToken/Models/bet/betResponseObj.cs

@@ -0,0 +1,61 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class betResponseObj: ResCommnon
+    {
+       
+       
+
+        [JsonProperty("serviceId")]
+        public string serviceId { get; set; }
+
+        [JsonProperty("randomId")]
+        public string randomId { get; set; }
+        [JsonProperty("totalMoney")]
+        public string totalMoney { get; set; }
+        
+
+        [JsonProperty("requestIdUi")]
+        public string requestIdUi { get; set; }
+
+        [JsonProperty("requestIdApi")]
+        public string requestIdApi { get; set; }
+
+
+
+
+
+     
+
+        [JsonProperty("tranId")]
+        public string tranId { get; set; }
+
+        [JsonProperty("billCode")]
+        public string billCode { get; set; }
+
+        [JsonProperty("tranCode")]
+        public string tranCode { get; set; }
+
+        [JsonProperty("payContent")]
+        public string payContent { get; set; }
+
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+ 
+
+
+
+}

+ 109 - 0
ApiWeb/ApiProcessToken/Models/bet/betTicketObj.cs

@@ -0,0 +1,109 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class betTicketObj
+    {
+        [JsonProperty("seq")]
+        public string seq { get; set; }
+
+        [JsonProperty("id")]
+        public string id { get; set; }
+
+        [JsonProperty("money")]
+        public string money { get; set; }
+
+        [JsonProperty("code")]
+        public string code { get; set; }
+
+        [JsonProperty("createDate")]
+        public string createDate { get; set; }
+
+        [JsonProperty("termId")]
+        public string termId { get; set; }
+
+        [JsonProperty("status")]
+        public string status { get; set; }
+
+        [JsonProperty("paymentCode")]
+        public string paymentCode { get; set; }
+
+        [JsonProperty("paymentMessage")]
+        public string paymentMessage { get; set; }
+
+        [JsonProperty("split")]
+        public string split { get; set; }
+
+
+        [JsonProperty("billCode")]
+        public string billCode { get; set; }
+
+
+        [JsonProperty("channel")]
+        public string channel { get; set; }
+
+        [JsonProperty("channelPayment")]
+        public string channelPayment { get; set; }
+
+
+        [JsonProperty("termStartDate")]
+        public string termStartDate { get; set; }
+
+
+        [JsonProperty("termEndDate")]
+        public string termEndDate { get; set; }
+
+
+        [JsonProperty("termRandomDate")]
+        public string termRandomDate { get; set; }
+
+
+        [JsonProperty("termResult")]
+        public string termResult { get; set; }
+
+        [JsonProperty("isEvening")]
+        public string isEvening { get; set; }
+
+
+        [JsonProperty("moneyWin")]
+        public string moneyWin { get; set; }
+
+        [JsonProperty("gameId")]
+        public string gameId { get; set; }
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class betTicketObjList : ResCommnon
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+
+        [JsonProperty("listTicket")]
+        public betTicketObj[] listTicket { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+    }
+
+
+
+}

+ 109 - 0
ApiWeb/ApiProcessToken/Models/bet/betTicketWinObj.cs

@@ -0,0 +1,109 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class betTicketWinObj
+    {
+        [JsonProperty("seq")]
+
+        public string seq { get; set; }
+
+        [JsonProperty("msisdn")]
+
+        public string msisdn { get; set; }
+
+        [JsonProperty("tiket")]
+
+        public string tiket { get; set; }
+
+        [JsonProperty("ticketDate")]
+
+        public string ticketDate { get; set; }
+
+        [JsonProperty("ticketMoney")]
+
+        public string ticketMoney { get; set; }
+
+        [JsonProperty("winnerCode")]
+
+        public string winnerCode { get; set; }
+
+        [JsonProperty("winnerDetail")]
+
+        public string winnerDetail { get; set; }
+
+        [JsonProperty("randomId")]
+
+        public string randomId { get; set; }
+
+        [JsonProperty("termDateStart")]
+
+        public string termDateStart { get; set; }
+
+        [JsonProperty("termDateEnd")]
+
+        public string termDateEnd { get; set; }
+
+        [JsonProperty("termDateRandom")]
+
+        public string termDateRandom { get; set; }
+
+        
+        [JsonProperty("eCreateDate")]
+
+        public string eCreateDate { get; set; }
+
+        [JsonProperty("eExpireDate")]
+
+        public string eExpireDate { get; set; }
+
+        [JsonProperty("evoucher")]
+
+        public string evoucher { get; set; }
+
+        [JsonProperty("emoney")]
+
+        public string emoney { get; set; }
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class betTicketWinObjList : ResCommnon
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+
+        [JsonProperty("totalRow")]
+        public string totalRow { get; set; }
+
+
+        [JsonProperty("list")]
+        public betTicketWinObj[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+    }
+
+
+
+}

+ 100 - 0
ApiWeb/ApiProcessToken/Models/bet/cmsParam.cs

@@ -0,0 +1,100 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class cmsParam
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("code")]
+
+        public string code { get; set; }
+
+        [JsonProperty("values")]
+
+        public string values { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+        [JsonProperty("status")]
+
+        public string status { get; set; }
+
+        [JsonProperty("codeGroup")]
+
+        public string codeGroup { get; set; }
+
+        [JsonProperty("display0")]
+
+        public string display0 { get; set; }
+
+        [JsonProperty("display1")]
+
+        public string display1 { get; set; }
+
+        [JsonProperty("display2")]
+
+        public string display2 { get; set; }
+
+        [JsonProperty("display3")]
+
+        public string display3 { get; set; }
+
+        [JsonProperty("display4")]
+
+        public string display4 { get; set; }
+
+        [JsonProperty("display5")]
+
+        public string display5 { get; set; }
+
+        [JsonProperty("gameId")]
+
+        public string gameId { get; set; }
+
+        [JsonProperty("channel")]
+
+        public string channel { get; set; }
+
+
+
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class cmsParamList : ResCommnon
+    {
+     
+
+
+        [JsonProperty("listParam")]
+        public cmsParam[] listParam { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 83 - 0
ApiWeb/ApiProcessToken/Models/bet/cmsRevenue.cs

@@ -0,0 +1,83 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class cmsRevenue
+    {
+        [JsonProperty("date")]
+
+        public string date { get; set; }
+
+        [JsonProperty("gameId")]
+
+        public string gameId { get; set; }
+
+        [JsonProperty("totalUser")]
+
+        public string totalUser { get; set; }
+
+        [JsonProperty("totalTicket")]
+
+        public string totalTicket { get; set; }
+
+        [JsonProperty("totalMoney")]
+
+        public string totalMoney { get; set; }
+
+        [JsonProperty("totalTicketWin")]
+
+        public string totalTicketWin { get; set; }
+
+        [JsonProperty("totalMoneyWin")]
+
+        public string totalMoneyWin { get; set; }
+
+        [JsonProperty("rate")]
+
+        public string rate { get; set; }
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class cmsRevenueList : ResCommnon
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+        [JsonProperty("totalRow")]
+        public string totalRow { get; set; }
+
+
+
+        [JsonProperty("listRevenue")]
+        public cmsRevenue[] listRevenue { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 73 - 0
ApiWeb/ApiProcessToken/Models/bet/cmsSearchMsisdn.cs

@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class cmsSearchMsisdn
+    {
+        [JsonProperty("subId")]
+
+        public string subId { get; set; }
+
+        [JsonProperty("msg")]
+
+        public string msg { get; set; }
+
+        [JsonProperty("msisdn")]
+
+        public string msisdn { get; set; }
+
+        [JsonProperty("lastLogin")]
+
+        public string lastLogin { get; set; }
+
+        [JsonProperty("createDate")]
+
+        public string createDate { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+
+        [JsonProperty("status")]
+
+        public string status { get; set; }
+
+        [JsonProperty("lockDate")]
+        public string lockDate { get; set; }
+
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class cmsSearchMsisdnList : ResCommnon
+    {
+        
+
+        [JsonProperty("listSeachMsisdn")]
+        public cmsSearchMsisdn[] listSeachMsisdn { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 97 - 0
ApiWeb/ApiProcessToken/Models/bet/cmsTicketInfo.cs

@@ -0,0 +1,97 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class cmsTicketInfo
+    {
+        [JsonProperty("seq")]
+
+        public string seq { get; set; }
+
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("billCode")]
+
+        public string billCode { get; set; }
+
+        [JsonProperty("subId")]
+
+        public string subId { get; set; }
+
+        [JsonProperty("users")]
+
+        public string users { get; set; }
+
+        [JsonProperty("date")]
+
+        public string date { get; set; }
+
+        [JsonProperty("money")]
+
+        public string money { get; set; }
+
+        [JsonProperty("gameId")]
+
+        public string gameId { get; set; }
+
+        [JsonProperty("ticket")]
+
+        public string ticket { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+        [JsonProperty("randomId")]
+
+        public string randomId { get; set; }
+
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class cmsTicketInfoList : ResCommnon
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+        [JsonProperty("totalRow")]
+        public string totalRow { get; set; }
+
+
+
+        [JsonProperty("listTicketInfo")]
+        public cmsTicketInfo[] listTicketInfo { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 97 - 0
ApiWeb/ApiProcessToken/Models/bet/cmsTicketWin.cs

@@ -0,0 +1,97 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class cmsTicketWin
+    {
+        [JsonProperty("seq")]
+
+        public string seq { get; set; }
+
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+      
+        [JsonProperty("date")]
+
+        public string date { get; set; }
+
+        [JsonProperty("msisdn")]
+
+        public string msisdn { get; set; }
+
+        [JsonProperty("gameId")]
+
+        public string gameId { get; set; }
+
+        [JsonProperty("randomId")]
+
+        public string randomId { get; set; }
+
+        [JsonProperty("betId")]
+
+        public string betId { get; set; }
+
+        [JsonProperty("isPayOnline")]
+
+        public string isPayOnline { get; set; }
+
+
+        [JsonProperty("isPay")]
+
+        public string isPay { get; set; }
+
+        [JsonProperty("winnerCode")]
+
+        public string winnerCode { get; set; }
+
+        [JsonProperty("winnerName")]
+
+        public string winnerName { get; set; }
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class cmsTicketWinList : ResCommnon
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+        [JsonProperty("totalRow")]
+        public string totalRow { get; set; }
+
+
+
+        [JsonProperty("listTicketWin")]
+        public cmsTicketWin[] listTicketWin { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 74 - 0
ApiWeb/ApiProcessToken/Models/bet/cmsTotalByTerm.cs

@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class cmsTotalByTerm
+    {
+        [JsonProperty("randomId")]
+
+        public string randomId { get; set; }
+
+        [JsonProperty("startDate")]
+
+        public string startDate { get; set; }
+
+        [JsonProperty("endDate")]
+
+        public string endDate { get; set; }
+
+        [JsonProperty("result")]
+
+        public string result { get; set; }
+
+        [JsonProperty("status")]
+
+        public string status { get; set; }
+
+        [JsonProperty("money")]
+
+        public string money { get; set; }
+
+        [JsonProperty("moneyWin")]
+
+        public string moneyWin { get; set; }
+
+        [JsonProperty("rate")]
+
+        public string rate { get; set; }
+
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class cmsTotalByTermList : ResCommnon
+    {
+     
+
+
+        [JsonProperty("list")]
+        public cmsTotalByTerm[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 92 - 0
ApiWeb/ApiProcessToken/Models/bet/cmsTraficDetail.cs

@@ -0,0 +1,92 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class cmsTraficDetail
+    {
+        [JsonProperty("seq")]
+
+        public string seq { get; set; }
+
+        [JsonProperty("gameName")]
+
+        public string gameName { get; set; }
+
+        [JsonProperty("billCode")]
+
+        public string billCode { get; set; }
+
+        [JsonProperty("tranCode")]
+
+        public string tranCode { get; set; }
+
+        [JsonProperty("date")]
+
+        public string date { get; set; }
+
+        [JsonProperty("cusName")]
+
+        public string cusName { get; set; }
+
+        [JsonProperty("msisdn")]
+
+        public string msisdn { get; set; }
+
+        [JsonProperty("quantity")]
+
+        public string quantity { get; set; }
+
+        [JsonProperty("price")]
+
+        public string price { get; set; }
+
+        [JsonProperty("moneyBeforeTax")]
+
+        public string moneyBeforeTax { get; set; }
+
+        [JsonProperty("tax")]
+
+        public string tax { get; set; }
+
+        [JsonProperty("moneyTax")]
+
+        public string moneyTax { get; set; }
+
+        [JsonProperty("moneyAfterTax")]
+
+        public string moneyAfterTax { get; set; }
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class cmsTraficDetailList : ResCommnon
+    {
+     
+
+
+        [JsonProperty("list")]
+        public cmsTraficDetail[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 68 - 0
ApiWeb/ApiProcessToken/Models/bet/cmsTraficTotal.cs

@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class cmsTraficTotal
+    {
+        [JsonProperty("seq")]
+
+        public string seq { get; set; }
+
+        [JsonProperty("gameName")]
+
+        public string gameName { get; set; }
+
+        [JsonProperty("total")]
+
+        public string total { get; set; }
+
+        [JsonProperty("moneyBeforeTax")]
+
+        public string moneyBeforeTax { get; set; }
+
+        [JsonProperty("tax")]
+
+        public string tax { get; set; }
+
+        [JsonProperty("moneyTax")]
+
+        public string moneyTax { get; set; }
+
+        [JsonProperty("moneyAfterTax")]
+
+        public string moneyAfterTax { get; set; }
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class cmsTraficTotalList : ResCommnon
+    {
+     
+
+
+        [JsonProperty("list")]
+        public cmsTraficTotal[] list { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 73 - 0
ApiWeb/ApiProcessToken/Models/bet/lkpwResultHis.cs

@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class lkpwResultHis
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("randomId")]
+
+        public string randomId { get; set; }
+
+        [JsonProperty("date")]
+
+        public string date { get; set; }
+
+        [JsonProperty("result")]
+
+        public string result { get; set; }
+
+        [JsonProperty("usersName")]
+
+        public string usersName { get; set; }
+
+        [JsonProperty("status")]
+
+        public string status { get; set; }
+
+
+        [JsonProperty("action")]
+
+        public string action { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class lkpwResultHisList : ResCommnon
+    {
+        
+
+        [JsonProperty("listHis")]
+        public lkpwResultHis[] listHis { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 78 - 0
ApiWeb/ApiProcessToken/Models/bet/lotoBlackGet.cs

@@ -0,0 +1,78 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class lotoBlackGet
+    {
+
+        [JsonProperty("seq")]
+
+        public string seq { get; set; }
+
+
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("msisdn")]
+
+        public string msisdn { get; set; }
+
+        [JsonProperty("date")]
+
+        public string date { get; set; }
+
+        [JsonProperty("users")]
+
+        public string users { get; set; }
+
+        [JsonProperty("isLock")]
+
+        public string isLock { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class lotoBlackGetList : ResCommnon
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+        [JsonProperty("totalRow")]
+        public string totalRow { get; set; }
+
+
+        [JsonProperty("listLotoBlackList")]
+        public lotoBlackGet[] listLotoBlackList { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 56 - 0
ApiWeb/ApiProcessToken/Models/bet/lotoBlackInsert.cs

@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class lotoBlackInsert
+    {
+        [JsonProperty("msisdn")]
+
+        public string msisdn { get; set; }
+
+        [JsonProperty("isLock")]
+
+        public string isLock { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class lotoBlackInsertList
+    {
+        
+
+        [JsonProperty("users")]
+        public string users { get; set; }
+
+
+        [JsonProperty("data")]
+        public lotoBlackInsert[] data { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 916 - 0
ApiWeb/ApiProcessToken/Models/bet/lotoCmsDataAccess.cs

@@ -0,0 +1,916 @@
+using Oracle.ManagedDataAccess.Client;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Web;
+
+namespace ResfullApi.Models.bet
+{
+    public class balanceDataAccess
+    {
+        public balanceDataAccess()
+        {
+
+        }
+
+
+        public static DataSet getListTerm(string v_users, string v_gameId, string v_serviceId, string v_channel, string v_language
+            , string v_fromDate, string v_toDate, string v_status, string v_rowsOnPage,string v_seqPage,string v_id)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.get_list_term";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_status", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                               new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_users;
+            parms[1].Value = v_gameId;
+            parms[2].Value = v_serviceId;
+            parms[3].Value = v_channel;
+            parms[4].Value = v_language;
+            parms[5].Value = v_fromDate;
+            parms[6].Value = v_toDate;
+            parms[7].Value = v_status;
+            parms[8].Value = v_rowsOnPage;
+            parms[9].Value = v_seqPage;
+            parms[10].Value = v_id;
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet lkpw_result_update(string v_randomId, string v_users, string v_result, string v_status, string v_note)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.lkpw_result_update";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_randomId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_result", OracleDbType.NVarchar2),
+                                new OracleParameter("v_status", OracleDbType.NVarchar2),
+                                new OracleParameter("v_note", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_randomId;
+            parms[1].Value = v_users;
+            parms[2].Value = v_result;
+            parms[3].Value = v_status;
+            parms[4].Value = v_note;
+           
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet lkpw_result_get_his(string v_randomId, string v_users)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.lkpw_result_get_his";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_randomId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                               
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_randomId;
+            parms[1].Value = v_users;
+           
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet report_get_total_trafic(string v_gameId, string v_fromDate,string v_toDate,string totalRow,string seqRow)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.report_get_total_by_day";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_gameId;
+            parms[1].Value = v_fromDate;
+            parms[2].Value = v_toDate;
+            parms[3].Value = totalRow;
+            parms[4].Value = seqRow;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet cmsSearMsisdn(string v_subId, string v_msisdn)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.report_lock_stats_get";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_subId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_subId;
+            parms[1].Value = v_msisdn;
+           
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+        public static DataSet cmsLockByMsisdn(string v_subId, string v_msisdn,string users,string isLock,string note)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.report_lock_by_msisdn";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_subId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_isLock", OracleDbType.NVarchar2),
+                                new OracleParameter("v_note", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_subId;
+            parms[1].Value = v_msisdn;
+            parms[2].Value = users;
+            parms[3].Value = isLock;
+            parms[4].Value = note;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet cmsGetInfoTicket(string gameId, string msisdn, string tungay,string denngay,string v_rowsOnPage,string v_seqPage)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.report_ticket_get_info";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = gameId;
+            parms[1].Value = msisdn;
+            parms[2].Value = tungay;
+            parms[3].Value = denngay;
+            parms[4].Value = v_rowsOnPage;
+            parms[5].Value = v_seqPage;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet cmsGetTicketWin(string gameId, string msisdn,string subId, string tungay, string denngay, string v_rowsOnPage, string v_seqPage)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.report_ticket_get_win";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_subId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = gameId;
+            parms[1].Value = msisdn;
+            parms[2].Value = subId;
+            parms[3].Value = tungay;
+            parms[4].Value = denngay;
+            parms[5].Value = v_rowsOnPage;
+            parms[6].Value = v_seqPage;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet cmsGetTraficTotal(string gameId,  string tungay, string denngay)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.report_get_trafic_total";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = gameId;
+            parms[1].Value = tungay;
+            parms[2].Value = denngay;
+          
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+        public static DataSet cmsGetTop(string gameId,  string tungay, string denngay,string type, string row, string v_rowsOnPage, string v_seqPage)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.report_get_top";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_type", OracleDbType.NVarchar2),
+                                new OracleParameter("v_total_row", OracleDbType.NVarchar2),
+
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = gameId;
+            parms[1].Value = tungay;
+            parms[2].Value = denngay;
+            parms[3].Value = type;
+            parms[4].Value = row;
+            parms[5].Value = v_rowsOnPage;
+            parms[6].Value = v_seqPage;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet export_created(string v_users, string v_gameId, string v_name, string v_fromDate, string v_toDate)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.export_created";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_name", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_users;
+            parms[1].Value = v_gameId;
+            parms[2].Value = v_name;
+            parms[3].Value = v_fromDate;
+            parms[4].Value = v_toDate;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet export_action(string v_users, string v_export_id, string v_type, string v_note)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.export_action";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_export_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_type", OracleDbType.NVarchar2),
+                                new OracleParameter("v_note", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_users;
+            parms[1].Value = v_export_id;
+            parms[2].Value = v_type;
+            parms[3].Value = v_note;
+           
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        public static DataSet export_winner_get_data(string v_users, string v_gameId, string v_fromDate, string v_toDate, string v_payOnline
+            , string v_rowsOnPage, string v_seqPage,string isPayType)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.export_winner_get_data";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_payOnline", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_payType", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_users;
+            parms[1].Value = v_gameId;
+            parms[2].Value = v_fromDate;
+            parms[3].Value = v_toDate;
+            parms[4].Value = v_payOnline;
+            parms[5].Value = v_rowsOnPage;
+            parms[6].Value = v_seqPage;
+            parms[7].Value = isPayType;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+
+
+        public static DataSet export_winner_get_data_byId(string v_users, string v_export_id, string v_type
+            , string v_rowsOnPage, string v_seqPage)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.export_winner_get_data_byId";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_export_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_type", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_users;
+            parms[1].Value = v_export_id;
+            parms[2].Value = v_type;
+            parms[3].Value = v_rowsOnPage;
+            parms[4].Value = v_seqPage;
+           
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+        public static DataSet export_get_his(string v_export_id, string v_users)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.export_get_his";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_export_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_export_id;
+            parms[1].Value = v_users;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet export_get_list( string v_users, string v_gameId,string v_fromDate,string v_toDate, string v_rowsOnPage, string v_seqPage,string v_status,string exportId)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.export_get_list";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_status", OracleDbType.NVarchar2),
+                                new OracleParameter("v_exportId", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_users;
+            parms[1].Value = v_gameId;
+            parms[2].Value = v_fromDate;
+            parms[3].Value = v_toDate;
+            parms[4].Value = v_rowsOnPage;
+            parms[5].Value = v_seqPage;
+            parms[6].Value = v_status;
+            parms[7].Value = exportId;
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+        public static DataSet blackList_get_list(string v_users,string v_msisdn, string v_fromDate,string v_toDate,string v_rowsOnPage,string v_seqPage)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.blacklist_get_data";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                                
+                               new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_users;
+            parms[1].Value = v_msisdn;
+            parms[2].Value = v_fromDate;
+            parms[3].Value = v_toDate;
+            parms[4].Value = v_rowsOnPage;
+            parms[5].Value = v_seqPage;
+            
+
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+
+        public static DataSet param_get_list(string channel, string codeGroup, string code)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.param_get_list";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_pram_group_code", OracleDbType.NVarchar2),
+                                new OracleParameter("v_pram_code", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = channel;
+            parms[1].Value = codeGroup;
+            parms[2].Value = code;
+           
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet param_update(string id, string values, string note,string ds0, string ds1, string ds2, string ds3, string ds4, string ds5)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.param_update";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_values", OracleDbType.NVarchar2),
+                                new OracleParameter("v_note", OracleDbType.NVarchar2),
+                                new OracleParameter("v_ds0", OracleDbType.NVarchar2),
+                                new OracleParameter("v_ds1", OracleDbType.NVarchar2),
+                                new OracleParameter("v_ds2", OracleDbType.NVarchar2),
+                                new OracleParameter("v_ds3", OracleDbType.NVarchar2),
+                                new OracleParameter("v_ds4", OracleDbType.NVarchar2),
+                                new OracleParameter("v_ds5", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = id;
+            parms[1].Value = values;
+            parms[2].Value = note;
+            parms[3].Value = ds0;
+            parms[4].Value = ds1;
+            parms[5].Value = ds2;
+            parms[6].Value = ds3;
+            parms[7].Value = ds4;
+            parms[8].Value = ds5;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet cmsDoanhThuTongHop (string channel, string serviceId, string gameId, string gamefromDate, string toDate)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.baocao_doanhthu_tonghop";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = channel;
+            parms[1].Value = serviceId;
+            parms[2].Value = gameId;
+            parms[3].Value = gamefromDate;
+            parms[4].Value = toDate;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet cmsDoanhThuChiTiet(string channel, string serviceId, string gameId, string gamefromDate, string toDate)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.baocao_doanhthu_chitiet";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = channel;
+            parms[1].Value = serviceId;
+            parms[2].Value = gameId;
+            parms[3].Value = gamefromDate;
+            parms[4].Value = toDate;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet cmsTraThuongTongHop(string channel, string serviceId, string gameId, string gamefromDate, string toDate)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.baocao_trathuong_tonghop";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = channel;
+            parms[1].Value = serviceId;
+            parms[2].Value = gameId;
+            parms[3].Value = gamefromDate;
+            parms[4].Value = toDate;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet cmsTraThuongChiTiet(string channel, string serviceId, string gameId, string gamefromDate, string toDate)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.baocao_trathuong_chitiet";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = channel;
+            parms[1].Value = serviceId;
+            parms[2].Value = gameId;
+            parms[3].Value = gamefromDate;
+            parms[4].Value = toDate;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet cmsTongHopTheoKyQuay(string channel, string serviceId, string gameId, string gamefromDate, string toDate)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.baocao_tonghop_kyquay";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = channel;
+            parms[1].Value = serviceId;
+            parms[2].Value = gameId;
+            parms[3].Value = gamefromDate;
+            parms[4].Value = toDate;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+        public static void InsertBulkExport(string sSQL, List<List<string>> dataColumn)
+        {
+            OracleConnection connection = null;
+            try
+            {
+                connection =DataAccess.getPoolingConnection();
+                connection.Open();
+                OracleTransaction transaction;
+
+                // Start a local transaction
+                transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
+                using (var command = connection.CreateCommand())
+                {
+                    command.CommandText = sSQL;
+                    command.CommandType = CommandType.StoredProcedure;
+                    command.ArrayBindCount = dataColumn[0].Count;
+                    command.Transaction = transaction;
+
+
+
+
+                    var v_export_id = dataColumn[0].ToArray();
+                    OracleParameter param0 = new OracleParameter("v_export_id", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param0.Value = v_export_id;
+                    param0.Size = v_export_id.Length;
+                    command.Parameters.Add(param0);
+
+                    var v_winner_id = dataColumn[1].ToArray();
+                    OracleParameter param1 = new OracleParameter("v_winner_id", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param1.Value = v_winner_id;
+                    param1.Size = v_winner_id.Length;
+                    command.Parameters.Add(param1);
+
+                    var v_msisdn = dataColumn[2].ToArray();
+                    OracleParameter param2 = new OracleParameter("v_msisdn", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param2.Value = v_msisdn;
+                    param2.Size = v_msisdn.Length;
+                    command.Parameters.Add(param2);
+
+                    var v_money = dataColumn[3].ToArray();
+                    OracleParameter param3 = new OracleParameter("v_money", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param3.Value = v_money;
+                    param3.Size = v_money.Length;
+                    command.Parameters.Add(param3);
+
+
+                    var v_random_id = dataColumn[4].ToArray();
+                    OracleParameter param4 = new OracleParameter("v_random_id", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param4.Value = v_random_id;
+                    param4.Size = v_random_id.Length;
+                    command.Parameters.Add(param4);
+
+                    var v_bet_id = dataColumn[5].ToArray();
+                    OracleParameter param5 = new OracleParameter("v_bet_id", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param5.Value = v_bet_id;
+                    param5.Size = v_bet_id.Length;
+                    command.Parameters.Add(param5);
+
+
+                    var v_winner_code = dataColumn[6].ToArray();
+                    OracleParameter param6 = new OracleParameter("v_winner_code", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param6.Value = v_winner_code;
+                    param6.Size = v_winner_code.Length;
+                    command.Parameters.Add(param6);
+
+
+
+
+                    command.ExecuteNonQuery();
+
+
+
+                    transaction.Commit();
+
+                }
+
+            }
+            catch (OracleException ex)
+            {
+                Console.WriteLine(ex.ToString());
+                throw;
+            }
+            finally
+            {
+                connection.Close();
+            }
+        }
+
+
+
+        public static void InsertBulkBlack(string sSQL, List<List<string>> dataColumn)
+        {
+            OracleConnection connection = null;
+            try
+            {
+                connection = DataAccess.getPoolingConnection();
+                connection.Open();
+                OracleTransaction transaction;
+
+                // Start a local transaction
+                transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
+                using (var command = connection.CreateCommand())
+                {
+                    command.CommandText = sSQL;
+                    command.CommandType = CommandType.StoredProcedure;
+                    command.ArrayBindCount = dataColumn[0].Count;
+                    command.Transaction = transaction;
+
+
+
+
+                    var v_users = dataColumn[0].ToArray();
+                    OracleParameter param0 = new OracleParameter("v_users", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param0.Value = v_users;
+                    param0.Size = v_users.Length;
+                    command.Parameters.Add(param0);
+
+                    var v_msisdn = dataColumn[1].ToArray();
+                    OracleParameter param1 = new OracleParameter("v_msisdn", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param1.Value = v_msisdn;
+                    param1.Size = v_msisdn.Length;
+                    command.Parameters.Add(param1);
+
+                    var v_isLock = dataColumn[2].ToArray();
+                    OracleParameter param2 = new OracleParameter("v_isLock", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param2.Value = v_isLock;
+                    param2.Size = v_isLock.Length;
+                    command.Parameters.Add(param2);
+
+
+                    var v_note = dataColumn[3].ToArray();
+                    OracleParameter param3 = new OracleParameter("v_note", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param3.Value = v_note;
+                    param3.Size = v_note.Length;
+                    command.Parameters.Add(param3);
+
+
+                    command.ExecuteNonQuery();
+
+
+
+                    transaction.Commit();
+
+                }
+
+            }
+            catch (OracleException ex)
+            {
+                Console.WriteLine(ex.ToString());
+                throw;
+            }
+            finally
+            {
+                connection.Close();
+            }
+        }
+
+
+
+
+
+
+
+
+
+
+
+    }
+}

+ 110 - 0
ApiWeb/ApiProcessToken/Models/bet/lotoCus.cs

@@ -0,0 +1,110 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class lotoCus
+    {
+        [JsonProperty("cusId")]
+
+        public string cusId { get; set; }
+
+        [JsonProperty("actStatus")]
+
+        public string actStatus { get; set; }
+
+        [JsonProperty("address")]
+
+        public string address { get; set; }
+
+        [JsonProperty("birthday")]
+
+        public string birthday { get; set; }
+
+        [JsonProperty("district")]
+
+        public string district { get; set; }
+
+        [JsonProperty("gentder")]
+
+        public string gentder { get; set; }
+
+        [JsonProperty("idno")]
+
+        public string idno { get; set; }
+
+        [JsonProperty("idtype")]
+
+        public string idtype { get; set; }
+
+        [JsonProperty("imageName1")]
+
+        public string imageName1 { get; set; }
+
+        [JsonProperty("imageName2")]
+
+        public string imageName2 { get; set; }
+
+        [JsonProperty("imageName3")]
+
+        public string imageName3 { get; set; }
+
+        [JsonProperty("imagePath")]
+
+        public string imagePath { get; set; }
+
+        [JsonProperty("isdn")]
+
+        public string isdn { get; set; }
+
+        [JsonProperty("language")]
+
+        public string language { get; set; }
+
+        [JsonProperty("precinct")]
+
+        public string precinct { get; set; }
+
+        [JsonProperty("province")]
+
+        public string province { get; set; }
+
+
+        [JsonProperty("subId")]
+
+        public string subId { get; set; }
+
+        [JsonProperty("subName")]
+
+        public string subName { get; set; }
+
+        [JsonProperty("isConfirm")]
+
+        public string isConfirm { get; set; }
+
+        [JsonProperty("date")]
+
+        public string date { get; set; }
+
+        [JsonProperty("lastUpdate")]
+
+        public string lastUpdate { get; set; }
+
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+  
+
+
+
+}

+ 1475 - 0
ApiWeb/ApiProcessToken/Models/bet/lotoDataAccess.cs

@@ -0,0 +1,1475 @@
+using Oracle.ManagedDataAccess.Client;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Web;
+
+namespace ResfullApi.Models.bet
+{
+    public class lotoDataAccess
+    {
+        public lotoDataAccess()
+        {
+
+        }
+
+        public static void THAILAN_EVOUCHER_DETAIL_IN(string sSQL, List<List<string>> dataColumn)
+        {
+            OracleConnection connection = null;
+            try
+            {
+                connection = DataAccess.getPoolingConnection();
+                connection.Open();
+                OracleTransaction transaction;
+
+                // Start a local transaction
+                transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
+                using (var command = connection.CreateCommand())
+                {
+                    command.CommandText = sSQL;
+                    command.CommandType = CommandType.StoredProcedure;
+                    command.ArrayBindCount = dataColumn[0].Count;
+                    command.Transaction = transaction;
+
+
+
+
+                    var v_evoucher_id = dataColumn[0].ToArray();
+                    OracleParameter param0 = new OracleParameter("v_evoucher_id", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param0.Value = v_evoucher_id;
+                    param0.Size = v_evoucher_id.Length;
+                    command.Parameters.Add(param0);
+
+                    var v_serial = dataColumn[1].ToArray();
+                    OracleParameter param1 = new OracleParameter("v_serial", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param1.Value = v_serial;
+                    param1.Size = v_serial.Length;
+                    command.Parameters.Add(param1);
+
+                    var v_evoucher = dataColumn[2].ToArray();
+                    OracleParameter param2 = new OracleParameter("v_evoucher", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param2.Value = v_evoucher;
+                    param2.Size = v_evoucher.Length;
+                    command.Parameters.Add(param2);
+
+                    var v_money = dataColumn[3].ToArray();
+                    OracleParameter param3 = new OracleParameter("v_money", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param3.Value = v_money;
+                    param3.Size = v_money.Length;
+                    command.Parameters.Add(param3);
+
+
+                    var v_expire_date = dataColumn[4].ToArray();
+                    OracleParameter param4 = new OracleParameter("v_expire_date", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param4.Value = v_expire_date;
+                    param4.Size = v_expire_date.Length;
+                    command.Parameters.Add(param4);
+
+
+                    var v_create_date = dataColumn[5].ToArray();
+                    OracleParameter param5 = new OracleParameter("v_create_date", OracleDbType.NVarchar2, ParameterDirection.Input);
+                    param5.Value = v_create_date;
+                    param5.Size = v_create_date.Length;
+                    command.Parameters.Add(param5);
+
+
+
+                    command.ExecuteNonQuery();
+
+
+
+                    transaction.Commit();
+
+                }
+
+            }
+            catch (OracleException ex)
+            {
+                Console.WriteLine(ex.ToString());
+                throw;
+            }
+            finally
+            {
+                connection.Close();
+            }
+        }
+
+
+
+        public static DataSet THAILAN_EVOUCHER_IN(string name, string code, string users, string totalrow,string totalmoney)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_PKG.THAILAN_EVOUCHER_IN";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_name", OracleDbType.NVarchar2),
+                                new OracleParameter("v_code", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_total_row", OracleDbType.NVarchar2),
+                                new OracleParameter("v_total_money", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = name;
+            parms[1].Value = code;
+            parms[2].Value = users;
+            parms[3].Value = totalrow;
+            parms[4].Value = totalmoney;
+
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet THAILAN_GET_RANDOM_NOT_DRAW(string v_type)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_PKG.THAILAN_GET_RANDOM_NOT_DRAW";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_type", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_type;
+           
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+        public static DataSet THAILAN_UP_RANDOM_NOT_DRAW(string v_random,string v_seq)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_PKG.THAILAN_UP_RANDOM_NOT_DRAW";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_random", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seq", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_random;
+            parms[1].Value = v_seq;
+
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet THAILAN_UP_PRIZE(string v_random, string v_seq)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_PKG.THAILAN_UP_PRIZE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_random", OracleDbType.NVarchar2),
+                                new OracleParameter("v_type", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_random;
+            parms[1].Value = v_seq;
+
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet ThaiLan_checkTicketBuy(string tiket, string randomId)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_PKG.THAILAN_CHECK_TICKET_BUY";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_ticket", OracleDbType.NVarchar2),
+                                new OracleParameter("v_random", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = tiket;
+            parms[1].Value = randomId;
+
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+        public static DataSet THAILAN_CMS_TOTAL_REVENUE(string v_tungay, string v_denngay, string v_channel, string v_pack)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.THAILAN_TOTAL_REVENUE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_pack", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_tungay;
+            parms[1].Value = v_denngay;
+            parms[2].Value = v_channel;
+            parms[3].Value = v_pack;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet THAILAN_CMS_DETAIL_PRIZE(string v_tungay, string v_denngay, string v_msisdn, string v_channel,string prize)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.THAILAN_DETAIL_PRIZE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                 new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                               new OracleParameter("v_prize", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_tungay;
+            parms[1].Value = v_denngay;
+            parms[2].Value = v_msisdn;
+            parms[3].Value = v_channel;
+            parms[4].Value = prize;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet THAILAN_CMS_TOTAL_PRIZE(string v_tungay, string v_denngay, string v_channel)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.THAILAN_TOTAL_PRIZE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                 new OracleParameter("v_channel", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_tungay;
+            parms[1].Value = v_denngay;
+            parms[2].Value = v_channel;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+        public static DataSet THAILAN_CMS_DETAIL_TICKET(string v_tungay, string v_denngay, string v_msisdn, string v_channel)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.THAILAN_DETAIL_TICKET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                 new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_tungay;
+            parms[1].Value = v_denngay;
+            parms[2].Value = v_msisdn;
+            parms[3].Value = v_channel;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet THAILAN_CMS_DETAIL_EVOUCHER(string v_tungay, string v_denngay, string v_msisdn, string v_evoucher, string v_status)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.THAILAN_DETAIL_EVOUCHER";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                 new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_evoucher", OracleDbType.NVarchar2),
+                                new OracleParameter("v_status", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_tungay;
+            parms[1].Value = v_denngay;
+            parms[2].Value = v_msisdn;
+            parms[3].Value = v_evoucher;
+            parms[4].Value = v_status;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet THAILAN_CMS_TOTAL_EVOUCHER(string v_tungay, string v_denngay, string v_status)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.THAILAN_TOTAL_EVOUCHER";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("v_status", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_tungay;
+            parms[1].Value = v_denngay;
+          
+            parms[2].Value = v_status;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+        //Kiem tra xem DB con song hay ko?
+        public static DataSet checkDB(string type)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_PKG.DB_CHECK";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_typw", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = type;
+          
+
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet resultUpdateManual(string randomId, string result, string users)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.getRerultUpdateManual";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("v_randomId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_result", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = randomId;
+            parms[1].Value = result;
+            parms[2].Value = users;
+            
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet reSearDeatailBet(string v_msisdn, string v_tungay, string v_denngay, string v_gameId
+            , string v_lottery, string v_isevening, string v_channel, string isWin)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.NF_SEARCH_DETAIL_BET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_lottery", OracleDbType.NVarchar2),
+                                new OracleParameter("v_isevening", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_isWin", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_msisdn;
+            parms[1].Value = v_tungay;
+            parms[2].Value = v_denngay;
+            parms[3].Value = v_gameId;
+            parms[4].Value = v_lottery;
+            parms[5].Value = v_isevening;
+            parms[6].Value = v_channel;
+            parms[7].Value = isWin;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet reSearDeatailBetLkps(string v_msisdn, string v_tungay, string v_denngay, string v_channel, string isWin)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.LKPS_SEARCH_DETAIL_BET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_isWin", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_msisdn;
+            parms[1].Value = v_tungay;
+            parms[2].Value = v_denngay;
+            
+            parms[3].Value = v_channel;
+            parms[4].Value = isWin;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet reSearDeatailBetUniqueMsisdn(string v_msisdn, string v_tungay, string v_denngay, string v_gameId
+            , string v_lottery, string v_isevening, string v_channel,string isWin)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.NF_SEARCH_DETAIL_BET_UNI_MSIDN";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_lottery", OracleDbType.NVarchar2),
+                                new OracleParameter("v_isevening", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_isWin", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_msisdn;
+            parms[1].Value = v_tungay;
+            parms[2].Value = v_denngay;
+            parms[3].Value = v_gameId;
+            parms[4].Value = v_lottery;
+            parms[5].Value = v_isevening;
+            parms[6].Value = v_channel;
+            parms[7].Value = isWin;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet reSearDeatailMt(string v_msisdn, string v_tungay, string v_denngay)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.NF_SEARCH_DETAIL_MT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_msisdn;
+            parms[1].Value = v_tungay;
+            parms[2].Value = v_denngay;
+           
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet reTotalByDayPrizeBolet(string v_msisdn, string v_tungay, string v_denngay
+            , string v_lottery, string v_isevening, string v_channel)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.NF_TOTAL_BY_PRIZE_BOLET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_lottery", OracleDbType.NVarchar2),
+                                new OracleParameter("v_isevening", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_msisdn;
+            parms[1].Value = v_tungay;
+            parms[2].Value = v_denngay;
+            parms[3].Value = v_lottery;
+            parms[4].Value = v_isevening;
+            parms[5].Value = v_channel;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet reTotalByDay(string v_msisdn, string v_tungay, string v_denngay, string v_gameId
+            , string v_lottery, string v_isevening, string v_channel)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.NF_TOTAL_BY_DAY";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_lottery", OracleDbType.NVarchar2),
+                                new OracleParameter("v_isevening", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_msisdn;
+            parms[1].Value = v_tungay;
+            parms[2].Value = v_denngay;
+            parms[3].Value = v_gameId;
+            parms[4].Value = v_lottery;
+            parms[5].Value = v_isevening;
+            parms[6].Value = v_channel;
+            
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet reTotalByDayLkps(string v_msisdn, string v_tungay, string v_denngay, string v_channel)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.LKPS_TOTAL_BY_DAY";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_msisdn;
+            parms[1].Value = v_tungay;
+            parms[2].Value = v_denngay;
+            
+            parms[3].Value = v_channel;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet reTotalByDayConvertMoney( string v_tungay, string v_denngay, string v_channel)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.NF_TOTAL_BY_DAY_CONVET_MONEY";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+          
+            parms[0].Value = v_tungay;
+            parms[1].Value = v_denngay;
+            parms[2].Value = v_channel;
+            
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet paramGetList(string v_id, string v_users)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.PAM_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_id;
+            parms[1].Value = v_users;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet paramInsert(string V_CODE, string V_SVALUES, string V_NOTE,
+            string V_STATUS, string V_CODE_GROUP, string V_DISPLAY0, string V_DISPLAY1, string V_DISPLAY2, string V_DISPLAY3,
+            string V_DISPLAY4, string V_DISPLAY5, string V_GAME_ID, string V_CHANNEL, string V_USERS)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.PAM_INSERT";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_SVALUES", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_STATUS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CODE_GROUP", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_DISPLAY0", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY1", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY2", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY3", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY4", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY5", OracleDbType.NVarchar2),
+                                new OracleParameter("V_GAME_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CHANNEL", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_CODE;
+            parms[1].Value = V_SVALUES;
+            parms[2].Value = V_NOTE;
+            parms[3].Value = V_STATUS;
+            parms[4].Value = V_CODE_GROUP;
+
+            parms[5].Value = V_DISPLAY0;
+            parms[6].Value = V_DISPLAY1;
+            parms[7].Value = V_DISPLAY2;
+            parms[8].Value = V_DISPLAY3;
+            parms[9].Value = V_DISPLAY4;
+            parms[10].Value = V_DISPLAY5;
+
+            parms[11].Value = V_GAME_ID;
+            parms[12].Value = V_CHANNEL;
+            parms[13].Value = V_USERS;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet paramUpdate(string V_ID, string V_CODE, string V_SVALUES, string V_NOTE,
+            string V_STATUS, string V_CODE_GROUP, string V_DISPLAY0, string V_DISPLAY1, string V_DISPLAY2, string V_DISPLAY3,
+            string V_DISPLAY4, string V_DISPLAY5, string V_GAME_ID, string V_CHANNEL, string V_USERS, string V_TYPE)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.PAM_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+                                new OracleParameter("V_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CODE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_SVALUES", OracleDbType.NVarchar2),
+                                new OracleParameter("V_NOTE", OracleDbType.NVarchar2),
+                                new OracleParameter("V_STATUS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CODE_GROUP", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_DISPLAY0", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY1", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY2", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY3", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY4", OracleDbType.NVarchar2),
+                                new OracleParameter("V_DISPLAY5", OracleDbType.NVarchar2),
+
+                                new OracleParameter("V_GAME_ID", OracleDbType.NVarchar2),
+                                new OracleParameter("V_CHANNEL", OracleDbType.NVarchar2),
+                                new OracleParameter("V_USERS", OracleDbType.NVarchar2),
+                                new OracleParameter("V_TYPE", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = V_ID;
+            parms[1].Value = V_CODE;
+            parms[2].Value = V_SVALUES;
+            parms[3].Value = V_NOTE;
+            parms[4].Value = V_STATUS;
+            parms[5].Value = V_CODE_GROUP;
+
+            parms[6].Value = V_DISPLAY0;
+            parms[7].Value = V_DISPLAY1;
+            parms[8].Value = V_DISPLAY2;
+            parms[9].Value = V_DISPLAY3;
+            parms[10].Value = V_DISPLAY4;
+            parms[11].Value = V_DISPLAY5;
+
+            parms[12].Value = V_GAME_ID;
+            parms[13].Value = V_CHANNEL;
+            parms[14].Value = V_USERS;
+            parms[15].Value = V_TYPE;
+
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet getListConvertByUser(string v_serviceId, string v_users, string v_type, string v_order
+            , string v_rowsOnPage, string v_seqPage, string v_id,string v_language, string v_fromdate, string v_todate,string channel_payment)
+        {
+
+            string str;
+            str = "";
+            str = "CONVERT_COINS_MONEY_PKG.getConvertMoneyList";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_type", OracleDbType.NVarchar2),
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromdate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_todate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_transferType", OracleDbType.NVarchar2),
+
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_serviceId;
+            parms[1].Value = v_users;
+            parms[2].Value = v_type;
+            parms[3].Value = v_order;
+            parms[4].Value = v_rowsOnPage;
+            parms[5].Value = v_seqPage;
+            parms[6].Value = v_id;
+            parms[7].Value = v_language;
+            parms[8].Value = v_fromdate;
+            parms[9].Value = v_todate;
+            parms[10].Value = channel_payment;
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet convertMoney(string user,string msisdn_topup, string channel, string channelPayment, string money, string language,string serviceId)
+        {
+
+            string str;
+            str = "";
+            str = "CONVERT_COINS_MONEY_PKG.requestChange";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_user", OracleDbType.NVarchar2),
+                                new OracleParameter("v_msisdn_topup", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channelPayment", OracleDbType.NVarchar2),
+                                new OracleParameter("v_money", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = user;
+            parms[1].Value = msisdn_topup;
+            parms[2].Value = channel;
+            parms[3].Value = channelPayment;
+            parms[4].Value = money;
+            parms[5].Value = language;
+            parms[6].Value = serviceId;
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet otpConfirm(string msisdn, string serviceId, string channel,string otp, string language)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_PKG.OTP_CONFIRM";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_user", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_otp", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = msisdn;
+            parms[1].Value = serviceId;
+            parms[2].Value = channel;
+            parms[3].Value = otp;
+            parms[4].Value = language;
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet otpSend(string msisdn, string serviceId,string channel,string language)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_PKG.OTP_SEND";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_user", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = msisdn;
+            parms[1].Value = serviceId;
+            parms[2].Value = channel;
+            parms[3].Value = language;
+
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+        public static DataSet lotoInsertBet(string v_user, string v_serviceId,string v_ticket,string v_money,string v_requestBuyTicket
+            , string v_responseBuyTicket, string v_requestConfirm, string v_responseConfirm,string paymentCode,string paymentMesage,
+            string v_startTimeSend,string v_endTimeSend,string v_duration,string v_gameId,string v_channel,string v_language)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_PKG.INSERT_BET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_user", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_ticket", OracleDbType.NVarchar2),
+                                new OracleParameter("v_money", OracleDbType.NVarchar2),
+                                new OracleParameter("v_requestIdUi", OracleDbType.NVarchar2),
+                                new OracleParameter("v_requestIdApi", OracleDbType.NVarchar2),
+                                new OracleParameter("v_requestIdPayment", OracleDbType.NVarchar2),
+                                new OracleParameter("v_tranId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_paymentCode", OracleDbType.NVarchar2),
+                                new OracleParameter("v_paymentMessage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_startTimeSend", OracleDbType.NVarchar2),
+                                new OracleParameter("v_endTimeSend", OracleDbType.NVarchar2),
+                                new OracleParameter("v_duration", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = v_user;
+            parms[1].Value = v_serviceId;
+            parms[2].Value = v_ticket;
+            parms[3].Value = v_money;
+            parms[4].Value = v_requestBuyTicket;
+            parms[5].Value = v_responseBuyTicket;
+            parms[6].Value = v_requestConfirm;
+            parms[7].Value = v_responseConfirm;
+            parms[8].Value = paymentCode;
+            parms[9].Value = paymentMesage;
+            parms[10].Value = v_startTimeSend;
+            parms[11].Value = v_endTimeSend;
+            parms[12].Value = v_duration;
+            parms[13].Value = v_gameId;
+            parms[14].Value = v_channel;
+            parms[15].Value = v_language;
+
+
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet getPromotionByCode(string code, string msisdn)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_CMS_PKG.pro_get_promotionByCode";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_code", OracleDbType.NVarchar2),
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = code;
+            parms[1].Value = msisdn;
+          
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+        public static DataSet getTicketByUser(string serviceId, string gameId, string users, string type, string order, string rowsOnPage, string seqPage,string id,string language)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.getTicketByUser";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_type", OracleDbType.NVarchar2),
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = serviceId;
+            parms[1].Value = gameId;
+            parms[2].Value = users;
+            parms[3].Value = type;
+            parms[4].Value = order;
+            parms[5].Value = rowsOnPage;
+            parms[6].Value = seqPage;
+            parms[7].Value = id;
+            parms[8].Value = language;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet getTicketWinByUser(string serviceId, string gameId, string users
+            , string v_prize_code, string order, string rowsOnPage, string seqPage, string language
+            , string v_fromdate,string v_todate)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.getTicketWinByUsers";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_prize_code", OracleDbType.NVarchar2),
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromdate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_todate", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = serviceId;
+            parms[1].Value = gameId;
+            parms[2].Value = users;
+            parms[3].Value = v_prize_code;
+            parms[4].Value = order;
+            parms[5].Value = rowsOnPage;
+            parms[6].Value = seqPage;
+            parms[7].Value = language;
+            parms[8].Value = v_fromdate;
+            parms[9].Value = v_todate;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+        public static DataSet getRerultOfTerm(string serviceId, string gameId, string type, string order, string rowsOnPage, string seqPage, string id,string language,string fromDate,string toDate)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.getRerultOfTerm";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_type", OracleDbType.NVarchar2),
+                                new OracleParameter("v_order", OracleDbType.NVarchar2),
+                                new OracleParameter("v_rowsOnPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_seqPage", OracleDbType.NVarchar2),
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromdate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_todate", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = serviceId;
+            parms[1].Value = gameId;
+            parms[2].Value = type;
+            parms[3].Value = order;
+            parms[4].Value = rowsOnPage;
+            parms[5].Value = seqPage;
+            parms[6].Value = id;
+            parms[7].Value = language;
+            parms[8].Value = fromDate;
+            parms[9].Value = toDate;
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet getPrizeOfCurrentTerm( string gameId)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_PKG.THAILAN_GET_MONEYWIN";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                              
+                            
+                                new OracleParameter("v_type", OracleDbType.NVarchar2),
+                              
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = gameId;
+        
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet getPrizeList(string gameId)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_PKG.THAILAN_GET_LIST_PRIZE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+
+
+                                new OracleParameter("v_type", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = gameId;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet getRerultTopSendSms(string serviceId, string gameId, string v_user, string v_total_row, string v_channel)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.getRerultTopSendSms";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_user", OracleDbType.NVarchar2),
+                                new OracleParameter("v_total_row", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = serviceId;
+            parms[1].Value = gameId;
+            parms[2].Value = v_user;
+            parms[3].Value = v_total_row;
+            parms[4].Value = v_channel;
+           
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet getExecuteSendSms(string serviceId, string gameId, string v_user, string v_total_row, string v_channel,string type)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.getExecuteSendSms";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_user", OracleDbType.NVarchar2),
+                                new OracleParameter("v_total_row", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_type", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = serviceId;
+            parms[1].Value = gameId;
+            parms[2].Value = v_user;
+            parms[3].Value = v_total_row;
+            parms[4].Value = v_channel;
+            parms[5].Value = type;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet searchBySms(string serviceId, string gameId,string users, string type, string param, string language,string channel)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.searchBySms";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_type", OracleDbType.NVarchar2),
+                                new OracleParameter("v_param", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = serviceId;
+            parms[1].Value = gameId;
+            parms[2].Value = users;
+            parms[3].Value = type;
+            parms[4].Value = param;
+            parms[5].Value = language;
+            parms[6].Value = channel;
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet getTotalWinnerByBet(string serviceId, string gameId, string betId, string users, string ticket, string channel, string language)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.getTotalWinnerByBet";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_betId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_ticket", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = serviceId;
+            parms[1].Value = gameId;
+            parms[2].Value = betId;
+            parms[3].Value = users;
+            parms[4].Value = ticket;
+            parms[5].Value = channel;
+            parms[6].Value = language;
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+
+
+
+
+
+        public static DataSet getMoney(string serviceId, string gameId, string language)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.getMoney";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = serviceId;
+            parms[1].Value = gameId;
+            parms[2].Value = language;
+          
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet getParams(string serviceId, string gameId,string language, string groupCode,string code)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.getParams";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+                                new OracleParameter("v_groupCode", OracleDbType.NVarchar2),
+                                new OracleParameter("v_code", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = serviceId;
+            parms[1].Value = gameId;
+            parms[2].Value = language;
+            parms[3].Value = groupCode;
+            parms[4].Value = code;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet getCurentTerm(string serviceId, string gameId, string language)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.getCurentTerm";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_gameId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_language", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = serviceId;
+            parms[1].Value = gameId;
+            parms[2].Value = language;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+
+
+        public static DataSet TKupdateCheckPin(string msisdn,string ip, string errCode,string message,string channel)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.tokenUpCheckPin";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_ip", OracleDbType.NVarchar2),
+                                new OracleParameter("v_errCode", OracleDbType.NVarchar2),
+                                new OracleParameter("v_message", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = msisdn;
+            parms[1].Value = ip;
+            parms[2].Value = errCode;
+            parms[3].Value = message;
+            parms[4].Value = channel;
+           
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet TKcheckSpamCheckPin(string msisdn, string ip,string channel)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.tokenCheckSpamCheckPin";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                                new OracleParameter("v_msisdn", OracleDbType.NVarchar2),
+                                new OracleParameter("v_ip", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            parms[0].Value = msisdn;
+            parms[1].Value = ip;
+            parms[2].Value = channel;
+          
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet TKcheckToken( string ip, string channel, string token)
+        {
+
+            string str;
+            str = "";
+            str = "LOTO_REPORT_PKG.tokenCheck";
+            OracleParameter[] parms;
+            parms = new OracleParameter[]
+                            {
+
+                               
+                                new OracleParameter("v_ip", OracleDbType.NVarchar2),
+                                new OracleParameter("v_channel", OracleDbType.NVarchar2),
+                                new OracleParameter("v_token", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+            };
+            
+            parms[0].Value = ip;
+            parms[1].Value = channel;
+            parms[2].Value = token;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+
+
+
+
+
+
+    }
+}

+ 78 - 0
ApiWeb/ApiProcessToken/Models/bet/lotoDataObj.cs

@@ -0,0 +1,78 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class lotoDataObj
+    {
+        [JsonProperty("users")]
+
+        public string users { get; set; }
+
+        [JsonProperty("pin")]
+
+        public string pin { get; set; }
+
+        [JsonProperty("otp")]
+
+        public string otp { get; set; }
+
+        [JsonProperty("ip")]
+
+        public string ip { get; set; }
+
+        [JsonProperty("paramCode")]
+
+        public string paramCode { get; set; }
+
+        [JsonProperty("paramCodeGroup")]
+
+        public string paramCodeGroup { get; set; }
+
+        [JsonProperty("ticket")]
+        public lotoTicket[] ticket { get; set; }
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+        public lotoDataObj()
+        {
+
+        }
+       
+
+
+
+    }
+
+
+    public class lotoTicket
+    {
+        [JsonProperty("number")]
+
+        public string number { get; set; }
+
+        [JsonProperty("money")]
+
+        public string money { get; set; }
+
+        [JsonProperty("code")]
+
+        public string code { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+
+
+
+
+}

+ 78 - 0
ApiWeb/ApiProcessToken/Models/bet/lotoDataRequestObj.cs

@@ -0,0 +1,78 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class lotoDataRequestObj
+    {
+        [JsonProperty("gameId")]
+
+        public string gameId { get; set; }
+
+        [JsonProperty("HeaderIpRemote")]
+
+        public string HeaderIpRemote { get; set; }
+
+        [JsonProperty("HeaderIsdn")]
+
+        public string HeaderIsdn { get; set; }
+
+        [JsonProperty("requestId")]
+
+        public string requestId { get; set; }
+
+        [JsonProperty("channel")]
+
+        public string channel { get; set; }
+
+        [JsonProperty("language")]
+
+        public string language { get; set; }
+
+        [JsonProperty("cmd")]
+
+        public string cmd { get; set; }
+
+        [JsonProperty("serviceId")]
+
+        public string serviceId { get; set; }
+
+        [JsonProperty("key")]
+
+        public string key { get; set; }
+
+
+
+
+        [JsonProperty("data")]
+
+        public lotoDataObj data { get; set; }
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+        public lotoDataRequestObj()
+        {
+
+        }
+       
+
+
+
+    }
+
+
+
+
+
+
+
+}

+ 102 - 0
ApiWeb/ApiProcessToken/Models/bet/lotoExportData.cs

@@ -0,0 +1,102 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class lotoExportData
+    {
+        [JsonProperty("seq")]
+
+        public string seq { get; set; }
+
+        [JsonProperty("winnerId")]
+
+        public string winnerId { get; set; }
+        [JsonProperty("msisdn")]
+
+        public string msisdn { get; set; }
+
+
+        [JsonProperty("date")]
+
+        public string date { get; set; }
+
+        [JsonProperty("gameId")]
+
+        public string gameId { get; set; }
+
+        [JsonProperty("randomId")]
+
+        public string randomId { get; set; }
+
+        [JsonProperty("betId")]
+
+        public string betId { get; set; }
+
+
+        [JsonProperty("isPayOnline")]
+
+        public string isPayOnline { get; set; }
+
+        [JsonProperty("isPay")]
+
+        public string isPay { get; set; }
+
+
+        [JsonProperty("winnerCode")]
+
+        public string winnerCode { get; set; }
+
+        [JsonProperty("winnerName")]
+
+        public string winnerName { get; set; }
+
+
+        [JsonProperty("money")]
+
+        public string money { get; set; }
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class lotoExportDataList : ResCommnon
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+        [JsonProperty("totalRow")]
+        public string totalRow { get; set; }
+
+
+        [JsonProperty("listLotoExportData")]
+        public lotoExportData[] listLotoExportData { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 115 - 0
ApiWeb/ApiProcessToken/Models/bet/lotoExportGet.cs

@@ -0,0 +1,115 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class lotoExportGet
+    {
+        [JsonProperty("seq")]
+
+        public string seq { get; set; }
+
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("code")]
+
+        public string code { get; set; }
+
+        [JsonProperty("name")]
+
+        public string name { get; set; }
+
+        [JsonProperty("gameId")]
+
+        public string gameId { get; set; }
+
+        [JsonProperty("fromDate")]
+
+        public string fromDate { get; set; }
+
+        [JsonProperty("toDate")]
+
+        public string toDate { get; set; }
+
+        [JsonProperty("status")]
+
+        public string status { get; set; }
+
+        [JsonProperty("createUsers")]
+
+        public string createUsers { get; set; }
+
+        [JsonProperty("createDate")]
+
+        public string createDate { get; set; }
+
+        [JsonProperty("acceptUsers")]
+
+        public string acceptUsers { get; set; }
+
+        [JsonProperty("acceptDate")]
+
+        public string acceptDate { get; set; }
+
+        [JsonProperty("moneySystem")]
+
+        public string moneySystem { get; set; }
+
+        [JsonProperty("moneyImport")]
+
+        public string moneyImport { get; set; }
+
+        [JsonProperty("moneyNotImport")]
+
+        public string moneyNotImport { get; set; }
+
+        [JsonProperty("moneyNotSys")]
+
+        public string moneyNotSys { get; set; }
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class lotoExportGetList : ResCommnon
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+        [JsonProperty("totalRow")]
+        public string totalRow { get; set; }
+
+
+        [JsonProperty("listLotoExportGet")]
+        public lotoExportGet[] listLotoExportGet { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 67 - 0
ApiWeb/ApiProcessToken/Models/bet/lotoExportHis.cs

@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class lotoExportHis
+    {
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("users")]
+
+        public string users { get; set; }
+
+        [JsonProperty("date")]
+
+        public string date { get; set; }
+
+        [JsonProperty("note")]
+
+        public string note { get; set; }
+
+        [JsonProperty("status")]
+
+        public string status { get; set; }
+
+        [JsonProperty("exportId")]
+
+        public string exportId { get; set; }
+
+
+        [JsonProperty("action")]
+
+        public string action { get; set; }
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class lotoExportHisList : ResCommnon
+    {
+
+
+        [JsonProperty("listLotoExportHis")]
+        public lotoExportHis[] listLotoExportHis { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 65 - 0
ApiWeb/ApiProcessToken/Models/bet/lotoImportData.cs

@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class lotoImportData
+    {
+        [JsonProperty("winnerId")]
+
+        public string winnerId { get; set; }
+
+        [JsonProperty("msisdn")]
+
+        public string msisdn { get; set; }
+
+        [JsonProperty("money")]
+
+        public string money { get; set; }
+
+        [JsonProperty("randomId")]
+
+        public string randomId { get; set; }
+
+        [JsonProperty("betId")]
+        public string betId { get; set; }
+
+        [JsonProperty("winnerCode")]
+        public string winnerCode { get; set; }
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class lotoImportDataList 
+    {
+        
+
+        [JsonProperty("exportId")]
+        public string exportId { get; set; }
+
+
+        [JsonProperty("data")]
+        public lotoImportData[] data { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 64 - 0
ApiWeb/ApiProcessToken/Models/bet/lotoTopCus.cs

@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class lotoTopCus: lotoCus
+    {
+        [JsonProperty("seq")]
+
+        public string seq { get; set; }
+
+        [JsonProperty("money")]
+
+        public string money { get; set; }
+
+       
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+
+    public class lotoTopCusList : ResCommnon
+    {
+        [JsonProperty("rowsOnPage")]
+        public string rowsOnPage { get; set; }
+
+        [JsonProperty("seqPage")]
+        public string seqPage { get; set; }
+
+        [JsonProperty("totalPage")]
+        public string totalPage { get; set; }
+
+        [JsonProperty("totalRow")]
+        public string totalRow { get; set; }
+
+
+        [JsonProperty("listLotoCusTop")]
+        public lotoTopCus[] listLotoCusTop { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+
+
+
+
+
+
+
+}

+ 43 - 0
ApiWeb/ApiProcessToken/Models/bet/lotoTraficTotal.cs

@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class lotoTraficTotal : ResCommnon
+    {
+        [JsonProperty("uniqueUsers")]
+
+        public string uniqueUsers { get; set; }
+
+        [JsonProperty("totalTicket")]
+
+        public string totalTicket { get; set; }
+
+        [JsonProperty("totalMoney")]
+
+        public string totalMoney { get; set; }
+
+        [JsonProperty("totalTicketWin")]
+
+        public string totalTicketWin { get; set; }
+
+        [JsonProperty("totalMoneyWin")]
+
+        public string totalMoneyWin { get; set; }
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+
+   
+
+
+}

+ 64 - 0
ApiWeb/ApiProcessToken/Models/bet/objCurentTerm.cs

@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class objCurentTerm : ResCommnon
+    {
+
+        [JsonProperty("curentTerm")]
+
+        public objTerm curentTerm { get; set; }
+
+
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+        public objCurentTerm()
+        {
+
+        }
+       
+
+
+
+    }
+
+
+    public class objTerm
+    {
+        [JsonProperty("termId")]
+
+        public string termId { get; set; }
+
+        [JsonProperty("dateStart")]
+
+        public string dateStart { get; set; }
+
+        [JsonProperty("dateEnd")]
+
+        public string dateEnd { get; set; }
+
+        [JsonProperty("dateRandom")]
+
+        public string dateRandom { get; set; }
+
+        [JsonProperty("money")]
+
+        public string money { get; set; }
+
+    }
+
+
+
+
+
+
+}

+ 68 - 0
ApiWeb/ApiProcessToken/Models/bet/objParams.cs

@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class objParams : ResCommnon
+    {
+
+        [JsonProperty("paramList")]
+
+        public objParam[] paramList { get; set; }
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+        public objParams()
+        {
+
+        }
+       
+
+
+
+    }
+
+
+    public class objParam
+{
+        [JsonProperty("id")]
+
+        public string id { get; set; }
+
+        [JsonProperty("codeGroup")]
+
+        public string codeGroup { get; set; }
+
+        [JsonProperty("code")]
+
+        public string code { get; set; }
+
+        [JsonProperty("values")]
+
+        public string values { get; set; }
+
+        [JsonProperty("display")]
+
+        public string display { get; set; }
+
+
+        [JsonProperty("channel")]
+
+        public string channel { get; set; }
+
+
+
+    }
+
+
+
+
+
+
+}

+ 54 - 0
ApiWeb/ApiProcessToken/Models/bet/prizeOfTerm.cs

@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models.bet
+{
+    public class prizeOfTerm
+    {
+        [JsonProperty("result")]
+        public string result { get; set; }
+
+        [JsonProperty("prizeName")]
+        public string prizeName { get; set; }
+
+        [JsonProperty("prizeDisplay")]
+        public string prizeDisplay { get; set; }
+
+
+
+        [JsonProperty("prizeMoney")]
+        public string prizeMoney { get; set; }
+
+        [JsonProperty("prizeTotal")]
+        public string prizeTotal { get; set; }
+
+        
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class prizeOfTermList : ResCommnon
+    {
+        
+        [JsonProperty("listPrize")]
+        public prizeOfTerm[] listPrize { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+
+
+
+
+    }
+
+
+
+}

+ 48 - 0
ApiWeb/ApiProcessToken/Models/blackObj.cs

@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+namespace ApiProcess.Models
+{
+    public class blackObj
+    {
+
+
+        [JsonProperty("msisdn")]
+
+        public string msisdn { get; set; }
+
+        [JsonProperty("userName")]
+
+        public string userName { get; set; }
+
+
+        [JsonProperty("isBlackList")]
+
+        public string isBlackList { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    public class blackObjList
+    {
+
+
+
+        [JsonProperty("data")]
+        public blackObj[] data { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+
+    }
+
+
+
+}

+ 59 - 0
ApiWeb/ApiProcessToken/Models/chargeObj.cs

@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Newtonsoft.Json;
+namespace ResfullApi.Models
+{
+    [Serializable]
+
+
+    public class chargeObj
+    {
+        [JsonProperty("username")]
+        public string username { get; set; }
+
+        [JsonProperty("password")]
+        public string password { get; set; }
+
+        [JsonProperty("serviceid")]
+        public string serviceid { get; set; }
+
+        [JsonProperty("msisdn")]
+        public string msisdn { get; set; }
+
+        [JsonProperty("chargetime")]
+        public string chargetime { get; set; }
+
+
+        [JsonProperty("paramss")]
+        public string paramss { get; set; }
+
+
+        [JsonProperty("mode")]
+        public string mode { get; set; }
+
+
+        [JsonProperty("amount")]
+        public string amount { get; set; }
+
+
+        [JsonProperty("prefix")]
+        public string prefix { get; set; }
+
+
+        [JsonProperty("cmd")]
+        public string cmd { get; set; }
+
+
+        [JsonProperty("transaction")]
+        public string transaction { get; set; }
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+}

+ 109 - 0
ApiWeb/ApiProcessToken/Models/clsCustomEncryption.cs

@@ -0,0 +1,109 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Microsoft.AspNetCore.Mvc;
+
+using System.Security.Cryptography;
+using System.Text;
+
+namespace ResfullApi.Models
+{
+    public sealed class CustomEncryption
+    {
+        private static string key = "sfdjf48mdfdf3054";
+
+        public CustomEncryption()
+        {
+        }
+        /// <summary>
+        /// Mã hóa dựa trên thuật toán mã hóa 1 chiều MD5, 
+        /// Sau khi mã hóa, sử dụng thuật toán encode Base64 để lưu dưới dạng Text
+        /// </summary>
+        /// <param name="plainText">Chuỗi cần mã hóa</param>
+        /// <returns></returns>
+        public static string EncryptUseMD5(string plainText)
+        {
+            string encrypted = null;
+            MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
+            byte[] pwdhash = hashmd5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(plainText));
+            encrypted = Convert.ToBase64String(pwdhash);
+            return encrypted;
+        }
+        /// <summary>
+        /// Mã hóa dựa trên thuật toán mã hóa phức hợp, có thể giải mã sử dụng hàm Decrypt, 
+        /// Sau khi mã hóa, sử dụng thuật toán encode Base64 để lưu dưới dạng Text
+        /// </summary>
+        /// <param name="plainText">Chuỗi cần mã hóa</param>
+        /// <returns></returns>
+        public static string Encrypt(string plainText)
+        {
+            string encrypted = null;
+            try
+            {
+                byte[] inputBytes = ASCIIEncoding.ASCII.GetBytes(plainText);
+                byte[] pwdhash = null;
+                MD5CryptoServiceProvider hashmd5;
+
+                //generate an MD5 hash from the password. 
+                //a hash is a one way encryption meaning once you generate
+                //the hash, you cant derive the password back from it.
+                hashmd5 = new MD5CryptoServiceProvider();
+                pwdhash = hashmd5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(key));
+                hashmd5 = null;
+
+                // Create a new TripleDES service provider 
+                TripleDESCryptoServiceProvider tdesProvider = new TripleDESCryptoServiceProvider();
+                tdesProvider.Key = pwdhash;
+                tdesProvider.Mode = CipherMode.ECB;
+
+                encrypted = Convert.ToBase64String(
+                    tdesProvider.CreateEncryptor().TransformFinalBlock(inputBytes, 0, inputBytes.Length));
+            }
+            catch (Exception e)
+            {
+                string str = e.Message;
+                throw;
+            }
+            return encrypted;
+        }
+        /// <summary>
+        /// Thực hiện giải mã một xâu ký tự
+        /// </summary>
+        /// <param name="encryptedString">Chuỗi đã mã hóa</param>
+        /// <returns></returns>
+        public static string Decrypt(string encryptedString)
+        {
+            string decyprted = null;
+            byte[] inputBytes = null;
+
+            try
+            {
+                inputBytes = Convert.FromBase64String(encryptedString);
+                byte[] pwdhash = null;
+                MD5CryptoServiceProvider hashmd5;
+
+                //generate an MD5 hash from the password. 
+                //a hash is a one way encryption meaning once you generate
+                //the hash, you cant derive the password back from it.
+                hashmd5 = new MD5CryptoServiceProvider();
+                pwdhash = hashmd5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(key));
+                hashmd5 = null;
+
+                // Create a new TripleDES service provider 
+                TripleDESCryptoServiceProvider tdesProvider = new TripleDESCryptoServiceProvider();
+                tdesProvider.Key = pwdhash;
+                tdesProvider.Mode = CipherMode.ECB;
+
+                decyprted = ASCIIEncoding.ASCII.GetString(
+                    tdesProvider.CreateDecryptor().TransformFinalBlock(inputBytes, 0, inputBytes.Length));
+            }
+            catch
+            {
+                decyprted = "";
+                
+            }
+            return decyprted;
+        }
+    }
+}

+ 231 - 0
ApiWeb/ApiProcessToken/Models/common/FunctionThaiLan.cs

@@ -0,0 +1,231 @@
+using CommonObj.common;
+using CommonObj.lotoModel;
+using ResfullApi.Models.bet;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Data;
+
+namespace ApiProcessToken.Models.common
+{
+    public class FunctionThaiLan
+    {
+        public static string getGuiId()
+        {
+            string _key = Guid.NewGuid().ToString();
+            return _key;
+        }
+
+        public static List<string> getListTicketFree(redisConnection _redis, int total, string randomId)
+        {
+            List<string> _result = new List<string>();
+            try
+            {
+
+                List<string> _allTernFree = _redis.getAllkeyByPatternRegex(_redis.DB_INDEX_DATA_TICKET_UNIQUE_FREE, "*");
+                if (_allTernFree == null)
+                    return null;
+                if(_allTernFree.Count> total)
+                {
+                    Random rand = new Random();
+                    int position = rand.Next(_allTernFree.Count - 1);
+                    string _code;
+                    
+                    for (int i = 0; i < total; i++)
+                    {
+                        _code = _allTernFree[position];
+                        _result.Add(_code);
+                        if (position + 1 >= _allTernFree.Count)
+                            position = 0;
+                        else
+                            position++;
+                    }
+                } 
+                else
+                {
+                    for (int i = 0; i < _allTernFree.Count; i++)
+                    {
+                        string _code = _allTernFree[i];
+                        _result.Add(_code);
+                    }
+
+                }    
+                
+
+            }
+            catch (Exception)
+            {
+
+
+            }
+            return _result;
+        }
+
+
+
+
+        public static List<string> getListTicketBuy(redisConnection _redis, buyTicketObj _ticketBuy,string randomId)
+        {
+            List<string> _result = new List<string>();
+            try
+            {
+                for (int i = 0; i < _ticketBuy.ticket.Length; i++)
+                {
+                    string _code = _ticketBuy.ticket[i].code;
+                    if (CommonFunction.check_THAILAN_IS_BUY_CACHE(_redis, _code, randomId) || CommonFunction.IsFixTicket(_redis, _code))
+                    {
+                        //da mua trong cache
+                        //Neu trong cache chua co thi add vao list
+                        if (!_result.Contains(_code))
+                        {
+                            _result.Add(_code);
+                        }
+                    }
+                   
+                }
+
+            }
+            catch (Exception)
+            {
+
+                
+            }
+            return _result;
+        }
+
+
+        //Ham nay check trong cache va trong DB
+        public static List<string> getListTicketBuyCacheDB(redisConnection _redis, buyTicketObj _ticketBuy, string randomId)
+        {
+            List<string> _result = new List<string>();
+            try
+            {
+                for (int i = 0; i < _ticketBuy.ticket.Length; i++)
+                {
+                    string _code = _ticketBuy.ticket[i].code;
+                    if (CommonFunction.check_THAILAN_IS_BUY_CACHE(_redis, _code, randomId))
+                    {
+                        //da mua trong cache
+                        //Neu trong cache chua co thi add vao list
+                        if (!_result.Contains(_code))
+                        {
+                            _result.Add(_code);
+                        }
+                    }
+                    else
+                    {
+                        //Truong hop nay khong ton tai trong cache da mua ve.
+                        // Neu day la cac so co phan cuoi trung voi he thong fix gia thi bat buoc phai vao DB kiem tra laij
+                        string _isCheckDB = _redis.getByKey(_redis.DB_INDEX_PARAM_CAMPAIGN, _redis.REDIS_IS_CHECK_TICKET_DB);
+                        if (!string.IsNullOrEmpty(_isCheckDB)) _isCheckDB = "1";
+
+                        if (_isCheckDB == "1")
+                        {
+                            if (IsTicketBuyDB(_code, randomId))
+                            {
+                                //da mua trong DB
+                                //Neu trong cache chua co thi add vao list
+                                TimeSpan _timeSpam = new TimeSpan(0, 0, 864000000); //Time out trong 10 ngay
+                                _redis.setByKey(_redis.DB_INDEX_DATA_TICKET_UNIQUE_BUY, _code + "_" + randomId, _code, _timeSpam);
+                                if (!_result.Contains(_code))
+                                {
+                                    _result.Add(_code);
+                                }
+
+                            }
+                        }
+                        else
+                        {
+                            if (CommonFunction.IsFixTicket(_redis, _code))
+                            {
+                                //Truong hop nay bat buoc phai check DB
+                                if (IsTicketBuyDB(_code, randomId))
+                                {
+                                    //da mua trong DB
+                                    //Neu trong cache chua co thi add vao list
+                                    TimeSpan _timeSpam = new TimeSpan(0, 0, 864000000); //Time out trong 10 ngay
+                                    _redis.setByKey(_redis.DB_INDEX_DATA_TICKET_UNIQUE_BUY, _code + "_" + randomId, _code, _timeSpam);
+                                    if (!_result.Contains(_code))
+                                    {
+                                        _result.Add(_code);
+                                    }
+
+                                }
+
+
+                            }
+
+                        }
+
+
+                    }
+                }
+
+            }
+            catch (Exception)
+            {
+
+
+            }
+            return _result;
+        }
+
+        
+
+        /// <summary>
+        /// true: da mua ticket trong DB
+        /// false: chua mua trong DB
+        /// </summary>
+        /// <param name="_ticket"></param>
+        /// <param name="_random"></param>
+        /// <returns></returns>
+        public static bool IsTicketBuyDB(string _ticket,string _random)
+        {
+            bool _result = true;
+            try
+            {
+                DataSet ds = lotoDataAccess.ThaiLan_checkTicketBuy(_ticket, _random);
+                if(ds!=null && ds.Tables[0].Rows.Count>0)
+                {
+                    string status = ds.Tables[0].Rows[0]["status"].ToString();
+                    if (status == "0")
+                        return false;
+                    else
+                        return true;
+                }
+            }
+            catch (Exception)
+            {
+
+            }
+            return _result;
+        }
+
+
+        public static bool systemIsOK(redisConnection _redis)
+        {
+            bool _result = false;
+            try
+            {
+                if(_redis.isConnet())
+                {
+                    DataSet ds = lotoDataAccess.checkDB("1");
+                    if(ds!=null & ds.Tables[0].Rows.Count>0)
+                    {
+                        return true;
+                    }    
+                }    
+            }
+            catch (Exception)
+            {
+
+            }
+            return _result;
+        }
+
+
+
+
+    }
+}

+ 175 - 0
ApiWeb/ApiProcessToken/Models/common/Queue.cs

@@ -0,0 +1,175 @@
+using System;
+using System.Collections;
+using System.IO;
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Formatters.Binary;
+
+namespace ApiProcessToken.Models.common
+{
+   
+    public class Queue
+    {
+        private int maxQueueSize = 0;
+        private ArrayList queueData = new ArrayList();
+        private object mutex;
+
+      
+        public Queue()
+        {
+            maxQueueSize = 1000000;
+            mutex = this;
+        }
+
+   
+        public Queue(int maxSize)
+        {
+            maxQueueSize = maxSize;
+            mutex = this;
+        }
+
+    
+        public int Size()
+        {
+            lock (mutex)
+            {
+                return queueData.Count;
+            }
+        }
+
+
+
+        public bool IsEmpty()
+        {
+            lock (mutex)
+            {
+                return (queueData.Count == 0);
+            }
+        }
+
+
+   
+        public object Dequeue()
+        {
+            lock (mutex)
+            {
+                object first = null;
+                if (queueData.Count > 0)
+                {
+                    first = queueData[0];
+                    queueData.RemoveAt(0);
+                }
+                return first;
+            }
+        }
+
+
+
+
+        public object Dequeue(object obj)
+        {
+            object found = null;
+            lock (mutex)
+            {
+                found = queueData.Contains(obj);
+                if (found != null)
+                {
+                    queueData.Remove(obj);
+                }
+            }
+            return obj;
+        }
+
+
+
+   
+        public void Enqueue(Object obj)
+        {
+            lock (mutex)
+            {
+                if (queueData.Count >= maxQueueSize)
+                {
+                    throw new IndexOutOfRangeException("Queue is full. Element not added.");
+                }
+                queueData.Add(obj);
+            }
+        }
+
+        public void Clear()
+        {
+            lock (mutex)
+            {
+                if (queueData.Count >= 0)
+                {
+                    queueData.Clear();
+                }
+            }
+        }
+
+ 
+        public object Find(object obj)
+        {
+            lock (mutex)
+            {
+                object current;
+                IEnumerator iter = queueData.GetEnumerator();
+                while (iter.MoveNext())
+                {
+                    current = iter.Current;
+                    if (current.Equals(obj))
+                    {
+                        return current;
+                    }
+                }
+            }
+            return null;
+        }
+
+        public ArrayList ToArrayList()
+        {
+            return queueData;
+        }
+
+        public ArrayList ToArrayListAndClear()
+        {
+            lock (mutex)
+            {
+                ArrayList result = new ArrayList();
+                if (queueData.Count >= 0)
+                {
+                    result.AddRange(queueData);
+                    queueData.Clear();
+                }
+                return result;
+            }
+        }
+
+   
+        public void SaveQueue(string file_name)
+        {
+            if (File.Exists(file_name))
+            {
+                File.Delete(file_name);
+            }
+            Stream st = File.Create(file_name);
+            BinaryFormatter bf = new BinaryFormatter();
+            bf.Serialize(st, queueData);
+            st.Close();
+        }
+
+        public int LoadQueue(string file_name)
+        {
+            if (File.Exists(file_name))
+            {
+                Stream st = File.OpenRead(file_name);
+                if (st.Length > 0)
+                {
+                    BinaryFormatter bf = new BinaryFormatter();
+                    queueData = (ArrayList)bf.Deserialize(st);
+                }
+                st.Close();
+                //File.Delete(file_name);
+            }
+            return queueData.Count;
+        }
+    }
+}

+ 108 - 0
ApiWeb/ApiProcessToken/Models/edu/SubRequest.cs

@@ -0,0 +1,108 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Xml.Serialization;
+
+namespace ApiProcessToken.Models.edu
+{
+
+	[XmlRoot(ElementName = "document", Namespace = "")]
+	public class DocumentDto
+	{
+		[XmlElement(DataType = "string", ElementName = "charge")]
+		public string charge { get; set; }
+
+		[XmlElement(DataType = "string", ElementName = "reason")]
+		public string reason { get; set; }
+
+		[XmlElement(DataType = "string", ElementName = "hangup")]
+		public string hangup { get; set; }
+
+		[XmlElement(ElementName = "recording_url")]
+		public string recording_url { get; set; }
+	}
+
+
+	//[XmlRoot(ElementName = "document", Namespace = "")]
+	//public class DocumentDto
+	//{
+	//	[XmlElement(DataType = "string", ElementName = "username")]
+	//	public string username { get; set; }
+
+	//	[XmlElement(DataType = "string", ElementName = "password")]
+	//	public string password { get; set; }
+
+	//	[XmlElement(DataType = "string", ElementName = "serviceid")]
+	//	public string serviceid { get; set; }
+
+		
+	//	[XmlElement(DataType = "string", ElementName = "msisdn")]
+	//	public string msisdn { get; set; }
+
+	//	[XmlElement(DataType = "string", ElementName = "chargetime")]
+	//	public string chargetime { get; set; }
+
+	//	[XmlElement(DataType = "string", ElementName = "params")]
+	//	public string params1 { get; set; }
+
+	//	[XmlElement(DataType = "string", ElementName = "mode")]
+	//	public string mode { get; set; }
+
+	//	[XmlElement(DataType = "string", ElementName = "amount")]
+	//	public string amount { get; set; }
+
+	//	[XmlElement(DataType = "string", ElementName = "command")]
+	//	public string command { get; set; }
+
+	//	[XmlElement(DataType = "string", ElementName = "transaction")]
+	//	public string transaction { get; set; }
+
+
+	//}
+
+
+	[XmlRoot(ElementName = "subRequest", Namespace = "http://contentws/xsd")]
+	public class SubRequest
+	{
+		[XmlElement(ElementName = "username", Namespace = "http://contentws/xsd")]
+		public string Username { get; set; }
+		[XmlElement(ElementName = "password", Namespace = "http://contentws/xsd")]
+		public string Password { get; set; }
+		[XmlElement(ElementName = "serviceid", Namespace = "http://contentws/xsd")]
+		public string Serviceid { get; set; }
+		[XmlElement(ElementName = "msisdn", Namespace = "http://contentws/xsd")]
+		public string Msisdn { get; set; }
+		[XmlElement(ElementName = "chargetime", Namespace = "http://contentws/xsd")]
+		public string Chargetime { get; set; }
+		[XmlElement(ElementName = "params", Namespace = "http://contentws/xsd")]
+		public string Params { get; set; }
+		[XmlElement(ElementName = "mode", Namespace = "http://contentws/xsd")]
+		public string Mode { get; set; }
+		[XmlElement(ElementName = "amount", Namespace = "http://contentws/xsd")]
+		public string Amount { get; set; }
+		[XmlElement(ElementName = "command", Namespace = "http://contentws/xsd")]
+		public string Command { get; set; }
+		[XmlElement(ElementName = "transaction", Namespace = "http://contentws/xsd")]
+		public string Transaction { get; set; }
+		[XmlAttribute(AttributeName = "xmlns")]
+		public string Xmlns { get; set; }
+	}
+
+	[XmlRoot(ElementName = "Body", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
+	public class Body
+	{
+		[XmlElement(ElementName = "subRequest", Namespace = "http://contentws/xsd")]
+		public SubRequest SubRequest { get; set; }
+	}
+
+	[XmlRoot(ElementName = "Envelope", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
+	public class Envelope
+	{
+		[XmlElement(ElementName = "Body", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
+		public Body Body { get; set; }
+		[XmlAttribute(AttributeName = "S", Namespace = "http://www.w3.org/2000/xmlns/")]
+		public string S { get; set; }
+	}
+
+}

+ 294 - 0
ApiWeb/ApiProcessToken/Models/edu/eduDataAccess.cs

@@ -0,0 +1,294 @@
+using Oracle.ManagedDataAccess.Client;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Web;
+
+namespace ResfullApi.Models.edu
+{
+    public class lotoDataAccess
+    {
+        public lotoDataAccess()
+        {
+
+        }
+
+
+        public static DataSet CATEGORY_GET(string v_users, string n_serviceid, string v_categoryCode)
+        {
+          
+            string str;
+            str = "";
+            str = "edu_pkg.CATEGORY_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_categoryCode", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = n_serviceid;
+            parms[2].Value = v_categoryCode;
+          
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet COURSE_GET(string v_users, string n_serviceid, string v_categoryId)
+        {
+
+            string str;
+            str = "";
+            str = "edu_pkg.COURSE_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_categoryId", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = n_serviceid;
+            parms[2].Value = v_categoryId;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet LESSON_GET(string v_users, string n_serviceid, string v_courseId)
+        {
+
+            string str;
+            str = "";
+            str = "edu_pkg.LESSON_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_courseId", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = n_serviceid;
+            parms[2].Value = v_courseId;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet VOCABULARY_GET(string v_users, string n_serviceid, string v_lessonId)
+        {
+
+            string str;
+            str = "";
+            str = "edu_pkg.VOCABULARY_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_lessonId", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = n_serviceid;
+            parms[2].Value = v_lessonId;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet LISTEN_GET(string v_users, string n_serviceid, string v_lessonId)
+        {
+
+            string str;
+            str = "";
+            str = "edu_pkg.LISTEN_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_lessonId", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = n_serviceid;
+            parms[2].Value = v_lessonId;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet GRAMMAR_GET(string v_users, string n_serviceid, string v_lessonId)
+        {
+
+            string str;
+            str = "";
+            str = "edu_pkg.GRAMMAR_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_lessonId", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = n_serviceid;
+            parms[2].Value = v_lessonId;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet GRAMMAR_EX_GET(string v_users, string n_serviceid, string v_grammarId)
+        {
+
+            string str;
+            str = "";
+            str = "edu_pkg.GRAMMAR_EX_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_grammarId", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = n_serviceid;
+            parms[2].Value = v_grammarId;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet QUESTION_GET(string v_users, string n_serviceid, string v_lessonId)
+        {
+
+            string str;
+            str = "";
+            str = "edu_pkg.QUESTION_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_lessonId", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = n_serviceid;
+            parms[2].Value = v_lessonId;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+        public static DataSet QUESTION_UPDATE(string v_users, string n_serviceid, string v_lessonId,string v_questionInfo)
+        {
+
+            string str;
+            str = "";
+            str = "edu_pkg.QUESTION_UPDATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_lessonId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_questionInfo", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = n_serviceid;
+            parms[2].Value = v_lessonId;
+            parms[3].Value = v_questionInfo;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet COURSE_BUY(string v_users, string n_serviceid, string n_courseid, string subserviceCode)
+        {
+
+            string str;
+            str = "";
+            str = "edu_pkg.COURSE_BUY";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_courseId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_subserviceCode", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = n_serviceid;
+            parms[2].Value = n_courseid;
+            parms[3].Value = subserviceCode;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet COURSE_GET_HIS(string v_users, string n_serviceid, string v_categoryCode)
+        {
+
+            string str;
+            str = "";
+            str = "edu_pkg.COURSE_GET_HIS";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_categoryCode", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = n_serviceid;
+            parms[2].Value = v_categoryCode;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet RANKINGE_GET_LIST(string v_users, string n_serviceid)
+        {
+
+            string str;
+            str = "";
+            str = "edu_pkg.GET_TOP_USER";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = n_serviceid;
+           
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+    }
+}

+ 94 - 0
ApiWeb/ApiProcessToken/Models/edu/grammarContent.cs

@@ -0,0 +1,94 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Newtonsoft.Json;
+
+namespace ResfullApi.Models.edu
+{
+    [Serializable]
+
+
+        public class GRAMMAR
+        {
+            [JsonProperty("ID")]
+            public string ID { get; set; }
+            [JsonProperty("NAME")]
+            public string NAME { get; set; }
+            
+            [JsonProperty("DESCRIPTION")]
+            public string DESCRIPTION { get; set; }
+            
+            [JsonProperty("INTRODUCTION")]
+            public string INTRODUCTION { get; set; }
+            
+            [JsonProperty("PICTURE")]
+            public string PICTURE { get; set; }
+            
+            [JsonProperty("LESSON_ID")]
+            public string LESSON_ID { get; set; }
+
+            [JsonProperty("LIST_GRAMMAR_EX")]
+            public GRAMMAR_EX[] LIST_GRAMMAR_EX { get; set; }
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+    public class GRAMMAR_EX
+    {
+        [JsonProperty("ID")]
+        public string ID { get; set; }
+        [JsonProperty("NAME")]
+        public string NAME { get; set; }
+
+        [JsonProperty("DESCRIPTION")]
+        public string DESCRIPTION { get; set; }
+
+        [JsonProperty("INTRODUCTION")]
+        public string INTRODUCTION { get; set; }
+
+        [JsonProperty("PICTURE")]
+        public string PICTURE { get; set; }
+        [JsonProperty("CONTENT")]
+        public string CONTENT { get; set; }
+        [JsonProperty("CONTENT_TYPE")]
+        public string CONTENT_TYPE { get; set; }
+        [JsonProperty("GRAMMAR_ID")]
+        public string GRAMMAR_ID { get; set; }
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+
+
+
+
+    public class GRAMMAR_LIST
+        {
+            [JsonProperty("status")]
+            public string status { get; set; }
+
+            [JsonProperty("message")]
+            public string message { get; set; }
+
+
+            [JsonProperty("LIST_GRAMMAR")]
+            public GRAMMAR[] LIST_GRAMMAR { get; set; }
+
+
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+}

+ 232 - 0
ApiWeb/ApiProcessToken/Models/edu/lessonContent.cs

@@ -0,0 +1,232 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Newtonsoft.Json;
+
+namespace ResfullApi.Models.edu
+{
+    [Serializable]
+
+
+        public class LESSON
+        {
+            [JsonProperty("ID")]
+            public string ID { get; set; }
+            [JsonProperty("COURSE_ID")]
+            public string COURSE_ID { get; set; }
+            [JsonProperty("CODE")]
+            public string CODE { get; set; }
+            [JsonProperty("NAME")]
+            public string NAME { get; set; }
+          
+            [JsonProperty("DESCRIPTION")]
+            public string DESCRIPTION { get; set; }
+            
+            [JsonProperty("INTRODUCTION")]
+            public string INTRODUCTION { get; set; }
+           
+            [JsonProperty("ICON_PATH")]
+            public string ICON_PATH { get; set; }
+            [JsonProperty("LOGO_PAHT")]
+            public string LOGO_PAHT { get; set; }
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+        public class COURSE
+        {
+            [JsonProperty("ID")]
+            public string ID { get; set; }
+            [JsonProperty("CATEGORY_ID")]
+            public string CATEGORY_ID { get; set; }
+            [JsonProperty("CODE")]
+            public string CODE { get; set; }
+            [JsonProperty("NAME")]
+            public string NAME { get; set; }
+           
+            [JsonProperty("DESCRIPTION")]
+            public string DESCRIPTION { get; set; }
+           
+            [JsonProperty("INTRODUCTION")]
+            public string INTRODUCTION { get; set; }
+
+            [JsonProperty("IS_LEARN")]
+            public string IS_LEARN { get; set; }
+
+            [JsonProperty("EXP_DATE")]
+            public string EXP_DATE { get; set; }
+           
+            [JsonProperty("ICON_PATH")]
+            public string ICON_PATH { get; set; }
+            [JsonProperty("LOGO_PAHT")]
+            public string LOGO_PAHT { get; set; }
+
+            [JsonProperty("LIST_LESSON")]
+            public LESSON[] LIST_LESSON { get; set; }
+
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+
+
+        public class COURSE_HIS : COURSE
+        {
+            [JsonProperty("TOTAL_LESSON")]
+            public string TOTAL_LESSON { get; set; }
+            
+            [JsonProperty("TOTAL_LESSON_LEARN")]
+            public string TOTAL_LESSON_LEARN { get; set; }
+            
+            [JsonProperty("PERCENT")]
+            public string PERCENT { get; set; }
+           
+
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+        public class COURSE_HIS_LIST
+        {
+            [JsonProperty("status")]
+            public string status { get; set; }
+
+            [JsonProperty("message")]
+            public string message { get; set; }
+
+
+            [JsonProperty("LIST_COURSE_HIS")]
+            public COURSE_HIS[] LIST_COURSE_HIS { get; set; }
+        }
+
+
+
+        public class RANKING 
+        {
+            [JsonProperty("SEQ")]
+            public string SEQ { get; set; }
+
+            [JsonProperty("USERS_ID")]
+            public string USERS_ID { get; set; }
+
+            [JsonProperty("USERS")]
+            public string USERS { get; set; }
+
+
+            [JsonProperty("MSISDN")]
+            public string MSISDN { get; set; }
+
+            [JsonProperty("SERVICE_ID")]
+            public string SERVICE_ID { get; set; }
+
+            [JsonProperty("FULLNAME")]
+            public string FULLNAME { get; set; }
+
+            [JsonProperty("BIRTHDAY")]
+            public string BIRTHDAY { get; set; }
+
+            [JsonProperty("PICTURE")]
+            public string PICTURE { get; set; }
+
+            [JsonProperty("TOTAL_SCORE")]
+            public string TOTAL_SCORE { get; set; }
+
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+        public class RANKING_LIST
+        {
+            [JsonProperty("status")]
+            public string status { get; set; }
+
+            [JsonProperty("message")]
+            public string message { get; set; }
+
+
+            [JsonProperty("LIST_RANKING")]
+            public RANKING[] LIST_RANKING { get; set; }
+        }
+            
+        
+
+
+
+
+        public class CATEGORY
+        {
+            [JsonProperty("ID")]
+            public string ID { get; set; }
+            [JsonProperty("CODE")]
+            public string CODE { get; set; }
+            [JsonProperty("NAME")]
+            public string NAME { get; set; }
+          
+            [JsonProperty("DESCRIPTION")]
+            public string DESCRIPTION { get; set; }
+          
+            [JsonProperty("INTRODUCTION")]
+            public string INTRODUCTION { get; set; }
+            
+            [JsonProperty("ICON_PATH")]
+            public string ICON_PATH { get; set; }
+            [JsonProperty("LOGO_PAHT")]
+            public string LOGO_PAHT { get; set; }
+            [JsonProperty("SERVICE_ID")]
+            public string SERVICE_ID { get; set; }
+
+            [JsonProperty("LIST_COURSE")]
+            public COURSE[] LIST_COURSE { get; set; }
+
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+
+        
+
+
+
+        public class LESSONOFCATEGORY
+        {
+            [JsonProperty("status")]
+            public string status { get; set; }
+
+            [JsonProperty("message")]
+            public string message { get; set; }
+
+
+            [JsonProperty("LIST_CATEGORY")]
+            public CATEGORY[] LIST_CATEGORY { get; set; }
+
+
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+}

+ 72 - 0
ApiWeb/ApiProcessToken/Models/edu/listenContent.cs

@@ -0,0 +1,72 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Newtonsoft.Json;
+
+namespace ResfullApi.Models.edu
+{
+    [Serializable]
+
+
+        public class LISTEN
+        {
+            [JsonProperty("ID")]
+            public string ID { get; set; }
+            [JsonProperty("NAME")]
+            public string NAME { get; set; }
+            
+            [JsonProperty("DESCRIPTION")]
+            public string DESCRIPTION { get; set; }
+
+            [JsonProperty("INTRODUCTION_GLOBAL")]
+            public string INTRODUCTION_GLOBAL { get; set; }
+
+            [JsonProperty("INTRODUCTION_LOCAL")]
+            public string INTRODUCTION_LOCAL { get; set; }
+
+            
+            [JsonProperty("PICTURE")]
+            public string PICTURE { get; set; }
+            [JsonProperty("CONTENT")]
+            public string CONTENT { get; set; }
+            [JsonProperty("CONTENT_TYPE")]
+            public string CONTENT_TYPE { get; set; }
+            [JsonProperty("LESSON_ID")]
+            public string LESSON_ID { get; set; }
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+
+
+
+
+
+
+    public class LISTEN_LIST
+        {
+            [JsonProperty("status")]
+            public string status { get; set; }
+
+            [JsonProperty("message")]
+            public string message { get; set; }
+
+
+            [JsonProperty("LIST_LISTEN")]
+            public LISTEN[] LIST_LISTEN { get; set; }
+
+
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+}

+ 141 - 0
ApiWeb/ApiProcessToken/Models/edu/questionContent.cs

@@ -0,0 +1,141 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Newtonsoft.Json;
+
+namespace ResfullApi.Models.edu
+{
+    [Serializable]
+
+
+        public class QUESTION
+        {
+            [JsonProperty("ID")]
+            public string ID { get; set; }
+            [JsonProperty("NAME")]
+            public string NAME { get; set; }
+            
+            [JsonProperty("DESCRIPTION")]
+            public string DESCRIPTION { get; set; }
+
+
+            [JsonProperty("ICON_PATH")]
+            public string ICON_PATH { get; set; }
+
+            [JsonProperty("CONTENT")]
+            public string CONTENT { get; set; }
+            [JsonProperty("CONTENT_TYPE")]
+            public string CONTENT_TYPE { get; set; }
+
+            [JsonProperty("QUESTION_TYPE")]
+            public string QUESTION_TYPE { get; set; }
+
+            [JsonProperty("ANSWER_TRUE")]
+            public string ANSWER_TRUE { get; set; }
+
+            [JsonProperty("ANSWER1")]
+            public string ANSWER1 { get; set; }
+
+            [JsonProperty("ANSWER2")]
+            public string ANSWER2 { get; set; }
+
+            [JsonProperty("ANSWER3")]
+            public string ANSWER3 { get; set; }
+
+            [JsonProperty("ANSWER4")]
+            public string ANSWER4 { get; set; }
+
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+
+   
+
+
+
+
+    public class QUESTION_LIST
+        {
+            [JsonProperty("status")]
+            public string status { get; set; }
+
+            [JsonProperty("message")]
+            public string message { get; set; }
+
+
+            [JsonProperty("LIST_QUESTION")]
+            public QUESTION[] LIST_QUESTION { get; set; }
+
+
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+
+
+        public class ANSWER
+        {
+            [JsonProperty("QUESTION_ID")]
+            public string QUESTION_ID { get; set; }
+
+
+            [JsonProperty("ANSWER")]
+            public string ANSWERS { get; set; }
+
+
+            [JsonProperty("RESULT")]
+            public string RESULT { get; set; }
+
+            [JsonProperty("TIME")]
+            public string TIME { get; set; }
+
+
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+        public class ANSWER_RESULT
+        {
+            [JsonProperty("users")]
+            public string users { get; set; }
+
+            [JsonProperty("serviceId")]
+            public string serviceId { get; set; }
+
+
+            [JsonProperty("LESSON_ID")]
+            public string LESSON_ID { get; set; }
+
+
+
+            [JsonProperty("ANSWER_LIST")]
+            public ANSWER[] ANSWER_LIST { get; set; }
+
+
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+
+
+
+
+}

+ 78 - 0
ApiWeb/ApiProcessToken/Models/edu/vocabularyContent.cs

@@ -0,0 +1,78 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Newtonsoft.Json;
+
+namespace ResfullApi.Models.edu
+{
+    [Serializable]
+
+
+        public class VOCABULARY
+        {
+            [JsonProperty("ID")]
+            public string ID { get; set; }
+            [JsonProperty("NAME_GLOBAL")]
+            public string NAME_GLOBAL { get; set; }
+            [JsonProperty("NAME_LOCAL")]
+            public string NAME_LOCAL { get; set; }
+            [JsonProperty("DESCRIPTION_GLOBAL")]
+            public string DESCRIPTION_GLOBAL { get; set; }
+            [JsonProperty("DESCRIPTION_LOCAL")]
+            public string DESCRIPTION_LOCAL { get; set; }
+            [JsonProperty("INTRODUCTION_GLOBAL")]
+            public string INTRODUCTION_GLOBAL { get; set; }
+            [JsonProperty("INTRODUCTION_LOCAL")]
+            public string INTRODUCTION_LOCAL { get; set; }
+
+            [JsonProperty("CONTENT")]
+            public string CONTENT { get; set; }
+            [JsonProperty("CONTENT_TYPE")]
+            public string CONTENT_TYPE { get; set; }
+
+            [JsonProperty("EXAMPLE")]
+            public string EXAMPLE { get; set; }
+
+            [JsonProperty("SPELL")]
+            public string SPELL { get; set; }
+            [JsonProperty("PICTURE")]
+            public string PICTURE { get; set; }
+            [JsonProperty("LESSON_ID")]
+            public string LESSON_ID { get; set; }
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+
+
+
+
+
+
+    public class VOCABULARY_LIST
+        {
+            [JsonProperty("status")]
+            public string status { get; set; }
+
+            [JsonProperty("message")]
+            public string message { get; set; }
+
+
+            [JsonProperty("LIST_VOCABULARY")]
+            public VOCABULARY[] LIST_VOCABULARY { get; set; }
+
+
+
+            public override string ToString()
+            {
+                return JsonConvert.SerializeObject(this);
+            }
+        }
+
+
+}

+ 61 - 0
ApiWeb/ApiProcessToken/Models/hapCall.cs

@@ -0,0 +1,61 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Newtonsoft.Json;
+namespace ResfullApi.Models
+{
+    [Serializable]
+
+
+    public class happyCall
+    {
+        [JsonProperty("id")]
+        public string id { get; set; }
+
+        [JsonProperty("msisdn")]
+        public string msisdn { get; set; }
+
+        [JsonProperty("code")]
+        public string code { get; set; }
+
+        [JsonProperty("sysdate")]
+        public string sysdate { get; set; }
+
+        [JsonProperty("isSub")]
+        public string isSub { get; set; }
+
+        [JsonProperty("isWin")]
+        public string isWin { get; set; }
+
+        [JsonProperty("type")]
+        public string type { get; set; }
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+
+    
+    public class happyCallList
+    {
+        [JsonProperty("status")]
+        public string status { get; set; }
+
+        [JsonProperty("message")]
+        public string message { get; set; }
+
+
+        [JsonProperty("listHappCall")]
+        public happyCall[] listHappCall { get; set; }
+
+
+
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+}

+ 49 - 0
ApiWeb/ApiProcessToken/Models/happyDataAccess.cs

@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Oracle.ManagedDataAccess.Client;
+using System.Data;
+namespace ResfullApi.Models
+{
+    public class happyDataAccess
+    {
+        public happyDataAccess()
+        {
+
+        }
+
+
+   
+
+        public static DataSet SearchCode(string v_users, string n_serviceid,  string code,string fromDate,string toDate,string winType)
+        {
+
+            string str;
+            str = "";
+            str = "HAPPY_CALL_PKG.SEARCH_CODE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_code", OracleDbType.NVarchar2),
+                                new OracleParameter("v_fromDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_toDate", OracleDbType.NVarchar2),
+                                new OracleParameter("v_winType", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = n_serviceid;
+            parms[2].Value = code;
+            parms[3].Value = fromDate;
+            parms[4].Value = toDate;
+            parms[5].Value = winType;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        
+
+    }
+}

+ 214 - 0
ApiWeb/ApiProcessToken/Models/lksDataAccess .cs

@@ -0,0 +1,214 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Oracle.ManagedDataAccess.Client;
+using System.Data;
+namespace ResfullApi.Models
+{
+    public class lksDataAccess
+    {
+        public lksDataAccess()
+        {
+
+        }
+
+
+
+
+        /*
+         * 
+            ********************************************    CAC HAM CUA LUCKY SIX **********************************
+         * 
+         */
+
+
+
+        public static DataSet LKS_BET(string v_users, string v_serviceid, string v_listNumber, string v_money, string v_times)
+        {
+
+            string str;
+            str = "";
+            str = "lks_pkg.LKS_BET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceid", OracleDbType.NVarchar2),
+                                new OracleParameter("v_listNumber", OracleDbType.NVarchar2),
+                                new OracleParameter("v_money", OracleDbType.NVarchar2),
+                                new OracleParameter("v_times", OracleDbType.NVarchar2),
+                               
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = v_serviceid;
+            parms[2].Value = v_listNumber;
+            parms[3].Value = v_money;
+            parms[4].Value = v_times;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet LKS_BET_GET_LIST(string v_users, string v_serviceid, string v_status,string v_date,string v_top,string v_isWin)
+        {
+
+            string str;
+            str = "";
+            str = "lks_pkg.LKS_BET_GET_LIST";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceid", OracleDbType.NVarchar2),
+                                new OracleParameter("v_status", OracleDbType.NVarchar2),
+                                new OracleParameter("v_date", OracleDbType.NVarchar2),
+                               new OracleParameter("v_top", OracleDbType.NVarchar2),
+                               new OracleParameter("v_isWin", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = v_serviceid;
+            parms[2].Value = v_status;
+            parms[3].Value = v_date;
+            parms[4].Value = v_top;
+            parms[5].Value = v_isWin;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet LKS_BET_GET_TOP_USERS(string v_users, string v_serviceid, string v_date, string v_top)
+        {
+
+            string str;
+            str = "";
+            str = "lks_pkg.LKS_BET_GET_TOP_USERS";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceid", OracleDbType.NVarchar2),
+                                new OracleParameter("v_date", OracleDbType.NVarchar2),
+                               new OracleParameter("v_top", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = v_serviceid;
+            parms[2].Value = v_date;
+            parms[3].Value = v_top;
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet LKS_BET_GET_TOTAL(string v_users, string v_serviceid, string v_totalDay)
+        {
+
+            string str;
+            str = "";
+            str = "lks_pkg.LKS_BET_GET_TOTAL";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceid", OracleDbType.NVarchar2),
+                                new OracleParameter("v_totalDay", OracleDbType.NVarchar2),
+                               
+                               
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = v_users;
+            parms[1].Value = v_serviceid;
+            parms[2].Value = v_totalDay;
+           
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+        public static DataSet LKS_RANDOM_GET(string id)
+        {
+
+            string str;
+            str = "";
+            str = "lks_pkg.LKS_RANDOM_GET";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = id;
+
+
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+        public static DataSet LKS_RANDOM_GET_BY_DATE(string id,string status,string date)
+        {
+
+            string str;
+            str = "";
+            str = "lks_pkg.LKS_RANDOM_GET_BY_DATE";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_id", OracleDbType.NVarchar2),
+                                new OracleParameter("v_status", OracleDbType.NVarchar2),
+                                new OracleParameter("v_date", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = id;
+            parms[1].Value = status;
+            parms[2].Value = date;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+        public static DataSet LKS_REPORT_TOTAL(string users, string serviceId, string fromDate,string toDate)
+        {
+
+            string str;
+            str = "";
+            str = "lks_pkg.LKS_REPORT_TOTAL";
+            OracleParameter[] parms;
+            parms = new OracleParameter[] 
+							{
+                                new OracleParameter("v_users", OracleDbType.NVarchar2),
+                                new OracleParameter("v_serviceId", OracleDbType.NVarchar2),
+                                new OracleParameter("v_tungay", OracleDbType.NVarchar2),
+                                new OracleParameter("v_denngay", OracleDbType.NVarchar2),
+                                new OracleParameter("P_RESULT",OracleDbType.RefCursor,ParameterDirection.Output),
+			};
+            parms[0].Value = users;
+            parms[1].Value = serviceId;
+            parms[2].Value = fromDate;
+            parms[3].Value = toDate;
+
+            return DataAccess.getDataFromProcedure(str, "", parms);
+        }
+
+
+
+
+        /*
+         * 
+            ********************************************   KET THUC HAM CUA LUCKY SIX **********************************
+         * 
+         */
+
+
+
+
+
+
+    }
+}

+ 124 - 0
ApiWeb/ApiProcessToken/Models/lksObjBet.cs

@@ -0,0 +1,124 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Newtonsoft.Json;
+namespace ResfullApi.Models
+{
+    [Serializable]
+    // {"users":"50940227941","serviceId":"30","listNumber":"1$12$23%65$23$23","money":"30","times":"3"}
+    public class lksObjBet
+    {
+        [JsonProperty("id")]
+        public string id { get; set; }
+
+        [JsonProperty("userId")]
+        public string userId { get; set; }
+
+        [JsonProperty("listNumber")]
+        public string listNumber { get; set; }
+
+        [JsonProperty("listNumberSort")]
+        public string listNumberSort { get; set; }
+
+        [JsonProperty("randomResult")]
+        public string randomResult { get; set; }
+
+
+        [JsonProperty("dateBet")]
+        public string dateBet { get; set; }
+
+        [JsonProperty("typeBet")]
+        public string typeBet { get; set; }
+
+        [JsonProperty("moneyBet")]
+        public string moneyBet { get; set; }
+
+        [JsonProperty("moneyWin")]
+        public string moneyWin { get; set; }
+
+        [JsonProperty("randomId")]
+        public string randomId { get; set; }
+
+        [JsonProperty("randomStatus")]
+        public string randomStatus { get; set; }
+
+
+        [JsonProperty("randomStartDate")]
+        public string randomStartDate { get; set; }
+
+
+        [JsonProperty("randomEndDate")]
+        public string randomEndDate { get; set; }
+
+
+        [JsonProperty("randomSysDate")]
+        public string randomSysDate { get; set; }
+
+
+
+
+
+        //Thong tin usser
+
+
+        [JsonProperty("users")]
+        public string users { get; set; }
+
+
+        [JsonProperty("serviceId")]
+        public string serviceid { get; set; }
+
+
+        [JsonProperty("fullName")]
+        public string fullName { get; set; }
+
+        [JsonProperty("sex")]
+        public string sex { get; set; }
+
+        [JsonProperty("address")]
+        public string address { get; set; }
+
+        [JsonProperty("provinceId")]
+        public string provinceId { get; set; }
+
+        [JsonProperty("cardNumber")]
+        public string cardNumber { get; set; }
+
+        [JsonProperty("email")]
+        public string email { get; set; }
+
+        [JsonProperty("company")]
+        public string company { get; set; }
+
+        [JsonProperty("description")]
+        public string description { get; set; }
+
+        [JsonProperty("picture")]
+        public string picture { get; set; }
+
+        [JsonProperty("sexNeed")]
+        public string sexNeed { get; set; }
+
+        [JsonProperty("birthday")]
+        public string birthday { get; set; }
+
+        [JsonProperty("height")]
+        public string height { get; set; }
+
+        [JsonProperty("weight")]
+        public string weight { get; set; }
+
+        [JsonProperty("work")]
+        public string work { get; set; }
+
+
+
+
+       
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+}

+ 38 - 0
ApiWeb/ApiProcessToken/Models/lksObjBetResponse.cs

@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Newtonsoft.Json;
+namespace ResfullApi.Models
+{
+    [Serializable]
+    // {"users":"50940227941","serviceId":"30","listNumber":"1$12$23%65$23$23","money":"30","times":"3"}
+    public class lksObjBetResponse
+    {
+        
+
+        [JsonProperty("status")]
+        public string status { get; set; }
+
+        [JsonProperty("message")]
+        public string message { get; set; }
+
+
+        [JsonProperty("listBetId")]
+        public string listBetId { get; set; }
+
+        [JsonProperty("listRandomId")]
+        public string listRandomId { get; set; }
+
+        [JsonProperty("bet_coin")]
+        public string bet_coin { get; set; }
+
+        [JsonProperty("cash_coin")]
+        public string cash_coin { get; set; }
+       
+        public override string ToString()
+        {
+            return JsonConvert.SerializeObject(this);
+        }
+    }
+}

部分文件因为文件数量过多而无法显示