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.AMES;
using AMESCoreStudio.WebApi.Models.BAS;
using AMESCoreStudio.CommonTools.Result;
using System.IO;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Hosting;
using AMESCoreStudio.WebApi.DTO.AMES;
using System.Linq;
using AspNetCore.Reporting;
using System;

namespace AMESCoreStudio.Web.Controllers
{
    public class SPCController : Controller
    {
        private readonly ILogger<SPCController> _logger;
        public readonly ISPC _spcApi;
        public readonly IWHS _whsApi;
        public readonly IBAS _basApi;
        public readonly IPCS _pcsApi;
        public readonly ISYS _sysApi;
        public readonly IPPS _ppsApi;
        public readonly IBLL _bllApi;
        private readonly IWebHostEnvironment _env;

        public SPCController(ILogger<SPCController> logger, ISPC spcApi, IWHS whsApi,IBAS basApi, IPCS pcsApi, ISYS sysApi, IPPS ppsApi, IWebHostEnvironment env, IBLL bllApi)
        {
            _logger = logger;
            _spcApi = spcApi;
            _whsApi = whsApi;
            _basApi = basApi;
            _pcsApi = pcsApi;
            _sysApi = sysApi;
            _ppsApi = ppsApi;
            _env = env;
            _bllApi = bllApi;
        }


        #region
        private void GetFlagList()
        {

            var FlagList = new List<SelectListItem>();


            FlagList.Add(new SelectListItem("Y", "Y"));
            FlagList.Add(new SelectListItem("N", "N"));

            ViewBag.FlagList = FlagList;
        }
        private async Task GetWorkGroupsList()
        {
            var result = await _whsApi.GetWorkGroups();

            var GroupList = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                GroupList.Add(new SelectListItem(result[i].GroupName, result[i].GroupID.ToString()));
            }
            ViewBag.GroupList = GroupList;
        }
        private async Task GetWorkClassList()
        {
            var result = await _whsApi.GetWorkClasses();

            var GroupList = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                GroupList.Add(new SelectListItem(result[i].ClassName, result[i].ClassID.ToString()));
            }
            ViewBag.WClassList = GroupList;
        }
        private async Task GetFactoryUnitsList2()
        {
            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()));
            }
            UnitItems.Add(new SelectListItem("其他", "0"));

            ViewBag.FactoryUnit = UnitItems;
        }
        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 GetLineList2()
        {
            var result = await _basApi.GetLineInfoes();

            var LineItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                LineItems.Add(new SelectListItem(result[i].LineDesc, result[i].LineID.ToString()));
            }
            ViewBag.LineList = LineItems;
        }
        private void GetSideList()
        {

            var SideItems = new List<SelectListItem>() ;
            SideItems.Add(new SelectListItem("N/A", "N/A"));
            SideItems.Add(new SelectListItem("正面", "正面"));
            SideItems.Add(new SelectListItem("背面", "背面"));

            ViewBag.SideList = SideItems;
        }
        private void GetClassList()
        {

            var ClassItems = new List<SelectListItem>();
            ClassItems.Add(new SelectListItem("白班", "1"));
            ClassItems.Add(new SelectListItem("夜班", "2"));

            ViewBag.ClassList = ClassItems;
        }
        private async Task GetStationListByUnit(string unit)
        {
            var result = await _basApi.GetStationses();

            var StationItems = new List<SelectListItem>();
            StationItems.Add(new SelectListItem("N/A", "0"));
            for (int i = 0; i < result.Count; i++)
            {
                if(result[i].UnitNo==unit)
                    StationItems.Add(new SelectListItem(result[i].StationName, result[i].StationID.ToString()));
            }
            if(StationItems.Count==0)
                StationItems.Add(new SelectListItem("N/A", ""));

            ViewBag.StationList = StationItems;
        }


        #endregion
        #region
        private void GetTESTList()
        {

            var FlagList = new List<SelectListItem>();


            FlagList.Add(new SelectListItem("Y", "Y"));
            FlagList.Add(new SelectListItem("N", "N"));

            ViewBag.FlagList = FlagList;
        }
        private async Task GetInspectionTypesList()
        {
            var result = await _spcApi.GetInspectionTypes();

            var GroupList = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                GroupList.Add(new SelectListItem(result[i].InspectionNo, result[i].InspectionTypeID.ToString()));
            }
            ViewBag.TypesList = GroupList;
        }
        private async Task GetInspectionFormsList() //yiru modify 2022-09-30
        {
            var result = await _spcApi.GetInspectionForms();
            
            var GroupList = new List<SelectListItem>();
            for (int i = 0; i < result.Where(w => w.StatusNo =="Y").ToList().Count; i++)
            {
                    GroupList.Add(new SelectListItem(result[i].InspectionName, result[i].InspectionFormID.ToString()));
            }
            ViewBag.FromsList = GroupList;
        }
        private async Task GetFactoryUnitsList3()
        {
            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.FactoryUnit = UnitItems;
        }
        private async Task GetStationList()
        {
            var result = await _basApi.GetStationses();

            var StationItems = new List<SelectListItem>();
            StationItems.Add(new SelectListItem("N/A", "0"));
            for (int i = 0; i < result.Count; i++)
            {
                StationItems.Add(new SelectListItem(result[i].StationName, result[i].StationID.ToString()));
            }
            ViewBag.StationList = StationItems;
        }
        private async Task GetLineList()
        {
            var result = await _basApi.GetLineInfoes();

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

            var DeptItems = new List<SelectListItem>();
            DeptItems.Add(new SelectListItem("N/A", "0"));
            for (int i = 0; i < result.Count; i++)
            {
                DeptItems.Add(new SelectListItem(result[i].DeptName, result[i].DeptID.ToString()));
            }
            ViewBag.DeptList = DeptItems;
        }
        private async Task GetUserInfo()
        {
            var result = await _sysApi.GetUserInfoes();

            var UserItems = new List<SelectListItem>();
            UserItems.Add(new SelectListItem("N/A", "-1"));
            foreach (var item in result.Data)
            {
                UserItems.Add(new SelectListItem(item.LoginNo +"_" +item.UserName, item.UserID.ToString()));
            }
            ViewBag.UserList = UserItems;
        }
        private async Task GetFactoryUnitsList()
        {
            var result = await _basApi.GetFactoryUnits();

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

        public async Task 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());
                }
            }
            var result = await _sysApi.GetUserInfo(user_id);
            var user = result[0].UserName;
            ViewBag.UserID = user_id;
            ViewBag.UserName = user;
        }

        private async Task GetStationList1()
        {
            var result = await _basApi.GetStationses();

            var StationItems = new List<SelectListItem>();
            StationItems.Add(new SelectListItem("N/A", "0"));
            for (int i = 0; i < result.Count; i++)
            {
                StationItems.Add(new SelectListItem(result[i].StationName, result[i].StationName));
            }
            ViewBag.StationList = StationItems;
        }
        private async Task GetLineList1()
        {
            var result = await _basApi.GetLineInfoes();

            var LineItems = new List<SelectListItem>();
            LineItems.Add(new SelectListItem("N/A", "0"));
            for (int i = 0; i < result.Count; i++)
            {
                LineItems.Add(new SelectListItem(result[i].LineDesc, result[i].LineDesc));
            }
            ViewBag.LineList = LineItems;
        }
        #endregion

        #region SPC001 巡檢類別維護相關

        public async Task<IActionResult> SPC001()
        {
            await GetUserID();
            return View();
        }

        //新增頁面
        public IActionResult SPC001C()
        {
            var tt = Request.Cookies["UserID"];
            ViewBag.UserID = tt;

            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> SPC001UAsync(int id)
        {
            var tt = Request.Cookies["UserID"];
            ViewBag.UserID = tt;

            var result = await _spcApi.GetInspectionType(id);

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

        public async Task<IActionResult> SPC001DAsync(int id)
        {

            var result = await _spcApi.DeleteInspectionType(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> SPC001CSaveAsync(InspectionType model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _spcApi.PostInspectionType(JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "添加成功!";
                    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);
                    }
                }
            }
            return View("SPC001C", model);
        }

        public async Task<IActionResult> SPC001USaveAsync(InspectionType model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _spcApi.PutInspectionType(model.InspectionTypeID, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    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);
                    }
                }
            }
            return View("SPC001U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetInspectionTypesAsync()
        {
            var result = await _spcApi.GetInspectionTypes();

            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 SPC002巡檢表單維護相關

        public async Task<IActionResult> SPC002()
        {
            await GetInspectionTypesList();
            await GetUserID();
            return View();
        }

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

        //修改页面
        [HttpGet]
        public async Task<IActionResult> SPC002UAsync(int id)
        {
            await GetInspectionTypesList();
            await GetFactoryUnitsList3();
            await GetUserID();
            var result = await _spcApi.GetInspectionForm(id);

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

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

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> SPC002CSaveAsync(InspectionForm model)
        {
            await GetInspectionTypesList();
            await GetFactoryUnitsList3();

            if (ModelState.IsValid)
            {
                IResultModel result;
                   var GetResult = await _spcApi.GetInspectionForms();  //yiru add 22-10-11
                if (GetResult.Where(w => w.InspectionName == model.InspectionName && w.InspectionTypeID  == model.InspectionTypeID).ToList().Count > 0)
                {
                    ModelState.AddModelError("error", "巡檢表單名稱重覆");
                }
                else
                { 
                    result = await _spcApi.PostInspectionForm(JsonConvert.SerializeObject(model));


                    if (result.Success)
                    {
                        var _msg = "添加成功!";
                        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);
                        }
                    }   }
            }
            return View("SPC002C", model);
        }

        public async Task<IActionResult> SPC002USaveAsync(InspectionForm model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _spcApi.PutInspectionForm(model.InspectionFormID, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    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);
                    }
                }
            }
            return View("SPC002U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetInspectionFormsAsync()
        {
            var result = await _spcApi.GetInspectionForms();
            result = result.Where(w => w.StatusNo == "Y").ToList();  //yiru modify 2022-09-30

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

            return Json(new Table() { count = 0, data = null });
        }
        [HttpGet]
        public async Task<IActionResult> GetInspectionFormsByQueryAsync(int id,string status)
        {
            if(id == 0)
                return Json(new Table() { count = 0, data = null });

            var result = await _spcApi.GetInspectionFormsByQuery(id, status);

            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 SPC003巡檢細項維護相關
        public async Task<IActionResult> SPC003()
        {
            await GetInspectionTypesList();
            await GetInspectionFormsList();
            await GetUserID();
            return View();
        }
        //新增頁面
        public async Task<IActionResult> SPC003C(int id)
        {
            //await GetStationListByUnit(unit);
            var result = await _spcApi.GetInspectionForm(id);
            ViewBag.FormID = result[0].InspectionFormID;
            ViewBag.FormName = "正在新增["+result[0].InspectionName+"]細項";
            await GetUserID();
            return View();
        }
        //修改页面
        [HttpGet]
        public async Task<IActionResult> SPC003UAsync(int id)
        {
            var result = await _spcApi.GetInspectionItem(id);
           

            if (result.Count == 0)
            {
                return View();
            }
            await GetUserID();
            var resultForm = await _spcApi.GetInspectionForm(result[0].InspectionFormID);
            ViewBag.FormID = resultForm[0].InspectionFormID;
            ViewBag.FormName = "正在修改[" + resultForm[0].InspectionName + "]細項";
            return View(result[0]);
        }
        public async Task<IActionResult> SPC003DAsync(int id)
        {
            var result = await _spcApi.DeleteInspectionItem(id);
            return Json(new Result() { success = true, msg = "" });
        }
        [HttpPost]
        public async Task<IActionResult> SPC003CSaveAsync(InspectionItem model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _spcApi.PostInspectionItem(JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "添加成功!";
                    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);
                    }
                }
            }
            return View("SPC003C", model);
        }
        public async Task<IActionResult> SPC003USaveAsync(InspectionItem model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _spcApi.PutInspectionItem(model.InspectionItemID, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    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);
                    }
                }
            }
            return View("SPC003U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetInspectionItemsAsync()
        {
            var result = await _spcApi.GetInspectionItems();

            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> GetInspectionItemsByFormIDAsync(int id)
        {
            var result = await _spcApi.GetInspectionItemsByFormID(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 SPC004巡檢結果維護相關
        public async Task<IActionResult> SPC004()
        {

            await GetInspectionTypesList();
            await GetInspectionFormsList();

            return View();
        }

        public async Task<IActionResult> SPC004VAsync(int id)
        {
            //await GetStationList1();
            //await GetLineList1();
            //return View();
            await GetStationList();
            await GetLineList();
            await GetFactoryUnitsList();
            await GetUserInfo();
            var result = await _spcApi.GetInspectionResultMaster(id);
            if (result.Count == 0)
            {
                return View();
            }
            var  FormResult   = await _spcApi.GetInspectionForm(result.Select(s=>s.InspectionFormID).FirstOrDefault());

            ViewBag.FormType = FormResult.Select(s => s.InspectionTypeID).FirstOrDefault(); ;

            var user = await _sysApi.GetUserInfo(result[0].CreateUserID);
            var userName = user[0].UserName;
            ViewBag.UserName = userName;
            ViewBag.WipNo = result[0].WipNo;
            ViewBag.ItemNo = result[0].ItemNo;
            ViewBag.BarcodeNo = result[0].BarcodeNo;
            ViewBag.InspectionID = result[0].InspectionID;
            return View(result[0]);
        }
        //修改页面
        [HttpGet]
        public async Task<IActionResult> SPC004UAsync(int id, int Iid)
        {
            var result = await _spcApi.GetInspectionResultDetailByQuery(id,Iid);
            var userID = "";
            int user_id = 0;
            HttpContext.Request.Cookies.TryGetValue("UserID", out userID);
            if (userID != null)
            {
                if (int.Parse(userID.ToString()) >= 0)
                {
                    user_id = int.Parse(userID.ToString());
                }
            }
            var userName = await _sysApi.GetUserInfo(user_id);

            ViewBag.UuserID = user_id;
            ViewBag.UuserName = userName[0].UserName;

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }
        public async Task<IActionResult> SPC004USaveAsync(InspectionResultDetail model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _spcApi.PutInspectionResultDetail(model.InspectionID, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    var  result_Master = await _spcApi.GetInspectionResultMasters(model.InspectionID);

                   
                    if (result_Master.Count() > 0 )
                    {
                        model.ReplyReason = model.ReplyReason == null ? model.ReplyReason : model.ReplyReason.Replace("\r\n", "<br />");
                        model.ReplyMethod = model.ReplyMethod == null ? model.ReplyMethod : model.ReplyMethod.Replace("\r\n", "<br />");
                        #region 寄mail 給IPQC_REPLY
                        string MailGroup = "IPQC_REPLY";
                        string Subject = $"[AMES系統通知] ,IPQC巡檢異常回覆通知";
                        string Body = $@"檢驗單號: { result_Master.Select(s=>s.BarcodeNo).FirstOrDefault()} <br />
                                    工單號碼 : {result_Master.Select(s => s.WipNo).FirstOrDefault()} <br />
                                    料號 : {result_Master.Select(s => s.ItemNo).FirstOrDefault()} <br />
                                    回覆異常原因 : <br />
                                     {model.ReplyReason} <br /> 
                                    回覆異常對策 : <br /> 
                                     {model.ReplyMethod} <br />
                                    請QC人員至系統檢視資料";


                        await _bllApi.PostToMail(Subject, Body, MailGroup, "", false);
                    }
                    #endregion

                    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);
                    }
                }
            }
            return View("SPC004U", model);
        }

        public async Task<IActionResult> SPC004R(int id, int itemID)
        {
            ViewBag.ItemID = itemID;
            ViewBag.MasterID = id;
            await GetStationList();

            return View();
        }
        /// <summary>
        /// IPQC巡檢細項結案
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task<IActionResult> SPC004DAsync(int id, int iid)
        {
            await GetUserID();
            InspectionResultDetail data = new InspectionResultDetail();
            data.InspectionID = id;
            data.InspectionItemID = iid;
            data.UpdateDate = System.DateTime.Now;
            data.UpdateUserID = ViewBag.UserID;
            data.InspectionType = "Y";
            var result = await _spcApi.PutInspectionResultDetailForType(JsonConvert.SerializeObject(data));
            return Json(new Result() { success = result.Success, msg = result.Msg });
        }
        [HttpGet]
        public async Task<IActionResult> SPC004JAsync(int id, int Iid)
        {
            var result = await _spcApi.GetInspectionResultMaster(id);
            var userID = "";
            int user_id = 0;
            HttpContext.Request.Cookies.TryGetValue("UserID", out userID);
            if (userID != null)
            {
                if (int.Parse(userID.ToString()) >= 0)
                {
                    user_id = int.Parse(userID.ToString());
                }
            }
            var userName = await _sysApi.GetUserInfo(user_id);

            ViewBag.UserID = user_id;
            ViewBag.UserName = userName[0].UserName;
            ViewBag.InspectionID = id;
            ViewBag.InspectionItemID = Iid;
            ViewBag.BarcodeNo = result.Select(s => s.BarcodeNo).FirstOrDefault();
            ViewBag.WipNo = result.Select(s => s.WipNo).FirstOrDefault();
            ViewBag.ItemNo = result.Select(s => s.ItemNo).FirstOrDefault();

            return View();
        }
        public async Task<IActionResult> SPC004JSaveAsync(InspectionResultReject model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;
                var stringList = model.RejectAddress.Split(',');
                var EmailMsg = string.Empty;
                foreach (var item in stringList)
                {
                   if( !IsValidEmail(item))
                   {
                            EmailMsg += item +",";
                   }
                }
                if (!string.IsNullOrEmpty(EmailMsg))
                {
                    EmailMsg = "Email:" + EmailMsg + "格式錯誤";
                    ModelState.AddModelError("error", EmailMsg);

                }
                else
                {

                    model.RejectReason = model.RejectReason == null ?  model.RejectReason: model.RejectReason.Replace("\r\n", "<br />");
                    #region 寄mail 給IPQC_REPLY
                    string Subject = $"[AMES系統通知] ,IPQC巡檢異常回覆退回";
                    string Body = $@"檢驗單號: { model.BarcodeNo} <br />
                                    工單號碼 : {model.WipNo} <br />
                                    料號 : {model.ItemNo} <br />
                                    異常回覆退回原因為:  <br /> {model.RejectReason} <br /> 
                                    請人員重新修正異常回覆";


                    var resultMail = await _bllApi.PostToMail(Subject, Body, "", model.RejectAddress, false);

                    #endregion
                    if (resultMail.Success)
                    {
                        result = await _spcApi.PostInspectionResultReject(JsonConvert.SerializeObject(model));

                        if (result.Success)
                        {
                            var _msg = "退回成功!";
                            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);
                            }
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("error", resultMail.Msg);
                    }
                }

            }
            return View("SPC004J", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetInspectionResultMastersByQueryAsync(string WipNo, string ItemNo, string BarcodeNo,string Status_No)
        {


            if (string.IsNullOrWhiteSpace(WipNo))
                WipNo=" ";
            if (string.IsNullOrWhiteSpace(ItemNo))
                ItemNo = " ";
            if (string.IsNullOrWhiteSpace(BarcodeNo))
                BarcodeNo = " ";
          //  if (string.IsNullOrWhiteSpace(Status_No))
           //     Status_No = " ";


            var result = await _spcApi.GetInspectionResultMastersByQuery(WipNo, ItemNo, BarcodeNo, "C");

            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> GetInspectionResultDetailQueryAsync(int id ,string Line,string RuleStation,string InspectionResult)
        {

            var result = await _spcApi.GetInspectionResultDetailQuery(id);

            if (Line != "0")
                result = result.Where(w => w.Line == Line).ToList();
            if (RuleStation != "0")
                result = result.Where(w => w.RuleStation == RuleStation).ToList();
            if (InspectionResult != "0")
                result = result.Where(w => w.InspectionResult == InspectionResult).ToList();

            if (result.Count > 0)
            {
                foreach (var item in result)
                {
                    var Bolbresult = await _spcApi.GetInspectionResultBlobsByQuery(item.InspectionID, item.InspectionItemID);
                    item.BolbQty = Bolbresult.Count();
                }

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

            return Json(new Table() { count = 0, data = null });
        }
       
        /// <summary>
        /// 判斷eMail格式正確性
        /// </summary>
        /// <param name="email"></param>
        /// <returns></returns>
        public  bool IsValidEmail(string email)
        {
            // 定义一个电子邮件地址的正则表达式模式
            string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";

            // 使用正则表达式检查字符串是否匹配电子邮件地址模式
            return System.Text.RegularExpressions.Regex.IsMatch(email, pattern);
        }

        #endregion

        #region SPC005巡檢結果資料維護相關

        public async Task<IActionResult> SPC005()
        {

            await GetInspectionTypesList();
            await GetInspectionFormsList();

            return View();
        }

        //新增頁面
        public async Task<IActionResult> SPC005C(int id)
        {
            var result = await _spcApi.GetInspectionForm(id);
            var master = await _spcApi.GetInspectionResultMastersNewID();
            ViewBag.FormID = result[0].InspectionFormID;
            ViewBag.MasterID = master;
            await GetStationList();
            await GetLineList();
            await GetFactoryUnitsList();
            await GetUserInfo();
            await GetUserID();
            return View();
        }

        //新增頁面
        public async Task<IActionResult> SPC005R(int id,int itemID)
        {
            ViewBag.ItemID = itemID;
            ViewBag.MasterID = id;
            await GetStationList();

            return View();
        }
        public IActionResult SPC005VR(int id, int itemID)
        {
            ViewBag.ItemID = itemID;
            ViewBag.MasterID = id;

            return View();
        }
        //修改页面
        [HttpGet]
        public async Task<IActionResult> SPC005UAsync(int id)
        {
            await GetStationList();
            await GetLineList();
            await GetFactoryUnitsList();
            await GetUserInfo();
            await GetUserID();
            var result = await _spcApi.GetInspectionResultMaster(id);
            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }
        [HttpGet]
        public async Task<IActionResult> SPC005VAsync(int id)
        {
            await GetStationList();
            await GetLineList();
            await GetFactoryUnitsList();
            await GetUserInfo();
            var result = await _spcApi.GetInspectionResultMaster(id);
            if (result.Count == 0)
            {
                return View();
            }
            var user = await _sysApi.GetUserInfo(result[0].CreateUserID);
            var userName = user[0].UserName;
            ViewBag.UserName = userName;
            return View(result[0]);
        }

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

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> SPC005TSaveAsync(InspectionResultMaster model)
        {
            
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _spcApi.PostInspectionResultMaster(JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    //var _msg = "添加成功!";
                    return Json(new Result() { success = true, msg = result.Msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return Json(new Result() { success = false, msg = "資料有誤!!" });

        }

        public async Task<IActionResult> SPC005ListSaveAsync(InspectionResultDetail model)
        {

            IResultModel result;
            model.CreateDate = System.DateTime.Now;
            model.UpdateDate = System.DateTime.Now;
            //var tt = await _spcApi.GetInspectionForm(0);
            result = await _spcApi.PostInspectionResultDetail(JsonConvert.SerializeObject(model));
            if (result.Success)
            {
                //var _msg = "添加成功!";
                return Json(new Result() { success = true, msg = result.Msg });
            }
            else
            {
                return Json(new Result() { success = false, msg = "資料有誤!!" });
            }
            //return Json(new Result() { success = true, msg = "資料有誤!!" });
        }

        public async Task<IActionResult> SPC005RSaveAsync(InspectionResultBlob model, IFormFile formFile)
        {
            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;
            model.CreateDate = System.DateTime.Now;
            model.UpdateUserID = user_id;
            model.UpdateDate = System.DateTime.Now;
            string FileName = string.Empty;
            string NewName = string.Empty;
            string FilePath = string.Empty;


            if (formFile != null)
            {
                if (formFile.Length > 0)
                {
                    //取得使用者上傳檔案的原始檔名
                    FileName = Path.GetFileName(formFile.FileName);
                    //取原始檔名中的副檔名
                    var fileExt = Path.GetExtension(FileName);
                    //為避免使用者上傳的檔案名稱發生重複,重新給一個亂數名稱
                    NewName = Path.GetRandomFileName() + fileExt;
                    //指定要寫入的路徑、檔名和副檔名
                    FilePath = $"\\PCSFile\\";//本機目錄
                    using (var stream = new FileStream(_env.WebRootPath + FilePath + NewName, FileMode.Create))
                    {
                        await formFile.CopyToAsync(stream);
                    }

                    //var fileProvider = _fileServerProvider.GetProvider("/aa");
                    //var fileInfo = fileProvider.GetFileInfo(formFile.FileName);
                    //fileInfo = fileProvider.GetFileInfo(formFile.FileName);
                    ////遠端目錄
                    //using (var stream = new FileStream(fileInfo.PhysicalPath, FileMode.Create))
                    //{
                    //    await formFile.CopyToAsync(stream);
                  
                    model.ImageName = FileName;
                    model.NewName = NewName;
                    model.FilePath = FilePath;// fileInfo.PhysicalPath;

                    result = await _spcApi.PostInspectionResultBlob(JsonConvert.SerializeObject(model));
                    if (result.Success)
                    {
                        //var _msg = "上傳成功!";
                        ViewBag.ItemID = model.InspectionItemID;
                        ViewBag.MasterID = model.InspectionID;
                        return View("SPC005R");
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            else
            {
                ModelState.AddModelError("error", "請選擇要上傳檔案");
            }


            ViewBag.ItemID = model.InspectionItemID;
            ViewBag.MasterID = model.InspectionID;

            return View("SPC005R");
        }

        public async Task<IActionResult> SPC005USaveAsync(InspectionResultMaster 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());
                }
            }
            model.UpdateUserID = user_id;
            model.UpdateDate = System.DateTime.Now;

            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _spcApi.PutInspectionResultMaster(model.InspectionID, JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    //var _msg = "添加成功!";
                    return Json(new Result() { success = true, msg = result.Msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return Json(new Result() { success = false, msg = "資料有誤!!" });

        }

        public async Task<IActionResult> SPC005UListSaveAsync(InspectionResultDetail 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.UpdateUserID = user_id;
            model.UpdateDate = System.DateTime.Now;

            result = await _spcApi.PutInspectionResultDetail(model.InspectionID, JsonConvert.SerializeObject(model));
            if (result.Success)
            {
                //var _msg = "添加成功!";
                return Json(new Result() { success = true, msg = result.Msg });
            }
            else
            {
                return Json(new Result() { success = false, msg = "資料有誤!!" });
            }
            //return Json(new Result() { success = true, msg = "資料有誤!!" });
        }


        [HttpPost]
        public async Task<IActionResult> SPC005GetPLMECN(string ItemNo)
        {
            IResultModel<string> result;
            result = await _spcApi.GetPLMEcn(ItemNo);
            return Json(result);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetInspectionResultMastersAsync()
        {
            var result = await _spcApi.GetInspectionResultMasters();

            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> GetInspectionResultMastersByFormIdAsync(int id)
        {
            var result = await _spcApi.GetInspectionResultMastersByFormId(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> GetInspectionResultBlobsByQueryAsync(int id, int itemID)
        {
            if (id == 0)
                return Json(new Table() { count = 0, data = null });

            var result = await _spcApi.GetInspectionResultBlobsByQuery(id, itemID);

            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> GetInspectionResultMastersByQueryAllAsync(int id, string WipNo, string ItemNo, string BarcodeNo, string StatusNo, string sdate, string edate, int page = 0, int limit = 10)
        {
            //yiru 2022-11-17
            //if (id == 0)
            // return Json(new Table() { count = 0, data = null });
            if (string.IsNullOrEmpty(WipNo))
                WipNo = "*";
            if (string.IsNullOrEmpty(ItemNo))
                ItemNo = "*";
            if (string.IsNullOrEmpty(BarcodeNo))
                BarcodeNo = "*";
            if (string.IsNullOrEmpty(StatusNo))
                StatusNo = "*";
            if (string.IsNullOrEmpty(StatusNo))
                StatusNo = "*";
            if (string.IsNullOrEmpty(sdate))
                sdate = "*";
            if (string.IsNullOrEmpty(edate))
                edate = "*";
           

            var result = await _spcApi.GetInspectionResultMastersByQueryAll( id,  WipNo,  ItemNo,  BarcodeNo,  StatusNo,  sdate,  edate,  page ,  limit );
         

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

            return Json(new Table() { count = 0, data = null });
        }
        public async Task<IActionResult> GetInspectionResultDetailsAsync(int id)
        {
            var result = await _spcApi.GetInspectionResultDetails(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> GetInspectionResultDetailsAndBolbAsync(int id)
        {
            var result = await _spcApi.GetInspectionResultDetails(id);

            if (result.Count > 0)
            {
                foreach (var item in result)
                {
                 var Bolbresult=   await _spcApi.GetInspectionResultBlobsByQuery(item.InspectionID, item.InspectionItemID);
                    item.Stations.NewCno = Bolbresult.Count();
                }
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });

            }

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




        public async Task<IActionResult> GetWipAttAsync(string id)
        {

            var result = await _pcsApi.GetWipAtt(id);


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

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

        public async Task<IActionResult> CheckBarcodeNOAsync(string BarcodeNo, string WipNo)
        {
           // var result_WipNo = await _pcsApi.GetWipBarcode(WipNo);
            var BarcodeInfo = await _pcsApi.GetBarcodeInfoesByNo(BarcodeNo);
            var wipInfo = await _pcsApi.GetWipInfoByWipNO(WipNo);
            if (BarcodeInfo.Count > 0 && wipInfo.Count > 0)
            {

                var BarcodeWip = await _pcsApi.GetBarcodeWipByTwoKey(BarcodeInfo.Select(s => s.BarcodeID).FirstOrDefault(), wipInfo.Select(s => s.WipID).FirstOrDefault());
          
                    if (BarcodeWip != null)
                    {
                        return Json(new Table() { code = 0, msg = "", data = BarcodeWip, count = 1 });
                    }
               
            }
            return Json(new Table() { count = 0,msg = "生產序號不在工單區間內", data = null });


        }
        #endregion

        #region SPC005 報表
        public async Task<IActionResult> SPC005_PDF(int id)
        {
            string mimeType = "";
            int extension = 1;
            Dictionary<string, string> param = new Dictionary<string, string>();
            var localReport = GetReprot(id);
            var result = localReport.Result.Execute(RenderType.Pdf, extension, param, mimeType);
            return File(result.MainStream, "application/pdf");
        }
        /// <summary>
        /// 產生FQC報表
        /// </summary>
        /// <param name="inhouseNo">FQC單號</param>
        /// <param name="seqID">FQC單號_編號</param>
        /// <returns></returns>
        private async Task<LocalReport> GetReprot(int id)
        {
            var path = $"{this._env.WebRootPath}\\Reports\\SPC005View.rdlc";
            LocalReport localReport = new LocalReport(path);

            System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
            System.Text.Encoding.GetEncoding(1252);
            var SPC005Master = new SPC005VIiew();
            IResultModel<IpqcDto> resultIpqcQuery;
            resultIpqcQuery = _spcApi.GetIpqcQuery(id).InvokeAsync().Result;


            if (resultIpqcQuery.Data.Count() != 0)
            {
                var IPQCQuery = resultIpqcQuery.Data.FirstOrDefault();

                SPC005Master = new SPC005VIiew()
                {
                    InspectionNumber = IPQCQuery.InspectionNo,
                    OrderNumber = IPQCQuery.WipNo,
                    InspectionDate = IPQCQuery.InspectionDate.ToString("yyyy-MM-dd"),
                    ItemNo = IPQCQuery.ItemNo,
                    PlanQTY = IPQCQuery.PlanQTY.ToString(),
                    MedicalModel = IPQCQuery.CustomerMedical,
                    VIP = IPQCQuery.CustomerVIP,
                    BIOSVer = IPQCQuery.BIOS,
                    Approved = "沈俊輝",
                    Inspector = IPQCQuery.UpdateUser_Name,
                    ItemNoDesc = IPQCQuery.ItemNoDesc

                };

                foreach (var item in IPQCQuery.IpqcDetail_ASSY)
                {
                    SPC005Master.Detail1_ASSY.Add(new SPC005Detail1
                    {
                        BarcodeNO = item.BarcodeNO,
                        Result = item.Result == "P" ? "PASS" : "FAIL",
                        Defect = item.Defect
                    });
                }

                foreach (var item in IPQCQuery.qcItemDtos_ASSY)
                {
                    SPC005Master.Detail2_ASSY.Add(new SPC005Detail2
                    {

                        SEQ  = item.Seq.ToString(),
                        InspectionItemDesc = item.InspectionItemDesc,
                        InspectionResults = item.InspectionResult
                    });
                }

                foreach (var item in IPQCQuery.IpqcDetail_TEST)
                {
                    SPC005Master.Detail1_TEST.Add(new SPC005Detail1
                    {
                        BarcodeNO = item.BarcodeNO,
                        Result = item.Result == "P" ? "PASS" : "FAIL",
                        Defect = item.Defect
                    });
                }

                foreach (var item in IPQCQuery.qcItemDtos_TEST)
                {
                    SPC005Master.Detail2_TEST.Add(new SPC005Detail2
                    {

                        SEQ = item.Seq.ToString(),
                        InspectionItemDesc = item.InspectionItemDesc,
                        InspectionResults = item.InspectionResult
                    });
                }

                foreach (var item in IPQCQuery.IpqcDetail_Pack)
                {
                    SPC005Master.Detail1_PACK.Add(new SPC005Detail1
                    {
                        BarcodeNO = item.BarcodeNO,
                        Result = item.Result == "P" ? "PASS" : "FAIL",
                        Defect = item.Defect
                    });
                }

                foreach (var item in IPQCQuery.qcItemDtos_Pack)
                {
                    SPC005Master.Detail2_PACK.Add(new SPC005Detail2
                    {

                        SEQ = item.Seq.ToString(),
                        InspectionItemDesc = item.InspectionItemDesc,
                        InspectionResults = item.InspectionResult
                    });
                }


                #region 圖檔轉BASE64
                string ApprovedSign = null;
                string InspectorSign = null;
                if (System.IO.File.Exists($"{this._env.WebRootPath}/images/ElectronicSignature/{SPC005Master.Approved}.png"))
                {
                    using (var b = new System.Drawing.Bitmap($"{this._env.WebRootPath}/images/ElectronicSignature/{SPC005Master.Approved}.png"))
                    {
                        using (var ms = new MemoryStream())
                        {
                            b.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
                            ApprovedSign = Convert.ToBase64String(ms.ToArray());
                        }
                    }
                }
                if (System.IO.File.Exists($"{this._env.WebRootPath}/images/ElectronicSignature/{SPC005Master.Inspector}.png"))
                {
                    using (var b = new System.Drawing.Bitmap($"{this._env.WebRootPath}/images/ElectronicSignature/{SPC005Master.Inspector}.png"))
                    {
                        using (var ms = new MemoryStream())
                        {
                            b.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
                            InspectorSign = Convert.ToBase64String(ms.ToArray());
                        }
                    }
                }

                SPC005Master.ApprovedSignImg = ApprovedSign;
                SPC005Master.InspectorSignImg = InspectorSign;
                #endregion
            }

            var SPC005Masters = new List<SPC005VIiew>();
            SPC005Masters.Add(SPC005Master);


            localReport.AddDataSource("DataSet1", SPC005Masters);
            localReport.AddDataSource("DataSet2", SPC005Master.Detail1_ASSY);
            localReport.AddDataSource("DataSet3", SPC005Master.Detail2_ASSY);

            localReport.AddDataSource("DataSet2_TEST", SPC005Master.Detail1_TEST);
            localReport.AddDataSource("DataSet3_TEST", SPC005Master.Detail2_TEST);

            localReport.AddDataSource("DataSet2_PACK", SPC005Master.Detail1_PACK);
            localReport.AddDataSource("DataSet3_PACK", SPC005Master.Detail2_PACK);
            return localReport;
        }

        #endregion


        #region SPC006任務性IPQC提示

        public async Task<IActionResult> SPC006()
        {
            return View();
        }

        public async Task<IActionResult> SPC006QueryAsync(string wipNo, string itemNo, int page = 0, int limit = 10)
        {
            IResultModel<IPQCTaskNotice> result = await _spcApi.GetIPQCTaskNoticesByQuery(wipNo: wipNo  , itemNo: itemNo, page: page, limit: limit);

            if (result.Data != null)
            {
                return Json(new Table() { code = 0, msg = "", data = result.Data, count = result.DataTotal });
            }
            return Json(new Table() { count = 0, data = null });
        }
        //新增頁面
        public async Task<IActionResult> SPC006C()
        {
            var tt = Request.Cookies["UserID"];
            ViewBag.UserID = tt;
            return View();
        }
        [HttpPost]
        public async Task<IActionResult> SPC006CSaveAsync(IPQCTaskNotice model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _spcApi.PostIPQCTaskNotice(JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "添加成功!";
                    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);
                    }
                }
            }
            return View("SPC006C", model);
        }
        //修改页面
        [HttpGet]
        public async Task<IActionResult> SPC006UAsync(int id)
        {
            var tt = Request.Cookies["UserID"];
            ViewBag.UserID = tt;
           

            var result = await _spcApi.GetIPQCTaskNotice(id);

            if (result.Count == 0)
            {
                return View();
            }
            var StationItems = new List<SelectListItem>();
            string WipNO = result.Select(s => s.WipNo).FirstOrDefault();
            if (!string.IsNullOrWhiteSpace(WipNO))
            {
                var result1 = await _pcsApi.GetWipInfoByWipNO(WipNO);
                //站別
                var Wipinfo = await _basApi.GetRuleStationsByFlow(result1.Select(s => s.FlowRuleID).FirstOrDefault(), 0, 20);
               
                if (Wipinfo.Count() > 0)
                {
                    foreach (var item in Wipinfo)
                    {
                        StationItems.Add(new SelectListItem(item.StationDesc, item.StationID.ToString()));
                    }
                }
                else
                {
                    StationItems.Add(new SelectListItem("N/A", "-1"));
                }


            }
            else
            {
                StationItems.Add(new SelectListItem("N/A", "-1"));
            }
            ViewBag.StationList = StationItems;
            return View(result[0]);
        }
        public async Task<IActionResult> SPC006USaveAsync(IPQCTaskNotice model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _spcApi.PutIPQCTaskNotice(model.IPQCTaskNoticeID, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    var tt = Request.Cookies["UserID"];
                    ViewBag.UserID = tt;

                    //站別
                    await GetStationList();

                    ModelState.AddModelError("error", result.Msg);

                }
            }
            return View("SPC006U", model);

        }
        //修改页面
        [HttpGet]
        public async Task<IActionResult> SPC006RAsync(int id)
        {
            var tt = Request.Cookies["UserID"];
            ViewBag.UserID = tt;
            //站別
            await GetStationList();

            var result = await _spcApi.GetIPQCTaskNotice(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }
        public async Task<IActionResult> SPC006RSaveAsync(IPQCTaskNotice model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _spcApi.PutIPQCTaskNotice(model.IPQCTaskNoticeID, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    var tt = Request.Cookies["UserID"];
                    ViewBag.UserID = tt;

                    ModelState.AddModelError("error", result.Msg);

                }
            }
            return View("SPC006R", model);

        }

        public async Task<IActionResult> SPC006DAsync(int id)
        {
            var result = await _spcApi.DeleteIPQCTaskNotices(id);
            return Json(new Result() { success = result.Success, msg = result.Msg });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetWipInfoByWipNOAsync(string id)
        {
            var result = await _pcsApi.GetWipInfoByWipNO(id);

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

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

           
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetStationsesbyFlowAsync(int id)
        {
            var result = await _basApi.GetRuleStationsByFlow(id, 0, 10);

            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
    }



}