575 lines
20 KiB
C#
575 lines
20 KiB
C#
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/<controller>
|
|
public IEnumerable<Model.follower> Get()
|
|
{
|
|
var list = _db.followers.ToList();
|
|
if (list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
|
|
return list;
|
|
}
|
|
|
|
public IEnumerable<Model.follower> 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/<controller>/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/<controller>
|
|
public void Post([FromBody] Model.follower item)
|
|
{
|
|
}
|
|
|
|
// PUT api/<controller>/5
|
|
public void Put(int id, [FromBody] Model.follower item)
|
|
{
|
|
}
|
|
|
|
// DELETE api/<controller>/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<Model.follower.type>();
|
|
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<Model.follower.type>();
|
|
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);
|
|
}
|
|
}
|
|
|