Browse Source

1.新增生產進度查詢(製程+料號+工單號碼)

PTD
Marvin 3 years ago
parent
commit
520c7d2945
  1. 200
      AMESCoreStudio.Web/Controllers/QRSController.cs
  2. 13
      AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs
  3. 75
      AMESCoreStudio.Web/Views/QRS/QRS011.cshtml
  4. 17
      AMESCoreStudio.Web/Views/QRS/QRS011A.cshtml
  5. 60
      AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs
  6. 9
      AMESCoreStudio.WebApi/Controllers/SYS/ProgramInfoesController.cs

200
AMESCoreStudio.Web/Controllers/QRSController.cs

@ -332,6 +332,206 @@ namespace AMESCoreStudio.Web.Controllers
return View();
}
public async Task<IActionResult> QRS011()
{
await GetUnitList();
return View();
}
public async Task<IActionResult> QRS011AAsync(string unitNo, string itemNO, string wipNO)
{
ViewData["Title"] = "查詢條件 - 製程代碼 : " + unitNo + "; 料號 : " + itemNO + "; 工單號碼 : " + wipNO;
IResultModel<dynamic> result = await _pcsApi.GetWipInfo4QRS011(unitNo, itemNO, wipNO);
string wipDataList = "<font size='3'>";
if (result.DataTotal > 0)
{
foreach (var item in result.Data)
{
JObject jo = JObject.Parse(item.ToString());
int wip_id = int.Parse(jo["wipID"].ToString());
int flow_rule_id = int.Parse(jo["flowRuleID"].ToString());
int line_id = int.Parse(jo["lineID"].ToString());
string item_no = jo["itemNO"].ToString();
string unit_name = jo["unitName"].ToString();
string line_desc = jo["lineDesc"].ToString();
string wip_no = jo["wipNO"].ToString();
int plan_qty = int.Parse(jo["planQTY"].ToString());
int input_qty = int.Parse(jo["completeQTY"].ToString());
int output_qty = 0;
var cycle_time = await _ppsApi.GetCycleTime(item_no + "," + line_id);
string ct1 = "";
if (cycle_time.Count > 0)
{
ct1 = cycle_time[0].CT1.ToString() + "s";
}
wipDataList = wipDataList + "<font color='#FF80FF'>" + unit_name + " - " + line_desc + "</font>" + " - " + "<font color='#0080FF'>" + wip_no + "</font>" + "<font color='#FFC90E'>" + "(" + item_no + ")" + "</font>" + " - " + "<font color='#0080FF'>" + plan_qty + " / " + input_qty + " / " + output_qty + "</font>" + " | " + "<font color='#0080FF'>" + "標準工時: " + "</font>" + ct1 + "<br/>";
var rule_sation = await _basApi.GetRuleStationsByFlow(flow_rule_id);
wipDataList = wipDataList + "<table><tr><td width='120'></td>";
string stationQty = "<table><tr><td width='120'>過站數量</td>";
string stationRate = "<table><tr><td width='120'>良率</td>";
string stationWip = "<table><tr><td width='120'>WIP</td>";
string stationList = "";
for (int j = 0; j < rule_sation.Count; j++)
{
if (rule_sation[j].StationID != 1000 && rule_sation[j].StationType == "M")
{
stationList = stationList + rule_sation[j].RuleStationID + ",";
wipDataList = wipDataList + "<td width='150' style='text-align:left'>" + rule_sation[j].StationDesc + "</td>";
var wip_station = await _pcsApi.GetWipStation4QRS009Group(wip_id, rule_sation[j].RuleStationID);
int okQty = 0, ngQty = 0;
if (wip_station.DataTotal > 0)
{
foreach (var data in wip_station.Data)
{
JObject j0 = JObject.Parse(data.ToString());
if (j0["ruleStatus"].ToString() == "P")
{
okQty = int.Parse(j0["firstCnt"].ToString());
}
else
{
ngQty = int.Parse(j0["firstCnt"].ToString());
}
}
}
//stationQty = stationQty + "<td width='150' style='text-align:left'><a href=\"javascript:hg.open('過站PASS條碼資料','/QRS/QRS009P/" + wip_id + "_" + rule_sation[j].RuleStationID + "','','',true);\">" + okQty + "</a>/<a href=\"javascript:hg.open('過站FAIL條碼資料','/QRS/QRS009F','','',true);\">" + ngQty + "</a></td>";
stationQty = stationQty + "<td width='150' style='text-align:left'><a href=\"javascript:hg.open('過站PASS條碼資料','/QRS/QRS009P/" + wip_id + "_" + rule_sation[j].RuleStationID + "',800,600);\">" + okQty + "</a>/<a href=\"javascript:hg.open('過站FAIL條碼資料','/QRS/QRS009F/" + wip_id + "_" + rule_sation[j].RuleStationID + "',800,600);\">" + ngQty + "</a></td>";
double rate = ((okQty * 1.0) / (okQty + ngQty)) * 100;
if (j == rule_sation.Count - 2)
{
if (rate <= 90)
{
stationRate = stationRate + "<td width='150' style='text-align:left;color:red'>" + rate.ToString("0.00") + "%" + "</td>";
}
else if (rate >= 95 && rate <= 97)
{
stationRate = stationRate + "<td width='150' style='text-align:left;color:yellow'>" + rate.ToString("0.00") + "%" + "</td>";
}
else if (rate >= 98)
{
stationRate = stationRate + "<td width='150' style='text-align:left;color:green'>" + rate.ToString("0.00") + "%" + "</td>";
}
else
{
stationRate = stationRate + "<td width='150' style='text-align:left'>" + rate.ToString("0.00") + "%" + "</td>";
}
//stationRate = stationRate + "<td width='150' style='text-align:left'>" + rate.ToString("0.00") + "%" + "</td>";
}
else
{
//stationRate = stationRate + "<td width='90' style='text-align:left'>" + rate.ToString("0.00") + "%" + "</td>";
if (rate <= 90)
{
stationRate = stationRate + "<td width='90' style='text-align:left;color:red'>" + rate.ToString("0.00") + "%" + "</td>";
}
else if (rate >= 95 && rate <= 97)
{
stationRate = stationRate + "<td width='90' style='text-align:left;color:yellow'>" + rate.ToString("0.00") + "%" + "</td>";
}
else if (rate >= 98)
{
stationRate = stationRate + "<td width='90' style='text-align:left;color:green'>" + rate.ToString("0.00") + "%" + "</td>";
}
else
{
stationRate = stationRate + "<td width='90' style='text-align:left'>" + rate.ToString("0.00") + "%" + "</td>";
}
stationRate = stationRate + "<td width='60' style='text-align:left'>" + "<font color='#FF80FF'>" + " >> " + "</font>" + "</td>";
}
}
}
stationQty = stationQty + "</tr></table>";
stationRate = stationRate + "</tr></table>";
string[] station_list = stationList.Split(",");
for (int j = 0; j < station_list.Length - 1; j++)
{
var wip_station1 = await _pcsApi.GetWipStation4QRS009Group(wip_id, int.Parse(station_list[j]));
int okQty1 = 0, ngQty1 = 0;
if (wip_station1.DataTotal > 0)
{
foreach (var data in wip_station1.Data)
{
JObject j1 = JObject.Parse(data.ToString());
if (j1["ruleStatus"].ToString() == "P")
{
okQty1 = int.Parse(j1["firstCnt"].ToString());
}
else
{
ngQty1 = int.Parse(j1["firstCnt"].ToString());
}
}
}
int okQty2 = 0, ngQty2 = 0;
//计算WIP
if (j < station_list.Length - 2)
{
var wip_station2 = await _pcsApi.GetWipStation4QRS009Group(wip_id, int.Parse(station_list[j + 1]));
if (wip_station2.DataTotal > 0)
{
foreach (var data in wip_station2.Data)
{
JObject j2 = JObject.Parse(data.ToString());
if (j2["ruleStatus"].ToString() == "P")
{
okQty2 = int.Parse(j2["firstCnt"].ToString());
}
else
{
ngQty2 = int.Parse(j2["firstCnt"].ToString());
}
}
}
}
int wip_qty = okQty1 + ngQty1 - okQty2 - ngQty2;
if (wip_qty < 0)
{
wip_qty = 0;
}
stationWip = stationWip + "<td width='150' style='text-align:left'><a href=\"javascript:hg.open('在製條碼資料','/QRS/QRS009W/" + wip_id + "_" + station_list[j] + "',800,600);\">" + wip_qty + "</a></td>";
}
stationWip = stationWip + "</tr></table><br/>";
wipDataList = wipDataList + "</tr></table>";
wipDataList = wipDataList + stationQty;
wipDataList = wipDataList + stationRate;
wipDataList = wipDataList + stationWip;
}
}
else
{
wipDataList = wipDataList + "查无资料";
}
wipDataList = wipDataList + "</font>";
ViewData["WipDataList"] = wipDataList;
return View();
}
[ResponseCache(Duration = 0)]
[HttpGet]
public async Task<IActionResult> GetWipStationPassBarcode(string id, int page = 0, int limit = 10)

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

@ -892,7 +892,7 @@ namespace AMESCoreStudio.Web
#endregion
#region QRS010
#region QRS010 良率
/// <summary>
/// 良率查詢QRS010
@ -910,6 +910,17 @@ namespace AMESCoreStudio.Web
#endregion
#region QRS011 生產進度查詢
/// <summary>
/// 查詢工單基本資料QRS011
/// </summary>
/// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/WipInfos/GetWipInfo4QRS011")]
ITask<ResultModel<dynamic>> GetWipInfo4QRS011(string unitNo, string itemNO, string wipNO);
#endregion
#region WipKp 工單KP資訊資料檔
/// <summary>
/// 查詢工單號碼 對應 WipKp

75
AMESCoreStudio.Web/Views/QRS/QRS011.cshtml

@ -0,0 +1,75 @@
@{
ViewData["Title"] = "生產進度查詢";
Layout = "~/Views/Shared/_AMESLayout.cshtml";
}
<div class="layui-card">
<div class="layui-card-header">
<div class="layui-form">
<div class="layui-form-item ">
<div class="layui-inline"><i class="fa fa-file-text-o fa-fw"></i> @ViewBag.Title</div>
</div>
</div>
</div>
<div class="layui-form">
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-col-sm3">
<div class="layui-inline">
<label class="layui-form-label">生產單位:</label>
<div class="layui-input-inline">
<select id="unit" lay-filter="unit" lay-verify="required" lay-submit asp-items="@ViewBag.UnitList">
<option value="*">全部</option>
</select>
</div>
<input id="unitNo" type="hidden" name="unitNo" value="*" />
</div>
</div>
<div class="layui-col-sm3">
<div class="layui-inline">
<label class="layui-form-label">料號:</label>
<div class="layui-input-inline" style="width:150px">
<input id="itemNO" name="itemNo" autocomplete="off" class="layui-input" placeholder="請輸入料號">
</div>
</div>
</div>
<div class="layui-col-sm3">
<div class="layui-inline">
<label class="layui-form-label">工單號碼:</label>
<div class="layui-input-inline" style="width:150px">
<input id="wipNO" name="wipNo" autocomplete="off" class="layui-input" placeholder="請輸入工單號碼">
</div>
</div>
</div>
<div class="layui-col-sm1">
<div class="layui-inline layui-show-xs-block">
<button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit onclick="result()" lay-filter="querysubmit">
<i class="layui-icon layui-icon-sm">&#xe615;</i>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
@section Scripts{
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial");
await Html.RenderPartialAsync("_FileinputScriptsPartial"); }
<script type="text/javascript">
layui.use(['form', 'layer', 'laydate'], function () {
var form = layui.form;
});
function result() {
var unitNo = $("#unit").val();
var itemNO = $("#itemNO").val();
var wipNO = $("#wipNO").val();
var query = "?unitNo=" + unitNo + "&itemNO=" + itemNO + "&wipNO=" + wipNO;
hg.open('生產進度查詢', '/QRS/QRS011A' + query, '', '', true);
};
</script>
}

17
AMESCoreStudio.Web/Views/QRS/QRS011A.cshtml

@ -0,0 +1,17 @@
@{
Layout = "~/Views/Shared/_AMESLayout.cshtml";
}
<div class="layui-card">
<div class="layui-card-header">
<div class="layui-form">
<div class="layui-form-item ">
<div class="layui-inline"><i class="fa fa-file-text-o fa-fw"></i> @ViewBag.Title</div>
</div>
</div>
</div>
<div class="layui-card-body">
@Html.Raw(ViewData["WipDataList"])
</div>
</div>

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

@ -99,6 +99,66 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return result;
}
/// <summary>
/// 查詢工單資料QRS011
/// </summary>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfo4QRS011(string unitNo, string itemNO, string wipNO)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
var q = from q1 in _context.WipInfos
join q2 in _context.WipAtts on q1.WipNO equals q2.WipNO
join q3 in _context.LineInfoes on q1.LineID equals q3.LineID
join q4 in _context.FactoryUnits on q1.UnitNO equals q4.UnitNo
select new
{
q1.WipID,
q1.WipNO,
q1.PlanQTY,
q1.CompleteQTY,
q1.UnitNO,
q1.LineID,
q1.FlowRuleID,
q1.StatusNO,
q1.CreateDate,
q2.ItemNO,
q3.LineDesc,
q4.UnitName
};
q = q.Where(w => w.StatusNO == "A");
if (unitNo != "*")
{
q = q.Where(w => w.UnitNO == unitNo);
}
if (itemNO != null && itemNO != "")
{
q = q.Where(w => w.ItemNO == itemNO);
}
if (wipNO != null && wipNO != "")
{
q = q.Where(w => w.WipNO == wipNO);
}
//紀錄筆數
result.DataTotal = q.Count();
result.Data = await q.ToListAsync();
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
/// 查詢工單資料 by SelectParameter
/// </summary>

9
AMESCoreStudio.WebApi/Controllers/SYS/ProgramInfoesController.cs

@ -35,7 +35,14 @@ namespace AMESCoreStudio.WebApi.Controllers.SYS
[HttpGet]
public async Task<ActionResult<IEnumerable<ProgramInfo>>> GetProgramInfo()
{
return await _context.ProgramInfoes.ToListAsync();
IQueryable<ProgramInfo> q = _context.ProgramInfoes;
q = q.OrderBy(p => p.ProgramNo);
var programInfo = await q.ToListAsync();
return programInfo;
//return await _context.ProgramInfoes.ToListAsync();
}
/// <summary>

Loading…
Cancel
Save