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"; context.Response.AddHeader("Access-Control-Allow-Origin", "*"); 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 utm_source = (context.Request["utm_source"] == null) ? "" : context.Request["utm_source"].ToString(); string utm_medium = (context.Request["utm_medium"] == null) ? "" : context.Request["utm_medium"].ToString(); string utm_campaign = (context.Request["utm_campaign"] == null) ? "" : context.Request["utm_campaign"].ToString(); string utm_term = (context.Request["utm_term"] == null) ? "" : context.Request["utm_term"].ToString(); string utm_content = (context.Request["utm_content"] == null) ? "" : context.Request["utm_content"].ToString(); utm_source = (utm_source.Length > 20) ? utm_source.Substring(0, 20) : utm_source; utm_medium = (utm_medium.Length > 20) ? utm_medium.Substring(0, 20) : utm_medium; utm_campaign = (utm_campaign.Length > 20) ? utm_campaign.Substring(0, 20) : utm_campaign; utm_term = (utm_term.Length > 20) ? utm_term.Substring(0, 20) : utm_term; utm_content = (utm_content.Length > 20) ? utm_content.Substring(0, 20) : utm_content; 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); return; } 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); return; } } if (babyData_uid == "" && gender != "M" && gender != "F") { objRet.ret = "no"; objRet.err_code = "1003"; objRet.message = "請輸入正確的寶貝性別!"; json.WriteObject(context.Response.OutputStream, objRet); return; } 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); return; } if (line_uid != "") { 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_monthLastRec = "Y"; newRec.babyRec_yearMonthStr = globalClass.YearMonthDiff(newBaby.babyData_birthday, newRec.babyRec_recdate); newRec.utm_source = utm_source; newRec.utm_medium = utm_medium; newRec.utm_campaign = utm_campaign; newRec.utm_term = utm_term; newRec.utm_content = utm_content; if (newRec.babyRec_months > 120) { objRet.ret = "no"; objRet.err_code = "1006"; objRet.message = "寶貝年齡超過10歲,已過紀錄範圍!"; json.WriteObject(context.Response.OutputStream, objRet); return; } 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 = newBaby.babyData_sexual, 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 = newBaby.babyData_sexual, month=newRec.babyRec_months }); if (objLenHei == null) { objRet.ret = "no"; objRet.err_code = "1007"; objRet.message = "無符合此身高年齡條件的數據!"; json.WriteObject(context.Response.OutputStream, objRet); return; } newRec.babyRec_inpercent = objLenHei.lenHeiTable_percent; newRec.babyRec_middleHeight = objMidHei.lenHeiTable_maxVal; if (newRec.babyData_uid != "") { conn.Execute("update babyRec set babyRec_monthLastRec = 'N' where babyData_uid = @babyData_uid and babyRec_recYear = @babyRec_recYear and babyRec_recMonth = @babyRec_recMonth and babyRec_months = @babyRec_months", new { babyData_uid = babyData_uid, babyRec_recYear = newRec.babyRec_recYear, babyRec_recMonth = newRec.babyRec_recMonth, babyRec_months = newRec.babyRec_months }); } conn.Insert(newRec); conn.Execute("update babyRec set babyRec_newestRec = 'N' where babyData_uid = @babyData_uid", new { babyData_uid = babyData_uid }); babyRec lastestBabyRec = conn.QueryFirstOrDefault("select * from babyRec where babyData_uid = @babyData_uid order by babyRec_months desc, babyRec_sn desc, babyRec_monthLastRec desc", new { babyData_uid = babyData_uid }); if(lastestBabyRec != null) { lastestBabyRec.babyRec_newestRec = "Y"; conn.Update(lastestBabyRec); } newBaby.babyData_lastTestDate = DateTime.Now; conn.Update(newBaby); objRet.temp_key = babyRec_key; objRet.baby_data.baby_birthday = newBaby.babyData_birthday.ToString("yyyy/MM/dd"); 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.baby_data.babyData_uid = newBaby.babyData_uid; objRet.baby_data.baby_gender = newBaby.babyData_sexual; objRet.baby_data.baby_inpercent = newRec.babyRec_inpercent; 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 string babyData_uid { get; set; } = ""; public string baby_gender { get; set; } = ""; public double baby_inpercent { get; set; } = 0; } public bool IsReusable { get { return false; } } } }