Browse Source

1. 過站去前後空白

2. 過站判斷流程,部分加入工單號碼
3. PTD 扣帳作業及一段式 RecordDate 改加入時間
       查詢作業加入帳號判斷顯示時區,查詢欄位多顯示時間,修正查詢頁數問題
4. 工單效率顯示 中午休息時間改扣50分鐘
PTD
Sai 9 months ago
parent
commit
77a863a351
  1. 23
      AMESCoreStudio.Web/Controllers/PCSController.cs
  2. 10
      AMESCoreStudio.Web/Controllers/PTDController.cs
  3. 2
      AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs
  4. 665
      AMESCoreStudio.Web/Views/PTD/PTD002Old.cshtml
  5. 8
      AMESCoreStudio.Web/Views/PTD/PTD003.cshtml
  6. 8
      AMESCoreStudio.Web/Views/PTD/PTD006.cshtml
  7. 690
      AMESCoreStudio.Web/Views/PTD/PTD006Old.cshtml
  8. 193
      AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs
  9. 2
      AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckNewController.cs
  10. 8
      AMESCoreStudio.WebApi/Controllers/BLL/RPTController.cs

23
AMESCoreStudio.Web/Controllers/PCSController.cs

@ -6316,11 +6316,12 @@ namespace AMESCoreStudio.Web.Controllers
// ResultModel // ResultModel
string Msg = string.Empty; string Msg = string.Empty;
bool Success = true; bool Success = true;
var input = model.Input.Trim().ToUpper();
string Data = input;
if (string.IsNullOrWhiteSpace(model.Input)) if (string.IsNullOrWhiteSpace(input))
return Json(new Result1() { success = Success, msg = Msg, data = "", data1 = "" }); return Json(new Result1() { success = Success, msg = Msg, data = "", data1 = "" });
string Data = model.Input.ToUpper();
// 刷入條碼+異常欄位 // 刷入條碼+異常欄位
if (!string.IsNullOrWhiteSpace(model.InputNo)) if (!string.IsNullOrWhiteSpace(model.InputNo))
Data += "@" + model.InputNo; Data += "@" + model.InputNo;
@ -6340,7 +6341,7 @@ namespace AMESCoreStudio.Web.Controllers
Msg += "請選擇作業站</br>"; Msg += "請選擇作業站</br>";
} }
if (string.IsNullOrWhiteSpace(model.Input)) if (string.IsNullOrWhiteSpace(input))
{ {
Msg += "請刷讀條碼</br>"; Msg += "請刷讀條碼</br>";
} }
@ -6352,7 +6353,7 @@ namespace AMESCoreStudio.Web.Controllers
} }
#endregion #endregion
var q = await _pcsApi.CheckBarCodeByWipNo(model.Input, model.WipNO.Trim().ToUpper()); var q = await _pcsApi.CheckBarCodeByWipNo(input, model.WipNO.Trim().ToUpper());
// 判斷是否序號與工單號碼是否對應條碼區間值,沒對應到視為組件或不良代碼 // 判斷是否序號與工單號碼是否對應條碼區間值,沒對應到視為組件或不良代碼
if (q.Success) if (q.Success)
{ {
@ -6395,7 +6396,7 @@ namespace AMESCoreStudio.Web.Controllers
var keyParts = new List<BarCodeCheckDto.inputItem>(); var keyParts = new List<BarCodeCheckDto.inputItem>();
// 先查詢已綁定組件數量 By WipID // 先查詢已綁定組件數量 By WipID
var BarCodeItems = await _pcsApi.GetBarcodeItemByBarCode(model.Input); var BarCodeItems = await _pcsApi.GetBarcodeItemByBarCode(input);
BarCodeItems = BarCodeItems.Where(w => w.S.UnitNo == stationUnit && w.WipID == model.WipID).ToList(); BarCodeItems = BarCodeItems.Where(w => w.S.UnitNo == stationUnit && w.WipID == model.WipID).ToList();
// WipKps - BarCodeItem 剩下未綁定的KpNo // WipKps - BarCodeItem 剩下未綁定的KpNo
@ -6497,7 +6498,7 @@ namespace AMESCoreStudio.Web.Controllers
var x = new BarCodeCheckDto var x = new BarCodeCheckDto
{ {
wipNo = model.WipNO, wipNo = model.WipNO,
barcode = model.Input, barcode = input,
barcodeType = "M", barcodeType = "M",
stationID = model.Station, stationID = model.Station,
line = model.LineID, line = model.LineID,
@ -6509,7 +6510,7 @@ namespace AMESCoreStudio.Web.Controllers
var barcode_result = await _pcsApi.PassIngByCheck(JsonConvert.SerializeObject(x)); var barcode_result = await _pcsApi.PassIngByCheck(JsonConvert.SerializeObject(x));
if (!barcode_result.Success) if (!barcode_result.Success)
return Json(new Result() { success = barcode_result.Success, msg = barcode_result.Msg, data = Data }); return Json(new Result() { success = barcode_result.Success, msg = barcode_result.Msg, data = input });
// 過站判斷成功 // 過站判斷成功
else else
{ {
@ -6524,20 +6525,20 @@ namespace AMESCoreStudio.Web.Controllers
var items = await _pcsApi.GetItems(); var items = await _pcsApi.GetItems();
items = items.Where(w => model.WipKps.Any(wi => wi.KpNo.Trim().ToUpper() == w.ItemNo.Trim().ToUpper())).ToList(); items = items.Where(w => model.WipKps.Any(wi => wi.KpNo.Trim().ToUpper() == w.ItemNo.Trim().ToUpper())).ToList();
// 判斷Input為指定KeyParts順序 // 判斷Input為指定KeyParts順序
if (items.Any(a => a.ItemName.ToUpper() == Data.ToUpper())) if (items.Any(a => a.ItemName.ToUpper() == input))
{ {
if (model.KpItemName != null) if (model.KpItemName != null)
{ {
// 取得目前Input指定KP代碼的綁定數量 // 取得目前Input指定KP代碼的綁定數量
var KpItemNameByCount = model.KpItemName.Split(",").Where(w => w.ToUpper() == Data.ToUpper()).Count(); var KpItemNameByCount = model.KpItemName.Split(",").Where(w => w.ToUpper() == input).Count();
// WipKp的ByKpNo數量 // WipKp的ByKpNo數量
var WipKpByCount = model.WipKps.Where(w1 => w1.KpNo == items.Where(w => w.ItemName.ToUpper() == Data.ToUpper()) var WipKpByCount = model.WipKps.Where(w1 => w1.KpNo == items.Where(w => w.ItemName.ToUpper() == input)
.Select(s => s.ItemNo).FirstOrDefault()).Count(); .Select(s => s.ItemNo).FirstOrDefault()).Count();
// 目前綁定KpNo 等於 WipKp ByKpNo 數量 // 目前綁定KpNo 等於 WipKp ByKpNo 數量
if (KpItemNameByCount == WipKpByCount) if (KpItemNameByCount == WipKpByCount)
{ {
Success = false; Success = false;
Msg = $"指定KeyParts:{Data} 已超過資料設定數量</br>"; Msg = $"指定KeyParts:{input} 已超過資料設定數量</br>";
return Json(new Result() { success = Success, msg = Msg, data = Data }); return Json(new Result() { success = Success, msg = Msg, data = Data });
} }
} }

10
AMESCoreStudio.Web/Controllers/PTDController.cs

@ -264,7 +264,7 @@ namespace AMESCoreStudio.Web.Controllers
} }
List<WebApi.Models.AMES.RecordTypeInfo> RecordTypes = await _pcsApi.GetRecordTypeInfo(); List<WebApi.Models.AMES.RecordTypeInfo> RecordTypes = await _pcsApi.GetRecordTypeInfo();
var allRecordType = new[] { "653", "632", "261", "101R", "201", "202", "291", "292", "601", "601DB", "657" }; var allRecordType = new[] { "653", "632", "261", "262", "101R", "201", "202", "291", "292", "601", "601DB", "657", "952", "634" };
var filtered = from o in RecordTypes var filtered = from o in RecordTypes
where allRecordType.Contains(o.ID) where allRecordType.Contains(o.ID)
select o; select o;
@ -353,14 +353,14 @@ namespace AMESCoreStudio.Web.Controllers
return View(); return View();
} }
public async Task<IActionResult> PTD003QueryAsync(string recordType, string recordNumber, string lineNo, string materialNo, string shippingSN, string dateStart, string dateEnd, int autoLoad = 0) 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)
{ {
//if (recordNumber == null || recordNumber == "") //if (recordNumber == null || recordNumber == "")
// return Json(new Table() { count = 0, data = null }); // return Json(new Table() { count = 0, data = null });
if (autoLoad == 0) if (autoLoad == 0)
return Json(new Table() { count = 0, data = null }); return Json(new Table() { count = 0, data = null });
var result = await _pcsApi.GetData4PTD003(recordType, recordNumber, lineNo, materialNo, shippingSN, dateStart, dateEnd); var result = await _pcsApi.GetData4PTD003(recordType, recordNumber, lineNo, materialNo, shippingSN, dateStart, dateEnd, RBU);
if (result.DataTotal > 0) if (result.DataTotal > 0)
{ {
return Json(new Table() { code = 0, msg = "", data = result.Data, count = result.DataTotal }); return Json(new Table() { code = 0, msg = "", data = result.Data, count = result.DataTotal });
@ -591,12 +591,12 @@ namespace AMESCoreStudio.Web.Controllers
ViewBag.RecordDate = System.DateTime.Now.ToString("yyyy/MM/dd"); ViewBag.RecordDate = System.DateTime.Now.ToString("yyyy/MM/dd");
return View(); return View();
} }
public async Task<IActionResult> PTD006QueryAsync(string recordNumber, string? LineNO) public async Task<IActionResult> PTD006QueryAsync(string recordNumber, string lineNo = null)
{ {
if (recordNumber == null || recordNumber == "") if (recordNumber == null || recordNumber == "")
return Json(new Table() { count = 0, data = null }); return Json(new Table() { count = 0, data = null });
var result = await _pcsApi.GetZWHPickListDetail(recordNumber, LineNO); var result = await _pcsApi.GetZWHPickListDetail(recordNumber, lineNo);
if (result.DataTotal > 0) if (result.DataTotal > 0)
{ {
return Json(new Table() { code = 0, msg = "", data = result.Data, count = result.DataTotal }); return Json(new Table() { code = 0, msg = "", data = result.Data, count = result.DataTotal });

2
AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs

@ -1993,7 +1993,7 @@ namespace AMESCoreStudio.Web
ITask<List<RecordTypeInfo>> GetRecordTypes(); ITask<List<RecordTypeInfo>> GetRecordTypes();
[WebApiClient.Attributes.HttpGet("api/WipInfos/GetData4PTD003")] [WebApiClient.Attributes.HttpGet("api/WipInfos/GetData4PTD003")]
ITask<ResultModel<dynamic>> GetData4PTD003(string recordType, string recordNumber, string lineNo, string materialNo, string shippingSN, string dateStart, string dateEnd); ITask<ResultModel<dynamic>> GetData4PTD003(string recordType, string recordNumber, string lineNo, string materialNo, string shippingSN, string dateStart, string dateEnd ,string RBU);
[WebApiClient.Attributes.HttpGet("api/WipInfos/GetCustomer/{recordNumber}")] [WebApiClient.Attributes.HttpGet("api/WipInfos/GetCustomer/{recordNumber}")]
ITask<string> GetCustomer(string recordNumber); ITask<string> GetCustomer(string recordNumber);

665
AMESCoreStudio.Web/Views/PTD/PTD002Old.cshtml

@ -0,0 +1,665 @@
@{
ViewData["Title"] = "一段式入出庫作業";
Layout = "~/Views/Shared/_AMESLayout.cshtml";
}
<style type="text/css">
.layui-table-main .layui-table-cell {
/*height: auto !important;*/
white-space: normal;
}
.layui-table img {
max-width: 60px;
max-height: 28px;
}
.layui-tree-main {
cursor: pointer;
padding-right: 10px;
float: left;
border-width: 1px;
border-style: solid;
border-color: #e6e6e6;
margin: 10px 0;
}
.green-background {
background-color: lightgreen;
}
</style>
<div class="layui-card">
<div class="layui-card-header">
<div class="layui-form">
<div class="layui-form-item">
<div class="layui-inline"><i class="fa fa-file-text-o fa-fw"></i> @ViewBag.Title</div>
</div>
</div>
</div>
<div class="layui-card-body">
<div class="layui-form">
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-col-md10">
<label class="layui-form-label">Record Type:</label>
<div class="layui-input-inline" style="width:150px">
<select id="recordType" lay-event="RecordType" lay-filter="RecordType" name="recordType" lay-submit asp-items="@ViewBag.RecordType" lay-search>
</select>
</div>
<div class="layui-input-inline" style="width:100px">
<input id="WorkCenter" name="WorkCenter" autocomplete="off" class="layui-input green-background" value="@ViewBag.WorkCenter">
</div>
<div class="layui-input-inline" style="width:100px">
<input id="RBU" name="RBU" autocomplete="off" class="layui-input green-background" value="@ViewBag.RBU">
</div>
<label class="layui-form-label">RMA NO:</label>
<div class="layui-input-inline" style="width:150px">
<input id="RMANo" name="RMANo" autocomplete="off" class="layui-input" value="@ViewBag.RMANo">
</div>
<label class="layui-form-label">Record Date:</label>
<div class="layui-input-inline" style="width:150px">
<input id="recordDate" name="RecordDate" autocomplete="off" class="layui-input" value="@ViewBag.RecordDate">
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-col-md10">
<div class="layui-inline">
<label class="layui-form-label">RecordNumber:</label>
<div class="layui-input-inline" style="width:150px">
<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">
</div>
<label class="layui-form-label">Location:</label>
<div class="layui-input-inline" style="width:120px">
<input id="Location" name="Location" autocomplete="off" class="layui-input" value="@ViewBag.Location">
</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 green-background" value="@ViewBag.Customer">
</div>
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">料號:</label>
<div class="layui-input-inline" style="width:150px">
<input id="PartNumber" name="PartNumber" autocomplete="off" class="layui-input" value="@ViewBag.PartNumber">
</div>
<div class="layui-input-inline" style="width:500px">
<input id="PartDesc" name="PartDesc" autocomplete="off" class="layui-input green-background" placeholder="料號說明" value="@ViewBag.PartDesc">
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-inline" style="margin-right: 100px;">
<label class="layui-form-label">資料群組:</label>
<input type="radio" name="StockUnit" id="box" value="1" title="Box No(安勤或昶亨生產)" lay-filter="radio-filter" checked />
<input type="radio" name="StockUnit" id="pcs" value="0" title="PCS" lay-filter="radio-filter" />
</div>
<div class="layui-inline" style="margin-right: 150px;">
<div class="layui-input-inline" style="width:100px">
<input type="checkbox" id="PCSUnit" lay-skin="primary" title="Begin=End" lay-filter="check-filter" disabled />
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-card-body">
<div class="layui-form-item">
<div class="layui-inline">
<div class="layui-input-inline" style="text-align:left;">
<input type="radio" name="select" value="1" title="Scanner" />
</div>
<div class="layui-input-inline" style="margin-left: 0;">
<input class="layui-input" id="frontSN" autocomplete="off" />
</div>
<div class="layui-form-mid">~</div>
<div class="layui-input-inline">
<input class="layui-input" id="endSN" autocomplete="off" />
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">備貨量:</label>
<div class="layui-input-inline" style="width:70px">
<input id="StockQty" name="StockQty" autocomplete="off" class="layui-input" value="@ViewBag.StockQty">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<div class="layui-input-inline layui-col-sm4" style="text-align:left;">
<input type="radio" name="select" value="0" title="Data" checked="" />
</div>
<div class="layui-input-inline">
<textarea class="layui-textarea" id="SNData"></textarea>
</div>
<input type="file" id="excelFileInput" style="display: none;" />
<button class="layui-btn" onclick="importExcel()">匯入</button>
</div>
<div class="layui-inline">
<label class="layui-form-label">作業備註</label>
<div class="layui-input-block">
<textarea placeholder="作業人員輸入備註" class="layui-textarea"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="layui-inline" style="margin-right:0px;">
<label id="rowCount" class="layui-inline layui-form-label" style="width:130px; color:red;">刷入數量 : 0 pcs</label>
</div>
<table class="layui-hide" id="query" lay-filter="query"></table>
<div class="layui-form-item" style="text-align: right;">
<div class="layui-input-block">
<input type="submit" id="commit" value="確認扣帳" class="layui-btn" />
</div>
</div>
</div>
</div>
@section Scripts{
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.17.4/xlsx.full.min.js"></script>
<script type="text/javascript">
layui.use(['form', 'layer', 'laydate','table'], function () {
laydate = layui.laydate;
laydate.render({
elem: '#recordDate'
, trigger: 'click'
, format: 'yyyy/MM/dd'
, theme: 'grid'
});
form.on('radio(radio-filter)', function (data) {
var elem = data.elem; // 获得 radio 原始 DOM 对象
var checked = elem.checked; // 获得 radio 选中状态
var value = elem.value; // 获得 radio 值
var checkboxElem = layui.$('input[lay-filter="check-filter"]');
if (value == 0 && checked) {
checkboxElem.prop('disabled', false);
checkboxElem.prop('checked', true);
// 重新渲染表单元素
layui.form.render('checkbox');
} else {
// 如果radio按钮未选中
checkboxElem.prop('disabled', true);
checkboxElem.prop('checked', false);
// 重新渲染表单元素
layui.form.render('checkbox');
}
});
});
</script>
<script type="text/javascript">
//控項event
$('#recordNumber').on('keypress', function (event) {
if (event.keyCode == 13) {
var recordNumber = document.getElementById('recordNumber').value;
var recordType = document.getElementById('recordType').value;
var recordTypeInfo = @Html.Raw(Json.Serialize(ViewBag.RecordTypeInfo));
var filteredInfo = recordTypeInfo.find(function (info) {
return info.id === recordType;
});
console.log(filteredInfo);
//check recordNumber
if (recordNumber.length !== filteredInfo.length) {
layer.msg('請確認recordNumber碼長!', { icon: 2 });
$("#recordNumber").val('');
return;
}
// Check if recordNumber starts with prefixCode
var prefixCode = filteredInfo.prefixCode;
if (!recordNumber.startsWith(prefixCode)) {
layer.msg('recordNumber開頭必須是:' + prefixCode, { icon: 2 });
$("#recordNumber").val('');
return;
}
var lineNo = document.getElementById('lineNo');
lineNo.focus();
}
});
$('#lineNo').on('keypress', function (event) {
if (event.keyCode == 13) {
// 获取 recordNumber 和 lineNo 的值
var recordNumber = document.getElementById('recordNumber').value;
var lineNo = document.getElementById('lineNo').value;
// 发送 AJAX 请求到 Controller
$.ajax({
url: '@Url.Action("GetZDNDetailJson", "PTD")',
type: 'POST',
data: { recordNumber: recordNumber, lineNo: lineNo },
success: function (result) {
// 处理成功的情况
if (result.data.data.length > 0) {
$.each(result.data.data, function (index, item) {
$("#Customer").val(item.soldCustomerID);
$('#PartNumber').val(item.productID);
getItemDesc(document.getElementById('PartNumber').value);
});
}
},
error: function (error) {
// 处理错误的情况
console.log(error);
}
});
}
});
$('#PartNumber').on('keypress', function (event) {
if (event.keyCode == 13) {
getItemDesc(document.getElementById('PartNumber').value);
}
});
$('#frontSN').on('keypress', function (event) {
if (event.keyCode == 13) {
var endSN = document.getElementById('endSN');
var frontSN = document.getElementById('frontSN');
var dnNo = document.getElementById('recordNumber');
var lineNo = document.getElementById('lineNo');
var material = document.getElementById('PartNumber');
var table = layui.table;
var rowAmount = table.cache['query'].length;
if (document.getElementById('PCSUnit').checked) {
rowAmount++;
var newRowData = {
itemNo: rowAmount,
dnNo: dnNo.value,
lineNo: lineNo.value,
material: material.value,
sn: frontSN.value
};
// Add the new row data to the table
hg.table.addRow('query', newRowData);
frontSN.focus();
frontSN.select();
}
else {
endSN.focus();
endSN.select();
}
}
});
$('#endSN').on('keypress', function (event) {
if (event.keyCode == 13) {
var frontSN = document.getElementById('frontSN');
var endSN = document.getElementById('endSN');
var dnNo = document.getElementById('recordNumber');
var lineNo = document.getElementById('lineNo');
var material = document.getElementById('PartNumber');
var table = layui.table;
var rowAmount = table.cache['query'].length;
var prefixCode = frontSN.value.slice(0, -5);
var currentSN = parseInt(frontSN.value.slice(-5));
while (currentSN <= parseInt(endSN.value.slice(-5))) {
rowAmount++;
var newRowData = {
itemNo: rowAmount,
dnNo: dnNo.value,
lineNo: lineNo.value,
material: material.value,
sn: prefixCode + currentSN.toString().padStart(5, "0")
};
// Add the new row data to the table
hg.table.addRow('query', newRowData);
currentSN++;
}
frontSN.focus();
frontSN.select();
}
});
$('#SNData').on('keypress', function (event) {
if (event.keyCode == 13) {
var SNData = document.getElementById('SNData');
var dnNo = document.getElementById('recordNumber');
var lineNo = document.getElementById('lineNo');
var material = document.getElementById('PartNumber');
var table = layui.table;
var rowAmount = table.cache['query'].length;
if (SNData.value.trim() == "") {
hg.msg('SN不得為空!');
return;
}
var arr = SNData.value.split('\n');
$.each(arr, function (index, SN) {
rowAmount++;
var newRowData = {
itemNo: rowAmount,
dnNo: dnNo.value,
lineNo: lineNo.value,
material: material.value,
sn: SN
};
// Add the new row data to the table
hg.table.addRow('query', newRowData);
});
SNData.select();
event.preventDefault();
}
});
$('#commit').on('click', function () {
var recordType = document.getElementById('recordType').value;
var workCenter = document.getElementById('WorkCenter').value;
var rbu = document.getElementById('RBU').value;
var rmaNo = document.getElementById('RMANo').value;
var recordDate = document.getElementById('recordDate').value;
var location = document.getElementById('Location').value;
var customer = document.getElementById('Customer').value;
var material = document.getElementById('PartNumber').value;
var tableData = layui.table.cache['query'];
//if (customer === "") {
// hg.msg('Customer不得為空!');
// return; // Do not add the row
//}
if (material === "") {
hg.msg('料號不得為空!');
return; // Do not add the row
}
var postData = {
recordType: recordType,
workCenter: workCenter,
rbu: rbu,
rmaNo: rmaNo,
recordDate: recordDate,
location: location,
customer: customer,
tableData: tableData
};
$.ajax({
url: '@Url.Action("PTD002_Commit", "PTD")',
dataType: 'json',
data: { data: JSON.stringify(postData) },
type: 'POST',
success: function (result) {
console.log("扣帳結果:");
console.log(result);
if (result.data.success) {
$.each(result.data.data, function (index, value) {
// 找到要删除的行的索引
var rowIndex = tableData.findIndex(function (row) {
return row.sn === value;
});
// 从表格数据中删除该行
if (rowIndex !== -1) {
tableData.splice(rowIndex, 1);
// 重新加载表格数据
layui.table.reload('query', {
data: tableData,
page: false,
limit: 2000
});
calculateRowCount(tableData);
} else {
layer.msg('未找到要刪除的數據', { icon: 2 });
}
});
layer.msg('扣帳成功!', { icon: 1 });
//清空SN資訊
$("#endSN").val('');
$("#frontSN").val('');
$("#SNData").val('');
} else {
layer.msg('扣帳失敗,原因:' + result.data.msg, { icon: 2 });
}
},
error: function (error) {
layer.msg('扣帳失敗!原因:' + error.msg, { icon: 2 });
}
});
});
$('#StockQty').on('keypress', function (event) {
if (event.keyCode == 13 && document.getElementById('pcs').checked && !document.getElementById('PCSUnit').checked) {
var frontSN = document.getElementById('frontSN');
var StockQty = document.getElementById('StockQty');
var dnNo = document.getElementById('recordNumber');
var lineNo = document.getElementById('lineNo');
var material = document.getElementById('PartNumber');
var table = layui.table;
var rowAmount = table.cache['query'].length;
var prefixCode = frontSN.value.slice(0, -5);
var currentSN = parseInt(frontSN.value.slice(-5));
for (var i = 1; i <= parseInt(StockQty.value); i++) {
rowAmount++;
var newRowData = {
itemNo: rowAmount,
dnNo: dnNo.value,
lineNo: lineNo.value,
material: material.value,
sn: prefixCode + currentSN.toString().padStart(5, "0")
};
// Add the new row data to the table
hg.table.addRow('query', newRowData);
currentSN++;
}
frontSN.focus();
frontSN.select();
}
});
function getItemDesc(itemNo) {
$.ajax({
url: "/BAS/GetMaterialItemByItemNO",
data: { id: itemNo },
dataType: 'json',
contentType: "application/json",
type: 'get',
success: function (result) {
if (result.data) {
$("#PartDesc").val(result.data.itemDesc);
}
else {
$("#PartDesc").val('');
}
}
});
};
function isSNAlreadyExist(tableId, sn) {
var table = layui.table;
var currentData = table.cache[tableId];
// Check if SN already exists in the table
var isExist = currentData.some(function (row) {
return row.sn === sn;
});
return isExist;
}
function calculateRowCount(table) {
var RowCount = table.length;
$("#rowCount").html("刷入數量: " + RowCount + " pcs");
}
hg.table.addRow = function (tableId, rowData) {
// Get the table instance
var table = layui.table;
if (isSNAlreadyExist(tableId, rowData.sn)) {
// Handle the case where SN already exists
layer.msg('SN 已存在!', { icon: 2 });
return; // Do not add the row
}
// Add the new row data to the table
table.reload(tableId, {
data: [rowData].concat(table.cache[tableId]),
page: false,
limit: 2000
});
calculateRowCount(table.cache[tableId]);
};
function del(obj) {
if (obj.data.itemNo) {
hg.confirm("SN:" + obj.data.sn + ",確定要刪除嗎?", function () {
// 获取表格数据
var tableData = layui.table.cache['query'];
// 找到要删除的行的索引
var rowIndex = tableData.findIndex(function (row) {
return row.itemNo === obj.data.itemNo;
});
// 从表格数据中删除该行
if (rowIndex !== -1) {
tableData.splice(rowIndex, 1);
// 重新加载表格数据
layui.table.reload('query', {
data: tableData,
page: false,
limit: 2000
});
layer.msg('刪除成功', { icon: 1 });
calculateRowCount(tableData);
} else {
layer.msg('未找到要刪除的數據', { icon: 2 });
}
});
}
}
@*function CheckShipQty(recordNumber, lineNo, addQty){
$.ajax(
{
url: "@Url.Action("CheckShipQty", "PTD")",
dataType: 'json',
data: { "recordNumber": recordNumber, "lineNo": lineNo, "addQty": addQty},
type: 'get',
async: false,
success: function (result)
{
console.info("CheckShipQty OK");
console.log(result);
if (result.msg == "OK") {
return true
} else {
return false ;
}
},
error: function (result)
{
return false;
}
});
}*@
//Excel匯入
function importExcel() {
// Trigger click on the hidden file input
document.getElementById('excelFileInput').click();
}
document.getElementById('excelFileInput').addEventListener('change', handleFileSelect);
function handleFileSelect(event) {
var file = event.target.files[0];
if (file) {
var reader = new FileReader();
reader.onload = function (e) {
var data = new Uint8Array(e.target.result);
var workbook = XLSX.read(data, { type: 'array' });
// Assuming the SNs are in the first sheet of the workbook
var sheet = workbook.Sheets[workbook.SheetNames[0]];
var snData = XLSX.utils.sheet_to_json(sheet);
console.log(snData);
// Process SN data and update textarea
updateTextareaWithExcel(snData);
};
reader.readAsArrayBuffer(file);
}
}
function updateTextareaWithExcel(snData) {
var textarea = document.getElementById('SNData'); // Replace with your actual textarea id
var snValues = snData.map(function (obj) {
return obj.SN;
});
// Combine existing data and imported SNs
textarea.value = snValues.join('\n');
}
var tableCols = [[
{
field: 'itemNo',
width: 100,
title: 'Item(項次)'
},
{
field: 'dnNo',
minWidth: 150,
title: 'DN單號'
},
{
field: 'lineNo',
title: 'LineNo',
width: 100
},
{
field: 'material',
title: 'Material(料號)',
width: 150
},
{
field: 'sn',
title: 'SN',
width: 150
},
{
field: 'delete',
width: 100,
title: '刪除',
templet: function (item) {
var btn = ' <a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="del">刪除</a>';
return btn
}
}
]];
//基本数据表格
var table = hg.table.datatable('query', '扣帳資訊', '', {}, tableCols, toolbar, true, 'full-100', ['exports']);
</script>
}

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

@ -231,13 +231,11 @@
var tableCols = [[ var tableCols = [[
{ {
field: 'recordTypeID', field: 'recordTypeID',
width: 120,
title: 'RecordType', title: 'RecordType',
sort: true sort: true
}, },
{ {
field: 'recordNumber', field: 'recordNumber',
width: 160,
title: 'RecordNumber', title: 'RecordNumber',
sort: true sort: true
}, },
@ -249,7 +247,6 @@
}, },
{ {
field: 'sn', field: 'sn',
width: 160,
title: 'SN', title: 'SN',
sort: true sort: true
}, },
@ -280,15 +277,14 @@
{ {
field: 'recordDate', field: 'recordDate',
title: 'RecordDate', title: 'RecordDate',
width: 120, templet: '<div>{{ layui.util.toDateString(d.recordDate, "yyyy/MM/dd HH:mm:ss") }}</div>'
templet: '<div>{{ layui.util.toDateString(d.recordDate, "yyyy/MM/dd") }}</div>'
}] }]
]; ];
//var param = productTypeNo.value + '_' + testTypeNo.value + '_' + unitNo.value + '_' + lineID.value + '_' + stationID.value + '_' + wipNO.value + '_' + itemNO.value + '_' + dateStart.value + '_' + dateEnd.value; //var param = productTypeNo.value + '_' + testTypeNo.value + '_' + unitNo.value + '_' + lineID.value + '_' + stationID.value + '_' + wipNO.value + '_' + itemNO.value + '_' + dateStart.value + '_' + dateEnd.value;
//基本数据表格 //基本数据表格
var table = hg.table.datatable('query', '作業查詢', '/PTD/PTD003Query', { recordType: $("#recordType").val() }, tableCols, toolbar, true, 'full-100', ['filter', 'print', 'exports']); var table = hg.table.datatable('query', '作業查詢', '/PTD/PTD003Query', { recordType: $("#recordType").val() }, tableCols, toolbar, false, 'full-100', ['filter', 'print', 'exports']);
</script> </script>
} }

8
AMESCoreStudio.Web/Views/PTD/PTD006.cshtml

@ -64,11 +64,11 @@
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">RecordNumber:</label> <label class="layui-form-label">RecordNumber:</label>
<div class="layui-input-inline" style="width:150px"> <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> </div>
<label class="layui-form-label">Line NO:</label> <label class="layui-form-label">Line NO:</label>
<div class="layui-input-inline" style="width:150px"> <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> </div>
<label class="layui-form-label">Location:</label> <label class="layui-form-label">Location:</label>
<div class="layui-input-inline" style="width:120px"> <div class="layui-input-inline" style="width:120px">
@ -535,7 +535,7 @@
if (res.success) { if (res.success) {
// 重新加载表格数据 // 重新加载表格数据
layui.table.reload('query', { layui.table.reload('query', {
data: tableData, data: rowData,
page: false, page: false,
limit: 2000 limit: 2000
}); });
@ -543,7 +543,7 @@
calculateRowCount(tableData); calculateRowCount(tableData);
} }
else { else {
hg.msg('備貨失敗,原因:' + result.data.msg); hg.msg('備貨失敗,原因:' + res.msg);
} }
} }
, ,

690
AMESCoreStudio.Web/Views/PTD/PTD006Old.cshtml

@ -0,0 +1,690 @@
@{
ViewData["Title"] = "備貨作業";
Layout = "~/Views/Shared/_AMESLayout.cshtml";
}
<style type="text/css">
.layui-table-main .layui-table-cell {
/*height: auto !important;*/
white-space: normal;
}
.layui-table img {
max-width: 60px;
max-height: 28px;
}
.layui-tree-main {
cursor: pointer;
padding-right: 10px;
float: left;
border-width: 1px;
border-style: solid;
border-color: #e6e6e6;
margin: 10px 0;
}
.green-background {
background-color: lightgreen;
}
</style>
<div class="layui-card">
<div class="layui-card-header">
<div class="layui-form">
<div class="layui-form-item">
<div class="layui-inline"><i class="fa fa-file-text-o fa-fw"></i> @ViewBag.Title</div>
</div>
</div>
</div>
<div class="layui-card-body">
<div class="layui-form">
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-col-md10">
<label class="layui-form-label">Record Type:</label>
<div class="layui-input-inline" style="width:150px">
<select id="recordType" lay-event="RecordType" lay-filter="RecordType" name="recordType" lay-submit asp-items="@ViewBag.RecordType" lay-search>
</select>
</div>
<div class="layui-input-inline" style="width:100px">
<input id="WorkCenter" name="WorkCenter" autocomplete="off" class="layui-input green-background" value="@ViewBag.WorkCenter">
</div>
<div class="layui-input-inline" style="width:100px">
<input id="RBU" name="RBU" autocomplete="off" class="layui-input green-background" value="@ViewBag.RBU">
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-col-md10">
<div class="layui-inline">
<label class="layui-form-label">RecordNumber:</label>
<div class="layui-input-inline" style="width:150px">
<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">
</div>
<label class="layui-form-label">Location:</label>
<div class="layui-input-inline" style="width:120px">
<input id="Location" name="Location" autocomplete="off" class="layui-input" value="@ViewBag.Location">
</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 green-background" value="@ViewBag.Customer">
</div>
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">料號:</label>
<div class="layui-input-inline" style="width:150px">
<input id="PartNumber" name="PartNumber" autocomplete="off" class="layui-input" value="@ViewBag.PartNumber">
</div>
<div class="layui-input-inline" style="width:500px">
<input id="PartDesc" name="PartDesc" autocomplete="off" class="layui-input green-background" placeholder="料號說明" value="@ViewBag.PartDesc">
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-inline" style="margin-right: 100px;">
<label class="layui-form-label">資料群組:</label>
<input type="radio" name="StockUnit" id="box" value="1" title="Box No(安勤或昶亨生產)" lay-filter="radio-filter" checked />
<input type="radio" name="StockUnit" id="pcs" value="0" title="PCS" lay-filter="radio-filter" />
</div>
<div class="layui-inline" style="margin-right: 150px;">
<div class="layui-input-inline" style="width:100px">
<input type="checkbox" id="PCSUnit" lay-skin="primary" title="Begin=End" lay-filter="check-filter" disabled />
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-card-body">
<div class="layui-form-item">
<div class="layui-inline">
<div class="layui-input-inline" style="text-align:left;">
<input type="radio" name="select" value="1" title="Scanner" />
</div>
<div class="layui-input-inline" style="margin-left: 0;">
<input class="layui-input" id="frontSN" autocomplete="off" />
</div>
<div class="layui-form-mid">~</div>
<div class="layui-input-inline">
<input class="layui-input" id="endSN" autocomplete="off" />
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">備貨量:</label>
<div class="layui-input-inline" style="width:70px">
<input id="StockQty" name="StockQty" autocomplete="off" class="layui-input" value="@ViewBag.StockQty">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<div class="layui-input-inline layui-col-sm4" style="text-align:left;">
<input type="radio" name="select" value="0" title="Data" checked="" />
</div>
<div class="layui-input-inline">
<textarea class="layui-textarea" id="SNData"></textarea>
</div>
<input type="file" id="excelFileInput" style="display: none;" />
<button class="layui-btn" onclick="importExcel()">匯入</button>
</div>
<div class="layui-inline">
<label class="layui-form-label">作業備註</label>
<div class="layui-input-block">
<textarea id="ExtNotes" placeholder="作業人員輸入備註" class="layui-textarea"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="layui-inline" style="flex: 1; width: 100%; text-align: right;">
<label id="rowCount" class="layui-inline layui-form-label" style="width: 50%; color: red; text-align: left;">應出貨數量: 0 pcs,目前刷入數量: 0 pcs</label>
<div class="layui-input-inline" style="width:100px">
<input type="submit" id="delAll" value="整批刪除" class="layui-btn" />
</div>
</div>
<table class="layui-hide" id="query" lay-filter="query"></table>
</div>
</div>
@section Scripts{
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.17.4/xlsx.full.min.js"></script>
<script type="text/javascript">
layui.use(['form', 'layer', 'laydate','table'], function () {
form.on('radio(radio-filter)', function (data) {
var elem = data.elem; // 获得 radio 原始 DOM 对象
var checked = elem.checked; // 获得 radio 选中状态
var value = elem.value; // 获得 radio 值
var othis = data.othis; // 获得 radio 元素被替换后的 jQuery 对象
var checkboxElem = layui.$('input[lay-filter="check-filter"]');
if (value == 0 && checked) {
checkboxElem.prop('disabled', false);
checkboxElem.prop('checked', true);
// 重新渲染表单元素
layui.form.render('checkbox');
} else {
// 如果radio按钮未选中
checkboxElem.prop('disabled', true);
checkboxElem.prop('checked', false);
// 重新渲染表单元素
layui.form.render('checkbox');
}
});
});
</script>
<script type="text/javascript">
//控項event
$('#recordNumber').on('keypress', function (event) {
if (event.keyCode == 13) {
var table = layui.table;
var recordNumber = document.getElementById('recordNumber').value;
var recordType = document.getElementById('recordType').value;
var recordTypeInfo = @Html.Raw(Json.Serialize(ViewBag.RecordTypeInfo));
var filteredInfo = recordTypeInfo.find(function (info) {
return info.id === recordType;
});
//check recordNumber
if (recordNumber.length !== filteredInfo.length) {
layer.msg('請確認recordNumber碼長!', { icon: 2 });
$("#recordNumber").val('');
return;
}
// Check if recordNumber starts with prefixCode
var prefixCode = filteredInfo.prefixCode;
if (!recordNumber.startsWith(prefixCode)) {
layer.msg('recordNumber開頭必須是:' + prefixCode, { icon: 2 });
$("#recordNumber").val('');
return;
}
table.reload('query', {
where: {
recordNumber: recordNumber
},
page: {
curr: 1
},
success: function () {
// 表格更新成功後計算資料筆數
calculateRowCount(table.cache['query']);
}
});
var lineNo = document.getElementById('lineNo');
lineNo.focus();
}
});
$('#lineNo').on('keypress', function (event) {
if (event.keyCode == 13) {
var table = layui.table;
// 获取 recordNumber 和 lineNo 的值
var recordNumber = document.getElementById('recordNumber').value;
var lineNo = document.getElementById('lineNo').value;
table.reload('query', {
where: {
recordNumber: recordNumber,
LineNO: lineNo
},
page: {
curr: 1
},
success: function () {
// 表格更新成功後計算資料筆數
calculateRowCount(table.cache['query']);
}
});
// 发送 AJAX 请求到 Controller
$.ajax({
url: '@Url.Action("GetZDNDetailJson", "PTD")',
type: 'POST',
data: { recordNumber: recordNumber, lineNo: lineNo },
success: function (result) {
// 处理成功的情况
if (result.data.data.length > 0) {
$.each(result.data.data, function (index, item) {
$("#Customer").val(item.soldCustomerID);
$('#PartNumber').val(item.productID);
getItemDesc(document.getElementById('PartNumber').value);
});
}
},
error: function (error) {
// 处理错误的情况
console.log(error);
}
});
}
});
$('#PartNumber').on('keypress', function (event) {
if (event.keyCode == 13) {
getItemDesc(document.getElementById('PartNumber').value);
}
});
$('#frontSN').on('keypress', function (event) {
if (event.keyCode == 13) {
var endSN = document.getElementById('endSN');
var frontSN = document.getElementById('frontSN');
if (frontSN.value.trim() == "") {
hg.msg('SN不得為空!');
return;
}
if (document.getElementById('PCSUnit').checked) {
var recordType = document.getElementById('recordType');
var dnNo = document.getElementById('recordNumber');
var lineNo = document.getElementById('lineNo');
var material = document.getElementById('PartNumber');
var newRowData = {
recordType: recordType.value,
dnNo: dnNo.value,
lineNo: lineNo.value,
material: material.value,
sn: frontSN.value
};
// Add the new row data to the table
addRow('query', newRowData);
frontSN.focus();
frontSN.select();
}
else {
endSN.focus();
endSN.select();
}
}
});
$('#endSN').on('keypress', function (event) {
if (event.keyCode == 13) {
var recordType = document.getElementById('recordType');
var frontSN = document.getElementById('frontSN');
var endSN = document.getElementById('endSN');
var dnNo = document.getElementById('recordNumber');
var lineNo = document.getElementById('lineNo');
var material = document.getElementById('PartNumber');
var prefixCode = frontSN.value.slice(0, -5);
var currentSN = parseInt(frontSN.value.slice(-5));
while (currentSN <= parseInt(endSN.value.slice(-5))) {
var newRowData = {
recordType: recordType.value,
dnNo: dnNo.value,
lineNo: lineNo.value,
material: material.value,
sn: prefixCode + currentSN.toString().padStart(5, "0")
};
// Add the new row data to the table
addRow('query', newRowData);
currentSN++;
}
frontSN.focus();
frontSN.select();
}
});
$('#SNData').on('keypress', function (event) {
if (event.keyCode == 13) {
var recordType = document.getElementById('recordType');
var SNData = document.getElementById('SNData');
var dnNo = document.getElementById('recordNumber');
var lineNo = document.getElementById('lineNo');
var material = document.getElementById('PartNumber');
var table = layui.table;
var rowAmount = table.cache['query'].length;
if (SNData.value.trim() == "") {
hg.msg('SN不得為空!');
return;
}
var arr = SNData.value.split('\n');
console.log(arr);
$.each(arr, function (index, SN) {
rowAmount++;
var newRowData = {
recordType: recordType.value,
dnNo: dnNo.value,
lineNo: lineNo.value,
material: material.value,
sn: SN
};
// Add the new row data to the table
addRow('query', newRowData);
});
SNData.select();
event.preventDefault();
}
});
$('#delAll').on('click', function () {
hg.confirm("請確認是否整批刪除?", function () {
var tableData = layui.table.cache['query'];
$.each(tableData, function (index, data) {
$.ajax({
url: '/PTD/PTD006D',
data: { sn: data.sn },
type: 'POST',
success: function (res) {
if (res.success) {
if (index == (tableData.length - 1)) {
// 重新加载表格数据
layui.table.reload('query', {
data: tableData,
page: false,
limit: 2000
});
calculateRowCount(tableData);
hg.msg('刪除成功');
}
}
else {
hg.msg(res.msg);
// 重新加载表格数据
layui.table.reload('query', {
data: tableData,
page: false,
limit: 2000
});
calculateRowCount(tableData);
}
},
error: function () {
hg.msg("網路請求失敗!");
}
});
});
});
});
$('#StockQty').on('keypress', function (event) {
if (event.keyCode == 13 && document.getElementById('pcs').checked && !document.getElementById('PCSUnit').checked) {
var recordType = document.getElementById('recordType');
var frontSN = document.getElementById('frontSN');
var StockQty = document.getElementById('StockQty');
var dnNo = document.getElementById('recordNumber');
var lineNo = document.getElementById('lineNo');
var material = document.getElementById('PartNumber');
var prefixCode = frontSN.value.slice(0, -5);
var currentSN = parseInt(frontSN.value.slice(-5));
for (var i = 1; i <= parseInt(StockQty.value); i++) {
var newRowData = {
recordType: recordType.value,
dnNo: dnNo.value,
lineNo: lineNo.value,
material: material.value,
sn: prefixCode + currentSN.toString().padStart(5, "0")
};
// Add the new row data to the table
addRow('query', newRowData);
currentSN++;
}
frontSN.focus();
frontSN.select();
}
});
function getItemDesc(itemNo) {
$.ajax({
url: "/BAS/GetMaterialItemByItemNO",
data: { id: itemNo },
dataType: 'json',
contentType: "application/json",
type: 'get',
success: function (result) {
if (result.data) {
$("#PartDesc").val(result.data.itemDesc);
}
else {
$("#PartDesc").val('');
}
}
});
};
function isSNAlreadyExist(tableId, sn) {
var table = layui.table;
var currentData = table.cache[tableId];
// Check if SN already exists in the table
var isExist = currentData.some(function (row) {
return row.sn === sn;
});
return isExist;
}
function calculateRowCount(table) {
var RowCount = table.length;
$("#rowCount").html("應出貨數量: 0 pcs,目前刷入數量: " + RowCount + " pcs");
}
function addRow(tableId, rowData) {
var tableData = layui.table.cache[tableId];
if (isSNAlreadyExist(tableId, rowData.sn)) {
hg.msg('SN 已存在!');
return; // Do not add the row
}
var ExtNotes = document.getElementById('ExtNotes');
var username = getCookie("UserID");
var workCenter = document.getElementById('WorkCenter').value;
var rbu = document.getElementById('RBU').value;
var customer = document.getElementById('Customer').value;
//卡控material & customer不得為空
//if (customer === "") {
// hg.msg('Customer不得為空!');
// return; // Do not add the row
//}
if (rowData.material === "") {
hg.msg('料號不得為空!');
return; // Do not add the row
}
var postData = {
RecordTypeID: rowData.recordType,
RecordNumber: rowData.dnNo,
RCLineNO: rowData.lineNo,
InputSN: rowData.sn,
ShipmentSN: rowData.sn,
ProductID: rowData.material,
EmplID: customer,
ExtNotes: ExtNotes.value,
OwnerPlantID: workCenter,
OwnerCompanyID: rbu,
CreateDeptID: "",
CreatorID: username,
ModifyDeptID: "",
ModifierID: username,
};
$.ajax({
url: '/PTD/PTD006A',
dataType: 'json',
data: { data: JSON.stringify(postData) },
type: 'POST',
success: function (res) {
if (res.success) {
// 重新加载表格数据
layui.table.reload('query', {
data: tableData,
page: false,
limit: 2000
});
layer.msg('備貨成功!', { icon: 1 });
calculateRowCount(tableData);
}
else {
hg.msg('備貨失敗,原因:' + result.data.msg);
}
}
,
error: function (error) {
hg.msg('備貨失敗!原因:' + error.msg);
return;
}
});
};
function del(obj) {
if (obj.data.sn) {
hg.confirm("SN:" + obj.data.sn + ",確定要刪除嗎?", function () {
// 获取表格数据
var tableData = layui.table.cache['query'];
// 找到要删除的行的索引
var rowIndex = tableData.findIndex(function (row) {
return row.sn === obj.data.sn;
});
// 从表格数据中删除该行
if (rowIndex !== -1) {
tableData.splice(rowIndex, 1);
$.ajax({
url: '/PTD/PTD006D',
data: { sn: obj.data.sn },
type: 'POST',
success: function (res) {
if (res.success) {
// 重新加载表格数据
layui.table.reload('query', {
data: tableData,
page: false,
limit: 2000
});
layer.msg('刪除成功', { icon: 1 });
calculateRowCount(tableData);
}
else {
hg.msg(data.msg);
}
},
error: function () {
hg.msg("網路請求失敗!");
}
});
} else {
hg.msg('未找到要刪除的數據');
}
});
}
}
function getCookie(cookieName) {
var name = cookieName + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var cookieArray = decodedCookie.split(';');
for (var i = 0; i < cookieArray.length; i++) {
var cookie = cookieArray[i].trim();
if (cookie.indexOf(name) === 0) {
return cookie.substring(name.length, cookie.length);
}
}
return null
}
//Excel匯入
function importExcel() {
// Trigger click on the hidden file input
document.getElementById('excelFileInput').click();
}
document.getElementById('excelFileInput').addEventListener('change', handleFileSelect);
function handleFileSelect(event) {
var file = event.target.files[0];
if (file) {
var reader = new FileReader();
reader.onload = function (e) {
var data = new Uint8Array(e.target.result);
var workbook = XLSX.read(data, { type: 'array' });
// Assuming the SNs are in the first sheet of the workbook
var sheet = workbook.Sheets[workbook.SheetNames[0]];
var snData = XLSX.utils.sheet_to_json(sheet);
console.log(snData);
// Process SN data and update textarea
updateTextareaWithExcel(snData);
};
reader.readAsArrayBuffer(file);
}
}
function updateTextareaWithExcel(snData) {
var textarea = document.getElementById('SNData'); // Replace with your actual textarea id
var snValues = snData.map(function (obj) {
return obj.SN;
});
// Combine existing data and imported SNs
textarea.value = snValues.join('\n');
}
var tableCols = [[
{
field: 'recordType',
minWidth: 150,
title: 'Type'
},
{
field: 'dnNo',
minWidth: 150,
title: 'DN單號'
},
{
field: 'lineNo',
title: 'LineNo',
width: 100
},
{
field: 'material',
title: 'Material(料號)',
width: 150
},
{
field: 'sn',
title: 'SN',
width: 150
},
{
field: 'delete',
width: 100,
title: '刪除',
templet: function (item) {
var btn = ' <a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="del">刪除</a>';
return btn
}
}
]];
//基本数据表格
var table = hg.table.datatable('query', '備貨資訊', '/PTD/PTD006Query', {}, tableCols, toolbar, true, 'full-100', ['exports']);
</script>
}

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

@ -182,7 +182,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// <returns></returns> /// <returns></returns>
[Route("[action]")] [Route("[action]")]
[HttpGet] [HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfo4QRS011(string unitNo, string itemNO, string wipNO , string wipStatus = "A") public async Task<ResultModel<dynamic>> GetWipInfo4QRS011(string unitNo, string itemNO, string wipNO, string wipStatus = "A")
{ {
ResultModel<dynamic> result = new ResultModel<dynamic>(); ResultModel<dynamic> result = new ResultModel<dynamic>();
var q = from q1 in _context.WipInfos var q = from q1 in _context.WipInfos
@ -205,7 +205,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
q4.UnitName q4.UnitName
}; };
q = q.Where(w => w.StatusNO == wipStatus); q = q.Where(w => w.StatusNO == wipStatus);
if (unitNo != "*") if (unitNo != "*")
{ {
@ -514,7 +514,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
bool createMacCol = true; bool createMacCol = true;
//part_no = "91000237320038"; //part_no = "91000237320038";
string mac_sql = string.Format(@"select distinct a.工單編號 as mo_id,e.客戶工單編號 as customer_moid,a.工單序號 as product_sn, string mac_sql = string.Format(@"select distinct a.工單編號 as mo_id,e.客戶工單編號 as customer_moid,a.工單序號 as product_sn,
@ -594,7 +594,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
} }
} }
catch(Exception e1) catch (Exception e1)
{ {
string err = e1.Message; string err = e1.Message;
} }
@ -976,7 +976,7 @@ FROM [SFIS].[dbo].[ZPDKeyPart] B WHERE B.[IsActive] = 1 AND B.[ProductSN] = (S
if (!findFlag) if (!findFlag)
{ {
string mac_sql2 = string.Format("select a.part_no from jhames.barcode_item a,jhames.barcode_info b where a.barcode_id = b.barcode_id and b.barcode_no = '{0}' and item_no like 'MAC%'", part_no); string mac_sql2 = string.Format("select a.part_no from jhames.barcode_item a,jhames.barcode_info b where a.barcode_id = b.barcode_id and b.barcode_no = '{0}' and item_no like 'MAC%'", part_no);
using (var esun_cmd = conn.CreateCommand()) using (var esun_cmd = conn.CreateCommand())
{ {
esun_cmd.CommandText = mac_sql2; esun_cmd.CommandText = mac_sql2;
@ -1825,7 +1825,7 @@ FROM [SFIS].[dbo].[ZPDKeyPart] B WHERE B.[IsActive] = 1 AND B.[ProductSN] = (S
q = q.Where(w => w.CompleteQTY > 0); q = q.Where(w => w.CompleteQTY > 0);
q = q.Where(w => w.UnitNO == "B" && w.CustomerMedical == "N"); q = q.Where(w => w.UnitNO == "B" && w.CustomerMedical == "N");
if (werksNo != "*") if (werksNo != "*")
{ {
q = q.Where(w => w.WerksNO == werksNo); q = q.Where(w => w.WerksNO == werksNo);
@ -2316,7 +2316,7 @@ FROM [SFIS].[dbo].[ZPDKeyPart] B WHERE B.[IsActive] = 1 AND B.[ProductSN] = (S
// 委外廠編號抓WERKS廠別代碼 // 委外廠編號抓WERKS廠別代碼
var q = _context.FactoryInfos.Where(w => w.FactoryID.ToString() == WipInfo.Werks).ToList(); var q = _context.FactoryInfos.Where(w => w.FactoryID.ToString() == WipInfo.Werks).ToList();
if (q.Count() !=0) if (q.Count() != 0)
{ {
WipInfo.WerksNO = q.FirstOrDefault().FactoryNo; WipInfo.WerksNO = q.FirstOrDefault().FactoryNo;
} }
@ -2454,7 +2454,7 @@ FROM [SFIS].[dbo].[ZPDKeyPart] B WHERE B.[IsActive] = 1 AND B.[ProductSN] = (S
ResultModel<WipInfo> result = new ResultModel<WipInfo>(); ResultModel<WipInfo> result = new ResultModel<WipInfo>();
var wipinfos = await _context.WipInfos.Where(w => w.WipID == id).FirstOrDefaultAsync(); var wipinfos = await _context.WipInfos.Where(w => w.WipID == id).FirstOrDefaultAsync();
var WiwipinfoByWipNo= await _context.WipInfos.Where(w => w.WipNO == wipinfos.WipNO).ToListAsync(); var WiwipinfoByWipNo = await _context.WipInfos.Where(w => w.WipNO == wipinfos.WipNO).ToListAsync();
_context.WipInfos.RemoveRange(wipinfos); _context.WipInfos.RemoveRange(wipinfos);
var wipBarcode = await _context.WipBarcodes.Where(w => w.WipNO == wipinfos.WipNO && w.UnitNO == wipinfos.UnitNO).ToListAsync(); var wipBarcode = await _context.WipBarcodes.Where(w => w.WipNO == wipinfos.WipNO && w.UnitNO == wipinfos.UnitNO).ToListAsync();
@ -2590,7 +2590,7 @@ FROM [SFIS].[dbo].[ZPDKeyPart] B WHERE B.[IsActive] = 1 AND B.[ProductSN] = (S
/// <returns></returns> /// <returns></returns>
[Route("[action]")] [Route("[action]")]
[HttpGet] [HttpGet]
public async Task<ResultModel<dynamic>> GetDNInfo4PTD001(string dnNo,string lineNo) public async Task<ResultModel<dynamic>> GetDNInfo4PTD001(string dnNo, string lineNo)
{ {
ResultModel<dynamic> result = new ResultModel<dynamic>(); ResultModel<dynamic> result = new ResultModel<dynamic>();
@ -2670,7 +2670,7 @@ FROM [SFIS].[dbo].[ZPDKeyPart] B WHERE B.[IsActive] = 1 AND B.[ProductSN] = (S
} }
} }
} }
catch (Exception e) catch (Exception e)
{ {
Console.WriteLine(e.Message); Console.WriteLine(e.Message);
} }
@ -2678,7 +2678,7 @@ FROM [SFIS].[dbo].[ZPDKeyPart] B WHERE B.[IsActive] = 1 AND B.[ProductSN] = (S
string strbarcode_id = "''"; string strbarcode_id = "''";
foreach (DataRow drbarcode in dtBarcode.Rows) foreach (DataRow drbarcode in dtBarcode.Rows)
{ {
if (!string.IsNullOrEmpty(drbarcode["BARCODE_ID"].ToString())) if (!string.IsNullOrEmpty(drbarcode["BARCODE_ID"].ToString()))
strbarcode_id += $",{drbarcode["BARCODE_ID"]}"; strbarcode_id += $",{drbarcode["BARCODE_ID"]}";
} }
@ -2686,7 +2686,7 @@ FROM [SFIS].[dbo].[ZPDKeyPart] B WHERE B.[IsActive] = 1 AND B.[ProductSN] = (S
string kp_sql = @"select kp_no, max(kp_qty) kp_qty from( string kp_sql = @"select kp_no, max(kp_qty) kp_qty from(
select item_no as kp_no,count(item_no) kp_qty,barcode_id from jhames.barcode_item where barcode_id select item_no as kp_no,count(item_no) kp_qty,barcode_id from jhames.barcode_item where barcode_id
in (" + strbarcode_id + ") group by item_no,barcode_id) a group by kp_no order by kp_no"; in (" + strbarcode_id + ") group by item_no,barcode_id) a group by kp_no order by kp_no";
using (var cmd = conn.CreateCommand()) using (var cmd = conn.CreateCommand())
{ {
cmd.CommandText = kp_sql; cmd.CommandText = kp_sql;
@ -2965,9 +2965,9 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
//dtBarcode.Columns["ExtraBarcodeNo"].ColumnName = "出貨料號"; //dtBarcode.Columns["ExtraBarcodeNo"].ColumnName = "出貨料號";
//dtBarcode.Columns["BarcodeNo"].ColumnName = "生產序號"; //dtBarcode.Columns["BarcodeNo"].ColumnName = "生產序號";
dtBarcode.AcceptChanges(); dtBarcode.AcceptChanges();
} }
List <dynamic> list = new List<dynamic>(); List<dynamic> list = new List<dynamic>();
foreach (DataRow row in dtBarcode.Rows) foreach (DataRow row in dtBarcode.Rows)
{ {
dynamic dyn = new ExpandoObject(); dynamic dyn = new ExpandoObject();
@ -3014,6 +3014,9 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
try try
{ {
// RecordDate 加入目前時間
Data.RecordDate += $" {DateTime.Now:HH:mm:ss}";
string strSQL = ""; string strSQL = "";
string strRecordType = Data.RecordType; string strRecordType = Data.RecordType;
string strRmaNo = Data.RmaNo; string strRmaNo = Data.RmaNo;
@ -3022,7 +3025,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
string strRecordDate = TimeZoneInfo.ConvertTimeToUtc(DateTime.Parse(Data.RecordDate)).ToString("yyyy-MM-dd HH:mm:ss"); string strRecordDate = TimeZoneInfo.ConvertTimeToUtc(DateTime.Parse(Data.RecordDate)).ToString("yyyy-MM-dd HH:mm:ss");
string strLocation = Data.Location; string strLocation = Data.Location;
string strCustomer = Data.Customer; string strCustomer = Data.Customer;
string strCreateDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); string strCreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
string strMaterial = ""; string strMaterial = "";
string strMailBodyHtml = ""; string strMailBodyHtml = "";
@ -3268,7 +3271,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
{ {
cmd.CommandText = strSQL; cmd.CommandText = strSQL;
using (var reader = cmd.ExecuteReader()) using (var reader = cmd.ExecuteReader())
{ {
if (reader.HasRows) if (reader.HasRows)
{ {
@ -3283,7 +3286,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
using (var cmd = connPTD.CreateCommand()) using (var cmd = connPTD.CreateCommand())
{ {
cmd.CommandText = strSQL; cmd.CommandText = strSQL;
using (var reader = cmd.ExecuteReader()) using (var reader = cmd.ExecuteReader())
{ {
if (reader.Read()) if (reader.Read())
{ {
@ -3448,7 +3451,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
{ {
await connPTD.OpenAsync(); await connPTD.OpenAsync();
} }
try try
{ {
string strSQL = $@"select a.RecordTypeID,(select TypeName from SFIS_PTD.dbo.RecordTypeInfo where ID = a.RecordTypeID ) as TypeName string strSQL = $@"select a.RecordTypeID,(select TypeName from SFIS_PTD.dbo.RecordTypeInfo where ID = a.RecordTypeID ) as TypeName
from SFIS_PTD.dbo.ZProductTrans a group by a.RecordTypeID"; from SFIS_PTD.dbo.ZProductTrans a group by a.RecordTypeID";
@ -3470,16 +3473,17 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
foreach (DataRow row in dtRecordTypes.Rows) foreach (DataRow row in dtRecordTypes.Rows)
{ {
list.Add(new RecordTypeInfo list.Add(new RecordTypeInfo
{ ID = Convert.ToString(row["RecordTypeID"]), {
ID = Convert.ToString(row["RecordTypeID"]),
TypeName = Convert.ToString(row["TypeName"]) TypeName = Convert.ToString(row["TypeName"])
}); });
} }
return list; return list;
} }
catch (Exception e) catch (Exception e)
{ {
throw e; throw e;
} }
finally finally
{ {
@ -3493,7 +3497,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
[Route("[action]")] [Route("[action]")]
[HttpGet] [HttpGet]
public async Task<ResultModel<dynamic>> GetData4PTD003(string recordType, string recordNumber, string lineNo, string materialNo, string shippingSN, string dateStart, string dateEnd) public async Task<ResultModel<dynamic>> GetData4PTD003_Old(string recordType, string recordNumber, string lineNo, string materialNo, string shippingSN, string dateStart, string dateEnd)
{ {
ResultModel<dynamic> result = new ResultModel<dynamic>(); ResultModel<dynamic> result = new ResultModel<dynamic>();
//安勤連線 //安勤連線
@ -3546,7 +3550,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
result.Success = false; result.Success = false;
return result; return result;
} }
strSQL += $" And a.RecordDate Between '{dateStart.Replace("/","-") + " 00:00:00"}' And '{dateEnd.Replace("/", "-") + " 23:59:59"}'"; strSQL += $" And a.RecordDate Between '{dateStart.Replace("/", "-") + " 00:00:00"}' And '{dateEnd.Replace("/", "-") + " 23:59:59"}'";
} }
//排序:ZProductTrans.CreateDate DESC //排序:ZProductTrans.CreateDate DESC
@ -3606,6 +3610,122 @@ 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)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
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
FROM SFIS_PTD.dbo.ZProductTrans a where 1=1 ";
if (recordType != null && recordType != "" && recordType != "全部")
{
strSQL += $" And a.RecordTypeID ='{recordType}'";
}
if (recordNumber != null && recordNumber != "")
{
strSQL += $" And a.RecordNumber ='{recordNumber}'";
}
if (lineNo != null && lineNo != "")
{
strSQL += $" And a.RCLineNO ='{lineNo}'";
}
if (materialNo != null && materialNo != "")
{
strSQL += $" And a.ProductID like '{materialNo}%'";
}
if (shippingSN != null && shippingSN != "")
{
strSQL += $" And a.SerialNumber like '{shippingSN}%'";
}
if (dateStart != null && dateEnd != null)
{
if (DateTime.Parse(dateStart) > DateTime.Parse(dateEnd))
{
result.Msg = "起 不可大於 迄!";
result.Success = false;
return result;
}
strSQL += $" And a.RecordDate Between '{dateStart.Replace("/", "-") + " 00:00:00"}' And '{dateEnd.Replace("/", "-") + " 23:59:59"}'";
}
//排序:ZProductTrans.CreateDate DESC
strSQL += " Order by a.RecordDate DESC";
DataTable dtZProductTrans = new DataTable();
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
dtZProductTrans = DataReaderToDataTable(reader);
}
}
}
List<dynamic> list = new List<dynamic>();
foreach (DataRow row in dtZProductTrans.Rows)
{
dynamic dyn = new ExpandoObject();
list.Add(dyn);
foreach (DataColumn column in dtZProductTrans.Columns)
{
var dic = (IDictionary<string, object>)dyn;
dic[column.ColumnName] = row[column];
}
}
// EV01 RecordDate 要改成GMT時區(台灣+8小時)
if (RBU == "EV01")
list.ToList().ForEach(s => s.RecordDate = DateTime.Parse(s.RecordDate).AddHours(8).ToString("yyyy-MM-dd HH:mm:ss"));
result.DataTotal = list.Count();
result.Data = list;
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
catch (Exception e)
{
throw e;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
}
[HttpGet("GetCustomer/{recordNumber}")] [HttpGet("GetCustomer/{recordNumber}")]
public async Task<string> GetCustomer(string recordNumber) public async Task<string> GetCustomer(string recordNumber)
{ {
@ -3666,7 +3786,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
} }
try try
{ {
string strSQL = $@"select * from SFIS_PTD.dbo.RecordTypeInfo"; string strSQL = $@"select * from SFIS_PTD.dbo.RecordTypeInfo";
DataTable dtRecordTypeInfo = new DataTable(); DataTable dtRecordTypeInfo = new DataTable();
using (var cmd = connPTD.CreateCommand()) using (var cmd = connPTD.CreateCommand())
@ -3792,8 +3912,8 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
using (var cmd = connPTD.CreateCommand()) using (var cmd = connPTD.CreateCommand())
{ {
cmd.CommandText = strSQL; cmd.CommandText = strSQL;
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
} }
result.Success = true; result.Success = true;
result.Msg = "OK"; result.Msg = "OK";
} }
@ -3979,7 +4099,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
} }
try try
{ {
string strSQL = $@"select * from SFIS_PTD.dbo.CustomerItemMailGroup Where 1=1"; string strSQL = $@"select * from SFIS_PTD.dbo.CustomerItemMailGroup Where 1=1";
if (id != null && id != "") if (id != null && id != "")
{ {
@ -4169,10 +4289,10 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
#region "PTD006 備貨作業" #region "PTD006 備貨作業"
[Route("[action]")] [Route("[action]")]
[HttpGet] [HttpGet]
public async Task<ResultModel<dynamic>> GetZWHPickListDetail(string recordNumber,string? LineNO) public async Task<ResultModel<dynamic>> GetZWHPickListDetail(string recordNumber, string? LineNO)
{ {
ResultModel<dynamic> result = new ResultModel<dynamic>(); ResultModel<dynamic> result = new ResultModel<dynamic>();
//安勤連線 //安勤連線
PTDContext _ptd_context = new PTDContext(); PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection(); DbConnection connPTD = _ptd_context.Database.GetDbConnection();
@ -4492,12 +4612,15 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
} }
try try
{ {
// RecordDate 加入目前時間
Data.RecordDate += $" {DateTime.Now:HH:mm:ss}";
string strSQL = ""; string strSQL = "";
string strRecordType = Data.RecordType; string strRecordType = Data.RecordType;
string strRbu = Data.Rbu; string strRbu = Data.Rbu;
string strWorkCenter = Data.WorkCenter; string strWorkCenter = Data.WorkCenter;
string strRecordDate = TimeZoneInfo.ConvertTimeToUtc(DateTime.Parse(Data.RecordDate)).ToString("yyyy-MM-dd HH:mm:ss"); ; string strRecordDate = TimeZoneInfo.ConvertTimeToUtc(DateTime.Parse(Data.RecordDate)).ToString("yyyy-MM-dd HH:mm:ss");
string strCreateDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); string strCreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
foreach (PTD007TableDataModel SNData in Data.TableData) foreach (PTD007TableDataModel SNData in Data.TableData)
{ {
@ -4532,7 +4655,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
int seed = Convert.ToInt32(reader["Seed"]); int seed = Convert.ToInt32(reader["Seed"]);
int nIdx = seed + 1; int nIdx = seed + 1;
strLatest = row["ShipmentSN"].ToString() + nIdx.ToString().PadLeft(4, '0');//組成HistoryID strLatest = row["ShipmentSN"].ToString() + nIdx.ToString().PadLeft(4, '0');//組成HistoryID
//HistoryKeyDefine //HistoryKeyDefine
strSQL = @$"UPDATE [SFIS_PTD].[dbo].[ZHistoryKeyDefine] strSQL = @$"UPDATE [SFIS_PTD].[dbo].[ZHistoryKeyDefine]
SET [Seed] = {nIdx} where [SerialNumber]='{row["ShipmentSN"]}'"; SET [Seed] = {nIdx} where [SerialNumber]='{row["ShipmentSN"]}'";
colSQL.Add(strSQL); colSQL.Add(strSQL);
@ -4545,7 +4668,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
else else
{ {
strLatest = row["ShipmentSN"].ToString() + 1.ToString().PadLeft(4, '0');//組成HistoryID strLatest = row["ShipmentSN"].ToString() + 1.ToString().PadLeft(4, '0');//組成HistoryID
//ZHistoryKeyDefine //ZHistoryKeyDefine
strSQL = @$"INSERT INTO [SFIS_PTD].[dbo].[ZHistoryKeyDefine] ([SerialNumber],[Seed]) strSQL = @$"INSERT INTO [SFIS_PTD].[dbo].[ZHistoryKeyDefine] ([SerialNumber],[Seed])
VALUES ('{row["ShipmentSN"]}',1)"; VALUES ('{row["ShipmentSN"]}',1)";
colSQL.Add(strSQL); colSQL.Add(strSQL);
@ -4634,7 +4757,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
#region "PTD008 還原作業" #region "PTD008 還原作業"
[Route("[action]")] [Route("[action]")]
[HttpGet] [HttpGet]
public async Task<ResultModel<dynamic>> GetData4PTD008( string recordNumber, string lineNo, string materialNo, string shippingSN) public async Task<ResultModel<dynamic>> GetData4PTD008(string recordNumber, string lineNo, string materialNo, string shippingSN)
{ {
//安勤連線 //安勤連線
PTDContext _ptd_context = new PTDContext(); PTDContext _ptd_context = new PTDContext();

2
AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckNewController.cs

@ -1514,7 +1514,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
#region 判斷作業站順序 #region 判斷作業站順序
// 判斷序號目前是否有重複過站 // 判斷序號目前是否有重複過站
var BarcodeInfo = await _context.BarcodeInfoes.Where(w => w.BarcodeID == barCode && w.StationID == stationID).FirstOrDefaultAsync(); var BarcodeInfo = await _context.BarcodeInfoes.Where(w => w.BarcodeID == barCode && w.StationID == stationID && w.WipID == wipId).FirstOrDefaultAsync();
if (BarcodeInfo != null) if (BarcodeInfo != null)
{ {
resultModel.Msg = $"該內部序號【{barCodeNo}】已刷過此站"; resultModel.Msg = $"該內部序號【{barCodeNo}】已刷過此站";

8
AMESCoreStudio.WebApi/Controllers/BLL/RPTController.cs

@ -2172,9 +2172,9 @@ namespace AMESCoreStudio.WebApi.Controllers.BLL
item.station_Id == "1099" ? "包裝" : item.station_Id == "1099" ? "包裝" :
""; "";
// 中午休息時間 12:00 ~ 13:00 // 中午休息時間 12:00 ~ 12:50
if (str.TimeOfDay < TimeSpan.Parse("12:10:00") && TimeSpan.Parse("12:20:00") < end.TimeOfDay) if (str.TimeOfDay < TimeSpan.Parse("12:10:00") && TimeSpan.Parse("12:20:00") < end.TimeOfDay)
item.restTime += 60; item.restTime += 50;
// 早上休息時間 10:00 ~ 10:10 // 早上休息時間 10:00 ~ 10:10
if (str.TimeOfDay < TimeSpan.Parse("10:02:00") && TimeSpan.Parse("10:04:00") < end.TimeOfDay) if (str.TimeOfDay < TimeSpan.Parse("10:02:00") && TimeSpan.Parse("10:04:00") < end.TimeOfDay)
@ -2196,9 +2196,9 @@ namespace AMESCoreStudio.WebApi.Controllers.BLL
TimeSpan exceptionTs = exceptionEnd.Subtract(exceptionStr); TimeSpan exceptionTs = exceptionEnd.Subtract(exceptionStr);
item.abnormalTime = (double)Math.Abs(Math.Round(exceptionTs.TotalMinutes, 2)); item.abnormalTime = (double)Math.Abs(Math.Round(exceptionTs.TotalMinutes, 2));
// 中午休息時間 12:00 ~ 13:00 // 中午休息時間 12:00 ~ 12:50
if (exceptionStr.TimeOfDay < TimeSpan.Parse("12:10:00") && TimeSpan.Parse("12:20:00") < exceptionEnd.TimeOfDay) if (exceptionStr.TimeOfDay < TimeSpan.Parse("12:10:00") && TimeSpan.Parse("12:20:00") < exceptionEnd.TimeOfDay)
item.abnormalTime += 60; item.abnormalTime += 50;
// 早上休息時間 10:00 ~ 10:10 // 早上休息時間 10:00 ~ 10:10
if (exceptionStr.TimeOfDay < TimeSpan.Parse("10:02:00") && TimeSpan.Parse("10:04:00") < exceptionEnd.TimeOfDay) if (exceptionStr.TimeOfDay < TimeSpan.Parse("10:02:00") && TimeSpan.Parse("10:04:00") < exceptionEnd.TimeOfDay)

Loading…
Cancel
Save