using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using PagedList; using Newtonsoft.Json; using System.Collections; using DocumentFormat.OpenXml.Office2010.Excel; using MyWeb; // api/appfollower //[ezAuthorize(Roles = "admin")]//群組:* //[ezAuthorize] //[RoutePrefix("api/appfollower")] public class appFollowerController : ApiController { private Model.ezEntities _db = new Model.ezEntities(); // GET api/ public IEnumerable Get() { var list = _db.followers.ToList(); if (list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return list; } public IEnumerable Get(int page, int pageSize = 10, string sortBy="", bool sortDesc=false) { var list = _db.followers.OrderBy(o=>o.f_number).ToPagedList(page, pageSize); if (list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return list; } // GET api//5 public Model.follower Get(int id) { var item = _db.followers.Where(q => q.num == id).FirstOrDefault(); //if (item == null) throw new HttpResponseException(HttpStatusCode.NotFound); return item; } // POST api/ public void Post([FromBody] Model.follower item) { } // PUT api//5 public void Put(int id, [FromBody] Model.follower item) { } // DELETE api//5 public void Delete(int id) { var prod = _db.followers.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料 if (prod != null) { prod.pro_order_detail.Clear(); // Clear 方法來清除相關聯的 Child 資料,針對選擇性關聯欄位,它就會自動將欄位值更新成 null。 prod.pro_order.Clear(); prod.leader = null;//清空leader _db.followers.Remove(prod); _db.SaveChanges();//執行 Model.admin_log admin_log = new Model.admin_log(); MyWeb.admin admin = new MyWeb.admin();//api裡不可以用MyWeb if (admin.isLoign()) { admin_log.writeLog(admin.info.u_id, (int)Model.admin_log.Systems.Follower, (int)Model.admin_log.Status.Delete, prod.f_number+prod.u_name); } } } [HttpDelete] [Route("api/appfollower/Delete/{nums}")] public void Delete(string nums) { if (!string.IsNullOrEmpty(nums)) { var getDelItem = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s)); var prod = _db.followers.AsEnumerable().Where(q => getDelItem.Contains(q.num)).ToList(); if (prod.Count() > 0) { foreach (var item in prod) { foreach (var item2 in item.pro_order_detail1) item2.from_id = null; //清空訂單明細的陽上報恩者from_id //f_num設定串聯刪除 foreach (var item2 in item.pro_order) item2.introducer = null; item.leader = null;//清空leader } _db.followers.RemoveRange(prod); _db.SaveChanges(); Model.admin_log admin_log = new Model.admin_log(); MyWeb.admin admin = new MyWeb.admin();//api裡不可以用MyWeb if (admin.isLoign()) { admin_log.writeLog(admin.info.u_id, (int)Model.admin_log.Systems.Follower, (int)Model.admin_log.Status.Delete, admin_log.LogViewBtn(prod.Select(x => x.f_number + x.u_name).ToList())); } } } } [HttpGet] [Route("api/appfollower/count")] public int Count() { var count = _db.followers.Count(); return count; } [HttpPost] [Route("api/appfollower/GetList")] public IHttpActionResult GetList([FromBody] Model.ViewModel.follower q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { var qry = _db.followers.AsEnumerable(); if (!string.IsNullOrEmpty(q.f_number)) qry = qry.Where(o => o.f_number.Contains(q.f_number.Trim())); if (!string.IsNullOrEmpty(q.u_name)) qry = qry.Where(o => o.u_name.Contains(q.u_name.Trim())); if (q.birthday.HasValue) qry = qry.Where(o => o.birthday >= q.birthday.Value); if (q.birthday2.HasValue) qry = qry.Where(o => o.birthday < Convert.ToDateTime(q.birthday2.Value).AddDays(1)); if (!string.IsNullOrEmpty(q.address)) qry = qry.Where(o => o.address !=null && o.address.Contains(q.address?.Trim())); //if (q.num.HasValue && q.num.Value>0) // qry = qry.Where(o => o.num==q.num.Value); if (q.ept_self.HasValue && q.ept_self.Value )//排除自己 { qry = qry.Where(o => o.num != q.num.Value); } if (!string.IsNullOrEmpty(q.country)) qry = qry.Where(o => o.country== q.country); if (!string.IsNullOrEmpty(q.country2)) { if (q.country2 == "1") { qry = qry.Where(o => o.country == "158"); }else if (q.country2 == "2") { qry = qry.Where(o => o.country != "158"); } } if (sortBy.Equals("f_number")) { if (sortDesc) qry = qry.OrderByDescending(o => o.f_number); else qry = qry.OrderBy(o => o.f_number); } else if (sortBy.Equals("u_name")) { if (sortDesc) qry = qry.OrderByDescending(o => o.u_name); else qry = qry.OrderBy(o => o.u_name); } else if (sortBy.Equals("identity_type_desc")) { if (sortDesc) qry = qry.OrderByDescending(o => o.identity_type); else qry = qry.OrderBy(o => o.identity_type); } else if (sortBy.Equals("sex")) { if (sortDesc) qry = qry.OrderByDescending(o => o.sex); else qry = qry.OrderBy(o => o.sex); } else if (sortBy.Equals("birthday")) { if (sortDesc) qry = qry.OrderByDescending(o => o.birthday); else qry = qry.OrderBy(o => o.birthday); } else qry = qry.OrderByDescending(o => o.num); MyWeb.encrypt encrypt = new MyWeb.encrypt(); var tdesc = publicFun.enum_desc(); var ret = new { list = qry.ToPagedList(page, pageSize).Select(x => new { num = x.num, f_number = x.f_number, u_name = x.u_name, sex = x.sex, birthday = x.birthday, //?.ToString("yyyy/MM/dd"), birthday2 = publicFun.chagenDate(x.birthday), //?.ToString("yyyy/MM/dd"), sign = Model.follower.chagenSign(x.birthday), //NULL?? sexagenary = Model.follower.sexagenary(x.birthday), identity_type = x.identity_type, //identity_type_string = Enum.GetName( typeof(Model.follower.type), x.identity_type), //identity_type_string1 = ((Model.follower.type)(x.identity_type??0)).ToString(), identity_type_desc = tdesc[x.identity_type ?? 1] ,//TryGetValue.. phone = x.phone, phoneDes = encrypt.DecryptAutoKey(x.phone), //--MyWeb.function X refugedate=x.refugedate, refuge_name = x.refuge_name, email = x.email, address = x.address, }), count = qry.Count() }; //日期轉字串: 如要用VUE做, 傳回date而不要tostring, 用filter + moment.js做 if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } [HttpPost] [Route("api/appfollower/GetFamilyList")] public IHttpActionResult GetFamilyList([FromBody] Model.ViewModel.follower q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { int _follower = q.num.HasValue && q.num.Value > 0 ? q.num.Value : 0; if (_follower > 0) { //家族 : 家長是我的人,跟我同家長的人,我的家長本人,我本人 //var cc = _db.followers.AsEnumerable().Where(x => x.num == 103 || x.leader == 103).Select(x => x.num); //var aa = _db.followers.Where(x => x.num == 103 || x.leader == 103).Select(x => x.num); //var bb = _db.followers.Where(i => aa.Any(x => x == i.num) || aa.Any(x => x == i.leader)).ToList(); int myLeader = _db.followers.Where(x => x.num == _follower).Select(x => x.leader??0).FirstOrDefault(); //我的家長 var cc = _db.followers.Where(x => x.num == _follower || x.leader == _follower).Select(x => x.num); //var qry = //from c in foDt //where c.leader == _follower || // ((from o in foDt // where o.num == _follower // select o.leader).Contains(c.leader) && c.leader != null) || // (from o in foDt // where o.num == _follower // select o.leader).Contains(c.num) || // c.num == _follower //select c; if (q.ept_self.HasValue && q.ept_self.Value) //排除自己 { //qry = //from c in foDt //where c.leader == _follower || // ((from o in foDt // where o.num == _follower // select o.leader).Contains(c.leader) && c.leader != null) // && c.num != _follower //select c; if (myLeader > 0)//有家長 { //跟我同家長的人 cc = _db.followers.Where(x => x.num != _follower && (x.leader == _follower || x.leader == myLeader)).Select(x => x.num); } else { cc = _db.followers.Where(x => x.num != _follower && x.leader == _follower).Select(x => x.num); } } //int ccc = cc.Count(); var qry = _db.followers.AsEnumerable().Where(f => cc.Any(x => x == f.num) || cc.Any(x => x == f.leader)); if (!string.IsNullOrEmpty(q.f_number)) qry = qry.Where(o => o.f_number.Contains(q.f_number.Trim())); if (!string.IsNullOrEmpty(q.u_name)) qry = qry.Where(o => o.u_name.Contains(q.u_name.Trim())); if (q.birthday.HasValue) qry = qry.Where(o => o.birthday >= q.birthday.Value); if (q.birthday2.HasValue) qry = qry.Where(o => o.birthday < Convert.ToDateTime(q.birthday2.Value).AddDays(1)); if (!string.IsNullOrEmpty(q.address)) qry = qry.Where(o => o.address.Contains(q.address.Trim())); qry = qry.OrderByDescending(o => o.num); MyWeb.encrypt encrypt = new MyWeb.encrypt(); var tdesc = publicFun.enum_desc(); int i = 1; var ret = new { list = qry.ToPagedList(page, pageSize).Select(x => new { id = i++, num = x.num, f_number = x.f_number, u_name = x.u_name, address = x.address, birthday = x.birthday, phone = x.phone, phoneDes = encrypt.DecryptAutoKey(x.phone), demo = x.demo, identity_type_desc = tdesc[x.identity_type ?? 1], f_num_selected = new { text = x.u_name, val = x.num, }, //data_tmp = new //tmp 暫存用 //{ // f_num_selected = new // { // text = x.u_name, // val = x.num, // }, // identity_type_desc = tdesc[x.identity_type ?? 1], // birthday = x.birthday, // phoneDes = encrypt.DecryptAutoKey(x.phone), // demo = x.demo, //}, appellation_id_selected = new { text = x.appellation?.title, val = x.appellation_id, }, }), count = qry.Count() }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } else { return Ok("此訂單沒有姓名/名稱"); } } [HttpPost] [Route("api/appfollower/familySave")] public IHttpActionResult SaveDetailData([FromBody] Model.ViewModel.follower item) { if (item.leader.HasValue && item.leader.Value > 0 && item.f_num.HasValue && item.f_num.Value > 0) { if (item.num.HasValue && item.num.Value > 0) { //原先就有設定家長 , -> 家人 :不變 or 變更 if (item.num.Value == item.f_num.Value) { //變更其家人稱謂 Model.follower _data = _db.followers.Where(q => q.num == item.f_num.Value).FirstOrDefault();//修改 if (_data != null) { _data.appellation_id = item.appellation_id.Value; _db.SaveChanges(); var ret = _data.num; return Ok(ret); } else return NotFound(); } else { //移除原先的家長設定 Model.follower _data2 = _db.followers.Where(q => q.num == item.num.Value).FirstOrDefault();//修改 if (_data2 != null) { _data2.leader = null; _data2.appellation_id = null; _db.SaveChanges(); } //變更其家長設定 Model.follower _data = _db.followers.Where(q => q.num == item.f_num.Value).FirstOrDefault();//修改 if (_data != null) { _data.leader = item.leader.Value; _data.appellation_id = item.appellation_id.Value; _db.SaveChanges(); var ret = _data.num; return Ok(ret); } else return NotFound(); } } else { //新增家人 //變更其家長設定 Model.follower _data = _db.followers.Where(q => q.num == item.f_num.Value).FirstOrDefault();//修改 if (_data != null) { _data.leader = item.leader.Value; _data.appellation_id = item.appellation_id.Value; _db.SaveChanges(); var ret = _data.num; return Ok(ret); } else return NotFound(); } } else { return NotFound(); } } [HttpPost] [Route("api/appfollower/familyDelete")] public IHttpActionResult familyDelete([FromBody] Model.ViewModel.follower item) { if (item.leader.HasValue && item.leader.Value > 0 && item.num.HasValue && item.num.Value > 0) { //移除原先的家長設定 Model.follower _data2 = _db.followers.Where(q => q.num == item.num.Value).FirstOrDefault();//修改 if (_data2 != null) { _data2.leader = null; _db.SaveChanges(); return Ok(); } else return NotFound(); } else { return NotFound(); } } [HttpPost] [Route("api/appfollower/GetTabletList")] public IHttpActionResult GetTabletList([FromBody] Model.follower q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { int _follower = q.num; pageSize = (pageSize < 0) ? 0 : pageSize; if (_follower > 0) { var qry = _db.followers_tablet.AsEnumerable().Where(x=>( x.f_num??0) == _follower); qry = qry.OrderByDescending(o => o.num); int i = 1; var ret = new { list = qry.ToPagedList(page, pageSize).Select(x => new { id = i++, num = x.num, f_num = x.f_num, type = x.type, title = x.title, }), count = qry.Count() }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } return NotFound(); } [HttpPost] [Route("api/appfollower/tabletSave")] public IHttpActionResult tabletSave([FromBody] Model.ViewModel.followers_tablet item) { if (item.num.HasValue && item.num.Value > 0) { //變更 Model.followers_tablet _data = _db.followers_tablet.Where(q => q.num == item.num.Value).FirstOrDefault();//修改 if (_data != null) { _data.type = item.type; _data.title = item.title; _db.SaveChanges(); var ret = _data.num; return Ok(ret); } else return NotFound(); } else { //新增 Model.followers_tablet _data = new Model.followers_tablet(); _data.f_num = item.f_num; _data.type = item.type; _data.title = item.title; _db.followers_tablet.Add(_data); _db.SaveChanges(); var ret = _data.num; return Ok(ret); } } [HttpDelete] [Route("api/appfollower/tabletDelete/{id}")] public void tabletDelete(int id) { var prod = _db.followers_tablet.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料 if (prod != null) { _db.followers_tablet.Remove(prod); _db.SaveChanges();//執行 } } [HttpPost] [Route("api/appfollower/checkHashFollower")] public IHttpActionResult CheckHashFollower([FromBody] Model.ViewModel.follower q) { if (q == null || string.IsNullOrEmpty(q.phone) || string.IsNullOrEmpty(q.id_code)) { return BadRequest("Invalid input"); } // Pass phone and idcode to encrypt.cs to get the followerHash encrypt enc = new encrypt(); string followerHash = enc.followerHash(q.phone, q.id_code); // Query the database for followers where follower_hash == followerHash var follower = _db.followers.FirstOrDefault(f => f.follower_hash == followerHash); // Return the follower or null return Ok(follower); } }