using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using AMESCoreStudio.CommonTools.Result; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Microsoft.AspNetCore.Mvc.Rendering; using AMESCoreStudio.Web.Models; using AMESCoreStudio.WebApi.Models; using AMESCoreStudio.WebApi.Models.AMES; using DocumentFormat.OpenXml.Drawing.Charts; namespace AMESCoreStudio.Web.Controllers { public class PTDController : Controller { public readonly IPCS _pcsApi; public readonly IKCS _kcsApi; public readonly IBAS _basApi; public readonly ISYS _sysApi; public readonly IPTD _ptdApi; public PTDController(IPCS pcsApi, IKCS kcsApi, IBAS basApi, ISYS sysApi, IPTD ptdApi) { _pcsApi = pcsApi; _kcsApi = kcsApi; _basApi = basApi; _sysApi = sysApi; _ptdApi = ptdApi; } #region "PTD001 DN單查詢" public async Task PTD001() { return View(); } public async Task PTD001AAsync(string dnNo, string lineNo) { ViewData["Title"] = "查詢條件 - 出貨DN單: " + dnNo + " Line No:" + lineNo; if (dnNo == null || lineNo == null) return View(); string kpDataList = "
"; string dataList = ""; try { //組表頭 IResultModel DNDetail = await _ptdApi.GetZDNDetail4PTD001(dnNo, lineNo); if (DNDetail.DataTotal > 0) { dataList = ""; dataList += ""; dataList += "kpDataList"; dataList += "
"; foreach (var item in DNDetail.Data) { JObject jo = JObject.Parse(item.ToString()); JProperty[] jp = jo.Properties().ToArray(); for (int i = 0; i < jp.Length; i++) { switch (i) { case 0: dataList += ""; dataList += ""; break; case 1: dataList += ""; dataList += ""; break; case 2: dataList += ""; dataList += ""; break; case 3: dataList += ""; dataList += ""; break; case 4: dataList += ""; dataList += ""; break; case 5: dataList += ""; dataList += ""; break; case 6: dataList += ""; dataList += ""; break; case 7: dataList += ""; dataList += ""; break; default: break; } } } dataList += "
 DN NO " + jp[i].Value + " Line No " + jp[i].Value + " Product ID " + jp[i].Value + " Ship Qty " + jp[i].Value + "
 Ship To " + jp[i].Value + " Sold To " + jp[i].Value + " Expect Ship Date " + jp[i].Value + " Current Ship Date " + jp[i].Value + "
"; } //組Detail IResultModel result = await _ptdApi.GetDNInfo4PTD001(dnNo, lineNo); if (result.DataTotal > 0) { kpDataList = kpDataList + ""; bool titleFlag = true; foreach (var item in result.Data) { string strStartDate = ""; JObject jo = JObject.Parse(item.ToString()); JProperty[] jp = jo.Properties().ToArray(); if (titleFlag) { kpDataList = kpDataList + ""; for (int i = 0; i < jp.Length; i++) { switch (i) { case 0: kpDataList = kpDataList + ""; break; case 1: kpDataList = kpDataList + ""; break; case 2: kpDataList = kpDataList + ""; break; case 3: kpDataList = kpDataList + ""; break; case 4: kpDataList = kpDataList + ""; break; case 5: strStartDate = ""; break; default: string kp_name = jp[i].Name.Replace("kP_", ""); int kp_idx = kp_name.IndexOf("#"); if (kp_idx > 0) { if (kp_name.StartsWith("MB") && kp_name.IndexOf("MAC") > 0) { string kp_no = kp_name.Replace("#", "_"); var kp_item = await _kcsApi.GetItems(kp_no); if (kp_item.Count > 0) { kpDataList = kpDataList + ""; } else { kpDataList = kpDataList + ""; } } else { string kp_no = kp_name.Substring(0, kp_idx); var kp_item = await _kcsApi.GetItems(kp_no); if (kp_item.Count > 0) { kpDataList = kpDataList + ""; } else { kpDataList = kpDataList + ""; } } } else { var kp_item = await _kcsApi.GetItems(kp_name); if (kp_item.Count > 0) { kpDataList = kpDataList + ""; } else { kpDataList = kpDataList + ""; } } break; } } kpDataList = kpDataList + strStartDate; kpDataList = kpDataList + ""; titleFlag = false; } kpDataList = kpDataList + ""; for (int i = 0; i < jp.Length; i++) { switch (i) { case 0: kpDataList = kpDataList + ""; break; case 1: kpDataList = kpDataList + ""; break; case 2: kpDataList = kpDataList + ""; break; case 3: kpDataList = kpDataList + ""; break; case 4: kpDataList = kpDataList + ""; break; case 5: strStartDate = ""; break; default: kpDataList = kpDataList + ""; break; } } kpDataList = kpDataList + strStartDate; kpDataList = kpDataList + ""; } kpDataList = kpDataList + "
 DNNo MOID Material(料號) 出貨序號 生產序號 StartDate " + kp_item[0].ItemName + " " + kp_no + " " + kp_item[0].ItemName + " " + kp_no + " " + kp_item[0].ItemName + " " + kp_name + "
 " + jp[i].Value + " " + jp[i].Value + " " + jp[i].Value + " " + jp[i].Value + " " + jp[i].Value + " " + jp[i].Value + " " + jp[i].Value + "
"; } else { kpDataList = kpDataList + "查無資料"; } } catch (Exception e1) { kpDataList = kpDataList + "查詢過程超時:" + e1.Message; } kpDataList = kpDataList + "
"; dataList = dataList.Replace("kpDataList", kpDataList); ViewData["list"] = dataList; return View(); } #endregion #region "PTD002 一段式入出庫作業" public async Task PTD002() { if (Request.Cookies["_AMESCookie"] != null) { var userID = ""; HttpContext.Request.Cookies.TryGetValue("UserID", out userID); if (userID != null) { var user_info = await _sysApi.GetUserInfo(int.Parse(userID)); var factory_info = await _basApi.GetFactoryInfo(user_info[0].FactoryID); ViewData["RBU"] = factory_info[0].Address; } } List RecordTypes = await _ptdApi.GetRecordTypeInfo(); var allRecordType = new[] { "653", "632", "261", "262", "101R", "201", "202", "291", "292", "601", "601DB", "657", "952", "634" }; var filtered = from o in RecordTypes where allRecordType.Contains(o.ID) select o; RecordTypes = filtered.ToList(); var SelectListItem = new List(); foreach (WebApi.Models.AMES.RecordTypeInfo RecordType in RecordTypes) { SelectListItem.Add(new SelectListItem(RecordType.ID.ToString() + "-" + RecordType.TypeName, RecordType.ID.ToString())); } ViewBag.RecordTypeInfo = RecordTypes; ViewBag.RecordType = SelectListItem; ViewBag.Location = "9000"; ViewBag.WorkCenter = "TWM0"; ViewBag.RecordDate = System.DateTime.Now.ToString("yyyy/MM/dd"); return View(); } [HttpPost] public async Task GetZDNDetailJson(string recordNumber, string lineNo) { var result = await _ptdApi.GetZDNDetail4PTD001(recordNumber, lineNo); //将数据Json化并传到前台视图 return Json(new { data = result }); } [HttpPost] public async Task PTD002_Commit(string data) { var result = await _ptdApi.PostPTD002Commit(data); //将数据Json化并传到前台视图 return Json(new { data = result }); } [HttpPost] public async Task PTD002_CheckInputData(WebApi.Models.AMES.PTDCheckInputData model) { var inputCheck = await CheckInputData(model); var correct = new List(); var msg = string.Empty; if (!string.IsNullOrWhiteSpace(inputCheck)) return Json(new Result() { success = false, msg = inputCheck }); // var recordType = await _ptdApi.GetRecordTypeInfo(); var recordTypeFirst = recordType.Where(w => w.ID == model.RecordType).FirstOrDefault(); var zsnInfo = new List(); // 取得資料 // PCS if (model.StockUnit == "0") { // Begin=End if (model.PcsUnit == "Y") model.EndSN = model.FrontSN; else { // EndSn 空白 計算備貨量 if (string.IsNullOrWhiteSpace(model.EndSN)) { var sequential = model.Sequential; var frontLength = model.FrontSN.Length; // 前綴 var title = model.FrontSN.Substring(0, frontLength - sequential); // 開始流水號 var frontSequential = int.Parse(model.FrontSN.Substring(frontLength - sequential, sequential)); model.EndSN = $"{title}{(frontSequential + model.StockQty - 1).ToString().PadLeft(sequential, '0')}"; } } zsnInfo = await _ptdApi.GetZSNInfoByIntervalNumber(model.FrontSN, model.EndSN); } // BOX else if (model.StockUnit == "1") { // EndSn 空白 計算備貨量 if (string.IsNullOrWhiteSpace(model.EndSN)) { var sequential = model.Sequential; var frontLength = model.FrontSN.Length; // 前綴 var title = model.FrontSN.Substring(0, frontLength - sequential); // 開始流水號 var frontSequential = int.Parse(model.FrontSN.Substring(frontLength - sequential, sequential)); model.EndSN = $"{title}{(frontSequential + model.StockQty - 1).ToString().PadLeft(sequential, '0')}"; } var boxSn = await _ptdApi.GetBarcodeInfoByBoxInterval(model.FrontSN, model.EndSN); foreach (var item in boxSn.Where(w => w.StatusID == -1)) { var byBarcodeNo = await _ptdApi.GetZSNInfoByNumber(item.BarcodeNo); if (byBarcodeNo.Any()) zsnInfo.Add(byBarcodeNo.FirstOrDefault()); } } // ExcelInput if (!string.IsNullOrWhiteSpace(model.SNData)) { var sndata = model.SNData.Split("\n"); foreach (var item in sndata) { var byNumber = await _ptdApi.GetZSNInfoByNumber(item); if (byNumber.Any()) zsnInfo.Add(byNumber.FirstOrDefault()); } } // Type是WO的 上一個狀態需要是WI if (recordTypeFirst != null) { if (recordTypeFirst.Status == "WO") { // Record 狀態是WI 的ID var recodeIdBystaus = recordType.Where(w => w.Status == "WI").Select(s => s.ID).ToList(); // 特殊 if (model.RecordType == "633") recodeIdBystaus.Add("631"); correct = zsnInfo.Where(w => recodeIdBystaus.Contains((string)w.recordTypeID)).ToList(); } else if (recordTypeFirst.Status == "WI") { // 取得特定上一個作業 var flowRule = await _ptdApi.GetPtdFlowRules(model.RecordType); if (flowRule.Any()) { var toIDs = flowRule.Select(s => (string)s.toID).ToList(); correct = zsnInfo.Where(w => toIDs.Contains((string)w.recordTypeID)).ToList(); } } } var datas = new List(); foreach (var item in zsnInfo) { // 符合的顯示出來 if (correct.Any(a => a.serialNumber == item.serialNumber)) { var newRowData = new { dnNo = model.RecordNumber, lineNo = model.LineNo, material = model.ProductId, sn = item.serialNumber }; datas.Add(newRowData); } else msg += $"{item.serialNumber}、"; } if (!string.IsNullOrWhiteSpace(msg)) msg = "流程狀態不允許:" + msg.Substring(0, msg.Length - 1); return Json(new Result() { success = true, msg = msg, data = datas }); } /// /// 確認輸入資料是否正確 /// /// /// public async Task CheckInputData(WebApi.Models.AMES.PTDCheckInputData model) { // RecordNumber if (string.IsNullOrWhiteSpace(model.RecordNumber)) { return "請輸入 RecordNumber"; } // LineNo if (string.IsNullOrWhiteSpace(model.LineNo)) { if (model.RecordType != "101" && model.RecordType != "292") return "請輸入 LineNo"; } // Location if (string.IsNullOrWhiteSpace(model.Location)) { return "請輸入 Location"; } //var recordType = await _ptdApi.GetRecordTypeInfoById(model.RecordType); //if (recordType.Any()) //{ // var recordInfoItem = recordType.FirstOrDefault(); // if (model.RecordNumber.Length != int.Parse((string)recordInfoItem.length)) // return "RecordNumber長度與設定的長度不符,請在確認"; // if (!model.RecordNumber.StartsWith((string)recordInfoItem.prefixCode)) // return "RecordNumber單據號碼開頭與設定開頭不符,請在確認"; //} //else //{ // return "請維護RecordNumber單投說明表"; //} // ProductId if (string.IsNullOrWhiteSpace(model.ProductId)) { return "請輸入 料號"; } // 判斷RecordNumber 是601DB or 657 需要填 RMANo if (model.RecordType == "601DB" || model.RecordType == "657") { if (string.IsNullOrWhiteSpace(model.RmaNo)) return "請輸入 RMANo"; } // 判斷是簍有輸入序號 if (string.IsNullOrWhiteSpace(model.FrontSN) && string.IsNullOrWhiteSpace(model.SNData)) { return "請輸入 Scanner"; } // 判斷序號區間格式正確 if (!string.IsNullOrWhiteSpace(model.FrontSN)) { // 沒有指定單一序號就判斷 備貨量及流水碼 if (model.PcsUnit == "N") { var sequential = model.Sequential; var frontLength = model.FrontSN.Length; var endLength = model.EndSN?.Length ?? 0; var frontSequential = 0; // 流水碼長度不符 if (sequential >= frontLength + 1) return "請確認 流水碼長度是否正確"; // 流水碼格式不符 if (!int.TryParse(model.FrontSN.Substring(frontLength - sequential, sequential), out _)) { return "請確認 序號區間流水碼格式是否正確"; } frontSequential = int.Parse(model.FrontSN.Substring(frontLength - sequential, sequential)); // 當沒有輸入結束序號區間,就判斷備貨量 if (string.IsNullOrWhiteSpace(model.EndSN)) { if (model.StockQty <= 0) { return "請輸入 備貨量"; } // 判斷備貨量 加總 大於 流水碼數 if ((frontSequential + model.StockQty - 1).ToString().Length > sequential) { return "備貨量加總超過設定流水碼長度,請在確認"; } } else { // 確認開始序號與結束序號是否長度一致 if (frontLength != endLength) { return "請確認 起始序號與結束序號區間長度不一致"; } // 判斷前綴碼是否一致 if (model.FrontSN.Substring(0, frontLength - sequential) != model.EndSN.Substring(0, frontLength - sequential)) { return "請確認 起始序號與結束序號區間前綴碼不一致"; } } } } return ""; } //public async Task CheckShipQty(string recordNumber, string lineNo, int addQty) //{ // var result = await _pcsApi.CheckShipQty(recordNumber, lineNo, addQty); // 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, msg = result.Msg }); //} //public async Task CheckFlowRules(string recordType, string serialNumber) //{ // var result = await _pcsApi.CheckFlowRules(recordType, serialNumber); // 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, msg = result.Msg }); //} #endregion #region "PTD003 作業查詢" public async Task PTD003() { if (Request.Cookies["_AMESCookie"] != null) { var userID = ""; HttpContext.Request.Cookies.TryGetValue("UserID", out userID); if (userID != "") { var user_info = await _sysApi.GetUserInfo(int.Parse(userID)); List factory_info = await _basApi.GetFactoryInfo(user_info[0].FactoryID); ViewData["RBU"] = factory_info[0].Address; } } List RecordTypes = await _ptdApi.GetRecordTypes(); var SelectListItem = new List(); SelectListItem.Add(new SelectListItem("全部", "全部")); foreach (WebApi.Models.AMES.RecordTypeInfo RecordType in RecordTypes) { SelectListItem.Add(new SelectListItem(RecordType.ID.ToString() + "-" + RecordType.TypeName, RecordType.ID.ToString())); } ViewBag.RecordType = SelectListItem; //ViewBag.StartDate = System.DateTime.Now.AddDays(-7).ToString("yyyy/MM/dd"); //ViewBag.EndDate = System.DateTime.Now.ToString("yyyy/MM/dd"); ViewBag.WorkCenter = "TWM0"; return View(); } public async Task PTD003QueryAsync(string recordType, string recordNumber, string lineNo, string materialNo, string shippingSN, string dateStart, string dateEnd, int autoLoad = 0, string RBU = null) { //if (recordNumber == null || recordNumber == "") // return Json(new Table() { count = 0, data = null }); if (autoLoad == 0) return Json(new Table() { count = 0, data = null }); var result = await _ptdApi.GetData4PTD003(recordType, recordNumber, lineNo, materialNo, shippingSN, dateStart, dateEnd, RBU); 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, msg = result.Msg }); } [HttpPost] public async Task GetCustomerJson(string recordNumber) { string strCustomer = await _ptdApi.GetCustomer(recordNumber); var item = new List(); item.Add(new SelectListItem(strCustomer, strCustomer)); //将数据Json化并传到前台视图 return Json(new { data = item }); } #endregion #region "PTD004 單頭說明維護" public IActionResult PTD004() { return View(); } //新增頁面 public IActionResult PTD004C() { return View(); } //修改页面 [HttpGet] public async Task PTD004UAsync(string id) { var result = await _ptdApi.GetRecordTypeInfo(id); if (result.Count == 0) { return View(); } return View(result[0]); } public async Task PTD004DAsync(string id) { var result = await _ptdApi.DeleteRecordTypeInfo(id); return Json(new Result() { success = true, msg = "" }); } //頁面提交,Mode=0 添加,Mode=1 修改 [HttpPost] public async Task PTD004SaveAsync(WebApi.Models.AMES.RecordTypeInfo model) { if (ModelState.IsValid) { IResultModel result; if (model.Mode == 0) { result = await _ptdApi.PostRecordTypeInfo(JsonConvert.SerializeObject(model)); } else { result = await _ptdApi.PutRecordTypeInfo(model.ID, JsonConvert.SerializeObject(model)); } if (result.Success) { var _msg = model.Mode == 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.Mode == 0) { return View("PTD004C", model); } return View("PTD004U", model); } [ResponseCache(Duration = 0)] [HttpGet] public async Task GetRecordTypeInfoAsync() { var result = await _ptdApi.GetRecordTypeInfo(); 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 "PTD005 設定 ERP 客戶代號和客戶收件人名單" public async Task PTD005() { return View(); } public IActionResult PTD005C() { return View(); } //修改页面 [HttpGet] public async Task PTD005UAsync(string id) { var result = await _ptdApi.GetCustomerItemMailGroup(id); if (result.Count == 0) { return View(); } return View(result[0]); } public async Task PTD005DAsync(string id) { var result = await _ptdApi.DeleteCustomerItemMailGroup(id); return Json(new Result() { success = true, msg = "" }); } [HttpPost] public async Task PTD005SaveAsync(WebApi.Models.AMES.CustomerItemMailGroupModel model) { if (ModelState.IsValid) { IResultModel result; if (model.Mode == 0) { result = await _ptdApi.PostCustomerItemMailGroup(JsonConvert.SerializeObject(model)); } else { result = await _ptdApi.PutCustomerItemMailGroup(model.ItemNumber, JsonConvert.SerializeObject(model)); } if (result.Success) { var _msg = model.Mode == 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.Mode == 0) { return View("PTD005C", model); } return View("PTD005U", model); } [ResponseCache(Duration = 0)] [HttpGet] public async Task GetCustomerItemMailGroupAsync() { var result = await _ptdApi.GetCustomerItemMailGroup(); 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 "PTD006 備貨作業" public async Task PTD006() { if (Request.Cookies["_AMESCookie"] != null) { var userID = ""; HttpContext.Request.Cookies.TryGetValue("UserID", out userID); if (userID != null) { var user_info = await _sysApi.GetUserInfo(int.Parse(userID)); var factory_info = await _basApi.GetFactoryInfo(user_info[0].FactoryID); ViewData["RBU"] = factory_info[0].Address; } } List RecordTypes = await _ptdApi.GetRecordTypeInfo(); var allRecordType = new[] { "101", "601", "631", "633", "951" }; var filtered = from o in RecordTypes where allRecordType.Contains(o.ID) select o; RecordTypes = filtered.ToList(); var SelectListItem = new List(); foreach (WebApi.Models.AMES.RecordTypeInfo RecordType in RecordTypes) { SelectListItem.Add(new SelectListItem(RecordType.ID.ToString() + "-" + RecordType.TypeName, RecordType.ID.ToString())); } ViewBag.RecordTypeInfo = RecordTypes; ViewBag.RecordType = SelectListItem; ViewBag.Location = "9000"; ViewBag.WorkCenter = "TWM0"; ViewBag.RecordDate = System.DateTime.Now.ToString("yyyy/MM/dd"); return View(); } public async Task PTD006QueryAsync(string recordNumber, string lineNo = null) { if (recordNumber == null || recordNumber == "") return Json(new Table() { count = 0, data = null }); var result = await _ptdApi.GetZWHPickListDetail(recordNumber, lineNo); 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, msg = result.Msg }); } [HttpPost] public async Task PTD006AAsync(string data) { var result = await _ptdApi.PostPTD006Commit(data); if (result.Success) { return Json(new Result() { success = true, msg = "" }); } else { return Json(new Result() { success = false, msg = result.Msg }); } } public async Task PTD006DAsync(string sn) { var result = await _ptdApi.DeleteZWHPickListDetail(sn); if (result.Success) { return Json(new Result() { success = true, msg = "" }); } else { return Json(new Result() { success = false, msg = result.Msg }); } } public async Task PTD006_CheckInputData(WebApi.Models.AMES.PTDCheckInputData model) { // 基本資料判定 var inputCheck = await CheckInputData(model); var msg = string.Empty; if (!string.IsNullOrWhiteSpace(inputCheck)) return Json(new Result() { success = false, msg = inputCheck }); // 單頭說明維護 var recordType = await _ptdApi.GetRecordTypeInfo(); var recordTypeFirst = recordType.Where(w => w.ID == model.RecordType).FirstOrDefault(); // 資料收集 var sn = new List(); var zsnInfo = new List(); var pickDetail = new List(); // 新增 add to PickListDetail var addInput = new List(); var msgInput = new List(); // 取得資料 PCS if (model.StockUnit == "0") { var sequential = model.Sequential; var frontLength = model.FrontSN.Length; // 前綴 var title = model.FrontSN.Substring(0, frontLength - sequential); // Begin=End if (model.PcsUnit == "Y") model.EndSN = model.FrontSN; else { // EndSn 空白 計算備貨量 if (string.IsNullOrWhiteSpace(model.EndSN)) { // 開始流水號 var frontSequential = int.Parse(model.FrontSN.Substring(frontLength - sequential, sequential)); model.EndSN = $"{title}{(frontSequential + model.StockQty - 1).ToString().PadLeft(sequential, '0')}"; } } // 確認ZSN_Info有沒有重複資料 zsnInfo = await _ptdApi.GetZSNInfoByIntervalNumber(model.FrontSN, model.EndSN); // 確認ZWH_PickListDetail pickDetail = await _ptdApi.GetZWHPickListDetailByIntervalNumber(model.FrontSN, model.EndSN); int startNumber = int.Parse(model.FrontSN.Substring(frontLength - sequential, sequential)); int endNumber = int.Parse(model.EndSN.Substring(frontLength - sequential, sequential)); // 用起訖區間推序號 for (int i = startNumber; i <= endNumber; i++) { string serialNumber = title + i.ToString().PadLeft(sequential, '0'); sn.Add(serialNumber); } } // BOX if (model.StockUnit == "1") { // EndSn 空白 計算備貨量 if (string.IsNullOrWhiteSpace(model.EndSN)) { var sequential = model.Sequential; var frontLength = model.FrontSN.Length; // 前綴 var title = model.FrontSN.Substring(0, frontLength - sequential); // 開始流水號 var frontSequential = int.Parse(model.FrontSN.Substring(frontLength - sequential, sequential)); model.EndSN = $"{title}{(frontSequential + model.StockQty - 1).ToString().PadLeft(sequential, '0')}"; } var boxSn = await _ptdApi.GetBarcodeInfoByBoxInterval(model.FrontSN, model.EndSN); foreach (var item in boxSn.Where(w => w.StatusID == -1)) { // sn sn.Add(item.BarcodeNo); // zsnInfo 資料 var byBarcodeNo = await _ptdApi.GetZSNInfoByNumber(item.BarcodeNo); if (byBarcodeNo.Any()) zsnInfo.Add(byBarcodeNo.FirstOrDefault()); // pickListDetail 資料 var byPickDetail = await _ptdApi.GetZWHPickListDetailByInputSN(item.BarcodeNo); if (byPickDetail.Any()) pickDetail.Add(byPickDetail.FirstOrDefault()); } } // ExcelInput if (!string.IsNullOrWhiteSpace(model.SNData)) { var sndata = model.SNData.Split("\n"); foreach (var item in sndata) { // sn sn.Add(item); // zsnInfo 資料 var byNumber = await _ptdApi.GetZSNInfoByNumber(item); if (byNumber.Any()) zsnInfo.Add(byNumber.FirstOrDefault()); // pickListDetail 資料 var snDataByPickDetail = await _ptdApi.GetZWHPickListDetailByInputSN(item); if (snDataByPickDetail.Any()) { pickDetail.Add(snDataByPickDetail.FirstOrDefault()); } } } // Type是WO的 上一個狀態需要是WI if (recordTypeFirst != null) { if (recordTypeFirst.Status == "WO") { // Record 狀態是WI 的ID var recodeIdBystaus = recordType.Where(w => w.Status == "WI").Select(s => s.ID).ToList(); // 特殊 if (model.RecordType == "633") recodeIdBystaus.Add("631"); // ZsnInfo 符合狀態的序號 addInput.AddRange(zsnInfo.Where(w => recodeIdBystaus.Contains((string)w.recordTypeID)) .Select(s => (string)s.serialNumber).ToList()); // 排除PickDetail有重複相同recordNumber & lineNo 的序號 msgInput.AddRange(pickDetail.Where(w => w.recordNumber == model.RecordNumber && w.rCLineNO == model.LineNo) .Select(s => (string)s.inputSN).ToList()); addInput.RemoveAll(input => msgInput.Contains(input)); foreach (var item in addInput) { var addPtd006 = new PTD006CommitDataModel { RecordTypeID = model.RecordType, RecordNumber = model.RecordNumber, RCLineNO = model.LineNo, InputSN = item, ShipmentSN = item, ProductID = model.ProductId, EmplID = model.Customer, ExtNotes = model.Notes, OwnerPlantID = model.WorkCenter, OwnerCompanyID = model.Rbu, CreatorID = GetLogInUserID().ToString(), ModifierID = GetLogInUserID().ToString(), }; var result = await _ptdApi.PostPTD006Commit(JsonConvert.SerializeObject(addPtd006)); } } // 101 else if (recordTypeFirst.ID == "101") { // ZsnInfo 符合狀態的序號 msgInput.AddRange(zsnInfo.Select(s => (string)s.serialNumber).ToList()); // 排除PickDetail有重複相同recordNumber & lineNo 的序號 var aa = pickDetail.Where(w => w.recordNumber == model.RecordNumber && w.rcLineNO == model.LineNo).ToList(); msgInput.AddRange(pickDetail.Where(w => w.recordNumber == model.RecordNumber && w.rcLineNO == model.LineNo) .Select(s => (string)s.inputSN).ToList()); sn.RemoveAll(input => msgInput.Contains(input)); foreach (var item in sn) { var addPtd006 = new PTD006CommitDataModel { RecordTypeID = model.RecordType, RecordNumber = model.RecordNumber, RCLineNO = model.LineNo, InputSN = item, ShipmentSN = item, ProductID = model.ProductId, EmplID = model.Customer, ExtNotes = model.Notes, OwnerPlantID = model.WorkCenter, OwnerCompanyID = model.Rbu, CreatorID = GetLogInUserID().ToString(), ModifierID = GetLogInUserID().ToString(), }; var result = await _ptdApi.PostPTD006Commit(JsonConvert.SerializeObject(addPtd006)); } } } var datas = new List(); foreach (var item in zsnInfo) { //// 符合的顯示出來 //if (correct.Any(a => a.serialNumber == item.serialNumber)) //{ // var newRowData = new // { // dnNo = model.RecordNumber, // lineNo = model.LineNo, // material = model.ProductId, // sn = item.serialNumber // }; // datas.Add(newRowData); //} //else // msg += $"{item.serialNumber}、"; } if (msgInput.Any()) msg = "序號新增失敗:" + string.Join("、", msgInput); return Json(new Result() { success = true, msg = msg, data = datas }); } #endregion #region "PTD007 扣帳作業" public async Task PTD007() { if (Request.Cookies["_AMESCookie"] != null) { var userID = ""; HttpContext.Request.Cookies.TryGetValue("UserID", out userID); if (userID != "") { var user_info = await _sysApi.GetUserInfo(int.Parse(userID)); List factory_info = await _basApi.GetFactoryInfo(user_info[0].FactoryID); ViewData["RBU"] = factory_info[0].Address; } } List RecordTypes = await _ptdApi.GetRecordTypeInfo(); var allRecordType = new[] { "101", "601", "631", "633", "951" }; var filtered = from o in RecordTypes where allRecordType.Contains(o.ID) select o; RecordTypes = filtered.ToList(); var SelectListItem = new List(); foreach (WebApi.Models.AMES.RecordTypeInfo RecordType in RecordTypes) { SelectListItem.Add(new SelectListItem(RecordType.ID.ToString() + "-" + RecordType.TypeName, RecordType.ID.ToString())); } ViewBag.RecordType = SelectListItem; ViewBag.WorkCenter = "TWM0"; ViewBag.RecordDate = System.DateTime.Now.ToString("yyyy/MM/dd"); return View(); } public async Task PTD007QueryAsync(string recordType, string recordNumber) { if (recordNumber == null || recordNumber == "") return Json(new Table() { count = 0, data = null }); var result = await _ptdApi.GetZDNDetailJoinZWHPickListDetail(recordType, recordNumber); 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, msg = result.Msg }); } [HttpPost] public async Task PTD007_Commit(string data) { var result = await _ptdApi.PostPTD007Commit(data); //将数据Json化并传到前台视图 return Json(new { data = result }); } #endregion #region "PTD008 還原作業" public async Task PTD008() { return View(); } public async Task PTD008QueryAsync(string recordNumber, string lineNo, string materialNo, string shippingSN) { if (string.IsNullOrEmpty(recordNumber) || string.IsNullOrEmpty(lineNo) || string.IsNullOrEmpty(materialNo)) return Json(new Table() { count = 0, data = null }); var result = await _ptdApi.GetData4PTD008(recordNumber, lineNo, materialNo, shippingSN); 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, msg = result.Msg }); } [HttpPost] public async Task PTD008_Commit(string data) { var result = await _ptdApi.PostPTD008Commit(data); //将数据Json化并传到前台视图 return Json(new { data = result }); } #endregion /// /// 登入UserID /// /// public int GetLogInUserID() { int user_id = -1; HttpContext.Request.Cookies.TryGetValue("UserID", out string userID); if (userID != null) { if (int.Parse(userID.ToString()) >= 0) { user_id = int.Parse(userID.ToString()); } } return user_id; } } }