Browse Source

1. 製程管理

PTD
ray 3 years ago
parent
commit
69f5d638f4
  1. 333
      AMESCoreStudio.Web/Controllers/PCSController.cs
  2. 2
      AMESCoreStudio.Web/ViewModels/WipViewModel.cs
  3. 4
      AMESCoreStudio.Web/Views/PCS/PCS001.cshtml
  4. 8
      AMESCoreStudio.WebApi/Controllers/AMES/WipMACController.cs
  5. 2
      AMESCoreStudio.WebApi/Models/AMES/BarcodeType.cs
  6. 4
      AMESCoreStudio.WebApi/Models/AMES/WipBarcodeOther.cs
  7. 1
      AMESCoreStudio.WebApi/Models/AMES/WipMAC.cs
  8. 4
      AMESCoreStudio.WebApi/Models/AMES/WipSystem.cs

333
AMESCoreStudio.Web/Controllers/PCSController.cs

@ -17,6 +17,7 @@ using System;
using System.IO; using System.IO;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using System.ComponentModel.DataAnnotations;
namespace AMESCoreStudio.Web.Controllers namespace AMESCoreStudio.Web.Controllers
{ {
@ -42,6 +43,141 @@ namespace AMESCoreStudio.Web.Controllers
_env = env; _env = env;
} }
#region Funcion BLL
/// <summary>
/// 工單建立時判斷是否都有資料
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public string CheckWipInfoInsert(WipViewModel model)
{
string Msg = string.Empty;
if (string.IsNullOrWhiteSpace(model.wipInfo.LineID.ToString()))
Msg += "," + model.wipInfo.GetAttributeFrom<DisplayAttribute>(nameof(model.wipInfo.LineID)).Name;
if (string.IsNullOrWhiteSpace(model.wipInfo.UnitNO))
Msg += "," + model.wipInfo.GetAttributeFrom<DisplayAttribute>(nameof(model.wipInfo.UnitNO)).Name;
if (model.wipInfo.WipDueDate == DateTime.MinValue)
Msg += "," + model.wipInfo.GetAttributeFrom<DisplayAttribute>(nameof(model.wipInfo.WipDueDate)).Name;
if (model.wipInfo.WipScheduleDate == DateTime.MinValue)
Msg += "," + model.wipInfo.GetAttributeFrom<DisplayAttribute>(nameof(model.wipInfo.WipScheduleDate)).Name;
// 序號編碼sheet
// 系統
if (model.wipInfo.UnitNO == "B" || model.wipInfo.UnitNO == "P" || model.wipInfo.UnitNO == "T")
{
Msg += CheckWipInfoInsert_WipSystem(model.wipSystem);
}
// 板卡
else
{
Msg += CheckWipInfoInsert_WipBoard(model.wipBoard);
}
// 內部條碼
if (string.IsNullOrWhiteSpace(model.wipBarcode.StartNO) != string.IsNullOrWhiteSpace(model.wipBarcode.EndNO))
{
Msg += ",內部序號未填完整";
}
// 出貨序號
if (string.IsNullOrWhiteSpace(model.wipBarcodeOther.StartNO) != string.IsNullOrWhiteSpace(model.wipBarcodeOther.EndNO))
{
Msg += ",客戶序號未填完整";
}
// MAC
if (string.IsNullOrWhiteSpace(model.wipMAC.StartNO) != string.IsNullOrWhiteSpace(model.wipMAC.EndNO))
{
Msg += ",MAC未填完整";
}
return Msg;
}
public string CheckWipInfoInsert_WipSystem(WipSystem model)
{
string Msg = string.Empty;
// 判斷預設值是否更改過,如果有就判斷必填欄位
if (!string.IsNullOrWhiteSpace(model.BiTemperature) ||
!string.IsNullOrWhiteSpace(model.BiTime) ||
!string.IsNullOrWhiteSpace(model.BiMemo) ||
!string.IsNullOrWhiteSpace(model.Checksum) ||
!string.IsNullOrWhiteSpace(model.Cpu) ||
!string.IsNullOrWhiteSpace(model.DmiBi) ||
!string.IsNullOrWhiteSpace(model.Ec) ||
!string.IsNullOrWhiteSpace(model.Fw) ||
!string.IsNullOrWhiteSpace(model.Fw) ||
!string.IsNullOrWhiteSpace(model.Fw1) ||
!string.IsNullOrWhiteSpace(model.Fw2) ||
!string.IsNullOrWhiteSpace(model.Jumper) ||
!string.IsNullOrWhiteSpace(model.Memo) ||
!string.IsNullOrWhiteSpace(model.OsVer) ||
!string.IsNullOrWhiteSpace(model.PowerMode) ||
!string.IsNullOrWhiteSpace(model.Ram))
{
if (string.IsNullOrWhiteSpace(model.BiTemperature))
Msg += "," + model.GetAttributeFrom<DisplayAttribute>(nameof(model.BiTemperature)).Name;
if (string.IsNullOrWhiteSpace(model.BiTime))
Msg += "," + model.GetAttributeFrom<DisplayAttribute>(nameof(model.BiTime)).Name;
if (string.IsNullOrWhiteSpace(model.Checksum))
Msg += "," + model.GetAttributeFrom<DisplayAttribute>(nameof(model.Checksum)).Name;
if (string.IsNullOrWhiteSpace(model.Cpu))
Msg += "," + model.GetAttributeFrom<DisplayAttribute>(nameof(model.Cpu)).Name;
if (string.IsNullOrWhiteSpace(model.Ram))
Msg += "," + model.GetAttributeFrom<DisplayAttribute>(nameof(model.Ram)).Name;
}
return Msg;
}
public string CheckWipInfoInsert_WipBoard(WipBoard model)
{
string Msg = string.Empty;
// 判斷預設值是否更改過,如果有就判斷必填欄位
if (model.BiRatio != 0 ||
model.BiosVer != 0 ||
model.PartsBakeTime != 0 ||
model.PcbBake != 0 ||
!string.IsNullOrWhiteSpace(model.BiTemperature) ||
!string.IsNullOrWhiteSpace(model.BiTime) ||
!string.IsNullOrWhiteSpace(model.Checksum) ||
!string.IsNullOrWhiteSpace(model.BurnLocation))
{
if (string.IsNullOrWhiteSpace(model.BiTemperature))
Msg += "," + model.GetAttributeFrom<DisplayAttribute>(nameof(model.BiTemperature)).Name;
if (string.IsNullOrWhiteSpace(model.BiTime))
Msg += "," + model.GetAttributeFrom<DisplayAttribute>(nameof(model.BiTime)).Name;
if (string.IsNullOrWhiteSpace(model.Checksum))
Msg += "," + model.GetAttributeFrom<DisplayAttribute>(nameof(model.Checksum)).Name;
if (string.IsNullOrWhiteSpace(model.BurnLocation))
Msg += "," + model.GetAttributeFrom<DisplayAttribute>(nameof(model.BurnLocation)).Name;
}
return Msg;
}
#endregion
#region 下拉選單 #region 下拉選單
/// <summary> /// <summary>
@ -746,103 +882,127 @@ namespace AMESCoreStudio.Web.Controllers
model.wipInfo.ModelCheck = model.wipInfo.ModelCheck == "true" ? "Y" : "N"; model.wipInfo.ModelCheck = model.wipInfo.ModelCheck == "true" ? "Y" : "N";
model.wipInfo.InputFlag = model.wipInfo.InputFlag == "true" ? "Y" : "N"; model.wipInfo.InputFlag = model.wipInfo.InputFlag == "true" ? "Y" : "N";
model.wipInfo.Priority = model.wipInfo.Priority == "true" ? "Y" : "N"; model.wipInfo.Priority = model.wipInfo.Priority == "true" ? "Y" : "N";
//板卡
model.wipBoard.DipCarrier = model.wipBoard.DipCarrier == "true" ? "Y" : "N";
model.wipBoard.DipTape = model.wipBoard.DipTape == "true" ? "Y" : "N";
model.wipBoard.Burn = model.wipBoard.Burn == "true" ? "Y" : "N";
//系統
model.wipSystem.FinePackage = model.wipSystem.FinePackage == "true" ? "Y" : "N";
var Msg = CheckWipInfoInsert(model);
if (!string.IsNullOrWhiteSpace(Msg))
{
model.wipInfo.ECNCheck = model.wipInfo.ECNCheck == "Y" ? "true" : "false";
model.wipInfo.ModelCheck = model.wipInfo.ModelCheck == "Y" ? "true" : "false";
model.wipInfo.InputFlag = model.wipInfo.InputFlag == "Y" ? "true" : "false";
model.wipInfo.Priority = model.wipInfo.Priority == "Y" ? "true" : "false";
//板卡
model.wipBoard.DipCarrier = model.wipBoard.DipCarrier == "Y" ? "true" : "false";
model.wipBoard.DipTape = model.wipBoard.DipTape == "Y" ? "true" : "false";
model.wipBoard.Burn = model.wipBoard.Burn == "Y" ? "true" : "false";
//系統
model.wipSystem.FinePackage = model.wipSystem.FinePackage == "Y" ? "true" : "false";
ModelState.AddModelError("error", Msg);
GetCheckboxApproveLogo();
GetCheckboxCompanyLogo();
GetCheckboxPrintMode();
GetCheckboxWipAttr();
return View("PCS001", model);
}
result = await _pcsApi.PostWipInfo(JsonConvert.SerializeObject(model.wipInfo));
if (model.wipInfo.WipID == 0) if (result.Success)
{ {
result = await _pcsApi.PostWipInfo(JsonConvert.SerializeObject(model.wipInfo)); int wipID = int.Parse(result.Msg);
if (result.Success)
// 工單屬性
model.wipAtt.WipNO = model.wipInfo.WipNO;
await _pcsApi.PostWipAtt(JsonConvert.SerializeObject(model.wipAtt));
// 標籤
model.wipLabel.ApproveLogo = model.wipLabel.ApproveLogos.Count == 0 ? null : string.Join(',', model.wipLabel.ApproveLogos);
model.wipLabel.WipNO = model.wipInfo.WipNO;
await _pcsApi.PostWipLabel(JsonConvert.SerializeObject(model.wipLabel));
// 新增工單Log
WipLog wiplog = new WipLog();
wiplog.WipID = wipID;
wiplog.StatusNO = "N";
wiplog.WipDesc = ".";
await _pcsApi.PostWipLog(JsonConvert.SerializeObject(wiplog));
// 系統
if (model.wipInfo.UnitNO == "B" || model.wipInfo.UnitNO == "P" || model.wipInfo.UnitNO == "T")
{ {
int wipID = int.Parse(result.Msg); if (string.IsNullOrWhiteSpace(CheckWipInfoInsert_WipSystem(model.wipSystem)))
// 工單屬性
model.wipAtt.WipNO = model.wipInfo.WipNO;
await _pcsApi.PostWipAtt(JsonConvert.SerializeObject(model.wipAtt));
// 標籤
model.wipLabel.ApproveLogo = model.wipLabel.ApproveLogos.Count == 0 ? null : string.Join(',', model.wipLabel.ApproveLogos);
model.wipLabel.WipNO = model.wipInfo.WipNO;
await _pcsApi.PostWipLabel(JsonConvert.SerializeObject(model.wipLabel));
// 新增工單Log
WipLog wiplog = new WipLog();
wiplog.WipID = wipID;
wiplog.StatusNO = "N";
wiplog.WipDesc = ".";
await _pcsApi.PostWipLog(JsonConvert.SerializeObject(wiplog));
//// 系統
//if (model.wipInfo.UnitNO == "B" || model.wipInfo.UnitNO == "P" || model.wipInfo.UnitNO == "T")
//{
// model.wipSystem.ItemNo = model.wipAtt.ItemNO;
// model.wipSystem.WipNo = model.wipInfo.WipNO;
// await _pcsApi.PostWipSystem(JsonConvert.SerializeObject(model.wipSystem));
//}
//else
//// 板卡
//{
// model.wipBoard.DipCarrier = model.wipBoard.DipCarrier == "true" ? "Y" : "N";
// model.wipBoard.DipTape = model.wipBoard.DipTape == "true" ? "Y" : "N";
// model.wipBoard.Burn = model.wipBoard.Burn == "true" ? "Y" : "N";
// model.wipBoard.ItemNo = model.wipAtt.ItemNO;
// model.wipBoard.WipNo = model.wipInfo.WipNO;
// await _pcsApi.PostWipBoard(JsonConvert.SerializeObject(model.wipBoard));
//}
// 工單對應SOP Log
var q = await _pcsApi.GetWipSopQuery(itemNo: model.wipAtt.ItemNO, unitNo: model.wipInfo.UnitNO, state: "Y");
if (q.Data.Count() != 0)
{ {
model.wipSopLog.WipSopID = q.Data.FirstOrDefault().WipSopID; model.wipSystem.ItemNo = model.wipAtt.ItemNO;
await _pcsApi.PostWipSopLog(JsonConvert.SerializeObject(model.wipSopLog)); model.wipSystem.WipNo = model.wipInfo.WipNO;
await _pcsApi.PostWipSystem(JsonConvert.SerializeObject(model.wipSystem));
} }
}
// 內部條碼 else
if (!string.IsNullOrWhiteSpace(model.wipBarcode.StartNO)) // 板卡
{
if (string.IsNullOrWhiteSpace(CheckWipInfoInsert_WipSystem(model.wipSystem)))
{ {
model.wipBarcode.WipID = wipID; model.wipBoard.ItemNo = model.wipAtt.ItemNO;
model.wipBarcode.WipNO = model.wipInfo.WipNO; model.wipBoard.WipNo = model.wipInfo.WipNO;
model.wipBarcode.UnitNO = model.wipInfo.UnitNO; await _pcsApi.PostWipBoard(JsonConvert.SerializeObject(model.wipBoard));
result = await _pcsApi.PostWipBarcode(JsonConvert.SerializeObject(model.wipBarcode));
// 工單條碼規則設定文件檔
WipRule wipRule = new WipRule();
wipRule.WipNO = model.wipInfo.WipNO;
wipRule.KeyNo = "00";
wipRule.BarcodeLen = 14;
wipRule.BarcodeFormat = model.wipInfo.UnitNO;
result = await _pcsApi.PostWipRule(JsonConvert.SerializeObject(wipRule));
} }
}
// 出貨序號 // 工單對應SOP Log
if (!string.IsNullOrWhiteSpace(model.wipBarcodeOther.StartNO)) var q = await _pcsApi.GetWipSopQuery(itemNo: model.wipAtt.ItemNO, unitNo: model.wipInfo.UnitNO, state: "Y");
{ if (q.Data.Count() != 0)
var type_no = await _pcsApi.GetBarcodeTypeByTypeName("客戶條碼區間"); {
if (type_no.Any()) model.wipSopLog.WipSopID = q.Data.FirstOrDefault().WipSopID;
{ await _pcsApi.PostWipSopLog(JsonConvert.SerializeObject(model.wipSopLog));
model.wipBarcodeOther.WipNO = model.wipInfo.WipNO; }
model.wipBarcodeOther.TypeNO = type_no.FirstOrDefault().TypeNO;
result = await _pcsApi.PostWipBarcodeOther(JsonConvert.SerializeObject(model.wipBarcodeOther));
}
}
// MAC // 內部條碼
if (!string.IsNullOrWhiteSpace(model.wipMAC.StartNO)) if (!string.IsNullOrWhiteSpace(model.wipBarcode.StartNO) && !string.IsNullOrWhiteSpace(model.wipBarcode.EndNO))
{
model.wipBarcode.WipID = wipID;
model.wipBarcode.WipNO = model.wipInfo.WipNO;
model.wipBarcode.UnitNO = model.wipInfo.UnitNO;
result = await _pcsApi.PostWipBarcode(JsonConvert.SerializeObject(model.wipBarcode));
// 工單條碼規則設定文件檔
WipRule wipRule = new WipRule();
wipRule.WipNO = model.wipInfo.WipNO;
wipRule.KeyNo = "00";
wipRule.BarcodeLen = 14;
wipRule.BarcodeFormat = model.wipInfo.UnitNO;
result = await _pcsApi.PostWipRule(JsonConvert.SerializeObject(wipRule));
}
// 出貨序號
if (!string.IsNullOrWhiteSpace(model.wipBarcodeOther.StartNO) && !string.IsNullOrWhiteSpace(model.wipBarcodeOther.EndNO))
{
var type_no = await _pcsApi.GetBarcodeTypeByTypeName("客戶條碼區間");
if (type_no.Any())
{ {
model.wipMAC.WipNO = model.wipInfo.WipNO; model.wipBarcodeOther.WipNO = model.wipInfo.WipNO;
result = await _pcsApi.PostWipMAC(JsonConvert.SerializeObject(model.wipMAC)); model.wipBarcodeOther.TypeNO = type_no.FirstOrDefault().TypeNO;
result = await _pcsApi.PostWipBarcodeOther(JsonConvert.SerializeObject(model.wipBarcodeOther));
} }
} }
}
else // MAC
{ if (!string.IsNullOrWhiteSpace(model.wipMAC.StartNO) && !string.IsNullOrWhiteSpace(model.wipMAC.EndNO))
result = await _pcsApi.PostWipInfo(JsonConvert.SerializeObject(model.wipInfo)); {
model.wipMAC.WipNO = model.wipInfo.WipNO;
result = await _pcsApi.PostWipMAC(JsonConvert.SerializeObject(model.wipMAC));
}
} }
if (result.Success) if (result.Success)
{ {
var _msg = model.wipInfo.WipID == 0 ? "添加成功!" : "修改成功!"; var _msg = model.wipInfo.WipID == 0 ? "添加成功!" : "修改成功!";
return RedirectToAction("Refresh", "Home", new { msg = _msg }); return RedirectToAction("PCB", "Home", new { msg = _msg });
} }
else else
{ {
@ -909,7 +1069,7 @@ namespace AMESCoreStudio.Web.Controllers
GetCheckboxApproveLogo(model.wipLabel != null ? model.wipLabel.ApproveLogo : null); GetCheckboxApproveLogo(model.wipLabel != null ? model.wipLabel.ApproveLogo : null);
GetCheckboxCompanyLogo(model.wipLabel != null ? model.wipLabel.CompanyLogo : null); GetCheckboxCompanyLogo(model.wipLabel != null ? model.wipLabel.CompanyLogo : null);
GetCheckboxPrintMode(model.wipLabel != null ? model.wipLabel.PrintMode : null); GetCheckboxPrintMode(model.wipLabel != null ? model.wipLabel.PrintMode : null);
GetCheckboxWipAttr(model.wipLabel != null ? model.wipLabel.WipAttr :null); GetCheckboxWipAttr(model.wipLabel != null ? model.wipLabel.WipAttr : null);
return View(model); return View(model);
} }
@ -1585,4 +1745,15 @@ namespace AMESCoreStudio.Web.Controllers
return PartialView("_SOPPartial", Json(new Table() { count = 0, data = null })); return PartialView("_SOPPartial", Json(new Table() { count = 0, data = null }));
} }
} }
public static class ObjectExtension
{
public static T GetAttributeFrom<T>(this object instance, string propertyName) where T : Attribute
{
var attributeType = typeof(T);
var property = instance.GetType().GetProperty(propertyName);
if (property == null) return default(T);
return (T)property.GetCustomAttributes(attributeType, false).FirstOrDefault();
}
}
} }

2
AMESCoreStudio.Web/ViewModels/WipViewModel.cs

@ -45,8 +45,6 @@ namespace AMESCoreStudio.Web.ViewModels
public WipMAC wipMAC { get; set; } public WipMAC wipMAC { get; set; }
public WipRule wipRule { get; set; }
public WipBarcodeOther wipBarcodeOther { get; set; } public WipBarcodeOther wipBarcodeOther { get; set; }

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

@ -23,7 +23,7 @@
<div class="layui-form-item"> <div class="layui-form-item">
<input asp-for="wipInfo.InputFlag" type="checkbox" title="判斷前製程是否已經投入" /> <input asp-for="wipInfo.InputFlag" type="checkbox" title="判斷前製程是否已經投入" />
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
@ -632,7 +632,7 @@
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">FINE_PACKAGE</label> <label class="layui-form-label">FINE_PACKAGE</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input class="layui-input" asp-for="wipSystem.FinePackage" autocomplete="off" /> <input asp-for="wipSystem.FinePackage" type="checkbox" title="是否燒入" />
</div> </div>
</div> </div>
</div> </div>

8
AMESCoreStudio.WebApi/Controllers/AMES/WipMACController.cs

@ -47,10 +47,10 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
var WipMAC = await q.Where(p => p.WipNO == id).FirstOrDefaultAsync(); var WipMAC = await q.Where(p => p.WipNO == id).FirstOrDefaultAsync();
if (WipMAC == null) //if (WipMAC == null)
{ //{
return NotFound(); // return NotFound();
} //}
return WipMAC; return WipMAC;
} }

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

@ -75,7 +75,7 @@ namespace AMESCoreStudio.WebApi.Models.AMES
/// <summary> /// <summary>
/// 更新日期 /// 更新日期
/// </summary> /// </summary>
[Column("UPDATE_DATE", TypeName = "DATE")] [Column("UPDATE_DATE")]
[DataMember] [DataMember]
public DateTime UpdateDate { get; set; } = System.DateTime.Now; public DateTime UpdateDate { get; set; } = System.DateTime.Now;
} }

4
AMESCoreStudio.WebApi/Models/AMES/WipBarcodeOther.cs

@ -26,7 +26,7 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[Column("WIP_NO")] [Column("WIP_NO")]
[DataMember] [DataMember]
[Required(ErrorMessage = "{0},不能空白")] [Required(ErrorMessage = "{0},不能空白")]
[Display(Name = "")] [Display(Name = "工單號碼")]
public string WipNO { get; set; } public string WipNO { get; set; }
/// <summary> /// <summary>
@ -61,7 +61,7 @@ namespace AMESCoreStudio.WebApi.Models.AMES
/// </summary> /// </summary>
[Column("TITLE")] [Column("TITLE")]
[DataMember] [DataMember]
[Display(Name = "")] [Display(Name = "title")]
public string Title { get; set; } public string Title { get; set; }
/// <summary> /// <summary>

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

@ -17,6 +17,7 @@ namespace AMESCoreStudio.WebApi.Models.AMES
/// </summary> /// </summary>
[Key] [Key]
[Column("WIP_NO")] [Column("WIP_NO")]
[Display(Name = "工單號碼")]
[Required(ErrorMessage = "{0},不能空白")] [Required(ErrorMessage = "{0},不能空白")]
[DataMember] [DataMember]
public string WipNO { get; set; } public string WipNO { get; set; }

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

@ -120,13 +120,13 @@ namespace AMESCoreStudio.WebApi.Models.AMES
public string Ram { get; set; } public string Ram { get; set; }
/// <summary> /// <summary>
/// FINE_PACKAGE /// 是否為精包裝Y/N
/// </summary> /// </summary>
[Required] [Required]
[Column("FINE_PACKAGE")] [Column("FINE_PACKAGE")]
[StringLength(2)] [StringLength(2)]
[DataMember] [DataMember]
[Display(Name = "RAM")] [Display(Name = "是否為精包裝")]
public string FinePackage { get; set; } public string FinePackage { get; set; }
/// <summary> /// <summary>

Loading…
Cancel
Save