Browse Source

1. 更新SMT板卡過站卡關

master
Sai 1 year ago
parent
commit
0753a6381b
  1. 29
      AMESCoreStudio.Web/Controllers/PCBController.cs
  2. 26
      AMESCoreStudio.Web/HttpApis/AMES/IPCB.cs
  3. 6
      AMESCoreStudio.Web/ViewModels/PCB/PCB013ViewModel.cs
  4. 71
      AMESCoreStudio.Web/Views/PCB/PCB013.cshtml
  5. 26
      AMESCoreStudio.Web/Views/PCB/PCB013A.cshtml
  6. 51
      AMESCoreStudio.Web/Views/PCB/PCB013C.cshtml
  7. 51
      AMESCoreStudio.Web/Views/PCB/PCB013U.cshtml
  8. 20
      AMESCoreStudio.Web/Views/PCB/PCB015.cshtml
  9. 6
      AMESCoreStudio.Web/Views/PCB/PCB016.cshtml
  10. 119
      AMESCoreStudio.WebApi/Controllers/AMES/SteelPlateInfoController.cs
  11. 301
      AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckNewController.cs
  12. 5
      AMESCoreStudio.WebApi/DTO/AMES/PCB016ViewDto.cs
  13. 30
      AMESCoreStudio.WebApi/DTO/AMES/SteelPlateInfoDto.cs
  14. 12
      AMESCoreStudio.WebApi/DTO/BLL/BarCodeCheckDto.cs
  15. 10
      AMESCoreStudio.WebApi/Enums/EnumPCS.cs
  16. 59
      AMESCoreStudio.WebApi/Models/AMES/SteelPlateInfo.cs

29
AMESCoreStudio.Web/Controllers/PCBController.cs

@ -70,13 +70,13 @@ namespace AMESCoreStudio.Web.Controllers
} }
public async Task<IActionResult> PCB013QueryAsync(string steelPlateNo, string storageLocation, string item, public async Task<IActionResult> PCB013QueryAsync(string steelPlateNo, string storageLocation, string item,
string date_str, string date_end, string side, string status, string checkOff, int page = 0, int limit = 10) string date_str, string date_end, string status, string checkOff, int page = 0, int limit = 10)
{ {
if (checkOff == "on") if (checkOff == "on")
checkOff = "Y"; checkOff = "Y";
IResultModel<SteelPlateInfoDto> result = await _pcbApi.GetSteelPlateInfoQuery(steelPlateNo: steelPlateNo, storageLocation: storageLocation, IResultModel<SteelPlateInfoDto> result = await _pcbApi.GetSteelPlateInfoQuery(steelPlateNo: steelPlateNo, storageLocation: storageLocation,
item: item, date_str: date_str, date_end: date_end, side: side, status: status, item: item, date_str: date_str, date_end: date_end, status: status,
checkOff: checkOff, page: page, limit: limit); checkOff: checkOff, page: page, limit: limit);
if (result.Data.Count() != 0) if (result.Data.Count() != 0)
@ -107,7 +107,7 @@ namespace AMESCoreStudio.Web.Controllers
if (ModelState.IsValid) if (ModelState.IsValid)
{ {
model.SteelPlateNo = model.SteelPlateNo.Trim(); model.SteelPlateNo = model.SteelPlateNo.Trim();
model.Items = model.Items.Trim(); model.Items = model.Items.Trim().ToUpper();
IResultModel result; IResultModel result;
if (model.SteelPlateID == 0) if (model.SteelPlateID == 0)
@ -153,8 +153,15 @@ namespace AMESCoreStudio.Web.Controllers
var resultSteel = await _pcbApi.GetSteelPlateMeasureBySteelPlateID(steelPlateID); var resultSteel = await _pcbApi.GetSteelPlateMeasureBySteelPlateID(steelPlateID);
var resultSteelInfo = await _pcbApi.GetSteelPlateInfo(result.SteelPlateID);
if (resultSteelInfo != null)
{
result.Items = resultSteelInfo.Items;
}
// 鋼板編號沒有量測資料 // 鋼板編號沒有量測資料
if (resultSteel.Data.Count() == 0) if (!resultSteel.Data.Any())
{ {
result.SpMeasureID = 0; result.SpMeasureID = 0;
result.Status = "上線"; result.Status = "上線";
@ -162,6 +169,7 @@ namespace AMESCoreStudio.Web.Controllers
else else
{ {
var item = resultSteel.Data.OrderByDescending(o => o.SpMeasureID).FirstOrDefault(); var item = resultSteel.Data.OrderByDescending(o => o.SpMeasureID).FirstOrDefault();
// 下線資料空白 // 下線資料空白
if (string.IsNullOrWhiteSpace(item.OffTension1)) if (string.IsNullOrWhiteSpace(item.OffTension1))
{ {
@ -319,11 +327,20 @@ namespace AMESCoreStudio.Web.Controllers
} }
public async Task<IActionResult> PCB016QueryAsync(string steelPlateNo, string storageLocation, string item, public async Task<IActionResult> PCB016QueryAsync(string steelPlateNo, string storageLocation, string item,
string date_str, string date_end, string wipNo, int page = 0, int limit = 10) string date_str, string date_end, string wipNo, string checkOff, int page = 0, int limit = 10)
{
IResultModel<PCB016ViewDto> result;
if (checkOff == "on")
{ {
result = await _pcbApi.GetSteelPlateInfoReportByUnused(steelPlateNo: steelPlateNo, storageLocation: storageLocation,
item: item, date_str: date_str, date_end: date_end, wipNo: wipNo, page: page, limit: limit);
IResultModel<PCB016ViewDto> result = await _pcbApi.GetSteelPlateInfoReport(steelPlateNo: steelPlateNo, storageLocation: storageLocation, }
else
{
result = await _pcbApi.GetSteelPlateInfoReport(steelPlateNo: steelPlateNo, storageLocation: storageLocation,
item: item, date_str: date_str, date_end: date_end, wipNo: wipNo, page: page, limit: limit); item: item, date_str: date_str, date_end: date_end, wipNo: wipNo, page: page, limit: limit);
}
if (result.Data.Count() != 0) if (result.Data.Count() != 0)
{ {

26
AMESCoreStudio.Web/HttpApis/AMES/IPCB.cs

@ -466,7 +466,6 @@ namespace AMESCoreStudio.Web
/// <param name="steelPlateNo">鋼板編號</param> /// <param name="steelPlateNo">鋼板編號</param>
/// <param name="storageLocation">儲存位置</param> /// <param name="storageLocation">儲存位置</param>
/// <param name="item">料號</param> /// <param name="item">料號</param>
/// <param name="side">正背面</param>
/// <param name="status">狀態</param> /// <param name="status">狀態</param>
/// <param name="date_str">到廠日_起</param> /// <param name="date_str">到廠日_起</param>
/// <param name="date_end">到廠日_迄</param> /// <param name="date_end">到廠日_迄</param>
@ -476,8 +475,8 @@ namespace AMESCoreStudio.Web
/// <returns></returns> /// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/SteelPlateInfo/SteelPlateInfoQuery")] [WebApiClient.Attributes.HttpGet("api/SteelPlateInfo/SteelPlateInfoQuery")]
ITask<ResultModel<SteelPlateInfoDto>> GetSteelPlateInfoQuery(string steelPlateNo = null, string storageLocation = null, ITask<ResultModel<SteelPlateInfoDto>> GetSteelPlateInfoQuery(string steelPlateNo = null, string storageLocation = null,
string item = null, string date_str = null, string date_end = null string item = null, string date_str = null, string date_end = null,
, string side = null, string status = null, string checkOff = null, int page = 0, int limit = 10); string status = null, string checkOff = null, int page = 0, int limit = 10);
/// <summary> /// <summary>
/// 新增鋼板資料 /// 新增鋼板資料
@ -564,6 +563,27 @@ namespace AMESCoreStudio.Web
string item = null, string date_str = null, string date_end = null string item = null, string date_str = null, string date_end = null
, string wipNo = null, int page = 0, int limit = 10); , string wipNo = null, int page = 0, int limit = 10);
/// <summary>
/// 鋼板資料查詢(未使用) Report
/// </summary>
/// <param name="steelPlateNo">鋼板編號</param>
/// <param name="storageLocation">儲存位置</param>
/// <param name="item">料號</param>
/// <param name="side">正背面</param>
/// <param name="status">狀態</param>
/// <param name="date_str">到廠日_起</param>
/// <param name="date_end">到廠日_迄</param>
/// <param name="checkOff">鋼板未下線狀態 Y/N</param>
/// <param name="page">頁數</param>
/// <param name="limit">筆數</param>
/// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/SteelPlateInfo/SteelPlateInfoReportByUnused")]
ITask<ResultModel<PCB016ViewDto>> GetSteelPlateInfoReportByUnused(string steelPlateNo = null, string storageLocation = null,
string item = null, string date_str = null, string date_end = null
, string wipNo = null, int page = 0, int limit = 10);
/// <summary> /// <summary>
/// 新增警報資料 /// 新增警報資料
/// </summary> /// </summary>

6
AMESCoreStudio.Web/ViewModels/PCB/PCB013ViewModel.cs

@ -33,6 +33,12 @@ namespace AMESCoreStudio.Web.ViewModels.PCB
[DataMember] [DataMember]
public string SteelPlateNo { get; set; } public string SteelPlateNo { get; set; }
/// <summary>
/// 料號
/// </summary>
[DataMember]
public string Items { get; set; }
/// <summary> /// <summary>
/// 張力_1 /// 張力_1
/// </summary> /// </summary>

71
AMESCoreStudio.Web/Views/PCB/PCB013.cshtml

@ -51,30 +51,22 @@
</div> </div>
</div> </div>
</div> </div>
<div class="layui-col-sm3"> <div class="layui-col-sm4">
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">工程編號:</label> <label class="layui-form-label">工程編號:</label>
<div class="layui-input-inline" style="width:150px"> <div class="layui-input-inline">
<input id="item" name="item" autocomplete="off" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" class="layui-input"> <input id="item" name="item" autocomplete="off" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" class="layui-input">
</div> </div>
</div> </div>
</div> </div>
<div class="layui-col-sm3"> <div class="layui-col-sm4">
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label" style="width:60px">儲存位置:</label> <label class="layui-form-label">儲存位置:</label>
<div class="layui-input-inline" style="width:150px"> <div class="layui-input-inline">
<input id="storageLocation" name="storageLocation" autocomplete="off" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" class="layui-input"> <input id="storageLocation" name="storageLocation" autocomplete="off" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" class="layui-input">
</div> </div>
</div> </div>
</div> </div>
<div class="layui-col-sm1">
<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> </div>
</div> </div>
<div class="layui-row"> <div class="layui-row">
@ -91,19 +83,6 @@
</div> </div>
</div> </div>
</div> </div>
<div class="layui-col-sm3">
<div class="layui-inline">
<label class="layui-form-label">正背面:</label>
<div class="layui-input-inline" style="width:80px">
<select id="Side" lay-filter="Side" name="Side" class="">
<option value="">全部</option>
<option value="11">A面</option>
<option value="12">B面</option>
<option value="13">AB面</option>
</select>
</div>
</div>
</div>
<div class="layui-col-sm3"> <div class="layui-col-sm3">
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label" style="width:60px">鋼板狀態:</label> <label class="layui-form-label" style="width:60px">鋼板狀態:</label>
@ -121,7 +100,13 @@
<input type="checkbox" id="checkOff" name="checkOff" lay-skin="primary" title="鋼板未下線"> <input type="checkbox" id="checkOff" name="checkOff" lay-skin="primary" title="鋼板未下線">
</div> </div>
</div> </div>
<div class="layui-col-sm1">
<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> </div>
</div> </div>
</div> </div>
@ -175,11 +160,6 @@
sort: true, sort: true,
templet: '<div>{{ layui.util.toDateString(d.arrivalDate, "yyyy/MM/dd") }}</div>' templet: '<div>{{ layui.util.toDateString(d.arrivalDate, "yyyy/MM/dd") }}</div>'
}, },
{
field: 'sideName',
title: '正背面',
width: 70
},
{ {
field: 'boards', field: 'boards',
title: '鋼板可使用次數', title: '鋼板可使用次數',
@ -191,31 +171,6 @@
width: 85, width: 85,
sort: true sort: true
}, },
{
field: 'standardTension1',
title: '張力1',
width: 70
},
{
field: 'standardTension2',
title: '張力2',
width: 70
},
{
field: 'standardTension3',
title: '張力3',
width: 70
},
{
field: 'standardTension4',
title: '張力4',
width: 70
},
{
field: 'standardTension5',
title: '張力5',
width: 70
},
{ {
field: 'statusName', field: 'statusName',
width: 60, width: 60,
@ -243,7 +198,7 @@
function detail(obj) { function detail(obj) {
if (obj.data.steelPlateID) { if (obj.data.steelPlateID) {
hg.open('新增量測記錄', '/PCB/PCB013A?steelPlateID=' + obj.data.steelPlateID + '&steelPlateNo=' + obj.data.steelPlateNo, 900, 550); hg.open('新增量測記錄', '/PCB/PCB013A?steelPlateID=' + obj.data.steelPlateID + '&steelPlateNo=' + obj.data.steelPlateNo, 800, 500);
} }
} }

26
AMESCoreStudio.Web/Views/PCB/PCB013A.cshtml

@ -1,5 +1,7 @@
@model AMESCoreStudio.Web.ViewModels.PCB.PCB013ViewModel @model AMESCoreStudio.Web.ViewModels.PCB.PCB013ViewModel
@{ Layout = "~/Views/Shared/_AMESLayout.cshtml"; } @{
Layout = "~/Views/Shared/_AMESLayout.cshtml";
}
<style> <style>
.control-label { .control-label {
@ -17,6 +19,8 @@
<input type="hidden" asp-for="Status" value="@Model.Status" /> <input type="hidden" asp-for="Status" value="@Model.Status" />
<input type="hidden" asp-for="SteelPlateNo" value="@Model.SteelPlateNo" /> <input type="hidden" asp-for="SteelPlateNo" value="@Model.SteelPlateNo" />
<div class="layui-row">
<div class="layui-col-sm6">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">鋼板編號</label> <label class="layui-form-label">鋼板編號</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
@ -26,7 +30,7 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">量測狀態</label> <label class="layui-form-label">量測狀態</label>
<label class="layui-form-label">@Model.Status</label> <label class="layui-form-label"><span style="color:red;font-weight:bold;">@Model.Status</span></label>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@ -68,7 +72,19 @@
<span asp-validation-for="Tension5" class="layui-bg-red"></span> <span asp-validation-for="Tension5" class="layui-bg-red"></span>
</div> </div>
</div> </div>
</div>
<div class="layui-col-sm6">
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">使用機型名稱</label>
<div class="layui-input-block">
<textarea asp-for="Items" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" class="layui-textarea" readonly placeholder="多筆機型用,區隔" ></textarea>
<span asp-validation-for="Items" class="layui-bg-red"></span>
</div>
</div>
</div>
</div>
@*<div class="layui-form-item"> @*<div class="layui-form-item">
<label class="layui-form-label">備註</label> <label class="layui-form-label">備註</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -88,8 +104,10 @@
</div> </div>
@section Scripts { @section Scripts {
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); @{
await Html.RenderPartialAsync("_FileinputScriptsPartial"); } await Html.RenderPartialAsync("_ValidationScriptsPartial");
await Html.RenderPartialAsync("_FileinputScriptsPartial");
}
<script type="text/javascript"> <script type="text/javascript">
layui.use(['form'], function () { layui.use(['form'], function () {

51
AMESCoreStudio.Web/Views/PCB/PCB013C.cshtml

@ -23,10 +23,10 @@
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item layui-form-text">
<label class="layui-form-label">使用機型名稱</label> <label class="layui-form-label">使用機型名稱</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input asp-for="Items" class="layui-input" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" autocomplete="off" placeholder="多筆機型用,區隔"/> <textarea asp-for="Items" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" class="layui-textarea" autocomplete="off" placeholder="多筆機型用,區隔"></textarea>
<span asp-validation-for="Items" class="layui-bg-red"></span> <span asp-validation-for="Items" class="layui-bg-red"></span>
</div> </div>
</div> </div>
@ -37,70 +37,27 @@
<input asp-for="StorageLocation" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" class="layui-input" autocomplete="off" placeholder="請輸入儲存位置" /> <input asp-for="StorageLocation" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" class="layui-input" autocomplete="off" placeholder="請輸入儲存位置" />
<span asp-validation-for="StorageLocation" class="layui-bg-red"></span> <span asp-validation-for="StorageLocation" class="layui-bg-red"></span>
</div> </div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">到廠日</label> <label class="layui-form-label">到廠日</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input asp-for="ArrivalDate" class="layui-input" readonly="" /> <input asp-for="ArrivalDate" class="layui-input" readonly="" />
</div> </div>
</div> </div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">正背面</label>
<input type="radio" asp-for="Side" value="11" title="A面" checked>
<input type="radio" asp-for="Side" value="12" title="B面">
<input type="radio" asp-for="Side" value="13" title="AB面">
</div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">鋼板使用次數</label> <label class="layui-form-label">鋼板使用次數</label>
<div class="layui-input-inline" style="width: 150px;"> <div class="layui-input-inline">
<input asp-for="UsedTimes" class="layui-input" /> <input asp-for="UsedTimes" class="layui-input" />
<span asp-validation-for="UsedTimes" class="layui-bg-red"></span> <span asp-validation-for="UsedTimes" class="layui-bg-red"></span>
</div> </div>
<label class="layui-form-label">連板數</label> <label class="layui-form-label">連板數</label>
<div class="layui-input-inline" style="width: 100px;"> <div class="layui-input-inline">
<input asp-for="Boards" class="layui-input" /> <input asp-for="Boards" class="layui-input" />
<span asp-validation-for="Boards" class="layui-bg-red"></span> <span asp-validation-for="Boards" class="layui-bg-red"></span>
</div> </div>
</div> </div>
</div> </div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">標準張力</label>
<div class="layui-form-mid">1.</div>
<div class="layui-input-inline" style="width: 100px;">
<input asp-for="StandardTension1" onkeyup="clearNoNum(this)" class="layui-input" style="width: 70px;" />
<span asp-validation-for="StandardTension1" class="layui-bg-red"></span>
</div>
<div class="layui-form-mid">2.</div>
<div class="layui-input-inline" style="width: 100px;">
<input asp-for="StandardTension2" onkeyup="clearNoNum(this)" class="layui-input" style="width: 70px;" />
<span asp-validation-for="StandardTension2" class="layui-bg-red"></span>
</div>
<div class="layui-form-mid">3.</div>
<div class="layui-input-inline" style="width: 100px;">
<input asp-for="StandardTension3" onkeyup="clearNoNum(this)" class="layui-input" style="width: 70px;" />
<span asp-validation-for="StandardTension3" class="layui-bg-red"></span>
</div>
<div class="layui-form-mid">4.</div>
<div class="layui-input-inline" style="width: 100px;">
<input asp-for="StandardTension4" onkeyup="clearNoNum(this)" class="layui-input" style="width: 70px;" />
<span asp-validation-for="StandardTension4" class="layui-bg-red"></span>
</div>
<div class="layui-form-mid">5.</div>
<div class="layui-input-inline" style="width: 100px;">
<input asp-for="StandardTension5" onkeyup="clearNoNum(this)" class="layui-input" style="width: 70px;" />
<span asp-validation-for="StandardTension5" class="layui-bg-red"></span>
</div>
</div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">鋼板狀態</label> <label class="layui-form-label">鋼板狀態</label>
<div class="layui-input-inline"> <div class="layui-input-inline">

51
AMESCoreStudio.Web/Views/PCB/PCB013U.cshtml

@ -23,10 +23,10 @@
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item layui-form-text">
<label class="layui-form-label">使用機型名稱</label> <label class="layui-form-label">使用機型名稱</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input asp-for="Items" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" class="layui-input" autocomplete="off" placeholder="多筆機型用,區隔" /> <textarea asp-for="Items" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" class="layui-textarea" autocomplete="off" placeholder="多筆機型用,區隔" ></textarea>
<span asp-validation-for="Items" class="layui-bg-red"></span> <span asp-validation-for="Items" class="layui-bg-red"></span>
</div> </div>
</div> </div>
@ -37,70 +37,27 @@
<input asp-for="StorageLocation" class="layui-input" autocomplete="off" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" placeholder="請輸入儲存位置" /> <input asp-for="StorageLocation" class="layui-input" autocomplete="off" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" placeholder="請輸入儲存位置" />
<span asp-validation-for="StorageLocation" class="layui-bg-red"></span> <span asp-validation-for="StorageLocation" class="layui-bg-red"></span>
</div> </div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">到廠日</label> <label class="layui-form-label">到廠日</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input asp-for="ArrivalDate" class="layui-input" readonly="" /> <input asp-for="ArrivalDate" class="layui-input" readonly="" />
</div> </div>
</div> </div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">正背面</label>
<input type="radio" asp-for="Side" value="11" title="A面" checked>
<input type="radio" asp-for="Side" value="12" title="B面">
<input type="radio" asp-for="Side" value="13" title="AB面">
</div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">鋼板使用次數</label> <label class="layui-form-label">鋼板使用次數</label>
<div class="layui-input-inline" style="width: 150px;"> <div class="layui-input-inline">
<input asp-for="UsedTimes" class="layui-input" /> <input asp-for="UsedTimes" class="layui-input" />
<span asp-validation-for="UsedTimes" class="layui-bg-red"></span> <span asp-validation-for="UsedTimes" class="layui-bg-red"></span>
</div> </div>
<label class="layui-form-label">連板數</label> <label class="layui-form-label">連板數</label>
<div class="layui-input-inline" style="width: 100px;"> <div class="layui-input-inline">
<input asp-for="Boards" class="layui-input" /> <input asp-for="Boards" class="layui-input" />
<span asp-validation-for="Boards" class="layui-bg-red"></span> <span asp-validation-for="Boards" class="layui-bg-red"></span>
</div> </div>
</div> </div>
</div> </div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">標準張力</label>
<div class="layui-form-mid">1.</div>
<div class="layui-input-inline" style="width: 100px;">
<input asp-for="StandardTension1" onkeyup="clearNoNum(this)" class="layui-input" style="width: 70px;" />
<span asp-validation-for="StandardTension1" class="layui-bg-red"></span>
</div>
<div class="layui-form-mid">2.</div>
<div class="layui-input-inline" style="width: 100px;">
<input asp-for="StandardTension2" onkeyup="clearNoNum(this)" class="layui-input" style="width: 70px;" />
<span asp-validation-for="StandardTension2" class="layui-bg-red"></span>
</div>
<div class="layui-form-mid">3.</div>
<div class="layui-input-inline" style="width: 100px;">
<input asp-for="StandardTension3" onkeyup="clearNoNum(this)" class="layui-input" style="width: 70px;" />
<span asp-validation-for="StandardTension3" class="layui-bg-red"></span>
</div>
<div class="layui-form-mid">4.</div>
<div class="layui-input-inline" style="width: 100px;">
<input asp-for="StandardTension4" onkeyup="clearNoNum(this)" class="layui-input" style="width: 70px;" />
<span asp-validation-for="StandardTension4" class="layui-bg-red"></span>
</div>
<div class="layui-form-mid">5.</div>
<div class="layui-input-inline" style="width: 100px;">
<input asp-for="StandardTension5" onkeyup="clearNoNum(this)" class="layui-input" style="width: 70px;" />
<span asp-validation-for="StandardTension5" class="layui-bg-red"></span>
</div>
</div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">鋼板狀態</label> <label class="layui-form-label">鋼板狀態</label>
<div class="layui-input-inline"> <div class="layui-input-inline">

20
AMESCoreStudio.Web/Views/PCB/PCB015.cshtml

@ -23,7 +23,6 @@
<input id="WipNo" style="width: 150px;" class="layui-input" onkeydown="WipNOinput(event);"> <input id="WipNo" style="width: 150px;" class="layui-input" onkeydown="WipNOinput(event);">
<input id="WipID" type="hidden" style="width: 250px;" class="layui-input"> <input id="WipID" type="hidden" style="width: 250px;" class="layui-input">
<input type="hidden" id="PlanQTY" class="layui-input" /> <input type="hidden" id="PlanQTY" class="layui-input" />
</div> </div>
</div> </div>
@ -42,20 +41,9 @@
</div> </div>
</div> </div>
@*<div class="layui-inline">
<div class="layui-inline" style="margin-left: 0px;">
<div class="layui-inline layui-show-xs-block">
<button class="layui-btn layui-btn-sm layui-btn-normal" id="querysubmit" lay-filter="querysubmit">
<i class="layui-icon layui-icon-sm">&#xe615;</i>
</button>
</div>
</div>
</div>*@
</div> </div>
<div class="layui-form-item">
<div class="layui-form-item">
<div class="layui-inline"> <div class="layui-inline">
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">連板數:</label> <label class="layui-form-label">連板數:</label>
@ -71,10 +59,7 @@
<div class="layui-inline"> <div class="layui-inline">
<button type="button" id="btnAdd" class="layui-btn layui-btn-normal layui-btn-sm">查詢明細</button> <button type="button" id="btnAdd" class="layui-btn layui-btn-normal layui-btn-sm">查詢明細</button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@ -267,8 +252,7 @@
alert(result.msg); alert(result.msg);
isExecuting = false; isExecuting = false;
} }
else else {
{
tt(result.data); tt(result.data);
GroupQTY(); GroupQTY();
$("#BarcodeNo").val("") $("#BarcodeNo").val("")

6
AMESCoreStudio.Web/Views/PCB/PCB016.cshtml

@ -70,6 +70,12 @@
</div> </div>
</div> </div>
</div> </div>
<div class="layui-col-sm3">
<div class="layui-inline">
<label class="layui-form-label" style="width:60px">附加條件</label>
<input type="checkbox" id="checkOff" name="checkOff" lay-skin="primary" title="查詢未使用鋼板">
</div>
</div>
</div> </div>
</div> </div>
</div> </div>

119
AMESCoreStudio.WebApi/Controllers/AMES/SteelPlateInfoController.cs

@ -1,17 +1,15 @@
using System; using AMESCoreStudio.CommonTools.Result;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using AMESCoreStudio.WebApi;
using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.WebApi.DTO.AMES; using AMESCoreStudio.WebApi.DTO.AMES;
using AMESCoreStudio.CommonTools.Result; using AMESCoreStudio.WebApi.Extensions;
using AMESCoreStudio.WebApi.Models.AMES;
using Dapper; using Dapper;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Data; using System.Data;
using AMESCoreStudio.WebApi.Extensions; using System.Linq;
using System.Threading.Tasks;
namespace AMESCoreStudio.WebApi.Controllers.AMES namespace AMESCoreStudio.WebApi.Controllers.AMES
{ {
@ -71,7 +69,6 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// <param name="steelPlateNo">鋼板編號</param> /// <param name="steelPlateNo">鋼板編號</param>
/// <param name="storageLocation">儲存位置</param> /// <param name="storageLocation">儲存位置</param>
/// <param name="item">料號</param> /// <param name="item">料號</param>
/// <param name="side">正背面</param>
/// <param name="status">狀態</param> /// <param name="status">狀態</param>
/// <param name="date_str">到廠日_起</param> /// <param name="date_str">到廠日_起</param>
/// <param name="date_end">到廠日_迄</param> /// <param name="date_end">到廠日_迄</param>
@ -80,8 +77,8 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// <param name="limit">筆數</param> /// <param name="limit">筆數</param>
/// <returns></returns> /// <returns></returns>
[HttpGet("SteelPlateInfoQuery")] [HttpGet("SteelPlateInfoQuery")]
public async Task<ResultModel<SteelPlateInfoDto>> GetSteelPlateInfoQuery(string steelPlateNo, string storageLocation, string item, string side public async Task<ResultModel<SteelPlateInfoDto>> GetSteelPlateInfoQuery(string steelPlateNo, string storageLocation, string item,
, string status, string date_str, string date_end, string checkOff, int page = 0, int limit = 10) string status, string date_str, string date_end, string checkOff, int page = 0, int limit = 10)
{ {
// 需要查詢鋼板未下線資料 // 需要查詢鋼板未下線資料
@ -116,11 +113,6 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
q = q.Where(w => w.StorageLocation == storageLocation.Trim().ToUpper()).ToList(); q = q.Where(w => w.StorageLocation == storageLocation.Trim().ToUpper()).ToList();
} }
if (!string.IsNullOrWhiteSpace(side))
{
q = q.Where(w => w.Side.ToString() == side).ToList();
}
if (!string.IsNullOrWhiteSpace(status)) if (!string.IsNullOrWhiteSpace(status))
{ {
q = q.Where(w => w.Status == status).ToList(); q = q.Where(w => w.Status == status).ToList();
@ -156,15 +148,8 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
ArrivalDate = s.ArrivalDate, ArrivalDate = s.ArrivalDate,
Items = s.Items, Items = s.Items,
StorageLocation = s.StorageLocation, StorageLocation = s.StorageLocation,
StandardTension1 = s.StandardTension1,
StandardTension2 = s.StandardTension2,
StandardTension3 = s.StandardTension3,
StandardTension4 = s.StandardTension4,
StandardTension5 = s.StandardTension5,
Boards = s.Boards, Boards = s.Boards,
UsedTimes = s.UsedTimes, UsedTimes = s.UsedTimes,
SideName = s.Side == 11 ? "A面" :
s.Side == 12 ? "B面" : "AB面",
StatusName = s.Status == "0" ? "失效" : "有效", StatusName = s.Status == "0" ? "失效" : "有效",
Remark = s.Remark Remark = s.Remark
}).ToList(); }).ToList();
@ -177,7 +162,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// <param name="steelPlateNo">鋼板編號</param> /// <param name="steelPlateNo">鋼板編號</param>
/// <param name="storageLocation">儲存位置</param> /// <param name="storageLocation">儲存位置</param>
/// <param name="item">料號</param> /// <param name="item">料號</param>
/// <param name="wipNo">工單號碼</param> /// <param name="wipNo">工單號碼</param>
/// <param name="date_str">到廠日_起</param> /// <param name="date_str">到廠日_起</param>
/// <param name="date_end">到廠日_迄</param> /// <param name="date_end">到廠日_迄</param>
/// <param name="page">頁數</param> /// <param name="page">頁數</param>
@ -274,6 +259,86 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return result; return result;
} }
/// <summary>
/// 鋼板資料查詢 Report (未使用)
/// </summary>
/// <param name="steelPlateNo">鋼板編號</param>
/// <param name="storageLocation">儲存位置</param>
/// <param name="item">料號</param>
/// <param name="wipNo">工單號碼</param>
/// <param name="date_str">到廠日_起</param>
/// <param name="date_end">到廠日_迄</param>
/// <param name="page">頁數</param>
/// <param name="limit">筆數</param>
/// <returns></returns>
[HttpGet("SteelPlateInfoReportByUnused")]
public async Task<ResultModel<PCB016ViewDto>> GetSteelPlateInfoReportByUnused(string steelPlateNo, string storageLocation, string item, string wipNo
, string date_str, string date_end, int page = 0, int limit = 10)
{
var query = @$" SELECT I.STEEL_PLATE_ID AS SteelPlateID ,
I.STEEL_PLATE_NO AS SteelPlateNo ,
I.ITEMS AS Items ,
I.BOARDS AS Boards ,
I.STORAGE_LOCATION AS StorageLocation ,
I.BE_USE_TIMES AS BeUseTimes ,
I.USED_TIMES AS UsedTimes ,
I.ARRIVAL_DATE AS ArrivalDate
FROM JHAMES.STEEL_PLATE_INFO I
WHERE NOT EXISTS (
SELECT 1
FROM JHAMES.STEEL_PLATE_MEASURE M
WHERE I.STEEL_PLATE_ID = M.STEEL_PLATE_ID
)
AND NOT EXISTS (
SELECT 1
FROM JHAMES.STEEL_PLATE_MEASURE_NG G
WHERE I.STEEL_PLATE_ID = G.STEEL_PLATE_ID
) ";
DynamicParameters p = new DynamicParameters();
var q = await _context.Database.DapperQueryAsync<PCB016ViewDto>(query, p);
if (!string.IsNullOrWhiteSpace(steelPlateNo))
{
q = q.Where(w => w.SteelPlateNo.Contains(steelPlateNo.Trim().ToUpper()));
}
if (!string.IsNullOrWhiteSpace(item))
{
q = q.Where(w => w.Items.Contains(item.Trim().ToUpper()));
}
if (!string.IsNullOrWhiteSpace(storageLocation))
{
q = q.Where(w => w.StorageLocation == storageLocation.Trim().ToUpper());
}
DateTime dateTime = DateTime.Now;
if (DateTime.TryParse(date_str, out dateTime))
{
q = q.Where(w => w.ArrivalDate >= DateTime.Parse(date_str));
}
if (DateTime.TryParse(date_end, out dateTime))
{
q = q.Where(w => w.ArrivalDate <= DateTime.Parse(date_end));
}
ResultModel<PCB016ViewDto> result = new ResultModel<PCB016ViewDto>();
// Table 頁數
if (page > 0)
{
q = q.Skip((page - 1) * limit).Take(limit);
}
// 紀錄筆數
result.DataTotal = q.Count();
result.Data = q.ToList();
return result;
}
/// <summary> /// <summary>
/// 更新鋼板基本資料檔 /// 更新鋼板基本資料檔
/// </summary> /// </summary>

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

@ -13,6 +13,9 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Dapper; using Dapper;
using AMESCoreStudio.WebApi.Extensions; using AMESCoreStudio.WebApi.Extensions;
using static AMESCoreStudio.WebApi.DTO.AMES.BarCodeCheckDto;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.AspNetCore.Components.Forms;
namespace AMESCoreStudio.WebApi.Controllers.AMES namespace AMESCoreStudio.WebApi.Controllers.AMES
{ {
@ -114,11 +117,17 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
} }
#endregion #endregion
#region 治具判斷 #region SMT 過站刷鋼板編號及錫膏編號 及 治具判斷
if (data.outfits.Count != 0) if (data.stations_Name.Contains("SMT"))
{ {
resultModel = CheckBarCodeOutfitAsync(data.outfits); resultModel = CheckSmtSkip(data);
if (!resultModel.Success)
return resultModel;
}
else
{
resultModel = CheckBarCodeOutfit(data.outfits);
if (!resultModel.Success) if (!resultModel.Success)
return resultModel; return resultModel;
} }
@ -1019,54 +1028,11 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
var OutfitsItem = data.outfits.Where(w => !string.IsNullOrWhiteSpace(w.inputData)).ToList(); var OutfitsItem = data.outfits.Where(w => !string.IsNullOrWhiteSpace(w.inputData)).ToList();
foreach (var item in OutfitsItem) foreach (var item in OutfitsItem)
{ {
var outfitInfo = _context.OutfitInfoes.Where(w => w.OutfitNo == item.inputData.ToUpper()).FirstOrDefault(); #region SMT綁治具過站
#region 治具 if (data.stations_Name.Contains("SMT"))
if (outfitInfo != null)
{
outfitInfo.UseTimes += 1;
outfitInfo.TotalTimes += 1;
outfitInfo.UpdateDate = DateTime.Now;
try
{
_context.Entry(outfitInfo).State = EntityState.Modified;
await _context.SaveChangesAsync();
}
catch (Exception ex)
{
return ex.InnerException.Message;
}
WipAlarmsController wipAlarmsController = new WipAlarmsController(_context);
var wipAlarms = await wipAlarmsController.GetWipAlarmByOutfit(data.wipNo, item.inputData.Trim().ToUpper());
// 判斷確認治具編號是否已到預警提醒
if (outfitInfoesController.GetOutfitInfoByAlertTimes(item.inputData.Trim().ToUpper()).Result.Value == "Y")
{
if (!wipAlarms.Value.Where(w => w.AlarmTypeID == (int)EnumWipAlarm.EnumTypeId.OutfitAlert).Any())
{
string MailGroup = "OUTFIT_ALARM";
string Subject = $"[AMES系統通知] 治具編號:{item.inputData.Trim().ToUpper()},預警提前通知";
string Body = "";
await new MailController(_context, _config).PostMail(Subject, Body, MailGroup, "", false);
WipAlarm wipAlarm = new WipAlarm();
wipAlarm.AlarmTypeID = (int)EnumWipAlarm.EnumTypeId.OutfitAlert;
wipAlarm.WipNO = data.wipNo;
wipAlarm.AlarmParam = item.inputData.ToUpper();
wipAlarm.AlarmValue = "1";
wipAlarm.AlarmDesc = Subject;
wipAlarm.AlarmDateTime = DateTime.Now;
await wipAlarmsController.PostWipAlarm(wipAlarm);
}
}
}
#endregion
#region 鋼板或錫膏
else
{ {
// 查詢有效鋼板編號 // 查詢有效鋼板編號
var steelPlate = _context.SteelPlateInfos.Where(w => w.SteelPlateNo.ToUpper() == item.inputData.ToUpper() && w.Status == "1").FirstOrDefault(); var steelPlate = _context.SteelPlateInfos.Where(w => w.SteelPlateNo.Trim().ToUpper() == item.inputData.Trim().ToUpper() && w.Status == "1").FirstOrDefault();
if (steelPlate != null) if (steelPlate != null)
{ {
// 查詢鋼板紀錄沒有下線紀錄 // 查詢鋼板紀錄沒有下線紀錄
@ -1111,9 +1077,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
} }
} }
} }
// 錫膏
else
{
// 查詢錫膏且出冰箱 // 查詢錫膏且出冰箱
var solderPaste = _context.SolderPasteInfos.Where(w => w.SolderPasteNo.ToUpper() == item.inputData.ToUpper() var solderPaste = _context.SolderPasteInfos.Where(w => w.SolderPasteNo.ToUpper() == item.inputData.ToUpper()
&& (w.Status == "O" || w.Status == "U")).FirstOrDefault(); && (w.Status == "O" || w.Status == "U")).FirstOrDefault();
@ -1174,6 +1138,52 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
} }
} }
} }
#endregion
#region 一般 治具過站
else
{
var outfitInfo = _context.OutfitInfoes.Where(w => w.OutfitNo == item.inputData.ToUpper()).FirstOrDefault();
if (outfitInfo != null)
{
outfitInfo.UseTimes += 1;
outfitInfo.TotalTimes += 1;
outfitInfo.UpdateDate = DateTime.Now;
try
{
_context.Entry(outfitInfo).State = EntityState.Modified;
await _context.SaveChangesAsync();
}
catch (Exception ex)
{
return ex.InnerException.Message;
}
WipAlarmsController wipAlarmsController = new WipAlarmsController(_context);
var wipAlarms = await wipAlarmsController.GetWipAlarmByOutfit(data.wipNo, item.inputData.Trim().ToUpper());
// 判斷確認治具編號是否已到預警提醒
if (outfitInfoesController.GetOutfitInfoByAlertTimes(item.inputData.Trim().ToUpper()).Result.Value == "Y")
{
if (!wipAlarms.Value.Where(w => w.AlarmTypeID == (int)EnumWipAlarm.EnumTypeId.OutfitAlert).Any())
{
string MailGroup = "OUTFIT_ALARM";
string Subject = $"[AMES系統通知] 治具編號:{item.inputData.Trim().ToUpper()},預警提前通知";
string Body = "";
await new MailController(_context, _config).PostMail(Subject, Body, MailGroup, "", false);
WipAlarm wipAlarm = new WipAlarm();
wipAlarm.AlarmTypeID = (int)EnumWipAlarm.EnumTypeId.OutfitAlert;
wipAlarm.WipNO = data.wipNo;
wipAlarm.AlarmParam = item.inputData.ToUpper();
wipAlarm.AlarmValue = "1";
wipAlarm.AlarmDesc = Subject;
wipAlarm.AlarmDateTime = DateTime.Now;
await wipAlarmsController.PostWipAlarm(wipAlarm);
}
}
}
} }
#endregion #endregion
//// 確認治具編號使用次數已經超過預計次數 //// 確認治具編號使用次數已經超過預計次數
@ -2631,70 +2641,21 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// 確認治具狀態 /// 確認治具狀態
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
//[HttpGet("BarCodeOutfit")] private ResultModel<string> CheckBarCodeOutfit([FromQuery] List<BarCodeCheckDto.Outfit> outfit)
private ResultModel<string> CheckBarCodeOutfitAsync([FromQuery] List<BarCodeCheckDto.Outfit> outfit)
{ {
ResultModel<string> resultModel = new ResultModel<string> { Success = false }; ResultModel<string> resultModel = new ResultModel<string> { Success = false };
//判斷是否有治具編號
var outfitNoMsg = string.Empty;
foreach (var outfitNo in outfit) foreach (var outfitNo in outfit)
{ {
// 治具 // 治具
var q = _context.OutfitInfoes.Where(w => w.OutfitNo == outfitNo.inputData.ToUpper().Trim()).FirstOrDefault(); var q = _context.OutfitInfoes.Where(w => w.OutfitNo.ToUpper().Trim() == outfitNo.inputData.ToUpper().Trim()).FirstOrDefault();
// 鋼板 if (q == null)
var q1 = _context.SteelPlateInfos.Where(w => w.SteelPlateNo.ToUpper() == outfitNo.inputData.ToUpper().Trim()
&& w.Status == "1").FirstOrDefault();
// 錫膏取出冰箱
var q2 = _context.SolderPasteInfos.Where(w => w.SolderPasteNo.ToUpper() == outfitNo.inputData.ToUpper().Trim()
&& (w.Status == "O" || w.Status == "U")).FirstOrDefault();
// 鋼板
if (q1 != null)
{ {
// 查詢鋼板紀錄沒有上線紀錄 resultModel.Msg = $"中央治具找不到該治具編號【{outfitNo.inputData}】";
var Measure = _context.SteelPlateMeasures.Where(w => w.SteelPlateID == q1.SteelPlateID
&& w.OffUserID == null)
.FirstOrDefault();
if (Measure == null)
{
resultModel.Msg = $"鋼板編號【{outfitNo.inputData}】 沒有上線量測紀錄";
return resultModel; return resultModel;
} }
}
// 錫膏
if (q2 != null)
{
// 查詢錫膏紀錄出冰箱紀錄
var Record = _context.SolderPasteRecords.Where(w => w.SolderPasteID == q2.SolderPasteID
&& w.Status == "O")
.FirstOrDefault();
if (Record == null)
{
resultModel.Msg = $"錫膏編號【{outfitNo.inputData}】 沒有出冰箱紀錄";
return resultModel;
}
// 錫膏編號必須為出冰箱2hrs後才可投入生產
else if (Record.CreateDate > DateTime.Now.AddHours(-2))
{
resultModel.Msg = $"錫膏編號【{outfitNo.inputData}】出冰箱尚未超過2Hrs";
return resultModel;
}
}
if (q == null && q1 == null && q2 == null)
outfitNoMsg += $"{outfitNo.inputData}、";
} }
if (!string.IsNullOrWhiteSpace(outfitNoMsg))
{
resultModel.Msg = $"中央治具找不到該治具編號、鋼板編號、錫膏編號【{outfitNoMsg.Substring(0, outfitNoMsg.Length - 1)}】";
return resultModel;
}
resultModel.Success = true; resultModel.Success = true;
return resultModel; return resultModel;
} }
@ -3051,6 +3012,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
{ {
result.stations_TestType = Station.TestType; result.stations_TestType = Station.TestType;
result.stations_TypeNo = Station.TypeNo; result.stations_TypeNo = Station.TypeNo;
result.stations_Name = Station.StationName;
} }
// 生產單位_簡碼 // 生產單位_簡碼
@ -3061,10 +3023,10 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
} }
// 判斷序號為出貨條碼,並轉成內部條碼 // 判斷序號為出貨條碼,並轉成內部條碼
var BarCodeInfo = await _context.BarcodeInfoes.Where(w => w.ExtraBarcodeNo == barCodeCheckDto.barcode.Trim().ToUpper()).FirstOrDefaultAsync(); var BarCodeInfo = await _context.BarcodeInfoes.Where(w => w.ExtraBarcodeNo == barCodeCheckDto.barcode.Trim()).FirstOrDefaultAsync();
if (BarCodeInfo != null) if (BarCodeInfo != null)
{ {
result.extNo = barCodeCheckDto.barcode; result.extNo = BarCodeInfo.ExtraBarcodeNo;
result.barcode = BarCodeInfo.BarcodeNo; result.barcode = BarCodeInfo.BarcodeNo;
} }
@ -3075,6 +3037,13 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
result.barcodeID = BarCodeInfo.BarcodeID; result.barcodeID = BarCodeInfo.BarcodeID;
} }
// 取工單板卡資訊-錫膏
var WipBoard = await _context.WipBoards.Where(w => w.WipNo == barCodeCheckDto.wipNo.Trim().ToUpper()).FirstOrDefaultAsync();
if (WipBoard != null)
{
result.wipBoard_SolderPaste = WipBoard.SolderPaste;
}
// 過站狀態 // 過站狀態
if (result.inputItems.Where(w => w.inputData.Contains("$")).Any()) if (result.inputItems.Where(w => w.inputData.Contains("$")).Any())
result.ruleStatus = "F"; result.ruleStatus = "F";
@ -3326,6 +3295,124 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
} }
return snLen; return snLen;
} }
/// <summary>
/// 確認SMT過站刷入鋼板編號 錫膏編號
/// </summary>
/// <returns></returns>
private ResultModel<string> CheckSmtSkip(BarCodeCheckDtoForDBData data)
{
ResultModel<string> resultModel = new ResultModel<string> { Success = false };
// 沒有過站治具資料
if (!data.outfits.Any())
{
resultModel.Msg = $"SMT過站 請刷入鋼板編號及錫膏編號 ";
return resultModel;
}
// 鋼板
var result_SteelPlate = _context.SteelPlateInfos.Where(w => w.Items.ToUpper().Contains(data.itemNo)
&& w.Status == "1");
if (data.stations_Name == "SMT_TOP")
result_SteelPlate = result_SteelPlate.Where(w => w.Items.ToUpper().Contains(data.itemNo + "_A"));
else
result_SteelPlate = result_SteelPlate.Where(w => w.Items.ToUpper().Contains(data.itemNo + "_B") ||
w.Items.ToUpper().Contains(data.itemNo + "_AB"));
if (!result_SteelPlate.Any())
{
resultModel.Msg = $"鋼板資料查無有綁定該筆工程編號【{data.itemNo}】";
return resultModel;
}
// 紀錄鋼板及錫膏是否都有資料
bool checkSteelPlate = false;
bool checkSolderPaste = false;
foreach (var item in data.outfits)
{
// 鋼板
var steelPlateID = result_SteelPlate.Where(w => w.SteelPlateNo.Trim().ToUpper() == item.inputData.Trim().ToUpper())
.Select(s => s.SteelPlateID).ToList();
if (steelPlateID.Any())
{
checkSteelPlate = true;
// 查詢鋼板紀錄沒有上線紀錄
if (!_context.SteelPlateMeasures.Where(w => steelPlateID.Contains(w.SteelPlateID)
&& w.OffUserID == null).Any())
{
resultModel.Msg = $"鋼板編號【{item.inputData}】 沒有上線量測紀錄";
return resultModel;
}
}
// 工程資訊-錫膏
var solderPaste = _context.SolderPasteInfos.Where(w => w.SolderPasteNo.ToUpper() == item.inputData.ToUpper().Trim()
&& (w.Status == "O" || w.Status == "U")).FirstOrDefault();
if (solderPaste != null)
{
checkSolderPaste = true;
// 錫膏 A:S3X58-M406-3 , B:M705-221BM5-32-11.5K3 , C:M705-S101ZH-S4 , E:M705-GRN360-K2-V , D:NA
if (data.wipBoard_SolderPaste != "D")
{
var wipSolderPaste = string.Empty;
switch (data.wipBoard_SolderPaste)
{
case "A":
wipSolderPaste = "S3X58-M406-3";
break;
case "B":
wipSolderPaste = "M705-221BM5-32-11.5K3";
break;
case "C":
wipSolderPaste = "M705-S101ZH-S4";
break;
case "E":
wipSolderPaste = "M705-GRN360-K2-V";
break;
}
if (solderPaste.Description.Trim().ToUpper() != wipSolderPaste)
{
resultModel.Msg = $"錫膏編號【{item.inputData}】該筆工單維護錫膏規格不一致";
return resultModel;
}
}
// 查詢錫膏紀錄出冰箱紀錄
var Record = _context.SolderPasteRecords.Where(w => w.SolderPasteID == solderPaste.SolderPasteID
&& w.Status == "O")
.FirstOrDefault();
if (Record == null)
{
resultModel.Msg = $"錫膏編號【{item.inputData}】 沒有出冰箱紀錄";
return resultModel;
}
// 錫膏編號必須為出冰箱2hrs後才可投入生產
else if (Record.CreateDate > DateTime.Now.AddHours(-2))
{
resultModel.Msg = $"錫膏編號【{item.inputData}】出冰箱尚未超過2Hrs";
return resultModel;
}
}
}
if (!checkSteelPlate)
{
resultModel.Msg = $"請確認是否有輸入正確鋼板編號";
return resultModel;
}
if (!checkSolderPaste)
{
resultModel.Msg = $"請確認是否有輸入正確錫膏編號";
return resultModel;
}
resultModel.Success = true;
return resultModel;
}
} }
} }

5
AMESCoreStudio.WebApi/DTO/AMES/PCB016ViewDto.cs

@ -35,11 +35,6 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
/// </summary> /// </summary>
public string StorageLocation { get; set; } public string StorageLocation { get; set; }
/// <summary>
/// 正背面(11=A/正面;12=B/背面 ;13=AB面)
/// </summary>
public string SideName { get; set; }
/// <summary> /// <summary>
/// 連板數 /// 連板數
/// </summary> /// </summary>

30
AMESCoreStudio.WebApi/DTO/AMES/SteelPlateInfoDto.cs

@ -35,11 +35,6 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
/// </summary> /// </summary>
public string StorageLocation { get; set; } public string StorageLocation { get; set; }
/// <summary>
/// 正背面(11=A/正面;12=B/背面 ;13=AB面)
/// </summary>
public string SideName { get; set; }
/// <summary> /// <summary>
/// 連板數 /// 連板數
/// </summary> /// </summary>
@ -50,31 +45,6 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
/// </summary> /// </summary>
public int UsedTimes { get; set; } = 1; public int UsedTimes { get; set; } = 1;
/// <summary>
/// 標準張力_1
/// </summary>
public string StandardTension1 { get; set; }
/// <summary>
/// 標準張力_2
/// </summary>
public string StandardTension2 { get; set; }
/// <summary>
/// 標準張力_3
/// </summary>
public string StandardTension3 { get; set; }
/// <summary>
/// 標準張力_4
/// </summary>
public string StandardTension4 { get; set; }
/// <summary>
/// 標準張力_5
/// </summary>
public string StandardTension5 { get; set; }
/// <summary> /// <summary>
/// STATUS 0=失效 ; 1=有效 /// STATUS 0=失效 ; 1=有效
/// </summary> /// </summary>

12
AMESCoreStudio.WebApi/DTO/BLL/BarCodeCheckDto.cs

@ -187,12 +187,24 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
[DataMember] [DataMember]
public string stations_TypeNo { get; set; } = string.Empty; public string stations_TypeNo { get; set; } = string.Empty;
/// <summary>
/// 工作站_工作站名稱
/// </summary>
[DataMember]
public string stations_Name { get; set; } = string.Empty;
/// <summary> /// <summary>
/// 生產單位_簡碼 /// 生產單位_簡碼
/// </summary> /// </summary>
[DataMember] [DataMember]
public string factoryUnit_UnitCode { get; set; } = string.Empty; public string factoryUnit_UnitCode { get; set; } = string.Empty;
/// <summary>
/// 工單板卡資訊-錫膏代碼
/// </summary>
[DataMember]
public string wipBoard_SolderPaste { get; set; } = string.Empty;
/// <summary> /// <summary>
/// 紀錄wipKp 更新長度 /// 紀錄wipKp 更新長度
/// </summary> /// </summary>

10
AMESCoreStudio.WebApi/Enums/EnumPCS.cs

@ -492,17 +492,23 @@ namespace AMESCoreStudio.WebApi.Enum
[Display(Name = "千住 無鉛錫膏(M705-221BM5-32-11.5K3)")] [Display(Name = "千住 無鉛錫膏(M705-221BM5-32-11.5K3)")]
B = 2, B = 2,
/// <summary>
/// 千住 無鹵錫膏(M705-GRN360-K2-V)
/// </summary>
[Display(Name = "千住 無鹵錫膏(M705-GRN360-K2-V)")]
E = 3,
/// <summary> /// <summary>
/// 千住 無鹵錫膏(M705-S101ZH-S4)、無鹵錫絲(SHF RC101 F3 M705) /// 千住 無鹵錫膏(M705-S101ZH-S4)、無鹵錫絲(SHF RC101 F3 M705)
/// </summary> /// </summary>
[Display(Name = "千住 無鹵錫膏(M705-S101ZH-S4)、無鹵錫絲(SHF RC101 F3 M705)")] [Display(Name = "千住 無鹵錫膏(M705-S101ZH-S4)、無鹵錫絲(SHF RC101 F3 M705)")]
C = 3, C = 4,
/// <summary> /// <summary>
/// 其他 /// 其他
/// </summary> /// </summary>
[Display(Name = "其他")] [Display(Name = "其他")]
D = 4, D = 5,
} }

59
AMESCoreStudio.WebApi/Models/AMES/SteelPlateInfo.cs

@ -77,15 +77,6 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[Column("USED_TIMES")] [Column("USED_TIMES")]
public int UsedTimes { get; set; } = 1; public int UsedTimes { get; set; } = 1;
/// <summary>
/// 正背面(11=A/正面;12=B/背面 ;13=AB面)
/// </summary>
[DataMember]
[Display(Name = "正背面")]
[Column("SIDE")]
public int Side { get; set; } = 11;
/// <summary> /// <summary>
/// 連板數 /// 連板數
/// </summary> /// </summary>
@ -94,56 +85,6 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[Column("BOARDS")] [Column("BOARDS")]
public int Boards { get; set; } = 1; public int Boards { get; set; } = 1;
/// <summary>
/// 標準張力_1
/// </summary>
[DataMember]
[Display(Name = "標準張力_1")]
[Required(ErrorMessage = "{0},不能空白")]
[Column("STANDARD_TENSION_1")]
[StringLength(10)]
public string StandardTension1 { get; set; }
/// <summary>
/// 標準張力_2
/// </summary>
[DataMember]
[Display(Name = "標準張力_2")]
[Required(ErrorMessage = "{0},不能空白")]
[Column("STANDARD_TENSION_2")]
[StringLength(10)]
public string StandardTension2 { get; set; }
/// <summary>
/// 標準張力_3
/// </summary>
[DataMember]
[Display(Name = "標準張力_3")]
[Required(ErrorMessage = "{0},不能空白")]
[Column("STANDARD_TENSION_3")]
[StringLength(10)]
public string StandardTension3 { get; set; }
/// <summary>
/// 標準張力_4
/// </summary>
[DataMember]
[Display(Name = "標準張力_4")]
[Required(ErrorMessage = "{0},不能空白")]
[Column("STANDARD_TENSION_4")]
[StringLength(10)]
public string StandardTension4 { get; set; }
/// <summary>
/// 標準張力_5
/// </summary>
[DataMember]
[Display(Name = "標準張力_5")]
[Required(ErrorMessage = "{0},不能空白")]
[Column("STANDARD_TENSION_5")]
[StringLength(10)]
public string StandardTension5 { get; set; }
/// <summary> /// <summary>
/// STATUS 0=失效 ; 1=有效 /// STATUS 0=失效 ; 1=有效
/// </summary> /// </summary>

Loading…
Cancel
Save