Browse Source

1. 整理Git資料

2. 更新工單基本資料
PTD
Ray 3 years ago
parent
commit
4720cae681
  1. 309
      AMESCoreStudio.Web/Controllers/PCSController.cs
  2. 12
      AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs
  3. 2
      AMESCoreStudio.Web/ViewModels/WipViewModel.cs
  4. 197
      AMESCoreStudio.Web/Views/PCS/PCS001.cshtml
  5. 252
      AMESCoreStudio.Web/Views/PCS/PCS001R.cshtml
  6. 181
      AMESCoreStudio.WebApi/Controllers/AMES/WipSopLogController.cs
  7. 2
      AMESCoreStudio.WebApi/Models/AMES/BarcodeItem.cs
  8. 45
      AMESCoreStudio.WebApi/Models/AMES/Item.cs
  9. 15
      AMESCoreStudio.WebApi/Models/AMES/WipBoard.cs
  10. 84
      AMESCoreStudio.WebApi/Models/AMES/WipSopLog.cs
  11. 12
      AMESCoreStudio.WebApi/Models/AMES/WipSystem.cs
  12. 28
      AMESCoreStudio.WebApi/Models/AMESContext.cs

309
AMESCoreStudio.Web/Controllers/PCSController.cs

@ -133,6 +133,23 @@ namespace AMESCoreStudio.Web.Controllers
ViewBag.FactoryUnitList = FactoryUnit;
}
/// <summary>
/// 組件資料
/// </summary>
/// <returns></returns>
private async Task GetItems()
{
var result = await _pcsApi.GetItems();
var ItemsList = new List<SelectListItem>();
ItemsList.Add(new SelectListItem("請選擇", ""));
for (int i = 0; i < result.Count; i++)
{
ItemsList.Add(new SelectListItem(result[i].ItemName, result[i].ItemNo.ToString()));
}
ViewBag.ItemsList = ItemsList;
}
/// <summary>
/// 正背面
/// </summary>
@ -224,7 +241,7 @@ namespace AMESCoreStudio.Web.Controllers
var FlowRuleItems = new List<SelectListItem>();
for (int i = 0; i < result.Count; i++)
{
FlowRuleItems.Add(new SelectListItem(result[i].UnitNo + result[i].FlowRuleName, result[i].FlowRuleID.ToString()));
FlowRuleItems.Add(new SelectListItem(result[i].FlowRuleName, result[i].FlowRuleID.ToString()));
}
if (FlowRuleItems.Count == 0)
@ -591,47 +608,6 @@ namespace AMESCoreStudio.Web.Controllers
//TempData["GetLockReasonTypeList"] = LockReasonType;
ViewBag.GetLockReasonTypeList = LockReasonType;
}
/// <summary>
/// 生產單位
/// </summary>
/// <returns></returns>
private async Task GetFactoryUnitList()
{
var result = await _basApi.GetFactoryUnits();
var UnitItems = new List<SelectListItem>();
UnitItems.Add(new SelectListItem("請選擇", ""));
for (int i = 0; i < result.Count; i++)
{
UnitItems.Add(new SelectListItem(result[i].UnitName, result[i].UnitNo.ToString()));
}
ViewBag.FactoryUnit = UnitItems;
}
/// <summary>
/// 組件資料
/// </summary>
/// <returns></returns>
private async Task GetItems()
{
var result = await _pcsApi.GetItems();
var ItemsList = new List<SelectListItem>();
ItemsList.Add(new SelectListItem("請選擇", ""));
for (int i = 0; i < result.Count; i++)
{
ItemsList.Add(new SelectListItem(result[i].ItemName, result[i].ItemNo.ToString()));
}
ViewBag.ItemsList = ItemsList;
}
#endregion
[ResponseCache(Duration = 0)]
@ -719,7 +695,13 @@ namespace AMESCoreStudio.Web.Controllers
await _pcsApi.PostWipBoard(JsonConvert.SerializeObject(model.wipBoard));
}
// 工單對應SOP Log
var q = await _pcsApi.GetWipSopQuery(itemNo: model.wipAtt.ItemNO, unitNo: model.wipInfo.UnitNO, state: "Y");
if (q.Data.Count() != 0)
{
model.wipSopLog.WipSopID = q.Data.FirstOrDefault().WipSopID;
await _pcsApi.PostWipSopLog(JsonConvert.SerializeObject(model.wipSopLog));
}
if (!string.IsNullOrWhiteSpace(model.wipBarcode.StartNO))
{
model.wipBarcode.WipID = model.wipInfo.WipID;
@ -878,6 +860,18 @@ namespace AMESCoreStudio.Web.Controllers
}
#endregion
public async Task<JsonResult> MaterialKpQueryAsync(string itemno = null, string station = null)
{
IResultModel<MaterialKpDto> result = await _pcsApi.GetMaterialKpQuery(itemno: itemno, station: station);
if (result.Data.Count() != 0)
{
return Json(new Table() { code = 0, msg = "", data = result.Data, count = 0 });
}
return Json(new Table() { count = 0, data = null });
}
#region PCS005 工單資料查詢
public IActionResult PCS005()
{
@ -1168,7 +1162,6 @@ namespace AMESCoreStudio.Web.Controllers
#endregion
#region PCS021 條碼輸入作業
[ResponseCache(Duration = 0)]
[HttpGet]
@ -1180,6 +1173,119 @@ namespace AMESCoreStudio.Web.Controllers
}
#endregion
#region PCS024組件资料维护相关
public async Task<IActionResult> PCS024()
{
await GetFactoryUnit();
return View();
}
//新增頁面
public async Task<IActionResult> PCS024C(string id)
{
var result = await _pcsApi.GetBarcodeInfoesByNo(id);
var tt = result[0];
ViewBag.BarcodeID = tt.BarcodeID;
ViewBag.WipID = tt.WipID;
ViewBag.BarcodeNo = id;
await GetFactoryUnit();
//await GetStations();
await GetItems();
return View();
}
//修改页面
[HttpGet]
public async Task<IActionResult> PCS024UAsync(int id)
{
await GetItems();
var result = await _pcsApi.GetBarcodeItem(id);
if (result.Count == 0)
{
return View();
}
return View(result[0]);
}
public async Task<IActionResult> PCS024DAsync(int id)
{
var result = await _pcsApi.DeleteBarcodeItem(id);
return Json(new Result() { success = true, msg = "" });
}
//頁面提交,id=0 添加,id>0 修改
[HttpPost]
public async Task<IActionResult> PCS024CSaveAsync(BarcodeItem model)
{
if (ModelState.IsValid)
{
IResultModel result;
result = await _pcsApi.PostBarcodeItem(JsonConvert.SerializeObject(model));
if (!result.Success)
{
var _msg = "新增成功!";
return RedirectToAction("Refresh", "Home", new { msg = _msg });
}
else
{
if (result.Errors.Count > 0)
{
ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
}
else
{
ModelState.AddModelError("error", result.Msg);
}
}
}
return View("PCS024C", model);
}
[ResponseCache(Duration = 0)]
[HttpGet]
public async Task<IActionResult> GetBarcodeItemsAsync()
{
var result = await _pcsApi.GetBarcodeItems();
if (result.Count > 0)
{
return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
}
return Json(new Table() { count = 0, data = null });
}
[ResponseCache(Duration = 0)]
[HttpGet]
public async Task<IActionResult> GetBarcodeItemByUnitAsync(string ID)
{
string str, str1;
var strA = ID.Split("=");
str = strA[0];
str1 = strA[1];
//WO0002A10001
if (ID is null)
return Json(new Table() { count = 0, data = null });
var result = await _pcsApi.GetBItemByStr(str, str1);
//var result = await _pcsApi.GetBarcodeItemByUnit(ID);
if (result.Count > 0)
{
return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
}
return Json(new Table() { count = 0, data = null });
}
#endregion
[ResponseCache(Duration = 0)]
[HttpGet]
public async Task<IActionResult> PCS030()
@ -1296,121 +1402,6 @@ namespace AMESCoreStudio.Web.Controllers
return View(model);
}
#region PCS024組件资料维护相关
public async Task<IActionResult> PCS024()
{
await GetFactoryUnitList();
return View();
}
//新增頁面
public async Task<IActionResult> PCS024C(string id)
{
var result = await _pcsApi.GetBarcodeInfoesByNo(id);
var tt = result[0];
ViewBag.BarcodeID = tt.BarcodeID;
ViewBag.WipID = tt.WipID;
ViewBag.BarcodeNo = id;
await GetFactoryUnitList();
//await GetStations();
await GetItems();
return View();
}
//修改页面
[HttpGet]
public async Task<IActionResult> PCS024UAsync(int id)
{
await GetItems();
var result = await _pcsApi.GetBarcodeItem(id);
if (result.Count == 0)
{
return View();
}
return View(result[0]);
}
public async Task<IActionResult> PCS024DAsync(int id)
{
var result = await _pcsApi.DeleteBarcodeItem(id);
return Json(new Result() { success = true, msg = "" });
}
//頁面提交,id=0 添加,id>0 修改
[HttpPost]
public async Task<IActionResult> PCS024CSaveAsync(BarcodeItem model)
{
if (ModelState.IsValid)
{
IResultModel result;
result = await _pcsApi.PostBarcodeItem(JsonConvert.SerializeObject(model));
if (!result.Success)
{
var _msg = "新增成功!";
return RedirectToAction("Refresh", "Home", new { msg = _msg });
}
else
{
if (result.Errors.Count > 0)
{
ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
}
else
{
ModelState.AddModelError("error", result.Msg);
}
}
}
return View("PCS024C", model);
}
[ResponseCache(Duration = 0)]
[HttpGet]
public async Task<IActionResult> GetBarcodeItemsAsync()
{
var result = await _pcsApi.GetBarcodeItems();
if (result.Count > 0)
{
return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
}
return Json(new Table() { count = 0, data = null });
}
[ResponseCache(Duration = 0)]
[HttpGet]
public async Task<IActionResult> GetBarcodeItemByUnitAsync(string ID)
{
string str, str1;
var strA = ID.Split("=");
str = strA[0];
str1 = strA[1];
//WO0002A10001
if (ID is null)
return Json(new Table() { count = 0, data = null });
var result = await _pcsApi.GetBItemByStr(str, str1);
//var result = await _pcsApi.GetBarcodeItemByUnit(ID);
if (result.Count > 0)
{
return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
}
return Json(new Table() { count = 0, data = null });
}
#endregion
[HttpPost]
public JsonResult TestFunc(string number)
{

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

@ -295,10 +295,20 @@ namespace AMESCoreStudio.Web
/// SOP文件變更狀態
/// </summary>
/// <returns></returns>
[WebApiClient.Attributes.HttpPut("api/WipSop/{id}/{state}")]
ITask<ResultModel<WipSop>> PutWipSop(int id, string state);
#endregion
#region WipSopLog 工單對應SOP log
/// <summary>
/// 新增工單對應SOP log
/// </summary>
/// <returns></returns>
[WebApiClient.Attributes.HttpPost("api/WipSopLog")]
ITask<ResultModel<WipSopLog>> PostWipSopLog([FromBody, RawJsonContent] string model);
#endregion
#region PCS024組件維護相關
/// <summary>
@ -306,7 +316,7 @@ namespace AMESCoreStudio.Web
/// </summary>
/// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/Items")]
ITask<List<Item>> GetItems();
ITask<List<Items>> GetItems();
/// <summary>
/// 新增組件

2
AMESCoreStudio.Web/ViewModels/WipViewModel.cs

@ -39,5 +39,7 @@ namespace AMESCoreStudio.Web.ViewModels
public FactoryUnit factoryUnit { get; set; }
public WipSopLog wipSopLog { get; set; }
}
}

197
AMESCoreStudio.Web/Views/PCS/PCS001.cshtml

@ -18,6 +18,7 @@
<div class="col-sm-12">
<form enctype="multipart/form-data" method="post" asp-action="PCS001" class="layui-form">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="wipSopLog.State" value="Y" />
<div class="layui-form-item">
<input asp-for="wipInfo.InputFlag" type="checkbox" title="判斷前製程是否已經投入" />
</div>
@ -231,6 +232,7 @@
<input type="checkbox" title="SFIS途程確認" />
</div>
</div>
<table class="layui-hide" id="ruleStation" lay-filter="ruleStation"></table>
</div>
@* 序號編碼sheet *@
@ -273,7 +275,8 @@
@* Keypart組合sheet *@
<div class="layui-tab-item">
<table class="layui-hide" id="material" lay-filter="material"></table>
<a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-read" lay-submit lay-filter="queryKeyParts">刷新</a>
<table class="layui-hide" id="keyparts" lay-filter="keyparts"></table>
</div>
@* 板卡-工程資訊sheet *@
@ -359,6 +362,7 @@
<label class="layui-form-label">零件烘烤時間</label>
<div class="layui-input-block">
<input asp-for="wipBoard.PartsBakeTime" class="layui-input" />
<span asp-validation-for="wipBoard.PartsBakeTime" class="layui-bg-red"></span>
</div>
</div>
</div>
@ -393,18 +397,21 @@
<label asp-for="wipBoard.BiRatio" class="layui-form-label"></label>
<div class="layui-input-block">
<input asp-for="wipBoard.BiRatio" class="layui-input" />
<span asp-validation-for="wipBoard.BiRatio" class="layui-bg-red"></span>
</div>
</div>
<div class="layui-input-inline">
<label asp-for="wipBoard.BiTemperature" class="layui-form-label"></label>
<div class="layui-input-block">
<input asp-for="wipBoard.BiTemperature" class="layui-input" />
<span asp-validation-for="wipBoard.BiTemperature" class="layui-bg-red"></span>
</div>
</div>
<div class="layui-input-inline">
<label asp-for="wipBoard.BiTime" class="layui-form-label"></label>
<div class="layui-input-block">
<input asp-for="wipBoard.BiTime" class="layui-input" />
<span asp-validation-for="wipBoard.BiTime" class="layui-bg-red"></span>
</div>
</div>
</div>
@ -415,12 +422,12 @@
<label asp-for="wipBoard.BiosVer" class="layui-form-label"></label>
<div class="layui-input-inline">
<input asp-for="wipBoard.BiosVer" class="layui-input" placeholder="請輸入BIOS" />
<span class="text-danger"></span>
<span asp-validation-for="wipBoard.BiosVer" class="layui-bg-red"></span>
</div>
<label asp-for="wipBoard.Checksum" class="layui-form-label"></label>
<div class="layui-input-inline">
<input asp-for="wipBoard.Checksum" class="layui-input" placeholder="請輸入Checksum" />
<span class="text-danger"></span>
<span asp-validation-for="wipBoard.Checksum" class="layui-bg-red"></span>
</div>
</div>
</div>
@ -515,18 +522,21 @@
<label asp-for="wipSystem.BiRatio" class="layui-form-label"></label>
<div class="layui-input-block">
<input asp-for="wipSystem.BiRatio" class="layui-input" />
<span asp-validation-for="wipSystem.BiRatio" class="layui-bg-red"></span>
</div>
</div>
<div class="layui-input-inline">
<label asp-for="wipSystem.BiTemperature" class="layui-form-label"></label>
<div class="layui-input-block">
<input asp-for="wipSystem.BiTemperature" class="layui-input" />
<span asp-validation-for="wipSystem.BiTemperature" class="layui-bg-red"></span>
</div>
</div>
<div class="layui-input-inline">
<label asp-for="wipSystem.BiTime" class="layui-form-label"></label>
<div class="layui-input-block">
<input asp-for="wipSystem.BiTime" class="layui-input" />
<span asp-validation-for="wipSystem.BiTime" class="layui-bg-red"></span>
</div>
</div>
<label asp-for="wipSystem.BiMemo" class="layui-form-label"></label>
@ -541,11 +551,13 @@
<label asp-for="wipSystem.BiosVer" class="layui-form-label"></label>
<div class="layui-input-inline">
<input asp-for="wipSystem.BiosVer" class="layui-input" />
<span asp-validation-for="wipSystem.BiosVer" class="layui-bg-red"></span>
</div>
<label asp-for="wipSystem.Checksum" class="layui-form-label">Checksum</label>
<div class="layui-input-inline">
<input asp-for="wipSystem.Checksum" class="layui-input" />
<span asp-validation-for="wipSystem.Checksum" class="layui-bg-red"></span>
</div>
</div>
</div>
@ -555,10 +567,12 @@
<label class="layui-form-label" asp-for="wipSystem.Cpu"></label>
<div class="layui-input-inline">
<input class="layui-input" asp-for="wipSystem.Cpu" autocomplete="off" placeholder="CPU" />
<span asp-validation-for="wipSystem.Cpu" class="layui-bg-red"></span>
</div>
<label class="layui-form-label" asp-for="wipSystem.Ram"></label>
<div class="layui-input-inline">
<input class="layui-input" asp-for="wipSystem.Ram" autocomplete="off" placeholder="RAM" />
<span asp-validation-for="wipSystem.Ram" class="layui-bg-red"></span>
</div>
<label class="layui-form-label" asp-for="wipSystem.OsVer"></label>
<div class="layui-input-inline">
@ -802,13 +816,8 @@
@* SOP文件 sheet *@
<div class="layui-tab-item">
<p>檔案 <input type="file" name="formFile"></p>
@*@await Html.PartialAsync("PCS/_SOPPartial")*@
<partial name="PCS/_SOPPartial" />
@*<div class="page">
<div id="foo-view" data-url="@Url.Action(action: "SOP", controller: "PCS")"></div>
</div>*@
<a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-read" lay-submit lay-filter="querysop">刷新</a>
<table class="layui-hide" id="wipsop" lay-filter="wipsop"></table>
</div>
</div>
</div>
@ -827,12 +836,18 @@
await Html.RenderPartialAsync("_FileinputScriptsPartial"); }
<script type="text/javascript">
//$(document).ready(function () {
// (function () {
// var url = $("#foo-view").data("url");
// $("#foo-view").load(url);
// })();
//});
$(document).ready(function () {
getFlowRuleList(("#unit").value);
getLineInfoList(("#unit").value);
if (("#unit").value == "B" || ("#unit").value == "P" || ("#unit").value == "T") {
$("#system").show();
$("#board").hide();
}
else {
$("#system").hide();
$("#board").show();
}
});
function getFlowRuleList(data)
{
@ -851,6 +866,8 @@
});
layui.form.render("select");//重新渲染 固定写法
// 刷新 生產流程
RuleStation($("#wipInfo_FlowRuleID").val());
},
error: function (result)
{
@ -970,6 +987,154 @@
});
});
//通过行tool编辑,lay-event="show"
function show(obj) {
layui.use('layer', function () {
var layer = layui.layer;
layer.open({
type: 2,
area: ['900px', '650px'],
fixed: false, //不固定
maxmin: true,
content: obj.data.filePath + obj.data.newName
});
});
};
@* KeyParts文件 sheet *@
hg.form.onsubmit('queryKeyParts', function (data) {
var item = $("#wipAtt_ItemNO").val();
if ($.trim(item) == '' || item == undefined) {
parent.hg.msg("請輸入料號");
return;
}
var tableCols_keyParts = [[
{
field: 'itemName',
width: 150,
title: '料號',
sort: true
},
{
field: 'kpName',
title: 'KP料號名稱',
width: 200,
sort: true
},
{
field: 'kpNo',
title: 'KP料號NO',
sort: true
},
{
field: 'kpSeq',
title: '順序',
width: 100,
sort: true
},
{
field: 'title',
title: '前置碼',
width: 150
},
{
field: 'length',
title: '長度',
width: 150
},
{
field: 'station',
title: '站(前段)',
width: 150
}]
];
var tableKeyParts = hg.table.datatable('keyparts', 'KeyParts查詢', '/PCS/MaterialKpQuery?itemNo=' + item, {}, tableCols_keyParts, false, 'full-100');
hg.msghide("重新載入資料..");
tableKeyParts ;
});
@* SOP文件 sheet *@
hg.form.onsubmit('querysop', function (data) {
var item = $("#wipAtt_ItemNO").val();
if ($.trim(item) == '' || item == undefined) {
parent.hg.msg("請輸入料號");
return;
}
var tableCols = [[
{
field: 'itemNo',
width: 150,
title: '料號',
sort: true
},
{
field: 'unitName',
title: '生產單位',
width: 200,
sort: true
},
{
field: 'fileName',
title: '檔案名稱',
sort: true
},
{
field: 'state',
title: '狀態',
width: 100,
sort: true
},
{
field: 'createDate',
title: '建立日期',
width: 150,
templet: '<div>{{ layui.util.toDateString(d.createDate, "yyyy/MM/dd") }}</div>'
},
{
field: 'updateDate',
title: '更新日期',
width: 150,
templet: '<div>{{ layui.util.toDateString(d.updateDate, "yyyy/MM/dd") }}</div>'
},
{
field: 'right',
width: 80,
title: '操作',
align: 'center',
fixed: 'right',
templet: function (d) {
return '<a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-read" lay-event="show">預覽</a>'
}
}]
];
var tablesop = hg.table.datatable('wipsop', 'SOP文件查詢維護', '/PCS/PCS030Query?itemNo=' + item, {}, tableCols, false, 'full-100');
hg.msghide("重新載入資料..");
tablesop;
});
function RuleStation(id) {
var tableCols_rule = [[
{
field: 'stationDesc',
width: 150,
title: '站別描述',
sort: true
},
{
field: 'sequence',
title: '站別順序',
width: 200,
sort: true
},
{
field: 'stationType',
title: '站別類型',
sort: true
}]
];
var tableruleStation = hg.table.datatable('ruleStation', '', '/BAS/GetRuleStationsByFlow?flowId='+id, {}, tableCols_rule, false, 'full-100');
tableruleStation;
}
</script>

252
AMESCoreStudio.Web/Views/PCS/PCS001R.cshtml

@ -12,11 +12,15 @@
.text-error {
color: #dc3545 !important;
}
.my-read-only-class {
cursor: not-allowed;
}
</style>
<div class="layui-card">
<div class="col-sm-12">
<form enctype="multipart/form-data" method="post" asp-action="PCS001" class="layui-form">
<form enctype="multipart/form-data" class="layui-form">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="layui-form-item">
<input type="checkbox" title="判斷前製程是否已經投入" @(Model.wipInfo.InputFlag == "Y" ? "checked" : "") />
@ -31,7 +35,7 @@
</div>
<label asp-for="wipInfo.WipSEQ" class="layui-form-label"></label>
<div class="layui-input-inline">
<select asp-for="wipInfo.WipSEQ" asp-items="@ViewBag.WipSEQTypeList" class=""></select>
<select disabled asp-for="wipInfo.WipSEQ" asp-items="@ViewBag.WipSEQTypeList" class=""></select>
</div>
<label asp-for="wipAtt.ItemNO" class="layui-form-label"></label>
<div class="layui-input-inline">
@ -50,15 +54,15 @@
<div class="layui-inline">
<label asp-for="wipInfo.WipType" class="layui-form-label"></label>
<div class="layui-input-inline">
<select asp-for="wipInfo.WipType" asp-items="@ViewBag.GetWipTypeList" class=""></select>
<select disabled asp-for="wipInfo.WipType" asp-items="@ViewBag.GetWipTypeList" class=""></select>
</div>
<label asp-for="wipInfo.ProductTypeID" class="layui-form-label"></label>
<div class="layui-input-inline">
<select asp-for="wipInfo.ProductTypeID" asp-items="@ViewBag.ProductTypesList"></select>
<select disabled asp-for="wipInfo.ProductTypeID" asp-items="@ViewBag.ProductTypesList"></select>
</div>
<label asp-for="wipInfo.Werks" class="layui-form-label"></label>
<div class="layui-input-inline">
<select asp-for="wipInfo.Werks" asp-items="@ViewBag.FactoryInfoList" style="color: #dc3545 !important;"></select>
<select disabled asp-for="wipInfo.Werks" asp-items="@ViewBag.FactoryInfoList" style="color: #dc3545 !important;"></select>
</div>
<label asp-for="wipInfo.WerksNO" class="layui-form-label"></label>
<div class="layui-input-inline">
@ -73,7 +77,7 @@
<div class="layui-inline">
<label asp-for="wipInfo.CustomerType" class="layui-form-label"></label>
<div class="layui-input-inline">
<select asp-for="wipInfo.CustomerType" asp-items="@ViewBag.GetCustomerTypeList" class=""></select>
<select disabled asp-for="wipInfo.CustomerType" asp-items="@ViewBag.GetCustomerTypeList" class=""></select>
</div>
<label asp-for="wipInfo.CustomerNO" class="layui-form-label"></label>
<div class="layui-input-inline">
@ -95,12 +99,12 @@
<div class="layui-inline">
<label asp-for="wipInfo.UnitNO" class="layui-form-label"></label>
<div class="layui-input-inline">
<select id="unit" lay-filter="unit" asp-for="wipInfo.UnitNO" asp-items="@ViewBag.FactoryUnitList" class=""></select>
<select disabled id="unit" lay-filter="unit" asp-for="wipInfo.UnitNO" asp-items="@ViewBag.FactoryUnitList" class=""></select>
</div>
<input id="unitNo" type="hidden" name="unitNo" value="0" />
<label asp-for="wipInfo.LineID" class="layui-form-label"></label>
<div class="layui-input-inline">
<select lay-filter="lind" asp-for="wipInfo.LineID" asp-items="@ViewBag.LineInfoList" class="">
<select disabled lay-filter="lind" asp-for="wipInfo.LineID" asp-items="@ViewBag.LineInfoList" class="">
</select>
<span asp-validation-for="wipInfo.LineID" class="layui-bg-red"></span>
</div>
@ -162,11 +166,11 @@
</div>
<label asp-for="wipAtt.WipProcess" class="layui-form-label"></label>
<div class="layui-input-inline">
<select asp-for="wipAtt.WipProcess" asp-items="@ViewBag.ProcessTypeList" class=""></select>
<select disabled asp-for="wipAtt.WipProcess" asp-items="@ViewBag.ProcessTypeList" class=""></select>
</div>
<label asp-for="wipAtt.Side" class="layui-form-label"></label>
<div class="layui-input-inline">
<select asp-for="wipAtt.Side" asp-items="@ViewBag.MFGTypeList" class=""></select>
<select disabled asp-for="wipAtt.Side" asp-items="@ViewBag.MFGTypeList" class=""></select>
</div>
</div>
@ -223,7 +227,7 @@
<div class="layui-inline">
<label asp-for="wipInfo.FlowRuleID" class="layui-form-label"></label>
<div class="layui-input-inline">
<select lay-filter="flow" asp-for="wipInfo.FlowRuleID" asp-items="@ViewBag.FlowRuleList" class=""></select>
<select disabled lay-filter="flow" asp-for="wipInfo.FlowRuleID" asp-items="@ViewBag.FlowRuleList" class=""></select>
</div>
<input id="flowId" type="hidden" name="flowId" value="" />
</div>
@ -413,7 +417,7 @@
<div class="layui-inline">
<label class="layui-form-label">SMD點膠</label>
<div class="layui-input-inline">
<select asp-items="@ViewBag.GetSMDTypeList" class=""></select>
<select disabled asp-items="@ViewBag.GetSMDTypeList" class=""></select>
</div>
</div>
</div>
@ -422,10 +426,10 @@
<div class="layui-inline">
<label class="layui-form-label">DIP</label>
<div class="layui-input-inline">
<select asp-items="@ViewBag.GetDIPTypeList" asp-for="wipBoard.DipSide" class=""></select>
<select disabled asp-items="@ViewBag.GetDIPTypeList" asp-for="wipBoard.DipSide" class=""></select>
</div>
<input type="checkbox" title="CARRIER" @(Model.wipBoard.DipCarrier == "Y" ? "checked" : "") />
<input type="checkbox" title="貼付膠帶" @(Model.wipBoard.DipTape == "Y" ? "checked" : "") />
<input type="checkbox" title="CARRIER" @if (Model.wipBoard != null) { @(Model.wipBoard.DipTape == "Y" ? "checked" : "")}/>
<input type="checkbox" title="貼付膠帶"@if (Model.wipBoard != null) { @(Model.wipBoard.DipTape == "Y" ? "checked" : "")} />
</div>
</div>
@ -433,7 +437,7 @@
<div class="layui-inline">
<label class="layui-form-label">燒錄</label>
<div class="layui-input-inline">
<input type="checkbox" title="是否燒入" @(Model.wipBoard.Burn == "Y" ? "checked" : "") />
<input type="checkbox" title="是否燒入"@if (Model.wipBoard != null) { @(Model.wipBoard.Burn == "Y" ? "checked" : "") }/>
</div>
<div class="layui-input-inline">
<label asp-for="wipBoard.BurnLocation" class="layui-form-label"></label>
@ -449,7 +453,7 @@
<div class="layui-inline">
<label class="layui-form-label">零件烘烤溫度</label>
<div class="layui-input-inline">
<select asp-items="@ViewBag.GetPartsBakeTypeList" asp-for="wipBoard.PartsBake" class=""></select>
<select disabled asp-items="@ViewBag.GetPartsBakeTypeList" asp-for="wipBoard.PartsBake" class=""></select>
</div>
</div>
<div class="layui-inline">
@ -464,13 +468,13 @@
<div class="layui-inline">
<label class="layui-form-label">PCB烘烤</label>
<div class="layui-input-inline">
<select asp-items="@ViewBag.GetPCBBakeTypeList" asp-for="wipBoard.PcbBake" class=""></select>
<select disabled asp-items="@ViewBag.GetPCBBakeTypeList" asp-for="wipBoard.PcbBake" class=""></select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label" asp-for="wipBoard.SolderPaste"></label>
<div class="layui-input-block">
<select asp-items="@ViewBag.GetSolderPasteList" asp-for="wipBoard.SolderPaste"></select>
<select disabled asp-items="@ViewBag.GetSolderPasteList" asp-for="wipBoard.SolderPaste"></select>
</div>
</div>
</div>
@ -479,7 +483,7 @@
<div class="layui-inline">
<label class="layui-form-label">PCB加工</label>
<div class="layui-input-inline">
<select asp-items="@ViewBag.GetPCBWorkingTypeList" class=""></select>
<select disabled asp-items="@ViewBag.GetPCBWorkingTypeList" class=""></select>
</div>
</div>
</div>
@ -898,92 +902,39 @@
</div>
@* SOP文件 sheet *@
<div class="layui-tab-item">
<p>檔案 <input type="file" name="formFile"></p>
@*@await Html.PartialAsync("PCS/_SOPPartial")*@
<partial name="PCS/_SOPPartial" />
@*<div class="page">
<div id="foo-view" data-url="@Url.Action(action: "SOP", controller: "PCS")"></div>
</div>*@
</div>
</div>
<div class="layui-tab-item" lay-filter="test2">
<table class="layui-hide" id="query" lay-filter="query"></table>
</div>
<span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span>
<div class="layui-form-item">
<div class="layui-input-block">
<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">
//$(document).ready(function () {
// (function () {
// var url = $("#foo-view").data("url");
// $("#foo-view").load(url);
// })();
//});
function getFlowRuleList(data)
{
$.ajax(
{
url: "@Url.Action("GetFlowRuleJson", "BAS")",
dataType: 'json',
data: { "unit_no": $("#unitNo").val()},
type: 'post',
success: function (result)
{
console.info(result.data);
$("#wipInfo_FlowRuleID").empty();//清空下拉框的值
$.each(result.data, function (index, item) {
$("#wipInfo_FlowRuleID").append($("<option>").text(item.text).val(item.value))
});
layui.form.render("select");//重新渲染 固定写法
},
error: function (result)
{
alert(result);
$(document).ready(function () {
if (("#unit").value == "B" || ("#unit").value == "P" || ("#unit").value == "T") {
$("#system").show();
$("#board").hide();
}
});
};
function getLineInfoList(data)
{
$.ajax(
{
url: "@Url.Action("GetUnitLineJson", "BAS")",
dataType: 'json',
data: { "unit_no": $("#unitNo").val()},
type: 'post',
success: function (result)
{
console.info(result.data);
$("#wipInfo_LineID").empty();//清空下拉框的值
$.each(result.data, function (index, item) {
$("#wipInfo_LineID").append($("<option>").text(item.text).val(item.value))
});
$("#wipInfo_LineID option:eq(1)").attr("selected", 'selected'); //默认选择第一个选项
layui.form.render("select");//重新渲染 固定写法
},
error: function (result)
{
alert(result);
else {
$("#system").hide();
$("#board").show();
}
$(":input").attr("disabled", "disabled");
});
};
layui.use(['form','laydate'], function () {
layui.use(['form', 'laydate', 'element','table'], function () {
var form = layui.form,
laydate = layui.laydate;
laydate = layui.laydate,
layer = layui.layer,
element = layui.element,
table = layui.table;
laydate.render({
elem: '#wipInfo_WipScheduleDate'
@ -999,74 +950,75 @@
, theme: 'grid'
});
form.on('select(unit)', function (data) {
$("#unitNo").val(data.value);
getFlowRuleList(data.value);
getLineInfoList(data.value);
if (data.value == "B" || data.value == "P" || data.value == "T") {
$("#system").show();
$("#board").hide();
}
else {
$("#system").hide();
$("#board").show();
}
});
form.on('select(flow)', function (data) {
$("#flowId").val(data.value);
});
form.on('select(lind)', function (data) {
$("#lindId").val(data.value);
element.on('tab(test2)', function (data) {
alert("TAB");
table && table.reload(data);
});
});
$(document).ready(function () {
var error = '@Html.ValidationMessage("error")';
if ($(error).text() != '') {
parent.hg.msg(error);
}
$('#GetBarCode').click(function () {
var wipNO = $('#wipInfo_WipNO').val();
var planQTY = $('#wipInfo_PlanQTY').val();
if (wipNO == '' || !wipNO) {
parent.hg.msg("請輸入工單號碼");
return;
}
if (planQTY == '' || !planQTY || planQTY == 0) {
parent.hg.msg("請確認計畫計畫數量");
return;
}
$("#wipBarcode_StartNO").val(wipNO + PrefixInteger(1, 4));
$("#wipBarcode_EndNO").val(wipNO + PrefixInteger(planQTY, 4));
});
function PrefixInteger(num, length) {
return (Array(length).join('0') + num).slice(-length);
};
$("#GetBarCode1").click( function (event) {
$.ajax({
url: '@Url.Action("TestFunc", "PCS")',
dataType:'json',
data: { "number" : $("#wipBarcode_StartNO").val() },
cache: false,
type: "POST",
success: function (data, textStatus, jqXHR) {
$("#wipBarcode_StartNO").val(data);
var tableCols = [[
{
field: 'itemNo',
width: 150,
title: '料號',
sort: true
},
error: function (jqXHR, textStatus, errorThrown) {
alert("Found error when using Ajax!!");
{
field: 'unitName',
title: '生產單位',
width: 200,
sort: true
},
{
field: 'fileName',
title: '檔案名稱',
sort: true
},
{
field: 'state',
title: '狀態',
width: 100,
sort: true
},
{
field: 'createDate',
title: '建立日期',
width: 150,
templet: '<div>{{ layui.util.toDateString(d.createDate, "yyyy/MM/dd") }}</div>'
},
{
field: 'updateDate',
title: '更新日期',
width: 150,
templet: '<div>{{ layui.util.toDateString(d.updateDate, "yyyy/MM/dd") }}</div>'
},
{
field: 'right',
width: 80,
title: '操作',
align: 'center',
fixed: 'right',
templet: function (d) {
return '<a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-read" lay-event="show">預覽</a>'
}
}]
];
//通过行tool编辑,lay-event="show"
function show(obj) {
layui.use('layer', function () {
var layer = layui.layer;
layer.open({
type: 2,
area: ['900px', '650px'],
fixed: false, //不固定
maxmin: true,
content: obj.data.filePath + obj.data.newName
});
});
};
});
//基本数据表格
var table = hg.table.datatable('query', 'SOP文件查詢維護', '/PCS/PCS030Query?itemNo='+"@Model.wipAtt.ItemNO", {}, tableCols, false, 'full-100');
</script>

181
AMESCoreStudio.WebApi/Controllers/AMES/WipSopLogController.cs

@ -0,0 +1,181 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.CommonTools.Result;
using AMESCoreStudio.WebApi.DTO.AMES;
// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
namespace AMESCoreStudio.WebApi.Controllers.AMES
{
[Route("api/[controller]")]
[ApiController]
public class WipSopLogController : ControllerBase
{
private readonly AMESContext _context;
/// <summary>
///
/// </summary>
/// <param name="context"></param>
public WipSopLogController(AMESContext context)
{
_context = context;
}
/// <summary>
/// 工單投產纪錄資料文件
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<ActionResult<IEnumerable<WipSopLog>>> GetWipSopLog()
{
IQueryable<WipSopLog> q = _context.WipSopLogs;
q = q.OrderBy(p => p.WipSopID);
var WipSopLog = await q.ToListAsync();
return WipSopLog;
}
[HttpGet("{id}")]
public async Task<ActionResult<WipSopLog>> GetWipSopLog(int id)
{
IQueryable<WipSopLog> q = _context.WipSopLogs;
var WipSopLog = await q.Where(p => p.WipID == id).FirstOrDefaultAsync();
if (WipSopLog == null)
{
return NotFound();
}
return WipSopLog;
}
/// <summary>
/// SOP文件查詢
/// </summary>
/// <param name="itemNo">料號</param>
/// <param name="unitNo">生產單位</param>
/// <param name="fileName">檔案名稱</param>
/// <param name="state">狀態</param>
/// <param name="date_str">建立日期起</param>
/// <param name="date_end">建立日期迄</param>
/// <returns></returns>
//[Route("[action]")]
//[HttpGet]
//public async Task<ResultModel<WipSopLogDto>> GetWipSopLogQuery(string itemNo = null, string unitNo = null
// , string fileName = null, string state = null, string date_str = null, string date_end = null)
//{
// IQueryable<WipSopLog> q = _context.WipSopLogs;
// if (!string.IsNullOrWhiteSpace(itemNo))
// q = q.Where(w => w.ItemNo == itemNo);
// if (!string.IsNullOrWhiteSpace(unitNo))
// q = q.Where(w => w.UnitNo == unitNo);
// if (!string.IsNullOrWhiteSpace(fileName))
// q = q.Where(w => w.FileName.Contains(fileName));
// if (!string.IsNullOrWhiteSpace(state))
// q = q.Where(w => w.State == state);
// DateTime dateValue;
// if (DateTime.TryParse(date_str, out dateValue))
// {
// q = q.Where(w => w.CreateDate >= DateTime.Parse(date_str));
// }
// if (DateTime.TryParse(date_end, out dateValue))
// {
// q = q.Where(w => w.CreateDate <= DateTime.Parse(date_end));
// }
// ResultModel<WipSopLogDto> result = new ResultModel<WipSopLogDto>();
// result.Data = await q.Select(s => new WipSopLogDto
// {
// WipSopLogID = s.WipSopLogID,
// ItemNo = s.ItemNo,
// UnitName = s.FactoryUnit.UnitName,
// FileName = s.FileName,
// FilePath = s.FilePath,
// State = s.State == "Y" ? "使用中" : "停用",
// NewName = s.NewName,
// CreateDate = s.CreateDate,
// CreateUserID = s.CreateUserID,
// UpdateDate = s.UpdateDate,
// UpdateUserID = s.UpdateUserID
// }).ToListAsync();
// return result;
//}
[HttpPost]
public async Task<ResultModel<WipSopLog>> PostWipSopLog([FromBody] WipSopLog wipSopLog)
{
ResultModel<WipSopLog> result = new ResultModel<WipSopLog>();
Helper helper = new Helper(_context);
wipSopLog.WipID = helper.GetIDKeyNoPost("WIP_ID").Result;
wipSopLog.State = "Y";
//wipLog.WipSopLogID = wipLog.WipID == 0 ? helper.GetIDKeyNoPost("WIP_ID").Result : wipLog.WipID;
_context.WipSopLogs.Add(wipSopLog);
try
{
await _context.SaveChangesAsync();
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.Message;
}
return result;
}
//// PUT api/<WipSopLogController>/5
//[HttpPut("{id}/{state}")]
//public async Task<ResultModel<WipSopLog>> PutWipSopLog(int id, string state)
//{
// ResultModel<WipSopLog> result = new ResultModel<WipSopLog>();
// var WipSopLog = new WipSopLog {
// WipSopLogID = id,
// State = state,
// UpdateUserID = 1,
// UpdateDate = System.DateTime.Now
// };
// _context.Attach(WipSopLog);
// // 指定更新某個欄位
// _context.Entry(WipSopLog).Property(p => p.State).IsModified = true;
// _context.Entry(WipSopLog).Property(p => p.UpdateUserID).IsModified = true;
// _context.Entry(WipSopLog).Property(p => p.UpdateDate).IsModified = true;
// try
// {
// await _context.SaveChangesAsync();
// result.Success = true;
// result.Msg = "OK";
// }
// catch (Exception ex)
// {
// result.Success = false;
// result.Msg = ex.Message;
// }
// return result;
//}
// DELETE api/<WipSopLogController>/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}

2
AMESCoreStudio.WebApi/Models/AMES/BarcodeItem.cs

@ -109,7 +109,7 @@ namespace AMESCoreStudio.WebApi.Models.AMES
/// <summary>
/// 組件资料
/// </summary>
public virtual Item I { get; set; }
public virtual Items I { get; set; }
/// <summary>
/// 站別资料

45
AMESCoreStudio.WebApi/Models/AMES/Item.cs

@ -1,45 +0,0 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Runtime.Serialization;
namespace AMESCoreStudio.WebApi.Models.AMES
{
/// <summary>
/// 組件資料檔
/// </summary>
[Table("ITEMS", Schema = "JHAMES")]
[DataContract]
public class Item
{
/// <summary>
/// 组件代碼
/// </summary>
[Column("ITEM_NO")]
[DataMember]
[Key]
public string ItemNo { get; set; }
/// <summary>
/// 组件名稱
/// </summary>
[Column("ITEM_NAME")]
[DataMember]
public string ItemName { get; set; }
/// <summary>
/// 組件類別
/// </summary>
[Column("ITEM_TYPE")]
[DataMember]
public string ItemType { get; set; }
/// <summary>
/// 組件區間管控
/// </summary>
[Column("SN_INTERVAL")]
[DataMember]
public string SnInerval { get; set; }
}
}

15
AMESCoreStudio.WebApi/Models/AMES/WipBoard.cs

@ -88,6 +88,7 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[StringLength(20)]
[DataMember]
[Display(Name = "燒錄位置")]
public string BurnLocation { get; set; }
/// <summary>
@ -96,6 +97,7 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[Column("PARTS_BAKE", TypeName = "NUMBER")]
[DataMember]
[Display(Name = "零件烘烤溫度")]
[Required(ErrorMessage = "{0},不能空白")]
public decimal PartsBake { get; set; }
/// <summary>
@ -104,6 +106,7 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[Column("PARTS_BAKE_TIME", TypeName = "NUMBER")]
[DataMember]
[Display(Name = "零件烘烤時間")]
[Required(ErrorMessage = "{0},不能空白")]
public decimal PartsBakeTime { get; set; }
/// <summary>
@ -112,15 +115,16 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[Column("PCB_BAKE", TypeName = "NUMBER")]
[DataMember]
[Display(Name = "PCB烘烤")]
[Required(ErrorMessage = "{0},不能空白")]
public decimal PcbBake { get; set; }
/// <summary>
/// 錫膏
/// </summary>
[Column("SOLDER_PASTE", TypeName = "NUMBER")]
[Column("SOLDER_PASTE")]
[DataMember]
[Display(Name = "錫膏")]
public decimal SolderPaste { get; set; }
public int SolderPaste { get; set; }
/// <summary>
/// 燒機比率
@ -128,26 +132,27 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[Column("BI_RATIO", TypeName = "NUMBER")]
[DataMember]
[Display(Name = "燒機比率")]
[Required(ErrorMessage = "{0},不能空白")]
public decimal BiRatio { get; set; }
/// <summary>
/// 燒機溫度
/// </summary>
[Required]
[Column("BI_TEMPERATURE")]
[StringLength(20)]
[DataMember]
[Display(Name = "燒機溫度")]
[Required(ErrorMessage = "{0},不能空白")]
public string BiTemperature { get; set; }
/// <summary>
/// 燒機時間
/// </summary>
[Required]
[Column("BI_TIME")]
[StringLength(20)]
[DataMember]
[Display(Name = "燒機時間")]
[Required(ErrorMessage = "{0},不能空白")]
public string BiTime { get; set; }
/// <summary>
@ -161,11 +166,11 @@ namespace AMESCoreStudio.WebApi.Models.AMES
/// <summary>
/// Check Sum
/// </summary>
[Required]
[Column("CHECKSUM")]
[StringLength(20)]
[DataMember]
[Display(Name = "Check Sum")]
[Required(ErrorMessage = "{0},不能空白")]
public string Checksum { get; set; }
/// <summary>

84
AMESCoreStudio.WebApi/Models/AMES/WipSopLog.cs

@ -0,0 +1,84 @@
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>
/// 工單對應SOP文件紀錄
/// </summary>
[Table("WIP_SOP_LOG", Schema = "JHAMES")]
[DataContract]
public partial class WipSopLog
{
/// <summary>
/// WIP_ID
/// </summary>
[Key]
[Column("WIP_ID", Order = 0)]
[DataMember]
public int WipID { get; set; }
/// <summary>
/// WIP_SOP_ID
/// </summary>
[Key]
[Column("WIP_SOP_ID", Order = 1)]
[DataMember]
public int WipSopID { get; set; }
/// <summary>
/// 狀態
/// </summary>
[Column("STATE")]
[DataMember]
public string State { get; set; }
/// <summary>
/// 建立UserID
/// </summary>
[Column("CREATE_USERID")]
[Required]
[DataMember]
public int CreateUserID { get; set; } = 0;
/// <summary>
/// 建立日期
/// </summary>
[Required]
[Column("CREATE_DATE")]
[DataMember]
public DateTime CreateDate { get; set; } = System.DateTime.Now;
/// <summary>
/// 更新UserID
/// </summary>
[Column("UPDATE_USERID")]
[DataMember]
public int UpdateUserID { get; set; }
/// <summary>
/// 更新日期
/// </summary>
[Column("UPDATE_DATE")]
[DataMember]
public DateTime? UpdateDate { get; set; }
/// <summary>
/// 工單資料
/// </summary>
[ForeignKey("WipID")]
public virtual WipInfo GetWipInfo { get; set; }
/// <summary>
/// SOP資料
/// </summary>
[ForeignKey("WipSopID")]
public virtual WipSop GetWipSop { get; set; }
}
}

12
AMESCoreStudio.WebApi/Models/AMES/WipSystem.cs

@ -48,22 +48,23 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[Column("BI_RATIO")]
[DataMember]
[Display(Name = "燒機比率")]
[Required(ErrorMessage = "{0},不能空白")]
public decimal BiRatio { get; set; }
/// <summary>
/// 燒機溫度
/// </summary>
[Required]
[Column("BI_TEMPERATURE")]
[StringLength(20)]
[DataMember]
[Display(Name = "燒機溫度")]
[Required(ErrorMessage = "{0},不能空白")]
public string BiTemperature { get; set; }
/// <summary>
/// 燒機時間
/// </summary>
[Required]
[Required(ErrorMessage = "{0},不能空白")]
[Column("BI_TIME")]
[StringLength(20)]
[DataMember]
@ -85,12 +86,13 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[DataMember]
[Display(Name = "BIOS版本")]
[Column("BIOS_VER", TypeName = "NUMBER")]
[Required(ErrorMessage = "{0},不能空白")]
public decimal BiosVer { get; set; }
/// <summary>
/// Check Sum
/// </summary>
[Required]
[Required(ErrorMessage = "{0},不能空白")]
[Column("CHECKSUM")]
[StringLength(20)]
[DataMember]
@ -100,7 +102,7 @@ namespace AMESCoreStudio.WebApi.Models.AMES
/// <summary>
/// CPU頻率
/// </summary>
[Required]
[Required(ErrorMessage = "{0},不能空白")]
[Column("CPU")]
[StringLength(20)]
[DataMember]
@ -110,7 +112,7 @@ namespace AMESCoreStudio.WebApi.Models.AMES
/// <summary>
/// RAM
/// </summary>
[Required]
[Required(ErrorMessage = "{0},不能空白")]
[Column("RAM")]
[StringLength(20)]
[DataMember]

28
AMESCoreStudio.WebApi/Models/AMESContext.cs

@ -85,17 +85,18 @@ namespace AMESCoreStudio.WebApi
modelBuilder.Entity<WipBarcode>().HasKey(c => new { c.WipNO, c.StartNO, c.EndNO });
modelBuilder.Entity<WipLog>().HasKey(c => new { c.WipID, c.CreateDate});
modelBuilder.Entity<PartMap>().HasKey(c => new { c.CorpSN });
modelBuilder.Entity<WipSopLog>().HasKey(c => new { c.WipID, c.WipSopID });
modelBuilder.Entity<BarcodeItem>().HasOne(r => r.B).WithMany().HasForeignKey(r => r.BarcodeID).IsRequired();
modelBuilder.Entity<BarcodeItem>().HasOne(r => r.I).WithMany().HasForeignKey(r => r.ItemNo).IsRequired();
modelBuilder.Entity<BarcodeItem>().HasOne(r => r.S).WithMany().HasForeignKey(r => r.RuleStationID).IsRequired();
modelBuilder.Entity<WorkClass>().HasOne(r => r.Group).WithMany().HasForeignKey(r => r.GroupID).IsRequired();
modelBuilder.Entity<ListObj>().HasKey(c => new { c.value, c.name });
modelBuilder.Entity<CycleTime>().HasKey(c => new { c.ItemNo, c.LineID });
modelBuilder.Entity<CycleTime>().HasOne(r => r.Unit).WithMany().HasForeignKey(r => r.SectionNo).IsRequired();
modelBuilder.Entity<CycleTime>().HasOne(r => r.Line).WithMany().HasForeignKey(r => r.LineID).IsRequired();
modelBuilder.Entity<AMESCoreStudio.WebApi.Models.BAS.ClassInfo>().HasOne(r => r.Unit).WithMany().HasForeignKey(r => r.UnitNo).IsRequired();
modelBuilder.Entity<AMESCoreStudio.WebApi.Models.BAS.LineInfo>().HasOne(r => r.Unit).WithMany().HasForeignKey(r => r.UnitNo).IsRequired();
modelBuilder.Entity<AMESCoreStudio.WebApi.Models.BAS.LineInfo>().HasOne(r => r.Dept).WithMany().HasForeignKey(r => r.DeptID).IsRequired();
@ -258,21 +259,17 @@ namespace AMESCoreStudio.WebApi
/// </summary>
public DbSet<WipLog> WipLogs { get; set; }
/// <summary>
///1108因無法執行SHANI補上
/// 工單投產纪錄資料文件
/// </summary>
public DbSet<NGGroup> NGGroups { get; set; }
/// <summary>
///1108因無法執行SHANI補上
/// 工單投產纪錄資料文件
/// </summary>
public DbSet<NGClass> NGClasses { get; set; }
/// <summary>
///1108因無法執行SHANI補上
/// </summary>
public DbSet<NGReason> NGReasons { get; set; }
/// <summary>
/// 維修群組資料
/// </summary>
@ -296,7 +293,7 @@ namespace AMESCoreStudio.WebApi
///// <summary>
///// 不良現象原因代碼資料
///// </summary>
//public DbSet<NGReason> NGReasons { get; set; }
public DbSet<NGReason> NGReasons { get; set; }
/// <summary>
/// 問題類別資料
@ -361,6 +358,10 @@ namespace AMESCoreStudio.WebApi
public virtual DbSet<BarcodeChange> BarcodeChanges { get; set; }
/// <summary>
/// 工單對應SOP文件log
/// </summary>
public virtual DbSet<WipSopLog> WipSopLogs { get; set; }
///條碼資料
/// </summary>
public DbSet<BarcodeInfo> BarcodeInfoes { get; set; }
@ -370,11 +371,6 @@ namespace AMESCoreStudio.WebApi
/// </summary>
public DbSet<BarcodeItem> BarcodeItems { get; set; }
///// <summary>
/////組件資料
///// </summary>
//public DbSet<Item> Items { get; set; }
/// <summary>
///工時群組資料
/// </summary>
@ -415,10 +411,6 @@ namespace AMESCoreStudio.WebApi
///無效工時在線收集資料
/// </summary>
public DbSet<ExceptionWorktimeOline> ExceptionWorktimeOlines { get; set; }
}
}

Loading…
Cancel
Save