using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using AMESCoreStudio.Web.Models;
using Newtonsoft.Json;
using AMESCoreStudio.WebApi;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.Rendering;
using AMESCoreStudio.WebApi.Models.BAS;
using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.CommonTools.Result;
using System.Linq;

namespace AMESCoreStudio.Web.Controllers
{
    public class BASController : Controller
    {
        private readonly ILogger<BASController> _logger;
        public readonly IBAS _basApi;
        public readonly ISYS _sysApi;
        public readonly IPCS _pcsApi;
        public readonly IJIG _jigApi;
        public BASController(ILogger<BASController> logger, IBAS basApi, ISYS sysApi, IPCS pcsApi, IJIG jigApi)
        {
            _logger = logger;
            _basApi = basApi;
            _sysApi = sysApi;
            _pcsApi = pcsApi;
            _jigApi = jigApi;
    }

        #region 下拉選項

        private async Task GetFactoryList()
        {
            var result = await _basApi.GetFactoryInfoes();

            var FactoryItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                FactoryItems.Add(new SelectListItem(result[i].FactoryNameCh,  result[i].FactoryID.ToString()));
            }
            ViewBag.FactoryList = FactoryItems;
        }
        private async Task GetFactoryUnitList()
        {
            var result = await _basApi.GetFactoryUnits();

            var UnitItems = new List<SelectListItem>();
            UnitItems.Add(new SelectListItem("全部", "0"));
            for (int i = 0; i < result.Count; i++)
            {
                UnitItems.Add(new SelectListItem(result[i].UnitName, result[i].UnitNo.ToString()));
            }
            ViewBag.FactoryUnit = UnitItems;
        }

        private async Task GetFactoryUnitList2()
        {
            var result = await _basApi.GetFactoryUnits();

            var UnitItems = new List<SelectListItem>();
            UnitItems.Add(new SelectListItem("全部", ""));
            for (int i = 0; i < result.Count; i++)
            {
                UnitItems.Add(new SelectListItem(result[i].UnitName, result[i].UnitNo.ToString()));
            }
            ViewBag.FactoryUnit = UnitItems;
        }

        private async Task GetLineInfoList()
        {
            var result = await _basApi.GetLineInfoes();

            var UnitItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                UnitItems.Add(new SelectListItem(result[i].LineDesc, result[i].LineID.ToString()));
            }
            ViewBag.LineInfo = UnitItems;
        }
        private async Task GetDeptList()
        {
            var result = await _sysApi.GetDeptInfoes();

            var DeptItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                DeptItems.Add(new SelectListItem(result[i].DeptNo + "-" + result[i].DeptName, result[i].DeptID.ToString()));
            }
            ViewBag.DeptList = DeptItems;
        }
        private async Task GetStationTypeList()
        {
            var result = await _basApi.GetStationTypes();

            var StationTypeItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                StationTypeItems.Add(new SelectListItem(result[i].TypeNo +"-" + result[i].TypeDesc, result[i].TypeNo.ToString()));
            }
            ViewBag.StationTypeList = StationTypeItems;
        }
        private async Task GetMailGroupList()
        {
            var result = await _basApi.GetMailGroups();

            var MailGroupItems = new List<SelectListItem>();
            //MailGroupItems.Add(new SelectListItem("全部", "0"));

            for (int i = 0; i < result.Count; i++)
            {
                MailGroupItems.Add(new SelectListItem( result[i].GroupDesc, result[i].GroupID.ToString()));
            }
            ViewBag.MailGroupList = MailGroupItems;
        }
        private async Task GetUserList()
        {
            var result = await _sysApi.GetUserInfoes();

            var UserItems = new List<SelectListItem>();
            foreach (var item in result.Data)
            {
                UserItems.Add(new SelectListItem("[" + item.UserNo + "]" + item.UserName, item.UserID.ToString()));
            }
            ViewBag.UserList = UserItems;
        }
        private async Task GetTestTypeList()
        {
            var result = await _basApi.GetTestTypes();

            var TestTypeItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                TestTypeItems.Add(new SelectListItem(result[i].TypeNo + "-" + result[i].TypeName, result[i].TypeNo.ToString()));
            }
            ViewBag.TestTypeList = TestTypeItems;
        }

        private async Task GetUnitList()
        {
            var result = await _basApi.GetFactoryUnits();

            var UnitItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                UnitItems.Add(new SelectListItem(result[i].UnitName, result[i].UnitNo.ToString()));
            }
            ViewBag.UnitList = UnitItems;
        }

        private async Task GetFlowRuleList()
        {
            var result = await _basApi.GetFlowRules();

            var FlowRuleItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                FlowRuleItems.Add(new SelectListItem(result[i].UnitNo + result[i].FlowRuleName, result[i].FlowRuleID.ToString()));
            }
            ViewBag.FlowRuleList = FlowRuleItems;
        }

        private async Task GetFlowRuleListByUnit(string unit_no)
        {
            var result = await _basApi.GetFlowRulesByUnit(unit_no);

            var FlowRuleItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                FlowRuleItems.Add(new SelectListItem(result[i].UnitNo + result[i].FlowRuleName, result[i].FlowRuleID.ToString()));
            }
            ViewBag.FlowRuleList = FlowRuleItems;
        }

        private async Task GetStationList()
        {
            var result = await _basApi.GetStationses();
            // 排除鎖定站
            result = result.Where(w => w.StationID != 0).ToList();
            var StationItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                StationItems.Add(new SelectListItem(result[i].UnitNo + result[i].StationName, result[i].StationID.ToString()));
            }
            ViewBag.StationList = StationItems;
        }

        private async Task GetFlowStationList(int id)
        {
            var result = await _basApi.GetRuleStationsByFlow(id, 0, 10);

            var FlowStationItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                FlowStationItems.Add(new SelectListItem(result[i].Station.UnitNo + result[i].Station.StationName, result[i].StationID.ToString()));
            }
            ViewBag.FlowStationItems = FlowStationItems;
        }

        private async Task GetNextStationList(int id)
        {
            var result = await _basApi.GetRuleStationsByFlow(id, 0, 10);

            var NextStationItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                NextStationItems.Add(new SelectListItem(result[i].Station.UnitNo + result[i].Station.StationName, result[i].StationID.ToString()));
            }
            ViewBag.NextStationList = NextStationItems;
        }

        private async Task GetProcessTypeList()
        {
            var result = await _basApi.GetProcessType();

            var ProcessTypeItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                ProcessTypeItems.Add(new SelectListItem(result[i].ProcessTypeName, result[i].ProcessTypeNO.ToString()));
            }
            ViewBag.ProcessTypeList = ProcessTypeItems;
        }

        private async Task GetRuleStationsList()
        {
            var result = await _basApi.GetRuleStations();

            var RuleStationItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                RuleStationItems.Add(new SelectListItem(result[i].StationDesc, result[i].RuleStationID.ToString()));
            }
            ViewBag.RuleStationList = RuleStationItems;
        }

        private async Task GetOutfitCommodityList()
        {
            var result = await _jigApi.GetOutfitCommodityInfoes();

            var OutfitCommoditys = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                OutfitCommoditys.Add(new SelectListItem(result[i].CommodityName, result[i].CommodityNo));
            }
            ViewBag.CommodityList = OutfitCommoditys;
        }

        public void GetUserID()
        {
            var userID = "";
            HttpContext.Request.Cookies.TryGetValue("UserID", out userID);
            int user_id = 0;
            if (userID != null)
            {
                if (int.Parse(userID.ToString()) >= 0)
                {
                    user_id = int.Parse(userID.ToString());
                }
            }
            ViewBag.UserID = user_id;
        }

        [HttpPost]
        public async Task<JsonResult> GetFlowRuleJson(string unit_no)
        {
            var result = await _basApi.GetFlowRulesByUnit(unit_no);

            var item = new List<SelectListItem>();
            //item.Add(new SelectListItem("全部", "0"));
            for (int i = 0; i < result.Count; i++)
            {
                item.Add(new SelectListItem(result[i].FlowRuleName, result[i].FlowRuleID.ToString()));
            }
            //将数据Json化并传到前台视图
            return Json(new { data = item });
        }

        [HttpPost]
        public async Task<JsonResult> GetUnitLineJson(string unit_no)
        {
            var result = await _basApi.GetLineInfoByUnit(unit_no);
            result = result.Where(w => w.StatusNo == "A").OrderBy(o => o.LineID).ToList();
            var item = new List<SelectListItem>();

            for (int i = 0; i < result.Count; i++)
            {
                item.Add(new SelectListItem(result[i].LineDesc, result[i].LineID.ToString()));
            }

            if (item.Count == 0)
            {
                item.Add(new SelectListItem("N/A", ""));
            }

            //将数据Json化并传到前台视图
            return Json(new { data = item });
        }

        [HttpPost]
        public async Task<JsonResult> GetStationsJson(string unit_no)
        {
            var result = await _basApi.GetStationsByUnit(unit_no);

            var item = new List<SelectListItem>();

            for (int i = 0; i < result.Count; i++)
            {
                item.Add(new SelectListItem(result[i].StationName, result[i].StationID.ToString()));
            }

            if (item.Count == 0)
            {
                item.Add(new SelectListItem("N/A", ""));
            }

            //将数据Json化并传到前台视图
            return Json(new { data = item });
        }

        #endregion

        #region BAS001工廠资料维护相关

        public IActionResult BAS001()
        {
            return View();
        }

        //新增頁面
        public IActionResult BAS001C()
        {
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS001UAsync(int id)
        {
            var result = await _basApi.GetFactoryInfo(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS001DAsync(int id)
        {
            var result = await _basApi.DeleteFactoryInfo(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS001SaveAsync(FactoryInfo model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.FactoryID == 0)
                {
                    result = await _basApi.PostFactoryInfo(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutFactoryInfo(model.FactoryID, JsonConvert.SerializeObject(model));
                }

                if (result.Success)
                {
                    var _msg = model.FactoryID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.FactoryID == 0)
            {
                return View("BAS001C", model);
            }
            return View("BAS001U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetFactoryInfoesAsync()
        {
            var result = await _basApi.GetFactoryInfoes();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS002製程單位资料维护相关

        public IActionResult BAS002()
        {
            return View();
        }

        //新增頁面
        public IActionResult BAS002C()
        {           
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS002UAsync(string id)
        {

            var result = await _basApi.GetFactoryUnit(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS002DAsync(string id)
        {
            var result = await _basApi.DeleteFactoryUnit(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,SEQ=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS002SaveAsync(FactoryUnit model)
        {

                if (ModelState.IsValid)
                {
                IResultModel result;
                if (model.SEQ == 0)
                {
                    
                    result = await _basApi.PostFactoryUnit(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutFactoryUnit(model.UnitNo, JsonConvert.SerializeObject(model));
                }

                if (result.Success)
                {
                    var _msg = model.SEQ == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.SEQ == 0)
            {
                return View("BAS002C", model);
            }
            return View("BAS002U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetFactoryUnitsAsync()
        {
            var result = await _basApi.GetFactoryUnits();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS003線別资料维护相关

        public async Task<IActionResult> BAS003()
        {
            await GetFactoryUnitList();
            return View();
        }
        //新增頁面
        public async Task<IActionResult> BAS003C()
        {
            await GetDeptList();
            await GetFactoryUnitList2();
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS003UAsync(int id)
        {
            await GetDeptList();
            await GetFactoryUnitList();

            var result = await _basApi.GetLineInfo(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS003DAsync(int id)
        {
            var result = await _basApi.DeleteLineInfo(id);
            return Json(new Result() { success = true, msg = "" });
        }

        public async Task<IActionResult> BAS003U2Async(LineInfo model)
        {
            
            model.UpdateDate = System.DateTime.Now;
            if(model.StatusNo == "S")
                model.StatusNo = "A";
            else if (model.StatusNo == "A")
                model.StatusNo = "S";
            var result = await _basApi.PutLineInfo(model.LineID, JsonConvert.SerializeObject(model));
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS003SaveAsync(LineInfo model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.LineID == 0)
                {
                    result = await _basApi.PostLineInfo(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutLineInfo(model.LineID, JsonConvert.SerializeObject(model));
                }

                if (result.Success)
                {
                    var _msg = model.LineID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.LineID == 0)
            {
                return View("BAS003C", model);
            }
            return View("BAS003U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetLineInfoesAsync()
        {
            var result = await _basApi.GetLineInfoes();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetLineInfoByUnitAsync(string ID)
        {
            if (ID is null)
                ID = "0";

            var result = await _basApi.GetLineInfoByUnit(ID);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetLineInfoesListAsync()
        {
            var result = await _basApi.GetLineInfoList();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BA005班別维护相关

        public async Task<IActionResult> BAS005()
        {
            await GetFactoryUnitList();
            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS005C()
        {
            await GetFactoryUnitList();
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS005UAsync(int id)
        {

            await GetFactoryUnitList();
            var result = await _basApi.GetClassInfo(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS005DAsync(int id)
        {
            var result = await _basApi.DeleteClassInfo(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS005SaveAsync(ClassInfo model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.ClassID == 0)
                {
                    result = await _basApi.PostClassInfo(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutClassInfo(model.ClassID, JsonConvert.SerializeObject(model));
                }

                if (result.Success)
                {
                    var _msg = model.ClassID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.ClassID == 0)
            {
                return View("BAS005C", model);
            }
            return View("BAS005U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetClassInfoesAsync()
        {
            var result = await _basApi.GetClassInfoes();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }



        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetClassInfoByUnitAsync(string ID)
        {
            if (ID is null)
                ID = "0";
  
            var result = await _basApi.GetClassInfoByUnit(ID);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BA006時段資料檔维护相关

        public IActionResult BAS006()
        {
            return View();
        }

        //新增頁面
        public IActionResult BAS006C()
        {
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS006UAsync(int id)
        {

            var result = await _basApi.GetTimeSegment(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS006DAsync(int id)
        {
            var result = await _basApi.DeleteTimeSegment(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS006SaveAsync(TimeSegment model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.SegmentID == 0)
                {
                    result = await _basApi.PostTimeSegment(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutTimeSegment(model.SegmentID, JsonConvert.SerializeObject(model));
                }

                if (result.Success)
                {
                    var _msg = model.SegmentID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.SegmentID == 0)
            {
                return View("BAS006C", model);
            }
            return View("BAS006U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetTimeSegmentsAsync()
        {
            var result = await _basApi.GetTimeSegments();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS007站別類別维护相关

        public IActionResult BAS007()
        {
            return View();
        }

        //新增頁面
        public IActionResult BAS007C()
        {
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS007UAsync(string id)
        {

            var result = await _basApi.GetStationType(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS007DAsync(string id)
        {
            var result = await _basApi.DeleteStationType(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS007SaveAsync(StationType model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.SysType is null)
                {
                    result = await _basApi.PostStationType(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutStationType(model.TypeNo, JsonConvert.SerializeObject(model));
                }

                if (result.Success)
                {
                    var _msg = model.SysType is null ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.SysType is null)
            {
                return View("BAS007C", model);
            }
            return View("BAS007U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetStationTypesAsync(int page = 0, int limit = 10)
        {
            var result_total = await _basApi.GetStationTypes(0, limit);
            var result = await _basApi.GetStationTypes(page,limit);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result_total.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS008站別资料维护相关

        public async Task<IActionResult> BAS008()
        {
            await GetFactoryUnitList();
            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS008C()
        {
            await GetStationTypeList();
            await GetFactoryUnitList();
            await GetTestTypeList();

            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS008UAsync(int id)
        {

            await GetStationTypeList();
            await GetFactoryUnitList();
            await GetTestTypeList();

            var result = await _basApi.GetStations(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS008DAsync(int id)
        {
            var result = await _basApi.DeleteStations(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS008SaveAsync(Stations model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.StationID==0)
                {
                    result = await _basApi.PostStations(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutStations(model.StationID, JsonConvert.SerializeObject(model));
                }

                if (result.Success)
                {
                    var _msg = model.StationID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.StationID == 0)
            {
                return View("BAS008C", model);
            }
            return View("BAS008U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetStationsesAsync()
        {
            var result = await _basApi.GetStationses();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetStationsByUnitAsync(string ID)
        {
            if (ID is null)
                ID = "0";

            var result = await _basApi.GetStationsByUnit(ID);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS009流程資料維護相關

        public async Task<IActionResult> BAS009()
        {
            await GetUnitList();

            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS009C(string id)
        {
            await GetUnitList();
            await GetProcessTypeList();

            var model = new FlowRule();
            if (id != null)
            {
                if (id != "")
                {
                    model.UnitNo = id;
                }
            }

            return View(model);
        }

        public async Task<IActionResult> BAS009Copy(string id)
        {
            await GetUnitList();
            await GetFlowRuleListByUnit(id);

            var model = new FlowRule();
            if (id != null)
            {
                if (id != "")
                {
                    model.UnitNo = id;
                }
            }

            return View(model);
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS009UAsync(int id)
        {
            await GetUnitList();
            await GetProcessTypeList();

            var result = await _basApi.GetFlowRule(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS009DAsync(int id)
        {
            var result = await _basApi.DeleteFlowRule(id);
            if (result.Success)
            {
                return Json(new Result() { success = true, msg = "" });
            }
            else
            {
                return Json(new Result() { success = false, msg = result.Msg });
            }
        }

        public async Task<IActionResult> BAS009DAllAsync(int[] ids)
        {
            if (ids.Length > 0)
            {
                var result = await _basApi.DeleteFlowRule(ids[0]);
                for (int i = 1; i < ids.Length; i++)
                {
                    result = await _basApi.DeleteFlowRule(ids[i]);
                }

                return Json(new Result() { success = true, msg = "" });
            }
            else
            {
                return Json(new Result() { success = false, msg = "" });
            }

        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS009SaveAsync(FlowRule model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.FlowRuleID == 0)
                {
                    result = await _basApi.PostFlowRule(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutFlowRule(model.FlowRuleID, JsonConvert.SerializeObject(model));
                }

                if (result.Success)
                {
                    var _msg = model.FlowRuleID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors != null)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                        return RedirectToAction("Refresh", "Home", new { msg = result.Msg });
                    }
                }
            }
            if (model.FlowRuleID == 0)
            {
                return View("BAS009C", model);
            }
            return View("BAS009U", model);
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS009CopySaveAsync(FlowRule model)
        {
            IResultModel result;

            var userID = "";
            HttpContext.Request.Cookies.TryGetValue("UserID", out userID);
            int user_id = 0;
            if (userID != null)
            {
                if (int.Parse(userID.ToString()) >= 0)
                {
                    user_id = int.Parse(userID.ToString());
                }
            }
            model.CreateUserId = user_id;

            result = await _basApi.PostFlowRuleCopy(model.FlowRuleID, JsonConvert.SerializeObject(model));


            if (result.Success)
            {
                var _msg = "複製成功!";
                return RedirectToAction("Refresh", "Home", new { msg = _msg });
            }
            else
            {
                if (result.Errors!=null)
                {
                    ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                }
                else
                {
                    ModelState.AddModelError("error", result.Msg);
                }
            }

            return View("BAS009Copy", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetFlowRulesAsync()
        {
            var result = await _basApi.GetFlowRules();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetFlowRulesByUnitAsync(string unitNo, int page = 0, int limit = 10)
        {
            if (unitNo == null)
            {
                unitNo = "*";
            }
            var result = await _basApi.GetFlowRulesByUnit(unitNo, page, limit);

            var result_total = await _basApi.GetFlowRulesByUnit(unitNo, 0, limit);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result_total.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS010流程站別維護相關

        public async Task<IActionResult> BAS010()
        {
            await GetUnitList();
            await GetFlowRuleList();

            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS010C(int id)
        {
            await GetFlowRuleList();
            await GetStationList();

            ViewBag.FlowRuleID = id;

            var model = new RuleStation();
            if (id > 0)
            {
                model.FlowRuleID = id;
            }

            return View(model);
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS010UAsync(int id)
        {
            await GetFlowRuleList();
            await GetStationList();

            var result = await _basApi.GetRuleStation(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS010DAsync(int id)
        {
            var result = await _basApi.DeleteRuleStation(id);
            
            if (result.Success)
            {
                return Json(new Result() { success = true, msg = "" });
            }
            else
            {
                return Json(new Result() { success = false, msg = result.Msg });
            }
        }

        public async Task<IActionResult> BAS010DAllAsync(int[] ids)
        {
            if (ids.Length > 0)
            {
                var result = await _basApi.DeleteRuleStation(ids[0]);
                for (int i = 1; i < ids.Length; i++)
                {
                    result = await _basApi.DeleteRuleStation(ids[i]);
                }

                return Json(new Result() { success = true, msg = "" });
            }
            else
            {
                return Json(new Result() { success = false, msg = "" });
            }

        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS010SaveAsync(RuleStation model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.RuleStationID == 0)
                {
                    result = await _basApi.PostRuleStation(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutRuleStation(model.RuleStationID, JsonConvert.SerializeObject(model));
                }

                if (result.Success)
                {
                    HttpContext.Response.Cookies.Append("FlowID4BAS010", model.FlowRuleID.ToString());

                    var _msg = model.RuleStationID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                    //return RedirectToAction("BAS010", "BAS", new { msg = _msg });
                }
                else
                {
                    HttpContext.Response.Cookies.Append("FlowID4BAS010", model.FlowRuleID.ToString());

                    if (result.Errors != null)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                        return RedirectToAction("Refresh", "Home", new { msg = result.Msg });
                    }
                }
            }
            if (model.RuleStationID == 0)
            {
                return View("BAS010C", model);
            }
            return View("BAS010U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetRuleStationsAsync()
        {
            var result = await _basApi.GetRuleStations();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetRuleStationsByFlowAsync(string unitNo,int flowId, int page = 0, int limit = 10)
        {
            var flow_id = "";
            HttpContext.Request.Cookies.TryGetValue("FlowID4BAS010", out flow_id);
            if (flow_id != null)
            {
                flowId = int.Parse(flow_id.ToString());
            }

            /*
            var flow_id = "";
            HttpContext.Request.Cookies.TryGetValue("FlowID4BAS010", out flow_id);
            if (flow_id != null)
            {
                if (flowId == 0)
                {
                    flowId = int.Parse(flow_id.ToString());
                }
                else
                {
                    HttpContext.Response.Cookies.Append("FlowID4BAS010", flowId.ToString());
                }
            }
            else
            {
                if (flowId > 0)
                {
                    HttpContext.Response.Cookies.Append("FlowID4BAS010", flowId.ToString());
                }
            }
            */

            HttpContext.Response.Cookies.Delete("FlowID4BAS010");

            //var result_total = await _basApi.GetRuleStationsByFlow(flowId, 0, limit);

            //var result = await _basApi.GetRuleStationsByFlow(flowId, page, limit);

            var result_total = await _basApi.GetRuleStationsByFlow2(unitNo + "_" + flowId.ToString(), 0, limit);

            var result = await _basApi.GetRuleStationsByFlow2(unitNo + "_" + flowId.ToString(), page, limit);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result_total.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetRuleStationByUnitAsync(string ID)
        {
            if (ID is null)
                ID = "0";

            var result = await _basApi.GetRuleStationByUnit(ID);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS011流程站別規則維護相關

        public async Task<IActionResult> BAS011()
        {
            await GetFlowRuleList();

            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS011C(int id)
        {
            await GetFlowRuleList();
            await GetFlowStationList(id);
            await GetNextStationList(id);

            var model = new Rules();
            if (id > 0)
            {
                model.FlowRuleID = id;
            }

            return View(model);
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS011UAsync(string id)
        {
            int ruleID = int.Parse(id);
            var result = await _basApi.GetRules(ruleID);

            await GetFlowRuleList();

            //var result1 = await _basApi.GetRules(result[0].RuleStationID, result[0].RuleStatus, result[0].NextStationID);

            //var result2 = await _basApi.GetRuleStation(result[0].StationID);
            int flowId = result[0].FlowRuleID;
            await GetFlowStationList(flowId);
            await GetNextStationList(flowId);

            if (result.Count == 0)
            {
                return View();
            }

            return View(result[0]);
        }

        public async Task<IActionResult> BAS011DAsync(int id)
        {
            var result = await _basApi.DeleteRules(id);
            //return Json(new Result() { success = true, msg = "" });
            if (result.Success)
            {
                return Json(new Result() { success = true, msg = "" });
            }
            else
            {
                return Json(new Result() { success = false, msg = result.Msg });
            }
        }

        public async Task<IActionResult> BAS011DAllAsync(string[] ids)
        {
            if (ids.Length > 0)
            {
                int id = int.Parse(ids[0]);

                var result = await _basApi.DeleteRules(id);
                for (int i = 1; i < ids.Length; i++)
                {
                    result = await _basApi.DeleteRules(int.Parse(ids[i]));
                }

                return Json(new Result() { success = true, msg = "" });
            }
            else
            {
                return Json(new Result() { success = false, msg = "" });
            }

        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS011SaveAsync(Rules model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.CreateDate == System.DateTime.MinValue)
                {
                    result = await _basApi.PostRules(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutRules(model.RuleID, JsonConvert.SerializeObject(model));
                }

                if (result.Success)
                {
                    HttpContext.Response.Cookies.Append("FlowID4BAS011", model.FlowRuleID.ToString());
                    var _msg="";
                    if (result.Msg != "")
                    {
                        _msg = result.Msg;
                    }
                    else
                    {
                        _msg = model.CreateDate == System.DateTime.MinValue ? "添加成功!" + result.Msg : "修改成功!";
                    }
                    
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });                    
                }
                else
                {
                    HttpContext.Response.Cookies.Append("FlowID4BAS011", model.FlowRuleID.ToString());

                    if (result.Errors != null)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                        return RedirectToAction("Refresh", "Home", new { msg = result.Msg });
                    }
                }
            }
            if (model.CreateDate == System.DateTime.MinValue)
            {
                return View("BAS011C", model);
            }
            return View("BAS011U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetRulesesAsync()
        {
            var result = await _basApi.GetRuleses();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetRulesesByFlowAsync(int flowId, int page = 0, int limit = 10)
        {
            var flow_id = "";
            HttpContext.Request.Cookies.TryGetValue("FlowID4BAS011", out flow_id);
            if (flow_id != null)
            {
                flowId = int.Parse(flow_id.ToString());
            }

            /*
            var flow_id = "";
            HttpContext.Request.Cookies.TryGetValue("FlowID4BAS011", out flow_id);
            if (flow_id != null)
            {
                if (flowId == 0)
                {
                    flowId = int.Parse(flow_id.ToString());
                }
                else
                {
                    HttpContext.Response.Cookies.Append("FlowID4BAS011", flowId.ToString());
                }
            }
            else
            {
                if (flowId > 0)
                {
                    HttpContext.Response.Cookies.Append("FlowID4BAS011", flowId.ToString());
                }
            }
            */

            HttpContext.Response.Cookies.Delete("FlowID4BAS011");

            var result_total = await _basApi.GetRulesesByFlow(flowId, 0, limit);
            var result = await _basApi.GetRulesesByFlow(flowId, page, limit);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result_total.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS014責任單位资料维护相关

        public IActionResult BAS014()
        {
            return View();
        }

        //新增頁面
        public IActionResult BAS014C()
        {
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS014UAsync(int id)
        {

            var result = await _basApi.GetRepairResponsibleUnits(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS014DAsync(int id)
        {
            var result = await _basApi.DeleteRepairResponsibleUnits(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS014SaveAsync(RepairResponsibleUnits model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.RRID == 0)
                {
                    result = await _basApi.PostRepairResponsibleUnits(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutRepairResponsibleUnits(model.RRID, JsonConvert.SerializeObject(model));
                }

                if (result.Success)
                {
                    var _msg = model.RRID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.RRID == 0)
            {
                return View("BAS014C", model);
            }
            return View("BAS014U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetRepairResponsibleUnitsesAsync()
        {
            var result = await _basApi.GetRepairResponsibleUnitses();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS015Mail群組類別维护相关

        public IActionResult BAS015()
        {
            return View();
        }

        //新增頁面
        public IActionResult BAS015C()
        {
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS015UAsync(int id)
        {

            var result = await _basApi.GetMailGroup(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS015DAsync(int id)
        {
            var result = await _basApi.DeleteMailGroup(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS015SaveAsync(MailGroup model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.GroupID == 0)
                {
                    result = await _basApi.PostMailGroup(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutMailGroup(model.GroupID, JsonConvert.SerializeObject(model));
                }

                if (result.Success)
                {
                    var _msg = model.GroupID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.GroupID == 0)
            {
                return View("BAS015C", model);
            }
            return View("BAS015U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetMailGroupsAsync()
        {
            var result = await _basApi.GetMailGroups();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS016Mail群組资料维护相关

        public async Task<IActionResult> BAS016()
        {
            await GetMailGroupList();
            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS016C()
        {
            await GetMailGroupList();
            await GetUserList();
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS016UAsync(int id)
        {
            await GetMailGroupList();
            await GetUserList();

            var result = await _basApi.GetMailGroupDetail(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS016DAsync(int id)
        {
            var result = await _basApi.DeleteMailGroupDetail(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS016SaveAsync(MailGroupDetail model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.MailID == 0)
                {
                    result = await _basApi.PostMailGroupDetail(JsonConvert.SerializeObject(model));
                }
                else
                {
                    result = await _basApi.PutMailGroupDetail(model.MailID, JsonConvert.SerializeObject(model));
                }

                if (result.Success)
                {
                    var _msg = model.MailID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.MailID == 0)
            {
                return View("BAS016C", model);
            }
            return View("BAS016U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetMailGroupDetailsAsync()
        {
            var result = await _basApi.GetMailGroupDetails();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        //[ResponseCache(Duration = 0)]
        //[HttpGet]
        //public async Task<IActionResult> GetMailGroupDetailByGroupAsync(string groupID)
        //{
        //    if (groupID == null)
        //        groupID = "0";
        //    var aa = int.Parse(groupID);
        //    var result = await _basApi.GetMailGroupDetailByGroup(aa);

        //    if (result.Count > 0)
        //    {
        //        return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
        //    }

        //    return Json(new Table() { count = 0, data = null });
        //}


        //[ResponseCache(Duration = 0)]
        //[HttpGet]
        //public async Task<IActionResult> GetMailGroupByGIDAsync(string groupID)
        //{
        //    if (groupID == null)
        //        groupID = "0";
        //    var aa = int.Parse(groupID);
        //    var result = await _basApi.GetMailGroupDetailByGroup(aa);

        //    if (result.Count > 0)
        //    {
        //        return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
        //    }

        //    return Json(new Table() { count = 0, data = null });
        //}

        public async Task<IActionResult> GetMailDetailByGIdAsync(string ID)
        {
            if (ID is null)
                ID = "0";
            var IDD = int.Parse(ID);
            var result = await _basApi.GetMailGroupDetailByGroup(IDD);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }
        #endregion

        #region  BAS012料號流程資料料维护相关

        public async Task<IActionResult> BAS012()
        {
            await GetUnitList();
            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS012C()
        {
            await GetUnitList();
            await GetFlowRuleList();
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS012UAsync(string id)
        {
            await GetUnitList();
            await GetFlowRuleList();
            var aStr = id.Split("=");
            var iID= int.Parse(aStr[0]);
            ViewBag.item = aStr[1];

            var result = await _basApi.GetMaterialFlow(iID);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS012DAsync(int id)
        {
            var result = await _basApi.DeleteMaterialFlows(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS012SaveAsync(MaterialFlow model)
        {
            var userID = "";
            HttpContext.Request.Cookies.TryGetValue("UserID", out userID);
            int user_id = 0;
            if (userID != null)
            {
                if (int.Parse(userID.ToString()) >= 0)
                {
                    user_id = int.Parse(userID.ToString());
                }
            }

            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.MFID == 0)
                {
                    model.CreateUserID = user_id;
                    result = await _basApi.PostMaterialFlows(JsonConvert.SerializeObject(model));
                }
                else
                {
                    model.UpdateUserID = user_id;

                    result = await _basApi.PutMaterialFlows(model.MFID, JsonConvert.SerializeObject(model));
                }

                if (result.Success)
                {
                    var _msg = model.MFID == 0 ? "添加成功!" : "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            if (model.MFID == 0)
            {
                return View("BAS012C", model);
            }
            return View("BAS012U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetMaterialFlowsAsync()
        {
            var result = await _basApi.GetMaterialFlows();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }


        public async Task<IActionResult> GetMaterialFlowsByQueryAsync(string itemno, string unitNo, int page = 0, int limit = 10)
        {
            if(string.IsNullOrEmpty(itemno)  && string.IsNullOrEmpty(unitNo))
                return Json(new Table() { count = 0, data = null });
            if (string.IsNullOrEmpty(itemno))
                itemno = "*";
            if (string.IsNullOrEmpty(unitNo) )
                unitNo = "*";

            var result = await _basApi.GetMaterialFlowsByQuery(itemno, unitNo, page, limit);

            var result_total = await _basApi.GetMaterialFlowsByQuery(itemno, unitNo, 0, limit);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result_total.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        public async Task<IActionResult> GetMaterialFlowAsync(int id)
        {
            var result = await _basApi.GetMaterialFlow(id);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        public async Task<IActionResult> GetMaterialItemByItemNOAsync(string id)
        {
            var result = await _pcsApi.GetMaterialItemByItemNO(id);

            if (result != null)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = 1 });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS013料號燒机時間资料维护相关

        public IActionResult BAS013()
        {
            return View();
        }

        //新增頁面
        public IActionResult  BAS013C()
        {
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS013UAsync(int id)
        {
            var result = await _basApi.GetRuninTime(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS013DAsync(int id)
        {
            var result = await _basApi.DeleteRuninTimes(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS013CSaveAsync(RuninTime model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _basApi.PostRuninTimes(JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "添加成功!" ;
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {

                    ModelState.AddModelError("error", result.Msg);
                    return View("BAS013C", model);

                }
            }
            else
            {

                ModelState.AddModelError("error", "缺少必填資料");
                return View("BAS013C", model);

            }


        }

        [HttpPost]
        public async Task<IActionResult> BAS013USaveAsync(RuninTime model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _basApi.PutRuninTimes(model.RuninID, JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {

                        ModelState.AddModelError("error", result.Msg);
                    return View("BAS013U", model);

                }
            }
            else
            {

                ModelState.AddModelError("error", "缺少必填資料");
                return View("BAS013U", model);

            }
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetRuninTimesAsync()
        {
            var result = await _basApi.GetRuninTimes();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }


        public async Task<IActionResult> GetRuninTimeAsync(string ID)
        {
            var result = await _basApi.GetRuninTime(ID);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }
        #endregion

        #region BAS017料號工項资料维护相关

        public IActionResult BAS017()
        {
            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS017C()
        {
            GetUserID();
            await GetUnitList();
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS017UAsync(int id)
        {
            await GetUnitList(); 
            await GetStationList();
            GetUserID();
             var result = await _basApi.GetMaterialStationsItem(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS017DAsync(int id)
        {
            var result = await _basApi.DeleteMaterialStationsItem(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS017CSaveAsync(MaterialStationsItem model)
        {

            await GetUnitList();
            GetUserID();
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _basApi.PostMaterialStationsItem(JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "添加成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {

                    ModelState.AddModelError("error", result.Msg);
                    return View("BAS017C", model);

                }
            }
            else
            {

                ModelState.AddModelError("error", "缺少必填資料");
                return View("BAS017C", model);

            }

        }

        [HttpPost]
        public async Task<IActionResult> BAS017USaveAsync(MaterialStationsItem model)
        {

            await GetUnitList();
            await GetStationList();
            GetUserID();
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _basApi.PutMaterialStationsItem(model.MsiID, JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {

                    ModelState.AddModelError("error", result.Msg);
                    return View("BAS017U", model);

                }
            }
            else
            {

                ModelState.AddModelError("error", "缺少必填資料");
                return View("BAS017U", model);

            }
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetMaterialStationsItemsAsync()
        {
            var result = await _basApi.GetMaterialStationsItems();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }


        public async Task<IActionResult> GetMaterialStationsItemAsync(int ID)
        {
            var result = await _basApi.GetMaterialStationsItem(ID);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }


        public async Task<IActionResult> GetMaterialStationsItemByItemIDAsync(int ID)
        {
            var result = await _basApi.GetMaterialStationsItemByItemID(ID);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        public async Task<IActionResult> GetMaterialItemByNoAsync(string id)
        {
            var result = await _pcsApi.GetMaterialItemByItemNO(id);


            if (result != null)
            {
                return Json(new Result() { success = true, data = result });
            }

            return Json(new Result() { success = false, data = null });
        }
        public async Task<IActionResult> GetRuleStationAsync()
        {

            var result = await _basApi.GetRuleStations();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }
        #endregion

        #region BAS018料號治具资料维护相关

        public IActionResult BAS018()
        {
            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS018C()
        {
            await GetUnitList();
            GetUserID();
            await GetOutfitCommodityList();
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS018UAsync(int id)
        {
            await GetUnitList();
            await GetStationList();
            await GetOutfitCommodityList();
            GetUserID();
            var result = await _basApi.GetMaterialOutfit(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS018DAsync(int id)
        {
            var result = await _basApi.DeleteMaterialOutfit(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS018CSaveAsync(MaterialOutfit model)
        {

            await GetUnitList();
            GetUserID();
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _basApi.PostMaterialOutfit(JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "添加成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    await GetOutfitCommodityList();
                    ModelState.AddModelError("error", result.Msg);
                    return View("BAS018C", model);
                }
            }
            else
            {
                ModelState.AddModelError("error", "缺少必填資料");
                return View("BAS018C", model);
            }

        }

        [HttpPost]
        public async Task<IActionResult> BAS018USaveAsync(MaterialOutfit model)
        {
            await GetUnitList();
            await GetStationList();
            GetUserID();

            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _basApi.PutMaterialOutfit(model.MaterialOutfitID, JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    await GetOutfitCommodityList();
                    ModelState.AddModelError("error", result.Msg);
                    return View("BAS018U", model);

                }
            }
            else
            {
                ModelState.AddModelError("error", "缺少必填資料");
                return View("BAS018U", model);
            }
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetMaterialOutfitsAsync()
        {
            var result = await _basApi.GetMaterialOutfits();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }


        public async Task<IActionResult> GetMaterialOutfitAsync(int ID)
        {
            var result = await _basApi.GetMaterialOutfit(ID);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }


        public async Task<IActionResult> GetMaterialOutfitByItemIDAsync(int ID)
        {
            var result = await _basApi.GetMaterialOutfitByItemID(ID);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region BAS019料號治具资料维护相关

        public IActionResult BAS019()
        {
            return View();
        }

        //新增頁面
        public async Task<IActionResult> BAS019C()
        {
            GetUserID();
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> BAS019UAsync(int id)
        {
            GetUserID();
            var result = await _basApi.GetSerialRule(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> BAS019DAsync(int id)
        {
            var result = await _basApi.DeleteSerialRule(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> BAS019CSaveAsync(SerialRule model)
        {

            GetUserID();
            if (ModelState.IsValid)
            {
                IResultModel result;

                if (model.Rule.Contains("[YYYY]")) //年份
                {
                    model.YLen = 4;
                }
                if (model.Rule.Contains("[YY]"))//年份後兩碼
                {
                    model.YLen = 2;
                }
                if (model.Rule.Contains("[MM]"))//月份
                {
                    model.MLen = 2;
                }
                if (model.Rule.Contains("[WW]"))
                {
                    model.WLen = 2;

                }
                if (model.Rule.Contains("[LOT3]"))
                {
                    model.LotLen=3;
                }
                if (model.Rule.Contains("[LOT4]"))
                {
                    model.LotLen = 4;
                }
                if (model.Rule.Contains("[SN3]"))
                {
                    model.SnLen = 3;

                }
                if (model.Rule.Contains("[SN4]"))
                {
                    model.SnLen = 4;
                }


                result = await _basApi.PostSerialRule(JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "添加成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    await GetOutfitCommodityList();
                    ModelState.AddModelError("error", result.Msg);
                    return View("BAS019C", model);
                }
            }
            else
            {
                ModelState.AddModelError("error", "缺少必填資料");
                return View("BAS019C", model);
            }

        }

        [HttpPost]
        public async Task<IActionResult> BAS019USaveAsync(SerialRule model)
        {
            GetUserID();

            if (ModelState.IsValid)
            {
                IResultModel result;

                if (model.Rule.Contains("[YYYY]")) //年份
                {
                    model.YLen = 4;
                }
                if (model.Rule.Contains("[YY]"))//年份後兩碼
                {
                    model.YLen = 2;
                }
                if (model.Rule.Contains("[MM]"))//月份
                {
                    model.MLen = 2;
                }
                if (model.Rule.Contains("[WW]"))
                {
                    model.WLen = 2;

                }
                if (model.Rule.Contains("[LOT3]"))
                {
                    model.LotLen = 3;
                }
                if (model.Rule.Contains("[LOT4]"))
                {
                    model.LotLen = 4;
                }
                if (model.Rule.Contains("[SN3]"))
                {
                    model.SnLen = 3;

                }
                if (model.Rule.Contains("[SN4]"))
                {
                    model.SnLen = 4;
                }

                result = await _basApi.PutSerialRule(model.SerialRuleID, JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    ModelState.AddModelError("error", result.Msg);
                    return View("BAS019U", model);

                }
            }
            else
            {
                ModelState.AddModelError("error", "缺少必填資料");
                return View("BAS019U", model);
            }
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetSerialRulesAsync(int page = 0, int limit = 10)
        {
            var result = await _basApi.GetSerialRules(page,limit);

            var result_total = await _basApi.GetSerialRules(0, limit);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result_total.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }


        public async Task<IActionResult> GetSerialRuleAsync(int ID)
        {
            var result = await _basApi.GetSerialRule(ID);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }


        public async Task<IActionResult> GetSerialRuleByItemNoAsync(string ID, int page = 0, int limit = 10)
        {
            var result = await _basApi.GetSerialRuleByItemNo(ID, page, limit);

            var result_total = await _basApi.GetSerialRuleByItemNo(ID, 0, limit);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result_total.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

    }
}