Browse Source

1. TestLog 相關程式上傳

"TestLogConnection": "Data Source=GPMDBN;Initial Catalog=TestAutomate;user id=ipro_mis;password=mmii@2019;Encrypt=False;"
Dapper Version="2.0.151
PTD
Sai 1 year ago
parent
commit
54cb85dfaa
  1. 61
      AMESCoreStudio.Web/Controllers/PCSController.cs
  2. 7
      AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs
  3. 40
      AMESCoreStudio.Web/ViewModels/PCS/PCS009RViewModel.cs
  4. 57
      AMESCoreStudio.Web/Views/PCS/PCS009R.cshtml
  5. 28
      AMESCoreStudio.Web/Views/PCS/PCS009T.cshtml
  6. 4
      AMESCoreStudio.WebApi/Models/AMES/OutfitInfo.cs

61
AMESCoreStudio.Web/Controllers/PCSController.cs

@ -26,6 +26,7 @@ using ClosedXML.Excel;
using Microsoft.VisualBasic;
using AMESCoreStudio.WebApi.Models.SYS;
namespace AMESCoreStudio.Web.Controllers
{
@ -1443,7 +1444,7 @@ namespace AMESCoreStudio.Web.Controllers
{
//OTHER 允許多個區間(不連續)
var RuleItem = await _pcsApi.GetSerialRuleDetail(wipBarcodeOther.SerialRuleDetailID);
if (RuleItem.Where(s => s.ItemNo.StartsWith("OTHER")).Count() > 0 && wipBarcodeOther.StartNO.Trim().Length >0)
if (RuleItem.Where(s => s.ItemNo.StartsWith("OTHER")).Count() > 0 && wipBarcodeOther.StartNO.Trim().Length > 0)
{
wipBarcodeOther = new WipBarcodeOther();
@ -4637,18 +4638,40 @@ namespace AMESCoreStudio.Web.Controllers
});
}
// TestLog
var testLogResult = await _pcsApi.GetTestLogByMSSql(result.BarCodeNo);
foreach (var item in testLogResult)
{
var FileName = (string)item.filename;
var RecordTime = FileName.Split('-')[1];
if (DateTime.TryParseExact(RecordTime, "yyyyMMddHHmmss", null, System.Globalization.DateTimeStyles.None, out DateTime resultDate))
{
RecordTime = resultDate.ToString("yyyy/MM/dd HH:mm:ss");
}
result.testLogs.Add(new TestLog
{
TestId = item.id,
Result = FileName.Contains("PASS") ? "PASS" : "FAIL",
Record_Time = RecordTime,
FileName = FileName,
//FilePath = $@"/TestLog/{(string)item.workOrder}/{FileName}"
});
//SopPath = $@"/DocEsop/{Esop.FirstOrDefault().file_path}"
}
return View(result);
}
public async Task<IActionResult> PCS009T(string id)
public async Task<IActionResult> PCS009T(string sn ,string id)
{
var query = await _pcsApi.GetTestLog("99300023400030");
var query = await _pcsApi.GetTestLogByMSSql(sn);
var result = new List<PCS009TViewModel>();
if (query.Any())
{
var item = query.Where(w => w.id == id).FirstOrDefault();
// 使用反射獲取属性信息並創建列
foreach (var property in query.FirstOrDefault().Children())
foreach (var property in item.Children())
{
var columnName = ((string)property.Name).ToUpper();
var columnValue = property.Value.ToString();
@ -7506,7 +7529,7 @@ namespace AMESCoreStudio.Web.Controllers
{
var wipresult = await _pcsApi.GetWipInfoByWipNO_EVER(wipno: item.WipNo); //查對應安勤工單&料號
item.WipNo = wipresult.Where(w=>w.RelatedWONO !=null).Select(s => s.RelatedWONO).FirstOrDefault();
item.WipNo = wipresult.Where(w => w.RelatedWONO != null).Select(s => s.RelatedWONO).FirstOrDefault();
if (!string.IsNullOrWhiteSpace(item.WipNo))
{
@ -7580,7 +7603,7 @@ namespace AMESCoreStudio.Web.Controllers
string recordDate = ids[i].Split(',')[5];
string Factority_ID = ids[i].Split(',')[6];
string ItemNO = ids[i].Split(',')[7];
var result = await PCS0311inhouse(InhouseNo, boxNo, Convert.ToInt16(seq), recordNumber, locationNo, recordDate,Factority_ID,ItemNO);
var result = await PCS0311inhouse(InhouseNo, boxNo, Convert.ToInt16(seq), recordNumber, locationNo, recordDate, Factority_ID, ItemNO);
if (!result.success)
{
@ -7597,9 +7620,9 @@ namespace AMESCoreStudio.Web.Controllers
}
}
public async Task<IActionResult> PCS031inhouseAsync(string InhouseNo, string boxNo, int seq, string recordNumber, string locationNo, string recordDate, string factorityID,string ItemNO)
public async Task<IActionResult> PCS031inhouseAsync(string InhouseNo, string boxNo, int seq, string recordNumber, string locationNo, string recordDate, string factorityID, string ItemNO)
{
var result = await PCS0311inhouse(InhouseNo, boxNo, seq, recordNumber, locationNo, recordDate, factorityID,ItemNO);
var result = await PCS0311inhouse(InhouseNo, boxNo, seq, recordNumber, locationNo, recordDate, factorityID, ItemNO);
return Json(new Result() { success = result.success, msg = result.msg });
@ -7607,7 +7630,7 @@ namespace AMESCoreStudio.Web.Controllers
}
private async Task<Result> PCS0311inhouse(string InhouseNo, string boxNo, int seq, string recordNumber, string locationNo, string recordDate, string factorityID,string ItemNO)
private async Task<Result> PCS0311inhouse(string InhouseNo, string boxNo, int seq, string recordNumber, string locationNo, string recordDate, string factorityID, string ItemNO)
{
/* 1.
* 2.barcodeinfo
@ -7772,7 +7795,7 @@ namespace AMESCoreStudio.Web.Controllers
int UserID = GetLogInUserID(); //需用安勤帳號查昶亨的帳號 再轉換成ID
var Userinfo = await _sysApi.GetUserInfo(UserID);
var Userinfo_EVER = await _pcsApi.GetUserInfoByUserNo_EVER(Userinfo.Select(s => s.UserNo).FirstOrDefault());
if (Userinfo_EVER.UserNo != null )
if (Userinfo_EVER.UserNo != null)
Userinfo_result = await _pcsApi.GetUserInfo_EVER(Userinfo_EVER.UserID);
}
@ -9178,7 +9201,7 @@ namespace AMESCoreStudio.Web.Controllers
/// </summary>
/// <param name="id">工單號碼</param>
/// <returns></returns>
public async Task<IActionResult> PCS040DAsync(string wipNo,int otherID)
public async Task<IActionResult> PCS040DAsync(string wipNo, int otherID)
{
//// 判斷工單號碼是否已經投入
//if (await _pcsApi.GetWipInfoCheckStart(id) == "Y")
@ -9205,7 +9228,7 @@ namespace AMESCoreStudio.Web.Controllers
int StartNO = int.Parse(result.StartNO.Substring(SNStart, SNLen));
//判斷是否有比此工單流水號更大的號碼
if (result1.Select(s => s.SnNum).FirstOrDefault() > EndNO && result1.Where(w=>w.ItemNo.StartsWith("OTHER")).Count() == 0) //標準品以外要判斷最大號
if (result1.Select(s => s.SnNum).FirstOrDefault() > EndNO && result1.Where(w => w.ItemNo.StartsWith("OTHER")).Count() == 0) //標準品以外要判斷最大號
{
return Json(new Result() { success = false, msg = "工單號碼【" + wipNo + "】出貨序號不為目前最大號,請先刪除最大號工單 !" });
}
@ -9434,7 +9457,7 @@ namespace AMESCoreStudio.Web.Controllers
//取相同Rule 年、月、周 的所有料號
var result1 = await _pcsApi.GetSerialRuleDetail(model.WipBarcodeOther.SerialRuleDetailID);
var q_Detail = await _pcsApi.GetSerialRuleDetailbyPCS040(model.WipBarcodeOther.SerialRuleDetailID);
var SerialRuleDetail_All = q_Detail.Where(w => w.Rule == result1.Select(s=>s.Rule).FirstOrDefault()
var SerialRuleDetail_All = q_Detail.Where(w => w.Rule == result1.Select(s => s.Rule).FirstOrDefault()
&& w.YNum == result1.Select(s => s.YNum).FirstOrDefault() && w.MNum == result1.Select(s => s.MNum).FirstOrDefault()
&& w.WNum == result1.Select(s => s.WNum).FirstOrDefault() && w.LotNum == result1.Select(s => s.LotNum).FirstOrDefault());
int Max_SnNum = 0;
@ -9581,7 +9604,7 @@ namespace AMESCoreStudio.Web.Controllers
}
public async Task<IActionResult> PCS040R(string id, string rule,string serialRuleitem, int otherID, string msg = null)
public async Task<IActionResult> PCS040R(string id, string rule, string serialRuleitem, int otherID, string msg = null)
{
ViewBag.Msg = msg;
@ -9647,7 +9670,7 @@ namespace AMESCoreStudio.Web.Controllers
return View(model);
}
public async Task<ResultModel<string>> CheckWipBarcodeOtherRepeat(string Wip_NO,string ItemNO,string WipStartNO,string WipEndNO, int StartSN, int SNLen)
public async Task<ResultModel<string>> CheckWipBarcodeOtherRepeat(string Wip_NO, string ItemNO, string WipStartNO, string WipEndNO, int StartSN, int SNLen)
{
var resultGetWipBarcode = await _pcsApi.GetWipBarcodeOtherByItemNo(WipNo: Wip_NO, ItemNo: ItemNO);
// var result_Wip_NO = resultGetWipBarcode.Data.Where(w => w.WipNo == Wip_NO).FirstOrDefault();
@ -9710,12 +9733,12 @@ namespace AMESCoreStudio.Web.Controllers
// string startSerial = parts[0];
// string endSerial = parts[1];
string prefix = startSerial.Substring(0, startSerial.Length - StartSN +1);
int startNumber = int.Parse(startSerial.Substring(startSerial.Length - StartSN +1, SNLen));
int endNumber = int.Parse(endSerial.Substring(endSerial.Length - StartSN +1, SNLen));
string prefix = startSerial.Substring(0, startSerial.Length - StartSN + 1);
int startNumber = int.Parse(startSerial.Substring(startSerial.Length - StartSN + 1, SNLen));
int endNumber = int.Parse(endSerial.Substring(endSerial.Length - StartSN + 1, SNLen));
string serial = "";
if (startSerial.Length != StartSN + SNLen)
startSerial.Substring(StartSN + SNLen ,startSerial.Length - StartSN - SNLen);
startSerial.Substring(StartSN + SNLen, startSerial.Length - StartSN - SNLen);
return new SerialRange
{

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

@ -1829,6 +1829,13 @@ namespace AMESCoreStudio.Web
[WebApiClient.Attributes.HttpGet("api/TestLog/{id}")]
ITask<List<dynamic>> GetTestLog(string id);
/// <summary>
/// Test Log 查詢
/// </summary>
/// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/TestLog/ByMSSql/{id}")]
ITask<List<dynamic>> GetTestLogByMSSql(string id);
#endregion
}
}

40
AMESCoreStudio.Web/ViewModels/PCS/PCS009RViewModel.cs

@ -20,6 +20,7 @@ namespace AMESCoreStudio.Web.ViewModels.PCS
KPChanges = new List<BarcodeItemChangeDTO>();
Outfits = new List<Outfit>();
nGInfoDtos = new List<NGInfoDto>();
testLogs = new List<TestLog>();
}
/// <summary>
@ -92,6 +93,14 @@ namespace AMESCoreStudio.Web.ViewModels.PCS
/// </summary>
public List<NGInfoDto> nGInfoDtos { get; set; }
/// <summary>
/// TestLog
/// </summary>
public List<TestLog> testLogs
{
get; set;
}
}
/// <summary>
@ -279,4 +288,35 @@ namespace AMESCoreStudio.Web.ViewModels.PCS
/// </summary>
public string Date { get; set; }
}
/// <summary>
/// TestLog
/// </summary>
public class TestLog
{
/// <summary>
/// TestId
/// </summary>
public int TestId { get; set; }
/// <summary>
/// 結果
/// </summary>
public string Result { get; set; }
/// <summary>
/// 測試時間 RECORD_TIME
/// </summary>
public string Record_Time { get; set; }
/// <summary>
/// 檔案名稱
/// </summary>
public string FileName { get; set; }
/// <summary>
/// 檔案路徑
/// </summary>
public string FilePath { get; set; }
}
}

57
AMESCoreStudio.Web/Views/PCS/PCS009R.cshtml

@ -189,8 +189,6 @@
<th>
過站時間
</th>
<th style="width:70px;">
</th>
</tr>
</thead>
<tbody>
@ -220,17 +218,64 @@
<td>
@DateTime.Parse(index.InputDate).ToString("yyyy/MM/dd HH:mm:ss")
</td>
</tr>
}
</tbody>
</table>
</div>
@if (Model.testLogs.Count != 0)
{
<div class="layui-row">
<fieldset class="layui-elem-field layui-field-title">
<legend style="color: #e18917">TestLog</legend>
</fieldset>
<table class="layui-table" lay-even lay-size="sm">
<thead>
<tr>
<th>
結果
</th>
<th>
測試時間
</th>
<th>
檔案路徑
</th>
<th style="width:70px;"></th>
</tr>
</thead>
<tbody>
@foreach (var index in Model.testLogs)
{
<tr>
<td>
@if (index.Station == "PK1")
@if (index.Result == "FAIL")
{
<span style="color:red">@index.Result</span>
}
else
{
<a class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" onclick="testLog();">測試Log</a>
<span style="color:blue">@index.Result</span>
}
</td>
<td>
@index.Record_Time
</td>
<td>
@index.FileName
@*<a href='@index.FilePath' target='_blank'>@index.FileName</a>*@
</td>
<td>
<a class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" onclick='testLog(@index.TestId);'>測試Log</a>
</td>
</tr>
}
</tbody>
</table>
</div>
}
<div class="layui-row">
<fieldset class="layui-elem-field layui-field-title">
<legend style="color: #e18917">組件清單</legend>
@ -500,7 +545,7 @@
<script type="text/javascript">
// 測試Log
function testLog() {
function testLog(id) {
layui.use('layer', function () {
var layer = layui.layer;
layer.open({
@ -509,7 +554,7 @@
area: ['800px', '400px'],
fixed: false, //不固定
maxmin: true,
content: '/PCS/PCS009T?id=' + @Model.BarCodeNo
content: `/PCS/PCS009T?sn=${@Model.BarCodeNo}&id=${id}`
});
});
};

28
AMESCoreStudio.Web/Views/PCS/PCS009T.cshtml

@ -3,34 +3,6 @@
}
<div class="layui-card-body">
<div class="layui-row">
<div class="layui-col-xs2">
<label class="layui-form-label">工單號碼</label>
</div>
<div class="layui-col-xs3">
<label class="layui-form-label" style="text-align:left">@ViewBag.WipNo</label>
</div>
<div class="layui-col-xs2">
<label class="layui-form-label">內部條碼</label>
</div>
<div class="layui-col-xs5">
<label class="layui-form-label" style="text-align:left">@ViewBag.BarCodeNo</label>
</div>
</div>
<div class="layui-row">
<div class="layui-col-xs2">
<label class="layui-form-label">測試日期</label>
</div>
<div class="layui-col-xs3">
<label class="layui-form-label" style="width:100%;text-align:left">@ViewBag.RecodeTime</label>
</div>
<div class="layui-col-xs2">
<label class="layui-form-label">檔案名稱</label>
</div>
<div class="layui-col-xs5">
<label class="layui-form-label" style="width:100%;text-align:left">@ViewBag.FileName</label>
</div>
</div>
<div class="layui-row">
<table class="layui-table" lay-even>
<thead>

4
AMESCoreStudio.WebApi/Models/AMES/OutfitInfo.cs

@ -279,12 +279,12 @@ namespace AMESCoreStudio.WebApi.Models.AMES
public string ModelNo { get; set; }
/// <summary>
/// 內部條碼
/// PLM料號
/// </summary>
[Column("BARCODE_NO")]
[StringLength(50)]
[DataMember]
[Display(Name = "內部條碼")]
[Display(Name = "PLM料號")]
public string BarcodeNo { get; set; }

Loading…
Cancel
Save