demo20230512/Controllers/Api/FabController.cs
2023-05-12 10:20:28 +08:00

192 lines
6.9 KiB
C#

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;
}
/// <summary>
/// 由groupId呼叫api取得groupId vs name pairs, 給下拉選單用
/// </summary>
/// <param name="groupId"></param>
/// <returns></returns>
[Route("api/Fab/GetGroupIdsNames/")]
[HttpGet]
public async Task<Dictionary<int, string>> GetGroupIdsNames()
{
Dictionary<int, string> ret = new Dictionary<int, string>();
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<Dictionary<int, string>>(httpResRec.returnJson);
return ret;
}
[Route("api/Fab/GetAll")]
[HttpGet]
public IEnumerable<Fab> GetAll()
{
var ret= service.GetFabs().Where(x => x.enable);
return ret;
}
[Route("api/Fab/GetAll2")]
[HttpGet]
//public IEnumerable<Fab> 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<Fab>(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;
}
}
}