Browse Source

1. 更新SMT板卡過站卡關

master
Sai 1 year ago
parent
commit
0753a6381b
  1. 31
      AMESCoreStudio.Web/Controllers/PCBController.cs
  2. 26
      AMESCoreStudio.Web/HttpApis/AMES/IPCB.cs
  3. 6
      AMESCoreStudio.Web/ViewModels/PCB/PCB013ViewModel.cs
  4. 113
      AMESCoreStudio.Web/Views/PCB/PCB013.cshtml
  5. 126
      AMESCoreStudio.Web/Views/PCB/PCB013A.cshtml
  6. 51
      AMESCoreStudio.Web/Views/PCB/PCB013C.cshtml
  7. 51
      AMESCoreStudio.Web/Views/PCB/PCB013U.cshtml
  8. 98
      AMESCoreStudio.Web/Views/PCB/PCB015.cshtml
  9. 6
      AMESCoreStudio.Web/Views/PCB/PCB016.cshtml
  10. 119
      AMESCoreStudio.WebApi/Controllers/AMES/SteelPlateInfoController.cs
  11. 379
      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

31
AMESCoreStudio.Web/Controllers/PCBController.cs

@ -70,13 +70,13 @@ namespace AMESCoreStudio.Web.Controllers
}
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")
checkOff = "Y";
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);
if (result.Data.Count() != 0)
@ -107,7 +107,7 @@ namespace AMESCoreStudio.Web.Controllers
if (ModelState.IsValid)
{
model.SteelPlateNo = model.SteelPlateNo.Trim();
model.Items = model.Items.Trim();
model.Items = model.Items.Trim().ToUpper();
IResultModel result;
if (model.SteelPlateID == 0)
@ -153,8 +153,15 @@ namespace AMESCoreStudio.Web.Controllers
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.Status = "上線";
@ -162,6 +169,7 @@ namespace AMESCoreStudio.Web.Controllers
else
{
var item = resultSteel.Data.OrderByDescending(o => o.SpMeasureID).FirstOrDefault();
// 下線資料空白
if (string.IsNullOrWhiteSpace(item.OffTension1))
{
@ -319,11 +327,20 @@ namespace AMESCoreStudio.Web.Controllers
}
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,
item: item, date_str: date_str, date_end: date_end, wipNo: wipNo, page: page, limit: limit);
}
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);
}
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="storageLocation">儲存位置</param>
/// <param name="item">料號</param>
/// <param name="side">正背面</param>
/// <param name="status">狀態</param>
/// <param name="date_str">到廠日_起</param>
/// <param name="date_end">到廠日_迄</param>
@ -476,8 +475,8 @@ namespace AMESCoreStudio.Web
/// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/SteelPlateInfo/SteelPlateInfoQuery")]
ITask<ResultModel<SteelPlateInfoDto>> GetSteelPlateInfoQuery(string steelPlateNo = null, string storageLocation = 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 item = null, string date_str = null, string date_end = null,
string status = null, string checkOff = null, int page = 0, int limit = 10);
/// <summary>
/// 新增鋼板資料
@ -564,6 +563,27 @@ namespace AMESCoreStudio.Web
string item = null, string date_str = null, string date_end = null
, 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>

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

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

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

@ -7,27 +7,27 @@
/*.layui-table-main .layui-table-cell {*/
/*height: auto !important;*/
/*white-space: normal;
}
}
.layui-table img {
max-width: 60px;
max-height: 28px;
}
.layui-table img {
max-width: 60px;
max-height: 28px;
}
.layui-tree-main {
cursor: pointer;
padding-right: 10px;
float: left;
border-width: 1px;
border-style: solid;
border-color: #e6e6e6;
margin: 10px 0;
}
.layui-tree-main {
cursor: pointer;
padding-right: 10px;
float: left;
border-width: 1px;
border-style: solid;
border-color: #e6e6e6;
margin: 10px 0;
}
.layui-table-cell {
height: auto;
white-space: normal;
}*/
.layui-table-cell {
height: auto;
white-space: normal;
}*/
</style>
@ -51,30 +51,22 @@
</div>
</div>
</div>
<div class="layui-col-sm3">
<div class="layui-col-sm4">
<div class="layui-inline">
<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">
</div>
</div>
</div>
<div class="layui-col-sm3">
<div class="layui-col-sm4">
<div class="layui-inline">
<label class="layui-form-label" style="width:60px">儲存位置:</label>
<div class="layui-input-inline" style="width:150px">
<label class="layui-form-label">儲存位置:</label>
<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">
</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 class="layui-row">
@ -91,19 +83,6 @@
</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-inline">
<label class="layui-form-label" style="width:60px">鋼板狀態:</label>
@ -121,7 +100,13 @@
<input type="checkbox" id="checkOff" name="checkOff" lay-skin="primary" title="鋼板未下線">
</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>
@ -175,11 +160,6 @@
sort: true,
templet: '<div>{{ layui.util.toDateString(d.arrivalDate, "yyyy/MM/dd") }}</div>'
},
{
field: 'sideName',
title: '正背面',
width: 70
},
{
field: 'boards',
title: '鋼板可使用次數',
@ -191,31 +171,6 @@
width: 85,
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',
width: 60,
@ -226,11 +181,11 @@
width: 230,
templet: function (d) {
var aa = '<a class="layui-btn layui-btn-warm layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">修改</a>\
<a class="layui-btn layui-btn layui-btn-xs" lay-event="View">檢視量測</a>'
<a class="layui-btn layui-btn layui-btn-xs" lay-event="View">檢視量測</a>'
if (d.statusName != '失效') {
aa += '<a class="layui-btn layui-btn layui-btn-xs" lay-event="detail">新增量測</a>';
}
return aa;
return aa;
}
}
]];
@ -243,7 +198,7 @@
function detail(obj) {
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);
}
}
@ -266,6 +221,6 @@
//基本資料表格
var table = hg.table.datatable('query', '鋼板資料查詢', '/PCB/PCB013Query', {}, tableCols, toolbar, true, 'full-100', ['filter', 'print', 'exports']);
// var table = hg.table.datatable('test', '條碼狀態維護', '/PCS/GetWipInfo', {}, tableCols, toolbar, true, 'full-100', ['filter', 'print', 'exports']);
// var table = hg.table.datatable('test', '條碼狀態維護', '/PCS/GetWipInfo', {}, tableCols, toolbar, true, 'full-100', ['filter', 'print', 'exports']);
</script>
}

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

@ -1,5 +1,7 @@
@model AMESCoreStudio.Web.ViewModels.PCB.PCB013ViewModel
@{ Layout = "~/Views/Shared/_AMESLayout.cshtml"; }
@{
Layout = "~/Views/Shared/_AMESLayout.cshtml";
}
<style>
.control-label {
@ -17,63 +19,77 @@
<input type="hidden" asp-for="Status" value="@Model.Status" />
<input type="hidden" asp-for="SteelPlateNo" value="@Model.SteelPlateNo" />
<div class="layui-form-item">
<label class="layui-form-label">鋼板編號</label>
<div class="layui-input-inline">
<input value="@Model.SteelPlateNo" class="layui-input" autocomplete="off" readonly="" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">量測狀態</label>
<label class="layui-form-label">@Model.Status</label>
</div>
<div class="layui-form-item">
<label class="layui-form-label">張力_1</label>
<div class="layui-input-inline">
<input asp-for="Tension1" onkeyup="clearNoNum(this)" class="layui-input" />
<span asp-validation-for="Tension1" class="layui-bg-red"></span>
<div class="layui-row">
<div class="layui-col-sm6">
<div class="layui-form-item">
<label class="layui-form-label">鋼板編號</label>
<div class="layui-input-inline">
<input value="@Model.SteelPlateNo" class="layui-input" autocomplete="off" readonly="" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">量測狀態</label>
<label class="layui-form-label"><span style="color:red;font-weight:bold;">@Model.Status</span></label>
</div>
<div class="layui-form-item">
<label class="layui-form-label">張力_1</label>
<div class="layui-input-inline">
<input asp-for="Tension1" onkeyup="clearNoNum(this)" class="layui-input" />
<span asp-validation-for="Tension1" class="layui-bg-red"></span>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">張力_2</label>
<div class="layui-input-inline">
<input asp-for="Tension2" onkeyup="clearNoNum(this)" class="layui-input" />
<span asp-validation-for="Tension2" class="layui-bg-red"></span>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">張力_3</label>
<div class="layui-input-inline">
<input asp-for="Tension3" onkeyup="clearNoNum(this)" class="layui-input" />
<span asp-validation-for="Tension3" class="layui-bg-red"></span>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">張力_4</label>
<div class="layui-input-inline">
<input asp-for="Tension4" onkeyup="clearNoNum(this)" class="layui-input" />
<span asp-validation-for="Tension4" class="layui-bg-red"></span>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">張力_5</label>
<div class="layui-input-inline">
<input asp-for="Tension5" onkeyup="clearNoNum(this)" class="layui-input" />
<span asp-validation-for="Tension5" class="layui-bg-red"></span>
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">張力_2</label>
<div class="layui-input-inline">
<input asp-for="Tension2" onkeyup="clearNoNum(this)" class="layui-input" />
<span asp-validation-for="Tension2" class="layui-bg-red"></span>
<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">
<label class="layui-form-label">張力_3</label>
<div class="layui-input-inline">
<input asp-for="Tension3" onkeyup="clearNoNum(this)" class="layui-input" />
<span asp-validation-for="Tension3" class="layui-bg-red"></span>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">張力_4</label>
<div class="layui-input-inline">
<input asp-for="Tension4" onkeyup="clearNoNum(this)" class="layui-input" />
<span asp-validation-for="Tension4" class="layui-bg-red"></span>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">張力_5</label>
<div class="layui-input-inline">
<input asp-for="Tension5" onkeyup="clearNoNum(this)" class="layui-input" />
<span asp-validation-for="Tension5" class="layui-bg-red"></span>
</div>
</div>
@*<div class="layui-form-item">
<label class="layui-form-label">備註</label>
<div class="layui-input-block">
<input asp-for="Remark" class="layui-input" />
</div>
<label class="layui-form-label">備註</label>
<div class="layui-input-block">
<input asp-for="Remark" class="layui-input" />
</div>
</div>*@
<span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span>
@ -88,8 +104,10 @@
</div>
@section Scripts {
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial");
await Html.RenderPartialAsync("_FileinputScriptsPartial"); }
@{
await Html.RenderPartialAsync("_ValidationScriptsPartial");
await Html.RenderPartialAsync("_FileinputScriptsPartial");
}
<script type="text/javascript">
layui.use(['form'], function () {

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

@ -23,10 +23,10 @@
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">使用機型名稱</label>
<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>
</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="請輸入儲存位置" />
<span asp-validation-for="StorageLocation" class="layui-bg-red"></span>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">到廠日</label>
<div class="layui-input-inline">
<input asp-for="ArrivalDate" class="layui-input" readonly="" />
</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-inline">
<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" />
<span asp-validation-for="UsedTimes" class="layui-bg-red"></span>
</div>
<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" />
<span asp-validation-for="Boards" class="layui-bg-red"></span>
</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">
<label class="layui-form-label">鋼板狀態</label>
<div class="layui-input-inline">

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

@ -23,10 +23,10 @@
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">使用機型名稱</label>
<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>
</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="請輸入儲存位置" />
<span asp-validation-for="StorageLocation" class="layui-bg-red"></span>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">到廠日</label>
<div class="layui-input-inline">
<input asp-for="ArrivalDate" class="layui-input" readonly="" />
</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-inline">
<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" />
<span asp-validation-for="UsedTimes" class="layui-bg-red"></span>
</div>
<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" />
<span asp-validation-for="Boards" class="layui-bg-red"></span>
</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">
<label class="layui-form-label">鋼板狀態</label>
<div class="layui-input-inline">

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

@ -23,7 +23,6 @@
<input id="WipNo" style="width: 150px;" class="layui-input" onkeydown="WipNOinput(event);">
<input id="WipID" type="hidden" style="width: 250px;" class="layui-input">
<input type="hidden" id="PlanQTY" class="layui-input" />
</div>
</div>
@ -42,20 +41,9 @@
</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 class="layui-form-item">
<div class="layui-form-item">
<div class="layui-inline">
<div class="layui-inline">
<label class="layui-form-label">連板數:</label>
@ -71,12 +59,9 @@
<div class="layui-inline">
<button type="button" id="btnAdd" class="layui-btn layui-btn-normal layui-btn-sm">查詢明細</button>
</div>
</div>
</div>
</div>
</div>
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
@ -194,7 +179,7 @@
align: 'center', title: '操作', width: 100, fixed: 'right',
sort: true,
templet: function (item) {
var btns = '<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="del">刪除</a>';
var btns = '<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="del">刪除</a>';
return btns;
}
@ -205,11 +190,11 @@
$('#btnAdd').click(function () {
var form = $("#WipID").val();
if (form) {
hg.open('連片綁定查詢', '/PCB/PCB015V?WipID=' + $("#WipID").val() , '', '', true);
hg.open('連片綁定查詢', '/PCB/PCB015V?WipID=' + $("#WipID").val(), '', '', true);
}
else {
alert("請填寫工單!");
return false;
alert("請填寫工單!");
return false;
}
});
@ -224,7 +209,7 @@
type: 'POST',
success: function (data) {
if (data.success) {
// obj.del(); //只删本地資料
// obj.del(); //只删本地資料
tt(0);
hg.msghide("刪除成功!");
}
@ -255,7 +240,7 @@
};
function CheckBarcodeNo(BarcodeNo, WipNo, WipID, Boards,PlanQTY) {
function CheckBarcodeNo(BarcodeNo, WipNo, WipID, Boards, PlanQTY) {
$.ajax({
url: '/PCB/CheckBarcodeNOandGroup?BarcodeNo=' + BarcodeNo + '&WipNo=' + WipNo + '&WipID=' + WipID + '&Boards=' + Boards + '&PlanQTY=' + PlanQTY,
@ -267,8 +252,7 @@
alert(result.msg);
isExecuting = false;
}
else
{
else {
tt(result.data);
GroupQTY();
$("#BarcodeNo").val("")
@ -289,13 +273,13 @@
$.ajax({
url: "/PCB/GetWipInfo",
dataType: 'json',
data: { id: data, unit_No : 'S'},
data: { id: data, unit_No: 'S' },
contentType: "application/json",
type: 'get',
success: function (result) {
if (result.success) {
//console.info(result.data);//確認itemNO/modelNO
// $("#ItemNo").val(result.data.itemNO);
// $("#ItemNo").val(result.data.itemNO);
$("#ItemNo").text(result.data.itemNO);
$("#Board").val(result.data.boards);
$("#WipID").val(result.data.side);
@ -306,7 +290,7 @@
$('#BarcodeNo').focus();
event.preventDefault();
// return false;
// return false;
}
else {
$("#ItemNo").text("");
@ -372,39 +356,39 @@
}
function GroupQTY() {
var data = $("#WipNo").val();
if (data) {
console.log("data=" + data);
$.ajax({
url: "/PCB/GetWipInfo",
dataType: 'json',
data: { id: data, unit_No: 'S' },
contentType: "application/json",
type: 'get',
success: function (result) {
if (result.success) {
$("#GroupQTY").text(result.data.cpn);
$('#BarcodeNo').focus();
event.preventDefault();
}
else {
$("#GroupQTY").text("");
alert(result.msg);
return false;
}
},
error: function () {
alert("查無資料,請確認工單是否正確!");
$("#WipNo").val("");
var data = $("#WipNo").val();
if (data) {
console.log("data=" + data);
$.ajax({
url: "/PCB/GetWipInfo",
dataType: 'json',
data: { id: data, unit_No: 'S' },
contentType: "application/json",
type: 'get',
success: function (result) {
if (result.success) {
$("#GroupQTY").text(result.data.cpn);
$('#BarcodeNo').focus();
event.preventDefault();
}
else {
$("#GroupQTY").text("");
alert(result.msg);
return false;
}
});
},
error: function () {
alert("查無資料,請確認工單是否正確!");
$("#WipNo").val("");
return false;
}
});
} else {
alert("請填寫工單!");
return false;
}
} else {
alert("請填寫工單!");
return false;
}

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

@ -70,6 +70,12 @@
</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>

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

@ -1,17 +1,15 @@
using System;
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.CommonTools.Result;
using AMESCoreStudio.WebApi.DTO.AMES;
using AMESCoreStudio.CommonTools.Result;
using AMESCoreStudio.WebApi.Extensions;
using AMESCoreStudio.WebApi.Models.AMES;
using Dapper;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Data;
using AMESCoreStudio.WebApi.Extensions;
using System.Linq;
using System.Threading.Tasks;
namespace AMESCoreStudio.WebApi.Controllers.AMES
{
@ -71,7 +69,6 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// <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>
@ -80,8 +77,8 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// <param name="limit">筆數</param>
/// <returns></returns>
[HttpGet("SteelPlateInfoQuery")]
public async Task<ResultModel<SteelPlateInfoDto>> GetSteelPlateInfoQuery(string steelPlateNo, string storageLocation, string item, string side
, string status, string date_str, string date_end, string checkOff, int page = 0, int limit = 10)
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)
{
// 需要查詢鋼板未下線資料
@ -116,11 +113,6 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
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))
{
q = q.Where(w => w.Status == status).ToList();
@ -156,15 +148,8 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
ArrivalDate = s.ArrivalDate,
Items = s.Items,
StorageLocation = s.StorageLocation,
StandardTension1 = s.StandardTension1,
StandardTension2 = s.StandardTension2,
StandardTension3 = s.StandardTension3,
StandardTension4 = s.StandardTension4,
StandardTension5 = s.StandardTension5,
Boards = s.Boards,
UsedTimes = s.UsedTimes,
SideName = s.Side == 11 ? "A面" :
s.Side == 12 ? "B面" : "AB面",
StatusName = s.Status == "0" ? "失效" : "有效",
Remark = s.Remark
}).ToList();
@ -177,7 +162,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// <param name="steelPlateNo">鋼板編號</param>
/// <param name="storageLocation">儲存位置</param>
/// <param name="item">料號</param>
/// <param name="wipNo">工單號碼</param>
/// <param name="wipNo">工單號碼</param>
/// <param name="date_str">到廠日_起</param>
/// <param name="date_end">到廠日_迄</param>
/// <param name="page">頁數</param>
@ -274,6 +259,86 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
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>

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

@ -13,6 +13,9 @@ using System.Linq;
using System.Threading.Tasks;
using Dapper;
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
{
@ -114,11 +117,17 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
}
#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)
return resultModel;
}
@ -1019,54 +1028,11 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
var OutfitsItem = data.outfits.Where(w => !string.IsNullOrWhiteSpace(w.inputData)).ToList();
foreach (var item in OutfitsItem)
{
var outfitInfo = _context.OutfitInfoes.Where(w => w.OutfitNo == item.inputData.ToUpper()).FirstOrDefault();
#region 治具
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
#region SMT綁治具過站
if (data.stations_Name.Contains("SMT"))
{
// 查詢有效鋼板編號
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)
{
// 查詢鋼板紀錄沒有下線紀錄
@ -1111,37 +1077,57 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
}
}
}
// 錫膏
else
// 查詢錫膏且出冰箱
var solderPaste = _context.SolderPasteInfos.Where(w => w.SolderPasteNo.ToUpper() == item.inputData.ToUpper()
&& (w.Status == "O" || w.Status == "U")).FirstOrDefault();
if (solderPaste != null)
{
// 查詢錫膏且出冰箱
var solderPaste = _context.SolderPasteInfos.Where(w => w.SolderPasteNo.ToUpper() == item.inputData.ToUpper()
&& (w.Status == "O" || w.Status == "U")).FirstOrDefault();
if (solderPaste != null)
// 出冰箱
if (solderPaste.Status == "O")
{
// 出冰箱
if (solderPaste.Status == "O")
{
// 更新 錫膏狀態
string updateSql = $@" UPDATE JHAMES.SOLDER_PASTE_INFO SET STATUS ='U',
// 更新 錫膏狀態
string updateSql = $@" UPDATE JHAMES.SOLDER_PASTE_INFO SET STATUS ='U',
WIP_NO = '{data.wipNo}' ,
UPDATE_DATE = SYSDATE ,
UPDATE_USERID ='{data.userID}'
WHERE SOLDER_PASTE_ID ={solderPaste.SolderPasteID}";
// 新增 錫膏紀錄
SolderPasteRecord solderPasteRecord = new SolderPasteRecord
{
SolderPasteID = solderPaste.SolderPasteID,
Status = "U",
CreateUserID = data.userID,
CreateDate = DateTime.Now
};
// 新增 錫膏紀錄
SolderPasteRecord solderPasteRecord = new SolderPasteRecord
{
SolderPasteID = solderPaste.SolderPasteID,
Status = "U",
CreateUserID = data.userID,
CreateDate = DateTime.Now
};
try
{
// 執行原生 SQL
_context.Database.ExecuteSqlRaw(updateSql);
_context.SolderPasteRecords.Add(solderPasteRecord);
_context.SaveChanges();
}
catch (Exception ex)
{
return ex.InnerException.Message;
}
}
// 已開封
else if (solderPaste.Status == "U")
{
// 確認第一次紀錄該筆工單號碼
if (!(solderPaste.WipNo ?? "").Contains(data.wipNo))
{
// 更新 錫膏工單
string updateSql = $@" UPDATE JHAMES.SOLDER_PASTE_INFO SET WIP_NO = WIP_NO || ',' || '{data.wipNo}',
UPDATE_DATE = SYSDATE ,
UPDATE_USERID ='{data.userID}'
WHERE SOLDER_PASTE_ID ={solderPaste.SolderPasteID}";
try
{
// 執行原生 SQL
_context.Database.ExecuteSqlRaw(updateSql);
_context.SolderPasteRecords.Add(solderPasteRecord);
_context.SaveChanges();
}
catch (Exception ex)
@ -1149,28 +1135,52 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return ex.InnerException.Message;
}
}
// 已開封
else if (solderPaste.Status == "U")
}
}
}
#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())
{
// 確認第一次紀錄該筆工單號碼
if (!(solderPaste.WipNo ?? "").Contains(data.wipNo))
{
// 更新 錫膏工單
string updateSql = $@" UPDATE JHAMES.SOLDER_PASTE_INFO SET WIP_NO = WIP_NO || ',' || '{data.wipNo}',
UPDATE_DATE = SYSDATE ,
UPDATE_USERID ='{data.userID}'
WHERE SOLDER_PASTE_ID ={solderPaste.SolderPasteID}";
try
{
// 執行原生 SQL
_context.Database.ExecuteSqlRaw(updateSql);
_context.SaveChanges();
}
catch (Exception ex)
{
return ex.InnerException.Message;
}
}
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);
}
}
}
@ -2631,70 +2641,21 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// 確認治具狀態
/// </summary>
/// <returns></returns>
//[HttpGet("BarCodeOutfit")]
private ResultModel<string> CheckBarCodeOutfitAsync([FromQuery] List<BarCodeCheckDto.Outfit> outfit)
private ResultModel<string> CheckBarCodeOutfit([FromQuery] List<BarCodeCheckDto.Outfit> outfit)
{
ResultModel<string> resultModel = new ResultModel<string> { Success = false };
//判斷是否有治具編號
var outfitNoMsg = string.Empty;
foreach (var outfitNo in outfit)
{
// 治具
var q = _context.OutfitInfoes.Where(w => w.OutfitNo == outfitNo.inputData.ToUpper().Trim()).FirstOrDefault();
// 鋼板
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)
{
// 查詢鋼板紀錄沒有上線紀錄
var Measure = _context.SteelPlateMeasures.Where(w => w.SteelPlateID == q1.SteelPlateID
&& w.OffUserID == null)
.FirstOrDefault();
if (Measure == null)
{
resultModel.Msg = $"鋼板編號【{outfitNo.inputData}】 沒有上線量測紀錄";
return resultModel;
}
}
var q = _context.OutfitInfoes.Where(w => w.OutfitNo.ToUpper().Trim() == outfitNo.inputData.ToUpper().Trim()).FirstOrDefault();
// 錫膏
if (q2 != null)
if (q == 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;
}
resultModel.Msg = $"中央治具找不到該治具編號【{outfitNo.inputData}】";
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;
return resultModel;
}
@ -3051,6 +3012,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
{
result.stations_TestType = Station.TestType;
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)
{
result.extNo = barCodeCheckDto.barcode;
result.extNo = BarCodeInfo.ExtraBarcodeNo;
result.barcode = BarCodeInfo.BarcodeNo;
}
@ -3075,6 +3037,13 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
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())
result.ruleStatus = "F";
@ -3326,6 +3295,124 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
}
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>
public string StorageLocation { get; set; }
/// <summary>
/// 正背面(11=A/正面;12=B/背面 ;13=AB面)
/// </summary>
public string SideName { get; set; }
/// <summary>
/// 連板數
/// </summary>

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

@ -35,11 +35,6 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
/// </summary>
public string StorageLocation { get; set; }
/// <summary>
/// 正背面(11=A/正面;12=B/背面 ;13=AB面)
/// </summary>
public string SideName { get; set; }
/// <summary>
/// 連板數
/// </summary>
@ -50,31 +45,6 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
/// </summary>
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>
/// STATUS 0=失效 ; 1=有效
/// </summary>

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

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

10
AMESCoreStudio.WebApi/Enums/EnumPCS.cs

@ -492,17 +492,23 @@ namespace AMESCoreStudio.WebApi.Enum
[Display(Name = "千住 無鉛錫膏(M705-221BM5-32-11.5K3)")]
B = 2,
/// <summary>
/// 千住 無鹵錫膏(M705-GRN360-K2-V)
/// </summary>
[Display(Name = "千住 無鹵錫膏(M705-GRN360-K2-V)")]
E = 3,
/// <summary>
/// 千住 無鹵錫膏(M705-S101ZH-S4)、無鹵錫絲(SHF RC101 F3 M705)
/// </summary>
[Display(Name = "千住 無鹵錫膏(M705-S101ZH-S4)、無鹵錫絲(SHF RC101 F3 M705)")]
C = 3,
C = 4,
/// <summary>
/// 其他
/// </summary>
[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")]
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>
@ -94,56 +85,6 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[Column("BOARDS")]
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>
/// STATUS 0=失效 ; 1=有效
/// </summary>

Loading…
Cancel
Save