From 0893298fcbce7f2b528adc80dde6f23aac11660d Mon Sep 17 00:00:00 2001 From: Sai Date: Sun, 14 Jul 2024 23:29:09 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E8=AA=BF=E6=95=B4WIP=5Flog=E5=BB=BA?= =?UTF-8?q?=E7=AB=8B=E4=BA=BA=E5=93=A1=202.=20PTD=20=E9=82=84=E5=8E=9F?= =?UTF-8?q?=E4=BD=9C=E6=A5=AD=E8=AA=BF=E6=95=B4=EF=BC=8C=E6=9F=A5=E8=A9=A2?= =?UTF-8?q?=E4=BD=9C=E6=A5=AD=E8=AA=BF=E6=95=B4=EF=BC=8C=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=AE=A2=E6=88=B6=E6=8F=90=E5=87=BA=E9=9C=80=E6=B1=82=E5=8D=A1?= =?UTF-8?q?=E9=97=9C=E5=8F=8A=E5=AF=AB=E5=85=A5DB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PCSController.cs | 1 + .../Controllers/PTDController.cs | 183 +++++++++++- AMESCoreStudio.Web/HttpApis/AMES/IPTD.cs | 42 ++- AMESCoreStudio.Web/Views/PTD/PTD002.cshtml | 57 +++- AMESCoreStudio.Web/Views/PTD/PTD003.cshtml | 67 +++-- AMESCoreStudio.Web/Views/PTD/PTD006.cshtml | 73 ++++- AMESCoreStudio.Web/Views/PTD/PTD008.cshtml | 145 +++++----- .../Controllers/AMES/WipInfosController.cs | 23 +- .../Controllers/PTD/PTDController.cs | 266 ++++++++++++++++-- 9 files changed, 723 insertions(+), 134 deletions(-) diff --git a/AMESCoreStudio.Web/Controllers/PCSController.cs b/AMESCoreStudio.Web/Controllers/PCSController.cs index 884fb5b1..fcffe24f 100644 --- a/AMESCoreStudio.Web/Controllers/PCSController.cs +++ b/AMESCoreStudio.Web/Controllers/PCSController.cs @@ -4251,6 +4251,7 @@ namespace AMESCoreStudio.Web.Controllers wipLog.WipID = wipID; wipLog.WipDesc = "."; wipLog.StatusNO = statusNO; + wipLog.CreateUserID = GetLogInUserID(); // 當切換STOP時,強制收線 if (statusNO == "S") diff --git a/AMESCoreStudio.Web/Controllers/PTDController.cs b/AMESCoreStudio.Web/Controllers/PTDController.cs index 9d1acb44..8e985ca7 100644 --- a/AMESCoreStudio.Web/Controllers/PTDController.cs +++ b/AMESCoreStudio.Web/Controllers/PTDController.cs @@ -302,9 +302,25 @@ namespace AMESCoreStudio.Web.Controllers [HttpPost] public async Task PTD002_Commit(string data) { + var ptd002 = JsonConvert.DeserializeObject(data); + var result = await _ptdApi.PostPTD002Commit(data); + + var item = ptd002.TableData.FirstOrDefault(); + var zDNDetail = await _ptdApi.GetGetZDNDetail(item.DnNo, item.LineNo); + var zProductTrans = await _ptdApi.GetZProductTrans(recordNumber: item.DnNo, lineNo: item.LineNo); + if (zDNDetail.Any() && zProductTrans.Any()) + { + // DN數量 == 已扣帳數量 + if (zDNDetail.FirstOrDefault().shipQty == zProductTrans.Count()) + await _ptdApi.PutZDNDetailByIsRecord(item.DnNo, item.LineNo, 1); + } + //将数据Json化并传到前台视图 - return Json(new { data = result }); + return Json(new + { + data = result + }); } [HttpPost] @@ -500,6 +516,13 @@ namespace AMESCoreStudio.Web.Controllers else if (model.LineNo.Trim().Length != 6) return "LineNo不足6碼"; + // 判斷是否已備貨完成 + var isRecord = await CheckRecordNoIsRecord(model.RecordNumber, model.LineNo); + if (!(isRecord.Value as Result).success) + { + return $"RecordNumber【{model.RecordNumber}】 LineNo【{model.LineNo}】 已備貨完"; + } + // Location if (string.IsNullOrWhiteSpace(model.Location)) { @@ -651,17 +674,19 @@ namespace AMESCoreStudio.Web.Controllers //ViewBag.StartDate = System.DateTime.Now.AddDays(-7).ToString("yyyy/MM/dd"); //ViewBag.EndDate = System.DateTime.Now.ToString("yyyy/MM/dd"); ViewBag.WorkCenter = "TWM0"; - + ViewBag.rowCount = "總筆數: 0"; 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) + public async Task PTD003QueryAsync(string recordType, string recordNumber, string lineNo, string materialNo, string shippingSN, string dateStart, string dateEnd, + int autoLoad = 0, string RBU = null, string soNumber = null, string soLineNo = null, string customer = 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); + var result = await _ptdApi.GetData4PTD003(recordType, recordNumber, lineNo, materialNo, shippingSN, + dateStart, dateEnd, RBU, soNumber, soLineNo, customer); if (result.DataTotal > 0) { return Json(new Table() { code = 0, msg = "", data = result.Data, count = result.DataTotal }); @@ -1111,6 +1136,12 @@ namespace AMESCoreStudio.Web.Controllers return Json(new Result() { success = true, msg = msg, data = new List() }); } + /// + /// 取得 RecordNo & LineNo 訂單數量 + /// + /// RecordNo + /// LineNo + /// public async Task GetRecordNumberQty(string dnNo, string dnlineNo) { var zDNDetail = await _ptdApi.GetGetZDNDetail(dnNo, dnlineNo); @@ -1127,6 +1158,25 @@ namespace AMESCoreStudio.Web.Controllers } + /// + /// 確認 RecordNo & LineNo 是否可備貨 + /// + /// RecordNo + /// LineNo + /// ture可 false不可 + public async Task CheckRecordNoIsRecord(string dnNo, string dnlineNo) + { + var zDNDetail = await _ptdApi.GetGetZDNDetail(dnNo, dnlineNo); + + if (zDNDetail.Any()) + { + var isRecord = zDNDetail.FirstOrDefault().isRecord; + if ((int)isRecord == 1) + return Json(new Result() { success = false }); + } + return Json(new Result() { success = true }); + } + #endregion #region "PTD007 扣帳作業" @@ -1181,7 +1231,34 @@ namespace AMESCoreStudio.Web.Controllers [HttpPost] public async Task PTD007_Commit(string data) { - var result = await _ptdApi.PostPTD007Commit(data); + var ptd007 = JsonConvert.DeserializeObject(data); + var result = new ResultModel(); + // 先確認需求數量是否=備貨數量 + foreach (var item in ptd007.TableData) + { + if (item.shipQty != item.qty) + { + result.Success = false; + result.Msg = $"DN單號【{item.dnno}】 LineNo【{item.dnLineNO}】 數量不符合,請檢查備貨資料"; + return Json(new { data = result }); + } + } + // 執行扣帳 + result = await _ptdApi.PostPTD007Commit(data); + + foreach (var item in ptd007.TableData) + { + var zDNDetail = await _ptdApi.GetGetZDNDetail(item.dnno, item.dnLineNO); + var zProductTrans = await _ptdApi.GetZProductTrans(recordNumber: item.dnno, lineNo: item.dnLineNO); + + if (zDNDetail.Any() && zProductTrans.Any()) + { + // DN數量 == 已扣帳數量 + if (zDNDetail.FirstOrDefault().shipQty == zProductTrans.Count()) + await _ptdApi.PutZDNDetailByIsRecord(item.dnno, item.dnLineNO, 1); + } + } + //将数据Json化并传到前台视图 return Json(new { data = result }); } @@ -1205,12 +1282,96 @@ namespace AMESCoreStudio.Web.Controllers } return Json(new Table() { count = 0, data = null, msg = result.Msg }); } + [HttpPost] - public async Task PTD008_Commit(string data) + public async Task PTD008_Commit(string recordNumber, string lineNo, string materialNo, string shippingSN) { - var result = await _ptdApi.PostPTD008Commit(data); - //将数据Json化并传到前台视图 - return Json(new { data = result }); + var data = await _ptdApi.GetData4PTD008(recordNumber, lineNo, materialNo, shippingSN); + + if (data.Data.Any(w => w.recordTypeID == "101" || w.recordTypeID == "292")) + return Json(new Result() { success = false, msg = "ReCordType狀態是【101】或【292】 ,不可做還原動作" }); + + int okQty = 0, ngQty = 0; + foreach (var item in data.Data) + { + var zProductTrans = await _ptdApi.GetZProductTrans(serialNumber: (string)item.sn); + var delcheck = true; + + if (!zProductTrans.Any()) + { + ngQty += 1; + continue; + } + // 取序號最新一次狀態 + else if (zProductTrans.Any()) + { + var newRecordId = zProductTrans.OrderByDescending(o => o.createDate).FirstOrDefault().recordTypeID; + // 確認目前還原是否是最新的 + if (newRecordId != item.recordTypeID) + { + ngQty += 1; + continue; + } + } + + // 可進行還原 + delcheck = await _ptdApi.Put_PTD008((string)item.sn, recordNumber, lineNo, materialNo); + if (delcheck) + okQty += 1; + else + ngQty += 1; + } + + // 成功刪除筆數大於1 + if (okQty >= 1) + { + await _ptdApi.PutZDNDetailByIsRecord(recordNumber, lineNo, 0); + } + + return Json(new Result() { success = true, msg = $"還原成功筆數【{okQty}】,失敗筆數【{ngQty}】" }); + } + + /// + /// 刪除動作 + /// + /// + /// + [HttpPost] + public async Task PTD008_Del(string recordNumber, string lineNo, string materialNo, string shippingSN) + { + var data = await _ptdApi.GetData4PTD008(recordNumber, lineNo, materialNo, shippingSN); + + if (data.Data.Any(w => w.recordTypeID != "101" && w.recordTypeID != "292")) + return Json(new Result() { success = false, msg = "ReCordType狀態不是【101】或【292】 ,不可做刪除動作" }); + + int okQty = 0, ngQty = 0; + foreach (var item in data.Data) + { + var zProductTrans = await _ptdApi.GetZProductTrans(serialNumber: (string)item.sn); + var delcheck = true; + // 大於一筆 代表尚有其他作業需還原 + if (zProductTrans.Count > 1) + { + ngQty += 1; + } + // 可進行刪除 + else + { + delcheck = await _ptdApi.Del_PTD008((string)item.sn, recordNumber, lineNo, materialNo); + if (delcheck) + okQty += 1; + else + ngQty += 1; + } + } + + // 成功刪除筆數大於1,將ZDetail + if (okQty >= 1) + { + await _ptdApi.PutZDNDetailByIsRecord(recordNumber, lineNo, 0); + } + + return Json(new Result() { success = true, msg = $"刪除成功筆數【{okQty}】,失敗筆數【{ngQty}】" }); } #endregion diff --git a/AMESCoreStudio.Web/HttpApis/AMES/IPTD.cs b/AMESCoreStudio.Web/HttpApis/AMES/IPTD.cs index 43087f0a..7d0ba979 100644 --- a/AMESCoreStudio.Web/HttpApis/AMES/IPTD.cs +++ b/AMESCoreStudio.Web/HttpApis/AMES/IPTD.cs @@ -44,13 +44,23 @@ namespace AMESCoreStudio.Web [WebApiClient.Attributes.HttpGet("api/PTD/GetZDNDetail")] ITask> GetGetZDNDetail(string dnNo, string dnlineNo); + /// + /// 更新 PTD ZDNDetail RecordNumber ByisRecord 已扣帳狀態 + /// + /// RecordNumber + /// LineNo + /// 已扣障 0:未完成 1:已完成 + /// + [WebApiClient.Attributes.HttpPut("api/PTD/PutZDNDetail")] + ITask PutZDNDetail(string dnNo, string dnlineNo, int isRecord); + /// /// 查詢 ZSNInfo 主表 序號區間 /// /// /// [WebApiClient.Attributes.HttpGet("api/PTD/ZSNInfoByIntervalNumber")] - ITask> GetZSNInfoByIntervalNumber(string strNumber ,string endNumber); + ITask> GetZSNInfoByIntervalNumber(string strNumber, string endNumber); /// /// 查詢 ZSNInfo 主表 By 指定序號 @@ -101,7 +111,7 @@ namespace AMESCoreStudio.Web ITask> GetRecordTypes(); [WebApiClient.Attributes.HttpGet("api/WipInfos/GetData4PTD003")] - ITask> GetData4PTD003(string recordType, string recordNumber, string lineNo, string materialNo, string shippingSN, string dateStart, string dateEnd, string RBU); + ITask> GetData4PTD003(string recordType, string recordNumber, string lineNo, string materialNo, string shippingSN, string dateStart, string dateEnd, string RBU, string soNumber, string soLineNo, string customer); [WebApiClient.Attributes.HttpGet("api/WipInfos/GetCustomer/{recordNumber}")] ITask GetCustomer(string recordNumber); @@ -140,6 +150,28 @@ namespace AMESCoreStudio.Web [WebApiClient.Attributes.HttpDelete("api/WipInfos/DeleteRecordTypeInfo/{id}")] ITask> DeleteRecordTypeInfo(string id); + /// + /// 查詢 ZProductTrans + /// + /// 序號 + /// RecordNumber + /// LineNo + /// 料號 + /// 類型 + /// + [WebApiClient.Attributes.HttpGet("api/PTD/GetZProductTrans")] + ITask> GetZProductTrans(string serialNumber = null, string recordNumber = null, string lineNo = null, string productID = null, string recordTypeID = null); + + + /// + /// 更新 PTD ZDNDetail RecordNumber ByisRecord 已扣帳狀態 + /// + /// RecordNumber + /// LineNo + /// 已扣障 0:未完成 1:已完成 + /// + [WebApiClient.Attributes.HttpPut("api/PTD/PutZDNDetail")] + ITask PutZDNDetailByIsRecord(string dnNo, string dnlineNo, int isRecord); #endregion #region "PTD005 設定 ERP 客戶代號和客戶收件人名單" @@ -211,6 +243,12 @@ namespace AMESCoreStudio.Web ITask> GetData4PTD008(string recordNumber, string lineNo, string materialNo, string shippingSN); [WebApiClient.Attributes.HttpPost("api/WipInfos/PostPTD008Commit")] ITask> PostPTD008Commit([FromBody, RawJsonContent] string model); + + [WebApiClient.Attributes.HttpPut("api/PTD/PTD008")] + ITask Put_PTD008(string serialNumber, string recordNumber, string lineNo, string productID); + + [WebApiClient.Attributes.HttpDelete("api/PTD/PTD008")] + ITask Del_PTD008(string serialNumber, string recordNumber, string lineNo, string productID); #endregion } diff --git a/AMESCoreStudio.Web/Views/PTD/PTD002.cshtml b/AMESCoreStudio.Web/Views/PTD/PTD002.cshtml index 02741ef4..72713685 100644 --- a/AMESCoreStudio.Web/Views/PTD/PTD002.cshtml +++ b/AMESCoreStudio.Web/Views/PTD/PTD002.cshtml @@ -216,6 +216,7 @@ var recordNumber = document.getElementById('recordNumber').value; var recordType = document.getElementById('recordType').value; var recordTypeInfo = @Html.Raw(Json.Serialize(ViewBag.RecordTypeInfo)); + var lineNo = document.getElementById('lineNo').value; var filteredInfo = recordTypeInfo.find(function (info) { return info.id === recordType; }); @@ -233,8 +234,32 @@ $("#recordNumber").val(''); return; } - var lineNo = document.getElementById('lineNo'); - lineNo.focus(); + + if (lineNo.length === 0) { + document.getElementById('lineNo').focus(); + } + else { + $.ajax({ + url: '@Url.Action("CheckRecordNoIsRecord", "PTD")', + type: 'POST', + data: { dnNo: recordNumber, dnlineNo: lineNo }, + success: function (result) { + // 处理成功的情况 + if (!result.success) { + hg.msg(`RecordNumber【${recordNumber}】 LineNo【${lineNo}】 已備貨完`); + $("#recordNumber").val(''); + $("#lineNo").val(''); + $("#Customer").val(''); + $('#PartNumber').val(''); + $("#PartDesc").val(''); + } + }, + error: function (error) { + hg.msg('錯誤:' + error); + console.log(error); + } + }); + } } }); @@ -269,9 +294,30 @@ console.log(error); } }); - } + $.ajax({ + url: '@Url.Action("CheckRecordNoIsRecord", "PTD")', + type: 'POST', + data: { dnNo: recordNumber, dnlineNo: lineNo }, + success: function (result) { + // 处理成功的情况 + if (!result.success) { + hg.msg(`RecordNumber【${recordNumber}】 LineNo【${lineNo}】 已備貨完`); + $("#recordNumber").val(''); + $("#lineNo").val(''); + $("#Customer").val(''); + $('#PartNumber').val(''); + $("#PartDesc").val(''); + } + }, + error: function (error) { + hg.msg('錯誤:' + error); + console.log(error); + } + }); + } }); + $('#PartNumber').on('keypress', function (event) { if (event.keyCode == 13) { getItemDesc(document.getElementById('PartNumber').value); @@ -366,6 +412,11 @@ } // 用来统计重复的SN var duplicateSNs = []; + // 清空表格 + layui.table.reload('query', { + data: [], + }); + res.data.forEach(function (item) { if (isSNAlreadyExist('query', item.sn)) { // 将重复的SN加入到duplicateSNs数组中 diff --git a/AMESCoreStudio.Web/Views/PTD/PTD003.cshtml b/AMESCoreStudio.Web/Views/PTD/PTD003.cshtml index 361979bd..49cb1579 100644 --- a/AMESCoreStudio.Web/Views/PTD/PTD003.cshtml +++ b/AMESCoreStudio.Web/Views/PTD/PTD003.cshtml @@ -41,7 +41,7 @@
+
@@ -58,15 +58,15 @@
- +
- +
- +
@@ -74,11 +74,19 @@
-
+
- + +
+ +
+ +
+ +
+
@@ -90,7 +98,7 @@
- +
@@ -118,9 +126,12 @@
+
+ +
- + @section Scripts{ @@ -214,36 +225,50 @@ }; $('#recordNumber').on('keypress', function (event) { - if (event.keyCode == 13) { getCustomer($('#recordNumber').val()); } - }); //监听表单提交事件 hg.form.onsubmit('querysubmit', function (data) { hg.msghide("重新載入資料.."); data.autoLoad = 1; - table && table.reload(data); + //table && table.reload(data); + console.log(data); + layui.table.reload('query', { + where: { + recordType: data.recordType, + recordNumber: data.recordNumber, + lineNo: data.lineNo, + materialNo: data.materialNo, + shippingSN: data.shippingSN, + dateStart: data.dateStart, + dateEnd: data.dateEnd, + autoLoad: data.autoLoad, + RBU: data.RBU, + soNumber: data.soNumber, + soLineNo: data.soLineNo, + customer: data.customer + }, + done: function (res, curr, count) { + $('#rowCount').text('總筆數: ' + count); + } + }); }); var tableCols = [[ { field: 'recordTypeID', title: 'RecordType', - sort: true }, { field: 'recordNumber', title: 'RecordNumber', - sort: true }, { field: 'lineNo', - width: 120, title: 'LineNo', - sort: true }, { field: 'sn', @@ -259,14 +284,18 @@ { field: 'customer', title: 'Customer', - width: 160, - sort: true + }, + { + field: 'soNumber', + title: 'SO Number', + }, + { + field: 'soLineNo', + title: 'SO Line', }, { field: 'location', title: 'Location', - width: 100, - sort: true }, { field: 'creatorID', diff --git a/AMESCoreStudio.Web/Views/PTD/PTD006.cshtml b/AMESCoreStudio.Web/Views/PTD/PTD006.cshtml index 4390d179..b012da85 100644 --- a/AMESCoreStudio.Web/Views/PTD/PTD006.cshtml +++ b/AMESCoreStudio.Web/Views/PTD/PTD006.cshtml @@ -204,9 +204,11 @@ var recordNumber = document.getElementById('recordNumber').value; var recordType = document.getElementById('recordType').value; var recordTypeInfo = @Html.Raw(Json.Serialize(ViewBag.RecordTypeInfo)); + var lineNo = document.getElementById('lineNo').value; var filteredInfo = recordTypeInfo.find(function (info) { return info.id === recordType; }); + //check recordNumber if (recordNumber.length !== filteredInfo.length) { layer.msg('請確認recordNumber碼長!', { icon: 2 }); @@ -221,25 +223,51 @@ return; } - table.reload('query', { - where: { - recordNumber: recordNumber - }, - page: { - curr: 1 + if (lineNo.length === 0) { + document.getElementById('lineNo').focus(); + } + else { + table.reload('query', { + where: { + recordNumber: recordNumber, + LineNO: lineNo + }, + page: { + curr: 1 + }, + done: function (res, curr, count) { + // 表格更新成功後計算資料筆數 + calculateRowCount(res.data); + } + }); + + $.ajax({ + url: '@Url.Action("CheckRecordNoIsRecord", "PTD")', + type: 'POST', + data: { dnNo: recordNumber, dnlineNo: lineNo }, + success: function (result) { + // 处理成功的情况 + if (!result.success) { + hg.msg(`RecordNumber【${recordNumber}】 LineNo【${lineNo}】 已備貨完`); + $("#recordNumber").val(''); + $("#lineNo").val(''); + $("#Customer").val(''); + $('#PartNumber').val(''); + $("#PartDesc").val(''); + } }, - done: function (res, curr, count) { - // 表格更新成功後計算資料筆數 - calculateRowCount(res.data); - var lineNo = document.getElementById('lineNo'); - lineNo.focus(); + error: function (error) { + hg.msg('錯誤:' + error); + console.log(error); } }); + } //calculateRowCount(table.cache['query']); //var lineNo = document.getElementById('lineNo'); //lineNo.focus(); } }); + $('#lineNo').on('keypress', function (event) { if (event.keyCode == 13) { var table = layui.table; @@ -285,8 +313,30 @@ console.log(error); } }); + + $.ajax({ + url: '@Url.Action("CheckRecordNoIsRecord", "PTD")', + type: 'POST', + data: { dnNo: recordNumber, dnlineNo: lineNo }, + success: function (result) { + // 处理成功的情况 + if (!result.success) { + hg.msg(`RecordNumber【${recordNumber}】 LineNo【${lineNo}】 已備貨完`); + $("#recordNumber").val(''); + $("#lineNo").val(''); + $("#Customer").val(''); + $('#PartNumber').val(''); + $("#PartDesc").val(''); + } + }, + error: function (error) { + hg.msg('錯誤:' + error); + console.log(error); + } + }); } }); + $('#snQuery').on('keypress', function (event) { if (event.keyCode == 13) { var table = layui.table; @@ -421,7 +471,6 @@ done: function(res, curr, count) { // 表格更新成功後計算資料筆數 calculateRowCount(res.data); - } }); } diff --git a/AMESCoreStudio.Web/Views/PTD/PTD008.cshtml b/AMESCoreStudio.Web/Views/PTD/PTD008.cshtml index 77b2fbe2..0bf3ae22 100644 --- a/AMESCoreStudio.Web/Views/PTD/PTD008.cshtml +++ b/AMESCoreStudio.Web/Views/PTD/PTD008.cshtml @@ -56,7 +56,7 @@
- +
@@ -69,7 +69,7 @@
-
@@ -97,89 +97,103 @@