using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Threading.Tasks; using System.Web.Http; using CScommon; using Customize.Insynerger; using Customize.Insynerger.Interfaces; using Customize.ViewModels.Insynerger; using Microsoft.AspNet.Identity; using NLog; using PagedList; using Weee.DAL; using Weee.Models; using Weee.Service; using Weee.Supports; namespace Weee.Controllers { public class FabController : ApiControllerBase { private Logger _log; private readonly WeeeFabDataService service; protected WeeeDataContext db; protected IinsynergerAuthenticate _insynergerAuthenticate; protected IinsynergerReportService _insynergerReportService; public FabController(WeeeFabDataService s) : base(s) { _log = NLog.LogManager.GetCurrentClassLogger(); service = s; db = new WeeeDataContext(); _insynergerAuthenticate = new insynergerAuthenticate(db); _insynergerReportService = new insynergerReportService(db); } [Route("api/Fab/GetByPage/{page?}/{searchString?}")] [HttpGet] public Object GetByPage(int page = 1, string searchString = "") { var pageSize = 10; var fabs = service.GetFabs(); var dataFilter = new DataFilter(); var filteredProducts = dataFilter.FilterFab(fabs, searchString); var pagedFabs = filteredProducts.ToPagedList(page, pageSize); return new { fabs = pagedFabs, totalPage = pagedFabs.PageCount }; } [Route("api/Fab/Get/{id}")] [HttpGet] public Fab Get(int id) { return service.GetFab(id); } [Route("api/Fab/Get2/{id}")] [HttpGet] //public Fab Get(int id) public object Get2(int id) { object ret = new { fab = service.GetFab(id), groupId = _insynergerReportService.FabId2GroupId(id)//get groupId }; return ret; } /// /// 由groupId呼叫api取得groupId vs name pairs, 給下拉選單用 /// /// /// [Route("api/Fab/GetGroupIdsNames/")] [HttpGet] public async Task> GetGroupIdsNames() { Dictionary ret = new Dictionary(); IinsynergerAuthenticate ia = new insynergerAuthenticate(db); var userid = User.Identity.GetUserId(); var qry = (from a in db.SynergerUser where a.userId == userid select a).FirstOrDefault(); if (qry == null) return ret; string access_token = qry.accessToken; // 思納捷要取得groupId的name HttpResponseRec res0 = await ia.myInfo2groupId(access_token); if (res0 == null || res0.statusCode != HttpStatusCode.OK) return ret; int groupId = 0; if (!int.TryParse(res0.result + "", out groupId)) return ret; HttpResponseRec httpResRec = await ia.getListOfGroupNames(access_token, groupId); if (httpResRec == null || httpResRec.statusCode != HttpStatusCode.OK || string.IsNullOrWhiteSpace(httpResRec.returnJson)) return ret; ret = CScommon.JsonUtl.toT>(httpResRec.returnJson); return ret; } [Route("api/Fab/GetAll")] [HttpGet] public IEnumerable GetAll() { var ret= service.GetFabs().Where(x => x.enable); return ret; } [Route("api/Fab/GetAll2")] [HttpGet] //public IEnumerable GetAll() public object GetAll2() { object ret = new { fabs = service.GetFabs(), insynerger = _insynergerAuthenticate.IsSynergerOn() }; return ret;// service.GetFabs(); } [Route("api/Fab/Save/{id?}")] [HttpPost] public HttpResponseMessage Save(Fab toBeSave) { if (ModelState.IsValid) { var userid = User.Identity.GetUserId(); if (CheckNameExist(toBeSave.Name, toBeSave.ID, userid)) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "廠區\"" + toBeSave.Name + "\"已存在"); } toBeSave.UserId = userid; service.SaveFab(toBeSave); return Request.CreateResponse(HttpStatusCode.OK, toBeSave); } return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } [Route("api/Fab/Save2/{id?}")] [HttpPost] public HttpResponseMessage Save2(InsynergerFab toBeSave) { if (ModelState.IsValid) { var userid = User.Identity.GetUserId(); if (CheckNameExist(toBeSave.Name, toBeSave.ID, userid)) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "廠區\"" + toBeSave.Name + "\"已存在"); } toBeSave.UserId = userid; //var trans = service.BeginTransaction(); try { string json = CScommon.JsonUtl.fromT(toBeSave); Fab toBeSave2 =CScommon.JsonUtl.toT(json); service.SaveFab(toBeSave2); int fabId = toBeSave2.ID; // save groupId string err = _insynergerReportService.SaveFabGroupId(fabId , toBeSave.groupId); if (!string.IsNullOrWhiteSpace(err)) throw new Exception(err); //trans.Commit(); return Request.CreateResponse(HttpStatusCode.OK, toBeSave); } catch(Exception ex) { //trans.Rollback(); log.Error(ex); log.Error(CScommon.Exceptions.inner(ex)); log.Error(ex.StackTrace); return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } } return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } private bool CheckNameExist(string name, int id, string userid) { var exist = (from a in db.Fabs join b in db.Users on a.CompanyID equals b.CompanyID where a.Name == name && a.ID != id && b.Id==userid select a).Any(); return exist; } } }