Browse Source

1. 工單查詢 修改與刪除加入判斷

2. 修正過站判斷
PTD
ray 3 years ago
parent
commit
32a479f103
  1. 79
      AMESCoreStudio.Web/Controllers/PCSController.cs
  2. 27
      AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs
  3. 5
      AMESCoreStudio.Web/ViewModels/PCS/PCS021ViewModel.cs
  4. 72
      AMESCoreStudio.Web/Views/PCS/PCS005.cshtml
  5. 49
      AMESCoreStudio.Web/Views/PCS/PCS021.cshtml
  6. 15
      AMESCoreStudio.WebApi/Controllers/AMES/BarcodeStationController.cs
  7. 118
      AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs
  8. 22
      AMESCoreStudio.WebApi/Controllers/BAS/RulesController.cs
  9. 96
      AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs

79
AMESCoreStudio.Web/Controllers/PCSController.cs

@ -1092,6 +1092,34 @@ namespace AMESCoreStudio.Web.Controllers
return Json(new { data = result.MaterialFlowRemark }); return Json(new { data = result.MaterialFlowRemark });
} }
/// <summary>
/// 目前已刷數量
/// </summary>
/// <param name="wipNo">工單號碼</param>
/// <param name="unitNo">生產單位</param>
/// <param name="ststionID">作業站</param>
/// <returns></returns>
[HttpPost]
public async Task<JsonResult> getBarcodeStationByInputQty(string wipNo, string unitNo, int ststionID)
{
var q = await _pcsApi.GetWipInfoByWipNO(wipNo);
var q1 = q.Where(w => w.UnitNO == unitNo).FirstOrDefault();
if (q1 != null)
{
// 工單流程ID 取站別
var ruleStations = await GetRuleStationByFlowRuleID(q1.FlowRuleID);
var rulestationID = ruleStations.Where(w => w.StationID == ststionID).FirstOrDefault().RuleStationID;
// 工單已刷數量
int InputQTY = await _pcsApi.GetBarcodeStationByInputQty(q1.WipID, rulestationID);
//将数据Json化并传到前台视图
return Json(new { data = InputQTY });
}
return Json(new { data = 0 });
}
#endregion #endregion
[ResponseCache(Duration = 0)] [ResponseCache(Duration = 0)]
@ -1587,11 +1615,15 @@ namespace AMESCoreStudio.Web.Controllers
var q = await _pcsApi.GetWipInfo(id); var q = await _pcsApi.GetWipInfo(id);
if (q.Count != 0) if (q.Count != 0)
{ {
// 判斷工單號碼是否已經投入
if (await _pcsApi.GetWipInfoCheckStart(q.FirstOrDefault().WipNO) == "Y")
{
var _msg = "工單號碼【" + q.FirstOrDefault().WipNO + "】,工單已開始投入,不可修改!";
return RedirectToAction("Refresh", "Home", new { msg = _msg });
}
// 判斷工單號碼是否已經開線 // 判斷工單號碼是否已經開線
var resultLineInfo = await _basApi.GetLineInfoes(); if (await _pcsApi.GetWipInfoCheckStartLine(q.FirstOrDefault().WipNO) == "Y")
var resultWipNo = await _pcsApi.GetWipInfoByWipNO(q.FirstOrDefault().WipNO);
var WipIDs = resultWipNo.Select(s => s.WipID);
if (resultLineInfo.Where(w => WipIDs.Contains(w.WipNo)).Any())
{ {
var _msg = "工單號碼【" + q.FirstOrDefault().WipNO + "】,工單已開線,不可修改!"; var _msg = "工單號碼【" + q.FirstOrDefault().WipNO + "】,工單已開線,不可修改!";
return RedirectToAction("Refresh", "Home", new { msg = _msg }); return RedirectToAction("Refresh", "Home", new { msg = _msg });
@ -2006,8 +2038,11 @@ namespace AMESCoreStudio.Web.Controllers
/// <returns></returns> /// <returns></returns>
public string CheckMACData(WipDataViewModel model) public string CheckMACData(WipDataViewModel model)
{ {
string StartNO = model.wipMAC.StartNO.ToString(); if (model.wipMAC == null)
string EndNO = model.wipMAC.EndNO.ToString(); return "";
string StartNO = model.wipMAC.StartNO ?? "";
string EndNO = model.wipMAC.EndNO ?? "";
// 資料為空 // 資料為空
if (string.IsNullOrWhiteSpace(StartNO) && string.IsNullOrWhiteSpace(EndNO)) if (string.IsNullOrWhiteSpace(StartNO) && string.IsNullOrWhiteSpace(EndNO))
return ""; return "";
@ -2287,6 +2322,31 @@ namespace AMESCoreStudio.Web.Controllers
} }
return Json(new Table() { count = 0, data = null }); return Json(new Table() { count = 0, data = null });
} }
/// <summary>
/// PCS005 刪除
/// </summary>
/// <param name="id">工單號碼</param>
/// <returns></returns>
public async Task<IActionResult> PCS005DAsync(string id)
{
// 判斷工單號碼是否已經投入
if (await _pcsApi.GetWipInfoCheckStart(id) == "Y")
{
var _msg = "工單號碼【" + id + "】,工單已開始投入,不可刪除!";
return Json(new Result() { success = false, msg = _msg });
}
// 判斷工單號碼是否已經開線
if (await _pcsApi.GetWipInfoCheckStartLine(id) == "Y")
{
var _msg = "工單號碼【" + id + "】,工單已開線,不可刪除!";
return Json(new Result() { success = false, msg = _msg });
}
var result = await _pcsApi.DeleteWipinfo(id);
return Json(new Result() { success = true, msg = "刪除成功" });
}
#endregion #endregion
#region PCS006 工單開線收線作業 #region PCS006 工單開線收線作業
@ -3193,6 +3253,7 @@ namespace AMESCoreStudio.Web.Controllers
public async Task<IActionResult> PCS021_GetWip(PCS021ViewModel model) public async Task<IActionResult> PCS021_GetWip(PCS021ViewModel model)
{ {
await GetFactoryUnit(); await GetFactoryUnit();
await GetItemsList();
//await GetLineInfo(); //await GetLineInfo();
if (string.IsNullOrWhiteSpace(model.WipNO)) if (string.IsNullOrWhiteSpace(model.WipNO))
@ -3230,6 +3291,7 @@ namespace AMESCoreStudio.Web.Controllers
model.UnitNO = q.FirstOrDefault().UnitNO; model.UnitNO = q.FirstOrDefault().UnitNO;
model.FlowRuleID = q.FirstOrDefault().FlowRuleID; model.FlowRuleID = q.FirstOrDefault().FlowRuleID;
model.ItemNO = (await _pcsApi.GetWipAtt(model.WipNO)).ItemNO; model.ItemNO = (await _pcsApi.GetWipAtt(model.WipNO)).ItemNO;
// 判斷工單狀態 // 判斷工單狀態
var BarCodeWip = await _pcsApi.CheckBarCodeWip(model.WipNO, model.UnitNO, model.LineID, model.FlowRuleID); var BarCodeWip = await _pcsApi.CheckBarCodeWip(model.WipNO, model.UnitNO, model.LineID, model.FlowRuleID);
if (!BarCodeWip.Success) if (!BarCodeWip.Success)
@ -3249,6 +3311,9 @@ namespace AMESCoreStudio.Web.Controllers
model.RuleStation = ruleStations.FirstOrDefault().RuleStationID; model.RuleStation = ruleStations.FirstOrDefault().RuleStationID;
} }
// 工單已刷數量
model.InputQTY = await _pcsApi.GetBarcodeStationByInputQty(model.WipID, model.RuleStation);
// 工單KeyParts // 工單KeyParts
model.WipKps = await _pcsApi.GetWipKpByWipNo(model.WipNO); model.WipKps = await _pcsApi.GetWipKpByWipNo(model.WipNO);
model.WipKps = model.WipKps.Where(w => w.UnitNo == model.UnitNO).OrderBy(o => o.KpSeq).ToList(); model.WipKps = model.WipKps.Where(w => w.UnitNo == model.UnitNO).OrderBy(o => o.KpSeq).ToList();
@ -3447,8 +3512,6 @@ namespace AMESCoreStudio.Web.Controllers
} }
#region 判斷下一站為完工站 #region 判斷下一站為完工站
var NextStopCloseStation = await _pcsApi.CheckNextStopCloseStation(model.WipNO, model.UnitNO, model.Station); var NextStopCloseStation = await _pcsApi.CheckNextStopCloseStation(model.WipNO, model.UnitNO, model.Station);
#endregion #endregion

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

@ -114,11 +114,23 @@ namespace AMESCoreStudio.Web
/// 查詢工單基本資料-WipNO /// 查詢工單基本資料-WipNO
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
//[WebApiClient.Attributes.HttpGet("api/WipInfos/{id}")]
//ITask<List<WipInfo>> GetWipInfoByUnitNO(string id);
[WebApiClient.Attributes.HttpGet("api/WipInfos/WipInfoByWipNo/{wipno}")] [WebApiClient.Attributes.HttpGet("api/WipInfos/WipInfoByWipNo/{wipno}")]
ITask<List<WipInfo>> GetWipInfoByWipNO(string wipno); ITask<List<WipInfo>> GetWipInfoByWipNO(string wipno);
/// <summary>
/// 查詢工單是否已投入
/// </summary>
/// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/WipInfos/CheckStart/{wipno}")]
ITask<string> GetWipInfoCheckStart(string wipno);
/// <summary>
/// 查詢工單是否已開線
/// </summary>
/// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/WipInfos/CheckStartLine/{wipno}")]
ITask<string> GetWipInfoCheckStartLine(string wipno);
/// <summary> /// <summary>
/// 更新工單資料 /// 更新工單資料
/// </summary> /// </summary>
@ -126,6 +138,14 @@ namespace AMESCoreStudio.Web
/// <returns></returns> /// <returns></returns>
[WebApiClient.Attributes.HttpPut("api/WipInfos")] [WebApiClient.Attributes.HttpPut("api/WipInfos")]
ITask<ResultModel<WipInfo>> PutWipInfo([FromBody, RawJsonContent] string model); ITask<ResultModel<WipInfo>> PutWipInfo([FromBody, RawJsonContent] string model);
/// <summary>
/// 刪除工單相關資料
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[WebApiClient.Attributes.HttpDelete("api/WipInfos/{id}")]
ITask<ResultModel<WipInfo>> DeleteWipinfo(string id);
#endregion #endregion
#region WinAtt 工單基本資料-屬性 PCS001 #region WinAtt 工單基本資料-屬性 PCS001
@ -285,6 +305,9 @@ namespace AMESCoreStudio.Web
[WebApiClient.Attributes.HttpGet("api/BarcodeStation/GetBarcodeStationByKey")] [WebApiClient.Attributes.HttpGet("api/BarcodeStation/GetBarcodeStationByKey")]
ITask<BarcodeStation> GetBarcodeStationByKey(string id); ITask<BarcodeStation> GetBarcodeStationByKey(string id);
[WebApiClient.Attributes.HttpGet("api/BarcodeStation/InputQty/{wipID}/{ruleStationID}")]
ITask<int> GetBarcodeStationByInputQty(int wipID, int ruleStationID);
[WebApiClient.Attributes.HttpPost("api/BarcodeStation")] [WebApiClient.Attributes.HttpPost("api/BarcodeStation")]
ITask<ResultModel<BarcodeStation>> PostBarcodeStation([FromBody, RawJsonContent] string model); ITask<ResultModel<BarcodeStation>> PostBarcodeStation([FromBody, RawJsonContent] string model);

5
AMESCoreStudio.Web/ViewModels/PCS/PCS021ViewModel.cs

@ -30,6 +30,11 @@ namespace AMESCoreStudio.Web.ViewModels.PCS
/// </summary> /// </summary>
public int PlanQTY { get; set; } = 0; public int PlanQTY { get; set; } = 0;
/// <summary>
/// 已刷數
/// </summary>
public int InputQTY { get; set; } = 0;
/// <summary> /// <summary>
/// 線別 /// 線別
/// </summary> /// </summary>

72
AMESCoreStudio.Web/Views/PCS/PCS005.cshtml

@ -2,7 +2,14 @@
ViewData["Title"] = "工單資料查詢"; ViewData["Title"] = "工單資料查詢";
Layout = "~/Views/Shared/_AMESLayout.cshtml"; Layout = "~/Views/Shared/_AMESLayout.cshtml";
} }
<style>
/* .layui-table-col-special .layui-table-cell {
height:auto;
overflow:visible;
text-overflow:inherit;
white-space: normal;
}*/
</style>
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-header"> <div class="layui-card-header">
<div class="layui-form"> <div class="layui-form">
@ -51,15 +58,28 @@
</div> </div>
</div> </div>
</div> </div>
<table class="layui-hide" id="Query" lay-filter="Query"></table> <table class="layui-hide" id="query" lay-filter="query"></table>
</div> </div>
</div> </div>
@section Scripts{ @section Scripts{
<script type="text/javascript"> <script type="text/javascript">
layui.use('table', function () {
var table = layui.table;
table.on('tool(query)', function (obj) {
if (obj.event == 'detail') {
if (obj.data.wipID) {
hg.open('檢視工單資料', '/PCS/PCS001R/' + obj.data.wipID, '', '', true);
}
}
});
});
//监听表单提交事件 //监听表单提交事件
hg.form.onsubmit('querysubmit', function (data) { hg.form.onsubmit('querysubmit', function (data) {
table && table.reload(data); table && table.reload(data);
}); });
var tableCols = [[ var tableCols = [[
{ {
@ -121,12 +141,13 @@
}, },
{ {
field: 'right', field: 'right',
width: 140, width: 200,
title: '操作', title: '操作',
fixed: 'right', fixed: 'right',
templet: function (d) { templet: function (d) {
return '<a class="layui-btn layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">修改</a><a class="layui-btn layui-btn-warm layui-icon layui-icon-list layui-btn-xs" lay-event="detail">檢視</a>' return '<a class="layui-btn layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">修改</a>\
/* < a class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay - event="edit" > 修改</a > '*/ <a class="layui-btn layui-btn-warm layui-icon layui-icon-list layui-btn-xs" lay-event="detail">檢視</a>\
<a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" lay-event="del">删除</a>'
} }
} }
] ]
@ -147,6 +168,29 @@
} }
} }
function del(obj) {
hg.confirm("确定要删除工單號碼【" + obj.data.wipNO + "】嗎?", function () {
$.ajax({
url: '/PCS/PCS005D',
data: { id: obj.data.wipNO },
type: 'POST',
success: function (data) {
if (data.success) {
hg.msghide("删除成功!");
var qs = $('button[lay-filter="querysubmit"]');
qs.click();
}
else {
hg.msg(data.msg);
}
},
error: function () {
hg.msg("网络请求失败!");
}
});
});
}
var toolbar = [{ var toolbar = [{
text: '新增', text: '新增',
layuiicon: '&#xe608;', layuiicon: '&#xe608;',
@ -157,6 +201,22 @@
} }
]; ];
//基本数据表格 //基本数据表格
var table = hg.table.datatable('Query', '工單資料查詢', '/PCS/PCS005Query', {}, tableCols, toolbar, true, 'full-100', ['filter', 'print', 'exports']); var table = hg.table.datatable('query', '工單資料查詢', '/PCS/PCS005Query', {}, tableCols, toolbar, true, 'full-100', ['filter', 'print', 'exports']);
$(document).off('mousedown', '.layui-table-grid-down').
on('mousedown', '.layui-table-grid-down', function (event) {
table._tableTrCurrr = $(this).closest('td');
});
$(document).off('click', '.layui-table-tips-main [lay-event]').
on('click', '.layui-table-tips-main [lay-event]', function (event) {
var elem = $(this);
var tableTrCurrr = table._tableTrCurrr;
if (!tableTrCurrr) {
return;
}
var layerIndex = elem.closest('.layui-table-tips').attr('times');
layer.close(layerIndex);
table._tableTrCurrr.find('[lay-event="' + elem.attr('lay-event') + '"]').children("i").first().click();
});
</script> </script>
} }

49
AMESCoreStudio.Web/Views/PCS/PCS021.cshtml

@ -57,7 +57,7 @@
<div asp-validation-summary="ModelOnly" class="text-danger"></div> <div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="layui-card-body"> <div class="layui-card-body">
<div class="layui-row"> <div class="layui-row">
<div class="layui-col-md4 element"> <div class="layui-col-md5 element">
<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
<ul class="layui-tab-title"> <ul class="layui-tab-title">
<li class="layui-this">過站資料</li> <li class="layui-this">過站資料</li>
@ -113,7 +113,7 @@
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label" style="width:100px;text-align:left; padding: 9px 10px">已刷數/工單數:</label> <label class="layui-form-label" style="width:100px;text-align:left; padding: 9px 10px">已刷數/工單數:</label>
<label class="layui-form-label" style="width:150px;text-align:left">1/100</label> <label class="layui-form-label" style="width:150px;text-align:left"><span id="InputQty">@Model.InputQTY</span>/@Model.PlanQTY</label>
</div> </div>
</div> </div>
<fieldset class="layui-elem-field layui-field-title"> <fieldset class="layui-elem-field layui-field-title">
@ -123,7 +123,7 @@
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">刷讀條碼:</label> <label class="layui-form-label">刷讀條碼:</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input type="text" onkeydown="input(event);" id="inpputtxt" asp-for="Input" class="layui-input" autocomplete="off" /> <input type="text" onkeydown="input(event);" id="inputtxt" asp-for="Input" class="layui-input" autocomplete="off" />
</div> </div>
</div> </div>
@*<span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span>*@ @*<span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span>*@
@ -217,7 +217,7 @@
<input type="text" asp-for="@index.KpName" name="WipKps[@j].KpName" style="width:100px" readonly="readonly" /> <input type="text" asp-for="@index.KpName" name="WipKps[@j].KpName" style="width:100px" readonly="readonly" />
</td> </td>
<td> <td>
<input type="text" asp-for="@index.KpNo" name="WipKps[@j].KpNo" style="width:30px" readonly="readonly" /> <select asp-for="@index.KpNo" name="WipKps[@j].KpNo" asp-items="@ViewBag.ItemsList" class=""></select>
</td> </td>
<td> <td>
<input type="text" asp-for="@index.KpSeq" name="WipKps[@j].KpSeq" style="width:30px" readonly="readonly" /> <input type="text" asp-for="@index.KpSeq" name="WipKps[@j].KpSeq" style="width:30px" readonly="readonly" />
@ -278,7 +278,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="layui-col-md8 element" style="height:100%"> <div class="layui-col-md7 element" style="height:100%">
<iframe frameborder="0" style="height:100%;width:100%" src=@(Model.SopPath)></iframe> <iframe frameborder="0" style="height:100%;width:100%" src=@(Model.SopPath)></iframe>
</div> </div>
</div> </div>
@ -302,7 +302,6 @@
jQuery(function ($) { jQuery(function ($) {
$('.element').responsiveEqualHeightGrid(); $('.element').responsiveEqualHeightGrid();
getUnitLineList($("#unit").val()); getUnitLineList($("#unit").val());
//getRuleStationList($("#unit").val());
}); });
function getUnitLineList(data) function getUnitLineList(data)
@ -330,30 +329,6 @@
}); });
}; };
@*function getRuleStationList(data)
{
$.ajax(
{
url: "@Url.Action("GetRuleStationByTypeJson", "PCS")",
dataType: 'json',
data: { "unit_no": $("#unit").val()},
type: 'post',
success: function (result)
{
$("#stations").empty();//清空下拉框的值
$.each(result.data, function (index, item) {
$("#stations").append($("<option>").text(item.text).val(item.value))
});
layui.form.render("select");//重新渲染 固定写法
},
error: function (result)
{
alert(result);
}
});
};*@
function SearchNo(e) { function SearchNo(e) {
if (e.keyCode == 13) { if (e.keyCode == 13) {
$("#GetWipData").click(); $("#GetWipData").click();
@ -372,7 +347,7 @@
type: "POST", type: "POST",
data: data, data: data,
success: function (result) { success: function (result) {
$("#inpputtxt").val(''); $("#inputtxt").val('');
if (!result.success) { if (!result.success) {
parent.hg.msg(result.msg); parent.hg.msg(result.msg);
} }
@ -383,6 +358,7 @@
} }
else { else {
$("#tblCustomersBody").empty(); $("#tblCustomersBody").empty();
InputQty();
} }
} }
} }
@ -407,6 +383,17 @@
}); });
function InputQty() {
$.ajax({
url: "@Url.Action("getBarcodeStationByInputQty", "PCS")",
type: "POST",
data: { "wipNo": $("#WipNO").val(), "unitNo": $("#unit").val(), "ststionID": $("#stations").val()},
success: function (result) {
$("#InputQty").text(result.data);
}
});
};
// 新增trRow // 新增trRow
function TableAddRow(e) { function TableAddRow(e) {
//var rowCount = $('.data-contact-person').length + 0; //var rowCount = $('.data-contact-person').length + 0;

15
AMESCoreStudio.WebApi/Controllers/AMES/BarcodeStationController.cs

@ -145,6 +145,21 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return result; return result;
} }
/// <summary>
/// 查詢 已過站數量
/// </summary>
/// <param name="wipID">工單ID</param>
/// <param name="ruleStationID">站別ID</param>
/// <returns></returns>
[HttpGet("InputQty/{wipID}/{ruleStationID}")]
public async Task<ActionResult<int>> GetBarcodeStationByInputQty(int wipID, int ruleStationID)
{
var barcodeStation = await _context.BarcodeStation
.Where(w => wipID == w.WipID && w.RuleStationID == ruleStationID && w.RuleStatus == "P").ToListAsync();
return barcodeStation.Count();
}
/// <summary> /// <summary>
/// 用工單ID查是否有過站紀錄 /// 用工單ID查是否有過站紀錄
/// </summary> /// </summary>

118
AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs

@ -112,7 +112,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
join q2 in _context.WipAtts on q1.WipNO equals q2.WipNO join q2 in _context.WipAtts on q1.WipNO equals q2.WipNO
join q3 in _context.LineInfoes on q1.LineID equals q3.LineID join q3 in _context.LineInfoes on q1.LineID equals q3.LineID
join q4 in _context.FactoryUnits on q1.UnitNO equals q4.UnitNo join q4 in _context.FactoryUnits on q1.UnitNO equals q4.UnitNo
join q5 in _context.FactoryInfos on q1.Werks equals q5.FactoryID.ToString() join q5 in _context.FactoryInfos on q1.Werks equals q5.FactoryID.ToString()
//join q6 in _context.MaterialItems on q2.ItemNO equals q6.ItemNo //join q6 in _context.MaterialItems on q2.ItemNO equals q6.ItemNo
select new select new
{ {
@ -216,15 +216,58 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
public async Task<ActionResult<IEnumerable<WipInfo>>> GetWipInfoByWipNo(string wipno) public async Task<ActionResult<IEnumerable<WipInfo>>> GetWipInfoByWipNo(string wipno)
{ {
IQueryable<WipInfo> q = _context.WipInfos.Where(w => w.WipNO == wipno); IQueryable<WipInfo> q = _context.WipInfos.Where(w => w.WipNO == wipno);
var WipInfo = await q.ToListAsync(); var WipInfo = await q.ToListAsync();
return WipInfo;
}
if (WipInfo == null) /// <summary>
{ /// 查詢工單是否投入
return NotFound(); /// </summary>
} /// <param name="wipno">工單號碼</param>
/// <returns>Y:投入N:未投入</returns>
[HttpGet("CheckStart/{wipno}")]
public ActionResult<string> GetWipInfoCheckStart(string wipno)
{
// 判斷是否有投產紀錄
var q = from q1 in _context.WipInfos
join q2 in _context.BarcodeInfoes on q1.WipID equals q2.WipID
where q1.WipNO == wipno
select q2;
if (q.Count() != 0)
return "Y";
else
return "N";
// 判斷是否已經開線
var r = from q1 in _context.WipInfos
join q2 in _context.LineInfoes on q1.WipID equals q2.WipNo
where q1.WipNO == wipno
select q2;
if (r.Count() != 0)
return "Y";
else
return "N";
}
return WipInfo; /// <summary>
/// 查詢工單是否開線
/// </summary>
/// <param name="wipno">工單號碼</param>
/// <returns>Y:已開線N:未開線</returns>
[HttpGet("CheckStartLine/{wipno}")]
public ActionResult<string> GetWipInfoCheckStartLine(string wipno)
{
// 判斷是否已經開線
var q = from q1 in _context.WipInfos
join q2 in _context.LineInfoes on q1.WipID equals q2.WipNo
where q1.WipNO == wipno
select q2;
if (q.Count() != 0)
return "Y";
else
return "N";
} }
/// <summary> /// <summary>
@ -317,5 +360,66 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
} }
return result; return result;
} }
/// <summary>
/// 删除工單相關資料
/// </summary>
/// <param name="id">工單號碼</param>
/// <returns></returns>
[HttpDelete("{id}")]
public async Task<ResultModel<WipInfo>> DeleteWipinfo(string id)
{
ResultModel<WipInfo> result = new ResultModel<WipInfo>();
var wipinfos = await _context.WipInfos.Where(w => w.WipNO == id).ToListAsync();
_context.WipInfos.RemoveRange(wipinfos);
var wipAtt = await _context.WipAtts.Where(w => w.WipNO == id).ToListAsync();
_context.WipAtts.RemoveRange(wipAtt);
var wipKp = await _context.WipKps.Where(w => w.WipNo == id).ToListAsync();
_context.WipKps.RemoveRange(wipKp);
var wipSop = await _context.WipSops.Where(w => w.WipNo == id).ToListAsync();
_context.WipSops.RemoveRange(wipSop);
var wipOutfit = await _context.WipOutfits.Where(w => w.WipNo == id).ToListAsync();
_context.WipOutfits.RemoveRange(wipOutfit);
var wipLabel = await _context.WipLabels.Where(w => w.WipNO == id).ToListAsync();
_context.WipLabels.RemoveRange(wipLabel);
var wipBarcode = await _context.WipBarcodes.Where(w => w.WipNO == id).ToListAsync();
_context.WipBarcodes.RemoveRange(wipBarcode);
var wipBarcodeOther = await _context.WipBarcodeOthers.Where(w => w.WipNO == id).ToListAsync();
_context.WipBarcodeOthers.RemoveRange(wipBarcodeOther);
var wipBoard = await _context.WipBoards.Where(w => w.WipNo == id).ToListAsync();
_context.WipBoards.RemoveRange(wipBoard);
var wipSystem = await _context.WipSystems.Where(w => w.WipNo == id).ToListAsync();
_context.WipSystems.RemoveRange(wipSystem);
var wipChecks = await _context.WipChecks.Where(w => w.WipNo == id).ToListAsync();
_context.WipChecks.RemoveRange(wipChecks);
var wipInfoBlob = await _context.WipInfoBlobs.Where(w => w.WipNo == id).ToListAsync();
_context.WipInfoBlobs.RemoveRange(wipInfoBlob);
try
{
await _context.SaveChangesAsync();
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
return result;
}
} }
} }

22
AMESCoreStudio.WebApi/Controllers/BAS/RulesController.cs

@ -186,25 +186,19 @@ namespace AMESCoreStudio.WebApi.Controllers.BAS
} }
/// <summary> /// <summary>
/// 根據下一站別ID查詢 /// By流程ID 查詢
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id">流程ID</param>
/// <returns></returns> /// <returns></returns>
// GET: api/Rules/5 [HttpGet("ByFlowRuleID/{id}")]
[HttpGet("ByNextStation/{id}")] public async Task<ActionResult<IEnumerable<Rules>>> GetRulesByFlowRuleID(int id)
public async Task<ActionResult<IEnumerable<Rules>>> GetRulesByNextStation(int id)
{ {
IQueryable<Rules> q = _context.Ruleses; var q = from q1 in _context.Ruleses
join q2 in _context.RuleStations on q1.RuleStationID equals q2.RuleStationID
q = q.Where(p => p.NextStationID.Equals(id)); where q2.FlowRuleID == id
select q1;
var rules = await q.ToListAsync(); var rules = await q.ToListAsync();
if (rules == null)
{
return NotFound();
}
return rules; return rules;
} }

96
AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs

@ -127,9 +127,8 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
item = q_wipinfo.Value.FirstOrDefault().GetWipAtt.ItemNO; item = q_wipinfo.Value.FirstOrDefault().GetWipAtt.ItemNO;
itemID = ItemNoToItemID(item).Result; itemID = ItemNoToItemID(item).Result;
var q_rulestation = await ruleStationsController.GetRuleStationByFlow(barCodeCheckDto.flowRule, 0, 0);
// 抓RulseStationID // 抓RulseStationID
var q_rulestation = await ruleStationsController.GetRuleStationByFlow(barCodeCheckDto.flowRule, 0, 0);
barCodeCheckDto.ruleStationID = q_rulestation.Value.Where(w => w.StationID == barCodeCheckDto.station).FirstOrDefault().RuleStationID; barCodeCheckDto.ruleStationID = q_rulestation.Value.Where(w => w.StationID == barCodeCheckDto.station).FirstOrDefault().RuleStationID;
#region KeyParts 判斷 #region KeyParts 判斷
@ -209,7 +208,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
#endregion #endregion
#region 判斷組件序號是否在製狀態 #region 判斷組件序號是否在製狀態
if (q_Kp.KpName.ToUpper() == "BOARD") if (q_Kp.KpNo.ToUpper() == "04")
{ {
var BarCodeInfo = await barcodeInfoesController.GetBarcodeInfoesByNo(KPs.inputData); var BarCodeInfo = await barcodeInfoesController.GetBarcodeInfoesByNo(KPs.inputData);
@ -221,7 +220,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
#endregion #endregion
#region 判斷MAC區間 #region 判斷MAC區間
if (q_Kp.KpName.ToUpper() == "MAC") if (q_Kp.KpNo.ToUpper() == "94")
{ {
var wipMAC = await wipMACController.GetWipMAC(barCodeCheckDto.wipNo); var wipMAC = await wipMACController.GetWipMAC(barCodeCheckDto.wipNo);
@ -254,7 +253,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
#region 判斷出貨序號 #region 判斷出貨序號
// 當KP_NAME是 EXT_NO 判斷組件-出貨序號 是否有在區間 // 當KP_NAME是 EXT_NO 判斷組件-出貨序號 是否有在區間
if (q_Kp.KpName.ToUpper() == "EXT_NO") if (q_Kp.KpNo.ToUpper() == "95")
{ {
var WipBarCodeOther = await wipBarcodeOtherController.CheckWipBarcodeOtherByNo(barCodeCheckDto.wipNo, KPs.inputData); var WipBarCodeOther = await wipBarcodeOtherController.CheckWipBarcodeOtherByNo(barCodeCheckDto.wipNo, KPs.inputData);
@ -367,8 +366,12 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
private void CU_Tables(BarCodeCheckDto barCodeCheckDto) private void CU_Tables(BarCodeCheckDto barCodeCheckDto)
{ {
string Msg = string.Empty; string Msg = string.Empty;
if (!Table_BarcodeInfo(barCodeCheckDto).Result.Success) var result_BarcodeInfo = Table_BarcodeInfo(barCodeCheckDto).Result;
if (result_BarcodeInfo.Success)
{ {
// 將BarCodeID補上
if (barCodeCheckDto.barcodeID == 0)
barCodeCheckDto.barcodeID = result_BarcodeInfo.Data.FirstOrDefault().BarcodeID;
} }
@ -817,7 +820,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
} }
catch (Exception ex) catch (Exception ex)
{ {
resultModel.Msg = ex.InnerException.Message; resultModel.Msg = ex.Message;
} }
} }
@ -1071,10 +1074,21 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return resultModel; return resultModel;
} }
// 判斷序號目前是否有重複過站
BarcodeInfoesController barcodeInfoesController = new BarcodeInfoesController(_context);
var BarcodeInfos = await barcodeInfoesController.GetBarcodeInfoesByNo(barcode);
BarcodeInfos = BarcodeInfos.Value.ToList();
if (BarcodeInfos.Value.Where(w => w.RuleStationID == RuleStationID).Any())
{
resultModel.Msg = "該內部序號【" + barcode + "】已刷過此站";
return resultModel;
}
// 取目前工單ID // 取目前工單ID
int wipID = q1.WipID; int wipID = q1.WipID;
int flowRuleID = q1.FlowRuleID;
resultModel = (ResultModel<string>)await GetBarCodeLastStopRuleStationID(wipID, BarCodeID, station); resultModel = (ResultModel<string>)await GetBarCodeLastStopRuleStationID(wipID, BarCodeID, station, flowRuleID);
if (!resultModel.Success) if (!resultModel.Success)
return resultModel; return resultModel;
@ -1295,7 +1309,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
#endregion #endregion
#region 判斷組件序號是否在製狀態 #region 判斷組件序號是否在製狀態
if (wipKps[x + i].KpName.ToUpper() == "BOARD") if (wipKps[x + i].KpNo.ToUpper() == "04")
{ {
BarcodeInfoesController barcodeInfoesController = new BarcodeInfoesController(_context); BarcodeInfoesController barcodeInfoesController = new BarcodeInfoesController(_context);
var BarCodeInfo = await barcodeInfoesController.GetBarcodeInfoesByNo(barcodeItemKPDto.inputKP[i]); var BarCodeInfo = await barcodeInfoesController.GetBarcodeInfoesByNo(barcodeItemKPDto.inputKP[i]);
@ -1307,7 +1321,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
#endregion #endregion
#region 判斷MAC區間 #region 判斷MAC區間
if (wipKps[x + i].KpName.ToUpper() == "MAC") if (wipKps[x + i].KpNo.ToUpper() == "94")
{ {
WipMACController wipMACController = new WipMACController(_context); WipMACController wipMACController = new WipMACController(_context);
var wipMAC = await wipMACController.GetWipMAC(barcodeItemKPDto.WipNo); var wipMAC = await wipMACController.GetWipMAC(barcodeItemKPDto.WipNo);
@ -1340,7 +1354,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
#region 判斷出貨序號 #region 判斷出貨序號
// 當KP_NAME是 EXT_NO 判斷組件-出貨序號 是否有在區間 // 當KP_NAME是 EXT_NO 判斷組件-出貨序號 是否有在區間
if (wipKps[x + i].KpName.ToUpper() == "EXT_NO") if (wipKps[x + i].KpNo.ToUpper() == "95")
{ {
WipBarcodeOtherController wipBarcodeOtherController = new WipBarcodeOtherController(_context); WipBarcodeOtherController wipBarcodeOtherController = new WipBarcodeOtherController(_context);
var WipBarCodeOther = await wipBarcodeOtherController.CheckWipBarcodeOtherByNo(barcodeItemKPDto.WipNo, barcodeItemKPDto.inputKP[i]); var WipBarCodeOther = await wipBarcodeOtherController.CheckWipBarcodeOtherByNo(barcodeItemKPDto.WipNo, barcodeItemKPDto.inputKP[i]);
@ -1491,8 +1505,9 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// <param name="wipID">工單ID</param> /// <param name="wipID">工單ID</param>
/// <param name="barCodeID">BarCodeID</param> /// <param name="barCodeID">BarCodeID</param>
/// <param name="stationID">目前作業站ID</param> /// <param name="stationID">目前作業站ID</param>
/// <param name="flowRuleID">工單流程ID</param>
/// <returns>true:false</returns> /// <returns>true:false</returns>
private async Task<IResultModel> GetBarCodeLastStopRuleStationID(int wipID, int barCodeID, int stationID) private async Task<IResultModel> GetBarCodeLastStopRuleStationID(int wipID, int barCodeID, int stationID, int flowRuleID)
{ {
ResultModel<string> resultModel = new ResultModel<string> { Success = false }; ResultModel<string> resultModel = new ResultModel<string> { Success = false };
WipInfosController wipInfosController = new WipInfosController(_context); WipInfosController wipInfosController = new WipInfosController(_context);
@ -1503,13 +1518,13 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
// 用作業站抓 有設定下一站為該站的資料 // 用作業站抓 有設定下一站為該站的資料
RulesController rulesController = new RulesController(_context); RulesController rulesController = new RulesController(_context);
var rules = await rulesController.GetRulesByNextStation(stationID); var rules = await rulesController.GetRulesByFlowRuleID(flowRuleID);
rules = rules.Value.Where(w => w.NextStationID == stationID).ToList();
//排除第一站 //排除第一站
if (rules.Value.Count() != 0) if (rules.Value.Count() != 0)
{ {
// 抓有設定下一站=目前作業站的上一站 // 抓有設定下一站=目前作業站的上一站
var ruleSations = rules.Value.Select(s => new { s.RuleStationID, s.RuleStatus }).ToList(); var nowruleSations = rules.Value.Select(s => new { s.RuleStationID, s.RuleStatus }).ToList();
// 取得目前BarCode 最新過站資料 // 取得目前BarCode 最新過站資料
BarcodeInfoesController barcodeInfoesController = new BarcodeInfoesController(_context); BarcodeInfoesController barcodeInfoesController = new BarcodeInfoesController(_context);
var barcodeInfo = barcodeInfoesController.GetBarcodeInfoes(barCodeID).Result.Value.FirstOrDefault(); var barcodeInfo = barcodeInfoesController.GetBarcodeInfoes(barCodeID).Result.Value.FirstOrDefault();
@ -1520,7 +1535,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return resultModel; return resultModel;
} }
if (ruleSations.Where(w => w.RuleStationID == barcodeInfo.RuleStationID if (nowruleSations.Where(w => w.RuleStationID == barcodeInfo.RuleStationID
&& w.RuleStatus == barcodeInfo.RuleStatus).Count() == 0 && w.RuleStatus == barcodeInfo.RuleStatus).Count() == 0
) )
{ {
@ -1552,49 +1567,28 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
} }
var q1 = q.Result.Value.Where(w => w.UnitNO == unitNo).FirstOrDefault(); var q1 = q.Result.Value.Where(w => w.UnitNO == unitNo).FirstOrDefault();
int FlowRuleID = q1.FlowRuleID; // 取得流程
// 將工單-生產單位 流程ID取rulestation的作業站排順序
RuleStationsController ruleStationsController = new RuleStationsController(_context); RuleStationsController ruleStationsController = new RuleStationsController(_context);
List<dynamic> dy = new List<dynamic>();
int index = 1;
var ruleStations = await ruleStationsController.GetRuleStationByFlow(q1.FlowRuleID, 0); var ruleStations = await ruleStationsController.GetRuleStationByFlow(q1.FlowRuleID, 0);
if (ruleStations.Value.Count() != 0) if (ruleStations.Value.Count() != 0)
{ {
// 按照順序塞入判斷資料 // 在RuleStation 找不到該作業站
foreach (var item in ruleStations.Value.Where(w => w.StationType == "M").OrderBy(o => o.Sequence)) if (!ruleStations.Value.Any(a => a.StationID == stationID))
{ return resultModel;
var x = new
{
index,
item.StationID
};
dy.Add(x);
index++;
}
}
// 在RuleStation 找不到該作業站
if (dy.Where(w => w.StationID == stationID).Select(s => s.index).FirstOrDefault() == null)
return resultModel;
// 取得目前該站順序 int rulestationID = ruleStations.Value.Where(w => w.StationID == stationID).FirstOrDefault().RuleStationID;
int NowIndex = dy.Where(w => w.StationID == stationID).Select(s => s.index).FirstOrDefault();
// 判斷下一站沒有資料Error RulesController rulesController = new RulesController(_context);
if (dy.Where(w => w.index == (NowIndex + 1)).Select(s => s.StationID).FirstOrDefault() == null) var rules = await rulesController.GetRulesByFlowRuleID(q1.FlowRuleID);
return resultModel;
// 當下一站SatationID= 1000 代表完工站 // 當下一站SatationID= 1000 代表完工站
if (dy.Where(w => w.index == (NowIndex + 1)).Select(s => s.StationID).FirstOrDefault() == 1000) if (rules.Value.Where(w => w.RuleStationID == rulestationID && w.NextStationID == 1000).Any())
{ {
resultModel.Success = true; resultModel.Success = true;
return resultModel; return resultModel;
} }
else
{
return resultModel;
} }
return resultModel;
} }
/// <summary> /// <summary>

Loading…
Cancel
Save