From 8029f50dd9f62ae0125a43aaf65c0a73f3b2b5fa Mon Sep 17 00:00:00 2001 From: dk96 Date: Tue, 3 Dec 2024 19:01:28 +0800 Subject: [PATCH] updates --- App_Code/dbClass.cs | 95 +++++++++- App_Code/globalClass.cs | 74 ++++++++ BackEnd/Login.aspx | 100 ++++++++++ BackEnd/Login.aspx.cs | 44 +++++ BackEnd/Login.aspx.designer.cs | 17 ++ BackEnd/Main.Master | 11 +- BackEnd/Main.Master.cs | 34 +++- BackEnd/Main.Master.designer.cs | 18 +- BackEnd/api/importTestData.ashx | 1 + BackEnd/api/importTestData.ashx.cs | 150 +++++++++++++++ BackEnd/api/ipList.ashx | 1 + BackEnd/api/ipList.ashx.cs | 125 +++++++++++++ BackEnd/auth-error-v3.html | 99 ++++++++++ BackEnd/ip-management.aspx | 116 ++++++++++++ BackEnd/ip-management.aspx.cs | 17 ++ BackEnd/ip-management.aspx.designer.cs | 17 ++ abbott_2024_event.csproj | 30 ++- bin/abbott_2024_event.dll | Bin 14848 -> 25088 bytes webapi/babyData.ashx | 1 + webapi/babyData.ashx.cs | 245 +++++++++++++++++++++++++ 20 files changed, 1179 insertions(+), 16 deletions(-) create mode 100644 BackEnd/Login.aspx create mode 100644 BackEnd/Login.aspx.cs create mode 100644 BackEnd/Login.aspx.designer.cs create mode 100644 BackEnd/api/importTestData.ashx create mode 100644 BackEnd/api/importTestData.ashx.cs create mode 100644 BackEnd/api/ipList.ashx create mode 100644 BackEnd/api/ipList.ashx.cs create mode 100644 BackEnd/auth-error-v3.html create mode 100644 BackEnd/ip-management.aspx create mode 100644 BackEnd/ip-management.aspx.cs create mode 100644 BackEnd/ip-management.aspx.designer.cs create mode 100644 webapi/babyData.ashx create mode 100644 webapi/babyData.ashx.cs diff --git a/App_Code/dbClass.cs b/App_Code/dbClass.cs index bf4e9c0..9d6489a 100644 --- a/App_Code/dbClass.cs +++ b/App_Code/dbClass.cs @@ -6,6 +6,58 @@ using System.Collections.Generic; using System.Linq; using System.Web; +[Table("babyRec")] +public class babyRec +{ + [JsonIgnore] + [Key] + public int babyRec_sn { get; set; } = 0; + public string babyRec_uid { get; set; } = ""; + public string babyData_uid { get; set; } = ""; + public string babyRec_key { get; set; } = ""; + public string line_uid { get; set; } = ""; + public double babyRec_height { get; set; } = 0; + public double babyRec_inpercent { get; set; } = 0; + public double babyRec_middleHeight { get; set; } = 0; + public DateTime babyRec_recdate { get; set; } = DateTime.Now; + public int babyRec_recYear { get; set; } = 0; + public int babyRec_recMonth { get; set; } = 0; + public int babyRec_recDay { get; set; } = 0; + + public int babyRec_months { get; set; } = 0; + public string babyRec_yearMonthStr { get; set; } = ""; + public DateTime babyRec_createdate { get; set; } = DateTime.Now; +} + +[Table("babyData")] +public class babyData +{ + [JsonIgnore] + [Key] + public int babyData_sn { get; set; } = 0; + public string babyData_uid { get; set; } = ""; + public string line_uid { get; set; } = ""; + public string babyData_name { get; set; } = ""; + public DateTime babyData_birthday { get; set; } = DateTime.Now; + public string babyData_sexual { get; set; } = ""; + public string babyData_bindedLine { get; set; } = ""; + public DateTime babyData_createdate { get; set; } = DateTime.Now; + public DateTime babyData_bindeddate { get; set; } = DateTime.Now; +} + +[Table("lineUser")] +public class lineUser +{ + [JsonIgnore] + [Key] + public int lineUser_sn { get; set; } = 0; + public string lineUser_uid { get; set; } = ""; + public string line_uid { get; set; } = ""; + public string line_displayName { get; set; } = ""; + public DateTime lineUser_createdate { get; set; } = DateTime.Now; + public DateTime lineUser_modifydate { get; set; } = DateTime.Now; +} + [Table("login")] public class login { @@ -26,4 +78,45 @@ public class token public string token_isremember { get; set; } = ""; public DateTime token_createdate { get; set; } = DateTime.Now; public DateTime token_expireddate { get; set; } = DateTime.Now; -} \ No newline at end of file +} + +[Table("temp_m")] +public class temp_m +{ + [JsonIgnore] + [Key] + public string temp_month { get; set; } = ""; + public double temp_3 { get; set; } = 0; + public double temp_15 { get; set; } = 0; + public double temp_25 { get; set; } = 0; + public double temp_50 { get; set; } = 0; + public double temp_75 { get; set; } = 0; + public double temp_85 { get; set; } = 0; + public double temp_97 { get; set; } = 0; +} + +[Table("lenHeiTable")] +public class lenHeiTable +{ + [JsonIgnore] + [Key] + public int lenHeiTable_sn { get; set; } = 0; + public string lenHeiTable_sexual { get; set; } = ""; + public int lenHeiTable_month { get; set; } = 0; + public double lenHeiTable_minVal { get; set; } = 0; + public double lenHeiTable_maxVal { get; set; } = 0; + public int lenHeiTable_percent { get; set; } = 0; +} + +[Table("ipTable")] +public class ipTable +{ + [JsonIgnore] + [Key] + public int ipTable_sn { get; set; } = 0; + public string ipTable_address { get; set; } = ""; + public DateTime ipTable_createdate { get; set; } = DateTime.Now; + public DateTime ipTable_modifydate { get; set; } = DateTime.Now; + public string ipTable_create_user_uid { get; set; } = ""; +} + diff --git a/App_Code/globalClass.cs b/App_Code/globalClass.cs index db06070..bade81e 100644 --- a/App_Code/globalClass.cs +++ b/App_Code/globalClass.cs @@ -15,9 +15,83 @@ using System.Drawing; using System.IO; using System.Data.SqlClient; using System.Configuration; +using Org.BouncyCastle.Asn1.X509; public static class globalClass { + public static string YearMonthDiff(DateTime self, DateTime target) { + int years, months, days; + // 因為只需取量,不決定誰大誰小,所以如果self < target時要交換將大的擺前面 + if (self < target) + { + DateTime tmp = target; + target = self; + self = tmp; + } + + // 將年轉換成月份以便用來計算 + months = 12 * (self.Year - target.Year) + (self.Month - target.Month); + + // 如果天數要相減的量不夠時要向月份借天數補滿該月再來相減 + if (self.Day < target.Day) + { + months--; + days = DateTime.DaysInMonth(target.Year, target.Month) - target.Day + self.Day; + } + else + { + days = self.Day - target.Day; + } + + // 天數計算完成後將月份轉成年 + years = months / 12; + months = months % 12; + + return years.ToString() + "歲" + months.ToString() + "月"; + } + + public static int MonthDiff(DateTime self, DateTime target) + { + int years, months, days; + // 因為只需取量,不決定誰大誰小,所以如果self < target時要交換將大的擺前面 + if (self < target) + { + DateTime tmp = target; + target = self; + self = tmp; + } + + // 將年轉換成月份以便用來計算 + months = 12 * (self.Year - target.Year) + (self.Month - target.Month); + + // 如果天數要相減的量不夠時要向月份借天數補滿該月再來相減 + if (self.Day < target.Day) + { + months--; + days = DateTime.DaysInMonth(target.Year, target.Month) - target.Day + self.Day; + } + else + { + days = self.Day - target.Day; + } + + return months; + } + + public static string GetIPAddress() + { + System.Web.HttpContext context = System.Web.HttpContext.Current; + string sIPAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; + if (string.IsNullOrEmpty(sIPAddress)) + { + return context.Request.ServerVariables["REMOTE_ADDR"]; + } + else + { + string[] ipArray = sIPAddress.Split(new Char[] { ',' }); + return ipArray[0]; + } + } public static string CreateRandomCode(int Number) { string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; diff --git a/BackEnd/Login.aspx b/BackEnd/Login.aspx new file mode 100644 index 0000000..84961c5 --- /dev/null +++ b/BackEnd/Login.aspx @@ -0,0 +1,100 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="abbott_2024_event.BackEnd.Login" %> + + + + + + + + + + 後台登入 + + + + + + + + + + + + + + + + + +
+
+

+ + + + + + + + + Sign In +

+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + diff --git a/BackEnd/Login.aspx.cs b/BackEnd/Login.aspx.cs new file mode 100644 index 0000000..fcdcf8f --- /dev/null +++ b/BackEnd/Login.aspx.cs @@ -0,0 +1,44 @@ +using Dapper; +using System; +using System.Collections.Generic; +using System.Data.SqlClient; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace abbott_2024_event.BackEnd +{ + public partial class Login : System.Web.UI.Page + { + SqlConnection conn = new SqlConnection(globalClass.appsettings("DBConnectionString")); + protected void Page_Load(object sender, EventArgs e) + { + string myIP = globalClass.GetIPAddress(); + + if (myIP == "::1") + { + myIP = "127.0.0.1"; + } + + Boolean isAllow = false; + + if (myIP == "127.0.0.1") + { + isAllow = true; + } + + ipTable ipTable = conn.QueryFirstOrDefault("select * from ipTable where ipTable_address = @ipTable_address", new { ipTable_address = myIP }); + + if (ipTable != null) { + isAllow = true; + } + + if (isAllow == false) + { + Response.Redirect("auth-error-v3.html"); + return; + } + } + } +} \ No newline at end of file diff --git a/BackEnd/Login.aspx.designer.cs b/BackEnd/Login.aspx.designer.cs new file mode 100644 index 0000000..06c73dc --- /dev/null +++ b/BackEnd/Login.aspx.designer.cs @@ -0,0 +1,17 @@ +//------------------------------------------------------------------------------ +// <自動產生> +// 這段程式碼是由工具產生的。 +// +// 變更這個檔案可能會導致不正確的行為,而且如果已重新產生 +// 程式碼,則會遺失變更。 +// +//------------------------------------------------------------------------------ + +namespace abbott_2024_event.BackEnd +{ + + + public partial class Login + { + } +} diff --git a/BackEnd/Main.Master b/BackEnd/Main.Master index 4c6da90..573b3b1 100644 --- a/BackEnd/Main.Master +++ b/BackEnd/Main.Master @@ -34,8 +34,7 @@ if (isCompact == true) document.querySelector('html').classList.add('preparing-compact-menu'); - - +
@@ -120,7 +119,10 @@ - + + @@ -153,7 +155,8 @@ - + +
diff --git a/BackEnd/Main.Master.cs b/BackEnd/Main.Master.cs index 9af5f60..5ad5e84 100644 --- a/BackEnd/Main.Master.cs +++ b/BackEnd/Main.Master.cs @@ -1,5 +1,7 @@ -using System; +using Dapper; +using System; using System.Collections.Generic; +using System.Data.SqlClient; using System.Linq; using System.Web; using System.Web.UI; @@ -10,9 +12,39 @@ namespace abbott_2024_event.BackEnd public partial class Main : System.Web.UI.MasterPage { + SqlConnection conn = new SqlConnection(globalClass.appsettings("DBConnectionString")); public authToken authToken; protected void Page_Load(object sender, EventArgs e) { + string myIP = globalClass.GetIPAddress(); + + if (myIP == "::1") + { + myIP = "127.0.0.1"; + } + + Boolean isAllow = false; + + if (myIP == "127.0.0.1") + { + isAllow = true; + } + + ipTable ipTable = conn.QueryFirstOrDefault("select * from ipTable where ipTable_address = @ipTable_address", new { ipTable_address = myIP }); + + if (ipTable != null) + { + isAllow = true; + } + + if (isAllow == false) + { + Response.Redirect("auth-error-v3.html"); + return; + } + + + authToken = new authToken(); if (authToken.user_isLogin == false) { diff --git a/BackEnd/Main.Master.designer.cs b/BackEnd/Main.Master.designer.cs index 79516e6..9a23679 100644 --- a/BackEnd/Main.Master.designer.cs +++ b/BackEnd/Main.Master.designer.cs @@ -14,15 +14,6 @@ namespace abbott_2024_event.BackEnd public partial class Main { - /// - /// head 控制項。 - /// - /// - /// 自動產生的欄位。 - /// 若要修改,請將欄位宣告從設計工具檔案移到程式碼後置檔案。 - /// - protected global::System.Web.UI.WebControls.ContentPlaceHolder head; - /// /// form1 控制項。 /// @@ -40,5 +31,14 @@ namespace abbott_2024_event.BackEnd /// 若要修改,請將欄位宣告從設計工具檔案移到程式碼後置檔案。 /// protected global::System.Web.UI.WebControls.ContentPlaceHolder ContentPlaceHolder1; + + /// + /// head 控制項。 + /// + /// + /// 自動產生的欄位。 + /// 若要修改,請將欄位宣告從設計工具檔案移到程式碼後置檔案。 + /// + protected global::System.Web.UI.WebControls.ContentPlaceHolder head; } } diff --git a/BackEnd/api/importTestData.ashx b/BackEnd/api/importTestData.ashx new file mode 100644 index 0000000..d732d4e --- /dev/null +++ b/BackEnd/api/importTestData.ashx @@ -0,0 +1 @@ +<%@ WebHandler Language="C#" CodeBehind="importTestData.ashx.cs" Class="abbott_2024_event.BackEnd.api.importTestData" %> diff --git a/BackEnd/api/importTestData.ashx.cs b/BackEnd/api/importTestData.ashx.cs new file mode 100644 index 0000000..9ea0925 --- /dev/null +++ b/BackEnd/api/importTestData.ashx.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.Data.SqlClient; +using System.Linq; +using System.Runtime.Serialization.Json; +using System.Web; +using System.Web.SessionState; +using Dapper; +using Dapper.Contrib.Extensions; + +namespace abbott_2024_event.BackEnd.api +{ + /// + /// importTestData 的摘要描述 + /// + public class importTestData : IHttpHandler + { + + + SqlConnection conn = new SqlConnection(globalClass.appsettings("DBConnectionString")); + public void ProcessRequest(HttpContext context) + { + context.Response.ContentType = "text/plain"; + context.Response.Write("Hello World"); + + List tempList = conn.Query("select * from temp_f").ToList(); + + int intmonth = 0; + + foreach (temp_m tempm in tempList) { + + + double minVal = 0; + double maxVal = 0; + + for (int i = 1; i <= 8; i++) { + lenHeiTable newData = new lenHeiTable(); + + newData.lenHeiTable_month = intmonth; + newData.lenHeiTable_sexual = "F"; + + if (i == 1) { + maxVal = tempm.temp_3; + + newData.lenHeiTable_minVal = minVal; + newData.lenHeiTable_maxVal = maxVal; + newData.lenHeiTable_percent = 3; + + minVal = tempm.temp_3; + } + + if (i == 2) + { + maxVal = tempm.temp_15; + + newData.lenHeiTable_minVal = minVal; + newData.lenHeiTable_maxVal = maxVal; + newData.lenHeiTable_percent = 15; + + minVal = tempm.temp_15; + } + + if (i == 3) + { + maxVal = tempm.temp_25; + + newData.lenHeiTable_minVal = minVal; + newData.lenHeiTable_maxVal = maxVal; + newData.lenHeiTable_percent = 25; + + minVal = tempm.temp_25; + } + + if (i == 4) + { + maxVal = tempm.temp_50; + + newData.lenHeiTable_minVal = minVal; + newData.lenHeiTable_maxVal = maxVal; + newData.lenHeiTable_percent = 50; + + minVal = tempm.temp_50; + } + + if (i == 5) + { + maxVal = tempm.temp_75; + + newData.lenHeiTable_minVal = minVal; + newData.lenHeiTable_maxVal = maxVal; + newData.lenHeiTable_percent = 75; + + minVal = tempm.temp_75; + } + + if (i == 6) + { + maxVal = tempm.temp_85; + + newData.lenHeiTable_minVal = minVal; + newData.lenHeiTable_maxVal = maxVal; + newData.lenHeiTable_percent = 85; + + minVal = tempm.temp_85; + } + + if (i == 7) + { + maxVal = tempm.temp_97; + + newData.lenHeiTable_minVal = minVal; + newData.lenHeiTable_maxVal = maxVal; + newData.lenHeiTable_percent = 97; + + minVal = tempm.temp_97; + } + + if (i == 8) + { + maxVal = 999; + + newData.lenHeiTable_minVal = minVal; + newData.lenHeiTable_maxVal = maxVal; + newData.lenHeiTable_percent = 100; + + minVal = 0; + } + + conn.Insert(newData); + } + + intmonth++; + } + + + context.Response.ContentType = "text/plain"; + context.Response.Write("Hello World"); + + + } + + public bool IsReusable + { + get + { + return false; + } + } + } +} \ No newline at end of file diff --git a/BackEnd/api/ipList.ashx b/BackEnd/api/ipList.ashx new file mode 100644 index 0000000..0a20c72 --- /dev/null +++ b/BackEnd/api/ipList.ashx @@ -0,0 +1 @@ +<%@ WebHandler Language="C#" CodeBehind="ipList.ashx.cs" Class="abbott_2024_event.BackEnd.api.ipList" %> diff --git a/BackEnd/api/ipList.ashx.cs b/BackEnd/api/ipList.ashx.cs new file mode 100644 index 0000000..2c1d2a3 --- /dev/null +++ b/BackEnd/api/ipList.ashx.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Runtime.Serialization.Json; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.Web.Services.Protocols; +using System.Security.Cryptography; +using System.Text; +using System.Web.SessionState; +using System.Data; +using System.IO.Compression; +using System.Data.SqlClient; +using Dapper; +using Dapper.Contrib.Extensions; + +namespace abbott_2024_event.BackEnd.api +{ + /// + /// ipList 的摘要描述 + /// + public class ipList : IHttpHandler, IReadOnlySessionState + { + SqlConnection conn = new SqlConnection(globalClass.appsettings("DBConnectionString")); + public void ProcessRequest(HttpContext context) + { + result objRet = new result(); + DataContractJsonSerializer json = new DataContractJsonSerializer(objRet.GetType()); + context.Response.ContentType = "application/json;charset=utf-8"; + context.Response.AddHeader("Access-Control-Allow-Origin", "*"); + + string acceptEncoding = context.Request.Headers["Accept-Encoding"].ToString().ToUpperInvariant(); + if (!String.IsNullOrEmpty(acceptEncoding)) + { + if (acceptEncoding.Contains("GZIP")) + { + //输出流头部GZIP压缩 + context.Response.AppendHeader("Content-encoding", "gzip"); + context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress); + } + else if (acceptEncoding.Contains("DEFLATE")) + { + //输出流头部DEFLATE压缩 + context.Response.AppendHeader("Content-encoding", "deflate"); + context.Response.Filter = new DeflateStream(context.Response.Filter, CompressionMode.Compress); + } + } + + authToken objAuth = new authToken(); + + string allowAnyIP = (context.Request["allow"] == null) ? "" : context.Request["allow"].ToString(); + string iplist = (context.Request["iplist"] == null) ? "[]" : context.Request["iplist"].ToString(); + string method = (context.Request["method"] == null) ? "" : context.Request["method"].ToString(); + + if (!objAuth.user_isLogin) + { + objRet.ret = "no"; + objRet.err_code = "0001"; + objRet.message = "尚未登入,請登入後使用"; + json.WriteObject(context.Response.OutputStream, objRet); + return; + } + + if (method == "") + { + objRet.ret = "no"; + objRet.err_code = "0003"; + objRet.message = "無method"; + json.WriteObject(context.Response.OutputStream, objRet); + return; + } + + if (method == "get") { + List ipTables = conn.Query("select * from ipTable").ToList(); + + foreach (ipTable ipTable in ipTables) { + objRet.ipList.Add(ipTable.ipTable_address); + } + objRet.ret = "yes"; + json.WriteObject(context.Response.OutputStream, objRet); + return; + } + + if (method == "edit") { + dynamic ipJsonObj; + + ipJsonObj = JValue.Parse(iplist); + + conn.Execute("delete ipTable"); + + foreach (string item in ipJsonObj) + { + if (item != "") { + ipTable newIp = new ipTable(); + newIp.ipTable_address = item; + newIp.ipTable_create_user_uid = "admin"; + conn.Insert(newIp); + } + } + + objRet.ret = "yes"; + json.WriteObject(context.Response.OutputStream, objRet); + return; + } + } + + public class result + { + public string ret = "no"; + public string err_code = "0000"; + public string message = ""; + public string allowAnyIP = "N"; + public List ipList = new List(); + } + + public bool IsReusable + { + get + { + return false; + } + } + } +} \ No newline at end of file diff --git a/BackEnd/auth-error-v3.html b/BackEnd/auth-error-v3.html new file mode 100644 index 0000000..002b8f8 --- /dev/null +++ b/BackEnd/auth-error-v3.html @@ -0,0 +1,99 @@ + + + + + + + + Error 404: Page not found | Looper - Bootstrap 4 Admin Theme + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ +
+
+

+ 4 4 +

+

Page not found!

+

Sorry, we've misplaced that URL or it's pointing to something that doesn't exist.

+ +
+
+
+
+ + + + + + + + + + + \ No newline at end of file diff --git a/BackEnd/ip-management.aspx b/BackEnd/ip-management.aspx new file mode 100644 index 0000000..5d4e57f --- /dev/null +++ b/BackEnd/ip-management.aspx @@ -0,0 +1,116 @@ +<%@ Page Title="" Language="C#" MasterPageFile="~/BackEnd/Main.Master" AutoEventWireup="true" CodeBehind="ip-management.aspx.cs" Inherits="abbott_2024_event.BackEnd.ip_management" %> + + + + + +
+ +
+ + + +
+

IP清單

+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
+ + +
+ +
+ +
+
請在上方輸入可以存取的IP位置,每行一組IP。
+
+
+
+ +
+
+ +
+
+
+
+
+
diff --git a/BackEnd/ip-management.aspx.cs b/BackEnd/ip-management.aspx.cs new file mode 100644 index 0000000..c448ab6 --- /dev/null +++ b/BackEnd/ip-management.aspx.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace abbott_2024_event.BackEnd +{ + public partial class ip_management : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + + } + } +} \ No newline at end of file diff --git a/BackEnd/ip-management.aspx.designer.cs b/BackEnd/ip-management.aspx.designer.cs new file mode 100644 index 0000000..32f2387 --- /dev/null +++ b/BackEnd/ip-management.aspx.designer.cs @@ -0,0 +1,17 @@ +//------------------------------------------------------------------------------ +// <自動產生> +// 這段程式碼是由工具產生的。 +// +// 變更這個檔案可能會導致不正確的行為,而且如果已重新產生 +// 程式碼,則會遺失變更。 +// +//------------------------------------------------------------------------------ + +namespace abbott_2024_event.BackEnd +{ + + + public partial class ip_management + { + } +} diff --git a/abbott_2024_event.csproj b/abbott_2024_event.csproj index acaf3c6..6123a8b 100644 --- a/abbott_2024_event.csproj +++ b/abbott_2024_event.csproj @@ -13152,7 +13152,10 @@ + + + @@ -13162,6 +13165,12 @@ + + importTestData.ashx + + + ipList.ashx + signin.ashx @@ -13172,6 +13181,20 @@ Index.aspx + + ip-management.aspx + ASPXCodeBehind + + + ip-management.aspx + + + Login.aspx + ASPXCodeBehind + + + Login.aspx + Main.Master ASPXCodeBehind @@ -13187,10 +13210,12 @@ Default.aspx + + babyData.ashx + - @@ -17653,6 +17678,8 @@ + + Web.config @@ -17660,6 +17687,7 @@ Web.config + 10.0 diff --git a/bin/abbott_2024_event.dll b/bin/abbott_2024_event.dll index efc80f2cd56521a3ffb316866dba98cdf96acc1f..cd3585a355bc8f3f2e8d720f3776647c2a6b8fd4 100644 GIT binary patch literal 25088 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

NBj#ZHGp78b^l>J3qO~ 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 CDj{V6 diff --git a/webapi/babyData.ashx b/webapi/babyData.ashx new file mode 100644 index 0000000..671bfc2 --- /dev/null +++ b/webapi/babyData.ashx @@ -0,0 +1 @@ +<%@ WebHandler Language="C#" CodeBehind="babyData.ashx.cs" Class="abbott_2024_event.webapi.babyData" %> diff --git a/webapi/babyData.ashx.cs b/webapi/babyData.ashx.cs new file mode 100644 index 0000000..b3a3e22 --- /dev/null +++ b/webapi/babyData.ashx.cs @@ -0,0 +1,245 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Runtime.Serialization.Json; +using System.Web.SessionState; +using Dapper; +using Dapper.Contrib.Extensions; +using System.Data.SqlClient; + +namespace abbott_2024_event.webapi +{ + ///

+ /// babyData 的摘要描述 + /// + public class babyDataAshx : IHttpHandler + { + SqlConnection conn = new SqlConnection(globalClass.appsettings("DBConnectionString")); + public void ProcessRequest(HttpContext context) + { + result objRet = new result(); + DataContractJsonSerializer json = new DataContractJsonSerializer(objRet.GetType()); + context.Response.ContentType = "application/json;charset=utf-8"; + + string name = (context.Request["name"] == null) ? "" : context.Request["name"].ToString(); + string birthday = (context.Request["birthday"] == null) ? "" : context.Request["birthday"].ToString(); + string gender = (context.Request["gender"] == null) ? "" : context.Request["gender"].ToString(); + string height = (context.Request["height"] == null) ? "" : context.Request["height"].ToString(); + string line_uid = (context.Request["line_uid"] == null) ? "" : context.Request["line_uid"].ToString(); + string line_displayname = (context.Request["line_displayname"] == null) ? "" : context.Request["line_displayname"].ToString(); + string babyData_uid = (context.Request["babyData_uid"] == null) ? "" : context.Request["babyData_uid"].ToString(); + + + string babyRec_key = globalClass.CreateRandomCode(32); + + + string delSQLDatastring = string.Format("delete babyData where line_uid = '' and babyData_createdate <= '{0}'", DateTime.Now.AddDays(-5).ToString("yyyy/MM/dd 23:59:59")); + string delSQLRecstring = string.Format("delete babyRec where line_uid = '' and babyRec_createdate <= '{0}'", DateTime.Now.AddDays(-5).ToString("yyyy/MM/dd 23:59:59")); + + conn.Execute(delSQLDatastring); + conn.Execute(delSQLRecstring); + + + + if (babyData_uid == "" && name == "") { + objRet.ret = "no"; + objRet.err_code = "1001"; + objRet.message = "請輸入寶貝姓名!"; + + json.WriteObject(context.Response.OutputStream, objRet); + } + + DateTime dateBirthDay; + + if (babyData_uid == "") { + try + { + dateBirthDay = DateTime.Parse(birthday + " 23:59:59"); + } + catch (Exception ex) + { + objRet.ret = "no"; + objRet.err_code = "1002"; + objRet.message = "請輸入正確的寶貝生日!" + ex.Message; + + json.WriteObject(context.Response.OutputStream, objRet); + } + } + + + if (babyData_uid == "" && gender != "M" && gender != "F") { + objRet.ret = "no"; + objRet.err_code = "1003"; + objRet.message = "請輸入正確的寶貝性別!"; + + json.WriteObject(context.Response.OutputStream, objRet); + } + + double dblHeight; + + try + { + dblHeight = Double.Parse(height); + } + catch (Exception ex) { + objRet.ret = "no"; + objRet.err_code = "1004"; + objRet.message = "請輸入寶貝身高!" + ex.Message; + + json.WriteObject(context.Response.OutputStream, objRet); + } + + if (line_uid != null) { + lineUser lineUser = conn.QueryFirstOrDefault("select * from lineUser where line_uid = @line_uid", new { line_uid = line_uid }); + + if (lineUser != null) + { + if (line_displayname != lineUser.line_displayName && line_displayname != "") + { + lineUser.line_displayName = line_displayname; + lineUser.lineUser_modifydate = DateTime.Now; + conn.Update(lineUser); + } + + List babyDatas = conn.Query("select * from babyData where line_uid = @line_uid", new { line_uid = line_uid }).ToList(); + + if (babyDatas.Count > 0) { + objRet.more_data = "Y"; + } + } + else { + lineUser = new lineUser(); + + if (line_displayname == null) { + objRet.ret = "no"; + objRet.err_code = "1005"; + objRet.message = "請輸入Line Display Name!"; + + json.WriteObject(context.Response.OutputStream, objRet); + } + + lineUser.lineUser_uid = globalClass.CreateRandomCode(32); + lineUser.line_uid = line_uid; + lineUser.line_displayName = line_displayname; + + conn.Insert(lineUser); + + } + } + + babyData newBaby; + + if (babyData_uid == "") + { + babyData_uid = globalClass.CreateRandomCode(32); + + newBaby = new babyData(); + newBaby.babyData_uid = babyData_uid; + newBaby.babyData_birthday = DateTime.Parse(birthday + " 23:59:59"); + newBaby.babyData_name = name; + newBaby.babyData_sexual = gender; + + if (line_uid != "") + { + newBaby.line_uid = line_uid; + newBaby.babyData_bindedLine = "Y"; + newBaby.babyData_bindeddate = DateTime.Now; + } + + conn.Insert(newBaby); + } + else { + newBaby = conn.QueryFirstOrDefault("select * from babyData where babyData_uid = @babyData_uid", new { babyData_uid = babyData_uid }); + + if (newBaby == null) { + objRet.ret = "no"; + objRet.err_code = "1008"; + objRet.message = "無此babyData_uid的寶貝資料!"; + + json.WriteObject(context.Response.OutputStream, objRet); + } + + babyData_uid = newBaby.babyData_uid; + } + + + + babyRec newRec = new babyRec(); + newRec.babyData_uid = babyData_uid; + newRec.line_uid = line_uid; + newRec.babyRec_key = babyRec_key; + newRec.babyRec_recdate = DateTime.Now; + newRec.babyRec_uid = "r_" + globalClass.CreateRandomCode(32); + newRec.babyRec_recYear = newRec.babyRec_recdate.Year; + newRec.babyRec_recMonth = newRec.babyRec_recdate.Month; + newRec.babyRec_recDay = newRec.babyRec_recdate.Day; + newRec.babyRec_height = double.Parse(height); + newRec.babyRec_months = globalClass.MonthDiff(newBaby.babyData_birthday, newRec.babyRec_recdate); + newRec.babyRec_yearMonthStr = globalClass.YearMonthDiff(newBaby.babyData_birthday, newRec.babyRec_recdate); + + if (newRec.babyRec_months > 120) { + objRet.ret = "no"; + objRet.err_code = "1006"; + objRet.message = "寶貝年齡超過10歲,已過紀錄範圍!"; + + json.WriteObject(context.Response.OutputStream, objRet); + } + + if (line_uid != "") { + + } + + lenHeiTable objLenHei = conn.QueryFirstOrDefault("select * from lenHeiTable where lenHeiTable_sexual = @gender and lenHeiTable_month = @month and lenHeiTable_minVal < @height1 and lenHeiTable_maxVal >= @height2 ", new { gender = gender, month = newRec.babyRec_months, height1 = height, height2 = height}); + lenHeiTable objMidHei = conn.QueryFirstOrDefault("select * from lenHeiTable where lenHeiTable_sexual = @gender and lenHeiTable_month = @month and lenHeiTable_percent = 50", new { gender = gender, month=newRec.babyRec_months }); + + if (objLenHei == null) { + objRet.ret = "no"; + objRet.err_code = "1007"; + objRet.message = "無符合此身高年齡條件的數據!"; + + json.WriteObject(context.Response.OutputStream, objRet); + } + + newRec.babyRec_inpercent = objLenHei.lenHeiTable_percent; + newRec.babyRec_middleHeight = objMidHei.lenHeiTable_maxVal; + + conn.Insert(newRec); + + objRet.temp_key = babyRec_key; + objRet.baby_data.baby_birthday = birthday; + objRet.baby_data.baby_height = newRec.babyRec_height; + objRet.baby_data.baby_age = newRec.babyRec_yearMonthStr; + objRet.baby_data.average_height = newRec.babyRec_middleHeight; + objRet.ret = "yes"; + + json.WriteObject(context.Response.OutputStream, objRet); + } + + public class result + { + public string ret = "no"; + public string err_code = "0000"; + public string message = ""; + public string temp_key = ""; + public string more_data = "N"; + public baby baby_data = new baby(); + } + + public class baby + { + public string baby_birthday { get; set; } = ""; + public string baby_age { get; set; } = ""; + public double baby_height { get; set; } = 0.0; + public double average_height { get; set; } = 0.0; + } + + public bool IsReusable + { + get + { + return false; + } + } + } +} \ No newline at end of file