Browse Source

1.新增维修资料统计

PTD
Marvin 3 years ago
parent
commit
ce68b6a1e1
  1. 151
      AMESCoreStudio.Web/Controllers/REPController.cs
  2. 7
      AMESCoreStudio.Web/HttpApis/AMES/IREP.cs
  3. 307
      AMESCoreStudio.Web/Views/REP/REP012.cshtml
  4. 110
      AMESCoreStudio.WebApi/Controllers/AMES/NgRepairsController.cs

151
AMESCoreStudio.Web/Controllers/REPController.cs

@ -25,7 +25,7 @@ namespace AMESCoreStudio.Web.Controllers
public readonly IPCS _pcsApi;
private readonly IWebHostEnvironment _env;
public REPController(ILogger<REPController> logger, IREP repApi, IPPS ppsApi,IBAS basApi,IPCS pcsApi, IWebHostEnvironment env)
public REPController(ILogger<REPController> logger, IREP repApi, IPPS ppsApi, IBAS basApi, IPCS pcsApi, IWebHostEnvironment env)
{
_logger = logger;
_repApi = repApi;
@ -35,6 +35,109 @@ namespace AMESCoreStudio.Web.Controllers
_env = env;
}
private async Task GetProductTypeList()
{
var result = await _pcsApi.GetProductTypes();
var ProductTypes = new List<SelectListItem>();
for (int i = 0; i < result.Count; i++)
{
ProductTypes.Add(new SelectListItem(result[i].ProductTypeName, result[i].ProductTypeID.ToString()));
}
ViewBag.ProductTypeList = ProductTypes;
}
private async Task GetTestTypeList()
{
var result = await _basApi.GetTestTypes();
var TestTypeItems = new List<SelectListItem>();
for (int i = 0; i < result.Count; i++)
{
TestTypeItems.Add(new SelectListItem(result[i].TypeName, result[i].TypeNo.ToString()));
}
ViewBag.TestTypeList = TestTypeItems;
}
private async Task GetUnitList()
{
var result = await _basApi.GetFactoryUnits();
var UnitItems = new List<SelectListItem>();
for (int i = 0; i < result.Count; i++)
{
UnitItems.Add(new SelectListItem(result[i].UnitName, result[i].UnitNo.ToString()));
}
ViewBag.UnitList = UnitItems;
}
private async Task GetLineInfoList()
{
var result = await _basApi.GetLineInfoes();
var LineItems = new List<SelectListItem>();
for (int i = 0; i < result.Count; i++)
{
LineItems.Add(new SelectListItem(result[i].LineDesc, result[i].LineID.ToString()));
}
ViewBag.LineList = LineItems;
}
[HttpPost]
public async Task<JsonResult> GetUnitLineJson(string unit_no)
{
var result = await _basApi.GetLineInfoByUnit(unit_no);
var item = new List<SelectListItem>();
for (int i = 0; i < result.Count; i++)
{
item.Add(new SelectListItem(result[i].LineDesc, result[i].LineID.ToString()));
}
if (item.Count == 0)
{
item.Add(new SelectListItem("全部", "*"));
}
//将数据Json化并传到前台视图
return Json(new { data = item });
}
private async Task GetStationList()
{
var result = await _basApi.GetStationses();
var StationItems = new List<SelectListItem>();
for (int i = 0; i < result.Count; i++)
{
StationItems.Add(new SelectListItem(result[i].StationName, result[i].StationID.ToString()));
}
ViewBag.StationList = StationItems;
}
[HttpPost]
public async Task<JsonResult> GetUnitStationJson(string unit_no)
{
var result = await _basApi.GetStationsByUnit(unit_no);
var item = new List<SelectListItem>();
for (int i = 0; i < result.Count; i++)
{
item.Add(new SelectListItem(result[i].StationName, result[i].StationID.ToString()));
}
if (item.Count == 0)
{
item.Add(new SelectListItem("全部", "*"));
}
//将数据Json化并传到前台视图
return Json(new { data = item });
}
private async Task GetRMAReasonList()
{
@ -109,7 +212,7 @@ namespace AMESCoreStudio.Web.Controllers
{
var result = await _repApi.GetNgInfoByBarcode(barcodeNo);
if (result.Count>0)
if (result.Count > 0)
{
return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
}
@ -232,7 +335,7 @@ namespace AMESCoreStudio.Web.Controllers
ViewBag.Image3Url = $"\\REPImage\\" + "noimage.jfif";
}
}
return View(model);
}
@ -369,11 +472,11 @@ namespace AMESCoreStudio.Web.Controllers
//判斷組件是否更換
for (int i = 0; i < ng_component.Count; i++)
{
if (ng_component[i].NewPartNo!="")
if (ng_component[i].NewPartNo != "")
{
items.Add(new BarCodeCheckDto.inputItem
{
inputType="KP",
items.Add(new BarCodeCheckDto.inputItem
{
inputType = "KP",
inputData = ng_component[i].NewPartNo,
oldInputData = ng_component[i].OldPartNo
});
@ -412,7 +515,7 @@ namespace AMESCoreStudio.Web.Controllers
station = repairStationID,
line = lineID,
unitNo = model.ngInfo.Wip.UnitNO,
inputItems = items
inputItems = items
};
try
@ -472,7 +575,7 @@ namespace AMESCoreStudio.Web.Controllers
public async Task<IActionResult> REP002C(int id)
{
await GetRMAReasonList();
await GetRepairTypeList();
await GetNGReasonList();
@ -487,7 +590,7 @@ namespace AMESCoreStudio.Web.Controllers
}
return View(model);
}
public async Task<IActionResult> REP002R(int id)
@ -773,5 +876,33 @@ namespace AMESCoreStudio.Web.Controllers
//return RedirectToAction("REP001V", "REP", new { id = model.ngComponent.NgID });
}
#endregion
#region 維修資料統計
public async Task<IActionResult> REP012()
{
await GetProductTypeList();
await GetTestTypeList();
await GetUnitList();
await GetLineInfoList();
await GetStationList();
return View();
}
public async Task<IActionResult> REP012QueryAsync(string productTypeNo, string testTypeNo, string unitNo, string lineID, string stationID, string wipNO, string itemNO, string dateStart, string dateEnd, int page = 1, int limit = 10)
{
var result = await _repApi.GetRepairData4REP012(productTypeNo, testTypeNo, unitNo, lineID, stationID, wipNO, itemNO, dateStart, dateEnd, page, limit);
if (result.DataTotal > 0)
{
return Json(new Table() { code = 0, msg = "", data = result.Data, count = result.DataTotal });
}
return Json(new Table() { count = 0, data = null });
}
#endregion
}
}

7
AMESCoreStudio.Web/HttpApis/AMES/IREP.cs

@ -86,6 +86,13 @@ namespace AMESCoreStudio.Web
[WebApiClient.Attributes.HttpGet("api/NgRepairs/{id}")]
ITask<List<NgRepair>> GetNgRepair(int id);
/// <summary>
/// 查詢維修資料
/// </summary>
/// <returns></returns>
[WebApiClient.Attributes.HttpGet("api/NgRepairs/GetRepairData4REP012")]
ITask<ResultModel<dynamic>> GetRepairData4REP012(string productType, string testType, string unitNo, string lineID, string stationID, string wipNo, string itemNo, string dateStart, string dateEnd, int page, int limit);
/// <summary>
/// 根據COMPONENT_ID獲取指定維修過程資料
/// </summary>

307
AMESCoreStudio.Web/Views/REP/REP012.cshtml

@ -0,0 +1,307 @@
@{
ViewData["Title"] = "維修資料統計";
Layout = "~/Views/Shared/_AMESLayout.cshtml";
}
<style type="text/css">
.layui-table-main .layui-table-cell {
/*height: auto !important;*/
white-space: normal;
}
.layui-table img {
max-width: 60px;
max-height: 28px;
}
.layui-tree-main {
cursor: pointer;
padding-right: 10px;
float: left;
border-width: 1px;
border-style: solid;
border-color: #e6e6e6;
margin: 10px 0;
}
</style>
<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">
<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="productType" lay-filter="productType" lay-verify="required" lay-submit asp-items="@ViewBag.ProductTypeList">
<option value="0">全部</option>
</select>
</div>
<input id="productTypeNo" type="hidden" name="productTypeNo" value="0" />
</div>
</div>
<div class="layui-col-sm3">
<div class="layui-inline">
<label class="layui-form-label">測試類別:</label>
<div class="layui-input-inline">
<select id="testType" lay-filter="testType" lay-verify="required" lay-submit asp-items="@ViewBag.TestTypeList">
<option value="*">全部</option>
</select>
</div>
<input id="testTypeNo" type="hidden" name="testTypeNo" value="*" />
</div>
</div>
<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>
</div>
<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="line" lay-filter="line" lay-verify="required" lay-submit asp-items="@ViewBag.LineList">
<option value="0">全部</option>
</select>
</div>
<input id="lineID" type="hidden" name="lineID" value="0" />
</div>
</div>
<div class="layui-col-sm3">
<div class="layui-inline">
<label class="layui-form-label">站別:</label>
<div class="layui-input-inline">
<select id="station" lay-filter="station" lay-verify="required" lay-submit asp-items="@ViewBag.StationList">
<option value="0">全部</option>
</select>
</div>
<input id="stationID" type="hidden" name="stationID" value="0" />
</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>
</div>
<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" style="width:150px">
<input id="itemNO" name="itemNo" autocomplete="off" class="layui-input" placeholder="請輸入料號">
</div>
</div>
</div>
<div class="layui-col-sm8">
<div class="layui-inline">
<label class="layui-form-label">維修日期:</label>
<div class="layui-input-inline" style="width:150px">
<input id="dateStart" name="dateStart" autocomplete="off" class="layui-input" readonly="">
</div>
<div class="layui-form-mid">~</div>
<div class="layui-input-inline" style="width:150px">
<input id="dateEnd" name="dateEnd" autocomplete="off" class="layui-input" readonly="">
</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 lay-filter="querysubmit">
<i class="layui-icon layui-icon-sm">&#xe615;</i>
</button>
</div>
</div>
</div>
</div>
</div>
<table class="layui-hide" id="query" lay-filter="query"></table>
</div>
</div>
@section Scripts{
<script type="text/javascript">
function getLineInfoList(data)
{
$.ajax(
{
url: '@Url.Action("GetUnitLineJson", "REP")',
dataType: 'json',
data: { "unit_no": $("#unit").val() },
type: 'post',
success: function (result) {
console.info(result.data);
$("#line").empty();//清空下拉框的值
$.each(result.data, function (index, item) {
$("#line").append($("<option>").text(item.text).val(item.value))
});
$("#line option:eq(1)").attr("selected", 'selected'); //默认选择第一个选项
layui.form.render("select");//重新渲染 固定写法
},
error: function (result) {
alert(result);
}
});
};
function getStationList(data)
{
$.ajax(
{
url: '@Url.Action("GetUnitStationJson", "REP")',
dataType: 'json',
data: { "unit_no": $("#unit").val() },
type: 'post',
success: function (result) {
console.info(result.data);
$("#station").empty();//清空下拉框的值
$.each(result.data, function (index, item) {
$("#station").append($("<option>").text(item.text).val(item.value))
});
$("#station option:eq(1)").attr("selected", 'selected'); //默认选择第一个选项
layui.form.render("select");//重新渲染 固定写法
},
error: function (result) {
alert(result);
}
});
};
layui.use(['form', 'layer', 'laydate'], function () {
form = layui.form;
laydate = layui.laydate;
laydate.render({
elem: '#dateStart'
, trigger: 'click'
, format: 'yyyy/MM/dd'
, theme: 'grid'
});
laydate.render({
elem: '#dateEnd'
, trigger: 'click'
, format: 'yyyy/MM/dd'
, theme: 'grid'
});
form.on('select(productType)', function (data)
{
$("#productTypeNo").val(data.value);
});
form.on('select(testType)', function (data) {
$("#testTypeNo").val(data.value);
});
form.on('select(unit)', function (data) {
$("#unitNo").val(data.value);
getLineInfoList(data.value);
getStationList(data.value);
});
form.on('select(line)', function (data) {
$("#lineID").val(data.value);
});
form.on('select(station)', function (data) {
$("#stationID").val(data.value);
});
});
//监听表单提交事件
hg.form.onsubmit('querysubmit', function (data) {
hg.msghide("重新載入資料..");
table && table.reload(data);
});
var tableCols = [[
{
field: 'unitNO',
width: 100,
title: '製程單位',
sort: true
},
{
field: 'wipNO',
width: 160,
title: '工單號碼',
sort: true
},
{
field: 'itemNO',
title: '料號',
width: 200,
sort: true
},
{
field: 'barcodeNo',
title: '條碼',
sort: true
},
{
field: 'typeNo',
title: '測試類別',
width: 100,
sort: true
},
{
field: 'reasonNo',
title: '不良原因代碼',
width: 120,
sort: true
},
{
field: 'rmaNo',
title: '維修代碼',
width: 120,
sort: true
},
{
field: 'createDate',
title: '維修日期',
width: 120,
templet: '<div>{{ layui.util.toDateString(d.createDate, "yyyy/MM/dd") }}</div>'
}]
];
//var param = productTypeNo.value + '_' + testTypeNo.value + '_' + unitNo.value + '_' + lineID.value + '_' + stationID.value + '_' + wipNO.value + '_' + itemNO.value + '_' + dateStart.value + '_' + dateEnd.value;
//基本数据表格
var table = hg.table.datatable('query', '維修資料統計', '/REP/REP012Query', {}, tableCols, toolbar, true, 'full-100', ['filter', 'print', 'exports']);
</script>
}

110
AMESCoreStudio.WebApi/Controllers/AMES/NgRepairsController.cs

@ -84,6 +84,116 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
return ngRepair;
}
/// <summary>
/// 維修資料統計
/// </summary>
/// <param name="productType"></param>
/// <param name="testType"></param>
/// <param name="unitNo"></param>
/// <param name="lineID"></param>
/// <param name="stationID"></param>
/// <param name="wipNo"></param>
/// <param name="itemNo"></param>
/// <param name="dateStart"></param>
/// <param name="dateEnd"></param>
/// <param name="page"></param>
/// <param name="limit"></param>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetRepairData4REP012(string productType, string testType, string unitNo, string lineID, string stationID, string wipNo, string itemNo, string dateStart, string dateEnd, int page = 1, int limit = 10)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
var q = from q1 in _context.NgRepairs
join q2 in _context.NgInfos on q1.NgID equals q2.NgID
join q3 in _context.BarcodeInfoes on q2.BarcodeID equals q3.BarcodeID
join q4 in _context.WipInfos on q3.WipID equals q4.WipID
join q5 in _context.WipAtts on q4.WipNO equals q5.WipNO
select new
{
q4.UnitNO,
q4.WipNO,
q5.ItemNO,
q4.LineID,
q3.BarcodeNo,
q2.TypeNo,
q2.StationId,
q2.ReasonNo,
q1.RmaNo,
q1.CreateDate
};
if (productType != "*")
{
}
if (testType != "*")
{
q = q.Where(w => w.TypeNo == testType);
}
if (unitNo != "*")
{
q = q.Where(w => w.UnitNO == unitNo);
}
if (lineID != null)
{
if (lineID != "*")
{
q = q.Where(w => w.LineID == int.Parse(lineID));
}
}
if (stationID != null)
{
if (stationID != "*")
{
q = q.Where(w => w.StationId == int.Parse(lineID));
}
}
if (wipNo != "")
{
q = q.Where(w => w.WipNO == wipNo);
}
if (itemNo != "")
{
q = q.Where(w => w.ItemNO == itemNo);
}
if (dateStart != null && dateEnd != null)
{
if (dateStart != "" && dateEnd != "")
{
q = q.Where(w => w.CreateDate >= DateTime.Parse(dateStart) && w.CreateDate <= DateTime.Parse(dateEnd));
}
}
//紀錄筆數
result.DataTotal = q.Count();
//Table 頁數
if (page > 0)
{
q = q.Skip((page - 1) * limit).Take(limit);
}
result.Data = await q.ToListAsync();
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
///
/// </summary>

Loading…
Cancel
Save