sabrina 12 months ago
parent
commit
f5e91b6ae1
  1. 6
      AMESCoreStudio.Web/AMESCoreStudio.Web.csproj
  2. 55
      AMESCoreStudio.Web/Controllers/FQCController.cs
  3. 3
      AMESCoreStudio.Web/Controllers/PCSController.cs
  4. 530
      AMESCoreStudio.Web/Controllers/PTDController.cs
  5. 36
      AMESCoreStudio.Web/Controllers/QRSController.cs
  6. 72
      AMESCoreStudio.Web/Controllers/SPCController.cs
  7. 14
      AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs
  8. 62
      AMESCoreStudio.Web/HttpApis/AMES/IPTD.cs
  9. 2
      AMESCoreStudio.Web/HttpApis/AMES/ISPC.cs
  10. 14
      AMESCoreStudio.Web/Startup.cs
  11. 451
      AMESCoreStudio.Web/Views/PCS/PCS003.cshtml
  12. 450
      AMESCoreStudio.Web/Views/PCS/PCS034.cshtml
  13. 148
      AMESCoreStudio.Web/Views/PTD/PTD002.cshtml
  14. 79
      AMESCoreStudio.Web/Views/PTD/PTD003.cshtml
  15. 14
      AMESCoreStudio.Web/Views/PTD/PTD004.cshtml
  16. 1
      AMESCoreStudio.Web/Views/PTD/PTD004U.cshtml
  17. 10
      AMESCoreStudio.Web/Views/PTD/PTD005.cshtml
  18. 4
      AMESCoreStudio.Web/Views/PTD/PTD005U.cshtml
  19. 220
      AMESCoreStudio.Web/Views/PTD/PTD006.cshtml
  20. 229
      AMESCoreStudio.Web/Views/PTD/PTD008.cshtml
  21. 2
      AMESCoreStudio.Web/Views/QRS/QRS009W.cshtml
  22. 13
      AMESCoreStudio.Web/Views/SPC/SPC005.cshtml
  23. 31
      AMESCoreStudio.Web/Views/SPC/SPC005C.cshtml
  24. 125
      AMESCoreStudio.Web/Views/SPC/SPC005U.cshtml
  25. 242
      AMESCoreStudio.Web/Views/SPC/SPC005V.cshtml
  26. 6
      AMESCoreStudio.Web/Views/WHS/WHS009C.cshtml
  27. 2929
      AMESCoreStudio.Web/wwwroot/Reports/SPC005View1.rdlc
  28. 151
      AMESCoreStudio.WebApi/Controllers/AMES/BarcodeInfoesController.cs
  29. 162
      AMESCoreStudio.WebApi/Controllers/AMES/BarcodeItemsController.cs
  30. 72
      AMESCoreStudio.WebApi/Controllers/AMES/FqcInhouseMasterController.cs
  31. 176
      AMESCoreStudio.WebApi/Controllers/AMES/InspectionResultMastersController.cs
  32. 344
      AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs
  33. 18
      AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckNewController.cs
  34. 271
      AMESCoreStudio.WebApi/Controllers/PTD/PTDController.cs
  35. 27
      AMESCoreStudio.WebApi/DTO/AMES/IpqcDto.cs
  36. 35
      AMESCoreStudio.WebApi/DTO/AMES/QRS009WDto.cs
  37. 4
      AMESCoreStudio.WebApi/DTO/AMES/SPC005VIiew.cs
  38. 3
      AMESCoreStudio.WebApi/Models/AMES/FqcResultMaster.cs
  39. 2
      AMESCoreStudio.WebApi/Models/AMES/NgRepair.cs
  40. 13
      AMESCoreStudio.WebApi/Models/AMES/PTD101AMESModel.cs

6
AMESCoreStudio.Web/AMESCoreStudio.Web.csproj

@ -33,9 +33,13 @@
<PackageReference Include="AspNetCore.Reporting" Version="2.1.0" />
<PackageReference Include="ClosedXML" Version="0.95.4" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.20" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.3" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.6" />
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.6.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.6.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.6.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="5.0.8" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.5" />
<PackageReference Include="ReportViewerCore.NETCore" Version="15.1.21" />
<PackageReference Include="System.CodeDom" Version="6.0.0" />
<PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
<PackageReference Include="System.IO.Packaging" Version="5.0.0" />

55
AMESCoreStudio.Web/Controllers/FQCController.cs

@ -4,7 +4,8 @@ using AMESCoreStudio.WebApi.DTO.AMES;
using AMESCoreStudio.WebApi.Enum;
using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.WebApi.Models.BAS;
using AspNetCore.Reporting;
//using AspNetCore.Reporting;
using Microsoft.Reporting.NETCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
@ -19,6 +20,7 @@ using System.IO;
using System.Linq;
using System.Threading.Tasks;
namespace AMESCoreStudio.Web.Controllers
{
/// <summary>
@ -1507,11 +1509,16 @@ namespace AMESCoreStudio.Web.Controllers
int extension = 1;
Dictionary<string, string> param = new Dictionary<string, string>();
var localReport = GetReprot(inhouseNo, seqID);
var reportResult = localReport.Result.Execute(RenderType.Pdf, extension, param, mimeType);
var reportResult = localReport.Result.Render("PDF");
using (var stream = new FileStream(path, FileMode.Create))
{
await stream.WriteAsync(reportResult.MainStream, 0, reportResult.MainStream.Length);
await stream.WriteAsync(reportResult, 0, reportResult.Length);
}
//var reportResult = localReport.Result.Execute(RenderType.Pdf, extension, param, mimeType);
//using (var stream = new FileStream(path, FileMode.Create))
//{
// await stream.WriteAsync(reportResult.MainStream, 0, reportResult.MainStream.Length);
//}
Result = Result == "P" ? "允收" : "驗退";
string Subject = $"FQC自動派送發信 FQC單號:{inhouseNo} 料號:{Material}";
@ -1970,28 +1977,36 @@ namespace AMESCoreStudio.Web.Controllers
#endregion
#region FQC010 報表
public IActionResult FQC010_PDF(string inhouseNo, int seqID)
{
string mimeType = "";
int extension = 1;
//string mimeType = "";
//int extension = 1;
//Dictionary<string, string> param = new Dictionary<string, string>();
//var localReport = GetReprot(inhouseNo, seqID);
//var result = localReport.Result.Execute(RenderType.Pdf, extension, param, mimeType);
//return File(result.MainStream, "application/pdf");
Dictionary<string, string> param = new Dictionary<string, string>();
var localReport = GetReprot(inhouseNo, seqID);
var result = localReport.Result.Execute(RenderType.Pdf, extension, param, mimeType);
return File(result.MainStream, "application/pdf");
var result = localReport.Result.Render("PDF");
return File(result, "application/pdf");
}
public IActionResult FQC010_Excel(string inhouseNo, int seqID)
{
string mimeType = "";
int extension = 1;
//string mimeType = "";
//int extension = 1;
//Dictionary<string, string> param = new Dictionary<string, string>();
//var localReport = GetReprot(inhouseNo, seqID);
//var result = localReport.Result.Execute(RenderType.ExcelOpenXml, extension, param, mimeType);
////return File(result.MainStream, "application/msexcel", "Export.xls");
//return File(result.MainStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Export.xlsx");
////return File(result.MainStream, "application/msexcel", "Export.xls");
Dictionary<string, string> param = new Dictionary<string, string>();
var localReport = GetReprot(inhouseNo, seqID);
var result = localReport.Result.Execute(RenderType.ExcelOpenXml, extension, param, mimeType);
//return File(result.MainStream, "application/msexcel", "Export.xls");
return File(result.MainStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Export.xlsx");
//return File(result.MainStream, "application/msexcel", "Export.xls");
var result = localReport.Result.Render("EXCELOPENXML");
return File(result, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Export.xlsx");
}
/// <summary>
/// 產生FQC報表
/// </summary>
@ -2001,7 +2016,8 @@ namespace AMESCoreStudio.Web.Controllers
private async Task<LocalReport> GetReprot(string inhouseNo, int seqID)
{
var path = $"{this._env.WebRootPath}\\Reports\\FQC010View.rdlc";
LocalReport localReport = new LocalReport(path);
LocalReport localReport = new LocalReport();
localReport.ReportPath = path;
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
System.Text.Encoding.GetEncoding(1252);
@ -2153,9 +2169,12 @@ namespace AMESCoreStudio.Web.Controllers
var FQC010Masters = new List<FQC010VIiew>();
FQC010Masters.Add(FQC010Master);
localReport.AddDataSource("DataSet1", FQC010Masters);
localReport.AddDataSource("DataSet2", FQC010Master.Detail1);
localReport.AddDataSource("DataSet3", FQC010Master.Detail2);
//localReport.AddDataSource("DataSet1", FQC010Masters);
//localReport.AddDataSource("DataSet2", FQC010Master.Detail1);
//localReport.AddDataSource("DataSet3", FQC010Master.Detail2);
localReport.DataSources.Add(new ReportDataSource("DataSet1", FQC010Masters));
localReport.DataSources.Add(new ReportDataSource("DataSet2", FQC010Master.Detail1));
localReport.DataSources.Add(new ReportDataSource("DataSet3", FQC010Master.Detail2));
return localReport;
}

3
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")
@ -9203,6 +9204,8 @@ namespace AMESCoreStudio.Web.Controllers
{
IResultModel result;
model.UpdateUserID = user_id;
result = await _pcsApi.PutWipClearDetail(model.ClearDetailID, JsonConvert.SerializeObject(model));
if (result.Success)

530
AMESCoreStudio.Web/Controllers/PTDController.cs

@ -255,6 +255,7 @@ namespace AMESCoreStudio.Web.Controllers
#region "PTD002 一段式入出庫作業"
public async Task<IActionResult> PTD002()
{
var RBU = string.Empty;
if (Request.Cookies["_AMESCookie"] != null)
{
var userID = "";
@ -264,6 +265,7 @@ namespace AMESCoreStudio.Web.Controllers
var user_info = await _sysApi.GetUserInfo(int.Parse(userID));
var factory_info = await _basApi.GetFactoryInfo(user_info[0].FactoryID);
ViewData["RBU"] = factory_info[0].Address;
RBU = factory_info[0].Address;
}
}
@ -272,15 +274,17 @@ namespace AMESCoreStudio.Web.Controllers
var allRecordType = new[] { "653", "632", "261", "262", "101R", "201", "202", "291", "292", "601", "601DB", "657", "952", "634" };
var filtered = from o in RecordTypes
where allRecordType.Contains(o.ID)
&& o.RBU == RBU
select o;
RecordTypes = filtered.ToList();
RecordTypes = filtered.OrderBy(o => o.ID).ToList();
var SelectListItem = new List<SelectListItem>();
foreach (WebApi.Models.AMES.RecordTypeInfo RecordType in RecordTypes)
{
SelectListItem.Add(new SelectListItem(RecordType.ID.ToString() + "-" + RecordType.TypeName, RecordType.ID.ToString()));
if (!SelectListItem.Any(a => RecordType.ID == a.Value))
SelectListItem.Add(new SelectListItem(RecordType.ID.ToString() + "-" + RecordType.TypeName, RecordType.ID.ToString()));
}
ViewBag.RecordTypeInfo = RecordTypes;
ViewBag.RecordType = SelectListItem;
@ -302,25 +306,44 @@ 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]
public async Task<JsonResult> PTD002_CheckInputData(WebApi.Models.AMES.PTDCheckInputData model)
{
var inputCheck = await CheckInputData(model);
var correct = new List<dynamic>();
var msg = string.Empty;
if (!string.IsNullOrWhiteSpace(inputCheck))
return Json(new Result() { success = false, msg = inputCheck });
//
// 取RecordType
var recordType = await _ptdApi.GetRecordTypeInfo();
var recordTypeFirst = recordType.Where(w => w.ID == model.RecordType).FirstOrDefault();
var zsnInfo = new List<dynamic>();
// 資料收集
var sn = new List<string>();
var addInput = new List<string>();
var msgInput = new List<string>();
var msgInputAlert = new List<string>();
// 序號區間
if (!string.IsNullOrWhiteSpace(model.FrontSN))
@ -328,6 +351,11 @@ namespace AMESCoreStudio.Web.Controllers
// PCS
if (model.StockUnit == "0")
{
var sequential = model.Sequential;
var frontLength = model.FrontSN.Length;
// 前綴
var title = model.FrontSN.Substring(0, frontLength - sequential);
// Begin=End
if (model.PcsUnit == "Y")
model.EndSN = model.FrontSN;
@ -336,16 +364,20 @@ namespace AMESCoreStudio.Web.Controllers
// EndSn 空白 計算備貨量
if (string.IsNullOrWhiteSpace(model.EndSN))
{
var sequential = model.Sequential;
var frontLength = model.FrontSN.Length;
// 前綴
var title = model.FrontSN.Substring(0, frontLength - sequential);
// 開始流水號
var frontSequential = int.Parse(model.FrontSN.Substring(frontLength - sequential, sequential));
model.EndSN = $"{title}{(frontSequential + model.StockQty - 1).ToString().PadLeft(sequential, '0')}";
}
}
zsnInfo = await _ptdApi.GetZSNInfoByIntervalNumber(model.FrontSN, model.EndSN);
int startNumber = int.Parse(model.FrontSN.Substring(frontLength - sequential, sequential));
int endNumber = int.Parse(model.EndSN.Substring(frontLength - sequential, sequential));
// 用起訖區間推序號
for (int i = startNumber; i <= endNumber; i++)
{
string serialNumber = title + i.ToString().PadLeft(sequential, '0');
sn.Add(serialNumber);
}
}
// BOX
else if (model.StockUnit == "1")
@ -364,9 +396,7 @@ namespace AMESCoreStudio.Web.Controllers
var boxSn = await _ptdApi.GetBarcodeInfoByBoxInterval(model.FrontSN, model.EndSN);
foreach (var item in boxSn.Where(w => w.StatusID == -1))
{
var byBarcodeNo = await _ptdApi.GetZSNInfoByNumber(item.BarcodeNo);
if (byBarcodeNo.Any())
zsnInfo.Add(byBarcodeNo.FirstOrDefault());
sn.Add(item.BarcodeNo);
}
}
}
@ -374,69 +404,121 @@ namespace AMESCoreStudio.Web.Controllers
// ExcelInput
if (!string.IsNullOrWhiteSpace(model.SNData))
{
var sndata = model.SNData.Split("\n");
foreach (var item in sndata)
{
var byNumber = await _ptdApi.GetZSNInfoByNumber(item);
if (byNumber.Any())
zsnInfo.Add(byNumber.FirstOrDefault());
}
sn.AddRange(model.SNData.Split("\n").ToList());
sn = sn.Where(w => !string.IsNullOrWhiteSpace(w)).ToList();
}
// Type是WO的 上一個狀態需要是WI
if (recordTypeFirst != null)
{
if (recordTypeFirst.Status == "WO")
// 確認序號狀態
foreach (var item in sn)
{
// Record 狀態是WI 的ID
var recodeIdBystaus = recordType.Where(w => w.Status == "WI").Select(s => s.ID).ToList();
// 特殊
if (model.RecordType == "633")
recodeIdBystaus.Add("631");
// zsnInfo 資料
var zSnInfo = await _ptdApi.GetZSNInfoByNumber(item);
correct = zsnInfo.Where(w => recodeIdBystaus.Contains((string)w.recordTypeID) &&
w.originalProductID == model.ProductId).ToList();
}
else if (recordTypeFirst.Status == "WI")
{
// 取得特定上一個作業
var flowRule = await _ptdApi.GetPtdFlowRules(model.RecordType);
if (flowRule.Any())
if (recordTypeFirst.Status == "WO")
{
var toIDs = flowRule.Select(s => (string)s.toID).ToList();
// 653需要確認料號是否一樣
if (recordTypeFirst.ID == "653")
// Record 狀態是WI 的ID
var recodeIdBystaus = recordType.Where(w => w.Status == "WI").Select(s => s.ID).ToList();
// 特殊
if (model.RecordType == "633")
recodeIdBystaus.Add("631");
// ZsnInfo 符合狀態的序號且料號要一致
if (zSnInfo.Any())
{
correct = zsnInfo.Where(w => toIDs.Contains((string)w.recordTypeID) &&
w.originalProductID == model.ProductId).ToList();
if (zSnInfo.Any(w => recodeIdBystaus.Contains((string)w.recordTypeID) &&
w.originalProductID == model.ProductId))
addInput.Add(item);
else
{
msgInputAlert.Add($"{item}(型態或料號不對)");
msgInput.Add(item);
}
}
else
correct = zsnInfo.Where(w => toIDs.Contains((string)w.recordTypeID)).ToList();
{
msgInputAlert.Add($"{item}(序號不存在)");
msgInput.Add(item);
}
}
else if (recordTypeFirst.Status == "WI")
{
// 292 不會有Info資料
if (model.RecordType == "292")
{
if (zSnInfo.Any())
{
msgInput.Add(item);
msgInputAlert.Add($"{item}(序號重複)");
}
else
addInput.Add(item);
}
// 其他要走特定上一個作業
else
{
var flowRule = await _ptdApi.GetPtdFlowRules(model.RecordType);
if (flowRule.Any())
{
var toIDs = flowRule.Select(s => (string)s.toID).ToList();
// ZsnInfo 符合狀態的序號且料號要一致
if (zSnInfo.Any())
{
// 653需要確認料號是否一樣
if (recordTypeFirst.ID == "653")
{
if (zSnInfo.Any(w => toIDs.Contains((string)w.recordTypeID) &&
w.originalProductID == model.ProductId))
addInput.Add(item);
else
{
msgInputAlert.Add($"{item}(型態或料號不對)");
msgInput.Add(item);
}
}
else
{
if (zSnInfo.Any(w => toIDs.Contains((string)w.recordTypeID)))
addInput.Add(item);
else
{
msgInputAlert.Add($"{item}(型態不對)");
msgInput.Add(item);
}
}
}
else
{
msgInputAlert.Add($"{item}(序號不存在)");
msgInput.Add(item);
}
}
}
}
}
}
addInput = addInput.Except(msgInput.Distinct()).ToList();
var datas = new List<dynamic>();
foreach (var item in zsnInfo)
// add
foreach (var item in addInput)
{
// 符合的顯示出來
if (correct.Any(a => a.serialNumber == item.serialNumber))
var newRowData = new
{
var newRowData = new
{
dnNo = model.RecordNumber,
lineNo = model.LineNo,
material = model.ProductId,
sn = item.serialNumber
};
datas.Add(newRowData);
}
else
msg += $"{item.serialNumber}、";
dnNo = model.RecordNumber,
lineNo = model.LineNo,
material = model.ProductId,
sn = item
};
datas.Add(newRowData);
}
if (!string.IsNullOrWhiteSpace(msg))
msg = "流程狀態或序號比對料號錯誤:" + msg.Substring(0, msg.Length - 1);
if (msgInputAlert.Any())
msg = "新增失敗:" + string.Join("、", msgInputAlert.Distinct());
return Json(new Result() { success = true, msg = msg, data = datas });
}
@ -450,15 +532,19 @@ namespace AMESCoreStudio.Web.Controllers
{
// RecordNumber
if (string.IsNullOrWhiteSpace(model.RecordNumber))
{
return "請輸入 RecordNumber";
}
// LineNo
if (string.IsNullOrWhiteSpace(model.LineNo))
return "請輸入 LineNo";
else if (model.LineNo.Trim().Length != 6)
return "LineNo不足6碼";
// 判斷是否已備貨完成
var isRecord = await CheckRecordNoIsRecord(model.RecordNumber, model.LineNo);
if (!(isRecord.Value as Result).success)
{
if (model.RecordType != "101" && model.RecordType != "292")
return "請輸入 LineNo";
return $"RecordNumber【{model.RecordNumber}】 LineNo【{model.LineNo}】 已備貨完成";
}
// Location
@ -467,19 +553,21 @@ namespace AMESCoreStudio.Web.Controllers
return "請輸入 Location";
}
var recordType = await _ptdApi.GetRecordTypeInfoById(model.RecordType);
var recordType = await _ptdApi.GetRecordTypeInfo();
recordType = recordType.Where(w => w.ID == model.RecordType && w.RBU == model.Rbu).ToList();
if (recordType.Any())
{
var recordInfoItem = recordType.FirstOrDefault();
if (model.RecordNumber.Length != int.Parse((string)recordInfoItem.length))
return "RecordNumber長度與設定的長度不符,請在確認";
if (!model.RecordNumber.StartsWith((string)recordInfoItem.prefixCode))
var recordInfoItem = recordType.Where(s => model.RecordNumber.StartsWith(s.PrefixCode))
.FirstOrDefault();
if (recordInfoItem == null)
return "RecordNumber單據號碼開頭與設定開頭不符,請在確認";
if (model.RecordNumber.Length != recordInfoItem.Length)
return "RecordNumber長度與設定的長度不符,請在確認";
}
else
{
return "請維護RecordNumber單說明表";
return "請維護RecordNumber單說明表";
}
// ProductId
@ -501,6 +589,10 @@ namespace AMESCoreStudio.Web.Controllers
return "請輸入 Scanner";
}
// 輸入序號或Excel匯入只能選一種
if (!string.IsNullOrWhiteSpace(model.FrontSN) && !string.IsNullOrWhiteSpace(model.SNData))
return "條碼區間設定或Excel匯入只能選一種執行";
// 判斷序號區間格式正確
if (!string.IsNullOrWhiteSpace(model.FrontSN))
{
@ -602,23 +694,26 @@ namespace AMESCoreStudio.Web.Controllers
SelectListItem.Add(new SelectListItem("全部", "全部"));
foreach (WebApi.Models.AMES.RecordTypeInfo RecordType in RecordTypes)
{
SelectListItem.Add(new SelectListItem(RecordType.ID.ToString() + "-" + RecordType.TypeName, RecordType.ID.ToString()));
if (!SelectListItem.Any(a => RecordType.ID == a.Value))
SelectListItem.Add(new SelectListItem(RecordType.ID.ToString() + "-" + RecordType.TypeName, RecordType.ID.ToString()));
}
ViewBag.RecordType = SelectListItem;
//ViewBag.StartDate = System.DateTime.Now.AddDays(-7).ToString("yyyy/MM/dd");
//ViewBag.EndDate = System.DateTime.Now.ToString("yyyy/MM/dd");
ViewBag.WorkCenter = "TWM0";
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 });
@ -653,10 +748,10 @@ namespace AMESCoreStudio.Web.Controllers
}
//修改页面
[HttpGet]
public async Task<IActionResult> PTD004UAsync(string id)
public async Task<IActionResult> PTD004UAsync(string seq)
{
var result = await _ptdApi.GetRecordTypeInfo(id);
var result = await _ptdApi.GetRecordTypeInfo(seq);
if (result.Count == 0)
{
@ -765,11 +860,18 @@ namespace AMESCoreStudio.Web.Controllers
IResultModel result;
if (model.Mode == 0)
{
result = await _ptdApi.PostCustomerItemMailGroup(JsonConvert.SerializeObject(model));
var checkData = await _ptdApi.GetCustomerItemMailGroup(model.CustomerCode);
if (!checkData.Any())
result = await _ptdApi.PostCustomerItemMailGroup(JsonConvert.SerializeObject(model));
else
{
ModelState.AddModelError("error", "客戶代號已有重複");
return View("PTD005C", model);
}
}
else
{
result = await _ptdApi.PutCustomerItemMailGroup(model.ItemNumber, JsonConvert.SerializeObject(model));
result = await _ptdApi.PutCustomerItemMailGroup(model.CustomerCode, JsonConvert.SerializeObject(model));
}
if (result.Success)
@ -815,6 +917,7 @@ namespace AMESCoreStudio.Web.Controllers
#region "PTD006 備貨作業"
public async Task<IActionResult> PTD006()
{
var RBU = string.Empty;
if (Request.Cookies["_AMESCookie"] != null)
{
var userID = "";
@ -824,26 +927,28 @@ namespace AMESCoreStudio.Web.Controllers
var user_info = await _sysApi.GetUserInfo(int.Parse(userID));
var factory_info = await _basApi.GetFactoryInfo(user_info[0].FactoryID);
ViewData["RBU"] = factory_info[0].Address;
RBU = factory_info[0].Address;
}
}
List<WebApi.Models.AMES.RecordTypeInfo> RecordTypes = await _ptdApi.GetRecordTypeInfo();
var allRecordType = new[] { "101", "601", "631", "633", "951" };
var filtered = from o in RecordTypes
where allRecordType.Contains(o.ID)
&& o.RBU == RBU
select o;
RecordTypes = filtered.ToList();
RecordTypes = filtered.OrderBy(o => o.ID).ToList();
var SelectListItem = new List<SelectListItem>();
foreach (WebApi.Models.AMES.RecordTypeInfo RecordType in RecordTypes)
{
SelectListItem.Add(new SelectListItem(RecordType.ID.ToString() + "-" + RecordType.TypeName, RecordType.ID.ToString()));
if (!SelectListItem.Any(a => RecordType.ID == a.Value))
SelectListItem.Add(new SelectListItem(RecordType.ID.ToString() + "-" + RecordType.TypeName, RecordType.ID.ToString()));
}
ViewBag.RecordTypeInfo = RecordTypes;
ViewBag.RecordType = SelectListItem;
ViewBag.RecordType = SelectListItem.Distinct().ToList();
ViewBag.Location = "9000";
ViewBag.WorkCenter = "TWM0";
ViewBag.RecordDate = System.DateTime.Now.ToString("yyyy/MM/dd");
@ -895,11 +1000,31 @@ namespace AMESCoreStudio.Web.Controllers
}
}
public async Task<IActionResult> PTD006DAllAsync(string recordNumber, string lineNo)
{
var result = await _ptdApi.DeleteZWHPickListDetailAll(recordNumber, lineNo);
if (result.Success)
{
return Json(new Result() { success = true, msg = "" });
}
else
{
return Json(new Result() { success = false, msg = result.Msg });
}
}
public async Task<JsonResult> PTD006_CheckInputData(WebApi.Models.AMES.PTDCheckInputData model)
{
// 基本資料判定
var inputCheck = await CheckInputData(model);
var msg = string.Empty;
// 資料收集
var sn = new List<string>();
var addInput = new List<string>();
var msgInput = new List<string>();
var msgInputAlert = new List<string>();
var checkFQC = false;
if (!string.IsNullOrWhiteSpace(inputCheck))
return Json(new Result() { success = false, msg = inputCheck });
@ -927,11 +1052,6 @@ namespace AMESCoreStudio.Web.Controllers
else
return Json(new Result() { success = false, msg = "請新增單頭說明維護", data = null });
// 資料收集
var sn = new List<string>();
var addInput = new List<string>();
var msgInput = new List<string>();
// 序號區間
if (!string.IsNullOrWhiteSpace(model.FrontSN))
{
@ -994,6 +1114,15 @@ namespace AMESCoreStudio.Web.Controllers
if (!string.IsNullOrWhiteSpace(model.SNData))
{
sn.AddRange(model.SNData.Split("\n").ToList());
sn = sn.Where(w => !string.IsNullOrWhiteSpace(w)).ToList();
}
// FFQC判斷
var resultZDNDetail = await _ptdApi.GetGetZDNDetail(model.RecordNumber, model.LineNo);
if (resultZDNDetail.Any())
{
if (resultZDNDetail.FirstOrDefault().shipSLoc == "0S08")
checkFQC = true;
}
// 確認序號狀態
@ -1013,29 +1142,73 @@ namespace AMESCoreStudio.Web.Controllers
w.originalProductID == model.ProductId))
addInput.Add(item);
else
msgInput.Add(item);
{
if (zSnInfo.Any(w => !recodeIdBystaus.Contains((string)w.recordTypeID)))
{
msgInput.Add(item);
msgInputAlert.Add($"{item}(型態不對)");
}
else if (zSnInfo.Any(w => w.originalProductID != model.ProductId))
{
msgInput.Add(item);
msgInputAlert.Add($"{item}(品號不符)");
}
}
}
else
{
msgInput.Add(item);
msgInputAlert.Add($"{item}(序號不存在)");
}
// 排除PickDetail有重複相同recordNumber & lineNo 的序號
if (pickDetail.Any(w => w.recordNumber == model.RecordNumber && w.rcLineNO == model.LineNo))
//if (pickDetail.Any(w => w.recordNumber == model.RecordNumber && w.rcLineNO == model.LineNo))
if (pickDetail.Any(w => w.recordTypeID == model.RecordType))
{
msgInput.Add(item);
msgInputAlert.Add($"{item}(序號重複)");
}
else
addInput.Add(item);
// FQC檢驗
if (checkFQC)
{
try
{
var resultCheckFqc = await _ptdApi.CheckFQCTestOk(extraBarcodeNo: item);
if (!resultCheckFqc.Any())
{
msgInput.Add(item);
msgInputAlert.Add($"{item}(尚未通過FQC檢驗)");
}
}
catch
{
msgInput.Add(item);
msgInputAlert.Add($"{item}(尚未通過FQC檢驗)");
}
}
}
else
{
// 101 不會有Info資料
if (zSnInfo.Any())
{
msgInput.Add(item);
msgInputAlert.Add($"{item}(序號重複)");
}
else
addInput.Add(item);
// 排除PickDetail有重複相同recordNumber & lineNo 的序號
if (pickDetail.Any(w => w.recordNumber == model.RecordNumber && w.rcLineNO == model.LineNo))
//if (pickDetail.Any(w => w.recordNumber == model.RecordNumber && w.rcLineNO == model.LineNo))
if (pickDetail.Any(w => w.recordTypeID == model.RecordType))
{
msgInput.Add(item);
msgInputAlert.Add($"{item}(序號重複)");
}
else
addInput.Add(item);
}
@ -1063,12 +1236,18 @@ namespace AMESCoreStudio.Web.Controllers
var result = await _ptdApi.PostPTD006Commit(JsonConvert.SerializeObject(addPtd006));
}
if (msgInput.Any())
msg = "序號新增失敗:" + string.Join("、", msgInput.Distinct());
if (msgInputAlert.Any())
msg = "新增失敗:" + string.Join("、", msgInputAlert.Distinct());
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);
@ -1085,11 +1264,31 @@ 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 扣帳作業"
public async Task<IActionResult> PTD007()
{
var RBU = string.Empty;
if (Request.Cookies["_AMESCookie"] != null)
{
var userID = "";
@ -1097,24 +1296,27 @@ namespace AMESCoreStudio.Web.Controllers
if (userID != "")
{
var user_info = await _sysApi.GetUserInfo(int.Parse(userID));
List<WebApi.Models.BAS.FactoryInfo> factory_info = await _basApi.GetFactoryInfo(user_info[0].FactoryID);
var factory_info = await _basApi.GetFactoryInfo(user_info[0].FactoryID);
ViewData["RBU"] = factory_info[0].Address;
RBU = factory_info[0].Address;
}
}
List<WebApi.Models.AMES.RecordTypeInfo> RecordTypes = await _ptdApi.GetRecordTypeInfo();
var allRecordType = new[] { "101", "601", "631", "633", "951" };
var allRecordType = new[] { "101", "601", "631", "633", "951", "101P" };
var filtered = from o in RecordTypes
where allRecordType.Contains(o.ID)
&& o.RBU == RBU
select o;
RecordTypes = filtered.ToList();
RecordTypes = filtered.OrderBy(o => o.ID).ToList();
var SelectListItem = new List<SelectListItem>();
foreach (WebApi.Models.AMES.RecordTypeInfo RecordType in RecordTypes)
{
SelectListItem.Add(new SelectListItem(RecordType.ID.ToString() + "-" + RecordType.TypeName, RecordType.ID.ToString()));
if (!SelectListItem.Any(a => RecordType.ID == a.Value))
SelectListItem.Add(new SelectListItem(RecordType.ID.ToString() + "-" + RecordType.TypeName, RecordType.ID.ToString()));
}
ViewBag.RecordType = SelectListItem;
@ -1123,12 +1325,20 @@ namespace AMESCoreStudio.Web.Controllers
return View();
}
public async Task<IActionResult> PTD007QueryAsync(string recordType, string recordNumber)
public async Task<IActionResult> PTD007QueryAsync(string recordType, string recordNumber, string RBU)
{
if (recordNumber == null || recordNumber == "")
return Json(new Table() { count = 0, data = null });
var result = await _ptdApi.GetZDNDetailJoinZWHPickListDetail(recordType, recordNumber);
var result = new ResultModel<dynamic>();
if (recordType == "101P")
{
result = await _ptdApi.GetPTD007QueryByRBU(recordNumber, RBU);
}
else
result = await _ptdApi.GetZDNDetailJoinZWHPickListDetail(recordType, recordNumber);
if (result.DataTotal > 0)
{
return Json(new Table() { code = 0, msg = "", data = result.Data, count = result.DataTotal });
@ -1139,7 +1349,37 @@ 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 });
}
}
// 執行扣帳
if (ptd007.RecordType == "101P")
result = await _ptdApi.PostPTD007CommitByRBU(data);
else
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 });
}
@ -1163,12 +1403,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.LastOrDefault())
{
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 , item.recordTypeID);
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

36
AMESCoreStudio.Web/Controllers/QRSController.cs

@ -627,7 +627,7 @@ namespace AMESCoreStudio.Web.Controllers
for (int j = 0; j < station_list.Length - 1; j++)
{
int wip_qty = 0;
var wip_station1 = await _pcsApi.GetWipBarcode4QRS009(wip_id, int.Parse(station_list[j]), 0, 10);
var wip_station1 = await _pcsApi.GetWipBarcodeCount4QRS009(wip_id, int.Parse(station_list[j]), 0, 10);
if (wip_station1.DataTotal > 0)
{
@ -713,6 +713,24 @@ namespace AMESCoreStudio.Web.Controllers
return Json(new Table() { count = 0, data = null });
}
[ResponseCache(Duration = 0)]
[HttpGet]
public async Task<IActionResult> GetWipStationBarcodeNew(string id, int page = 0, int limit = 10)
{
string[] param = id.Split("_");
int wip_id = int.Parse(param[0]);
int station_id = int.Parse(param[1]);
var result = await _pcsApi.GetWipBarcode4QRS009New(wip_id, station_id, page, limit);
if (result.DataTotal > 0)
{
return Json(new Table() { code = 0, msg = "", data = result.Data, count = result.DataTotal });
}
return Json(new Table() { count = 0, data = null });
}
private async Task GetProductTypeList()
{
var result = await _pcsApi.GetProductTypes();
@ -1119,13 +1137,14 @@ namespace AMESCoreStudio.Web.Controllers
//2024-03-26 BB.Wang Modify 修正良率(代小平)
//double sum_rate = 100.0;
//int sum_idx = 1;
double sum_rate = 0.0;
double sum_rate = 100.0;
int sum_idx = 0;
for (int i = 0; i < ft_stations.Count; i++)
{
int station_id = ft_stations[i].StationID;
var wip_station = await _pcsApi.GetWipStation4QRS009Group(wip_id, station_id);
//var wip_station = await _pcsApi.GetWipStation4QRS009Group(wip_id, station_id);
var wip_station = await _pcsApi.GetBarcodeStation4QRS009Group(wip_id, station_id, param[3], param[4]);
int okQty = 0, ngQty = 0, inputQty = 0;
@ -1151,6 +1170,11 @@ namespace AMESCoreStudio.Web.Controllers
rate = (okQty * 1.0 / inputQty) * 100;
}
if (rate > 0)
{
sum_rate = double.Parse((sum_rate * (rate / 100.0)).ToString("0.00"));
}
/*
if (rate > 0)
{
@ -1158,18 +1182,22 @@ namespace AMESCoreStudio.Web.Controllers
}
*/
/*
if (rate > 0)
{
sum_idx = sum_idx + 1;
sum_rate = sum_rate + rate;
}
*/
}
query.SumYieldDatas.Add(new SumYieldData
{
WipID = int.Parse(jo["wipID"].ToString()),
WipNO = jo["wipNO"].ToString(),
Yield = sum_rate / sum_idx
//Yield = sum_rate / sum_idx
//Yield = double.Parse((sum_rate / sum_idx).ToString("0.00"))
Yield = sum_rate
});
}

72
AMESCoreStudio.Web/Controllers/SPCController.cs

@ -1402,27 +1402,51 @@ namespace AMESCoreStudio.Web.Controllers
public async Task<IActionResult> CheckBarcodeNOAsync(string BarcodeNo, string WipNo)
{
// var result_WipNo = await _pcsApi.GetWipBarcode(WipNo);
// var result_WipNo = await _pcsApi.GetWipBarcode(WipNo);
var BarcodeInfo = await _pcsApi.GetBarcodeInfoesByNo(BarcodeNo);
var wipInfo = await _pcsApi.GetWipInfoByWipNO(WipNo);
if (BarcodeInfo.Count > 0 && wipInfo.Count > 0)
//工單WipType ="N" 表示無序號,不需檢查
if (wipInfo.Where(w => w.WipType != "N").Count() > 0)
{
if (BarcodeInfo.Count > 0 && wipInfo.Count > 0)
{
var BarcodeWip = await _pcsApi.GetBarcodeWipByTwoKey(BarcodeInfo.Select(s => s.BarcodeID).FirstOrDefault(), wipInfo.Select(s => s.WipID).FirstOrDefault());
var BarcodeWip = await _pcsApi.GetBarcodeWipByTwoKey(BarcodeInfo.Select(s => s.BarcodeID).FirstOrDefault(), wipInfo.Select(s => s.WipID).FirstOrDefault());
if (BarcodeWip != null)
{
return Json(new Table() { code = 0, msg = "", data = BarcodeWip, count = 1 });
return Json(new Table() { code = 0, msg = "OK", data = BarcodeWip, count = 1 });
}
}
return Json(new Table() { count = 0, msg = "生產序號不在工單區間內", data = null });
}
return Json(new Table() { count = 0,msg = "生產序號不在工單區間內", data = null });
else
{
//新增一個BarcodeWip變數,並填入預設值
var BarcodeWip = new BarcodeWip();
BarcodeWip.BarcodeID = 0;
BarcodeWip.WipID = wipInfo.Where(w => w.WipType == "N").Select(s => s.WipID).FirstOrDefault();
return Json(new Table() { count = 0, msg = "OK", data = BarcodeWip });
}
}
#endregion
#region SPC005 報表
/// <summary>
/// 產出PDF報表
/// </summary>
/// <param name="id"></param>
/// <param name="Types"></param>
/// <returns></returns>
public async Task<IActionResult> SPC005_PDF(int id,string Types)
{
string mimeType = "";
@ -1442,13 +1466,39 @@ namespace AMESCoreStudio.Web.Controllers
}
}
/// <summary>
/// 產出EXCEL報表
/// </summary>
/// <param name="id"></param>
/// <param name="Types"></param>
/// <returns></returns>
public async Task<IActionResult> SPC005_Excel(int id, string Types)
{
string mimeType = "";
int extension = 1;
Dictionary<string, string> param = new Dictionary<string, string>();
if (Types == "IPQC")
{
var localReport = GetReprot(id);
var result = localReport.Result.Execute(RenderType.ExcelOpenXml, extension, param, mimeType);
//return File(result.MainStream, "application/msexcel", "Export.xls");
return File(result.MainStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Export.xlsx");
}
else
{
var localReport = GetFAIReprot(id);
var result = localReport.Result.Execute(RenderType.ExcelOpenXml, extension, param, mimeType);
//return File(result.MainStream, "application/msexcel", "Export.xls");
return File(result.MainStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Export.xlsx");
}
}
/// <summary>
/// 產生IPQC報表
/// </summary>
/// <param name="id">IPQC報表</param>
/// <returns></returns>
private async Task<LocalReport> GetReprot(int id)
{
var path = $"{this._env.WebRootPath}\\Reports\\SPC005View.rdlc";
var path = $"{this._env.WebRootPath}\\Reports\\SPC005View1.rdlc";
LocalReport localReport = new LocalReport(path);
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
@ -1492,7 +1542,7 @@ namespace AMESCoreStudio.Web.Controllers
{
SPC005Master.Detail2_ASSY.Add(new SPC005Detail2
{
BarcodeNO = item.BarcodeNO,
SEQ = item.Seq.ToString(),
InspectionItemDesc = item.InspectionItemDesc,
InspectionResults = item.InspectionResult
@ -1513,7 +1563,7 @@ namespace AMESCoreStudio.Web.Controllers
{
SPC005Master.Detail2_TEST.Add(new SPC005Detail2
{
BarcodeNO = item.BarcodeNO,
SEQ = item.Seq.ToString(),
InspectionItemDesc = item.InspectionItemDesc,
InspectionResults = item.InspectionResult
@ -1534,7 +1584,7 @@ namespace AMESCoreStudio.Web.Controllers
{
SPC005Master.Detail2_PACK.Add(new SPC005Detail2
{
BarcodeNO = item.BarcodeNO,
SEQ = item.Seq.ToString(),
InspectionItemDesc = item.InspectionItemDesc,
InspectionResults = item.InspectionResult

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

@ -1131,6 +1131,20 @@ namespace AMESCoreStudio.Web
[WebApiClient.Attributes.HttpGet("api/BarcodeInfoes/GetWipBarcode4QRS009")]
ITask<ResultModel<dynamic>> GetWipBarcode4QRS009(int wipID, int stationID, int page, int limit);
/// <summary>
/// 查詢工單站別在製條碼資料
/// </summary>
/// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/BarcodeInfoes/GetWipBarcode4QRS009New")]
ITask<ResultModel<dynamic>> GetWipBarcode4QRS009New(int wipID, int stationID, int page, int limit);
/// <summary>
/// 查詢工單站別在製條碼資料
/// </summary>
/// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/BarcodeInfoes/GetWipBarcodeCount4QRS009")]
ITask<ResultModel<dynamic>> GetWipBarcodeCount4QRS009(int wipID, int stationID, int page, int limit);
#endregion
#region QRS010 良率

62
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 指定序號
@ -94,6 +104,14 @@ namespace AMESCoreStudio.Web
[WebApiClient.Attributes.HttpGet("api/PTD/CustomerItemMailGroupByCustomerCode/{id}")]
ITask<List<dynamic>> GetCustomerItemMailGroupByCustomerCode(string id);
/// <summary>
/// 確認序號是否已通過FQC檢驗
/// </summary>
/// <param name="barcodeNo">內部序號</param>
/// <param name="extraBarcodeNo">出貨序號</param>
/// <returns></returns>
[WebApiClient.Attributes.HttpGet("http://192.168.4.109:5088/api/FqcInhouseMaster/CheckFQCTestOk1")]
ITask<List<dynamic>> CheckFQCTestOk(string barcodeNo = null, string extraBarcodeNo = null);
#region "PTD003 作業查詢"
@ -101,7 +119,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 +158,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 客戶代號和客戶收件人名單"
@ -197,20 +237,38 @@ namespace AMESCoreStudio.Web
[WebApiClient.Attributes.HttpDelete("api/WipInfos/DeleteZWHPickListDetail/{sn}")]
ITask<ResultModel<string>> DeleteZWHPickListDetail(string sn);
[WebApiClient.Attributes.HttpDelete("api/WipInfos/DeleteZWHPickListDetailAll/{recordNo}/{lineNo}")]
ITask<ResultModel<string>> DeleteZWHPickListDetailAll(string recordNo, string lineNo);
#endregion
#region "PTD007 扣帳作業"
[WebApiClient.Attributes.HttpGet("api/WipInfos/GetZDNDetailJoinZWHPickListDetail")]
ITask<ResultModel<dynamic>> GetZDNDetailJoinZWHPickListDetail(string recordType, string recordNumber);
[WebApiClient.Attributes.HttpPost("api/WipInfos/PostPTD007Commit")]
ITask<ResultModel<dynamic>> PostPTD007Commit([FromBody, RawJsonContent] string model);
[WebApiClient.Attributes.HttpGet("api/WipInfos/GetPTD007QueryByRBU")]
ITask<ResultModel<dynamic>> GetPTD007QueryByRBU(string recordNumber, string RBU);
[WebApiClient.Attributes.HttpPost("api/WipInfos/PostPTD007CommitByRBU")]
ITask<ResultModel<dynamic>> PostPTD007CommitByRBU([FromBody, RawJsonContent] string model);
#endregion
#region "PTD008 還原作業"
[WebApiClient.Attributes.HttpGet("api/WipInfos/GetData4PTD008")]
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 ,string recordTypeID);
[WebApiClient.Attributes.HttpDelete("api/PTD/PTD008")]
ITask<bool> Del_PTD008(string serialNumber, string recordNumber, string lineNo, string productID);
#endregion
}

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

@ -278,7 +278,7 @@ namespace AMESCoreStudio.Web
/// IPQC資料
/// </summary>
/// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/InspectionResultMasters/IpqcQuery/{InspectionID}")]
[WebApiClient.Attributes.HttpGet("api/InspectionResultMasters/IpqcQueryToSPC005/{InspectionID}")]
ITask<ResultModel<IpqcDto>> GetIpqcQuery(int InspectionID);

14
AMESCoreStudio.Web/Startup.cs

@ -50,7 +50,7 @@ namespace AMESCoreStudio.Web
// ValidationVisitor exceeded the maximum configured validation depth '32'
services.AddMvc().AddMvcOptions(options =>
{
options.MaxModelValidationErrors = 999999;
options.MaxModelValidationErrors = 999999;
});
// Àɮץؿý
@ -80,11 +80,15 @@ namespace AMESCoreStudio.Web
{
config.ForEach(f =>
{
fileServerOptions.Add(new FileServerOptions
try
{
FileProvider = new PhysicalFileProvider(@f.RealPath),
RequestPath = new PathString(f.RequestPath),
});
fileServerOptions.Add(new FileServerOptions
{
FileProvider = new PhysicalFileProvider(@f.RealPath),
RequestPath = new PathString(f.RequestPath),
});
}
catch { }
});
};
services.AddSingleton<IFileServerProvider>(new FileServerProvider(fileServerOptions));

451
AMESCoreStudio.Web/Views/PCS/PCS003.cshtml

@ -519,18 +519,9 @@
<label class="layui-form-label">DIP</label>
<div class="layui-input-block">
<cl-checkbox asp-items="@ViewBag.GetCheckboxDIP" asp-for="wipBoard.DipSides" asp-skin="defult"></cl-checkbox>
<input @if (Model.wipBoard != null)
{
@(Model.wipBoard.DipCarrier == "Y" ? "checked" : "")
} type="checkbox" title="CARRIER" name="wipBoard.DipCarrier" />
<input @if (Model.wipBoard != null)
{
@(Model.wipBoard.DipTape == "Y" ? "checked" : "")
} type="checkbox" title="貼付膠帶" name="wipBoard.DipTape" />
<input @if (Model.wipBoard != null)
{
@(Model.wipBoard.DipSolderMask == "Y" ? "checked" : "")
} type="checkbox" title="點防焊膠" name="wipBoard.DipSolderMask" />
<input @if (Model.wipBoard != null) { @(Model.wipBoard.DipCarrier == "Y" ? "checked" : "") } type="checkbox" title="CARRIER" name="wipBoard.DipCarrier" />
<input @if (Model.wipBoard != null) { @(Model.wipBoard.DipTape == "Y" ? "checked" : "") } type="checkbox" title="貼付膠帶" name="wipBoard.DipTape" />
<input @if (Model.wipBoard != null) { @(Model.wipBoard.DipSolderMask == "Y" ? "checked" : "") } type="checkbox" title="點防焊膠" name="wipBoard.DipSolderMask" />
</div>
</div>
</div>
@ -546,10 +537,7 @@
<div class="layui-inline">
<label class="layui-form-label">燒錄</label>
<div class="layui-input-inline">
<input @if (Model.wipBoard != null)
{
@(Model.wipBoard.Burn == "Y" ? "checked" : "")
} type="checkbox" title="是否燒入" name="wipBoard.Burn" />
<input @if (Model.wipBoard != null) { @(Model.wipBoard.Burn == "Y" ? "checked" : "") } type="checkbox" title="是否燒入" name="wipBoard.Burn" />
</div>
<label class="layui-form-label">燒機位置</label>
@ -570,10 +558,7 @@
<div class="layui-inline">
<label class="layui-form-label">零件烘烤</label>
<div class="layui-input-inline">
<input @if (Model.wipBoard != null)
{
@(Model.wipBoard.ISPartsBake == "Y" ? "checked" : "")
} type="checkbox" title="零件是否需要烘烤" name="wipBoard.ISPartsBake" />
<input @if (Model.wipBoard != null) { @(Model.wipBoard.ISPartsBake == "Y" ? "checked" : "") } type="checkbox" title="零件是否需要烘烤" name="wipBoard.ISPartsBake" />
</div>
<label class="layui-form-label">零件烘烤溫度</label>
<div class="layui-input-inline" style="width:100px">
@ -586,10 +571,7 @@
</div>
<div class="layui-input-inline">
<input @if (Model.wipBoard != null)
{
@(Model.wipBoard.PartsBakeOvertime == "Y" ? "checked" : "")
} type="checkbox" title="零件烘烤超過48hrs" name="wipBoard.PartsBakeOvertime" />
<input @if (Model.wipBoard != null) { @(Model.wipBoard.PartsBakeOvertime == "Y" ? "checked" : "") } type="checkbox" title="零件烘烤超過48hrs" name="wipBoard.PartsBakeOvertime" />
</div>
</div>
</div>
@ -605,10 +587,7 @@
<div class="layui-inline">
<label class="layui-form-label">PCB烘烤</label>
<div class="layui-input-inline">
<input @if (Model.wipBoard != null)
{
@(Model.wipBoard.ISPcbBake == "Y" ? "checked" : "")
} type="checkbox" title="PCB是否需要烘烤" name="wipBoard.ISPcbBake" />
<input @if (Model.wipBoard != null) { @(Model.wipBoard.ISPcbBake == "Y" ? "checked" : "") } type="checkbox" title="PCB是否需要烘烤" name="wipBoard.ISPcbBake" />
</div>
<div class="layui-input-inline">
<select asp-items="@ViewBag.GetPCBBakeTypeSelect" asp-for="wipBoard.PcbBake" class=""></select>
@ -722,252 +701,252 @@
@* 系統-工程資訊sheet *@
<div class="layui-tab-item">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.Engineer"></label>
<div class="layui-input-inline">
<input style="background-color: #acdbe36b" class="layui-input" asp-for="wipSystem.Engineer" onchange="getUserName(this);" />
</div>
<div id="wipSystemDataView">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.Engineer"></label>
<div class="layui-input-inline">
<input style="background-color: #acdbe36b" class="layui-input" asp-for="wipSystem.Engineer" onchange="getUserName(this);" />
</div>
<label class="layui-form-label">姓名</label>
<div class="layui-input-inline">
<input class="layui-input" asp-for="wipSystem.Engineer_Name" readonly="readonly" />
</div>
<label class="layui-form-label">姓名</label>
<div class="layui-input-inline">
<input class="layui-input" asp-for="wipSystem.Engineer_Name" readonly="readonly" />
</div>
<div class="layui-input-inline" style="display: flex;align-items: center;height: 35px;">
<input asp-for="itemNoCT1" type="hidden" value="@Model.itemNoCT1" />
@if (!string.IsNullOrWhiteSpace(Model.itemNoCT1))
{
<span style="color:red">有維護標準工時</span>
}
else
{
<span style="color:red">**無維護標準工時**</span>
}
<div class="layui-input-inline" style="display: flex;align-items: center;height: 35px;">
<input asp-for="itemNoCT1" type="hidden" value="@Model.itemNoCT1" />
@if (!string.IsNullOrWhiteSpace(Model.itemNoCT1))
{
<span style="color:red">有維護標準工時</span>
}
else
{
<span style="color:red">**無維護標準工時**</span>
}
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">Power Mode</label>
<div class="layui-input-inline">
<select asp-for="wipSystem.PowerModeType" asp-items="@ViewBag.GetWipSystemPMTypeSelect" class=""></select>
</div>
<div class="layui-input-inline">
<input class="layui-input" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.PowerMode" autocomplete="off" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">Power Mode</label>
<div class="layui-input-inline">
<select asp-for="wipSystem.PowerModeType" asp-items="@ViewBag.GetWipSystemPMTypeSelect" class=""></select>
</div>
<div class="layui-input-inline">
<input class="layui-input" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.PowerMode" autocomplete="off" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">PLM生產備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.Memo" readonly="readonly"></textarea>
<div class="layui-form-item">
<label class="layui-form-label">PLM生產備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.Memo" readonly="readonly"></textarea>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label asp-for="wipSystem.BiRatio" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:80px;">
<input style="background-color: #acdbe36b" asp-for="wipSystem.BiRatio" class="layui-input" />
</div>
<label asp-for="wipSystem.BiTime" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:50px;">
<input asp-for="wipSystem.BiTime" class="layui-input" />
</div>
<div class="layui-form-mid layui-word-aux">小時</div>
<label asp-for="wipSystem.BiTemperature" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:120px;">
<select asp-for="wipSystem.BiTemperature" asp-items="@ViewBag.GetWipBITemperatuerSelect" class=""></select>
</div>
<label asp-for="wipSystem.BI_OS" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:200px;">
<select asp-for="wipSystem.BI_OS" asp-items="@ViewBag.GetWipBI_OSSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:50px;margin-top:5px;">
<a onclick="GetRuinTime();" class="layui-btn layui-btn-sm layui-btn-normal" style="padding: 0 5px;" title="更新燒機資訊">
<i class="layui-icon layui-icon-sm">&#xe669;</i>
</a>
<div class="layui-form-item">
<div class="layui-inline">
<label asp-for="wipSystem.BiRatio" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:80px;">
<input style="background-color: #acdbe36b" asp-for="wipSystem.BiRatio" class="layui-input" />
</div>
<label asp-for="wipSystem.BiTime" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:50px;">
<input asp-for="wipSystem.BiTime" class="layui-input" />
</div>
<div class="layui-form-mid layui-word-aux">小時</div>
<label asp-for="wipSystem.BiTemperature" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:120px;">
<select asp-for="wipSystem.BiTemperature" asp-items="@ViewBag.GetWipBITemperatuerSelect" class=""></select>
</div>
<label asp-for="wipSystem.BI_OS" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:200px;">
<select asp-for="wipSystem.BI_OS" asp-items="@ViewBag.GetWipBI_OSSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:50px;margin-top:5px;">
<a onclick="GetRuinTime();" class="layui-btn layui-btn-sm layui-btn-normal" style="padding: 0 5px;" title="更新燒機資訊">
<i class="layui-icon layui-icon-sm">&#xe669;</i>
</a>
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label asp-for="wipSystem.BiMemo" class="layui-form-label"></label>
<div class="layui-input-block">
<textarea asp-for="wipSystem.BiMemo" class="layui-textarea"></textarea>
<div class="layui-form-item">
<label asp-for="wipSystem.BiMemo" class="layui-form-label"></label>
<div class="layui-input-block">
<textarea asp-for="wipSystem.BiMemo" class="layui-textarea"></textarea>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">BIOS</label>
<div class="layui-input-inline" style="width:150px">
<select asp-for="wipSystem.BiosType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input style="background-color: #acdbe36b" class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.Bios" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width:300px;">
<input class="layui-input" asp-for="wipSystem.Bios_Desc" readonly="readonly" />
</div>
<label class="layui-form-label" style="width:40px;">Ver.</label>
<div class="layui-input-inline" style="width:80px;">
<input asp-for="wipSystem.BiosVer" class="layui-input" />
</div>
<label class="layui-form-label" style="width:40px;">CS.</label>
<div class="layui-input-inline" style="width:80px;">
<input asp-for="wipSystem.Checksum" style="width:80px;" class="layui-input" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">BIOS</label>
<div class="layui-input-inline" style="width:150px">
<select asp-for="wipSystem.BiosType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input style="background-color: #acdbe36b" class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.Bios" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width:300px;">
<input class="layui-input" asp-for="wipSystem.Bios_Desc" readonly="readonly" />
</div>
<label class="layui-form-label" style="width:40px;">Ver.</label>
<div class="layui-input-inline" style="width:80px;">
<input asp-for="wipSystem.BiosVer" class="layui-input" />
</div>
<label class="layui-form-label" style="width:40px;">CS.</label>
<div class="layui-input-inline" style="width:80px;">
<input asp-for="wipSystem.Checksum" style="width:80px;" class="layui-input" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">EC</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.ECType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px">
<input style="background-color: #acdbe36b" class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.Ec" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width:300px;">
<input class="layui-input" asp-for="wipSystem.Ec_Desc" readonly="readonly" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">EC</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.ECType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px">
<input style="background-color: #acdbe36b" class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.Ec" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width:300px;">
<input class="layui-input" asp-for="wipSystem.Ec_Desc" readonly="readonly" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FW</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.FWType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px">
<input style="background-color: #acdbe36b" class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.Fw" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px;">
<input class="layui-input" asp-for="wipSystem.Fw_Desc" readonly="readonly" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FW</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.FWType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px">
<input style="background-color: #acdbe36b" class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.Fw" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px;">
<input class="layui-input" asp-for="wipSystem.Fw_Desc" readonly="readonly" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FW1</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.FW1Type" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" asp-for="wipSystem.Fw1" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px; ">
<input class="layui-input" asp-for="wipSystem.Fw1_Desc" readonly="readonly" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FW1</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.FW1Type" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" asp-for="wipSystem.Fw1" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px; ">
<input class="layui-input" asp-for="wipSystem.Fw1_Desc" readonly="readonly" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FW2</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.FW2Type" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" asp-for="wipSystem.Fw2" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px;">
<input class="layui-input" asp-for="wipSystem.Fw2_Desc" readonly="readonly" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FW2</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.FW2Type" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" asp-for="wipSystem.Fw2" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px;">
<input class="layui-input" asp-for="wipSystem.Fw2_Desc" readonly="readonly" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.OsVer"></label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.OsType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" asp-for="wipSystem.OsVer" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px;">
<input class="layui-input" asp-for="wipSystem.OsVer_Desc" readonly="readonly" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.OsVer"></label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.OsType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" asp-for="wipSystem.OsVer" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px;">
<input class="layui-input" asp-for="wipSystem.OsVer_Desc" readonly="readonly" />
</div>
<input @if (Model.wipSystem != null) { @(Model.wipSystem.Antivirus == "Y" ? "checked" : "") }
type="checkbox" title="T3是否需掃毒" id="wipSystem_Antivirus" name="wipSystem.Antivirus" />
</div>
<input @if (Model.wipSystem != null)
{
@(Model.wipSystem.Antivirus == "Y" ? "checked" : "")
}
type="checkbox" title="T3是否需掃毒" id="wipSystem_Antivirus" name="wipSystem.Antivirus" />
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.Cpu"></label>
<div class="layui-input-inline">
<input class="layui-input" asp-for="wipSystem.Cpu" autocomplete="off" />
</div>
<label class="layui-form-label" asp-for="wipSystem.Ram"></label>
<div class="layui-input-inline">
<input class="layui-input" asp-for="wipSystem.Ram" autocomplete="off" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.Cpu"></label>
<div class="layui-input-inline">
<input class="layui-input" asp-for="wipSystem.Cpu" autocomplete="off" />
</div>
<label class="layui-form-label" asp-for="wipSystem.Ram"></label>
<div class="layui-input-inline">
<input class="layui-input" asp-for="wipSystem.Ram" autocomplete="off" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FINE_PACKAGE</label>
<div class="layui-input-inline">
<input @if (Model.wipSystem != null)
{
@(Model.wipSystem.FinePackage == "Y" ? "checked" : "")
} type="checkbox" title="是否為精裝" name="wipSystem.FinePackage" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FINE_PACKAGE</label>
<div class="layui-input-inline">
<input @if (Model.wipSystem != null) { @(Model.wipSystem.FinePackage == "Y" ? "checked" : "") } type="checkbox" title="是否為精裝" name="wipSystem.FinePackage" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.DmiBi"></label>
<div class="layui-input-inline ">
<select style="background-color: #acdbe36b" asp-for="wipSystem.DmiBi" asp-items="@ViewBag.GetWipSystemDMITypeSelect" class=""></select>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.DmiBi"></label>
<div class="layui-input-inline ">
<select style="background-color: #acdbe36b" asp-for="wipSystem.DmiBi" asp-items="@ViewBag.GetWipSystemDMITypeSelect" class=""></select>
</div>
<label class="layui-form-label" asp-for="wipSystem.DmiBiMemo"></label>
<div class="layui-input-inline" style="width: 500px;">
<input class="layui-input" asp-for="wipSystem.DmiBiMemo" />
</div>
</div>
<label class="layui-form-label" asp-for="wipSystem.DmiBiMemo"></label>
<div class="layui-input-inline" style="width: 500px;">
<input class="layui-input" asp-for="wipSystem.DmiBiMemo" />
</div>
<div class="layui-form-item">
<label class="layui-form-label" asp-for="wipSystem.Jumper"></label>
<div class="layui-input-block">
<input class="layui-input" asp-for="wipSystem.Jumper" autocomplete="off" />
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" asp-for="wipSystem.Jumper"></label>
<div class="layui-input-block">
<input class="layui-input" asp-for="wipSystem.Jumper" autocomplete="off" />
<div class="layui-form-item">
<label class="layui-form-label">組裝備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.BabMemo"></textarea>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">組裝備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.BabMemo"></textarea>
<div class="layui-form-item">
<label class="layui-form-label">測試備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.TestMemo"></textarea>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">測試備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.TestMemo"></textarea>
<div class="layui-form-item">
<label class="layui-form-label">包裝備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.PackingMemo"></textarea>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">包裝備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.PackingMemo"></textarea>
</div>
<div id="wipsystemNoCT1AlertShow">
<span style="color: red; font-size: 18pt; font-weight: bold; ">請先維護標工資訊</span>
</div>
</div>
@ -1040,8 +1019,8 @@
SOP文件敘述
</th>
@*<th>
檔案路徑
</th>*@
檔案路徑
</th>*@
<th>
SOP類型
</th>
@ -1065,8 +1044,8 @@
<input onkeypress="if( event.keyCode == 13 ) { return false; }" class="layui-input" asp-for="@index.SOPName" name="WipSops[@i].SOPName" />
</td>
@*<td>
<input onkeypress="if( event.keyCode == 13 ) { return false; }" class="layui-input" asp-for="@index.SOPPath" name="WipSops[@i].SOPPath" />
</td>*@
<input onkeypress="if( event.keyCode == 13 ) { return false; }" class="layui-input" asp-for="@index.SOPPath" name="WipSops[@i].SOPPath" />
</td>*@
<td>
<select asp-for="@index.SOPType" name="WipSops[@i].SOPType" asp-items="@ViewBag.GetSOPTypeSelect" class=""></select>
</td>
@ -1225,7 +1204,7 @@
RuleStation($("#flowId").val());
// 安勤統一Show工程資訊
// 統一Show工程資訊
$("#system").show();
$("#board").hide();
@ -1240,6 +1219,20 @@
}
}
// 無標工資訊,不顯示工程資訊
let totalCt1 = '@Model.itemNoCT1';
if (totalCt1 === '' || totalCt1 ==='0')
{
$("#wipSystemDataView").hide();
$("#wipsystemNoCT1AlertShow").show();
}
else
{
$("#wipSystemDataView").show();
$("#wipsystemNoCT1AlertShow").hide();
}
console.log(totalCt1);
// DIV 出貨序號
if ($('#wipBarcodeOtherCount').val() != "0") {
$("#barcodeOtherDiv").hide();

450
AMESCoreStudio.Web/Views/PCS/PCS034.cshtml

@ -501,18 +501,9 @@
<label class="layui-form-label">DIP</label>
<div class="layui-input-block">
<cl-checkbox asp-items="@ViewBag.GetCheckboxDIP" asp-for="wipBoard.DipSides" asp-skin="defult"></cl-checkbox>
<input @if (Model.wipBoard != null)
{
@(Model.wipBoard.DipCarrier == "Y" ? "checked" : "")
} type="checkbox" title="CARRIER" name="wipBoard.DipCarrier" />
<input @if (Model.wipBoard != null)
{
@(Model.wipBoard.DipTape == "Y" ? "checked" : "")
} type="checkbox" title="貼付膠帶" name="wipBoard.DipTape" />
<input @if (Model.wipBoard != null)
{
@(Model.wipBoard.DipSolderMask == "Y" ? "checked" : "")
} type="checkbox" title="點防焊膠" name="wipBoard.DipSolderMask" />
<input @if (Model.wipBoard != null) { @(Model.wipBoard.DipCarrier == "Y" ? "checked" : "") } type="checkbox" title="CARRIER" name="wipBoard.DipCarrier" />
<input @if (Model.wipBoard != null) { @(Model.wipBoard.DipTape == "Y" ? "checked" : "") } type="checkbox" title="貼付膠帶" name="wipBoard.DipTape" />
<input @if (Model.wipBoard != null) { @(Model.wipBoard.DipSolderMask == "Y" ? "checked" : "") } type="checkbox" title="點防焊膠" name="wipBoard.DipSolderMask" />
</div>
</div>
</div>
@ -528,10 +519,7 @@
<div class="layui-inline">
<label class="layui-form-label">燒錄</label>
<div class="layui-input-inline">
<input @if (Model.wipBoard != null)
{
@(Model.wipBoard.Burn == "Y" ? "checked" : "")
} type="checkbox" title="是否燒入" name="wipBoard.Burn" />
<input @if (Model.wipBoard != null) { @(Model.wipBoard.Burn == "Y" ? "checked" : "") } type="checkbox" title="是否燒入" name="wipBoard.Burn" />
</div>
<label class="layui-form-label">燒機位置</label>
@ -552,10 +540,7 @@
<div class="layui-inline">
<label class="layui-form-label">零件烘烤</label>
<div class="layui-input-inline">
<input @if (Model.wipBoard != null)
{
@(Model.wipBoard.ISPartsBake == "Y" ? "checked" : "")
} type="checkbox" title="零件是否需要烘烤" name="wipBoard.ISPartsBake" />
<input @if (Model.wipBoard != null) { @(Model.wipBoard.ISPartsBake == "Y" ? "checked" : "") } type="checkbox" title="零件是否需要烘烤" name="wipBoard.ISPartsBake" />
</div>
<label class="layui-form-label">零件烘烤溫度</label>
<div class="layui-input-inline" style="width:100px">
@ -568,10 +553,7 @@
</div>
<div class="layui-input-inline">
<input @if (Model.wipBoard != null)
{
@(Model.wipBoard.PartsBakeOvertime == "Y" ? "checked" : "")
} type="checkbox" title="零件烘烤超過48hrs" name="wipBoard.PartsBakeOvertime" />
<input @if (Model.wipBoard != null) { @(Model.wipBoard.PartsBakeOvertime == "Y" ? "checked" : "") } type="checkbox" title="零件烘烤超過48hrs" name="wipBoard.PartsBakeOvertime" />
</div>
</div>
</div>
@ -587,10 +569,7 @@
<div class="layui-inline">
<label class="layui-form-label">PCB烘烤</label>
<div class="layui-input-inline">
<input @if (Model.wipBoard != null)
{
@(Model.wipBoard.ISPcbBake == "Y" ? "checked" : "")
} type="checkbox" title="PCB是否需要烘烤" name="wipBoard.ISPcbBake" />
<input @if (Model.wipBoard != null) { @(Model.wipBoard.ISPcbBake == "Y" ? "checked" : "") } type="checkbox" title="PCB是否需要烘烤" name="wipBoard.ISPcbBake" />
</div>
<div class="layui-input-inline">
<select asp-items="@ViewBag.GetPCBBakeTypeSelect" asp-for="wipBoard.PcbBake" class=""></select>
@ -704,252 +683,252 @@
@* 系統-工程資訊sheet *@
<div class="layui-tab-item">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.Engineer"></label>
<div class="layui-input-inline">
<input style="background-color: #acdbe36b" class="layui-input" asp-for="wipSystem.Engineer" onchange="getUserName(this);" />
</div>
<div id="wipSystemDataView">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.Engineer"></label>
<div class="layui-input-inline">
<input style="background-color: #acdbe36b" class="layui-input" asp-for="wipSystem.Engineer" onchange="getUserName(this);" />
</div>
<label class="layui-form-label">姓名</label>
<div class="layui-input-inline">
<input class="layui-input" asp-for="wipSystem.Engineer_Name" readonly="readonly" />
</div>
<label class="layui-form-label">姓名</label>
<div class="layui-input-inline">
<input class="layui-input" asp-for="wipSystem.Engineer_Name" readonly="readonly" />
</div>
<div class="layui-input-inline" style="display: flex;align-items: center;height: 35px;">
<input asp-for="itemNoCT1" type="hidden" value="@Model.itemNoCT1" />
@if (!string.IsNullOrWhiteSpace(Model.itemNoCT1))
{
<span style="color:red">有維護標準工時</span>
}
else
{
<span style="color:red">**無維護標準工時**</span>
}
<div class="layui-input-inline" style="display: flex;align-items: center;height: 35px;">
<input asp-for="itemNoCT1" type="hidden" value="@Model.itemNoCT1" />
@if (!string.IsNullOrWhiteSpace(Model.itemNoCT1))
{
<span style="color:red">有維護標準工時</span>
}
else
{
<span style="color:red">**無維護標準工時**</span>
}
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">Power Mode</label>
<div class="layui-input-inline">
<select asp-for="wipSystem.PowerModeType" asp-items="@ViewBag.GetWipSystemPMTypeSelect" class=""></select>
</div>
<div class="layui-input-inline">
<input class="layui-input" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.PowerMode" autocomplete="off" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">Power Mode</label>
<div class="layui-input-inline">
<select asp-for="wipSystem.PowerModeType" asp-items="@ViewBag.GetWipSystemPMTypeSelect" class=""></select>
</div>
<div class="layui-input-inline">
<input class="layui-input" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.PowerMode" autocomplete="off" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">PLM生產備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.Memo" readonly="readonly"></textarea>
<div class="layui-form-item">
<label class="layui-form-label">PLM生產備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.Memo" readonly="readonly"></textarea>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label asp-for="wipSystem.BiRatio" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:80px;">
<input style="background-color: #acdbe36b" asp-for="wipSystem.BiRatio" class="layui-input" />
</div>
<label asp-for="wipSystem.BiTime" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:50px;">
<input asp-for="wipSystem.BiTime" class="layui-input" />
</div>
<div class="layui-form-mid layui-word-aux">小時</div>
<label asp-for="wipSystem.BiTemperature" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:120px;">
<select asp-for="wipSystem.BiTemperature" asp-items="@ViewBag.GetWipBITemperatuerSelect" class=""></select>
</div>
<label asp-for="wipSystem.BI_OS" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:200px;">
<select asp-for="wipSystem.BI_OS" asp-items="@ViewBag.GetWipBI_OSSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:50px;margin-top:5px;">
<a onclick="GetRuinTime();" class="layui-btn layui-btn-sm layui-btn-normal" style="padding: 0 5px;" title="更新燒機資訊">
<i class="layui-icon layui-icon-sm">&#xe669;</i>
</a>
<div class="layui-form-item">
<div class="layui-inline">
<label asp-for="wipSystem.BiRatio" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:80px;">
<input style="background-color: #acdbe36b" asp-for="wipSystem.BiRatio" class="layui-input" />
</div>
<label asp-for="wipSystem.BiTime" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:50px;">
<input asp-for="wipSystem.BiTime" class="layui-input" />
</div>
<div class="layui-form-mid layui-word-aux">小時</div>
<label asp-for="wipSystem.BiTemperature" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:120px;">
<select asp-for="wipSystem.BiTemperature" asp-items="@ViewBag.GetWipBITemperatuerSelect" class=""></select>
</div>
<label asp-for="wipSystem.BI_OS" class="layui-form-label"></label>
<div class="layui-input-inline" style="width:200px;">
<select asp-for="wipSystem.BI_OS" asp-items="@ViewBag.GetWipBI_OSSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:50px;margin-top:5px;">
<a onclick="GetRuinTime();" class="layui-btn layui-btn-sm layui-btn-normal" style="padding: 0 5px;" title="更新燒機資訊">
<i class="layui-icon layui-icon-sm">&#xe669;</i>
</a>
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label asp-for="wipSystem.BiMemo" class="layui-form-label"></label>
<div class="layui-input-block">
<textarea asp-for="wipSystem.BiMemo" class="layui-textarea"></textarea>
<div class="layui-form-item">
<label asp-for="wipSystem.BiMemo" class="layui-form-label"></label>
<div class="layui-input-block">
<textarea asp-for="wipSystem.BiMemo" class="layui-textarea"></textarea>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">BIOS</label>
<div class="layui-input-inline" style="width:150px">
<select asp-for="wipSystem.BiosType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input style="background-color: #acdbe36b" class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.Bios" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width:300px;">
<input class="layui-input" asp-for="wipSystem.Bios_Desc" readonly="readonly" />
</div>
<label class="layui-form-label" style="width:40px;">Ver.</label>
<div class="layui-input-inline" style="width:80px;">
<input asp-for="wipSystem.BiosVer" class="layui-input" />
</div>
<label class="layui-form-label" style="width:40px;">CS.</label>
<div class="layui-input-inline" style="width:80px;">
<input asp-for="wipSystem.Checksum" style="width:80px;" class="layui-input" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">BIOS</label>
<div class="layui-input-inline" style="width:150px">
<select asp-for="wipSystem.BiosType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input style="background-color: #acdbe36b" class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.Bios" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width:300px;">
<input class="layui-input" asp-for="wipSystem.Bios_Desc" readonly="readonly" />
</div>
<label class="layui-form-label" style="width:40px;">Ver.</label>
<div class="layui-input-inline" style="width:80px;">
<input asp-for="wipSystem.BiosVer" class="layui-input" />
</div>
<label class="layui-form-label" style="width:40px;">CS.</label>
<div class="layui-input-inline" style="width:80px;">
<input asp-for="wipSystem.Checksum" style="width:80px;" class="layui-input" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">EC</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.ECType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px">
<input style="background-color: #acdbe36b" class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.Ec" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width:300px;">
<input class="layui-input" asp-for="wipSystem.Ec_Desc" readonly="readonly" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">EC</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.ECType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px">
<input style="background-color: #acdbe36b" class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.Ec" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width:300px;">
<input class="layui-input" asp-for="wipSystem.Ec_Desc" readonly="readonly" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FW</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.FWType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px">
<input style="background-color: #acdbe36b" class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.Fw" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px;">
<input class="layui-input" asp-for="wipSystem.Fw_Desc" readonly="readonly" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FW</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.FWType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px">
<input style="background-color: #acdbe36b" class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" asp-for="wipSystem.Fw" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px;">
<input class="layui-input" asp-for="wipSystem.Fw_Desc" readonly="readonly" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FW1</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.FW1Type" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" asp-for="wipSystem.Fw1" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px; ">
<input class="layui-input" asp-for="wipSystem.Fw1_Desc" readonly="readonly" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FW1</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.FW1Type" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" asp-for="wipSystem.Fw1" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px; ">
<input class="layui-input" asp-for="wipSystem.Fw1_Desc" readonly="readonly" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FW2</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.FW2Type" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" asp-for="wipSystem.Fw2" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px;">
<input class="layui-input" asp-for="wipSystem.Fw2_Desc" readonly="readonly" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FW2</label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.FW2Type" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" asp-for="wipSystem.Fw2" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px;">
<input class="layui-input" asp-for="wipSystem.Fw2_Desc" readonly="readonly" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.OsVer"></label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.OsType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" asp-for="wipSystem.OsVer" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px;">
<input class="layui-input" asp-for="wipSystem.OsVer_Desc" readonly="readonly" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.OsVer"></label>
<div class="layui-input-inline" style="width:150px;">
<select asp-for="wipSystem.OsType" asp-items="@ViewBag.GetWipSystemTypeSelect" class=""></select>
</div>
<div class="layui-input-inline" style="width:150px;">
<input class="layui-input autocomplete" onkeypress="if( event.keyCode == 13 ) { return false; }" asp-for="wipSystem.OsVer" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" autocomplete="off" />
</div>
<div class="layui-input-inline" style="width: 300px;">
<input class="layui-input" asp-for="wipSystem.OsVer_Desc" readonly="readonly" />
</div>
<input @if (Model.wipSystem != null) { @(Model.wipSystem.Antivirus == "Y" ? "checked" : "") }
id="wipSystem_Antivirus" type="checkbox" title="T3是否需掃毒" name="wipSystem.Antivirus" />
</div>
<input @if (Model.wipSystem != null)
{
@(Model.wipSystem.Antivirus == "Y" ? "checked" : "")
}
id="wipSystem_Antivirus" type="checkbox" title="T3是否需掃毒" name="wipSystem.Antivirus" />
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.Cpu"></label>
<div class="layui-input-inline">
<input class="layui-input" asp-for="wipSystem.Cpu" autocomplete="off" />
</div>
<label class="layui-form-label" asp-for="wipSystem.Ram"></label>
<div class="layui-input-inline">
<input class="layui-input" asp-for="wipSystem.Ram" autocomplete="off" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.Cpu"></label>
<div class="layui-input-inline">
<input class="layui-input" asp-for="wipSystem.Cpu" autocomplete="off" />
</div>
<label class="layui-form-label" asp-for="wipSystem.Ram"></label>
<div class="layui-input-inline">
<input class="layui-input" asp-for="wipSystem.Ram" autocomplete="off" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FINE_PACKAGE</label>
<div class="layui-input-inline">
<input @if (Model.wipSystem != null)
{
@(Model.wipSystem.FinePackage == "Y" ? "checked" : "")
} type="checkbox" title="是否為精裝" name="wipSystem.FinePackage" />
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">FINE_PACKAGE</label>
<div class="layui-input-inline">
<input @if (Model.wipSystem != null) { @(Model.wipSystem.FinePackage == "Y" ? "checked" : "") } type="checkbox" title="是否為精裝" name="wipSystem.FinePackage" />
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.DmiBi"></label>
<div class="layui-input-inline ">
<select style="background-color: #acdbe36b" asp-for="wipSystem.DmiBi" asp-items="@ViewBag.GetWipSystemDMITypeSelect" class=""></select>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipSystem.DmiBi"></label>
<div class="layui-input-inline ">
<select style="background-color: #acdbe36b" asp-for="wipSystem.DmiBi" asp-items="@ViewBag.GetWipSystemDMITypeSelect" class=""></select>
</div>
<label class="layui-form-label" asp-for="wipSystem.DmiBiMemo"></label>
<div class="layui-input-inline" style="width: 500px;">
<input class="layui-input" asp-for="wipSystem.DmiBiMemo" />
</div>
</div>
<label class="layui-form-label" asp-for="wipSystem.DmiBiMemo"></label>
<div class="layui-input-inline" style="width: 500px;">
<input class="layui-input" asp-for="wipSystem.DmiBiMemo" />
</div>
<div class="layui-form-item">
<label class="layui-form-label" asp-for="wipSystem.Jumper"></label>
<div class="layui-input-block">
<input class="layui-input" asp-for="wipSystem.Jumper" autocomplete="off" />
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" asp-for="wipSystem.Jumper"></label>
<div class="layui-input-block">
<input class="layui-input" asp-for="wipSystem.Jumper" autocomplete="off" />
<div class="layui-form-item">
<label class="layui-form-label">組裝備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.BabMemo"></textarea>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">組裝備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.BabMemo"></textarea>
<div class="layui-form-item">
<label class="layui-form-label">測試備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.TestMemo"></textarea>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">測試備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.TestMemo"></textarea>
<div class="layui-form-item">
<label class="layui-form-label">包裝備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.PackingMemo"></textarea>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">包裝備註</label>
<div class="layui-input-block">
<textarea class="layui-textarea" asp-for="wipSystem.PackingMemo"></textarea>
</div>
<div id="wipsystemNoCT1AlertShow">
<span style="color: red; font-size: 18pt; font-weight: bold; ">請先維護標工資訊</span>
</div>
</div>
@ -1022,8 +1001,8 @@
SOP文件敘述
</th>
@*<th>
檔案路徑
</th>*@
檔案路徑
</th>*@
<th>
SOP類型
</th>
@ -1047,8 +1026,8 @@
<input onkeypress="if( event.keyCode == 13 ) { return false; }" class="layui-input" asp-for="@index.SOPName" name="WipSops[@i].SOPName" />
</td>
@*<td>
<input onkeypress="if( event.keyCode == 13 ) { return false; }" class="layui-input" asp-for="@index.SOPPath" name="WipSops[@i].SOPPath" />
</td>*@
<input onkeypress="if( event.keyCode == 13 ) { return false; }" class="layui-input" asp-for="@index.SOPPath" name="WipSops[@i].SOPPath" />
</td>*@
<td>
<select asp-for="@index.SOPType" name="WipSops[@i].SOPType" asp-items="@ViewBag.GetSOPTypeSelect" class=""></select>
</td>
@ -1206,7 +1185,7 @@
}
RuleStation($("#flowId").val());
// 安勤統一Show工程資訊
// 統一Show工程資訊
$("#system").show();
$("#board").hide();
@ -1221,6 +1200,19 @@
}
}
// 無標工資訊,不顯示工程資訊
let totalCt1 = '@Model.itemNoCT1';
if (totalCt1 === '' || totalCt1 ==='0')
{
$("#wipSystemDataView").hide();
$("#wipsystemNoCT1AlertShow").show();
}
else
{
$("#wipSystemDataView").show();
$("#wipsystemNoCT1AlertShow").hide();
}
// DIV 出貨序號
if ($('#wipBarcodeOtherCount').val() != "0") {
$("#barcodeOtherDiv").hide();

148
AMESCoreStudio.Web/Views/PTD/PTD002.cshtml

@ -76,7 +76,7 @@
</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" maxlength="6" autocomplete="off" class="layui-input" value="@ViewBag.LineNo">
</div>
<label class="layui-form-label">Location:</label>
<div class="layui-input-inline" style="width:120px">
@ -105,7 +105,6 @@
</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" value="1" title="Box No(安勤或昶亨生產)" lay-filter="radio-filter" checked />
@ -120,54 +119,49 @@
</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 class="layui-form-item">
<label class="layui-form-label">條碼輸入:</label>
<div class="layui-inline">
<div class="layui-input-inline" style="margin-left: 0;">
<input class="layui-input" id="frontSN" autocomplete="off" />
</div>
<div class="layui-inline">
<label class="layui-form-label">備貨量:</label>
<div class="layui-input-inline" style="width:70px">
<input id="StockQty" name="StockQty" type="number" autocomplete="off" class="layui-input" value="@ViewBag.StockQty">
</div>
<div class="layui-form-mid">~</div>
<div class="layui-input-inline">
<input class="layui-input" id="endSN" autocomplete="off" />
</div>
<div class="layui-inline">
<label class="layui-form-label">流水碼:</label>
<div class="layui-input-inline" style="width:70px">
<input id="sequential" type="number" name="sequential" autocomplete="off" class="layui-input" value="5">
</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" type="number" autocomplete="off" class="layui-input" value="@ViewBag.StockQty">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">流水碼:</label>
<div class="layui-input-inline" style="width:70px">
<input id="sequential" type="number" name="sequential" autocomplete="off" class="layui-input" value="5">
</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 class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">Excel匯入:</label>
<div class="layui-input-inline">
<textarea class="layui-textarea" id="SNData"></textarea>
</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>
<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>
<span style="color:red">條碼輸入與Excel匯入,只能選一種執行</span>
</div>
</div>
</div>
<div class="layui-inline" style="margin-right:0px;">
@ -222,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;
});
@ -239,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);
}
});
}
}
});
@ -275,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);
@ -360,6 +400,16 @@
};
var serializedData = new URLSearchParams(postData).toString();
var index = layer.load(1, {
shade: [0.4, '#000'],
content: '儲存中......',
success: function (layero) {
layero.find('.layui-layer-content').css({
'padding-top': '60px',
'width': '200px'
})
}
});
$.ajax({
url: "@Url.Action("PTD002_CheckInputData", "PTD")",
@ -372,6 +422,11 @@
}
// 用来统计重复的SN
var duplicateSNs = [];
// 清空表格
layui.table.reload('query', {
data: [],
});
res.data.forEach(function (item) {
if (isSNAlreadyExist('query', item.sn)) {
// 将重复的SN加入到duplicateSNs数组中
@ -390,6 +445,9 @@
hg.msg('加入失敗:' + res.msg);
}
},
complete: function (XMLHttpRequest, status) { //请求完成后最终执行参数
layer.close(index);
},
error: function (error) {
hg.msg('加入失敗:' + error.msg);
return;
@ -414,7 +472,6 @@
return; // Do not add the row
}
var postData = {
recordType: recordType,
workCenter: workCenter,
@ -423,7 +480,6 @@
recordDate: recordDate,
location: location,
customer: customer,
tableData: tableData
};

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

@ -41,7 +41,7 @@
<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>
</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">
@ -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>
<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>
</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',
@ -257,27 +282,35 @@
sort: true
},
{
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',
field: 'empID',
title: 'EMP',
width: 100,
sort: true
},
{
field: 'extNotes',
title: 'Notes',
},
{
field: 'recordDate',
title: 'RecordDate',
templet: '<div>{{ layui.util.toDateString(d.recordDate, "yyyy/MM/dd HH:mm:ss") }}</div>'
},
{
field: 'createDate',
title: 'CreateDate',
templet: '<div>{{ layui.util.toDateString(d.createDate, "yyyy/MM/dd HH:mm:ss") }}</div>'
}]
];

14
AMESCoreStudio.Web/Views/PTD/PTD004.cshtml

@ -31,7 +31,6 @@
},
{
field: 'id',
width: 100,
title: '代號'
},
{
@ -47,12 +46,10 @@
{
field: 'source',
title: '來源',
width: 160
},
{
field: 'prefixCode',
title: '開頭',
width: 160
},
{
field: 'length',
@ -193,25 +190,26 @@
//通过行tool编辑,lay-event="edit"
function edit(obj) {
if (obj.data.id) {
hg.open('修改單頭說明', '/PTD/PTD004U/' + obj.data.id, 480, 480);
if (obj.data.seq) {
hg.open('修改單頭說明', '/PTD/PTD004U?idx=' + obj.data.sEQ, 480, 480);
}
}
//通过行tool删除,lay-event="del"
function del(obj) {
if (obj.data.id) {
if (obj.data.seq) {
hg.confirm("系統:" + obj.data.typeName + ",確定要刪除嗎?", function () {
$.ajax({
url: '/PTD/PTD004D',
data: { id: obj.data.id },
data: { id: obj.data.seq },
type: 'POST',
success: function (res) {
if (res.success) {
hg.msghide("刪除成功!", {
icon: 6
});
layui.table.reload('test', { page: { curr: $(".layui-laypage-em").next().html() } })
layui.table.reload('test')
//layui.table.reload('test', { page: { curr: $(".layui-laypage-em").next().html() } })
}
else {
hg.msg(data.msg);

1
AMESCoreStudio.Web/Views/PTD/PTD004U.cshtml

@ -16,6 +16,7 @@
<form enctype="multipart/form-data" method="post" asp-action="PTD004Save">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="Mode" value="1" />
<input type="hidden" asp-for="SEQ" value=@Model.SEQ />
<div class="form-group form-inline my-sm-1">
<label asp-for="RBU" class="control-label col-sm-3">RBU</label>
<input asp-for="RBU" class="form-control col-sm-9" placeholder="請輸入RBU" />

10
AMESCoreStudio.Web/Views/PTD/PTD005.cshtml

@ -57,8 +57,8 @@
//通过行tool编辑,lay-event="edit"
function edit(obj) {
if (obj.data.itemNumber) {
hg.open('修改收件人名單', '/PTD/PTD005U/' + obj.data.itemNumber, 480,480);
if (obj.data.customerCode) {
hg.open('修改收件人名單', '/PTD/PTD005U/' + obj.data.customerCode, 480,480);
}
}
@ -69,11 +69,11 @@
str = "停用";
else
str = "啟用";
if (obj.data.itemNumber) {
hg.confirm("料號:" + obj.data.itemNumber + ",確定要"+str+"嗎?", function () {
if (obj.data.customerCode) {
hg.confirm("客戶代號:" + obj.data.customerCode + ",確定要"+str+"嗎?", function () {
$.ajax({
url: '/PTD/PTD005D',
data: { id: obj.data.itemNumber },
data: { id: obj.data.customerCode },
type: 'POST',
success: function (data) {
if (data.success) {

4
AMESCoreStudio.Web/Views/PTD/PTD005U.cshtml

@ -19,11 +19,11 @@
<div class="form-group form-inline my-sm-1">
<label asp-for="ItemNumber" class="control-label col-sm-3">料號</label>
<input asp-for="ItemNumber" class="form-control col-sm-9" readonly/>
<input asp-for="ItemNumber" class="form-control col-sm-9" />
</div>
<div class="form-group form-inline my-sm-1">
<label asp-for="CustomerCode" class="control-label col-sm-3">客戶代號</label>
<input asp-for="CustomerCode" class="form-control col-sm-9" placeholder="請輸入出貨客戶" />
<input asp-for="CustomerCode" class="form-control col-sm-9" placeholder="請輸入出貨客戶" readonly/>
<span asp-validation-for="CustomerCode" class="text-danger offset-sm-3 my-sm-1"></span>
</div>
<div class="form-group form-inline my-sm-1">

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

@ -68,7 +68,7 @@
</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" maxlength="6" class="layui-input" value="@ViewBag.LineNo">
</div>
<label class="layui-form-label">Location:</label>
<div class="layui-input-inline" style="width:120px">
@ -111,52 +111,47 @@
</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 class="layui-form-item">
<label class="layui-form-label">條碼輸入:</label>
<div class="layui-inline">
<div class="layui-input-inline" style="margin-left: 0;">
<input class="layui-input" id="frontSN" autocomplete="off" />
</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>
<label class="layui-form-label">流水碼:</label>
<div class="layui-input-inline" style="width:70px">
<input id="sequential" type="number" name="sequential" autocomplete="off" class="layui-input" value="5">
</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-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 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 class="layui-inline">
<label class="layui-form-label">作業備註</label>
<div class="layui-input-block">
<textarea id="ExtNotes" placeholder="作業人員輸入備註" class="layui-textarea"></textarea>
</div>
<label class="layui-form-label">流水碼:</label>
<div class="layui-input-inline" style="width:70px">
<input id="sequential" type="number" name="sequential" autocomplete="off" class="layui-input" value="5">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Excel匯入:</label>
<div class="layui-inline">
<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>
<span style="color:red">條碼輸入與Excel匯入,只能選一種執行</span>
</div>
</div>
</div>
@ -209,42 +204,81 @@
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) {
var lineNo = document.getElementById('lineNo').value;
var filteredInfo = recordTypeInfo.filter(function (info) {
return info.id === recordType;
});
//check recordNumber
if (recordNumber.length !== filteredInfo.length) {
layer.msg('請確認recordNumber碼長!', { icon: 2 });
var allPrefixes = [];
var isAnyValid = filteredInfo.some(function (filteredInfo) {
// 检查 recordNumber 长度
if (recordNumber.length !== filteredInfo.length) {
layer.msg('請確認recordNumber碼長!', { icon: 2 });
$("#recordNumber").val('');
return false; // 退出 some 循环
}
// 检查 recordNumber 是否以 prefixCode 开头
var prefixCode = filteredInfo.prefixCode;
if (recordNumber.startsWith(prefixCode)) {
return true; // 有一个符合条件,退出 some 循环
} else {
allPrefixes.push(prefixCode); // 收集不符合的 prefixCode
return false;
}
});
if (!isAnyValid) {
layer.msg('recordNumber開頭必須是其中之一: ' + allPrefixes.join(', '), { 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;
if (lineNo.length === 0) {
document.getElementById('lineNo').focus();
}
else {
table.reload('query', {
where: {
recordNumber: recordNumber,
LineNO: lineNo
},
page: {
curr: 1
},
done: function (res, curr, count) {
// 表格更新成功後計算資料筆數
calculateRowCount(res.data);
}
});
table.reload('query', {
where: {
recordNumber: recordNumber
},
page: {
curr: 1
$.ajax({
url: '@Url.Action("CheckRecordNoIsRecord", "PTD")',
type: 'POST',
data: { dnNo: recordNumber, dnlineNo: lineNo },
success: function (result) {
// 处理成功的情况
if (!result.success) {
hg.msg(`RecordNumber【${recordNumber}】 LineNo【${lineNo}】 已備貨完成`);
$("#recordNumber").val('');
$("#lineNo").val('');
$("#Customer").val('');
$('#PartNumber').val('');
$("#PartDesc").val('');
}
},
done: function (res, curr, count) {
// 表格更新成功後計算資料筆數
calculateRowCount(res.data);
var lineNo = document.getElementById('lineNo');
lineNo.focus();
error: function (error) {
hg.msg('錯誤:' + error);
console.log(error);
}
});
}
//calculateRowCount(table.cache['query']);
//var lineNo = document.getElementById('lineNo');
//lineNo.focus();
}
});
$('#lineNo').on('keypress', function (event) {
if (event.keyCode == 13) {
var table = layui.table;
@ -290,8 +324,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;
@ -402,6 +458,17 @@
var serializedData = new URLSearchParams(postData).toString();
var index = layer.load(1, {
shade: [0.4, '#000'],
content: '資料處理中......',
success: function (layero) {
layero.find('.layui-layer-content').css({
'padding-top': '60px',
'width': '200px'
})
}
});
$.ajax({
url: "@Url.Action("PTD006_CheckInputData", "PTD")",
type: 'POST',
@ -411,6 +478,9 @@
if (res.msg) {
hg.msg(res.msg);
}
else {
layer.msg('備貨成功!', { icon: 1 });
}
var table = layui.table;
table.reload('query', {
where: {
@ -423,7 +493,6 @@
done: function(res, curr, count) {
// 表格更新成功後計算資料筆數
calculateRowCount(res.data);
layer.msg('備貨成功!', { icon: 1 });
}
});
}
@ -431,6 +500,9 @@
hg.msg('加入失敗:' + res.msg);
}
},
complete: function (XMLHttpRequest, status) { //请求完成后最终执行参数
layer.close(index);
},
error: function (error) {
hg.msg('加入失敗:' + error.msg);
return;
@ -441,15 +513,15 @@
$('#delAll').on('click', function () {
hg.confirm("請確認是否整批刪除?", function () {
var tableData = layui.table.cache['query'];
$.each(tableData, function (index, data) {
if (tableData && tableData.length > 0) {
var firstRow = tableData[0];
console.log(firstRow);
$.ajax({
url: '/PTD/PTD006D',
data: { sn: data.sn },
url: '/PTD/PTD006DAll',
data: { recordNumber: firstRow.dnNo, lineNo: firstRow.lineNo },
type: 'POST',
success: function (res) {
if (res.success) {
if (index == (tableData.length - 1)) {
// 重新加载表格数据
layui.table.reload('query', {
data: tableData,
@ -458,27 +530,13 @@
});
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("網路請求失敗!");
}
});
});
}
});
});

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

@ -36,49 +36,47 @@
<div class="layui-card-body">
<div class="layui-form">
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-col-md9">
<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">
</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>
<div class="layui-col-md3">
<div class="layui-inline">
<label class="layui-form-label">交易單據:</label>
<div class="layui-input-inline" style="width:120px">
<input id="recordNumber" name="RecordNumber" autocomplete="off" class="layui-input" lay-verify="required" lay-reqtext="請輸入交易單據" value="@ViewBag.RecordNumber">
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-col-sm3">
<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" class="layui-input" value="@ViewBag.MaterialNo">
</div>
<div class="layui-col-md2">
<div class="layui-inline">
<label class="layui-form-label" style="width:50px;">Line NO:</label>
<div class="layui-input-inline" style="width:100px">
<input id="lineNo" name="LineNo" maxlength="6" autocomplete="off" class="layui-input" lay-verify="required" lay-reqtext="請輸入LineNo" value="@ViewBag.LineNo">
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-col-sm3">
<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">
</div>
<div class="layui-col-md3">
<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" 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 class="layui-inline layui-show-xs-block">
<button 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>
</div>
<div class="layui-col-md3">
<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">
</div>
</div>
</div>
<div class="layui-inline layui-show-xs-block">
<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>
</div>
<div class="layui-row">
<div class="layui-input-block">
</div>
</div>
<div class="layui-row">
<div class="layui-inline" style="flex: 1; width: 100%; text-align: right;">
@ -88,7 +86,6 @@
<input type="submit" id="del" value="刪除" class="layui-btn" />
</div>
</div>
</div>
</div>
<table class="layui-hide" id="query" lay-filter="query"></table>
@ -97,136 +94,154 @@
@section Scripts{
<script type="text/javascript">
layui.use(['form', 'layer', 'table'], function () {
var table = layui.table;
$('#commit').on('click', function () {
var tableData = table.cache['query'];
for (let i = 0; i < tableData.length; i++) {
(function (index) { // 使用閉包或函數參數傳遞 index
var postData = {
type: 0,
tableData: [tableData[index]]
};
$.ajax({
url: '@Url.Action("PTD008_Commit", "PTD")',
dataType: 'json',
data: { data: JSON.stringify(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 });
}
},
error: function (error) {
layer.msg('還原失敗!原因:' + error.msg, { icon: 2 });
}
});
})(i); // 將 i 值傳遞進來
// 還原
$('#commit').on('click', function () {
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;
}
});
$('#del').on('click', function () {
var tableData = table.cache['query'];
var tableData = layui.table.cache['query'];
if (tableData.length === 0) {
layer.msg('請確認是否有按查詢資料');
return;
}
for (var i = 0; i < tableData.length; i++) {
var postData = {
type: 1,
tableData: [tableData[i]]
};
// 组织数据为一个对象
var postData = {
recordNumber: recordNumber,
lineNo: lineNo,
materialNo: materialNo,
shippingSN: shippingSN
};
$.ajax({
$.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) {
// 更新該筆資料的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, time: 5000 });
// 手动触发按钮的点击事件
$('#submitBtn').click();
}
else {
layer.msg(result.msg, { icon: 2, time: 5000 });
}
},
error: function (error) {
layer.msg('還原失敗!原因:' + error.msg, { icon: 2 });
layer.msg('還原失敗!原因:' + error.msg, { icon: 2, time: 5000 });
}
});
}
});
});
// 刪除
$('#del').on('click', function () {
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;
}
// 组织数据为一个对象
var postData = {
recordNumber: recordNumber,
lineNo: lineNo,
materialNo: materialNo,
shippingSN: shippingSN
};
$.ajax({
url: '@Url.Action("PTD008_Del", "PTD")',
dataType: 'json',
data: postData,
type: 'POST',
success: function (result) {
if (result.success) {
layer.msg(result.msg, { icon: 1, time: 5000 });
// 手动触发按钮的点击事件
$('#submitBtn').click();
}
else {
layer.msg(result.msg, { icon: 2, time: 5000});
}
},
error: function (error) {
layer.msg('刪除失敗!原因:' + error.msg, { icon: 2, time: 5000});
}
});
});
});
//监听表单提交事件
hg.form.onsubmit('querysubmit', function (data) {
hg.msghide("載入資料..");
table && table.reload(data);
$("#rowCount").html("數量 : " + getTableRowCount() + " pcs");
layui.table.reload('query', {
where: {
recordNumber: data.RecordNumber,
lineNo: data.LineNo,
materialNo: data.MaterialNo,
shippingSN: data.ShippingSN
},
done: function (res, curr, count) {
// 表格更新成功後計算資料筆數
getTableRowCount();
}
});
});
function getTableRowCount() {
var tableData = layui.table.cache['query'];
$("#rowCount").html("數量 : " + tableData.length + " pcs");
return tableData.length;
}
var tableCols = [[
{
field: 'recordNumber',
width: 160,
title: '交易單據',
sort: true
},
{
field: 'lineNo',
width: 120,
title: 'LineNo',
sort: true
},
{
field: 'productID',
title: 'Material(料號)',
width: 160,
sort: true
},
{
field: 'sn',
width: 160,
title: 'SN',
sort: true
},
{
field: 'recordTypeID',
width: 100,
title: '狀態',
sort: true
},
{
field: 'result',
width: 100,
title: '執行結果'
}
]];
@ -235,4 +250,4 @@
var table = hg.table.datatable('query', '還原作業', '/PTD/PTD008Query', {}, tableCols, "", false, 'full-100');
</script>
}
}

2
AMESCoreStudio.Web/Views/QRS/QRS009W.cshtml

@ -48,6 +48,6 @@
];
//基本数据表格
var table = hg.table.datatable('test', '在製條碼資料', '/QRS/GetWipStationBarcode/' + wip_id.value + '_' + station_id.value, {}, tableCols, toolbar, true, 'full-100', ['filter', 'print', 'exports']);
var table = hg.table.datatable('test', '在製條碼資料', '/QRS/GetWipStationBarcodeNew/' + wip_id.value + '_' + station_id.value, {}, tableCols, toolbar, true, 'full-100', ['filter', 'print', 'exports']);
</script>
}

13
AMESCoreStudio.Web/Views/SPC/SPC005.cshtml

@ -247,7 +247,7 @@
sort: true
},
{
align: 'center', title: '操作', width: 150, fixed: 'right',
align: 'center', title: '操作', width: 250, fixed: 'right',
sort: true,
templet: function (item) {
var btns = '';
@ -257,7 +257,9 @@
else if (item.statusNo == "保存") {
btns = btns + '<a class="layui-btn layui-btn-warm layui-icon layui-icon-list layui-btn-xs" lay-event="view">檢視</a>';
if (item.inspectionTypeID == 1001) {
btns = btns + '<a class="layui-btn layui-btn-xs" lay-event="PDF">PDF</a> ';
btns = '<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>' +
btns +
'<a class="layui-btn layui-btn-xs" lay-event="PDF">PDF</a><a class="layui-btn layui-btn-xs" lay-event="Excel">Excel</a> ';
}
if (item.inspectionTypeID == 1000 || item.inspectionTypeID == 1002) {
btns = btns + '<a class="layui-btn layui-btn-xs" lay-event="PDF_FAI">PDF</a> ';
@ -282,6 +284,13 @@
hg.open('PDF', '/SPC/SPC005_PDF?id=' + obj.data.inspectionID +"&Types=IPQC" , '', '', true);
}
}
function Excel(obj) {
if (obj.data.inspectionID) {
window.open('/SPC/SPC005_Excel?id=' + obj.data.inspectionID + "&Types=IPQC", '', '', true);
return;
//hg.open('Excel', '/FQC/FQC010_Excel?inhouseNo=' + obj.data.inhouseNo + '&seqID=' + obj.data.seqID, '', '', true);
}
}
function PDF_FAI(obj) {
if (obj.data.inspectionID) {

31
AMESCoreStudio.Web/Views/SPC/SPC005C.cshtml

@ -138,7 +138,7 @@
@*回復*@
<script type="text/html" id="selectResult">
<select name='result' lay-verify='' lay-search='' class="layui-form" lay-filter="result">
<select name='selectResult' id='selectResult' lay-verify='' lay-search='' class="layui-form selectResult" lay-filter="selectResult">
<option value="NA">N/A</option>
<option value="P">PASS</option>
<option value="F">FAIL </option>
@ -584,9 +584,24 @@
elem.val(elem.data('value')).parents('div.layui-table-cell').css('overflow', 'visible');
});
form.render();
handleSelectResult();
}
});
}
// Table SelectResult 選項字體換色
function handleSelectResult() {
$('.selectResult').each(function () {
console.log($(this).val());
if ($(this).val() === 'P') {
$(this).next().find('input').css('color', 'green');
}
else if ($(this).val() === 'F') {
$(this).next().find('input').css('color', 'red');
}
});
}
/*表格列表操作*/
table.on('tool(test)', function (obj) {
var data = obj.data, layEvent = obj.event;
@ -686,6 +701,20 @@
$('table.layui-table thead tr th:nth-child(6)').addClass('layui-hide');
}
});
// 選單選擇後換色 SelectResult 選項字體換色
form.on('select(selectResult)', function (data) {
var id = data.elem.id;
if (data.value === "P") {
$(data.elem).next().find('input').css('color', 'green');
}
else if (data.value === "F") {
$(data.elem).next().find('input').css('color', 'red');
}
else {
$(data.elem).next().find('input').css('color', 'black');
}
});
});
function CheckBarcodeNo(BarcodeNo, WipNo) {

125
AMESCoreStudio.Web/Views/SPC/SPC005U.cshtml

@ -96,34 +96,34 @@
</div>
</div>
@*<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">線別:</label>
<div class="layui-input-inline" style="width:100px">
<select id="theLine" lay-event="theLine" lay-filter="theLine" lay-submit asp-items="@ViewBag.LineList">
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">站別:</label>
<div class="layui-input-inline" style="width:100px">
<select id="theStation" lay-event="theStation" lay-filter="theStation" lay-submit asp-items="@ViewBag.StationList">
</select>
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline" style="width:200px">
<input lay-filter="show" lay-skin="primary" type="checkbox" value="" title="勾選確認顯示線別/站別" />
</div>
</div>
</div>*@
<div class="layui-inline">
<label class="layui-form-label">線別:</label>
<div class="layui-input-inline" style="width:100px">
<select id="theLine" lay-event="theLine" lay-filter="theLine" lay-submit asp-items="@ViewBag.LineList">
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">站別:</label>
<div class="layui-input-inline" style="width:100px">
<select id="theStation" lay-event="theStation" lay-filter="theStation" lay-submit asp-items="@ViewBag.StationList">
</select>
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline" style="width:200px">
<input lay-filter="show" lay-skin="primary" type="checkbox" value="" title="勾選確認顯示線別/站別" />
</div>
</div>
</div>*@
</div>
@*<div class="layui-inline">
<div class="layui-form-item">
<span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span>
<button id="querysubmitTmp" class="layui-btn tt">暫存</button>
<button id="querysubmit" class="layui-btn tt">儲存</button>
</div>
</div>*@
<div class="layui-form-item">
<span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span>
<button id="querysubmitTmp" class="layui-btn tt">暫存</button>
<button id="querysubmit" class="layui-btn tt">儲存</button>
</div>
</div>*@
</form>
<form id="modeltable">
@if (ViewBag.InspectionTypeID == 1000)
@ -143,7 +143,7 @@
@*回復*@
<script type="text/html" id="selectResult">
<select name="selectResult" lay-filter="selectResult" id="selectResult" data-value={{d.result}} class="layui-form">
<select name="selectResult" lay-filter="selectResult" id="selectResult" data-value={{d.result}} class="layui-form selectResult">
<option value="NA">N/A</option>
<option value="P">PASS</option>
<option value="F">FAIL </option>
@ -355,12 +355,14 @@
laytpl = layui.laytpl,
laydate = layui.laydate;
itemslist();
function itemslist() {
var formID = $("#InspectionID").val();
table.render({
elem: '#test',
// url: '/SPC/GetInspectionResultDetails?id=' + formID,
// url: '/SPC/GetInspectionResultDetails?id=' + formID,
url: '/SPC/GetInspectionResultDetailsAndBolb?id=' + formID,
id: 'test',
@ -406,7 +408,7 @@
var btn = '<a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">上傳圖片</a> ';
if (d.stations.newCno > 0)
btn = btn + '<i class="layui-icon" style="font-size: 20px;">&#xe66e;</i> ' ;
btn = btn + '<i class="layui-icon" style="font-size: 20px;">&#xe66e;</i> ';
return btn;
@ -430,9 +432,24 @@
elem.val(elem.data('value')).parents('div.layui-table-cell').css('overflow', 'visible');
});
form.render();
handleSelectResult();
}
});
}
// Table SelectResult 選項字體換色
function handleSelectResult() {
$('.selectResult').each(function () {
console.log($(this).val());
if ($(this).val() === 'P') {
$(this).next().find('input').css('color', 'green');
}
else if ($(this).val() === 'F') {
$(this).next().find('input').css('color', 'red');
}
});
}
/*表格列表操作*/
table.on('tool(test)', function (obj) {
var data = obj.data, layEvent = obj.event;
@ -539,27 +556,41 @@
$('table.layui-table thead tr th:nth-child(6)').addClass('layui-hide');
}
});
});
function GetPLM_ECN() {
var ItemNo = $("#ItemNo").val();
$.ajax({
url: "@Url.Action("SPC005GetPLMECN", "SPC")",
type: "Post",
data: { "ItemNo": ItemNo },
success: function (result) {
if (result.success) {
$('#PLMECN').val(result.msg);
// 選單選擇後換色 SelectResult 選項字體換色
form.on('select(selectResult)', function (data) {
var id = data.elem.id;
if (data.value === "P") {
$(data.elem).next().find('input').css('color', 'green');
}
else {
alert(result.msg);
else if (data.value === "F") {
$(data.elem).next().find('input').css('color', 'red');
}
},
error: function (result) {
alert(`呼叫API失敗`);
}
else{
$(data.elem).next().find('input').css('color', 'black');
}
});
});
}
function GetPLM_ECN() {
var ItemNo = $("#ItemNo").val();
$.ajax({
url: "@Url.Action("SPC005GetPLMECN", "SPC")",
type: "Post",
data: { "ItemNo": ItemNo },
success: function (result) {
if (result.success) {
$('#PLMECN').val(result.msg);
}
else {
alert(result.msg);
}
},
error: function (result) {
alert(`呼叫API失敗`);
}
});
}
// PLM_ECN
$("#GetPLMECN").on("click", function () {
var ItemNo = $("#ItemNo").val();
@ -629,7 +660,5 @@
};
});
</script>
}

242
AMESCoreStudio.Web/Views/SPC/SPC005V.cshtml

@ -1,7 +1,8 @@
@model AMESCoreStudio.WebApi.Models.AMES.InspectionResultMaster
@{ ViewData["Title"] = "SPC005U";
@{
ViewData["Title"] = "SPC005U";
Layout = "~/Views/Shared/_AMESLayout.cshtml";
//Layout = "~/Views/Shared/_FormLayout.cshtml";
}
@ -15,12 +16,24 @@
margin-left: -10px;
margin-right: -10px;
}
.layui-table-cell {
height: auto;
overflow: visible;
text-overflow: inherit;
white-space: normal
}
.layui-disabled-red {
color: red !important;
cursor: not-allowed !important
}
.layui-disabled-green {
color: green !important;
cursor: not-allowed !important
}
green
</style>
<div class="layui-card">
<div class="layui-card-body">
@ -64,15 +77,17 @@
<table class="layui-hide" id="test" lay-filter="test" lay-data="{id:'test'}"></table>
</form>
</div>
</div>
</div>
@section Scripts {
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial");
await Html.RenderPartialAsync("_FileinputScriptsPartial"); }
@{
await Html.RenderPartialAsync("_ValidationScriptsPartial");
await Html.RenderPartialAsync("_FileinputScriptsPartial");
}
@*回復*@
<script type="text/html" id="selectResult">
<select name="selectResult" lay-filter="selectResult" id="selectResult" data-value={{d.result}} class="layui-form" disabled>
<select name="selectResult" lay-filter="selectResult" id="selectResult" data-value={{d.result}} class="layui-form selectResult" disabled>
<option value="NA">N/A</option>
<option value="P">PASS</option>
<option value="F">FAIL </option>
@ -100,115 +115,130 @@
</script>
<script type="text/javascript">
layui.use(['form', 'layer', 'table', 'laytpl', 'laydate'], function () {
var layer = layui.layer,
$ = layui.jquery,
form = layui.form,
table = layui.table;
itemslist();
function itemslist() {
var formID = $("#InspectionID").val();
table.render({
elem: '#test',
url: '/SPC/GetInspectionResultDetailsandBolb?id=' + formID,
id: 'test',
toolbar: '#toolBar',
//height:720,
page: false,
cols: [[
{ field: 'inspectionItemID', width: 50, title: '#', },
{
field: 'inspectionItem',
title: '項目',
align: 'left',
sort: true,
templet: function (d) {
return d.inspectionItem['inspectionItemName'];
}
},
{
field: 'inspectionItem',
title: '標準值',
minwidth: 80,
align: 'left',
templet: function (d) {
return d.inspectionItem['inspectionItemValue'];
}
},
{ field: 'result', title: '稽核結果', width: 100, align: "left", templet: '#selectResult' },
{ field: 'lineID', title: '線別', width: 100, align: "left", templet: '#selectLine' },
{ field: 'ruleStationID', title: '站別', width: 100, align: "left", templet: '#selectStation' },
{ field: 'location', title: '插件位置', width: 100, align: "left" },
{ field: 'missingUnitNo', title: '缺失單位', width: 100, align: "left", templet: '#selectDept' },
{ field: 'missingUserID', title: '缺失人員', width: 100, align: "left", templet: '#selectUser' },
{ field: 'missingRemark', title: '備註', width: 250, align: "left"},//templet: '#inputTest'
{
field: 'right',
width: 120,
title: '操作',
fixed: 'right',
templet: function (d) {
var btn = '<a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">上傳圖片</a> ';
if (d.stations.newCno > 0)
btn = btn + '<i class="layui-icon" style="font-size: 20px;">&#xe66e;</i> ';
return btn;
layui.use(['form', 'layer', 'table', 'laytpl', 'laydate'], function () {
var layer = layui.layer,
$ = layui.jquery,
form = layui.form,
table = layui.table;
itemslist();
function itemslist() {
var formID = $("#InspectionID").val();
table.render({
elem: '#test',
url: '/SPC/GetInspectionResultDetailsandBolb?id=' + formID,
id: 'test',
toolbar: '#toolBar',
//height:720,
page: false,
cols: [[
{ field: 'inspectionItemID', width: 50, title: '#', },
{
field: 'inspectionItem',
title: '項目',
align: 'left',
sort: true,
templet: function (d) {
return d.inspectionItem['inspectionItemName'];
}
},
{
field: 'inspectionItem',
title: '標準值',
minwidth: 80,
align: 'left',
templet: function (d) {
return d.inspectionItem['inspectionItemValue'];
}
},
{ field: 'result', title: '稽核結果', width: 100, align: "left", templet: '#selectResult' },
{ field: 'lineID', title: '線別', width: 100, align: "left", templet: '#selectLine' },
{ field: 'ruleStationID', title: '站別', width: 100, align: "left", templet: '#selectStation' },
{ field: 'location', title: '插件位置', width: 100, align: "left" },
{ field: 'missingUnitNo', title: '缺失單位', width: 100, align: "left", templet: '#selectDept' },
{ field: 'missingUserID', title: '缺失人員', width: 100, align: "left", templet: '#selectUser' },
{ field: 'missingRemark', title: '備註', width: 250, align: "left" },//templet: '#inputTest'
{
field: 'right',
width: 120,
title: '操作',
fixed: 'right',
templet: function (d) {
var btn = '<a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">上傳圖片</a> ';
if (d.stations.newCno > 0)
btn = btn + '<i class="layui-icon" style="font-size: 20px;">&#xe66e;</i> ';
return btn;
}
}
]],
done: function (res, curr, count) {
$(".layui-table-main tr").each(function (index, val) {
$($(".layui-table-fixed .layui-table-body tbody tr")[index]).height($(val).height());
});
layui.each($('select'), function (index, item) {
var elem = $(item);
elem.val(elem.data('value')).parents('div.layui-table-cell').css('overflow', 'visible');
});
form.render();
handleSelectResult();
}
]],
done: function (res, curr, count) {
$(".layui-table-main tr").each(function (index, val) {
$($(".layui-table-fixed .layui-table-body tbody tr")[index]).height($(val).height());
});
layui.each($('select'), function (index, item) {
var elem = $(item);
elem.val(elem.data('value')).parents('div.layui-table-cell').css('overflow', 'visible');
});
form.render();
}
});
}
/*表格列表操作*/
table.on('tool(test)', function (obj) {
var data = obj.data, layEvent = obj.event;
if (layEvent === 'edit') {
var id = $("#InspectionID").val();
if (obj.data.inspectionItemID) {
layer.open({
type: 2 //此處以iframe舉例
, title: '上傳文件'
, area: ['480px', '400px']
, shade: 0
, maxmin: true
, offset: 'auto'//顯示座標-auto居中
, content: "/SPC/SPC005R?id=" + id + "&itemID=" + obj.data.inspectionItemID
//, btn: ['關閉']
, yes: function () {
//layer.close();
if (layer.confirm('確定要關閉麼')) {
layer.close(index);
});
}
// Table SelectResult 選項字體換色
function handleSelectResult() {
$('.selectResult').each(function () {
console.log($(this));
if ($(this).val() === 'P') {
$(this).next().find('input').addClass('layui-disabled-green');
}
else if ($(this).val() === 'F') {
$(this).next().find('input').addClass('layui-disabled-red');
}
});
}
/*表格列表操作*/
table.on('tool(test)', function (obj) {
var data = obj.data, layEvent = obj.event;
if (layEvent === 'edit') {
var id = $("#InspectionID").val();
if (obj.data.inspectionItemID) {
layer.open({
type: 2 //此處以iframe舉例
, title: '上傳文件'
, area: ['480px', '400px']
, shade: 0
, maxmin: true
, offset: 'auto'//顯示座標-auto居中
, content: "/SPC/SPC005R?id=" + id + "&itemID=" + obj.data.inspectionItemID
//, btn: ['關閉']
, yes: function () {
//layer.close();
if (layer.confirm('確定要關閉麼')) {
layer.close(index);
}
// $(that).click();
}
// $(that).click();
}
, zIndex: 19891014 //layer.zIndex //重點1
, success: function (layero) {
layer.setTop(layero); //重點2
}
});
//hg.open('上傳文件', '/SPC/SPC005R?id=' + id + '&itemID=' + obj.data.inspectionItemID, 1080, 640);
, zIndex: 19891014 //layer.zIndex //重點1
, success: function (layero) {
layer.setTop(layero); //重點2
}
});
//hg.open('上傳文件', '/SPC/SPC005R?id=' + id + '&itemID=' + obj.data.inspectionItemID, 1080, 640);
}
}
});
});
$(document).ready(function () {
var error = '@Html.ValidationMessage("error")';
if ($(error).text() != '') {
parent.hg.msg(error);
}
});
});
$(document).ready(function () {
var error = '@Html.ValidationMessage("error")';
if ($(error).text() != '') {
parent.hg.msg(error);
}
});
</script>
}

6
AMESCoreStudio.Web/Views/WHS/WHS009C.cshtml

@ -447,7 +447,7 @@
success: function (result) {
if (result.data) {
$("#DutyUserID").empty();
$('#DutyUserID').append(new Option("請選擇", ""));
$('#DutyUserID').append(new Option("請選擇", "-1"));
var count = 0;
$.each(result.data, function (index, item) {
if (item.deptID == data) {
@ -457,12 +457,12 @@
});
if (count == 0) {
$("#DutyUserID").empty();
$('#DutyUserID').append(new Option("無選項", ""));
$('#DutyUserID').append(new Option("無選項", "-1"));
}
}
else {
$("#DutyUserID").empty();
$('#DutyUserID').append(new Option("無選項", ""));
$('#DutyUserID').append(new Option("無選項", "-1"));
}
layui.form.render("select");
}

2929
AMESCoreStudio.Web/wwwroot/Reports/SPC005View1.rdlc

File diff suppressed because it is too large

151
AMESCoreStudio.WebApi/Controllers/AMES/BarcodeInfoesController.cs

@ -8,6 +8,7 @@ using Microsoft.EntityFrameworkCore;
using AMESCoreStudio.WebApi;
using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.WebApi.Models.BAS;
using AMESCoreStudio.WebApi.Models.SYS;
using AMESCoreStudio.CommonTools.Result;
using AMESCoreStudio.WebApi.DTO.AMES;
using System.Data;
@ -148,6 +149,156 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return result;
}
/// <summary>
/// 查詢工單站別在製條碼資料
/// </summary>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipBarcode4QRS009New(int wipID, int stationID, int page = 0, int limit = 10)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
var q = from q1 in _context.BarcodeInfoes
join q2 in _context.WipInfos on q1.WipID equals q2.WipID
join q3 in _context.LineInfoes on q2.LineID equals q3.LineID
select new
{
q1.BarcodeID,
q1.WipID,
q1.StationID,
q1.BarcodeNo,
q3.LineDesc,
q1.RuleStatus,
q1.SysType,
q1.CreateDate,
q1.UpdateDate,
UserName = ""
};
q = q.Where(w => w.WipID == wipID && w.StationID == stationID);
var datas = await q.ToListAsync();
//紀錄筆數
result.DataTotal = q.Distinct().ToList().Count();
//Table 頁數
if (page > 0)
{
q = q.Distinct().Skip((page - 1) * limit).Take(limit);
}
DataTable dt = new DataTable();
dt.Columns.Add("barcodeID");
dt.Columns.Add("wipID");
dt.Columns.Add("stationID");
dt.Columns.Add("barcodeNo");
dt.Columns.Add("lineDesc");
dt.Columns.Add("ruleStatus");
dt.Columns.Add("sysType");
dt.Columns.Add("createDate");
dt.Columns.Add("updateDate");
dt.Columns.Add("userName");
dt.AcceptChanges();
foreach (var data in datas)
{
IQueryable<BarcodeStation> q2 = _context.BarcodeStation;
q2 = q2.Where(w => w.WipID == data.WipID && w.BarcodeID == data.BarcodeID && w.StationID == data.StationID);
q2 = q2.OrderByDescending(w => w.CreateDate);
var barcode_item = await q2.ToListAsync();
IQueryable<UserInfo> q3 = _context.UserInfoes;
q3 = q3.Where(w => w.UserID == barcode_item[0].CreateUserID);
var user_info = await q3.ToListAsync();
//data.UserName = user_info[0].UserName;
DataRow dr = dt.NewRow();
dr[0] = data.BarcodeID;
dr[1] = data.WipID;
dr[2] = data.StationID;
dr[3] = data.BarcodeNo;
dr[4] = data.LineDesc;
dr[5] = data.RuleStatus;
dr[6] = data.SysType;
dr[7] = data.CreateDate.ToString("yyyy-MM-dd HH:mm:ss");
dr[8] = data.UpdateDate.ToString("yyyy-MM-dd HH:mm:ss");
dr[9] = user_info[0].UserName;
dt.Rows.Add(dr);
dt.AcceptChanges();
}
//var dt_data = dt.AsEnumerable().ToList();
var dt_data = dt.Rows.Cast<DataRow>().Select(row => new QRS009WDto(row)).ToList();
result.Data = dt_data;
//result.Data = datas;
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
/// 查詢工單站別在製條碼資料
/// </summary>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipBarcodeCount4QRS009(int wipID, int stationID, int page = 0, int limit = 10)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
var q = from q1 in _context.BarcodeInfoes
join q2 in _context.WipInfos on q1.WipID equals q2.WipID
join q3 in _context.LineInfoes on q2.LineID equals q3.LineID
select new
{
q1.BarcodeID,
q1.WipID,
q1.StationID,
q1.BarcodeNo,
q3.LineDesc,
q1.RuleStatus,
q1.SysType,
q1.CreateDate,
q1.UpdateDate
};
q = q.Where(w => w.WipID == wipID && w.StationID == stationID);
//紀錄筆數
result.DataTotal = q.Distinct().ToList().Count();
//Table 頁數
if (page > 0)
{
q = q.Distinct().Skip((page - 1) * limit).Take(limit);
}
result.Data = await q.Distinct().ToListAsync();
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
/// 用工單號碼获取该條碼资料
/// </summary>

162
AMESCoreStudio.WebApi/Controllers/AMES/BarcodeItemsController.cs

@ -8,6 +8,7 @@ using Microsoft.EntityFrameworkCore;
using AMESCoreStudio.WebApi;
using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.CommonTools.Result;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Xml ;
@ -638,6 +639,167 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return result;
}
/// <summary>
/// 結轉寫入條碼組件資料
/// </summary>
/// <param name="barcodeID"></param>
/// <param name="wipID"></param>
/// <param name="stationID"></param>
/// <param name="itemData"></param>
/// <returns></returns>
[HttpPost("WriteBarcodeItem4DataCarrier4/{barcodeID}/{wipID}/{stationID}")]
public async Task<ResultModel<dynamic>> WriteBarcodeItem4DataCarrier4(int barcodeID, int wipID, int stationID, [FromBody] dynamic itemData)
{
Helper helper = new Helper(_context);
ResultModel<dynamic> result = new ResultModel<dynamic>();
JArray ja = new JArray();
string json_string = JsonConvert.SerializeObject(itemData);
ja = JArray.Parse(json_string);
int ngQty = 0;
string msg = "";
if (ja.Count > 0)
{
for (int i = 0; i < ja.Count; i++)
{
JObject jo = new JObject();
jo = JObject.Parse(ja[i].ToString());
string itemNo = jo["ITEM_NO"].ToString();
string partNo = jo["PART_NO"].ToString();
string kpItemNo = jo["KP_ITEM_NO"].ToString();
string kpDateTime = jo["KP_DATETIME"].ToString();
try
{
var barcodeItem = await _context.BarcodeItems.Where(m => m.BarcodeID == barcodeID && m.StationID == stationID && m.ItemNo == itemNo && m.PartNo == partNo).FirstOrDefaultAsync();
if (barcodeItem != null)
{
_context.BarcodeItems.Remove(barcodeItem);
}
BarcodeItem barcode_item = new BarcodeItem();
barcode_item.BarcodeItemID = helper.GetIDKey("BARCODEITEM_ID").Result;
barcode_item.BarcodeID = barcodeID;
barcode_item.WipID = wipID;
barcode_item.StationID = stationID;
barcode_item.ItemNo = itemNo;
barcode_item.PartNo = partNo;
barcode_item.KpItemNo = kpItemNo;
barcode_item.SysType = "S";
barcode_item.CreateDate = DateTime.Parse(kpDateTime.Substring(0, 4) + "-" + kpDateTime.Substring(4, 2) + "-" + kpDateTime.Substring(6, 2) + " " + kpDateTime.Substring(8, 2) + ":" + kpDateTime.Substring(10, 2) + ":" + kpDateTime.Substring(12, 2));
_context.BarcodeItems.Add(barcode_item);
await _context.SaveChangesAsync();
}
catch (Exception ex)
{
ngQty = ngQty + 1;
msg = msg + ex.Message;
}
}
}
if (ngQty > 0)
{
//紀錄筆數
result.Success = false;
result.Msg = "條碼組件資料寫入失敗" + ngQty + "筆;" + msg;
}
else
{
//紀錄筆數
result.Success = true;
result.Msg = "OK";
}
return result;
}
/// <summary>
/// 結轉寫入條碼組件資料
/// </summary>
/// <param name="barcodeID"></param>
/// <param name="wipID"></param>
/// <param name="stationID"></param>
/// <param name="itemData"></param>
/// <returns></returns>
[HttpPut("WriteBarcodeItem4DataCarrier3/{barcodeID}/{wipID}/{stationID}/{itemData}")]
public async Task<ResultModel<dynamic>> WriteBarcodeItem4DataCarrier3(int barcodeID, int wipID, int stationID, string itemData)
{
Helper helper = new Helper(_context);
ResultModel<dynamic> result = new ResultModel<dynamic>();
JArray ja = new JArray();
ja = JArray.Parse(itemData);
int ngQty = 0;
string msg = "";
if (ja.Count > 0)
{
for (int i = 0; i < ja.Count; i++)
{
JObject jo = new JObject();
jo = JObject.Parse(ja[i].ToString());
string itemNo = jo["ITEM_NO"].ToString();
string partNo = jo["PART_NO"].ToString();
string kpItemNo = jo["KP_ITEM_NO"].ToString();
string kpDateTime = jo["KP_DATETIME"].ToString();
try
{
var barcodeItem = await _context.BarcodeItems.Where(m => m.BarcodeID == barcodeID && m.StationID == stationID && m.ItemNo == itemNo && m.PartNo == partNo).FirstOrDefaultAsync();
if (barcodeItem != null)
{
_context.BarcodeItems.Remove(barcodeItem);
}
BarcodeItem barcode_item = new BarcodeItem();
barcode_item.BarcodeItemID = helper.GetIDKey("BARCODEITEM_ID").Result;
barcode_item.BarcodeID = barcodeID;
barcode_item.WipID = wipID;
barcode_item.StationID = stationID;
barcode_item.ItemNo = itemNo;
barcode_item.PartNo = partNo;
barcode_item.KpItemNo = kpItemNo;
barcode_item.SysType = "S";
barcode_item.CreateDate = DateTime.Parse(kpDateTime.Substring(0, 4) + "-" + kpDateTime.Substring(4, 2) + "-" + kpDateTime.Substring(6, 2) + " " + kpDateTime.Substring(8, 2) + ":" + kpDateTime.Substring(10, 2) + ":" + kpDateTime.Substring(12, 2));
_context.BarcodeItems.Add(barcode_item);
await _context.SaveChangesAsync();
}
catch (Exception ex)
{
ngQty = ngQty + 1;
msg = msg + ex.Message;
}
}
}
if (ngQty > 0)
{
//紀錄筆數
result.Success = false;
result.Msg = "條碼組件資料寫入失敗" + ngQty + "筆;" + msg;
}
else
{
//紀錄筆數
result.Success = true;
result.Msg = "OK";
}
return result;
}
/// <summary>
///
/// </summary>

72
AMESCoreStudio.WebApi/Controllers/AMES/FqcInhouseMasterController.cs

@ -413,6 +413,38 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return result;
}
/// <summary>
/// 確認序號是否已通過FQC檢驗
/// </summary>
/// <param name="barcodeNo">內部序號</param>
/// <param name="extraBarcodeNo">出貨序號</param>
/// <returns></returns>
[HttpGet("CheckFQCTestOk")]
public async Task<List<dynamic>> CheckFQCTestOk(string barcodeNo, string extraBarcodeNo)
{
var querySql = @" SELECT * FROM JHAMES.FQC_INHOUSE_MASTER M
INNER JOIN JHAMES.FQC_INHOUSE_DETAIL D ON M.INHOUSE_NO = D.INHOUSE_NO AND M.SEQ_ID = D.SEQ_ID
INNER JOIN JHAMES.BARCODE_INFO B ON B.BOX_NO = D.SERIAL_NO AND D.SERIAL_TYPE = 'B' ";
DynamicParameters p = new DynamicParameters();
if (!string.IsNullOrWhiteSpace(barcodeNo))
{
querySql += " AND B.BARCODE_NO =:barcodeNo ";
p.Add("barcodeNo", barcodeNo);
}
if (!string.IsNullOrWhiteSpace(extraBarcodeNo))
{
querySql += " AND B.EXTRA_BARCODE_NO =:extraBarcodeNo ";
p.Add("extraBarcodeNo", extraBarcodeNo);
}
querySql += "WHERE M.STATUS = 'P' ";
var result = await _context.Database.DapperQueryAsync<dynamic>(querySql, p);
return result.ToList();
}
/// <summary>
/// 確認FQC抽驗時是否已經跑到FQC流程
/// </summary>
@ -625,26 +657,26 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
{
IQueryable<FqcInhouseMaster_WareDto> q = (from q1 in _context.FqcInhouseMasters
join q2 in _context.FqcInhouseDetails on new { q1.InhouseNo, q1.SeqID } equals new { q2.InhouseNo, q2.SeqID }
join q3 in _context.FqcResultMasters on q1.InhouseNo equals q3.InhouseNo
join q4 in _context.WareHouseings on new { q2.InhouseNo, q2.SeqID, q2.SerialNo } equals new { q4.InhouseNo, q4.SeqID, q4.SerialNo } into q2q4
from q402 in q2q4.DefaultIfEmpty()
select new FqcInhouseMaster_WareDto
{
InhouseNo = q1.InhouseNo,
SeqID = q1.SeqID,
WipNo = q1.WipNo,
ItemNo = q1.ItemNo,
ModelNo = q1.ModelNo,
SerialNo = q2.SerialNo,
StatusName = q1.Status,
ProTypeName = q1.ProType,
CreateDate = q1.CreateDate,
EndTime = q3.EndTime,
RecordNumber = q402.RecordNumber,
RecordDate = q402.Create_Date,
LocationNo = q1.LocationNo,
}).Distinct();
join q2 in _context.FqcInhouseDetails on new { q1.InhouseNo, q1.SeqID } equals new { q2.InhouseNo, q2.SeqID }
join q3 in _context.FqcResultMasters on q1.InhouseNo equals q3.InhouseNo
join q4 in _context.WareHouseings on new { q2.InhouseNo, q2.SeqID, q2.SerialNo } equals new { q4.InhouseNo, q4.SeqID, q4.SerialNo } into q2q4
from q402 in q2q4.DefaultIfEmpty()
select new FqcInhouseMaster_WareDto
{
InhouseNo = q1.InhouseNo,
SeqID = q1.SeqID,
WipNo = q1.WipNo,
ItemNo = q1.ItemNo,
ModelNo = q1.ModelNo,
SerialNo = q2.SerialNo,
StatusName = q1.Status,
ProTypeName = q1.ProType,
CreateDate = q1.CreateDate,
EndTime = q3.EndTime,
RecordNumber = q402.RecordNumber,
RecordDate = q402.Create_Date,
LocationNo = q1.LocationNo,
}).Distinct();

176
AMESCoreStudio.WebApi/Controllers/AMES/InspectionResultMastersController.cs

@ -605,6 +605,182 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
}
/// <summary>
/// IPQC資料
/// </summary>
/// <param name="InspectionID">IPQCID</param>
/// <returns></returns>
[HttpGet("IpqcQueryToSPC005/{InspectionID}")]
public async Task<ResultModel<IpqcDto>> GetIpqcQueryToSPC005(int InspectionID)
{
var query1 = _context.InspectionResultMasters.Where(w => w.InspectionID == InspectionID).FirstOrDefault();
var Wip_No = query1.WipNo;
var UpdateDate = query1.UpdateDate.Date; // 保留日期部分
IQueryable<IpqcDto> q = from q1 in _context.InspectionResultMasters
.Where(w => w.WipNo == Wip_No && w.UpdateDate.Date == UpdateDate && w.StatusNo =="C")
join q9 in _context.InspectionForms.Where(w => w.InspectionTypeID == 1001) on q1.InspectionFormID equals q9.InspectionFormID
join q4 in _context.WipInfos on q1.WipNo equals q4.WipNO
join q5 in _context.WipSystems on q1.WipNo equals q5.WipNo into cp5
from q5 in cp5.DefaultIfEmpty()
join q6 in _context.UserInfoes on "182" equals q6.UserNo into cp6
from q6 in cp6.DefaultIfEmpty()
join q8 in _context.UserInfoes on q1.UpdateUserID equals q8.UserID into cp8
from q8 in cp8.DefaultIfEmpty()
select new IpqcDto
{
InspectionID = q1.InspectionID,
InspectionNo = "IPQC-" + q1.InspectionID.ToString(),
WipNo = q1.WipNo,
ItemNo = q1.ItemNo,
PlanQTY = q4.PlanQTY,
CustomerMedical = q4.CustomerMedical,
CustomerVIP = q4.CustomerVIP,
BIOS = q5.BiosVer,
Supervisor = "182",
Supervisor_Name = q6.UserName,
UpdateUser = q8.UserNo,
UpdateUser_Name = q8.UserName,
InspectionDate = q1.UpdateDate,
BarcodeNo = q1.BarcodeNo,
ItemNoDesc = q4.Description,
InspectionypeID = q9.InspectionTypeID
};
var query = await q.Distinct().OrderBy(o=>o.BarcodeNo).ToListAsync();
var IpqcDetail_ASSY = new List<IpqcDto.IpqcDetailDto>();
var IpqcDetail_TEST = new List<IpqcDto.IpqcDetailDto>();
var IpqcDetail_PACK = new List<IpqcDto.IpqcDetailDto>();
var IpqcDetailItem_ASSY = new List<IpqcDto.IpqcDetailItemDto>();
var IpqcDetailItem_TEST = new List<IpqcDto.IpqcDetailItemDto>();
var IpqcDetailItem_PACK = new List<IpqcDto.IpqcDetailItemDto>();
ResultModel<IpqcDto> result = new ResultModel<IpqcDto>();
result.Data = query.Where(w => w.InspectionNo == "IPQC-" + InspectionID.ToString());
if (query.Count() != 0)
{
foreach (var queryitem in query)
{
IQueryable<IpqcDto.IpqcDetailItemDto> q_Detail = from q1 in _context.InspectionResultDetails.Where(w => w.InspectionID == queryitem.InspectionID)
join q4 in _context.InspectionItems on q1.InspectionItemID equals q4.InspectionItemID
select new IpqcDto.IpqcDetailItemDto
{
Seq = q4.InspectionItemSeq,
InspectionItemID = q1.InspectionItemID,
InspectionItemDesc = q4.InspectionItemName,
InspectionResult = q1.Result
};
var query_Detail = await q_Detail.Distinct().ToListAsync();
var query_Detail_ASSY = query_Detail.Where(w => w.InspectionItemDesc.Contains("Assy") && (w.InspectionResult == "P" || w.InspectionResult == "F")).OrderBy(o => o.Seq).ToList();
if (query_Detail_ASSY.Count() > 0)
{
IpqcDetail_ASSY.Add(new IpqcDto.IpqcDetailDto
{
BarcodeNO = queryitem.BarcodeNo,
Result = query_Detail_ASSY.Where(w => w.InspectionResult == "F").Count() == 0 ? "P" : "F",
Defect = ""
});
foreach (var item in query_Detail_ASSY)
{
IpqcDetailItem_ASSY.Add(new IpqcDto.IpqcDetailItemDto
{
BarcodeNO = queryitem.BarcodeNo,
Seq = item.Seq,
InspectionItemID = item.InspectionItemID,
InspectionItemDesc = item.InspectionItemDesc,
InspectionResult = item.InspectionResult
});
}
};
var query_Detail_TEST = query_Detail.Where(w => w.InspectionItemDesc.Contains("Test") && (w.InspectionResult == "P" || w.InspectionResult == "F")).OrderBy(o => o.Seq).ToList();
if (query_Detail_TEST.Count() > 0)
{
IpqcDetail_TEST.Add(new IpqcDto.IpqcDetailDto
{
BarcodeNO = queryitem.BarcodeNo,
Result = query_Detail_TEST.Where(w => w.InspectionResult == "F").Count() == 0 ? "P" : "F",
Defect = ""
});
foreach (var item in query_Detail_TEST)
{
IpqcDetailItem_TEST.Add(new IpqcDto.IpqcDetailItemDto
{
BarcodeNO = queryitem.BarcodeNo,
Seq = item.Seq,
InspectionItemID = item.InspectionItemID,
InspectionItemDesc = item.InspectionItemDesc,
InspectionResult = item.InspectionResult
});
}
};
var query_Detail_PACK = query_Detail.Where(w => w.InspectionItemDesc.Contains("Packing") && (w.InspectionResult == "P" || w.InspectionResult == "F")).OrderBy(o => o.Seq).ToList();
if (query_Detail_PACK.Count() > 0)
{
IpqcDetail_PACK.Add(new IpqcDto.IpqcDetailDto
{
BarcodeNO = queryitem.BarcodeNo,
Result = query_Detail_PACK.Where(w => w.InspectionResult == "F").Count() == 0 ? "P" : "F",
Defect = ""
});
foreach (var item in query_Detail_PACK)
{
IpqcDetailItem_PACK.Add(new IpqcDto.IpqcDetailItemDto
{
BarcodeNO = queryitem.BarcodeNo,
Seq = item.Seq,
InspectionItemID = item.InspectionItemID,
InspectionItemDesc = item.InspectionItemDesc,
InspectionResult = item.InspectionResult
});
}
};
}
foreach (var item in result.Data)
{
item.IpqcDetail_ASSY.AddRange(IpqcDetail_ASSY);
item.IpqcDetail_TEST.AddRange(IpqcDetail_TEST);
item.IpqcDetail_Pack.AddRange(IpqcDetail_PACK);
item.qcItemDtos_ASSY.AddRange(IpqcDetailItem_ASSY);
item.qcItemDtos_TEST.AddRange(IpqcDetailItem_TEST);
item.qcItemDtos_Pack.AddRange(IpqcDetailItem_PACK);
}
}
return result;
}
/// <summary>
/// IPQC資料
/// </summary>

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

@ -1741,8 +1741,10 @@ FROM [SFIS].[dbo].[ZPDKeyPart] B WHERE B.[IsActive] = 1 AND B.[ProductSN] = (S
join q2 in _context.WipAtts on q1.WipNO equals q2.WipNO
join q3 in _context.LineInfoes on q1.LineID equals q3.LineID
join q4 in _context.FactoryUnits on q1.UnitNO equals q4.UnitNo
join q5 in _context.WipStations.Where(y => slist.Contains(y.StationID) && y.CreateDate >= DateTime.Parse(dateStart) && y.CreateDate <= DateTime.Parse(dateEnd).AddDays(1)).GroupBy(x => new { x.WipID }).Select(x => new { WipID = x.Key.WipID, CreateDate = x.Min(o => o.CreateDate) }) on q1.WipID equals q5.WipID into wip_data
from x1 in wip_data.DefaultIfEmpty()
join q5 in _context.WipStations.Where(y => slist.Contains(y.StationID) && y.CreateDate >= DateTime.Parse(dateStart) && y.CreateDate <= DateTime.Parse(dateEnd).AddDays(1)).GroupBy(x => new { x.WipID }).Select(x => new { WipID = x.Key.WipID, CreateDate = x.Min(o => o.CreateDate) }) on q1.WipID equals q5.WipID
//join q5 in _context.WipStations.Where(y => slist.Contains(y.StationID) && y.CreateDate >= DateTime.Parse(dateStart) && y.CreateDate <= DateTime.Parse(dateEnd).AddDays(1)).GroupBy(x => new { x.WipID }).Select(x => new { WipID = x.Key.WipID, CreateDate = x.Min(o => o.CreateDate) }) on q1.WipID equals q5.WipID into wip_data
//from x1 in wip_data.DefaultIfEmpty()
//join q6 in _context.FqcResultMasters.GroupBy(x => new { x.WipNo }).Select(x => new { WipNo = x.Key.WipNo, FqcDate = x.Max(o => o.EndTime) }) on q2.WipNO equals q6.WipNo
join q6 in _context.FqcResultMasters.GroupBy(x => new { x.WipNo }).Select(x => new { WipNo = x.Key.WipNo, FqcDate = x.Max(o => o.EndTime) }) on q2.WipNO equals q6.WipNo into fqc_data
from x2 in fqc_data.DefaultIfEmpty()
select new
@ -1758,7 +1760,8 @@ FROM [SFIS].[dbo].[ZPDKeyPart] B WHERE B.[IsActive] = 1 AND B.[ProductSN] = (S
q1.FlowRuleID,
q1.StatusNO,
q1.WipScheduleDate,
CreateDate = (x1.CreateDate == null ? DateTime.Now : x1.CreateDate),
//CreateDate = (x1.CreateDate == null ? DateTime.Now : x1.CreateDate),
q5.CreateDate,
q2.ItemNO,
q2.ModelNO,
q3.LineDesc,
@ -1772,7 +1775,7 @@ FROM [SFIS].[dbo].[ZPDKeyPart] B WHERE B.[IsActive] = 1 AND B.[ProductSN] = (S
{
q = q.Where(w => w.UnitNO == unitNo);
}
if (werksNo != "*")
if (werksNo != "*" && werksNo != null)
{
q = q.Where(w => w.WerksNO == werksNo);
}
@ -1807,7 +1810,11 @@ FROM [SFIS].[dbo].[ZPDKeyPart] B WHERE B.[IsActive] = 1 AND B.[ProductSN] = (S
//紀錄筆數
result.DataTotal = q.Distinct().ToList().Count();
result.Data = await q.Distinct().ToListAsync();
var data1 = await q.Distinct().ToListAsync();
var data2 = data1.OrderByDescending(x => x.WipNO).ToList();
//result.Data = await q.Distinct().ToListAsync();
result.Data = data2;
if (result == null)
{
@ -3064,7 +3071,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
string strDNNo = data.TableData[0].DnNo;
var pdtMail = await new PTD.PTDController().GetCustomerItemMailGroup(customer);
if (pdtMail.Any())
if (pdtMail.Any(a => a.StatusNo != "S"))
{
var firstItem = pdtMail.FirstOrDefault();
string toMail = firstItem.MailGroup;
@ -3560,7 +3567,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 , CONVERT(datetime,
a.EmplID as empID , a.CreateDate , a.ExtNotes , CONVERT(datetime,
SWITCHOFFSET(CONVERT(datetimeoffset,
a.RecordDate),
DATENAME(TzOffset, SYSDATETIMEOFFSET()))) as RecordDate
@ -3660,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>();
//安勤連線
@ -3675,8 +3683,10 @@ 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.EmplID as empID , a.CreateDate , a.ExtNotes ,a.RecordDate ,
a.SalesOrderNumber AS soNumber , a.SOLineNO AS soLineNo
FROM SFIS_PTD.dbo.ZProductTrans a where 1=1 ";
if (recordType != null && recordType != "" && recordType != "全部")
{
strSQL += $" And a.RecordTypeID ='{recordType}'";
@ -3713,8 +3723,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())
@ -3861,7 +3886,8 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
Source = Convert.ToString(row["Source"]),
PrefixCode = Convert.ToString(row["PrefixCode"]),
Length = row["Length"] == DBNull.Value ? (int?)null : Convert.ToInt32(row["Length"]),
Status = Convert.ToString(row["Status"])
Status = Convert.ToString(row["Status"]),
SEQ = Convert.ToString(row["SEQ"])
});
}
return RecordTypeInfo;
@ -3881,7 +3907,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
}
[HttpGet("GetRecordTypeInfo/{id}")]
public async Task<ActionResult<IEnumerable<RecordTypeInfo>>> GetRecordTypeInfo(string id)
public async Task<ActionResult<IEnumerable<RecordTypeInfo>>> GetRecordTypeInfo(int id)
{
//安勤連線
PTDContext _ptd_context = new PTDContext();
@ -3892,11 +3918,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
}
try
{
string strSQL = $@"select * from SFIS_PTD.dbo.RecordTypeInfo";
if (id != null && id != "")
{
strSQL += $@" Where id ='{id}'";
}
string strSQL = $@"select * from SFIS_PTD.dbo.RecordTypeInfo Where RecordTypeID ='{id}'";
DataTable dtRecordTypeInfo = new DataTable();
using (var cmd = connPTD.CreateCommand())
@ -3923,7 +3945,8 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
Source = Convert.ToString(row["Source"]),
PrefixCode = Convert.ToString(row["PrefixCode"]),
Length = row["Length"] == DBNull.Value ? (int?)null : Convert.ToInt32(row["Length"]),
Status = Convert.ToString(row["Status"])
Status = Convert.ToString(row["Status"]),
SEQ = Convert.ToString(row["SEQ"])
});
}
return RecordTypeInfo;
@ -4009,13 +4032,14 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
{
string strSQL = $@"UPDATE SFIS_PTD.dbo.RecordTypeInfo
SET RBU = '{RecordTypeInfo.RBU}',
ID = '{RecordTypeInfo.ID}',
TypeName = '{RecordTypeInfo.TypeName}',
TypeDesc = '{RecordTypeInfo.TypeDesc}',
Source = '{RecordTypeInfo.Source}',
PrefixCode = '{RecordTypeInfo.PrefixCode}',
Length = {RecordTypeInfo.Length},
Status = '{RecordTypeInfo.Status}'
WHERE ID = '{id}'";
WHERE SEQ = '{RecordTypeInfo.SEQ}'";
using (var cmd = connPTD.CreateCommand())
{
@ -4056,8 +4080,8 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
try
{
string strSQL = $@"DELETE FROM SFIS_PTD.dbo.RecordTypeInfo
WHERE ID = '{id}'";
WHERE SEQ = '{id}'";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
@ -4155,7 +4179,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
string strSQL = $@"select * from SFIS_PTD.dbo.CustomerItemMailGroup Where 1=1";
if (id != null && id != "")
{
strSQL += $@" And ItemNumber ='{id}'";
strSQL += $@" And CustomerCode ='{id}'";
}
DataTable dtCustomerItemMailGroup = new DataTable();
using (var cmd = connPTD.CreateCommand())
@ -4242,7 +4266,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
public async Task<ResultModel<CustomerItemMailGroupModel>> PutCustomerItemMailGroup(string id, [FromBody] CustomerItemMailGroupModel CustomerItemMailGroup)
{
ResultModel<CustomerItemMailGroupModel> result = new ResultModel<CustomerItemMailGroupModel>();
if (id != CustomerItemMailGroup.ItemNumber)
if (id != CustomerItemMailGroup.CustomerCode)
{
result.Success = false;
result.Msg = "ID錯誤";
@ -4260,9 +4284,9 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
try
{
string strSQL = $@"UPDATE SFIS_PTD.dbo.CustomerItemMailGroup
SET CustomerCode = '{CustomerItemMailGroup.CustomerCode}',
SET ItemNumber = '{CustomerItemMailGroup.ItemNumber}',
MailGroup = '{CustomerItemMailGroup.MailGroup}'
WHERE ItemNumber = '{id}'";
WHERE CustomerCode = '{id}'";
using (var cmd = connPTD.CreateCommand())
{
@ -4309,7 +4333,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
WHEN StatusNo = 'S' THEN 'A'
ELSE 'A'
END
WHERE ItemNumber = '{id}'";
WHERE CustomerCode = '{id}'";
using (var cmd = connPTD.CreateCommand())
{
@ -4621,6 +4645,48 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
}
return result;
}
[HttpDelete("DeleteZWHPickListDetailAll/{recordNo}/{lineNo}")]
public async Task<ResultModel<RecordTypeInfo>> DeleteZWHPickListDetailAll(string recordNo, string lineNo)
{
ResultModel<RecordTypeInfo> result = new ResultModel<RecordTypeInfo>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"DELETE FROM SFIS_PTD.dbo.[ZWHPickListDetail]
WHERE [TaskStatus] = 'Picked' And [RecordNumber] ='{recordNo}' AND [RCLineNO] = '{lineNo}'";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
cmd.ExecuteNonQuery();
}
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
return result;
}
#endregion
#region "PTD007 扣帳作業"
@ -4705,6 +4771,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)
@ -5028,6 +5095,227 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
}
return result;
}
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetPTD007QueryByRBU(string recordNumber, string RBU)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
try
{
using (IDbConnection ptdConnection = new SqlConnection(_PTDContext))
{
if (ptdConnection.State != ConnectionState.Open)
{
ptdConnection.Open();
}
// 判斷ERP_CustomerID
var erpCustomerId = new List<string>();
if (RBU == "AUS")
erpCustomerId.AddRange(new[] { "81US0023" });
else if (RBU == "ASH")
erpCustomerId.AddRange(new[] { "35CH0001" });
else
erpCustomerId.AddRange(new[] { "35CH0692", "30TW0001" });
var query = @$" SELECT A.* , B.ExpectShipDate , B.ShipQty FROM
(SELECT RecordNumber AS DNNO ,
RCLineNO AS DNLineNO ,
ProductID ,
EmplID AS SoldCustomerID ,
count(*) as Qty ,
OwnerPlantID
FROM SFIS_PTD.dbo.ZProductTrans
WHERE ERP_CustomerID IN ({string.Join(", ", erpCustomerId.ConvertAll(id => $"N'{id}'"))})
AND RecordNumber = @RecordNumber
AND IsBranchCoReceived = 0
AND RecordTypeID in (N'601',N'633',N'601DB')
GROUP BY RecordNumber, RCLineNO, ProductID, OwnerPlantID ,EmplID
) A
LEFT JOIN SFIS_PTD.dbo.ZDNDetail B on A.DNNO = B.DNNO AND A.DNLineNO = B.DNLineNO
ORDER BY A.DNNO, A.DNLineNO ";
DynamicParameters p = new DynamicParameters();
p.Add("RecordNumber", recordNumber, DbType.String);
var q = await ptdConnection.QueryAsync<dynamic>(query, p);
result.DataTotal = q.Count();
result.Data = q;
}
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
[Route("[action]")]
[HttpPost]
public async Task<ResultModel<dynamic>> PostPTD007CommitByRBU(PTD007CommitDataModel Data)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
List<string> SNList = new List<string>();
Collection<string> colSQL = new Collection<string>();
List<PTD002CommitDataModel> mailData = new List<PTD002CommitDataModel>();
try
{
// RecordDate 加入目前時間
Data.RecordDate += $" {DateTime.Now:HH:mm:ss}";
string strSQL = "";
string strRecordType = Data.RecordType;
string strRbu = Data.Rbu;
string strWorkCenter = Data.WorkCenter;
string strRecordDate = TimeZoneInfo.ConvertTimeToUtc(DateTime.Parse(Data.RecordDate)).ToString("yyyy-MM-dd HH:mm:ss");
string strCreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
// 判斷ERP_CustomerID
var erpCustomerId = new List<string>();
if (strRbu == "AUS")
erpCustomerId.AddRange(new[] { "81US0023" });
else if (strRbu == "ASH")
erpCustomerId.AddRange(new[] { "35CH0001" });
else
erpCustomerId.AddRange(new[] { "35CH0692", "30TW0001"});
using (IDbConnection ptdConnection = new SqlConnection(_PTDContext))
{
if (ptdConnection.State != ConnectionState.Open)
{
ptdConnection.Open();
}
foreach (PTD007TableDataModel SNData in Data.TableData)
{
var mailDataItem = new List<SNDataModel>();
//ZProductTrans
strSQL = $@" SELECT * FROM SFIS_PTD.dbo.ZProductTrans
WHERE ERP_CustomerID IN ({string.Join(", ", erpCustomerId.ConvertAll(id => $"N'{id}'"))})
AND IsBranchCoReceived = 0
AND RecordTypeID in (N'601',N'633',N'601DB')
AND RecordNumber = '{SNData.dnno}'
AND RCLineNO = '{SNData.dnLineNO}' ";
var q = await ptdConnection.QueryAsync<dynamic>(strSQL);
foreach (var row in q)
{
string strLatest;
//確認此出貨序號是否有ZHistoryKeyDefine
strSQL = $@"select Seed FROM [SFIS_PTD].[dbo].[ZHistoryKeyDefine] where serialnumber ='{row.SerialNumber}'";
var q1 = await ptdConnection.QueryAsync<dynamic>(strSQL);
if (q1.Any())
{
int seed = Convert.ToInt32(q1.FirstOrDefault().Seed);
int nIdx = seed + 1;
strLatest = row.SerialNumber + nIdx.ToString().PadLeft(4, '0');//組成HistoryID
//HistoryKeyDefine
strSQL = @$"UPDATE [SFIS_PTD].[dbo].[ZHistoryKeyDefine]
SET [Seed] = {nIdx} where [SerialNumber]='{row.SerialNumber}'";
colSQL.Add(strSQL);
//ZSNInfo
strSQL = @$"Update [SFIS_PTD].[dbo].[ZSNInfo] SET LatestHistoryID='{strLatest}',RecordTypeID='{strRecordType}',
CurrentProductID='{row.ProductID}'
where SerialNumber='{row.SerialNumber}'";
colSQL.Add(strSQL);
}
else
{
strLatest = row.SerialNumber + 1.ToString().PadLeft(4, '0');//組成HistoryID
//ZHistoryKeyDefine
strSQL = @$"INSERT INTO [SFIS_PTD].[dbo].[ZHistoryKeyDefine] ([SerialNumber],[Seed])
VALUES ('{row.SerialNumber}',1)";
colSQL.Add(strSQL);
//ZSNInfo
strSQL = @$"INSERT INTO [SFIS_PTD].[dbo].[ZSNInfo] ([SerialNumber],[CurrentProductID],[OriginalProductID],
[LocationID],[LatestHistoryID],[RecordTypeID],
[OwnerPlantID],[OwnerCompanyID],[CreatePlantID],[CreateCompanyID],
[ModifyDate]) VALUES
('{row.SerialNumber}','{row.ProductID}','{row.ProductID}',
'9000','{strLatest}','{strRecordType}',
'{strWorkCenter}','{strRbu}','{strWorkCenter}','{strRbu}',
'{strCreateDate}')";
colSQL.Add(strSQL);
}
//ZProductTrans
strSQL = $@"INSERT INTO [SFIS_PTD].[dbo].[ZProductTrans]
([HistoryID],[SerialNumber],[RecordTypeID],[RecordNumber],[RCLineNO],[RecordDate],
[ProductID],[IsChangeID],[LocationID],[EmplID],[IsDelete],
[OwnerPlantID],[OwnerCompanyID],[CreatePlantID],[CreateCompanyID],
[CreatorID],[CreateDate],[ModifierID],[ModifyDate],
[chkflag],[IsBranchCoReceived],[MOID]) VALUES
('{strLatest}','{row.SerialNumber}','{strRecordType}','{SNData.dnno}','{SNData.dnLineNO}','{strRecordDate}',
'{SNData.productID}',0,'9000','{SNData.soldCustomerID.ToString()}',0,
'{strWorkCenter}','{strRbu}','{strWorkCenter}','{strRbu}',
'WH00','{strCreateDate}','WH00','{strCreateDate}',0,0,'')";
colSQL.Add(strSQL);
mailDataItem.Add(new SNDataModel
{
DnNo = SNData.dnno,
LineNo = SNData.dnLineNO,
Material = SNData.productID,
Sn = row.SerialNumber
});
}
strSQL = $@" Update SFIS_PTD.dbo.ZProductTrans set IsBranchCoReceived ='1'
WHERE ERP_CustomerID IN ({string.Join(", ", erpCustomerId.ConvertAll(id => $"N'{id}'"))})
AND IsBranchCoReceived = 0
AND RecordTypeID in (N'601',N'633',N'601DB')
AND RecordNumber='{SNData.dnno}'
AND RCLineNO='{SNData.dnLineNO}' ";
colSQL.Add(strSQL);
}
using (var transaction = ptdConnection.BeginTransaction())
{
try
{
foreach (string query in colSQL)
{
await ptdConnection.ExecuteAsync(query, transaction: transaction);
}
// Commit the transaction
transaction.Commit();
}
catch (Exception ex)
{
// Rollback the transaction in case of an exception
transaction.Rollback();
throw ex; // Rethrow the exception after rollback
}
}
}
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.Message;
}
return result;
}
#endregion
@ -5048,7 +5336,7 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
ResultModel<dynamic> result = new ResultModel<dynamic>();
string strSQL = $@"SELECT RecordTypeID,RecordNumber,RCLineNO 'LineNo',
SerialNumber 'SN',ProductID
SerialNumber 'SN',ProductID , CreateDate
FROM SFIS_PTD.dbo.ZProductTrans where RecordNumber ='{recordNumber}' And RCLineNO ='{lineNo}'
And ProductID = '{materialNo}'";
if (shippingSN != null && shippingSN != "")
@ -5056,6 +5344,8 @@ and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no);
strSQL += $" And SerialNumber = '{shippingSN}'";
}
strSQL += " ORDER BY CreateDate ";
DataTable dtZProductTrans = new DataTable();
using (var cmd = connPTD.CreateCommand())
{

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

@ -287,6 +287,10 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
}
#endregion
// IPQC 任務性
IPQCTaskNoticeController iPQCTaskNoticeController = new IPQCTaskNoticeController(_context, _config);
await iPQCTaskNoticeController.CheckIPQCTaskNotice(barCodeCheckDto.wipNo, data.itemNo, barCodeCheckDto.stationID);
resultModel.Success = true;
return resultModel;
@ -2186,13 +2190,27 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
if (barCodeCheckDto.inputItems == null)
result.inputItems = new List<BarCodeCheckDto.inputItem>();
else
{
result.inputItems = barCodeCheckDto.inputItems.Where(w => !string.IsNullOrWhiteSpace(w.inputType)).ToList();
result.inputItems = result.inputItems.Select(s =>
{
s.inputData = s.inputData.Trim().ToUpper();
return s;
}).ToList();
}
// 治具 Input
if (barCodeCheckDto.outfits == null)
result.outfits = new List<BarCodeCheckDto.Outfit>();
else
{
result.outfits = barCodeCheckDto.outfits.Where(w => !string.IsNullOrWhiteSpace(w.inputData)).ToList();
result.outfits = result.outfits.Select(s =>
{
s.inputData = s.inputData.Trim().ToUpper();
return s;
}).ToList();
}
#endregion

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

@ -1,28 +1,18 @@
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
{
/// <summary>
/// TestLog 測試Log
/// PTD
/// </summary>
[Route("api/[controller]")]
[ApiController]
@ -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,162 @@ 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>
/// <param name="recordTypeID">RecordTypeId</param>
/// <returns></returns>
[HttpPut("PTD008")]
public async Task<bool> Put_PTD008(string serialNumber, string recordNumber, string lineNo, string productID ,string recordTypeID)
{
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
AND RecordTypeID = @recordTypeID ";
DynamicParameters p = new DynamicParameters();
p.Add("serialNumber", serialNumber);
p.Add("recordNumber", recordNumber);
p.Add("lineNo", lineNo);
p.Add("productID", productID);
p.Add("recordTypeID", recordTypeID);
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;
}
}
}
}
}
}

27
AMESCoreStudio.WebApi/DTO/AMES/IpqcDto.cs

@ -26,6 +26,23 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
}
/// <summary>
/// IPQC檢驗單號
/// </summary>
[DataMember]
[Display(Name = "IPQC檢驗單號ID")]
public int InspectionID { get; set; }
/// <summary>
/// 巡檢類型
/// </summary>
[DataMember]
[Display(Name = "巡檢類型")]
public int InspectionypeID { get; set; }
/// <summary>
/// IPQC檢驗單號
/// </summary>
@ -64,7 +81,7 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
public int PlanQTY { get; set; }
/// <summary>
/// 工單號碼
/// 序號
/// </summary>
[DataMember]
[Display(Name = "序號")]
@ -147,7 +164,7 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
public class IpqcDetailDto
{
/// <summary>
///
/// 檢驗序
/// </summary>
[DataMember]
[Display(Name = "檢驗序號")]
@ -179,6 +196,12 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
public class IpqcDetailItemDto
{
/// <summary>
/// 檢驗序號
/// </summary>
[DataMember]
[Display(Name = "檢驗序號")]
public string BarcodeNO { get; set; }
/// <summary>
/// 順序
/// </summary>

35
AMESCoreStudio.WebApi/DTO/AMES/QRS009WDto.cs

@ -0,0 +1,35 @@
using System.Data;
namespace AMESCoreStudio.WebApi.DTO.AMES
{
public class QRS009WDto
{
public string BarcodeID { get; set; }
public string WipID { get; set; }
public string StationID { get; set; }
public string BarcodeNo { get; set; }
public string LineDesc { get; set; }
public string RuleStatus { get; set; }
public string SysType { get; set; }
public string CreateDate { get; set; }
public string UpdateDate { get; set; }
public string UserName { get; set; }
// 其他需要的列
public QRS009WDto(DataRow row)
{
BarcodeID = row.Field<string>("BarcodeID");
WipID = row.Field<string>("WipID");
StationID = row.Field<string>("StationID");
BarcodeNo = row.Field<string>("BarcodeNo");
LineDesc = row.Field<string>("LineDesc");
RuleStatus = row.Field<string>("RuleStatus");
SysType = row.Field<string>("SysType");
CreateDate = row.Field<string>("CreateDate");
UpdateDate = row.Field<string>("UpdateDate");
UserName = row.Field<string>("UserName");
// 设置其他列的值
}
}
}

4
AMESCoreStudio.WebApi/DTO/AMES/SPC005VIiew.cs

@ -134,6 +134,10 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
/// </summary>
public partial class SPC005Detail2
{
/// <summary>
/// 檢驗序號
/// </summary>
public string BarcodeNO { get; set; }
/// <summary>
/// 順序
/// </summary>

3
AMESCoreStudio.WebApi/Models/AMES/FqcResultMaster.cs

@ -115,7 +115,6 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[DataMember]
[Display(Name = "入庫單備註")]
[Column("INHOUSE_MEMO")]
[StringLength(150)]
public string InhouseMemo { get; set; }
@ -135,7 +134,6 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[DataMember]
[Display(Name = "判定備註")]
[Column("QA_MENO")]
[StringLength(100)]
public string QaMeno { get; set; }
/// <summary>
@ -144,7 +142,6 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[DataMember]
[Display(Name = "手動判定備註")]
[Column("MANUAL_QA_MENO")]
[StringLength(200)]
public string ManualQaMeno { get; set; }
/// <summary>

2
AMESCoreStudio.WebApi/Models/AMES/NgRepair.cs

@ -62,7 +62,7 @@ namespace AMESCoreStudio.WebApi.Models.AMES
/// 維修說明
/// </summary>
[Column("REPAIR_DESC")]
[StringLength(100)]
[StringLength(500)]
[DataMember]
[Display(Name = "維修說明")]
public string RepairDesc { get; set; }

13
AMESCoreStudio.WebApi/Models/AMES/PTD101AMESModel.cs

@ -12,22 +12,22 @@ namespace AMESCoreStudio.WebApi.Models.AMES
/// 完工入庫呼叫安勤api轉檔
/// </summary>
public class PTD101AMESModel
{
{
/// <summary>
/// AME驗單單號
/// </summary>
public string FQCID { get; set; }
public string FQCID { get; set; }
/// <summary>
/// 出貨序號
/// </summary>
///
public string SSN { get; set; }
public string SSN { get; set; }
/// <summary>
/// 生產序號
/// </summary>
public string ISN { get; set; }
public string ISN { get; set; }
/// <summary>
/// 本次入庫單號
@ -42,12 +42,12 @@ namespace AMESCoreStudio.WebApi.Models.AMES
/// <summary>
/// 成倉人員工號
/// </summary>
public string EmpID { get; set; }
public string EmpID { get; set; }
/// <summary>
/// 安勤: 9000 昶亨:0S08
/// </summary>
public string Location { get; set; }
public string Location { get; set; }
/// <summary>
/// 101
@ -98,6 +98,7 @@ namespace AMESCoreStudio.WebApi.Models.AMES
public string? PrefixCode { get; set; }
public int? Length { get; set; }
public string? Status { get; set; }
public string SEQ { get; set; }
}
/// <summary>

Loading…
Cancel
Save