Browse Source
2. 新增錫膏報表 錫膏管控 錫膏基本資料維護 3. FQC查詢加入生產製程欄位及抽驗明細按鈕 檢驗項目匯出調整只匯出有勾選資料 4. 修改品質看板報表跟生產製造看板master
35 changed files with 2565 additions and 371 deletions
@ -0,0 +1,36 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using System.Runtime.Serialization; |
||||
|
|
||||
|
|
||||
|
#nullable disable |
||||
|
|
||||
|
namespace AMESCoreStudio.Web.ViewModels.PCB |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 錫膏新增 ViewModel
|
||||
|
/// </summary>
|
||||
|
public partial class PCB017ViewModel |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 錫膏編號
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
public string solderPasteNo { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 管制狀態
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
public string status { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 入冰箱數量
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
public int? qty { get; set; } = 1; |
||||
|
} |
||||
|
} |
@ -0,0 +1,74 @@ |
|||||
|
@{ |
||||
|
Layout = "~/Views/Shared/_AMESLayout.cshtml"; |
||||
|
} |
||||
|
|
||||
|
<div class="layui-card-body"> |
||||
|
<button style="display:none" class="layui-btn layui-btn-sm layui-btn-normal" lay-submit lay-filter="querysubmit"> |
||||
|
<i class="layui-icon layui-icon-sm"></i> |
||||
|
</button> |
||||
|
<input id="wipNo" name="wipNo" value="@ViewBag.wipNo" type="hidden" /> |
||||
|
<table class="layui-hide" id="test" lay-filter="test"></table> |
||||
|
</div> |
||||
|
|
||||
|
@section Scripts{ |
||||
|
<script type="text/javascript"> |
||||
|
//监听表单提交事件 |
||||
|
hg.form.onsubmit('querysubmit', function (data) { |
||||
|
table && table.reload(data); |
||||
|
}); |
||||
|
var tableCols = [[ |
||||
|
{ |
||||
|
field: 'wipNo', |
||||
|
title: '工單號碼', |
||||
|
width: 120, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'unitName', |
||||
|
title: '生產製程', |
||||
|
width: 90, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'inhouseNo', |
||||
|
title: '入庫單號', |
||||
|
width: 150, |
||||
|
sort: true |
||||
|
}, |
||||
|
{ |
||||
|
field: 'seqID', |
||||
|
title: '順序', |
||||
|
width: 60, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'barcodeNo', |
||||
|
width: 100, |
||||
|
title: '內部條碼', |
||||
|
sort: true |
||||
|
}, |
||||
|
{ |
||||
|
field: 'boxNo', |
||||
|
title: '箱號', |
||||
|
width: 150, |
||||
|
sort: true |
||||
|
}, |
||||
|
{ |
||||
|
field: 'extraBarcodeNo', |
||||
|
width: 100, |
||||
|
title: '外部條碼' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'statusNo', |
||||
|
title: '抽驗狀態', |
||||
|
width: 90, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'createDate', |
||||
|
title: '抽驗時間', |
||||
|
sort: true, |
||||
|
templet: '<div>{{ layui.util.toDateString(d.createDate, "yyyy/MM/dd HH:mm:ss") }}</div>' |
||||
|
} |
||||
|
] |
||||
|
]; |
||||
|
|
||||
|
var table = hg.table.datatable('test', '抽驗明細', '/FQC/GetFQC008A?wipNo=@ViewBag.wipNo', {}, tableCols, {}, false, 'full-100', ['filter', 'print', 'exports']); |
||||
|
</script> |
||||
|
} |
@ -0,0 +1,223 @@ |
|||||
|
@{ |
||||
|
Layout = "~/Views/Shared/_AMESLayout.cshtml"; |
||||
|
} |
||||
|
|
||||
|
<div class="layui-card"> |
||||
|
<div class="layui-card-header"> |
||||
|
<div class="layui-form"> |
||||
|
<div class="layui-form-item"> |
||||
|
<div class="layui-inline"><i class="fa fa-file-text-o fa-fw"></i>錫膏管制作業</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="layui-card-body"> |
||||
|
<div class="layui-form"> |
||||
|
<div class="layui-row"> |
||||
|
<div class="layui-form-item"> |
||||
|
<div class="layui-col-sm3"> |
||||
|
<div class="layui-inline"> |
||||
|
<label class="layui-form-label">錫膏編號</label> |
||||
|
<div class="layui-input-inline" style="width:150px"> |
||||
|
<input id="solderPasteNo" name="solderPasteNo" 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-sm4"> |
||||
|
<div class="layui-inline"> |
||||
|
<label class="layui-form-label">收貨日期</label> |
||||
|
<div class="layui-input-inline" style="width:80px"> |
||||
|
<input id="strDate" name="strDate" autocomplete="off" class="layui-input" readonly=""> |
||||
|
</div> |
||||
|
<div class="layui-form-mid">~</div> |
||||
|
<div class="layui-input-inline" style="width:80px"> |
||||
|
<input id="endDate" name="endDate" autocomplete="off" class="layui-input" readonly=""> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="layui-col-sm3"> |
||||
|
<div class="layui-inline"> |
||||
|
<label class="layui-form-label" style="width:60px">錫膏狀態</label> |
||||
|
<div class="layui-input-inline" style="width:120px;"> |
||||
|
<select id="status" name="status" lay-filter="status" lay-submit> |
||||
|
<option value="">全部</option> |
||||
|
<option value="N">未使用</option> |
||||
|
<option value="I">入冰箱</option> |
||||
|
<option value="O">出冰箱</option> |
||||
|
<option value="U">開封</option> |
||||
|
<option value="C">使用完</option> |
||||
|
<option value="X">報廢</option> |
||||
|
</select> |
||||
|
</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"></i> |
||||
|
</button> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<table class="layui-hide" id="query" lay-filter="query"></table> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
@section Scripts{ |
||||
|
<script type="text/javascript"> |
||||
|
|
||||
|
layui.use(['form', 'layer', 'laydate'], function () { |
||||
|
form = layui.form; |
||||
|
laydate = layui.laydate; |
||||
|
laydate.render({ |
||||
|
elem: '#strDate' |
||||
|
, trigger: 'click' |
||||
|
, format: 'yyyy/MM/dd' |
||||
|
, theme: 'grid' |
||||
|
}); |
||||
|
|
||||
|
laydate.render({ |
||||
|
elem: '#endDate' |
||||
|
, trigger: 'click' |
||||
|
, format: 'yyyy/MM/dd' |
||||
|
, theme: 'grid' |
||||
|
}); |
||||
|
}); |
||||
|
//监听表单提交事件 |
||||
|
hg.form.onsubmit('querysubmit', function (data) { |
||||
|
hg.msghide("重新載入資料.."); |
||||
|
table && table.reload(data); |
||||
|
}); |
||||
|
var tableCols = [[ |
||||
|
{ |
||||
|
field: 'solderPasteNo', |
||||
|
title: '錫膏編號', |
||||
|
sort: true, |
||||
|
width: 100, |
||||
|
fixed: 'left', |
||||
|
}, |
||||
|
{ |
||||
|
field: 'statusName', |
||||
|
title: '狀態', |
||||
|
}, |
||||
|
{ |
||||
|
field: 'vendor', |
||||
|
title: '廠商', |
||||
|
width: 150, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'description', |
||||
|
title: '規格', |
||||
|
width: 150, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'alloy', |
||||
|
title: '合金', |
||||
|
width: 150, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'lot', |
||||
|
title: 'LOT', |
||||
|
}, |
||||
|
{ |
||||
|
field: 'manufactoringDate', |
||||
|
title: '製造日期', |
||||
|
width: 95, |
||||
|
sort: true, |
||||
|
templet: '<div>{{ layui.util.toDateString(d.manufactoringDate, "yyyy/MM/dd") }}</div>' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'effectiveDate', |
||||
|
title: '有效日期', |
||||
|
width: 95, |
||||
|
sort: true, |
||||
|
templet: '<div>{{ layui.util.toDateString(d.effectiveDate, "yyyy/MM/dd") }}</div>' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'receiptDate', |
||||
|
title: '收貨日期', |
||||
|
width: 95, |
||||
|
sort: true, |
||||
|
templet: '<div>{{ layui.util.toDateString(d.receiptDate, "yyyy/MM/dd") }}</div>' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'inTime', |
||||
|
title: '入冰箱時間', |
||||
|
width: 145, |
||||
|
sort: true, |
||||
|
templet: '<div>{{ layui.util.toDateString(d.inTime, "yyyy/MM/dd HH:mm:ss") }}</div>' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'inUserName', |
||||
|
title: '人員', |
||||
|
width: 100, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'outTime', |
||||
|
title: '出冰箱時間', |
||||
|
width: 145, |
||||
|
sort: true, |
||||
|
templet: '<div>{{ layui.util.toDateString(d.outTime, "yyyy/MM/dd HH:mm:ss") }}</div>' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'outUserName', |
||||
|
title: '人員', |
||||
|
width: 100, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'useTime', |
||||
|
title: '開封時間', |
||||
|
width: 145, |
||||
|
sort: true, |
||||
|
templet: '<div>{{ layui.util.toDateString(d.useTime, "yyyy/MM/dd HH:mm:ss") }}</div>' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'useUserName', |
||||
|
title: '人員', |
||||
|
width: 100, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'completedTime', |
||||
|
title: '用完時間', |
||||
|
width: 145, |
||||
|
sort: true, |
||||
|
templet: '<div>{{ layui.util.toDateString(d.completedTime, "yyyy/MM/dd HH:mm:ss") }}</div>' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'completedUserName', |
||||
|
title: '人員', |
||||
|
width: 100, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'scrapTime', |
||||
|
title: '報廢時間', |
||||
|
width: 145, |
||||
|
sort: true, |
||||
|
templet: '<div>{{ layui.util.toDateString(d.scrapTime, "yyyy/MM/dd HH:mm:ss") }}</div>' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'scrapUserName', |
||||
|
title: '人員', |
||||
|
width: 100, |
||||
|
}] |
||||
|
]; |
||||
|
|
||||
|
//新增按鈕 |
||||
|
var toolbar = [{ |
||||
|
text: '新增管制作業', |
||||
|
layuiicon: '', |
||||
|
class: 'layui-btn', |
||||
|
handler: function () { |
||||
|
hg.open('新增錫膏管制作業', '/PCB/PCB017C', 400, 400); |
||||
|
|
||||
|
} |
||||
|
}]; |
||||
|
//基本資料表格 |
||||
|
var table = hg.table.datatable('query', '錫膏紀錄', '/PCB/PCB017Query', {}, tableCols, toolbar, true, 'full-100', ['filter', 'print', 'exports']); |
||||
|
|
||||
|
</script> |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,82 @@ |
|||||
|
@model AMESCoreStudio.Web.ViewModels.PCB.PCB017ViewModel |
||||
|
@{ |
||||
|
Layout = "~/Views/Shared/_AMESLayout.cshtml"; |
||||
|
} |
||||
|
|
||||
|
<style> |
||||
|
.control-label { |
||||
|
justify-content: flex-end !important; |
||||
|
} |
||||
|
</style> |
||||
|
|
||||
|
<div class="layui-card"> |
||||
|
<div class="col-sm-12"> |
||||
|
<form enctype="multipart/form-data" method="post" asp-action="PCB017" class="layui-form"> |
||||
|
<div asp-validation-summary="ModelOnly" class="text-danger"></div> |
||||
|
|
||||
|
<div class="layui-form-item"> |
||||
|
<label class="layui-form-label">管制點</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<select lay-filter="status" lay-submit asp-for="@Model.status"> |
||||
|
<option value="I">入冰箱</option> |
||||
|
<option value="O">出冰箱</option> |
||||
|
<option value="C">使用完</option> |
||||
|
<option value="X">報廢</option> |
||||
|
</select> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="layui-form-item"> |
||||
|
<div class="layui-inline"> |
||||
|
<label style="color:red;width:260px;" class="layui-form-label">*管制點選擇入冰箱時,請輸入第一罐錫膏編號</label> |
||||
|
</div> |
||||
|
<div class="layui-inline"> |
||||
|
<label class="layui-form-label">錫膏編號</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input asp-for="@Model.solderPasteNo" min="2" class="layui-input" autocomplete="off" oninput="let p=this.selectionStart;this.value=this.value.toUpperCase();this.setSelectionRange(p, p);" placeholder="請輸入錫膏編號" /> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="layui-form-item"> |
||||
|
<label class="layui-form-label">入冰箱數量</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input asp-for="@Model.qty" class="layui-input" type="number" autocomplete="off" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span> |
||||
|
<div class="layui-row" style="text-align:center"> |
||||
|
<div class="layui-col-md12"> |
||||
|
<input type="submit" value="儲存" class="layui-btn" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</form> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
@section Scripts { |
||||
|
@{ |
||||
|
await Html.RenderPartialAsync("_ValidationScriptsPartial"); |
||||
|
await Html.RenderPartialAsync("_FileinputScriptsPartial"); |
||||
|
} |
||||
|
|
||||
|
<script type="text/javascript"> |
||||
|
layui.use(['form', 'laydate'], function () { |
||||
|
var form = layui.form, |
||||
|
laydate = layui.laydate |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
$(document).ready(function () { |
||||
|
var error = '@Html.ValidationMessage("error")'; |
||||
|
if ($(error).text() != '') { |
||||
|
parent.hg.msg(error); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
</script> |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,161 @@ |
|||||
|
@{ |
||||
|
Layout = "~/Views/Shared/_AMESLayout.cshtml"; |
||||
|
} |
||||
|
|
||||
|
<div class="layui-card"> |
||||
|
<div class="layui-card-header"> |
||||
|
<div class="layui-form"> |
||||
|
<div class="layui-form-item"> |
||||
|
<div class="layui-inline"><i class="fa fa-file-text-o fa-fw"></i>錫膏報表</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="layui-card-body"> |
||||
|
<div class="layui-form"> |
||||
|
<div class="layui-row"> |
||||
|
<div class="layui-form-item"> |
||||
|
<div class="layui-col-sm3"> |
||||
|
<div class="layui-inline"> |
||||
|
<label class="layui-form-label">錫膏編號</label> |
||||
|
<div class="layui-input-inline" style="width:150px"> |
||||
|
<input id="solderPasteNo" name="solderPasteNo" 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-inline"> |
||||
|
<label class="layui-form-label">工單號碼</label> |
||||
|
<div class="layui-input-inline" style="width:150px"> |
||||
|
<input id="wipNo" name="wipNo" 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"></i> |
||||
|
</button> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<table class="layui-hide" id="query" lay-filter="query"></table> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
@section Scripts{ |
||||
|
<script type="text/javascript"> |
||||
|
|
||||
|
layui.use(['form', 'layer', 'laydate'], function () { |
||||
|
form = layui.form; |
||||
|
}); |
||||
|
//监听表单提交事件 |
||||
|
hg.form.onsubmit('querysubmit', function (data) { |
||||
|
hg.msghide("重新載入資料.."); |
||||
|
table && table.reload(data); |
||||
|
}); |
||||
|
var tableCols = [[ |
||||
|
{ |
||||
|
field: 'solderPasteNo', |
||||
|
title: '錫膏編號', |
||||
|
sort: true, |
||||
|
width: 100, |
||||
|
fixed: 'left', |
||||
|
}, |
||||
|
{ |
||||
|
field: 'wipNo', |
||||
|
title: '工單號碼', |
||||
|
width: 200, |
||||
|
}, |
||||
|
|
||||
|
{ |
||||
|
field: 'description', |
||||
|
title: '錫膏規格', |
||||
|
width: 150, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'createUserName', |
||||
|
title: '建立人員', |
||||
|
width: 100, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'createTime', |
||||
|
title: '建立時間', |
||||
|
width: 145, |
||||
|
sort: true, |
||||
|
templet: '<div>{{ layui.util.toDateString(d.createTime, "yyyy/MM/dd HH:mm:ss") }}</div>' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'inUserName', |
||||
|
title: '入冰箱人員', |
||||
|
width: 100, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'inTime', |
||||
|
title: '入冰箱時間', |
||||
|
width: 145, |
||||
|
sort: true, |
||||
|
templet: '<div>{{ layui.util.toDateString(d.inTime, "yyyy/MM/dd HH:mm:ss") }}</div>' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'outUserName', |
||||
|
title: '出冰箱人員', |
||||
|
width: 100, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'outTime', |
||||
|
title: '出冰箱時間', |
||||
|
width: 145, |
||||
|
sort: true, |
||||
|
templet: '<div>{{ layui.util.toDateString(d.outTime, "yyyy/MM/dd HH:mm:ss") }}</div>' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'useUserName', |
||||
|
title: '使用人員', |
||||
|
width: 100, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'useTime', |
||||
|
title: '使用時間', |
||||
|
width: 145, |
||||
|
sort: true, |
||||
|
templet: '<div>{{ layui.util.toDateString(d.useTime, "yyyy/MM/dd HH:mm:ss") }}</div>' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'statusName', |
||||
|
title: '狀態', |
||||
|
}, |
||||
|
{ |
||||
|
field: 'scrapUserName', |
||||
|
title: '報廢人員', |
||||
|
width: 100, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'scrapTime', |
||||
|
title: '報廢時間', |
||||
|
width: 145, |
||||
|
sort: true, |
||||
|
templet: '<div>{{ layui.util.toDateString(d.scrapTime, "yyyy/MM/dd HH:mm:ss") }}</div>' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'mixingTime', |
||||
|
title: '錫膏攪拌時間', |
||||
|
width: 145, |
||||
|
sort: true, |
||||
|
templet: '<div>{{ layui.util.toDateString(d.mixingTime, "yyyy/MM/dd HH:mm:ss") }}</div>' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'remark', |
||||
|
title: '備註', |
||||
|
} |
||||
|
] |
||||
|
]; |
||||
|
|
||||
|
//基本資料表格 |
||||
|
var table = hg.table.datatable('query', '錫膏報表', '/PCB/PCB018Query', {}, tableCols, {}, false, 'full-100', ['filter', 'print', 'exports']); |
||||
|
|
||||
|
</script> |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,171 @@ |
|||||
|
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.WebApi.DTO.AMES; |
||||
|
using AMESCoreStudio.CommonTools.Result; |
||||
|
|
||||
|
namespace AMESCoreStudio.WebApi.Controllers.AMES |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 錫膏規格流水碼表
|
||||
|
/// </summary>
|
||||
|
[Route("api/[controller]")]
|
||||
|
[ApiController] |
||||
|
public class SolderPasteSerialController : ControllerBase |
||||
|
{ |
||||
|
private readonly AMESContext _context; |
||||
|
|
||||
|
public SolderPasteSerialController(AMESContext context) |
||||
|
{ |
||||
|
_context = context; |
||||
|
} |
||||
|
|
||||
|
[HttpGet] |
||||
|
public async Task<ActionResult<IEnumerable<SolderPasteSerial>>> GetSolderPasteSerials() |
||||
|
{ |
||||
|
return await _context.SolderPasteSerials.ToListAsync(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
[HttpGet("{id}")] |
||||
|
public async Task<ActionResult<SolderPasteSerial>> GetSolderPasteSerial(string id) |
||||
|
{ |
||||
|
var solderPasteSerial = await _context.SolderPasteSerials.FindAsync(id); |
||||
|
return solderPasteSerial; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 自動取得編號
|
||||
|
/// </summary>
|
||||
|
/// <param name="id">規格</param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet("AutoSerialNo/{id}")] |
||||
|
public async Task<ActionResult<string>> GetSolderPasteSerialByAutoSerialNo(string id) |
||||
|
{ |
||||
|
var item = await _context.SolderPasteSerials |
||||
|
.Where(w => w.Description.ToUpper() == id.Trim().ToUpper()).FirstOrDefaultAsync(); |
||||
|
|
||||
|
if (item == null) |
||||
|
return ""; |
||||
|
else |
||||
|
{ |
||||
|
var SerialNo = string.Empty; |
||||
|
var Infos = _context.SolderPasteInfos.Where(w => w.SolderPasteNo.StartsWith(item.SerialNo)).Select(s => s.SolderPasteNo).Max(); |
||||
|
if (!string.IsNullOrWhiteSpace(Infos)) |
||||
|
{ |
||||
|
SerialNo = $"{item.SerialNo}{(int.Parse(Infos.Substring(2, 5)) + 1).ToString().PadLeft(5, '0')}"; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
// 根據規格對應的代碼(2碼)+流水碼(5碼)
|
||||
|
SerialNo = $"{item.SerialNo}{(item.SerialNumber + 1).ToString().PadLeft(5, '0')}"; |
||||
|
} |
||||
|
return SerialNo; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 更新錫膏規格流水碼表
|
||||
|
/// </summary>
|
||||
|
/// <param name="solderPasteSerial"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPut] |
||||
|
public async Task<ResultModel<SolderPasteSerial>> PutSolderPasteSerial(SolderPasteSerial solderPasteSerial) |
||||
|
{ |
||||
|
ResultModel<SolderPasteSerial> result = new ResultModel<SolderPasteSerial>(); |
||||
|
_context.Entry(solderPasteSerial).State = EntityState.Modified; |
||||
|
|
||||
|
try |
||||
|
{ |
||||
|
await _context.SaveChangesAsync(); |
||||
|
result.Success = true; |
||||
|
result.Msg = "OK"; |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
result.Success = false; |
||||
|
result.Msg = ex.InnerException.Message; |
||||
|
} |
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 更新錫膏規格流水碼表
|
||||
|
/// </summary>
|
||||
|
/// <param name="id">規格</param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPut("AutoMatically/{id}")] |
||||
|
public async Task<ResultModel<SolderPasteSerial>> PutSolderPasteSerialAutoMatically(string id) |
||||
|
{ |
||||
|
ResultModel<SolderPasteSerial> result = new ResultModel<SolderPasteSerial>(); |
||||
|
// 流水碼加1
|
||||
|
string updateSql = @" UPDATE JHAMES.SOLDER_PASTE_SERIAL SET SERIAL_NUMBER = SERIAL_NUMBER + 1 ,
|
||||
|
WHERE DESCRIPTION = :Description";
|
||||
|
|
||||
|
try |
||||
|
{ |
||||
|
// 執行原生 SQL
|
||||
|
_context.Database.ExecuteSqlRaw(updateSql); |
||||
|
result.Success = true; |
||||
|
result.Msg = "OK"; |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
result.Success = false; |
||||
|
result.Msg = ex.InnerException.Message; |
||||
|
} |
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 新增錫膏規格流水碼表
|
||||
|
/// </summary>
|
||||
|
/// <param name="solderPasteSerial"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost] |
||||
|
public async Task<ResultModel<SolderPasteSerial>> PostSolderPasteSerial(SolderPasteSerial solderPasteSerial) |
||||
|
{ |
||||
|
ResultModel<SolderPasteSerial> result = new ResultModel<SolderPasteSerial>(); |
||||
|
_context.SolderPasteSerials.Add(solderPasteSerial); |
||||
|
try |
||||
|
{ |
||||
|
await _context.SaveChangesAsync(); |
||||
|
result.Success = true; |
||||
|
result.Msg = "OK"; |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
result.Success = false; |
||||
|
result.Msg = ex.InnerException.Message; |
||||
|
} |
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
// DELETE: api/SolderPasteSerial/5
|
||||
|
[HttpDelete("{id}")] |
||||
|
public async Task<ActionResult<SolderPasteSerial>> DeleteSolderPasteSerial(string id) |
||||
|
{ |
||||
|
var solderPasteSerial = await _context.SolderPasteSerials.FindAsync(id); |
||||
|
if (solderPasteSerial == null) |
||||
|
{ |
||||
|
return NotFound(); |
||||
|
} |
||||
|
|
||||
|
_context.SolderPasteSerials.Remove(solderPasteSerial); |
||||
|
await _context.SaveChangesAsync(); |
||||
|
|
||||
|
return solderPasteSerial; |
||||
|
} |
||||
|
|
||||
|
private bool SolderPasteSerialExists(string id) |
||||
|
{ |
||||
|
return _context.SolderPasteSerials.Any(e => e.SerialNo == id); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,73 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using System.Runtime.Serialization; |
||||
|
|
||||
|
|
||||
|
#nullable disable |
||||
|
|
||||
|
namespace AMESCoreStudio.WebApi.DTO.AMES |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// FQC查詢 抽驗明細Dto
|
||||
|
/// </summary>
|
||||
|
public partial class FQC008DetailDto |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 入庫單號碼
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
public string InhouseNo { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 順序ID
|
||||
|
/// </summary>
|
||||
|
[Key] |
||||
|
[DataMember] |
||||
|
public int SeqID { get; set; } = 1; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 工單號碼
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
public string WipNo { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 內部序號
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
public string BarcodeNo { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 箱號/條碼
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
public string BoxNo { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 出貨序號
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
public string ExtraBarcodeNo { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 抽驗狀態 P-PASS;F-NG;
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
public string StatusNo { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 生產製程
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
public string UnitName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 抽驗時間
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
public string CreateDate { get; set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,140 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
|
||||
|
namespace AMESCoreStudio.WebApi.DTO.AMES |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 錫膏Report Dto
|
||||
|
/// </summary>
|
||||
|
public partial class PCB017ViewDto |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 錫膏ID
|
||||
|
/// </summary>
|
||||
|
public int SolderPasteID { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 錫膏編號
|
||||
|
/// </summary>
|
||||
|
public string SolderPasteNo { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 規格
|
||||
|
/// </summary>
|
||||
|
public string Description { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 合金
|
||||
|
/// </summary>
|
||||
|
public string Alloy { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 廠商
|
||||
|
/// </summary>
|
||||
|
public string Vendor { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// LOT
|
||||
|
/// </summary>
|
||||
|
public string Lot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 工單號碼
|
||||
|
/// </summary>
|
||||
|
public string WipNo { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 狀態 0=失效 ; 1=有效
|
||||
|
/// </summary>
|
||||
|
public string StatusName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 收貨日期
|
||||
|
/// </summary>
|
||||
|
public DateTime ReceiptDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 製造日期
|
||||
|
/// </summary>
|
||||
|
public DateTime ManufactoringDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 有效日期
|
||||
|
/// </summary>
|
||||
|
public DateTime EffectiveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 備註
|
||||
|
/// </summary>
|
||||
|
public string Remark { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 建立人員
|
||||
|
/// </summary>
|
||||
|
public string CreateUserName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 建立時間
|
||||
|
/// </summary>
|
||||
|
public DateTime CreateTime { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 入冰箱人員
|
||||
|
/// </summary>
|
||||
|
public string InUserName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 入冰箱時間
|
||||
|
/// </summary>
|
||||
|
public DateTime? InTime { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 出冰箱人員
|
||||
|
/// </summary>
|
||||
|
public string OutUserName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 出冰箱時間
|
||||
|
/// </summary>
|
||||
|
public DateTime? OutTime { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 使用人員
|
||||
|
/// </summary>
|
||||
|
public string UseUserName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 使用時間
|
||||
|
/// </summary>
|
||||
|
public DateTime? UseTime { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 用完人員
|
||||
|
/// </summary>
|
||||
|
public string CompletedUserName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 用完時間
|
||||
|
/// </summary>
|
||||
|
public DateTime? CompletedTime { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 報廢人員
|
||||
|
/// </summary>
|
||||
|
public string ScrapUserName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 報廢時間
|
||||
|
/// </summary>
|
||||
|
public DateTime? ScrapTime { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 錫膏攪拌時間
|
||||
|
/// </summary>
|
||||
|
public DateTime? MixingTime { get; set; } |
||||
|
|
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,58 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using System.Runtime.Serialization; |
||||
|
|
||||
|
#nullable disable |
||||
|
|
||||
|
namespace AMESCoreStudio.WebApi.Models.AMES |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 錫膏規格流水碼表
|
||||
|
/// </summary>
|
||||
|
[Table("SOLDER_PASTE_SERIAL", Schema = "JHAMES")] |
||||
|
public partial class SolderPasteSerial |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 代號
|
||||
|
/// </summary>
|
||||
|
[Key] |
||||
|
[Column("SERIAL_NO")] |
||||
|
[DataMember] |
||||
|
public string SerialNo { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目前流水碼
|
||||
|
/// </summary>
|
||||
|
[Column("SERIAL_NUMBER")] |
||||
|
[DataMember] |
||||
|
public int SerialNumber { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 規格
|
||||
|
/// </summary>
|
||||
|
[Required] |
||||
|
[Column("DESCRIPTION")] |
||||
|
[DataMember] |
||||
|
public string Description { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 合金
|
||||
|
/// </summary>
|
||||
|
[Required] |
||||
|
[Column("ALLOY")] |
||||
|
[DataMember] |
||||
|
public string Alloy { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 廠商
|
||||
|
/// </summary>
|
||||
|
[Required] |
||||
|
[Column("VENDOR")] |
||||
|
[DataMember] |
||||
|
public string Vendor { get; set; } |
||||
|
|
||||
|
} |
||||
|
} |
Loading…
Reference in new issue