Browse Source

1. 修正工單鎖定相關UI問題

2. 工單投產中修正加入 判斷工單數量小於已投入數
3. 過站加入 第一站判斷工單數量是否已經小於已投入數
PTD
ray 2 years ago
parent
commit
54f6cda0ca
  1. 45
      AMESCoreStudio.Web/Controllers/PCSController.cs
  2. 14
      AMESCoreStudio.Web/Views/PCS/PCS012.cshtml
  3. 33
      AMESCoreStudio.Web/Views/PCS/PCS034.cshtml
  4. 1
      AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs
  5. 57
      AMESCoreStudio.WebApi/Controllers/AMES/WipLockController.cs
  6. 11
      AMESCoreStudio.WebApi/Controllers/BLL/BarCodeCheckController.cs
  7. 20
      AMESCoreStudio.WebApi/DTO/AMES/WipLockDto.cs
  8. 2
      AMESCoreStudio.WebApi/Models/AMES/WipLock.cs
  9. 8
      AMESCoreStudio.WebApi/Models/AMES/WipMAC.cs

45
AMESCoreStudio.Web/Controllers/PCSController.cs

@ -3213,6 +3213,12 @@ namespace AMESCoreStudio.Web.Controllers
} }
} }
// 修改工單數量不能小於已投入數量
if (model.wipInfo.CompleteQTY > model.wipInfo.PlanQTY)
{
Msg += ",修改工單數量不能小於已投入數量";
}
if (!string.IsNullOrWhiteSpace(Msg)) if (!string.IsNullOrWhiteSpace(Msg))
{ {
if (Msg.StartsWith(",")) if (Msg.StartsWith(","))
@ -3837,7 +3843,8 @@ namespace AMESCoreStudio.Web.Controllers
model.WipAtt = await _pcsApi.GetWipAtt(model.WipInfo.WipNO); model.WipAtt = await _pcsApi.GetWipAtt(model.WipInfo.WipNO);
model.WipBarcodes = await _pcsApi.GetWipBarcode(model.WipInfo.WipNO); model.WipBarcodes = await _pcsApi.GetWipBarcode(model.WipInfo.WipNO);
model.RuleStation = await _basApi.GetRuleStationsByFlow(model.WipInfo.FlowRuleID); model.RuleStation = await _basApi.GetRuleStationsByFlow(model.WipInfo.FlowRuleID);
model.WipInfo.WipType = model.WipInfo.WipType == "S" ? "標準工單" : "重工工單"; model.WipInfo.WipType = model.WipInfo.WipType == "S" ? "標準工單" :
model.WipInfo.WipType == "R" ? "重工工單" : "無序號工單";
//model.RuleStation = model.RuleStation.OrderBy(o => o.Sequence); //model.RuleStation = model.RuleStation.OrderBy(o => o.Sequence);
} }
return View(model); return View(model);
@ -3855,7 +3862,8 @@ namespace AMESCoreStudio.Web.Controllers
model.WipAtt = await _pcsApi.GetWipAtt(model.WipInfo.WipNO); model.WipAtt = await _pcsApi.GetWipAtt(model.WipInfo.WipNO);
model.WipBarcodes = await _pcsApi.GetWipBarcode(model.WipInfo.WipNO); model.WipBarcodes = await _pcsApi.GetWipBarcode(model.WipInfo.WipNO);
model.RuleStation = await _basApi.GetRuleStationsByFlow(model.WipInfo.FlowRuleID); model.RuleStation = await _basApi.GetRuleStationsByFlow(model.WipInfo.FlowRuleID);
model.WipInfo.WipType = model.WipInfo.WipType == "S" ? "標準工單" : "重工工單"; model.WipInfo.WipType = model.WipInfo.WipType == "S" ? "標準工單" :
model.WipInfo.WipType == "R" ? "重工工單" : "無序號工單";
//model.RuleStation = model.RuleStation.OrderBy(o => o.Sequence); //model.RuleStation = model.RuleStation.OrderBy(o => o.Sequence);
} }
return View(model); return View(model);
@ -4710,6 +4718,7 @@ namespace AMESCoreStudio.Web.Controllers
if (ModelState.IsValid) if (ModelState.IsValid)
{ {
model.LockUserID = GetLogInUserID();
result = await _pcsApi.PostWipLock(JsonConvert.SerializeObject(model)); result = await _pcsApi.PostWipLock(JsonConvert.SerializeObject(model));
if (result.Success) if (result.Success)
{ {
@ -4763,13 +4772,13 @@ namespace AMESCoreStudio.Web.Controllers
return View(); return View();
} }
model.WipLockID = result_WipLock.Data.FirstOrDefault().WipLockID; model.WipLockID = result_WipLock.Data.Where(w => w.LockStatus == "0" && w.StationID == model.StationID).FirstOrDefault().WipLockID;
closeView = false; closeView = false;
} }
IResultModel result; IResultModel result;
model.UnLockDate = DateTime.Now; model.UnLockDate = DateTime.Now;
model.UnLockUserID = 0; model.UnLockUserID = GetLogInUserID();
result = await _pcsApi.PutWipLock(JsonConvert.SerializeObject(model)); result = await _pcsApi.PutWipLock(JsonConvert.SerializeObject(model));
if (result.Success) if (result.Success)
{ {
@ -4814,7 +4823,7 @@ namespace AMESCoreStudio.Web.Controllers
IResultModel result; IResultModel result;
model.UnLockDate = DateTime.Now; model.UnLockDate = DateTime.Now;
model.UnLockUserID = 0; model.UnLockUserID = GetLogInUserID();
result = await _pcsApi.PutWipLock(JsonConvert.SerializeObject(model)); result = await _pcsApi.PutWipLock(JsonConvert.SerializeObject(model));
if (result.Success) if (result.Success)
{ {
@ -4918,7 +4927,7 @@ namespace AMESCoreStudio.Web.Controllers
StatusID = q.FirstOrDefault().StatusID, StatusID = q.FirstOrDefault().StatusID,
LockStatus = 0, LockStatus = 0,
LockReason = model.LockReason, LockReason = model.LockReason,
LockUserID = 0 LockUserID = GetLogInUserID()
}; };
result = await _pcsApi.PostBarcodeLock(JsonConvert.SerializeObject(barcodeLock)); result = await _pcsApi.PostBarcodeLock(JsonConvert.SerializeObject(barcodeLock));
if (result.Success) if (result.Success)
@ -4974,7 +4983,7 @@ namespace AMESCoreStudio.Web.Controllers
StatusID = item.StatusID, StatusID = item.StatusID,
LockStatus = 0, LockStatus = 0,
LockReason = model.LockReason, LockReason = model.LockReason,
LockUserID = 0 LockUserID = GetLogInUserID()
}; };
result = await _pcsApi.PostBarcodeLock(JsonConvert.SerializeObject(barcodeLock)); result = await _pcsApi.PostBarcodeLock(JsonConvert.SerializeObject(barcodeLock));
if (result.Success) if (result.Success)
@ -5061,7 +5070,7 @@ namespace AMESCoreStudio.Web.Controllers
StatusID = q_BarcodeInfo.FirstOrDefault().StatusID, StatusID = q_BarcodeInfo.FirstOrDefault().StatusID,
LockStatus = 0, LockStatus = 0,
LockReason = model.LockReason, LockReason = model.LockReason,
LockUserID = 0 LockUserID = GetLogInUserID()
}; };
result = await _pcsApi.PostBarcodeLock(JsonConvert.SerializeObject(barcodeLock)); result = await _pcsApi.PostBarcodeLock(JsonConvert.SerializeObject(barcodeLock));
if (result.Success) if (result.Success)
@ -5131,7 +5140,7 @@ namespace AMESCoreStudio.Web.Controllers
BarcodeLock barcodeLock = q1.Where(w => w.LockStatus == 0).FirstOrDefault(); BarcodeLock barcodeLock = q1.Where(w => w.LockStatus == 0).FirstOrDefault();
barcodeLock.LockStatus = 1; barcodeLock.LockStatus = 1;
barcodeLock.UnLockReason = model.UnLockReason; barcodeLock.UnLockReason = model.UnLockReason;
barcodeLock.UnLockUserID = 0; barcodeLock.UnLockUserID = GetLogInUserID();
barcodeLock.UnLockDate = System.DateTime.Now; barcodeLock.UnLockDate = System.DateTime.Now;
var aaa = JsonConvert.SerializeObject(barcodeLock); var aaa = JsonConvert.SerializeObject(barcodeLock);
result = await _pcsApi.PutBarcodeLock(JsonConvert.SerializeObject(barcodeLock)); result = await _pcsApi.PutBarcodeLock(JsonConvert.SerializeObject(barcodeLock));
@ -5179,7 +5188,7 @@ namespace AMESCoreStudio.Web.Controllers
BarcodeLock barcodeLock = q2.Where(w => w.LockStatus == 0).FirstOrDefault(); BarcodeLock barcodeLock = q2.Where(w => w.LockStatus == 0).FirstOrDefault();
barcodeLock.LockStatus = 1; barcodeLock.LockStatus = 1;
barcodeLock.UnLockReason = model.UnLockReason; barcodeLock.UnLockReason = model.UnLockReason;
barcodeLock.UnLockUserID = 0; barcodeLock.UnLockUserID = GetLogInUserID();
barcodeLock.UnLockDate = System.DateTime.Now; barcodeLock.UnLockDate = System.DateTime.Now;
result = await _pcsApi.PutBarcodeLock(JsonConvert.SerializeObject(barcodeLock)); result = await _pcsApi.PutBarcodeLock(JsonConvert.SerializeObject(barcodeLock));
if (result.Success) if (result.Success)
@ -5264,7 +5273,7 @@ namespace AMESCoreStudio.Web.Controllers
BarcodeLock barcodeLock = q2.Where(w => w.LockStatus == 0).FirstOrDefault(); BarcodeLock barcodeLock = q2.Where(w => w.LockStatus == 0).FirstOrDefault();
barcodeLock.LockStatus = 1; barcodeLock.LockStatus = 1;
barcodeLock.UnLockReason = model.UnLockReason; barcodeLock.UnLockReason = model.UnLockReason;
barcodeLock.UnLockUserID = 0; barcodeLock.UnLockUserID = GetLogInUserID();
barcodeLock.UnLockDate = System.DateTime.Now; barcodeLock.UnLockDate = System.DateTime.Now;
result = await _pcsApi.PutBarcodeLock(JsonConvert.SerializeObject(barcodeLock)); result = await _pcsApi.PutBarcodeLock(JsonConvert.SerializeObject(barcodeLock));
if (result.Success) if (result.Success)
@ -5359,6 +5368,7 @@ namespace AMESCoreStudio.Web.Controllers
IResultModel result; IResultModel result;
model.WipBarcode.WipNO = model.WipInfo.WipNO; model.WipBarcode.WipNO = model.WipInfo.WipNO;
model.WipBarcode.CreateUserID = GetLogInUserID();
//model.WipBarcode.WipID = model.WipInfo.WipID; //model.WipBarcode.WipID = model.WipInfo.WipID;
//model.WipBarcode.UnitNO = model.WipInfo.UnitNO; //model.WipBarcode.UnitNO = model.WipInfo.UnitNO;
@ -5397,7 +5407,8 @@ namespace AMESCoreStudio.Web.Controllers
model.WipAtt = await _pcsApi.GetWipAtt(model.WipInfo.WipNO); model.WipAtt = await _pcsApi.GetWipAtt(model.WipInfo.WipNO);
model.WipBarcodeOther = await _pcsApi.GetWipBarcodeOther(model.WipInfo.WipNO); model.WipBarcodeOther = await _pcsApi.GetWipBarcodeOther(model.WipInfo.WipNO);
model.RuleStation = await _basApi.GetRuleStationsByFlow(model.WipInfo.FlowRuleID); model.RuleStation = await _basApi.GetRuleStationsByFlow(model.WipInfo.FlowRuleID);
model.WipInfo.WipType = model.WipInfo.WipType == "S" ? "標準工單" : "重工工單"; model.WipInfo.WipType = model.WipInfo.WipType == "S" ? "標準工單" :
model.WipInfo.WipType == "R" ? "重工工單" : "無序號工單";
//model.RuleStation = model.RuleStation.OrderBy(o => o.Sequence); //model.RuleStation = model.RuleStation.OrderBy(o => o.Sequence);
} }
return View(model); return View(model);
@ -5415,7 +5426,8 @@ namespace AMESCoreStudio.Web.Controllers
model.WipAtt = await _pcsApi.GetWipAtt(model.WipInfo.WipNO); model.WipAtt = await _pcsApi.GetWipAtt(model.WipInfo.WipNO);
model.WipBarcodes = await _pcsApi.GetWipBarcode(model.WipInfo.WipNO); model.WipBarcodes = await _pcsApi.GetWipBarcode(model.WipInfo.WipNO);
model.RuleStation = await _basApi.GetRuleStationsByFlow(model.WipInfo.FlowRuleID); model.RuleStation = await _basApi.GetRuleStationsByFlow(model.WipInfo.FlowRuleID);
model.WipInfo.WipType = model.WipInfo.WipType == "S" ? "標準工單" : "重工工單"; model.WipInfo.WipType = model.WipInfo.WipType == "S" ? "標準工單" :
model.WipInfo.WipType == "R" ? "重工工單" : "無序號工單";
//model.RuleStation = model.RuleStation.OrderBy(o => o.Sequence); //model.RuleStation = model.RuleStation.OrderBy(o => o.Sequence);
} }
return View(model); return View(model);
@ -5600,6 +5612,7 @@ namespace AMESCoreStudio.Web.Controllers
IResultModel result; IResultModel result;
model.WipBarcode.WipNO = model.WipInfo.WipNO; model.WipBarcode.WipNO = model.WipInfo.WipNO;
model.WipBarcode.CreateUserID = GetLogInUserID();
//model.WipBarcode.WipID = model.WipInfo.WipID; //model.WipBarcode.WipID = model.WipInfo.WipID;
//model.WipBarcode.UnitNO = model.WipInfo.UnitNO; //model.WipBarcode.UnitNO = model.WipInfo.UnitNO;
@ -5638,7 +5651,8 @@ namespace AMESCoreStudio.Web.Controllers
model.WipAtt = await _pcsApi.GetWipAtt(model.WipInfo.WipNO); model.WipAtt = await _pcsApi.GetWipAtt(model.WipInfo.WipNO);
model.WipBarcodes = await _pcsApi.GetWipBarcode(model.WipInfo.WipNO); model.WipBarcodes = await _pcsApi.GetWipBarcode(model.WipInfo.WipNO);
model.RuleStation = await _basApi.GetRuleStationsByFlow(model.WipInfo.FlowRuleID); model.RuleStation = await _basApi.GetRuleStationsByFlow(model.WipInfo.FlowRuleID);
model.WipInfo.WipType = model.WipInfo.WipType == "S" ? "標準工單" : "重工工單"; model.WipInfo.WipType = model.WipInfo.WipType == "S" ? "標準工單" :
model.WipInfo.WipType == "R" ? "重工工單" : "無序號工單";
//model.RuleStation = model.RuleStation.OrderBy(o => o.Sequence); //model.RuleStation = model.RuleStation.OrderBy(o => o.Sequence);
} }
return View(model); return View(model);
@ -5656,7 +5670,8 @@ namespace AMESCoreStudio.Web.Controllers
model.WipAtt = await _pcsApi.GetWipAtt(model.WipInfo.WipNO); model.WipAtt = await _pcsApi.GetWipAtt(model.WipInfo.WipNO);
model.WipBarcodes = await _pcsApi.GetWipBarcode(model.WipInfo.WipNO); model.WipBarcodes = await _pcsApi.GetWipBarcode(model.WipInfo.WipNO);
model.RuleStation = await _basApi.GetRuleStationsByFlow(model.WipInfo.FlowRuleID); model.RuleStation = await _basApi.GetRuleStationsByFlow(model.WipInfo.FlowRuleID);
model.WipInfo.WipType = model.WipInfo.WipType == "S" ? "標準工單" : "重工工單"; model.WipInfo.WipType = model.WipInfo.WipType == "S" ? "標準工單" :
model.WipInfo.WipType == "R" ? "重工工單" : "無序號工單";
//model.RuleStation = model.RuleStation.OrderBy(o => o.Sequence); //model.RuleStation = model.RuleStation.OrderBy(o => o.Sequence);
} }
return View(model); return View(model);

14
AMESCoreStudio.Web/Views/PCS/PCS012.cshtml

@ -210,6 +210,12 @@
field: 'lockReason', field: 'lockReason',
title: '鎖定原因' title: '鎖定原因'
}, },
{
field: 'lockUserName',
title: '鎖定人員',
width: 100,
sort: true
},
{ {
field: 'lockDate', field: 'lockDate',
title: '鎖定日期', title: '鎖定日期',
@ -220,6 +226,12 @@
field: 'unLockReason', field: 'unLockReason',
title: '解鎖原因' title: '解鎖原因'
}, },
{
field: 'unLockUserName',
title: '解鎖人員',
width: 100,
sort: true
},
{ {
field: 'unLockDate', field: 'unLockDate',
title: '解鎖日期', title: '解鎖日期',
@ -233,7 +245,7 @@
align: 'center', align: 'center',
fixed: 'right', fixed: 'right',
templet: function (d) { templet: function (d) {
if (d.unLockReason == null) { if (d.unLockDate == null) {
return '<button class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">解鎖</button>' return '<button class="layui-btn layui-btn-normal layui-btn-xs layui-icon layui-icon-edit" lay-event="edit">解鎖</button>'
} }
else { else {

33
AMESCoreStudio.Web/Views/PCS/PCS034.cshtml

@ -28,6 +28,7 @@
<input asp-for="wipInfo.UnitNO" type="hidden" value="@Model.wipInfo.UnitNO" /> <input asp-for="wipInfo.UnitNO" type="hidden" value="@Model.wipInfo.UnitNO" />
<input asp-for="wipInfo.WipNO" type="hidden" value="@Model.wipInfo.WipNO" /> <input asp-for="wipInfo.WipNO" type="hidden" value="@Model.wipInfo.WipNO" />
<input asp-for="wipAtt.ItemNO" type="hidden" value="@Model.wipAtt.ItemNO" /> <input asp-for="wipAtt.ItemNO" type="hidden" value="@Model.wipAtt.ItemNO" />
<input asp-for="wipInfo.CompleteQTY" type="hidden" value="@Model.wipInfo.CompleteQTY" />
<input asp-for="wipBarcodeOther.OtherID" type="hidden" value="@if(Model.wipBarcodeOther != null){ <input asp-for="wipBarcodeOther.OtherID" type="hidden" value="@if(Model.wipBarcodeOther != null){
@Model.wipBarcodeOther.OtherID @Model.wipBarcodeOther.OtherID
}" /> }" />
@ -477,15 +478,9 @@
<label class="layui-form-label">DIP</label> <label class="layui-form-label">DIP</label>
<div class="layui-input-block"> <div class="layui-input-block">
<cl-checkbox asp-items="@ViewBag.GetCheckboxDIP" asp-for="wipBoard.DipSides" asp-skin="defult"></cl-checkbox> <cl-checkbox asp-items="@ViewBag.GetCheckboxDIP" asp-for="wipBoard.DipSides" asp-skin="defult"></cl-checkbox>
<input @if (Model.wipBoard != null) { <input @if (Model.wipBoard != null) { @(Model.wipBoard.DipCarrier == "Y" ? "checked" : "") } type="checkbox" title="CARRIER" name="wipBoard.DipCarrier" />
@(Model.wipBoard.DipCarrier == "Y" ? "checked" : "") <input @if (Model.wipBoard != null) { @(Model.wipBoard.DipTape == "Y" ? "checked" : "") } type="checkbox" title="貼付膠帶" name="wipBoard.DipTape" />
} type="checkbox" title="CARRIER" name="wipBoard.DipCarrier" /> <input @if (Model.wipBoard != null) { @(Model.wipBoard.DipSolderMask == "Y" ? "checked" : "") } type="checkbox" title="點防焊膠" name="wipBoard.DipSolderMask" />
<input @if (Model.wipBoard != null) {
@(Model.wipBoard.DipTape == "Y" ? "checked" : "")
} type="checkbox" title="貼付膠帶" name="wipBoard.DipTape" />
<input @if (Model.wipBoard != null) {
@(Model.wipBoard.DipSolderMask == "Y" ? "checked" : "")
} type="checkbox" title="點防焊膠" name="wipBoard.DipSolderMask" />
</div> </div>
</div> </div>
</div> </div>
@ -501,9 +496,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 @if (Model.wipBoard != null) { <input @if (Model.wipBoard != null) { @(Model.wipBoard.Burn == "Y" ? "checked" : "") } type="checkbox" title="是否燒入" name="wipBoard.Burn" />
@(Model.wipBoard.Burn == "Y" ? "checked" : "")
} type="checkbox" title="是否燒入" name="wipBoard.Burn" />
</div> </div>
<label class="layui-form-label">燒機位置</label> <label class="layui-form-label">燒機位置</label>
@ -524,9 +517,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 @if (Model.wipBoard != null) { <input @if (Model.wipBoard != null) { @(Model.wipBoard.ISPartsBake == "Y" ? "checked" : "") } type="checkbox" title="零件是否需要烘烤" name="wipBoard.ISPartsBake" />
@(Model.wipBoard.ISPartsBake == "Y" ? "checked" : "")
} type="checkbox" title="零件是否需要烘烤" name="wipBoard.ISPartsBake" />
</div> </div>
<label class="layui-form-label">零件烘烤溫度</label> <label class="layui-form-label">零件烘烤溫度</label>
<div class="layui-input-inline" style="width:100px"> <div class="layui-input-inline" style="width:100px">
@ -539,9 +530,7 @@
</div> </div>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input @if (Model.wipBoard != null) { <input @if (Model.wipBoard != null) { @(Model.wipBoard.PartsBakeOvertime == "Y" ? "checked" : "") } type="checkbox" title="零件烘烤超過48hrs" name="wipBoard.PartsBakeOvertime" />
@(Model.wipBoard.PartsBakeOvertime == "Y" ? "checked" : "")
} type="checkbox" title="零件烘烤超過48hrs" name="wipBoard.PartsBakeOvertime" />
</div> </div>
</div> </div>
</div> </div>
@ -557,9 +546,7 @@
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">PCB烘烤</label> <label class="layui-form-label">PCB烘烤</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<input @if (Model.wipBoard != null) { <input @if (Model.wipBoard != null) { @(Model.wipBoard.ISPcbBake == "Y" ? "checked" : "") } type="checkbox" title="PCB是否需要烘烤" name="wipBoard.ISPcbBake" />
@(Model.wipBoard.ISPcbBake == "Y" ? "checked" : "")
} type="checkbox" title="PCB是否需要烘烤" name="wipBoard.ISPcbBake" />
</div> </div>
<div class="layui-input-inline"> <div class="layui-input-inline">
<select asp-items="@ViewBag.GetPCBBakeTypeSelect" asp-for="wipBoard.PcbBake" class=""></select> <select asp-items="@ViewBag.GetPCBBakeTypeSelect" asp-for="wipBoard.PcbBake" class=""></select>
@ -863,9 +850,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 @if (Model.wipSystem != null) { <input @if (Model.wipSystem != null) { @(Model.wipSystem.FinePackage == "Y" ? "checked" : "") } type="checkbox" title="是否為精裝" name="wipSystem.FinePackage" />
@(Model.wipSystem.FinePackage == "Y" ? "checked" : "")
} type="checkbox" title="是否為精裝" name="wipSystem.FinePackage" />
</div> </div>
</div> </div>
</div> </div>

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

@ -202,6 +202,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
q4.UnitName q4.UnitName
}; };
q = q.Where(w => w.StatusNO == wipStatus); q = q.Where(w => w.StatusNO == wipStatus);
if (unitNo != "*") if (unitNo != "*")
{ {

57
AMESCoreStudio.WebApi/Controllers/AMES/WipLockController.cs

@ -100,7 +100,32 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
, string itemno, string lockreasontype, int stations = 0, string date_str = null, string date_end = null , string itemno, string lockreasontype, int stations = 0, string date_str = null, string date_end = null
, int page = 0, int limit = 10) , int page = 0, int limit = 10)
{ {
IQueryable<WipLock> q = _context.WipLocks; IQueryable<WipLockDto> q = from s in _context.WipLocks
join q2 in _context.UserInfoes on s.LockUserID equals q2.UserID into cp2
from q2 in cp2.DefaultIfEmpty()
join q3 in _context.UserInfoes on s.UnLockUserID equals q3.UserID into cp3
from q3 in cp3.DefaultIfEmpty()
select new WipLockDto
{
WipNO = s.WipNO,
WipLockID = s.WipLockID,
ItemNO = s.WipAtt.ItemNO,
LockDate = s.LockDate,
UnLockDate = s.UnLockDate,
LockUserID = s.LockUserID,
LockReason = s.LockReason,
LockStatus = s.LockStatus == "0" ? "鎖定" : "解鎖",
UnLockUserID = s.UnLockUserID,
UnLockReason = s.UnLockReason,
LockReasonType = s.LockReasonType,
LockReasonTypeName = s.LockReasonType == "0" ? "3C認證工單" :
s.LockReasonType == "1" ? "驗證工單" : "維修換料待分析",
LockType = s.LockType,
LockUserName = q2.UserName,
UnLockUserName = q3.UserName,
StationID = s.StationID,
StationName = s.Stations.StationName
};
if (!string.IsNullOrWhiteSpace(wipNO)) if (!string.IsNullOrWhiteSpace(wipNO))
q = q.Where(w => w.WipNO == wipNO); q = q.Where(w => w.WipNO == wipNO);
@ -115,7 +140,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
q = q.Where(w => w.LockReasonType == lockreasontype); q = q.Where(w => w.LockReasonType == lockreasontype);
if (!string.IsNullOrWhiteSpace(itemno)) if (!string.IsNullOrWhiteSpace(itemno))
q = q.Where(w => w.WipAtt.ItemNO == itemno); q = q.Where(w => w.ItemNO == itemno);
if (stations != 0) if (stations != 0)
q = q.Where(w => w.StationID == stations); q = q.Where(w => w.StationID == stations);
@ -141,27 +166,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
q = q.Skip((page - 1) * limit).Take(limit); q = q.Skip((page - 1) * limit).Take(limit);
} }
result.Data = await q.Select(s => new WipLockDto result.Data = await q.ToListAsync();
{
WipNO = s.WipNO,
WipLockID = s.WipLockID,
ItemNO = s.WipAtt.ItemNO,
LockDate = s.LockDate,
UnLockDate = s.UnLockDate,
LockUserID = s.LockUserID,
LockReason = s.LockReason,
LockStatus = s.LockStatus == "0" ? "鎖定" : "解鎖",
UnLockUserID = s.UnLockUserID,
UnLockReason = s.UnLockReason,
LockReasonType = s.LockReasonType,
LockReasonTypeName = s.LockReasonType == "0" ? "3C認證工單" :
s.LockReasonType == "1" ? "驗證工單" : "維修換料待分析",
LockType = s.LockType,
StationName = s.Stations.StationName
}).ToListAsync();
return result; return result;
} }
@ -174,7 +179,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
/// <returns></returns> /// <returns></returns>
[Route("[action]")] [Route("[action]")]
[HttpPost] [HttpPost]
public async Task<ResultModel<WipLock>> PostWipLockByItemNo(string itemNo,string lockReason,string lockUserNo) public async Task<ResultModel<WipLock>> PostWipLockByItemNo(string itemNo, string lockReason, string lockUserNo)
{ {
ResultModel<WipLock> result = new ResultModel<WipLock>(); ResultModel<WipLock> result = new ResultModel<WipLock>();
Helper helper = new Helper(_context); Helper helper = new Helper(_context);
@ -199,7 +204,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
a.StatusNO, a.StatusNO,
b.ItemNO b.ItemNO
}; };
q = q.Where(w => !w.StatusNO.Equals("E")&& !w.StatusNO.Equals("C")); q = q.Where(w => !w.StatusNO.Equals("E") && !w.StatusNO.Equals("C"));
if (itemNo != null) if (itemNo != null)
{ {
@ -287,6 +292,8 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
wiplock.UnLockDate = DateTime.Now; wiplock.UnLockDate = DateTime.Now;
// 指定更新某個欄位 // 指定更新某個欄位
_context.Entry(wiplock).Property(p => p.UnLockReason).IsModified = true; _context.Entry(wiplock).Property(p => p.UnLockReason).IsModified = true;
_context.Entry(wiplock).Property(p => p.UnLockDate).IsModified = true;
_context.Entry(wiplock).Property(p => p.UnLockUserID).IsModified = true;
try try
{ {
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();

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

@ -1678,6 +1678,17 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
} }
} }
// 已投入數量>=工單數量
if (CheckNowFirstStation(wipNo, unitNo, stationID) == "Y")
{
var FirstWipInfo = WipNoItem.FirstOrDefault();
if (FirstWipInfo.CompleteQTY >= FirstWipInfo.PlanQTY)
{
resultModel.Msg = "工單號碼【" + wipNo + "】,已投入數量>=工單數量,請在確認";
return resultModel;
}
}
// 該筆工單號碼鎖定 // 該筆工單號碼鎖定
WipLockController wipLockController = new WipLockController(_context); WipLockController wipLockController = new WipLockController(_context);
var q3 = await wipLockController.GetWipLockByWipNO(wipNo); var q3 = await wipLockController.GetWipLockByWipNO(wipNo);

20
AMESCoreStudio.WebApi/DTO/AMES/WipLockDto.cs

@ -44,8 +44,11 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
/// <summary> /// <summary>
/// 站別ID /// 站別ID
/// </summary> /// </summary>
public int StationID { get; set; }
/// <summary>
/// 站別ID
/// </summary>
public string StationName { get; set; } public string StationName { get; set; }
/// <summary> /// <summary>
/// 鎖定類型 /// 鎖定類型
@ -65,7 +68,13 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
/// <summary> /// <summary>
/// 鎖定人員 /// 鎖定人員
/// </summary> /// </summary>
public decimal LockUserID { get; set; } public int LockUserID { get; set; }
/// <summary>
/// 鎖定人員名稱
/// </summary>
public string LockUserName { get; set; }
/// <summary> /// <summary>
/// 鎖定日期 /// 鎖定日期
@ -75,7 +84,12 @@ namespace AMESCoreStudio.WebApi.DTO.AMES
/// <summary> /// <summary>
/// 解鎖人員 /// 解鎖人員
/// </summary> /// </summary>
public decimal? UnLockUserID { get; set; } public int? UnLockUserID { get; set; }
/// <summary>
/// 解鎖人員名稱
/// </summary>
public string UnLockUserName { get; set; }
/// <summary> /// <summary>
/// 解鎖日期 /// 解鎖日期

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

@ -62,8 +62,6 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[DataMember] [DataMember]
[Required(ErrorMessage = "{0},不能空白")] [Required(ErrorMessage = "{0},不能空白")]
[Display(Name = "站別ID")] [Display(Name = "站別ID")]
public int StationID { get; set; } = 0; public int StationID { get; set; } = 0;
/// <summary> /// <summary>

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

@ -44,6 +44,14 @@ namespace AMESCoreStudio.WebApi.Models.AMES
[Display(Name = "MAC迄")] [Display(Name = "MAC迄")]
public string EndNO { get; set; } public string EndNO { get; set; }
/// <summary>
/// 工單綁定MAC數量
/// </summary>
[Column("QTY")]
[DataMember]
[Display(Name = "MAC數量")]
public int Qty { get; set; }
/// <summary> /// <summary>
/// 前綴 /// 前綴
/// </summary> /// </summary>

Loading…
Cancel
Save