Browse Source

1. 調整WIP_log建立人員

2. PTD 還原作業調整,查詢作業調整,新增客戶提出需求卡關及寫入DB
master
Sai 8 months ago
parent
commit
0893298fcb
  1. 1
      AMESCoreStudio.Web/Controllers/PCSController.cs
  2. 183
      AMESCoreStudio.Web/Controllers/PTDController.cs
  3. 42
      AMESCoreStudio.Web/HttpApis/AMES/IPTD.cs
  4. 57
      AMESCoreStudio.Web/Views/PTD/PTD002.cshtml
  5. 65
      AMESCoreStudio.Web/Views/PTD/PTD003.cshtml
  6. 57
      AMESCoreStudio.Web/Views/PTD/PTD006.cshtml
  7. 111
      AMESCoreStudio.Web/Views/PTD/PTD008.cshtml
  8. 23
      AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs
  9. 266
      AMESCoreStudio.WebApi/Controllers/PTD/PTDController.cs

1
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")

183
AMESCoreStudio.Web/Controllers/PTDController.cs

@ -302,9 +302,25 @@ namespace AMESCoreStudio.Web.Controllers
[HttpPost]
public async Task<JsonResult> PTD002_Commit(string data)
{
var ptd002 = JsonConvert.DeserializeObject<PTD002CommitDataModel>(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<IActionResult> PTD003QueryAsync(string recordType, string recordNumber, string lineNo, string materialNo, string shippingSN, string dateStart, string dateEnd, int autoLoad = 0, string RBU = null)
public async Task<IActionResult> 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<dynamic>() });
}
/// <summary>
/// 取得 RecordNo & LineNo 訂單數量
/// </summary>
/// <param name="dnNo">RecordNo</param>
/// <param name="dnlineNo">LineNo</param>
/// <returns></returns>
public async Task<JsonResult> GetRecordNumberQty(string dnNo, string dnlineNo)
{
var zDNDetail = await _ptdApi.GetGetZDNDetail(dnNo, dnlineNo);
@ -1127,6 +1158,25 @@ namespace AMESCoreStudio.Web.Controllers
}
/// <summary>
/// 確認 RecordNo & LineNo 是否可備貨
/// </summary>
/// <param name="dnNo">RecordNo</param>
/// <param name="dnlineNo">LineNo</param>
/// <returns>ture可 false不可</returns>
public async Task<JsonResult> 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<JsonResult> PTD007_Commit(string data)
{
var result = await _ptdApi.PostPTD007Commit(data);
var ptd007 = JsonConvert.DeserializeObject<PTD007CommitDataModel>(data);
var result = new ResultModel<dynamic>();
// 先確認需求數量是否=備貨數量
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<JsonResult> PTD008_Commit(string data)
public async Task<JsonResult> 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}】" });
}
/// <summary>
/// 刪除動作
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
[HttpPost]
public async Task<JsonResult> 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

42
AMESCoreStudio.Web/HttpApis/AMES/IPTD.cs

@ -44,13 +44,23 @@ namespace AMESCoreStudio.Web
[WebApiClient.Attributes.HttpGet("api/PTD/GetZDNDetail")]
ITask<List<dynamic>> GetGetZDNDetail(string dnNo, string dnlineNo);
/// <summary>
/// 更新 PTD ZDNDetail RecordNumber ByisRecord 已扣帳狀態
/// </summary>
/// <param name="dnNo">RecordNumber</param>
/// <param name="dnlineNo">LineNo</param>
/// <param name="isRecord">已扣障 0:未完成 1:已完成</param>
/// <returns></returns>
[WebApiClient.Attributes.HttpPut("api/PTD/PutZDNDetail")]
ITask<int> PutZDNDetail(string dnNo, string dnlineNo, int isRecord);
/// <summary>
/// 查詢 ZSNInfo 主表 序號區間
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/PTD/ZSNInfoByIntervalNumber")]
ITask<List<dynamic>> GetZSNInfoByIntervalNumber(string strNumber ,string endNumber);
ITask<List<dynamic>> GetZSNInfoByIntervalNumber(string strNumber, string endNumber);
/// <summary>
/// 查詢 ZSNInfo 主表 By 指定序號
@ -101,7 +111,7 @@ namespace AMESCoreStudio.Web
ITask<List<RecordTypeInfo>> GetRecordTypes();
[WebApiClient.Attributes.HttpGet("api/WipInfos/GetData4PTD003")]
ITask<ResultModel<dynamic>> GetData4PTD003(string recordType, string recordNumber, string lineNo, string materialNo, string shippingSN, string dateStart, string dateEnd, string RBU);
ITask<ResultModel<dynamic>> 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<string> GetCustomer(string recordNumber);
@ -140,6 +150,28 @@ namespace AMESCoreStudio.Web
[WebApiClient.Attributes.HttpDelete("api/WipInfos/DeleteRecordTypeInfo/{id}")]
ITask<ResultModel<string>> DeleteRecordTypeInfo(string id);
/// <summary>
/// 查詢 ZProductTrans
/// </summary>
/// <param name="serialNumber">序號</param>
/// <param name="recordNumber">RecordNumber</param>
/// <param name="lineNo">LineNo</param>
/// <param name="productID">料號</param>
/// <param name="recordTypeID">類型</param>
/// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/PTD/GetZProductTrans")]
ITask<List<dynamic>> GetZProductTrans(string serialNumber = null, string recordNumber = null, string lineNo = null, string productID = null, string recordTypeID = null);
/// <summary>
/// 更新 PTD ZDNDetail RecordNumber ByisRecord 已扣帳狀態
/// </summary>
/// <param name="dnNo">RecordNumber</param>
/// <param name="dnlineNo">LineNo</param>
/// <param name="isRecord">已扣障 0:未完成 1:已完成</param>
/// <returns></returns>
[WebApiClient.Attributes.HttpPut("api/PTD/PutZDNDetail")]
ITask<int> PutZDNDetailByIsRecord(string dnNo, string dnlineNo, int isRecord);
#endregion
#region "PTD005 設定 ERP 客戶代號和客戶收件人名單"
@ -211,6 +243,12 @@ namespace AMESCoreStudio.Web
ITask<ResultModel<dynamic>> GetData4PTD008(string recordNumber, string lineNo, string materialNo, string shippingSN);
[WebApiClient.Attributes.HttpPost("api/WipInfos/PostPTD008Commit")]
ITask<ResultModel<dynamic>> PostPTD008Commit([FromBody, RawJsonContent] string model);
[WebApiClient.Attributes.HttpPut("api/PTD/PTD008")]
ITask<bool> Put_PTD008(string serialNumber, string recordNumber, string lineNo, string productID);
[WebApiClient.Attributes.HttpDelete("api/PTD/PTD008")]
ITask<bool> Del_PTD008(string serialNumber, string recordNumber, string lineNo, string productID);
#endregion
}

57
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数组中

65
AMESCoreStudio.Web/Views/PTD/PTD003.cshtml

@ -58,15 +58,15 @@
<div class="layui-inline">
<label class="layui-form-label">交易單據:</label>
<div class="layui-input-inline" style="width:150px">
<input id="recordNumber" name="RecordNumber" autocomplete="off" class="layui-input" value="@ViewBag.RecordNumber">
<input id="recordNumber" name="recordNumber" autocomplete="off" class="layui-input" value="@ViewBag.RecordNumber">
</div>
<label class="layui-form-label">Line NO:</label>
<div class="layui-input-inline" style="width:150px">
<input id="lineNo" name="LineNo" autocomplete="off" class="layui-input" value="@ViewBag.LineNo">
<input id="lineNo" name="lineNo" autocomplete="off" class="layui-input" value="@ViewBag.LineNo">
</div>
<label class="layui-form-label">Customer:</label>
<div class="layui-input-inline" style="width:120px">
<input id="customer" name="Customer" autocomplete="off" class="layui-input" value="@ViewBag.Customer">
<input id="customer" name="customer" autocomplete="off" class="layui-input" value="@ViewBag.Customer">
</div>
</div>
</div>
@ -74,11 +74,19 @@
</div>
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-col-sm3">
<div class="layui-col-sm9">
<div class="layui-inline">
<label class="layui-form-label">Material No:</label>
<div class="layui-input-inline" style="width:150px">
<input id="materialNo" name="MaterialNo" autocomplete="off" class="layui-input" value="@ViewBag.MaterialNo">
<input id="materialNo" name="materialNo" autocomplete="off" class="layui-input" value="@ViewBag.MaterialNo">
</div>
<label class="layui-form-label">SO Number:</label>
<div class="layui-input-inline" style="width:150px">
<input id="soNumber" name="soNumber" autocomplete="off" class="layui-input" value="@ViewBag.soNumber">
</div>
<label class="layui-form-label">SO LineNo:</label>
<div class="layui-input-inline" style="width:150px">
<input id="soLineNo" name="soLineNo" autocomplete="off" class="layui-input" value="@ViewBag.soLineNo">
</div>
</div>
</div>
@ -90,7 +98,7 @@
<div class="layui-inline">
<label class="layui-form-label">Shipping SN:</label>
<div class="layui-input-inline" style="width:150px">
<input id="shippingSN" name="ShippingSN" autocomplete="off" class="layui-input" value="@ViewBag.ShippingSN">
<input id="shippingSN" name="shippingSN" autocomplete="off" class="layui-input" value="@ViewBag.ShippingSN">
</div>
</div>
</div>
@ -118,9 +126,12 @@
</div>
</div>
</div>
<table class="layui-hide" id="query" lay-filter="query"></table>
<div class="layui-inline" style="margin-right:0px;">
<label id="rowCount" class="layui-inline layui-form-label" style="width:130px; color:red;">@ViewBag.rowCount</label>
</div>
<table class="layui-hide" id="query" lay-filter="query"></table>
</div>
</div>
@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',

57
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,9 +223,14 @@
return;
}
if (lineNo.length === 0) {
document.getElementById('lineNo').focus();
}
else {
table.reload('query', {
where: {
recordNumber: recordNumber
recordNumber: recordNumber,
LineNO: lineNo
},
page: {
curr: 1
@ -231,15 +238,36 @@
done: function (res, curr, count) {
// 表格更新成功後計算資料筆數
calculateRowCount(res.data);
var lineNo = document.getElementById('lineNo');
lineNo.focus();
}
});
$.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);
}
});
}
//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);
}
});
}

111
AMESCoreStudio.Web/Views/PTD/PTD008.cshtml

@ -56,7 +56,7 @@
<div class="layui-inline">
<label class="layui-form-label">料號:</label>
<div class="layui-input-inline" style="width:150px">
<input id="materialNo" name="MaterialNo" autocomplete="off" lay-verify="required" lay-reqtext="請輸入料號" class="layui-input" value="@ViewBag.MaterialNo">
<input id="materialNo" name="MaterialNo" autocomplete="off" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" lay-verify="required" lay-reqtext="請輸入料號" class="layui-input" value="@ViewBag.MaterialNo">
</div>
</div>
</div>
@ -69,7 +69,7 @@
</div>
</div>
<div class="layui-inline layui-show-xs-block">
<button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit lay-filter="querysubmit">
<button id="submitBtn" class="layui-btn layui-btn-sm layui-btn-normal" lay-submit lay-filter="querysubmit">
<i class="layui-icon layui-icon-sm">&#xe615;</i>
</button>
</div>
@ -97,89 +97,103 @@
<script type="text/javascript">
layui.use(['form', 'layer', 'table'], function () {
var table = layui.table;
// 還原
$('#commit').on('click', function () {
var tableData = table.cache['query'];
var recordNumber = document.getElementById('recordNumber').value;
var lineNo = document.getElementById('lineNo').value;
var materialNo = document.getElementById('materialNo').value;
var shippingSN = document.getElementById('shippingSN').value;
if (recordNumber.length === 0 || lineNo.length === 0 || materialNo.length === 0) {
layer.msg('請輸入基本資料並查詢');
return;
}
var tableData = layui.table.cache['query'];
if (tableData.length === 0) {
layer.msg('請確認是否有按查詢資料');
return;
}
for (let i = 0; i < tableData.length; i++) {
(function (index) { // 使用閉包或函數參數傳遞 index
// 组织数据为一个对象
var postData = {
type: 0,
tableData: [tableData[index]]
recordNumber: recordNumber,
lineNo: lineNo,
materialNo: materialNo,
shippingSN: shippingSN
};
$.ajax({
url: '@Url.Action("PTD008_Commit", "PTD")',
dataType: 'json',
data: { data: JSON.stringify(postData) },
data: postData,
type: 'POST',
success: function (result) {
if (result.data.success) {
console.log(tableData[index]);
// 更新當前元素的 'result' 屬性
tableData[index].result = 'OK';
console.log(tableData[index]);
// 使用更新後的數據重新加載表格
layui.table.reload('query', {
data: tableData,
page: false,
limit: 2000
});
} else {
layer.msg('還原失敗,原因:' + result.data.msg, { icon: 2 });
if (result.success) {
layer.msg(result.msg, { icon: 1 });
// 手动触发按钮的点击事件
$('#submitBtn').click();
}
else {
layer.msg(result.msg, { icon: 2 });
}
},
error: function (error) {
layer.msg('還原失敗!原因:' + error.msg, { icon: 2 });
}
});
})(i); // 將 i 值傳遞進來
}
});
// 刪除
$('#del').on('click', function () {
var tableData = table.cache['query'];
var recordNumber = document.getElementById('recordNumber').value;
var lineNo = document.getElementById('lineNo').value;
var materialNo = document.getElementById('materialNo').value;
var shippingSN = document.getElementById('shippingSN').value;
if (recordNumber.length === 0 || lineNo.length === 0 || materialNo.length === 0) {
layer.msg('請輸入基本資料並查詢');
return;
}
for (var i = 0; i < tableData.length; i++) {
var tableData = layui.table.cache['query'];
if (tableData.length === 0) {
layer.msg('請確認是否有按查詢資料');
return;
}
// 组织数据为一个对象
var postData = {
type: 1,
tableData: [tableData[i]]
recordNumber: recordNumber,
lineNo: lineNo,
materialNo: materialNo,
shippingSN: shippingSN
};
$.ajax({
url: '@Url.Action("PTD008_Commit", "PTD")',
url: '@Url.Action("PTD008_Del", "PTD")',
dataType: 'json',
data: { data: JSON.stringify(postData) },
data: postData,
type: 'POST',
success: function (result) {
if (result.data.success) {
// 更新該筆資料的result欄位值
tableData[i].result = 'OK';
// 重新加载表格数据
layui.table.reload('query', {
data: tableData,
page: false,
limit: 2000
});
} else {
layer.msg('還原失敗,原因:' + result.data.msg, { icon: 2 });
if (result.success) {
layer.msg(result.msg, { icon: 1 });
// 手动触发按钮的点击事件
$('#submitBtn').click();
}
else {
layer.msg(result.msg, { icon: 2 });
}
},
error: function (error) {
layer.msg('還原失敗!原因:' + error.msg, { icon: 2 });
layer.msg('刪除失敗!原因:' + error.msg, { icon: 2 });
}
});
}
});
});
//监听表单提交事件
hg.form.onsubmit('querysubmit', function (data) {
hg.msghide("載入資料..");
//table && table.reload(data);
//setTimeout(getTableRowCount(), 500); // 延遲 100 毫秒執行
layui.table.reload('query', {
where: {
recordNumber: data.RecordNumber,
@ -187,9 +201,6 @@
materialNo: data.MaterialNo,
shippingSN: data.ShippingSN
},
page: {
curr: 1
},
done: function (res, curr, count) {
// 表格更新成功後計算資料筆數
getTableRowCount();

23
AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs

@ -3667,7 +3667,8 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetData4PTD003(string recordType, string recordNumber, string lineNo, string materialNo, string shippingSN, string dateStart, string dateEnd, string RBU)
public async Task<ResultModel<dynamic>> GetData4PTD003(string recordType, string recordNumber, string lineNo, string materialNo, string shippingSN,
string dateStart, string dateEnd, string RBU ,string soNumber, string soLineNo ,string customer)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
//安勤連線
@ -3682,7 +3683,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
{
string strSQL = $@"SELECT a.RecordTypeID ,a.RecordNumber ,a.RCLineNO 'LineNo',
a.SerialNumber 'SN',a.ProductID ,a.EmplID 'Customer',a.LocationID 'Location',
a.CreatorID , a.RecordDate
a.CreatorID , a.RecordDate , a.SalesOrderNumber AS soNumber , a.SOLineNO AS soLineNo
FROM SFIS_PTD.dbo.ZProductTrans a where 1=1 ";
if (recordType != null && recordType != "" && recordType != "全部")
{
@ -3720,8 +3721,23 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
strSQL += $" And a.RecordDate Between '{dateStart.Replace("/", "-") + " 00:00:00"}' And '{dateEnd.Replace("/", "-") + " 23:59:59"}'";
}
if (!string.IsNullOrWhiteSpace(soNumber))
{
strSQL += $" And a.SalesOrderNumber like '{soNumber}%'";
}
if (!string.IsNullOrWhiteSpace(soLineNo))
{
strSQL += $" And a.SOLineNO like '{soLineNo}%'";
}
if (!string.IsNullOrWhiteSpace(customer))
{
strSQL += $" And a.EmplID like '{customer}%'";
}
//排序:ZProductTrans.CreateDate DESC
strSQL += " Order by a.RecordDate DESC";
strSQL += " ORDER BY a.HistoryID ,a.RecordNumber ,a.RCLineNO";
DataTable dtZProductTrans = new DataTable();
using (var cmd = connPTD.CreateCommand())
@ -4712,6 +4728,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
result.Msg = "OK";
return result;
}
[Route("[action]")]
[HttpPost]
public async Task<ResultModel<dynamic>> PostPTD007Commit(PTD007CommitDataModel Data)

266
AMESCoreStudio.WebApi/Controllers/PTD/PTDController.cs

@ -1,23 +1,13 @@
using AMESCoreStudio.CommonTools.Result;
using AMESCoreStudio.WebApi.Models.BAS;
using Dapper;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Threading.Tasks;
using System;
using System.Net.Mail;
using Microsoft.Extensions.Configuration;
using System.Net;
using System.Linq;
using System.Text.RegularExpressions;
using System.IO;
using Dapper;
using AMESCoreStudio.WebApi.Extensions;
using AMESCoreStudio.WebApi.Models.AMES;
using System.Data;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Extensions.Options;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
using System.Linq;
using System.Threading.Tasks;
namespace AMESCoreStudio.WebApi.Controllers.PTD
{
@ -121,9 +111,38 @@ namespace AMESCoreStudio.WebApi.Controllers.PTD
}
}
/// <summary>
/// 更新 PTD ZDNDetail RecordNumber ByisRecord 已扣帳狀態
/// </summary>
/// <param name="dnNo">RecordNumber</param>
/// <param name="dnlineNo">LineNo</param>
/// <param name="isRecord">已扣障 0:未完成 1:已完成</param>
/// <returns></returns>
[HttpPut("PutZDNDetail")]
public async Task<ActionResult<int>> PutZDNDetailByIsRecord(string dnNo, string dnlineNo, int isRecord)
{
using (IDbConnection ptdConnection = new SqlConnection(_PTDContext))
{
if (ptdConnection.State != ConnectionState.Open)
{
ptdConnection.Open();
}
var query = @" UPDATE SFIS_PTD.dbo.ZDNDetail
SET IsRecord = @isRecord
WHERE DNNO = @dnNo
AND DNLineNO = @dnlineNo ";
DynamicParameters p = new DynamicParameters();
p.Add("dnNo", dnNo);
p.Add("dnlineNo", dnlineNo);
p.Add("isRecord", isRecord);
var result = await ptdConnection.ExecuteAsync(query, p);
return result;
}
}
#endregion
#region ZSNInfo 主表
#region ZSNInfo 主表 表頭
/// <summary>
/// 查詢 PTD ZSNInfo 主表 序號區間
@ -132,7 +151,7 @@ namespace AMESCoreStudio.WebApi.Controllers.PTD
/// <param name="endNumber">條碼區間訖</param>
/// <returns></returns>
[HttpGet("ZSNInfoByIntervalNumber")]
public async Task<List<dynamic>> GetZSNInfoByIntervalNumber(string strNumber , string endNumber)
public async Task<List<dynamic>> GetZSNInfoByIntervalNumber(string strNumber, string endNumber)
{
using (IDbConnection ptdConnection = new SqlConnection(_PTDContext))
{
@ -176,6 +195,66 @@ namespace AMESCoreStudio.WebApi.Controllers.PTD
#endregion
#region ZProductTrans 表身資料
/// <summary>
/// 查詢 ZProductTrans
/// </summary>
/// <param name="serialNumber">序號</param>
/// <param name="recordNumber">RecordNumber</param>
/// <param name="lineNo">LineNo</param>
/// <param name="productID">料號</param>
/// <param name="recordTypeID">類型</param>
/// <returns></returns>
[HttpGet("GetZProductTrans")]
public async Task<List<dynamic>> GetZProductTrans(string serialNumber, string recordNumber, string lineNo, string productID, string recordTypeID)
{
using (IDbConnection ptdConnection = new SqlConnection(_PTDContext))
{
if (ptdConnection.State != ConnectionState.Open)
{
ptdConnection.Open();
}
var query = @$" SELECT * FROM SFIS_PTD.dbo.ZProductTrans WHERE 1=1 ";
DynamicParameters p = new DynamicParameters();
if (!string.IsNullOrWhiteSpace(serialNumber))
{
query += $" And SerialNumber =@serialNumber ";
p.Add("serialNumber", serialNumber);
}
if (!string.IsNullOrWhiteSpace(recordNumber))
{
query += $" And RecordNumber =@recordNumber ";
p.Add("recordNumber", recordNumber);
}
if (!string.IsNullOrWhiteSpace(lineNo))
{
query += $" And RCLineNO =@lineNo ";
p.Add("lineNo", lineNo);
}
if (!string.IsNullOrWhiteSpace(productID))
{
query += $" And ProductID =@productID ";
p.Add("productID", productID);
}
if (!string.IsNullOrWhiteSpace(recordTypeID))
{
query += $" And RecordTypeID =@recordTypeID ";
p.Add("recordTypeID", recordTypeID);
}
var q = await ptdConnection.QueryAsync<dynamic>(query, p);
return q.ToList();
}
}
#endregion
#region ZWHPickListDetail 備貨表
/// <summary>
@ -256,6 +335,159 @@ namespace AMESCoreStudio.WebApi.Controllers.PTD
#endregion
/// <summary>
/// PTD008 還原作業 => 還原
/// </summary>
/// <param name="serialNumber">序號</param>
/// <param name="recordNumber">RecordNumber</param>
/// <param name="lineNo">LineNo</param>
/// <param name="productID">料號</param>
/// <returns></returns>
[HttpPut("PTD008")]
public async Task<bool> Put_PTD008(string serialNumber, string recordNumber, string lineNo, string productID)
{
using (IDbConnection ptdConnection = new SqlConnection(_PTDContext))
{
if (ptdConnection.State != ConnectionState.Open)
{
ptdConnection.Open();
}
using (var tran = ptdConnection.BeginTransaction())
{
try
{
// 刪除 ZProductTrans
var query = @" DELETE SFIS_PTD.dbo.ZProductTrans
WHERE SerialNumber = @serialNumber
AND RecordNumber = @recordNumber
AND RCLineNO = @lineNo
AND ProductID = @productID ";
DynamicParameters p = new DynamicParameters();
p.Add("serialNumber", serialNumber);
p.Add("recordNumber", recordNumber);
p.Add("lineNo", lineNo);
p.Add("productID", productID);
await ptdConnection.ExecuteAsync(query, p, tran);
// 更新 ZSNInfo
query = @" UPDATE SFIS_PTD.dbo.ZSNInfo SET
RecordTypeID =
(SELECT TOP (1) [RecordTypeID]
FROM SFIS_PTD.dbo.ZProductTrans
WHERE SerialNumber =@serialNumber
ORDER BY CREATEDATE DESC)
WHERE SerialNumber =@serialNumber ";
p = new DynamicParameters();
p.Add("serialNumber", serialNumber);
await ptdConnection.ExecuteAsync(query, p, tran);
// 刪除 ZWHPickListDetail
query = @" DELETE SFIS_PTD.dbo.ZWHPickListDetail
WHERE InputSN = @serialNumber
AND RecordNumber = @recordNumber
AND RCLineNO = @lineNo
AND ProductID = @productID ";
p = new DynamicParameters();
p.Add("serialNumber", serialNumber);
p.Add("recordNumber", recordNumber);
p.Add("lineNo", lineNo);
p.Add("productID", productID);
await ptdConnection.ExecuteAsync(query, p, tran);
// 更新 ZHistoryKeyDefine
query = @" UPDATE SFIS_PTD.dbo.ZHistoryKeyDefine SET Seed = Seed - 1
WHERE SerialNumber = @serialNumber ";
p = new DynamicParameters();
p.Add("serialNumber", serialNumber);
await ptdConnection.ExecuteAsync(query, p, tran);
tran.Commit();
return true;
}
catch (Exception ex)
{
tran.Rollback();
return false;
}
}
}
}
/// <summary>
/// PTD008 還原作業 => 刪除
/// </summary>
/// <param name="serialNumber">序號</param>
/// <param name="recordNumber">RecordNumber</param>
/// <param name="lineNo">LineNo</param>
/// <param name="productID">料號</param>
/// <returns></returns>
[HttpDelete("PTD008")]
public async Task<bool> Del_PTD008(string serialNumber, string recordNumber, string lineNo, string productID)
{
using (IDbConnection ptdConnection = new SqlConnection(_PTDContext))
{
if (ptdConnection.State != ConnectionState.Open)
{
ptdConnection.Open();
}
using (var tran = ptdConnection.BeginTransaction())
{
try
{
// 刪除 ZProductTrans
var query = @" DELETE SFIS_PTD.dbo.ZProductTrans
WHERE SerialNumber = @serialNumber
AND RecordNumber = @recordNumber
AND RCLineNO = @lineNo
AND ProductID = @productID ";
DynamicParameters p = new DynamicParameters();
p.Add("serialNumber", serialNumber);
p.Add("recordNumber", recordNumber);
p.Add("lineNo", lineNo);
p.Add("productID", productID);
await ptdConnection.ExecuteAsync(query, p , tran);
// 刪除 ZSNInfo
query = @" DELETE SFIS_PTD.dbo.ZSNInfo
WHERE SerialNumber = @serialNumber ";
p = new DynamicParameters();
p.Add("serialNumber", serialNumber);
await ptdConnection.ExecuteAsync(query, p, tran);
// 刪除 ZWHPickListDetail
query = @" DELETE SFIS_PTD.dbo.ZWHPickListDetail
WHERE InputSN = @serialNumber
AND RecordNumber = @recordNumber
AND RCLineNO = @lineNo
AND ProductID = @productID ";
p = new DynamicParameters();
p.Add("serialNumber", serialNumber);
p.Add("recordNumber", recordNumber);
p.Add("lineNo", lineNo);
p.Add("productID", productID);
await ptdConnection.ExecuteAsync(query, p, tran);
// 刪除 ZHistoryKeyDefine
query = @" DELETE SFIS_PTD.dbo.ZHistoryKeyDefine
WHERE SerialNumber = @serialNumber ";
p = new DynamicParameters();
p.Add("serialNumber", serialNumber);
await ptdConnection.ExecuteAsync(query, p, tran);
tran.Commit();
return true;
}
catch(Exception ex)
{
tran.Rollback();
return false;
}
}
}
}
}
}

Loading…
Cancel
Save