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