Browse Source

1. 修改過站已刷數量判斷,治具資料改抓WIP治具,挖異常位置欄位

2. 過站判斷加入治具、燒機判斷
3. 工單資料修正 KeyParts、治具、SOP文件 新增 刪除bug
4. 工單資料治具 加入作業站新增
PTD
ray 3 years ago
parent
commit
f15fc03ca3
  1. 169
      AMESCoreStudio.Web/Controllers/PCSController.cs
  2. 13
      AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs
  3. 28
      AMESCoreStudio.Web/ViewModels/PCS/PCS021ViewModel.cs
  4. 30
      AMESCoreStudio.Web/Views/PCS/PCS001R.cshtml
  5. 106
      AMESCoreStudio.Web/Views/PCS/PCS003.cshtml
  6. 72
      AMESCoreStudio.Web/Views/PCS/PCS021.cshtml
  7. 28
      AMESCoreStudio.WebApi/Controllers/AMES/BarcodeItemsController.cs
  8. 5
      AMESCoreStudio.WebApi/Controllers/AMES/BarcodeOutfitController.cs
  9. 4
      AMESCoreStudio.WebApi/Controllers/AMES/BarcodeStationController.cs
  10. 133
      AMESCoreStudio.WebApi/Controllers/AMES/BurnInfoeController.cs
  11. 17
      AMESCoreStudio.WebApi/Controllers/AMES/OutfitInfoesController.cs
  12. 4
      AMESCoreStudio.WebApi/Controllers/AMES/WipBarcodeOthersController.cs
  13. 34
      AMESCoreStudio.WebApi/Controllers/AMES/WipBoardController.cs
  14. 12
      AMESCoreStudio.WebApi/Controllers/AMES/WipOutfitController.cs
  15. 31
      AMESCoreStudio.WebApi/Controllers/AMES/WipSystemController.cs
  16. 249
      AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs
  17. 18
      AMESCoreStudio.WebApi/DTO/AMES/WipOutfitDto.cs
  18. 14
      AMESCoreStudio.WebApi/Models/AMES/BarcodeOutfit.cs
  19. 145
      AMESCoreStudio.WebApi/Models/AMES/BurnInfo.cs
  20. 1
      AMESCoreStudio.WebApi/Models/AMES/WipKp.cs
  21. 7
      AMESCoreStudio.WebApi/Models/AMES/WipOutfit.cs
  22. 6
      AMESCoreStudio.WebApi/Models/AMESContext.cs

169
AMESCoreStudio.Web/Controllers/PCSController.cs

@ -940,6 +940,33 @@ namespace AMESCoreStudio.Web.Controllers
return Json(new { data = FactoryUnit }); return Json(new { data = FactoryUnit });
} }
/// <summary>
/// 生產單位 Json By WipNp
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<JsonResult> GetFactoryUnitByWipNoJson(string wipNo)
{
var result = await _basApi.GetFactoryUnits();
var result_wipNo = await _pcsApi.GetWipInfoByWipNO(wipNo);
result = result.Where(w => result_wipNo.Select(s => s.UnitNO).Contains(w.UnitNo)).ToList();
var Item = new List<SelectListItem>();
for (int i = 0; i < result.Count; i++)
{
Item.Add(new SelectListItem(result[i].UnitName, result[i].UnitNo.ToString()));
}
if (Item.Count == 0)
{
Item.Add(new SelectListItem("N/A", null));
}
ViewBag.FactoryUnitByWipNo = Item;
//将数据Json化并传到前台视图
return Json(new { data = Item });
}
[HttpPost] [HttpPost]
public async Task<JsonResult> GetStationsJson(string unit_no) public async Task<JsonResult> GetStationsJson(string unit_no)
{ {
@ -1075,6 +1102,28 @@ namespace AMESCoreStudio.Web.Controllers
return Json(new { data = item }); return Json(new { data = item });
} }
/// <summary>
/// 治具種類
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<JsonResult> GetOutfitCommodityInfoJson()
{
var result = await _pcsApi.GetOutfitCommodityInfo();
var item = new List<SelectListItem>();
//item.Add(new SelectListItem("全部", "0"));
result = result.Where(w => w.Status == "A").ToList();
for (int i = 0; i < result.Count; i++)
{
item.Add(new SelectListItem(result[i].CommodityName, result[i].CommodityNo));
}
ViewBag.OutfitCommodityInfo = item;
//将数据Json化并传到前台视图
return Json(new { data = item });
}
/// <summary> /// <summary>
/// 回傳料號流程_備註 /// 回傳料號流程_備註
/// </summary> /// </summary>
@ -1122,6 +1171,48 @@ namespace AMESCoreStudio.Web.Controllers
} }
return Json(new { data = 0 }); return Json(new { data = 0 });
} }
/// <summary>
/// 用工單號碼查詢綁定作業站
/// </summary>
/// <returns>RuleStation </returns>
[HttpPost]
public async Task<JsonResult> GetRuleStationByWipNoUnitNoJson(string wipNo)
{
var result_wipNo = await _pcsApi.GetWipInfoByWipNO(wipNo);
var items = new List<SelectListItem>();
var flowRuleIDs = result_wipNo.Select(s => s.FlowRuleID).Distinct();
items.Add(new SelectListItem("N/A", null));
foreach (var flowRuleID in flowRuleIDs)
{
var group = new SelectListGroup
{
Name = result_wipNo.Where(w => w.FlowRuleID == flowRuleID)
.FirstOrDefault().GetFactoryUnit.UnitName
};
var result = await _pcsApi.GetRuleStationByFlow(flowRuleID);
for (int i = 0; i < result.Count; i++)
{
items.Add(new SelectListItem()
{
Text = result[i].StationDesc,
Value = result[i].RuleStationID.ToString(),
Group = group
});
}
}
// 排除完工站
items = items.Where(w => w.Value != "1000").ToList();
ViewBag.RuleStationByWipNoUnitNoList = items;
return Json(new { data = items });
}
#endregion #endregion
[ResponseCache(Duration = 0)] [ResponseCache(Duration = 0)]
@ -1610,6 +1701,9 @@ namespace AMESCoreStudio.Web.Controllers
await GetMFGType(); await GetMFGType();
await GetProcessTypes(); await GetProcessTypes();
await GetMaterialFlowRuleJson(model.wipAtt.ItemNO, model.wipInfo.UnitNO); await GetMaterialFlowRuleJson(model.wipAtt.ItemNO, model.wipInfo.UnitNO);
await GetOutfitCommodityInfoJson();
await GetFactoryUnitByWipNoJson(model.wipInfo.WipNO);
await GetRuleStationByWipNoUnitNoJson(model.wipInfo.WipNO);
GetWipSEQType(); GetWipSEQType();
GetBurnType(); GetBurnType();
GetPartsBakeType(); GetPartsBakeType();
@ -1707,6 +1801,9 @@ namespace AMESCoreStudio.Web.Controllers
await GetMFGType(); await GetMFGType();
await GetProcessTypes(); await GetProcessTypes();
await GetMaterialFlowRuleJson(model.wipAtt.ItemNO, model.wipInfo.UnitNO); await GetMaterialFlowRuleJson(model.wipAtt.ItemNO, model.wipInfo.UnitNO);
await GetOutfitCommodityInfoJson();
await GetFactoryUnitByWipNoJson(model.wipInfo.WipNO);
await GetRuleStationByWipNoUnitNoJson(model.wipInfo.WipNO);
GetWipSEQType(); GetWipSEQType();
GetBurnType(); GetBurnType();
GetPartsBakeType(); GetPartsBakeType();
@ -1730,6 +1827,8 @@ namespace AMESCoreStudio.Web.Controllers
public async Task<IActionResult> PCS003Async(WipDataViewModel model, string action, IFormFile formFile) public async Task<IActionResult> PCS003Async(WipDataViewModel model, string action, IFormFile formFile)
{ {
#region 選單 #region 選單
await GetItemsList(); await GetItemsList();
await GetProductType(); await GetProductType();
@ -1739,6 +1838,10 @@ namespace AMESCoreStudio.Web.Controllers
await GetMFGType(); await GetMFGType();
await GetProcessTypes(); await GetProcessTypes();
await GetFlowRuleList(); await GetFlowRuleList();
await GetFactoryUnitByWipNoJson(model.wipInfo.WipNO);
await GetMaterialFlowRuleJson(model.wipAtt.ItemNO, model.wipInfo.UnitNO);
await GetOutfitCommodityInfoJson();
await GetRuleStationByWipNoUnitNoJson(model.wipInfo.WipNO);
GetWipSEQType(); GetWipSEQType();
GetBurnType(); GetBurnType();
GetPartsBakeType(); GetPartsBakeType();
@ -1821,6 +1924,23 @@ namespace AMESCoreStudio.Web.Controllers
return View("PCS003", model); return View("PCS003", model);
} }
// 判斷治具中生產單位與作業站吻合
var result_wipNo = await _pcsApi.GetWipInfoByWipNO(model.wipInfo.WipNO);
foreach (var item in result_wipNo)
{
foreach (var Outfits in model.WipOutfits.Where(w => w.RuleStationID != null && w.UnitNo == item.UnitNO))
{
var RuleStation = await _pcsApi.GetRuleStationByFlow(item.FlowRuleID);
if (!RuleStation.Where(w => Outfits.RuleStationID == w.RuleStationID).Any())
{
ModelState.AddModelError("error", "治具組合中生產單位與作業站不匹配");
return View("PCS003", model);
}
}
}
result = await _pcsApi.PutWipInfo(JsonConvert.SerializeObject(model.wipInfo)); result = await _pcsApi.PutWipInfo(JsonConvert.SerializeObject(model.wipInfo));
if (result.Success) if (result.Success)
{ {
@ -1938,7 +2058,7 @@ namespace AMESCoreStudio.Web.Controllers
{ {
await _pcsApi.DeleteWipKp(id); await _pcsApi.DeleteWipKp(id);
} }
foreach (var item in model.WipKps) foreach (var item in model.WipKps.Where(w => w.WipKpID != -1))
{ {
item.WipNo = model.wipInfo.WipNO; item.WipNo = model.wipInfo.WipNO;
item.ItemNo = model.wipAtt.ItemNO; item.ItemNo = model.wipAtt.ItemNO;
@ -1956,7 +2076,7 @@ namespace AMESCoreStudio.Web.Controllers
{ {
await _pcsApi.DeleteWipOutfit(id); await _pcsApi.DeleteWipOutfit(id);
} }
foreach (var item in model.WipOutfits) foreach (var item in model.WipOutfits.Where(w => w.WipOutfitID != -1))
{ {
item.WipNo = model.wipInfo.WipNO; item.WipNo = model.wipInfo.WipNO;
item.ItemNo = model.wipAtt.ItemNO; item.ItemNo = model.wipAtt.ItemNO;
@ -1974,7 +2094,7 @@ namespace AMESCoreStudio.Web.Controllers
{ {
await _pcsApi.DeleteWipSop(id); await _pcsApi.DeleteWipSop(id);
} }
foreach (var item in model.WipSops) foreach (var item in model.WipSops.Where(w => w.WipSOPID != -1))
{ {
item.WipNo = model.wipInfo.WipNO; item.WipNo = model.wipInfo.WipNO;
item.ItemNo = model.wipAtt.ItemNO; item.ItemNo = model.wipAtt.ItemNO;
@ -2119,8 +2239,8 @@ namespace AMESCoreStudio.Web.Controllers
var x = new var x = new
{ {
mix = Entire.DecHex(Mix.ToString(), "DecToHex").ToUpper(), mix = q.Title + Entire.DecHex(Mix.ToString(), "DecToHex").ToUpper(),
max = Entire.DecHex(Max.ToString(), "DecToHex").ToUpper(), max = q.Title + Entire.DecHex(Max.ToString(), "DecToHex").ToUpper(),
}; };
return Json(x); return Json(x);
} }
@ -3312,6 +3432,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);
@ -3326,10 +3447,12 @@ namespace AMESCoreStudio.Web.Controllers
if (model.Station != 0) if (model.Station != 0)
{ {
model.RuleStation = ruleStations.Where(w => w.StationID == model.Station).FirstOrDefault().RuleStationID; model.RuleStation = ruleStations.Where(w => w.StationID == model.Station).FirstOrDefault().RuleStationID;
model.StationTypeNo = ruleStations.Where(w => w.StationID == model.Station).FirstOrDefault().Station.TypeNo;
} }
else else
{ {
model.RuleStation = ruleStations.FirstOrDefault().RuleStationID; model.RuleStation = ruleStations.FirstOrDefault().RuleStationID;
model.StationTypeNo = ruleStations.FirstOrDefault().Station.TypeNo;
} }
// 工單已刷數量 // 工單已刷數量
@ -3351,15 +3474,19 @@ namespace AMESCoreStudio.Web.Controllers
ModelState.AddModelError("error", "找不到該站別作業工項"); ModelState.AddModelError("error", "找不到該站別作業工項");
} }
var q1 = await _pcsApi.GetMaterialOutfitByItemID(model.MaterialItem.ItemID); // 治具
model.MaterialOutfits.Clear(); var q1 = await _pcsApi.GetWipOutfitByWipNo(model.WipNO);
foreach (var item in q1.Where(w => w.RuleStationID == ruleStations.FirstOrDefault().RuleStationID)) q1 = q1.Where(w => (w.UnitNo == model.UnitNO && w.RuleStationID == null) ||
(w.UnitNo == model.UnitNO && w.RuleStationID == model.RuleStation)).ToList();
model.wipOutfits.Clear();
foreach (var item in q1)
{ {
model.MaterialOutfits.Add(new MaterialOutfits model.wipOutfits.Add(new WipOutfitDtos
{ {
ItemID = item.ItemID, OutfitNo = item.OutfitNo,
MaterialOutfitID = item.MaterialOutfitID, PartNo = item.PartNo,
OutfitNo = item.OutfitNo StationName = item.StationName,
UnitNoName = item.UnitNoName
} }
); );
} }
@ -3390,7 +3517,8 @@ namespace AMESCoreStudio.Web.Controllers
if (model.WipID == 0) if (model.WipID == 0)
Msg += "請確認是否有輸入工單相關訊息</br>"; Msg += "請確認是否有輸入工單相關訊息</br>";
if (model.MaterialOutfits.Where(w => string.IsNullOrWhiteSpace(w.Inputs)).Any()) // 當有作業站就必須要填治具編號
if (model.wipOutfits.Where(w => !string.IsNullOrWhiteSpace(w.StationName) && string.IsNullOrWhiteSpace(w.Inputs)).Any())
Msg += "請刷入治具編號</br>"; Msg += "請刷入治具編號</br>";
if (model.Station == 0) if (model.Station == 0)
@ -3410,7 +3538,7 @@ namespace AMESCoreStudio.Web.Controllers
} }
#endregion #endregion
var Kp = model.Inputs.Where(w => !w.Contains("$")).ToList(); // 撈非不良代碼 = 組件序號 var Kp = model.Inputs.Where(w => !w.Input.Contains("$")).ToList(); // 撈非不良代碼 = 組件序號
var q = await _pcsApi.GetBarCodeFromWip(model.Input); var q = await _pcsApi.GetBarCodeFromWip(model.Input);
// 判斷是否用內部序號有對應到工單號碼,沒對應到視為組件或不良代碼 // 判斷是否用內部序號有對應到工單號碼,沒對應到視為組件或不良代碼
if (q.Success) if (q.Success)
@ -3441,7 +3569,7 @@ namespace AMESCoreStudio.Web.Controllers
model.StationSEQ = RuleStations.Where(w => w.StationID == model.Station).Select(s => s.Sequence).FirstOrDefault(); model.StationSEQ = RuleStations.Where(w => w.StationID == model.Station).Select(s => s.Sequence).FirstOrDefault();
} }
// 判斷是否有$符號,代表有不良代碼 // 判斷是否有$符號,代表有不良代碼
if (model.Inputs.Where(w => w.Contains("$")).Any()) if (model.Inputs.Where(w => w.Input.Contains("$")).Any())
{ {
model.BarcodeNG = true; model.BarcodeNG = true;
// 判斷是否為投入站,投入站不能刷不良 // 判斷是否為投入站,投入站不能刷不良
@ -3490,16 +3618,18 @@ namespace AMESCoreStudio.Web.Controllers
} }
keyParts.Add(new BarCodeCheckDto.inputItem keyParts.Add(new BarCodeCheckDto.inputItem
{ {
inputType = KeyPartItem.Contains("$") ? "NG" : model.WipKps[i + KpItemQty].KpNo, inputType = KeyPartItem.Input.Contains("$") ? "NG" : model.WipKps[i + KpItemQty].KpNo,
inputData = KeyPartItem inputData = KeyPartItem.Input,
oldInputData = KeyPartItem.InputNo
}); });
if (!KeyPartItem.Contains("$")) if (!KeyPartItem.Input.Contains("$"))
i += 1; i += 1;
} }
// 治具
var outfit = new List<BarCodeCheckDto.Outfit>(); var outfit = new List<BarCodeCheckDto.Outfit>();
foreach (var outfitItem in model.MaterialOutfits) foreach (var outfitItem in model.wipOutfits)
{ {
outfit.Add(new BarCodeCheckDto.Outfit outfit.Add(new BarCodeCheckDto.Outfit
{ {
@ -3507,7 +3637,6 @@ namespace AMESCoreStudio.Web.Controllers
}); });
} }
var x = new BarCodeCheckDto var x = new BarCodeCheckDto
{ {
wipNo = model.WipNO, wipNo = model.WipNO,

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

@ -998,6 +998,14 @@ namespace AMESCoreStudio.Web
[WebApiClient.Attributes.HttpGet("api/RuleStations/WipNo/{id}")] [WebApiClient.Attributes.HttpGet("api/RuleStations/WipNo/{id}")]
ITask<List<RuleStationDto>> GetRuleStationByWipNo(string id , int flowRuleIDNew =0 , int flowRuleIDOld =0); ITask<List<RuleStationDto>> GetRuleStationByWipNo(string id , int flowRuleIDNew =0 , int flowRuleIDOld =0);
/// <summary>
/// By FlowID 對應 RuleStation
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/RuleStations/Flow/{id}")]
ITask<List<RuleStationDto>> GetRuleStationByFlow(int id);
#endregion #endregion
#region BarcodeOutfit 內部序號對應的治具序號明細 #region BarcodeOutfit 內部序號對應的治具序號明細
@ -1050,5 +1058,10 @@ namespace AMESCoreStudio.Web
ITask<List<WipInfoBlob>> GetWipInfoBlob(string id); ITask<List<WipInfoBlob>> GetWipInfoBlob(string id);
#endregion #endregion
#region OutfitCommodityInfo 治具種類資料檔
[WebApiClient.Attributes.HttpGet("api/OutfitCommodityInfoes")]
ITask<List<OutfitCommodityInfo>> GetOutfitCommodityInfo();
#endregion
} }
} }

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

@ -60,6 +60,11 @@ namespace AMESCoreStudio.Web.ViewModels.PCS
/// </summary> /// </summary>
public int Station { get; set; } public int Station { get; set; }
/// <summary>
/// 工作站類別
/// </summary>
public string StationTypeNo { get; set; }
/// <summary> /// <summary>
/// SOP路徑 /// SOP路徑
@ -76,6 +81,10 @@ namespace AMESCoreStudio.Web.ViewModels.PCS
/// </summary> /// </summary>
public string Input { get; set; } public string Input { get; set; }
/// <summary>
/// inputNo (異常代碼)
/// </summary>
public string InputNo { get; set; }
/// <summary> /// <summary>
/// 過站順序 /// 過站順序
@ -100,7 +109,7 @@ namespace AMESCoreStudio.Web.ViewModels.PCS
/// inputs /// inputs
/// </summary> /// </summary>
public List<string> Inputs { get; set; } = new List<string>(); public List<Inputs> Inputs { get; set; } = new List<Inputs>();
/// <summary> /// <summary>
/// 料號相關資料 /// 料號相關資料
@ -115,7 +124,7 @@ namespace AMESCoreStudio.Web.ViewModels.PCS
/// <summary> /// <summary>
/// 料號治具資訊 /// 料號治具資訊
/// </summary> /// </summary>
public List<MaterialOutfits> MaterialOutfits { get; set; } = new List<MaterialOutfits>(); public List<WipOutfitDtos> wipOutfits { get; set; } = new List<WipOutfitDtos>();
/// <summary> /// <summary>
/// 站別工項資料檔 /// 站別工項資料檔
@ -123,8 +132,21 @@ namespace AMESCoreStudio.Web.ViewModels.PCS
public List<MaterialStationsItem> MaterialStationsItems { get; set; } = new List<MaterialStationsItem>(); public List<MaterialStationsItem> MaterialStationsItems { get; set; } = new List<MaterialStationsItem>();
} }
public class MaterialOutfits : MaterialOutfit public class WipOutfitDtos : WipOutfitDto
{ {
public string Inputs { get; set; } public string Inputs { get; set; }
} }
public class Inputs
{
/// <summary>
/// 不良代號 || KeyPart
/// </summary>
public string Input { get; set; }
/// <summary>
/// 異常欄位
/// </summary>
public string InputNo { get; set; }
}
} }

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

@ -830,23 +830,29 @@
<th> <th>
生產單位 生產單位
</th> </th>
<th>
作業站
</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@foreach (var index in Model.WipOutfits) @foreach (var index in Model.WipOutfits)
{ {
<tr> <tr>
<td> <td>
@index.OutfitNo @index.OutfitNo
</td> </td>
<td> <td>
@index.PartNo @index.PartNoName
</td> </td>
<td> <td>
@index.UnitNoName @index.UnitNoName
</td> </td>
</tr> <td>
@index.StationName
</td>
</tr>
j++; j++;
} }
</tbody> </tbody>

106
AMESCoreStudio.Web/Views/PCS/PCS003.cshtml

@ -106,7 +106,7 @@
<div class="layui-inline"> <div class="layui-inline">
<label asp-for="wipInfo.UnitNO" class="layui-form-label"></label> <label asp-for="wipInfo.UnitNO" class="layui-form-label"></label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<select disabled 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.FactoryUnitByWipNo" class=""></select>
</div> </div>
<input id="unitNo" type="hidden" asp-for="wipInfo.UnitNO" /> <input id="unitNo" type="hidden" asp-for="wipInfo.UnitNO" />
<label asp-for="wipInfo.LineID" class="layui-form-label"></label> <label asp-for="wipInfo.LineID" class="layui-form-label"></label>
@ -364,7 +364,7 @@
<input onkeypress="if( event.keyCode == 13 ) { return false; }" class="layui-input" asp-for="@index.Length" name="WipKps[@k].Length" /> <input onkeypress="if( event.keyCode == 13 ) { return false; }" class="layui-input" asp-for="@index.Length" name="WipKps[@k].Length" />
</td> </td>
<td> <td>
<select asp-for="@index.UnitNo" name="WipKps[@k].UnitNo" asp-items="@ViewBag.FactoryUnitList" class=""></select> <select asp-for="@index.UnitNo" name="WipKps[@k].UnitNo" asp-items="@ViewBag.FactoryUnitByWipNo" class=""></select>
</td> </td>
<td> <td>
<a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" onclick="Remove(this);">刪除</a> <a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" onclick="Remove(this);">刪除</a>
@ -906,6 +906,9 @@
<th> <th>
生產單位 生產單位
</th> </th>
<th>
流程站別
</th>
<th> <th>
</th> </th>
@ -920,10 +923,14 @@
<input onkeypress="if( event.keyCode == 13 ) { return false; }" class="layui-input" asp-for="@index.OutfitNo" name="WipOutfits[@l].OutfitNo" /> <input onkeypress="if( event.keyCode == 13 ) { return false; }" class="layui-input" asp-for="@index.OutfitNo" name="WipOutfits[@l].OutfitNo" />
</td> </td>
<td> <td>
<input onkeypress="if( event.keyCode == 13 ) { return false; }" class="layui-input" asp-for="@index.PartNo" name="WipOutfits[@l].PartNo" /> <select asp-for="@index.PartNo" name="WipOutfits[@l].PartNo" asp-items="@ViewBag.OutfitCommodityInfo" class=""></select>
</td> </td>
<td> <td>
<select asp-for="@index.UnitNo" name="WipOutfits[@l].UnitNo" asp-items="@ViewBag.FactoryUnitList" class=""></select> <select asp-for="@index.UnitNo" name="WipOutfits[@l].UnitNo" asp-items="@ViewBag.FactoryUnitByWipNo" class=""></select>
</td>
<td>
<select asp-for="@index.RuleStationID" name="WipOutfits[@l].RuleStationID" asp-items="@ViewBag.RuleStationByWipNoUnitNoList" class=""></select>
</td> </td>
<td> <td>
<a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" onclick="Remove(this);">刪除</a> <a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" onclick="Remove(this);">刪除</a>
@ -975,7 +982,7 @@
<select asp-for="@index.SOPType" name="WipSops[@i].SOPType" asp-items="@ViewBag.GetSOPTypeSelect" class=""></select> <select asp-for="@index.SOPType" name="WipSops[@i].SOPType" asp-items="@ViewBag.GetSOPTypeSelect" class=""></select>
</td> </td>
<td> <td>
<select asp-for="@index.UnitNo" name="WipSops[@i].UnitNo" asp-items="@ViewBag.FactoryUnitList" class=""></select> <select asp-for="@index.UnitNo" name="WipSops[@i].UnitNo" asp-items="@ViewBag.FactoryUnitByWipNo" class=""></select>
</td> </td>
<td> <td>
<a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" onclick="Remove(this);">刪除</a> <a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" onclick="Remove(this);">刪除</a>
@ -1223,6 +1230,7 @@
form.on('select(flow)', function (data) { form.on('select(flow)', function (data) {
RuleStation(data.value); RuleStation(data.value);
}); });
}); });
function getFlowRuleList(data) function getFlowRuleList(data)
@ -1295,7 +1303,7 @@
}); });
}; };
// RuleStation // RuleStation 備註
function RuleStation(NewID) { function RuleStation(NewID) {
$.ajax( $.ajax(
{ {
@ -1361,7 +1369,7 @@
$('#KPTableAdd').click(); $('#KPTableAdd').click();
$('#KPTableAdd').on('click', function () { $('#KPTableAdd').on('click', function () {
let No = parseInt($('#WipKpCount').val()); let No = parseInt($('#WipKpCount').val());
var FactoryUnit = getFactoryUnitList(); var FactoryUnit = getFactoryUnitByWipNoList();
var Select = "<select name=WipKps[" + No + "].UnitNo>"; var Select = "<select name=WipKps[" + No + "].UnitNo>";
$.each(FactoryUnit, function (index, item) { $.each(FactoryUnit, function (index, item) {
Select += '<option value=' + item.value + '>' + item.text + '</option>'; Select += '<option value=' + item.value + '>' + item.text + '</option>';
@ -1394,17 +1402,34 @@
$('#OutfitTableAdd').click(); $('#OutfitTableAdd').click();
$('#OutfitTableAdd').on('click', function () { $('#OutfitTableAdd').on('click', function () {
let No = parseInt($('#WipOutfitCount').val()); let No = parseInt($('#WipOutfitCount').val());
var FactoryUnit = getFactoryUnitList(); var FactoryUnit = getFactoryUnitByWipNoList();
var Select = "<select name=WipOutfits[" + No + "].UnitNo>"; var Select = "<select name=WipOutfits[" + No + "].UnitNo>";
$.each(FactoryUnit, function (index, item) { $.each(FactoryUnit, function (index, item) {
Select += '<option value=' + item.value + '>' + item.text + '</option>'; Select += '<option value=' + item.value + '>' + item.text + '</option>';
}); });
Select += '</select>'; Select += '</select>';
var OutfitCommodity = getOutfitCommodityList();
var SelectPartNo = "<select name=WipOutfits[" + No + "].PartNo>";
$.each(OutfitCommodity, function (index, item) {
SelectPartNo += '<option value=' + item.value + '>' + item.text + '</option>';
});
SelectPartNo += '</select>';
var RuleStation = getRuleStationByFlowID();
var SelectStation = "<select name=WipOutfits[" + No + "].RuleStationID>";
$.each(RuleStation, function (index, item) {
SelectStation += '<option value=' + item.value + '>' + item.text + '</option>';
});
SelectStation += '</select>';
var contactdiv = '<tr>' + var contactdiv = '<tr>' +
'<td><input type="hidden" value="" name="WipOutfits[' + No + '].WipOutfitID" />' + '<td><input type="hidden" value="" name="WipOutfits[' + No + '].WipOutfitID" />' +
'<input onkeypress="if( event.keyCode == 13 ) { return false; }" class="layui-input" name="WipOutfits[' + No + '].OutfitNo" /></td>' + '<input onkeypress="if( event.keyCode == 13 ) { return false; }" class="layui-input" name="WipOutfits[' + No + '].OutfitNo" /></td>' +
'<td><input onkeypress="if( event.keyCode == 13 ) { return false; }" class="layui-input" name="WipOutfits[' + No + '].PartNo" /></td>' + '<td>' + SelectPartNo+'</td>' +
'<td>' + Select + '</td>' + '<td>' + Select + '</td>' +
'<td>' + SelectStation + '</td>' +
'<td><a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" onclick="Remove(this);">刪除</a></td>' + '<td><a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" onclick="Remove(this);">刪除</a></td>' +
'</tr>'; '</tr>';
$('#OutfitTable').append(contactdiv); $('#OutfitTable').append(contactdiv);
@ -1417,7 +1442,7 @@
$('#SopTableAdd').click(); $('#SopTableAdd').click();
$('#SopTableAdd').on('click', function () { $('#SopTableAdd').on('click', function () {
let No = parseInt($('#WipSopCount').val()); let No = parseInt($('#WipSopCount').val());
var FactoryUnit = getFactoryUnitList(); var FactoryUnit = getFactoryUnitByWipNoList();
var SOPType = getSOPType(); var SOPType = getSOPType();
var Select = "<select name=WipSops[" + No + "].UnitNo>"; var Select = "<select name=WipSops[" + No + "].UnitNo>";
$.each(FactoryUnit, function (index, item) { $.each(FactoryUnit, function (index, item) {
@ -1448,23 +1473,22 @@
hg.confirm("確認要刪除此筆資料嗎?", function () { hg.confirm("確認要刪除此筆資料嗎?", function () {
var row = $(button).closest("TR"); var row = $(button).closest("TR");
var id = $(button).closest("TR").find('input[type=hidden]').val(); var id = $(button).closest("TR").find('input[type=hidden]').val();
var table = $(button).closest("TABLE")[0]; //$("#KPTable")[0]; //var table = $(button).closest("TABLE")[0]; //$("#KPTable")[0];
$(button).closest("TR").find('input[type=hidden]').val(id + "_"); $(button).closest("TR").find('input[type=hidden]').val(-1);
alert($(button).closest("TR").find('input[type=hidden]').val());
row.hide(); row.hide();
}); });
//table.deleteRow(row[0].rowIndex); //table.deleteRow(row[0].rowIndex);
}; };
//生產單位選單 //生產單位By工單號碼選單
function getFactoryUnitList() function getFactoryUnitByWipNoList()
{ {
var a; var a;
$.ajax( $.ajax(
{ {
url: "@Url.Action("GetFactoryUnitJson", "PCS")", url: "@Url.Action("GetFactoryUnitByWipNoJson", "PCS")",
dataType: 'json', dataType: 'json',
data: {}, data: { "wipNo": $("#wipInfo_WipNO").val()},
async:false, async:false,
type: 'post', type: 'post',
success: function (result) success: function (result)
@ -1500,6 +1524,50 @@
}); });
return b; return b;
}; };
//治具種類
function getOutfitCommodityList()
{
var a;
$.ajax(
{
url: "@Url.Action("GetOutfitCommodityInfoJson", "PCS")",
dataType: 'json',
data: {},
async:false,
type: 'post',
success: function (result)
{
a = result.data;
},
error: function (result)
{
alert(result);
}
});
return a;
};
//流程ID對應作業站
function getRuleStationByFlowID(data)
{
var b;
$.ajax(
{
url: "@Url.Action("GetRuleStationByWipNoUnitNoJson", "PCS")",
dataType: 'json',
data: { "wipNo": $("#wipInfo_WipNO").val()},
async:false,
type: 'post',
success: function (result)
{
b = result.data;
},
error: function (result)
{
alert(result);
}
});
return b;
};
//SOPType //SOPType
function getSOPType() { function getSOPType() {
var a; var a;
@ -1521,10 +1589,6 @@
}); });
return a; return a;
} }
</script> </script>
} }

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

@ -91,6 +91,7 @@
<input type="text" onkeydown="SearchNo(event);" asp-for="WipNO" asp-action="PCS021_GetWip" class="layui-input" autocomplete="off" /> <input type="text" onkeydown="SearchNo(event);" asp-for="WipNO" asp-action="PCS021_GetWip" class="layui-input" autocomplete="off" />
<input type="hidden" asp-for="WipID" value="@Model.WipID" /> <input type="hidden" asp-for="WipID" value="@Model.WipID" />
<input type="hidden" asp-for="FlowRuleID" value="@Model.FlowRuleID" /> <input type="hidden" asp-for="FlowRuleID" value="@Model.FlowRuleID" />
<input type="hidden" asp-for="StationTypeNo" value="@Model.StationTypeNo" />
<input type="submit" id="GetWipData" asp-action="PCS021_GetWip" style="display:none;" /> <input type="submit" id="GetWipData" asp-action="PCS021_GetWip" style="display:none;" />
</div> </div>
<label class="layui-form-label">作業站:</label> <label class="layui-form-label">作業站:</label>
@ -122,6 +123,10 @@
<div class="layui-form-item"> <div class="layui-form-item">
<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">
<input type="text" onkeypress="if( event.keyCode == 13 ) { $(':input:visible:enabled:eq(' + ($(':input:visible:enabled').index(this) + 1) + ')').focus();
event.preventDefault(); return false; }" asp-for="InputNo" style="width:100px" class="layui-input" autocomplete="off" placeholder="可輸入異常位置" />
</div>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input type="text" onkeydown="input(event);" id="inputtxt" 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>
@ -205,7 +210,7 @@
長度 長度
</th> </th>
<th> <th>
站(前段) 生產單位
</th> </th>
</tr> </tr>
</thead> </thead>
@ -214,19 +219,19 @@
{ {
<tr> <tr>
<td> <td>
<input type="text" asp-for="@index.KpName" name="WipKps[@j].KpName" style="width:100px" readonly="readonly" /> <input type="text" class="layui-input" asp-for="@index.KpName" name="WipKps[@j].KpName" style="width:100px" readonly="readonly" />
</td> </td>
<td> <td>
<select disabled asp-for="@index.KpNo" name="WipKps[@j].KpNo" asp-items="@ViewBag.ItemsList" class=""></select> <select disabled 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" class="layui-input" asp-for="@index.KpSeq" name="WipKps[@j].KpSeq" style="width:50px" readonly="readonly" />
</td> </td>
<td> <td>
<input type="text" asp-for="@index.Title" name="WipKps[@j].Title" style="width:50px" readonly="readonly" /> <input type="text" class="layui-input" asp-for="@index.Title" name="WipKps[@j].Title" style="width:50px" readonly="readonly" />
</td> </td>
<td> <td>
<input asp-for="@index.Length" name="WipKps[@j].Length" style="width:30px" readonly="readonly" /> <input asp-for="@index.Length" class="layui-input" name="WipKps[@j].Length" style="width:50px" readonly="readonly" />
</td> </td>
<td> <td>
@index.UnitNoName @index.UnitNoName
@ -245,28 +250,42 @@
<thead> <thead>
<tr> <tr>
<th> <th>
治具NO 設備編碼
</th>
<th>
設備名稱
</th>
<th>
生產單位
</th> </th>
<th> <th>
站(前段) 作業
</th> </th>
<th> <th>
序號 刷入治具條碼
</th> </th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@foreach (var index in Model.MaterialOutfits) @foreach (var index in Model.wipOutfits)
{ {
<tr> <tr>
<td>
<input type="text" class="layui-input" asp-for="@index.OutfitNo" name="wipOutfits[@k].OutfitNo" readonly="readonly" />
</td>
<td>
<input type="text" class="layui-input" asp-for="@index.PartNo" name="wipOutfits[@k].PartNo" readonly="readonly" />
</td>
<td> <td>
@index.OutfitNo <input type="text" class="layui-input" asp-for="@index.UnitNoName" name="wipOutfits[@k].UnitNoName" readonly="readonly" />
</td> </td>
<td> <td>
@index.StationType <input type="text" class="layui-input" asp-for="@index.StationName" name="wipOutfits[@k].StationName" readonly="readonly" />
</td> </td>
<td> <td>
<input onkeypress="if( event.keyCode == 13 ) { return false; }" asp-for="@index.Inputs" name="MaterialOutfits[@k].Inputs" /> <input onkeypress="if( event.keyCode == 13 ) { return false; }" asp-for="@index.Inputs" name="wipOutfits[@k].Inputs" class="layui-input" />
</td> </td>
</tr> </tr>
k++; k++;
@ -291,11 +310,19 @@
await Html.RenderPartialAsync("_FileinputScriptsPartial"); } await Html.RenderPartialAsync("_FileinputScriptsPartial"); }
<script type="text/javascript" src="~/js/grids.min.js"></script> <script type="text/javascript" src="~/js/grids.min.js"></script>
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function () {
var error = '@Html.ValidationMessage("error")'; $(document).ready(function () {
if ($(error).text() != '') { var error = '@Html.ValidationMessage("error")';
parent.hg.msg(error); if ($(error).text() != '') {
} parent.hg.msg(error);
}
if ($("#StationTypeNo").val() == "U" || $("#StationTypeNo").val() == "A") {
$("#InputNo").show();
}
else {
$("#InputNo").hide();
}
}); });
// Jquery 將兩邊DIV設定同高度 // Jquery 將兩邊DIV設定同高度
@ -335,6 +362,15 @@
} }
}; };
// 異常代碼換行
function inputNo(e) {
if (e.keyCode == 13) {
$(':input:visible:enabled:eq(' + ($(':input:visible:enabled').index(this) + 1) + ')').focus();
e.preventDefault();
return false;
}
};
function input(e) { function input(e) {
if (e.keyCode == 13) { if (e.keyCode == 13) {
var Inputs = GetAllEmpData(); var Inputs = GetAllEmpData();
@ -398,7 +434,7 @@
function TableAddRow(e) { function TableAddRow(e) {
//var rowCount = $('.data-contact-person').length + 0; //var rowCount = $('.data-contact-person').length + 0;
var contactdiv = '<tr class="data-contact-person">' + var contactdiv = '<tr class="data-contact-person">' +
'<td><input type="text" name="f-name" class="form-control td-Input" value='+ e +' /></td>' + '<td><input onkeypress="if( event.keyCode == 13 ) { return false; }" type="text" name="f-name" class="form-control td-Input" value='+ e +' /></td>' +
'<td><a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" onclick="Remove(this);">刪除</a></td>' + '<td><a class="layui-btn layui-btn-danger layui-btn-xs layui-icon layui-icon-delete" onclick="Remove(this);">刪除</a></td>' +
'</tr>'; '</tr>';
$('#tblCustomers').append(contactdiv); $('#tblCustomers').append(contactdiv);

28
AMESCoreStudio.WebApi/Controllers/AMES/BarcodeItemsController.cs

@ -349,7 +349,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return result; return result;
} }
catch (DbUpdateConcurrencyException ex) catch (Exception ex)
{ {
result.Success = false; result.Success = false;
result.Msg = ex.InnerException.Message; result.Msg = ex.InnerException.Message;
@ -381,33 +381,19 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return result; return result;
} }
_context.BarcodeItems.Add(barcodeItem);
try try
{ {
_context.BarcodeItems.Add(barcodeItem);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
result.Success = true;
result.Msg = "OK";
} }
catch (DbUpdateException) catch (Exception ex)
{ {
result.Success = false;
throw; result.Msg = ex.InnerException.Message;
} }
result.Success = true;
result.Msg = "OK";
return result; return result;
//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>

5
AMESCoreStudio.WebApi/Controllers/AMES/BarcodeOutfitController.cs

@ -98,9 +98,12 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
public async Task<ResultModel<BarcodeOutfit>> PostBarcodeOutfit(BarcodeOutfit barcodeOutfit) public async Task<ResultModel<BarcodeOutfit>> PostBarcodeOutfit(BarcodeOutfit barcodeOutfit)
{ {
ResultModel<BarcodeOutfit> result = new ResultModel<BarcodeOutfit>(); ResultModel<BarcodeOutfit> result = new ResultModel<BarcodeOutfit>();
_context.BarcodeOutfits.Add(barcodeOutfit);
try try
{ {
Helper helper = new Helper(_context);
barcodeOutfit.BarcodeOutfitID = helper.GetIDKey("BARCODE_OUTFIT_ID").Result;
_context.BarcodeOutfits.Add(barcodeOutfit);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
result.Success = true; result.Success = true;
result.Msg = "OK"; result.Msg = "OK";

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

@ -155,8 +155,10 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
[HttpGet("InputQty/{wipID}/{ruleStationID}")] [HttpGet("InputQty/{wipID}/{ruleStationID}")]
public async Task<ActionResult<int>> GetBarcodeStationByInputQty(int wipID, int ruleStationID) public async Task<ActionResult<int>> GetBarcodeStationByInputQty(int wipID, int ruleStationID)
{ {
// 取BarcodeID Distinct 數量
var barcodeStation = await _context.BarcodeStation var barcodeStation = await _context.BarcodeStation
.Where(w => wipID == w.WipID && w.RuleStationID == ruleStationID && w.RuleStatus == "P").ToListAsync(); .Where(w => wipID == w.WipID && w.RuleStationID == ruleStationID).Select(s => s.BarcodeID)
.Distinct().ToListAsync();
return barcodeStation.Count(); return barcodeStation.Count();
} }

133
AMESCoreStudio.WebApi/Controllers/AMES/BurnInfoeController.cs

@ -0,0 +1,133 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using AMESCoreStudio.WebApi;
using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.CommonTools.Result;
namespace AMESCoreStudio.WebApi.Controllers.AMES
{
/// <summary>
/// 燒機記錄資料表
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class BurnInfoeController : ControllerBase
{
private readonly AMESContext _context;
public BurnInfoeController(AMESContext context)
{
_context = context;
}
// GET: api/BurnInfoe
[HttpGet]
public async Task<ActionResult<IEnumerable<BurnInfo>>> GetBurnInfos()
{
return await _context.BurnInfos.ToListAsync();
}
// GET: api/BurnInfoe/5
[HttpGet("{id}")]
public async Task<ActionResult<BurnInfo>> GetBurnInfo(int id)
{
var burnInfo = await _context.BurnInfos.FindAsync(id);
return burnInfo;
}
/// <summary>
/// ByBarcodeID 查詢
/// </summary>
/// <param name="id">序號ID</param>
/// <returns></returns>
[HttpGet("BarcodeID/{id}")]
public async Task<ActionResult<IEnumerable<BurnInfo>>> GetBurnInfosByBarcodeID(int id)
{
var result = await _context.BurnInfos.Where(w => w.BarcodeID == id).ToListAsync();
return result;
}
/// <summary>
/// 更新燒機記錄資料表
/// </summary>
/// <param name="burnInfo"></param>
/// <returns></returns>
[HttpPut]
public async Task<ResultModel<BurnInfo>> PutBurnInfo(BurnInfo burnInfo)
{
ResultModel<BurnInfo> result = new ResultModel<BurnInfo>();
_context.Entry(burnInfo).State = EntityState.Modified;
//設置容器空間某一個模型的某一個欄位 不提交到資料庫
_context.Entry<BurnInfo>(burnInfo).Property("CreateDate").IsModified = false;
_context.Entry<BurnInfo>(burnInfo).Property("CreateUserID").IsModified = false;
burnInfo.UpdateDate = DateTime.Now;
burnInfo.UpdateUserID = 0;
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="burnInfo"></param>
/// <returns></returns>
[HttpPost]
public async Task<ResultModel<BurnInfo>> PostBurnInfo(BurnInfo burnInfo)
{
ResultModel<BurnInfo> result = new ResultModel<BurnInfo>();
try
{
Helper helper = new Helper(_context);
burnInfo.BurnID = helper.GetIDKey("BURN_ID").Result;
_context.BurnInfos.Add(burnInfo);
await _context.SaveChangesAsync();
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.Message;
}
return result;
}
// DELETE: api/BurnInfoe/5
[HttpDelete("{id}")]
public async Task<ActionResult<BurnInfo>> DeleteBurnInfo(int id)
{
var burnInfo = await _context.BurnInfos.FindAsync(id);
if (burnInfo == null)
{
return NotFound();
}
_context.BurnInfos.Remove(burnInfo);
await _context.SaveChangesAsync();
return burnInfo;
}
private bool BurnInfoExists(int id)
{
return _context.BurnInfos.Any(e => e.BurnID == id);
}
}
}

17
AMESCoreStudio.WebApi/Controllers/AMES/OutfitInfoesController.cs

@ -107,8 +107,8 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
if (PartNo != "*") if (PartNo != "*")
q = q.Where(p => p.PartNo.Equals(PartNo)); q = q.Where(p => p.PartNo.Equals(PartNo));
if(UseStatus=="C") if (UseStatus == "C")
q = q.Where(p => p.UseStatusNo != "F" || p.UseStatusNo != "S"); q = q.Where(p => p.UseStatusNo != "F" || p.UseStatusNo != "S");
@ -122,6 +122,19 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return OutfitInfo; return OutfitInfo;
} }
/// <summary>
/// By 治具編號 查詢
/// </summary>
/// <param name="id">治具編號</param>
/// <returns></returns>
[HttpGet("ByOutfitNo/{id}")]
public async Task<ActionResult<OutfitInfo>> GetOutfitInfoByOutfitNo(string id)
{
var q = await _context.OutfitInfoes.Where(w => w.OutfitNo == id).FirstOrDefaultAsync();
return q;
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>

4
AMESCoreStudio.WebApi/Controllers/AMES/WipBarcodeOthersController.cs

@ -127,7 +127,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
var wipNo = wipBarcodeOther.WipNO; var wipNo = wipBarcodeOther.WipNO;
try try
{ {
var result_old = _context.WipBarcodeOthers.Where(w => w.WipNO == wipNo).ToList(); var result_old = _context.WipBarcodeOthers.Where(w => w.WipNO == wipNo).Select(s =>s.OtherID).ToList();
if (result_old.Count != 0) if (result_old.Count != 0)
{ {
_context.Entry(wipBarcodeOther).State = EntityState.Modified; _context.Entry(wipBarcodeOther).State = EntityState.Modified;
@ -145,7 +145,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
catch (Exception ex) catch (Exception ex)
{ {
result.Success = false; result.Success = false;
result.Msg = ex.InnerException.Message; result.Msg = ex.Message;
} }
return result; return result;
} }

34
AMESCoreStudio.WebApi/Controllers/AMES/WipBoardController.cs

@ -40,15 +40,39 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
public async Task<ActionResult<WipBoard>> GetWipBoard(string id) public async Task<ActionResult<WipBoard>> GetWipBoard(string id)
{ {
IQueryable<WipBoard> q = _context.WipBoards; IQueryable<WipBoard> q = _context.WipBoards;
var wipBoard = await q.Where(p => p.WipNo == id).FirstOrDefaultAsync();
return wipBoard;
}
/// <summary>
/// 查詢燒機時間
/// </summary>
/// <param name="id">WipNo</param>
/// <returns>0:沒資料 -1:欄位格式有誤</returns>
/// <remarks>0:沒資料 -1:欄位格式有誤</remarks>
[HttpGet("BITime/{id}")]
public async Task<ActionResult<double>> GetWipBoardToBITime(string id)
{
double Time = 0;
IQueryable<WipBoard> q = _context.WipBoards;
var wipBoard = await q.Where(p => p.WipNo == id).FirstOrDefaultAsync(); var wipBoard = await q.Where(p => p.WipNo == id).FirstOrDefaultAsync();
//if (wipBoard == null) if (wipBoard != null)
//{ {
// return NotFound(); try
//} {
if (!string.IsNullOrWhiteSpace(wipBoard.BiTime))
Time = double.Parse(wipBoard.BiTime);
return wipBoard; }
catch
{
Time = -1;
}
}
return Time;
} }
/// <summary> /// <summary>

12
AMESCoreStudio.WebApi/Controllers/AMES/WipOutfitController.cs

@ -57,6 +57,10 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
{ {
var q = from q1 in _context.WipOutfits.Where(w => w.WipNo.Contains(id)) var q = from q1 in _context.WipOutfits.Where(w => w.WipNo.Contains(id))
join q2 in _context.FactoryUnits on q1.UnitNo equals q2.UnitNo join q2 in _context.FactoryUnits on q1.UnitNo equals q2.UnitNo
join q3 in _context.RuleStations on q1.RuleStationID equals q3.RuleStationID
into cp
from q3 in cp.DefaultIfEmpty()
join q4 in _context.OutfitCommodityInfoes on q1.PartNo equals q4.CommodityNo
select new WipOutfitDto select new WipOutfitDto
{ {
WipOutfitID = q1.WipOutfitID, WipOutfitID = q1.WipOutfitID,
@ -64,8 +68,11 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
ItemNo = q1.ItemNo, ItemNo = q1.ItemNo,
OutfitNo = q1.OutfitNo, OutfitNo = q1.OutfitNo,
PartNo = q1.PartNo, PartNo = q1.PartNo,
PartNoName = q4.CommodityName,
UnitNo = q1.UnitNo, UnitNo = q1.UnitNo,
UnitNoName = q2.UnitName UnitNoName = q2.UnitName,
RuleStationID = q1.RuleStationID,
StationName = q3.StationDesc ?? ""
}; };
return await q.ToListAsync(); return await q.ToListAsync();
@ -114,9 +121,10 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
ResultModel<WipOutfit> result = new ResultModel<WipOutfit>(); ResultModel<WipOutfit> result = new ResultModel<WipOutfit>();
Helper helper = new Helper(_context); Helper helper = new Helper(_context);
wipOutfit.WipOutfitID = helper.GetIDKey("WIP_OUTFIT_ID").Result; wipOutfit.WipOutfitID = helper.GetIDKey("WIP_OUTFIT_ID").Result;
_context.WipOutfits.Add(wipOutfit);
try try
{ {
_context.WipOutfits.Add(wipOutfit);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
result.Success = true; result.Success = true;
result.Msg = "OK"; result.Msg = "OK";

31
AMESCoreStudio.WebApi/Controllers/AMES/WipSystemController.cs

@ -47,6 +47,37 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return wipSystem; return wipSystem;
} }
/// <summary>
/// 查詢燒機時間
/// </summary>
/// <param name="id">WipNo</param>
/// <returns>0:沒資料 -1:欄位格式有誤</returns>
/// <remarks>0:沒資料 -1:欄位格式有誤</remarks>
[HttpGet("BITime/{id}")]
public async Task<ActionResult<double>> GetWipSystemToBITime(string id)
{
double Time = 0;
IQueryable<WipSystem> q = _context.WipSystems;
var wipSystem = await q.Where(p => p.WipNo == id).FirstOrDefaultAsync();
if (wipSystem != null)
{
try
{
if (!string.IsNullOrWhiteSpace(wipSystem.BiTime))
Time = double.Parse(wipSystem.BiTime);
}
catch
{
Time = -1;
}
}
return Time;
}
/// <summary> /// <summary>
/// 新增工單資訊-系統組裝工程資訊 /// 新增工單資訊-系統組裝工程資訊
/// </summary> /// </summary>

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

@ -45,13 +45,17 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
try try
{ {
// KP||NG Input
if (barCodeCheckDto.inputItems == null) if (barCodeCheckDto.inputItems == null)
barCodeCheckDto.inputItems = new List<BarCodeCheckDto.inputItem>(); barCodeCheckDto.inputItems = new List<BarCodeCheckDto.inputItem>();
else else
barCodeCheckDto.inputItems = barCodeCheckDto.inputItems.Where(w => !string.IsNullOrWhiteSpace(w.inputType)).ToList(); barCodeCheckDto.inputItems = barCodeCheckDto.inputItems.Where(w => !string.IsNullOrWhiteSpace(w.inputType)).ToList();
// 治具 Input
if (barCodeCheckDto.outfits == null) if (barCodeCheckDto.outfits == null)
barCodeCheckDto.outfits = new List<BarCodeCheckDto.Outfit>(); barCodeCheckDto.outfits = new List<BarCodeCheckDto.Outfit>();
else
barCodeCheckDto.outfits = barCodeCheckDto.outfits.Where(w => !string.IsNullOrWhiteSpace(w.inputData)).ToList();
#region 欄位資料空值判斷 #region 欄位資料空值判斷
if (string.IsNullOrWhiteSpace(barCodeCheckDto.wipNo)) if (string.IsNullOrWhiteSpace(barCodeCheckDto.wipNo))
@ -142,6 +146,12 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
var q_rulestation = await ruleStationsController.GetRuleStationByFlow(barCodeCheckDto.flowRule, 0, 0); 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 燒機判斷
resultModel = (ResultModel<string>)await GetCheckBurn(barCodeCheckDto.wipNo, barCodeCheckDto.barcodeID, barCodeCheckDto.station);
if (!resultModel.Success)
return resultModel;
#endregion
#region KeyParts 判斷 #region KeyParts 判斷
if (barCodeCheckDto.inputItems.Where(w => !w.inputType.Contains("NG")).Any()) if (barCodeCheckDto.inputItems.Where(w => !w.inputType.Contains("NG")).Any())
{ {
@ -162,8 +172,9 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
#endregion #endregion
#region 治具判斷 #region 治具判斷
var resultOutfit = await CheckBarCodeOutfitAsync(barCodeCheckDto.outfits);
if (!resultOutfit.Success)
return (ResultModel<string>)resultOutfit;
#endregion #endregion
@ -337,6 +348,25 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
} }
#endregion #endregion
#region 判斷下一站為完工時.治具是否都有資料
//// 過站輸入組件數量
//var inputKPQty = barCodeCheckDto.outfits.Count();
//// 已記錄組件數量
//var BarCodeItemsQty = _context.BarcodeOutfits.Where(w => w.BarcodeID == barCodeCheckDto.barcodeID
// && w.WipID == barCodeCheckDto.wipID).Count();
//// WipKp DB 設定綁定組件數量
//var wipKpQty = _context.WipKps.Where(w => w.WipNo == barCodeCheckDto.wipNo
// && w.UnitNo == barCodeCheckDto.unitNo).Count();
//if (wipKpQty != inputKPQty + BarCodeItemsQty)
//{
// resultModel.Success = false;
// resultModel.Msg = "該作業站為流程最後最後一站,組件資料筆數不符,請確認";
// return resultModel;
//}
#endregion
// 過站判斷正常 往下處理Table // 過站判斷正常 往下處理Table
#region 內部序號輸入後新增 or 更新 #region 內部序號輸入後新增 or 更新
@ -347,45 +377,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
CU_Tables(barCodeCheckDto); CU_Tables(barCodeCheckDto);
//var barcodeInfo = barcodeInfoesController.GetBarcodeInfoes(barCodeCheckDto.barcodeID).Result.Value.FirstOrDefault(); // 維修組件更換
//barcodeInfo.RuleStationID = barCodeCheckDto.ruleStationID;
//barcodeInfo.RuleStatus = "P";
//var resultBarCodeInfo = await barcodeInfoesController.PutBarcodeInfoes(barcodeInfo);
//if (resultBarCodeInfo.Success)
//{
// // 新增 BarCodeStation
// BarcodeStation barcodeStation = new BarcodeStation
// {
// BarcodeID = barCodeCheckDto.barcodeID,
// WipID = barCodeCheckDto.wipID,
// RuleStationID = barCodeCheckDto.ruleStationID,
// RuleStatus = "P", //F 不良
// InputDate = DateTime.Now,
// LineId = barCodeCheckDto.line
// };
// await barcodeStationController.PostBarcodeStation(barcodeStation);
// // 新增 BarCodeItem
// // 先查詢已綁定組件數量
// //var BarCodeItems = await _pcsApi.GetBarcodeItemByBarCodeID(model.BarCodeID);
// //int KpItemQty = BarCodeItems.Count();
// foreach (var item_barCodeItem in update_BarCodeItem)
// {
// await barcodeItemsController.PutBarcodeItems(item_barCodeItem.BarcodeItemID, item_barCodeItem);
// }
// foreach (var item_barCodeItemChange in insert_BarCodeItemChange)
// {
// await barcodeItemChangesController.PostBarcodeItemChanges(item_barCodeItemChange);
// }
// #endregion
// #endregion
//}
foreach (var item_barCodeItem in update_BarCodeItem) foreach (var item_barCodeItem in update_BarCodeItem)
{ {
await barcodeItemsController.PutBarcodeItems(item_barCodeItem.BarcodeItemID, item_barCodeItem); await barcodeItemsController.PutBarcodeItems(item_barCodeItem.BarcodeItemID, item_barCodeItem);
@ -454,10 +446,20 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
} }
//if (!Table_BarcodeOutfit(barCodeCheckDto).Result.Success) if (!Table_BarcodeOutfit(barCodeCheckDto).Result.Success)
//{ {
}
if (!Table_OutfitInfo(barCodeCheckDto).Result.Success)
{
}
if (!Table_BurnInfo(barCodeCheckDto).Result.Success)
{
//} }
if (!Table_NgInfo(barCodeCheckDto).Result.Success) if (!Table_NgInfo(barCodeCheckDto).Result.Success)
{ {
@ -581,7 +583,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
} }
/// <summary> /// <summary>
/// BarcodeOutfit-治具 /// BarcodeOutfit-治具
/// </summary> /// </summary>
/// <param name="barCodeCheckDto"></param> /// <param name="barCodeCheckDto"></param>
/// <returns></returns> /// <returns></returns>
@ -610,6 +612,87 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return resut; return resut;
} }
/// <summary>
/// OutfitInfo-設備資料檔 使用次數
/// </summary>
/// <param name="barCodeCheckDto"></param>
/// <returns></returns>
private async Task<ResultModel<OutfitInfo>> Table_OutfitInfo(BarCodeCheckDto barCodeCheckDto)
{
OutfitInfoesController outfitInfoesController = new OutfitInfoesController(_context);
var OutfitsItem = barCodeCheckDto.outfits;
var resut = new ResultModel<OutfitInfo>();
// 新增 BarCodeStation
foreach (var item in OutfitsItem.Where(w => !string.IsNullOrWhiteSpace(w.inputData)))
{
var outfitInfo = await outfitInfoesController.GetOutfitInfoByOutfitNo(item.inputData.ToUpper());
if (outfitInfo.Value != null)
{
outfitInfo.Value.UseTimes += 1;
outfitInfo.Value.TotalTimes += 1;
outfitInfo.Value.UpdateDate = DateTime.Now;
await outfitInfoesController.PutOutfitInfo(outfitInfo.Value.CommodityID, outfitInfo.Value);
}
}
return resut;
}
/// <summary>
/// BurnInfo-燒入資料檔
/// </summary>
/// <param name="barCodeCheckDto"></param>
/// <returns></returns>
private async Task<ResultModel<BurnInfo>> Table_BurnInfo(BarCodeCheckDto model)
{
// 判斷是否有燒機時間
WipBoardController wipBoardController = new WipBoardController(_context);
var wipBoardTime = wipBoardController.GetWipBoardToBITime(model.wipNo).Result.Value;
WipSystemController wipSystemController = new WipSystemController(_context);
var wipSystemTime = wipSystemController.GetWipSystemToBITime(model.wipNo).Result.Value;
decimal PlanHour = 0;
if (wipBoardTime > 0)
PlanHour = (decimal)wipBoardTime;
else
PlanHour = (decimal)wipSystemTime;
BurnInfoeController burnInfoeController = new BurnInfoeController(_context);
var resut = new ResultModel<BurnInfo>();
// 判斷燒機時間是否足夠
var burnInfos = await burnInfoeController.GetBurnInfosByBarcodeID(model.barcodeID);
if (burnInfos.Value.Count() != 0)
{
// 取實際燒機完成時間 空白資料
var item = burnInfos.Value.Where(w => string.IsNullOrWhiteSpace(w.FinishTime.ToString())).FirstOrDefault();
if (item != null)
{
item.FinishTime = DateTime.Now;
item.OutUserID = 1;
item.UpdateDate = DateTime.Now;
resut = await burnInfoeController.PutBurnInfo(item);
}
}
else
{
// 新增 BarCodeStation
var burnInfo = new BurnInfo
{
BarcodeID = model.barcodeID,
WipNo = model.wipNo,
BurnPlanHour = PlanHour,
StartTime = DateTime.Now,
ScheduleFinishTime = DateTime.Now.AddMinutes((double)PlanHour),
InUserID = 0,
Status = 0
};
resut = await burnInfoeController.PostBurnInfo(burnInfo);
}
return resut;
}
/// <summary> /// <summary>
/// NgInfo-測試不良基本資料檔 /// NgInfo-測試不良基本資料檔
/// </summary> /// </summary>
@ -1296,6 +1379,62 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return resultModel; return resultModel;
} }
/// <summary>
/// 燒機判斷
/// </summary>
/// <param name="wipno">工單號碼</param>
/// <param name="barcodeID">內部序號ID</param>
/// <param name="stationID">作業站ID</param>
/// <returns></returns>
private async Task<IResultModel> GetCheckBurn(string wipno, int barcodeID, int stationID)
{
ResultModel<string> resultModel = new ResultModel<string>();
// 判斷作業站是否為燒機站
StationsesController stationsesController = new StationsesController(_context);
var station = await stationsesController.GetStations(stationID);
if (station.Value.Where(w => w.TypeNo == "F").Any())
{
// 判斷是否有燒機時間
WipBoardController wipBoardController = new WipBoardController(_context);
var wipBoardTime = wipBoardController.GetWipBoardToBITime(wipno).Result.Value;
WipSystemController wipSystemController = new WipSystemController(_context);
var wipSystemTime = wipSystemController.GetWipSystemToBITime(wipno).Result.Value;
if (wipBoardTime <= 0 && wipSystemTime <= 0)
{
resultModel.Success = false;
resultModel.Msg = "請確認燒機時間是否有填寫或者格式有誤";
return resultModel;
}
// 判斷燒機時間是否足夠
BurnInfoeController burnInfoeController = new BurnInfoeController(_context);
var burnInfo = await burnInfoeController.GetBurnInfosByBarcodeID(barcodeID);
if (burnInfo.Value.Count() != 0)
{
// 取實際燒機完成時間 空白資料
var item = burnInfo.Value.Where(w => string.IsNullOrWhiteSpace(w.FinishTime.ToString())).FirstOrDefault();
if (item != null)
{
// 現在時間 < 預計排程時間
if (DateTime.Now < item.ScheduleFinishTime)
{
resultModel.Success = false;
resultModel.Msg = "燒機排程完成時間【" + item.ScheduleFinishTime + "】尚未到達";
return resultModel;
}
}
}
resultModel.Success = true;
return resultModel;
}
else
{
resultModel.Success = true;
return resultModel;
}
}
/// <summary> /// <summary>
/// 確認組件狀態 /// 確認組件狀態
/// </summary> /// </summary>
@ -1484,18 +1623,22 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// 確認治具狀態 /// 確認治具狀態
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet("BarCodeOutfit")] //[HttpGet("BarCodeOutfit")]
public async Task<IResultModel> CheckBarCodeOutfitAsync(string barcodeNo, string wipNo, string outfitNo) private async Task<IResultModel> CheckBarCodeOutfitAsync([FromQuery] List<BarCodeCheckDto.Outfit> outfit)
{ {
ResultModel<string> resultModel = new ResultModel<string> { Success = false }; ResultModel<string> resultModel = new ResultModel<string> { Success = false };
#region 判斷是否有重複治具紀錄 #region 判斷是否有治具編號
BarcodeOutfitController barcodeOutfitController = new BarcodeOutfitController(_context); OutfitInfoesController outfitInfoesController = new OutfitInfoesController(_context);
var q = await barcodeOutfitController.GetBarcodeOutfitByBarcodeNo(barcodeNo); foreach (var outfitNo in outfit)
if (q.Value.Any(w => w.WipNo == wipNo && w.OutfitNo == outfitNo))
{ {
resultModel.Msg = "治具編號號碼【" + outfitNo + "】,已有在條碼【" + barcodeNo + "】使用紀錄"; var q = await outfitInfoesController.GetOutfitInfoByOutfitNo(outfitNo.inputData.ToUpper());
return resultModel;
if (q.Value == null)
{
resultModel.Msg = "中央治具找不到該治具編號【" + outfitNo.inputData + "】";
return resultModel;
}
} }
#endregion #endregion
resultModel.Success = true; resultModel.Success = true;

18
AMESCoreStudio.WebApi/DTO/AMES/WipOutfitDto.cs

@ -39,6 +39,12 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
public string PartNo { get; set; } public string PartNo { get; set; }
/// <summary>
/// 設備名稱
/// </summary>
public string PartNoName { get; set; }
/// <summary> /// <summary>
/// 生產單位代號 /// 生產單位代號
/// </summary> /// </summary>
@ -51,5 +57,17 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
public string UnitNoName { get; set; } public string UnitNoName { get; set; }
/// <summary>
/// 作業站ID
/// </summary>
public int? RuleStationID { get; set; }
/// <summary>
/// 作業站名稱
/// </summary>
public string StationName { get; set; }
} }
} }

14
AMESCoreStudio.WebApi/Models/AMES/BarcodeOutfit.cs

@ -16,10 +16,18 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[Table("BARCODE_OUTFIT", Schema = "JHAMES")] [Table("BARCODE_OUTFIT", Schema = "JHAMES")]
public partial class BarcodeOutfit public partial class BarcodeOutfit
{ {
/// <summary> /// <summary>
/// 生產序號 /// 條碼治具ID
/// </summary> /// </summary>
[Column("BARCODE_OUTFIT_ID")]
[DataMember]
[Key] [Key]
public int BarcodeOutfitID { get; set; }
/// <summary>
/// 生產序號
/// </summary>
[Column("BARCODE_NO")] [Column("BARCODE_NO")]
[StringLength(20)] [StringLength(20)]
[DataMember] [DataMember]
@ -28,7 +36,7 @@ namespace AMESCoreStudio.WebApi.Models.AMES
/// <summary> /// <summary>
/// 工單號碼 /// 工單號碼
/// </summary> /// </summary>
[Key]
[Column("WIP_NO")] [Column("WIP_NO")]
[StringLength(30)] [StringLength(30)]
[DataMember] [DataMember]
@ -37,7 +45,7 @@ namespace AMESCoreStudio.WebApi.Models.AMES
/// <summary> /// <summary>
/// 設備編號 /// 設備編號
/// </summary> /// </summary>
[Key]
[Column("OUTFIT_NO")] [Column("OUTFIT_NO")]
[StringLength(12)] [StringLength(12)]
[DataMember] [DataMember]

145
AMESCoreStudio.WebApi/Models/AMES/BurnInfo.cs

@ -0,0 +1,145 @@
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("BURN_INFO", Schema = "JHAMES")]
public partial class BurnInfo
{
/// <summary>
/// 燒機紀錄ID
/// </summary>
[Key]
[Column("BURN_ID")]
[DataMember]
public int BurnID { get; set; }
/// <summary>
/// 生產序號ID
/// </summary>
[Column("BARCODE_ID")]
[DataMember]
public int BarcodeID { get; set; }
/// <summary>
/// 工單號碼
/// </summary>
[Required]
[Column("WIP_NO")]
[StringLength(30)]
[DataMember]
public string WipNo { get; set; }
/// <summary>
/// 燒機型態(靜態/動態)
/// </summary>
[Column("BURN_TYPE")]
[StringLength(15)]
[DataMember]
public string BurnType { get; set; }
/// <summary>
/// 燒機臺車編號
/// </summary>
[Column("BURN_CAR")]
[StringLength(10)]
[DataMember]
public string BurnCar { get; set; }
/// <summary>
/// 計畫燒機時間
/// </summary>
[DataMember]
[Column("BURN_PLAN_HOUR", TypeName = "NUMBER(38,1)")]
public decimal BurnPlanHour { get; set; }
/// <summary>
/// 開始燒機時間
/// </summary>
[DataMember]
[Column("START_TIME", TypeName = "DATE")]
public DateTime StartTime { get; set; }
/// <summary>
/// 排程完成時間
/// </summary>
[DataMember]
[Column("SCHEDULE_FINISH_TIME", TypeName = "DATE")]
public DateTime ScheduleFinishTime { get; set; }
/// <summary>
/// 實際燒機完成時間
/// </summary>
[DataMember]
[Column("FINISH_TIME", TypeName = "DATE")]
public DateTime? FinishTime { get; set; }
/// <summary>
/// BI人員ID
/// </summary>
[DataMember]
[Column("IN_USERID")]
public int InUserID { get; set; }
/// <summary>
/// BO人員ID
/// </summary>
[DataMember]
[Column("OUT_USERID")]
public int? OutUserID { get; set; } = -1;
/// <summary>
/// 狀態
/// </summary>
[DataMember]
[Column("STATUS")]
public int Status { get; set; } = 0;
/// <summary>
/// 燒機區域位置
/// </summary>
[DataMember]
[Column("AREA_CODE")]
[StringLength(4)]
public string AreaCode { 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; } = DateTime.Now;
/// <summary>
/// 更新UserID
/// </summary>
[Column("UPDATE_USERID")]
[DataMember]
public int UpdateUserID { get; set; } = 0;
/// <summary>
/// 更新日期
/// </summary>
[Column("UPDATE_DATE")]
[DataMember]
public DateTime? UpdateDate { get; set; } = DateTime.Now;
}
}

1
AMESCoreStudio.WebApi/Models/AMES/WipKp.cs

@ -13,7 +13,6 @@ namespace AMESCoreStudio.WebApi.Models.AMES
/// 工單KP資訊資料檔 /// 工單KP資訊資料檔
/// </summary> /// </summary>
[Table("WIP_KP", Schema = "JHAMES")] [Table("WIP_KP", Schema = "JHAMES")]
[Index(nameof(ItemNo), nameof(KpNo), Name = "WIP_KP_AK1", IsUnique = true)]
public partial class WipKp public partial class WipKp
{ {
/// <summary> /// <summary>

7
AMESCoreStudio.WebApi/Models/AMES/WipOutfit.cs

@ -67,6 +67,13 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[DataMember] [DataMember]
public string UnitNo { get; set; } public string UnitNo { get; set; }
/// <summary>
/// 作業站
/// </summary>
[Column("RULE_STATION_ID")]
[DataMember]
public int? RuleStationID { get; set; }
/// <summary> /// <summary>
/// 建立UserID /// 建立UserID
/// </summary> /// </summary>

6
AMESCoreStudio.WebApi/Models/AMESContext.cs

@ -42,7 +42,6 @@ namespace AMESCoreStudio.WebApi
modelBuilder.Entity<PartMap>().HasKey(c => new { c.CorpSN }); modelBuilder.Entity<PartMap>().HasKey(c => new { c.CorpSN });
modelBuilder.Entity<BarcodeWip>().HasKey(c => new { c.WipID, c.BarcodeID }); modelBuilder.Entity<BarcodeWip>().HasKey(c => new { c.WipID, c.BarcodeID });
modelBuilder.Entity<BarcodeStation>().HasKey(c => new { c.BarcodeID ,c.WipID, c.RuleStationID ,c.RuleStatus ,c.InputDate }); modelBuilder.Entity<BarcodeStation>().HasKey(c => new { c.BarcodeID ,c.WipID, c.RuleStationID ,c.RuleStatus ,c.InputDate });
modelBuilder.Entity<BarcodeOutfit>().HasKey(c => new { c.BarcodeNo, c.WipNo, c.OutfitNo});
modelBuilder.Entity<WipRule>().HasKey(c => new { c.WipNO, c.RuleStationID, c.KeyNo }); modelBuilder.Entity<WipRule>().HasKey(c => new { c.WipNO, c.RuleStationID, c.KeyNo });
modelBuilder.Entity<WipMAC>().HasKey(c => new { c.WipNO, c.StartNO, c.EndNO }); modelBuilder.Entity<WipMAC>().HasKey(c => new { c.WipNO, c.StartNO, c.EndNO });
@ -761,6 +760,11 @@ namespace AMESCoreStudio.WebApi
/// </summary> /// </summary>
public virtual DbSet<SerialRule> SerialRules { get; set; } public virtual DbSet<SerialRule> SerialRules { get; set; }
/// <summary>
/// 燒機記錄資料表
/// </summary>
public virtual DbSet<BurnInfo> BurnInfos { get; set; }
} }
} }

Loading…
Cancel
Save