9 changed files with 1212 additions and 58 deletions
@ -0,0 +1,170 @@ |
|||||
|
@{ |
||||
|
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-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" style="width:140px"> |
||||
|
<input id="wipNo" name="wipNo" autocomplete="off" class="layui-input"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="layui-col-sm4"> |
||||
|
<div class="layui-inline"> |
||||
|
<label class="layui-form-label">開始日期:</label> |
||||
|
<div class="layui-input-inline" style="width:90px"> |
||||
|
<input id="dateStr" name="dateStr" autocomplete="off" class="layui-input" readonly=""> |
||||
|
</div> |
||||
|
<div class="layui-form-mid">~</div> |
||||
|
<div class="layui-input-inline" style="width:90px"> |
||||
|
<input id="dateEnd" name="dateEnd" autocomplete="off" class="layui-input" readonly=""> |
||||
|
</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:100px"> |
||||
|
<select id="status" name="status" lay-filter="status" lay-submit> |
||||
|
<option value="">全部</option> |
||||
|
<option value="A">生產工時</option> |
||||
|
<option value="B">無效工時</option> |
||||
|
<option value="C">異常工時</option> |
||||
|
</select> |
||||
|
</div> |
||||
|
<input id="statusNo" type="hidden" name="statusNo" /> |
||||
|
</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"></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"> |
||||
|
layui.use(['form', 'layer', 'laydate', 'table'], function () { |
||||
|
form = layui.form; |
||||
|
laydate = layui.laydate; |
||||
|
laydate.render({ |
||||
|
elem: '#dateStr' |
||||
|
, trigger: 'click' |
||||
|
, format: 'yyyy/MM/dd' |
||||
|
, theme: 'grid' |
||||
|
}); |
||||
|
|
||||
|
laydate.render({ |
||||
|
elem: '#dateEnd' |
||||
|
, trigger: 'click' |
||||
|
, format: 'yyyy/MM/dd' |
||||
|
, theme: 'grid' |
||||
|
}); |
||||
|
}); |
||||
|
|
||||
|
//监听表单提交事件 |
||||
|
hg.form.onsubmit('querysubmit', function (data) { |
||||
|
hg.msghide("重新載入資料.."); |
||||
|
table && table.reload(data); |
||||
|
}); |
||||
|
|
||||
|
var tableCols = [[ |
||||
|
{ |
||||
|
field: 'wipNo', |
||||
|
title: '工單號碼', |
||||
|
sort: true |
||||
|
}, |
||||
|
{ |
||||
|
field: 'itemNo', |
||||
|
title: '料號', |
||||
|
sort: true |
||||
|
}, |
||||
|
{ |
||||
|
field: 'stationName', |
||||
|
title: '作業站' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'productionQty', |
||||
|
title: '生產數量' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'type', |
||||
|
title: '狀態', |
||||
|
sort: true, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'startTime', |
||||
|
title: '開始時間', |
||||
|
templet: '<div>{{ layui.util.toDateString(d.startTime, "yyyy/MM/dd HH:mm:ss") }}</div>', |
||||
|
sort: true, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'endTime', |
||||
|
title: '結束時間', |
||||
|
templet: '<div>{{ layui.util.toDateString(d.endTime, "yyyy/MM/dd HH:mm:ss") }}</div>', |
||||
|
sort: true, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'exceptionCode', |
||||
|
title: '無效/異常代碼' |
||||
|
}, |
||||
|
{ |
||||
|
field: 'remarks', |
||||
|
title: '備註' |
||||
|
}, |
||||
|
{ |
||||
|
title: '操作', |
||||
|
align: 'center', |
||||
|
width: 80, |
||||
|
templet: function (d) { |
||||
|
if (d.endTime == null || d.startTime == null) { |
||||
|
return '<a class="layui-btn layui-btn-warm layui-icon layui-icon-list layui-btn-xs" lay-event="edit">修改</a>'; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
return '<a></a>'; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
]]; |
||||
|
|
||||
|
var toolbar = [{ |
||||
|
text: '新增', |
||||
|
layuiicon: '', |
||||
|
class: 'layui-btn-normal', |
||||
|
handler: function () { |
||||
|
hg.open('新增單站報工', '/WHS/WHS024C', 1100, 500); |
||||
|
} |
||||
|
}]; |
||||
|
|
||||
|
var table = hg.table.datatable('query', '單站報工查詢', '/WHS/WHS024Query', {}, tableCols, toolbar, true, 'full-100', ['filter', 'print', 'exports']); |
||||
|
|
||||
|
function edit(obj) { |
||||
|
if (obj.data.workStationid) { |
||||
|
hg.open('修改單站報工', '/WHS/WHS024U/' + obj.data.workStationid, 1100, 500); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
</script> |
||||
|
} |
@ -0,0 +1,171 @@ |
|||||
|
@model AMESCoreStudio.WebApi.Models.AMES.WorkStationLog |
||||
|
|
||||
|
@{ |
||||
|
ViewData["Title"] = "WHS024C"; |
||||
|
Layout = "~/Views/Shared/_AMESLayout.cshtml"; |
||||
|
} |
||||
|
|
||||
|
<style> |
||||
|
.control-label { |
||||
|
justify-content: flex-end !important; |
||||
|
} |
||||
|
</style> |
||||
|
|
||||
|
<div class="layui-card"> |
||||
|
<div class="row"> |
||||
|
<div class="col-sm-12"> |
||||
|
<form enctype="multipart/form-data" method="post" asp-action="WHS024" class="layui-form"> |
||||
|
<div asp-validation-summary="ModelOnly" class="text-danger"></div> |
||||
|
|
||||
|
<div class="layui-form-item"> |
||||
|
<div class="layui-inline"> |
||||
|
<label class="layui-form-label">工單號碼</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input asp-for="wipNo" onkeydown="inputWipNo(event);" autocomplete="off" class="layui-input" placeholder="輸入工單號碼後按Enter" /> |
||||
|
<span class="layui-bg-red">輸入工單號碼後按Enter</span> |
||||
|
</div> |
||||
|
<label class="layui-form-label">料號</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input asp-for="itemNo" autocomplete="off" class="layui-input" readonly="" /> |
||||
|
</div> |
||||
|
<label class="layui-form-label">工單數量</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input id="wipQty" name="wipQty" autocomplete="off" class="layui-input" readonly="" value="@ViewBag.wipQty" /> |
||||
|
<input type="hidden" id="wipQty" name="wipQty" value="@ViewBag.wipQty" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="layui-form-item"> |
||||
|
<div class="layui-inline"> |
||||
|
<label class="layui-form-label">作業站</label> |
||||
|
<div class="layui-input-inline "> |
||||
|
<select asp-for="StationID" asp-items="@ViewBag.GetStationsList" class=""></select> |
||||
|
<input asp-for="StationID" type="hidden" value="@Model.StationID" /> |
||||
|
</div> |
||||
|
<label class="layui-form-label">型態</label> |
||||
|
<input type="radio" asp-for="type" value="A" title="生產工時" checked=""> |
||||
|
<input type="radio" asp-for="type" value="B" title="無效工時"> |
||||
|
<input type="radio" asp-for="type" value="C" title="異常工時"> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="layui-form-item"> |
||||
|
<div class="layui-inline"> |
||||
|
<label class="layui-form-label">開始時間</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input asp-for="startTime" class="layui-input" readonly="" /> |
||||
|
</div> |
||||
|
<label class="layui-form-label">結束時間</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input asp-for="endTime" class="layui-input" readonly="" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="layui-form-item"> |
||||
|
<div class="layui-inline"> |
||||
|
<label class="layui-form-label">生產數量</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input asp-for="productionQty" class="layui-input" /> |
||||
|
</div> |
||||
|
<label class="layui-form-label">無效/異常代號</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input asp-for="exceptionCode" class="layui-input" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="layui-form-item"> |
||||
|
<label class="layui-form-label">備註說明</label> |
||||
|
<div class="layui-input-block"> |
||||
|
<textarea asp-for="remarks" class="layui-textarea"></textarea> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span> |
||||
|
<div class="layui-row" style="text-align:center"> |
||||
|
<div class="layui-col-md12"> |
||||
|
<input type="submit" value="儲存" class="layui-btn" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</form> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
@section Scripts { |
||||
|
@{ |
||||
|
await Html.RenderPartialAsync("_ValidationScriptsPartial"); |
||||
|
await Html.RenderPartialAsync("_FileinputScriptsPartial"); |
||||
|
} |
||||
|
@{ |
||||
|
var now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); |
||||
|
} |
||||
|
<script type="text/javascript"> |
||||
|
layui.use(['form', 'laydate', 'element'], function () { |
||||
|
var form = layui.form, laydate = layui.laydate; |
||||
|
|
||||
|
laydate.render({ |
||||
|
elem: '#startTime', |
||||
|
type: 'datetime', |
||||
|
theme: '#393D49', |
||||
|
value: new Date('@now') // Razor 語法將 C# 時間嵌入前端 |
||||
|
}); |
||||
|
|
||||
|
laydate.render({ |
||||
|
elem: '#endTime', |
||||
|
type: 'datetime', |
||||
|
theme: '#393D49' |
||||
|
}); |
||||
|
}); |
||||
|
$(document).ready(function () { |
||||
|
var error = '@Html.ValidationMessage("error")'; |
||||
|
if ($(error).text() != '') { |
||||
|
parent.hg.msg(error); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
function inputWipNo(e) { |
||||
|
if (e.keyCode == 13) { |
||||
|
getWipNoByStation(); |
||||
|
event.preventDefault(); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function getWipNoByStation() { |
||||
|
var wipNo = $("#wipNo").val(); |
||||
|
if (wipNo.length != 0) { |
||||
|
$.ajax( |
||||
|
{ |
||||
|
url: "@Url.Action("WHS024CQuery", "WHS")", |
||||
|
dataType: 'json', |
||||
|
data: { "wipNo": wipNo}, |
||||
|
type: 'post', |
||||
|
success: function (result) { |
||||
|
console.log(result); |
||||
|
if (result.item.success) { |
||||
|
$("#StationID").empty();//清空下拉框的值 |
||||
|
$.each(result.item.data, function (index, item) { |
||||
|
$("#StationID").append($("<option>").text(item.text).val(item.value)) |
||||
|
}); |
||||
|
$("#itemNo").val(result.itemNo); |
||||
|
$("#wipQty").val(result.wipQty); |
||||
|
} |
||||
|
else { |
||||
|
$("#StationID").empty();//清空下拉框的值 |
||||
|
parent.hg.msg(result.item.msg); |
||||
|
} |
||||
|
layui.form.render("select");//重新渲染 |
||||
|
}, |
||||
|
error: function (result) { |
||||
|
parent.hg.msg('API失敗'); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,130 @@ |
|||||
|
@model AMESCoreStudio.WebApi.Models.AMES.WorkStationLog |
||||
|
|
||||
|
@{ |
||||
|
ViewData["Title"] = "WHS024U"; |
||||
|
Layout = "~/Views/Shared/_AMESLayout.cshtml"; |
||||
|
} |
||||
|
|
||||
|
<style> |
||||
|
.control-label { |
||||
|
justify-content: flex-end !important; |
||||
|
} |
||||
|
</style> |
||||
|
|
||||
|
<div class="layui-card"> |
||||
|
<div class="row"> |
||||
|
<div class="col-sm-12"> |
||||
|
<form enctype="multipart/form-data" method="post" asp-action="WHS024" class="layui-form"> |
||||
|
<div asp-validation-summary="ModelOnly" class="text-danger"></div> |
||||
|
<input asp-for="workStationid" type="hidden" value="@Model.workStationid" /> |
||||
|
<div class="layui-form-item"> |
||||
|
<div class="layui-inline"> |
||||
|
<label class="layui-form-label">工單號碼</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input asp-for="wipNo" autocomplete="off" class="layui-input" readonly="" /> |
||||
|
</div> |
||||
|
<label class="layui-form-label">料號</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input asp-for="itemNo" autocomplete="off" class="layui-input" readonly="" /> |
||||
|
</div> |
||||
|
<label class="layui-form-label">工單數量</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input value="@ViewBag.wipQty" autocomplete="off" class="layui-input" readonly="" /> |
||||
|
<input type="hidden" id="wipQty" name="wipQty" value="@ViewBag.wipQty" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="layui-form-item"> |
||||
|
<div class="layui-inline"> |
||||
|
<label class="layui-form-label">作業站</label> |
||||
|
<div class="layui-input-inline "> |
||||
|
<select asp-for="StationID" asp-items="@ViewBag.GetStationsList" class="" disabled></select> |
||||
|
<input asp-for="StationID" type="hidden" value="@Model.StationID" /> |
||||
|
</div> |
||||
|
<label class="layui-form-label">型態</label> |
||||
|
<input asp-for="type" type="hidden" value="@Model.type" /> |
||||
|
<input type="radio" asp-for="type" value="A" title="生產工時" disabled> |
||||
|
<input type="radio" asp-for="type" value="B" title="無效工時" disabled> |
||||
|
<input type="radio" asp-for="type" value="C" title="異常工時" disabled> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="layui-form-item"> |
||||
|
<div class="layui-inline"> |
||||
|
<label class="layui-form-label">開始時間</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input asp-for="startTime" class="layui-input" readonly="" /> |
||||
|
</div> |
||||
|
<label class="layui-form-label">結束時間</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input asp-for="endTime" class="layui-input" readonly="" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="layui-form-item"> |
||||
|
<div class="layui-inline"> |
||||
|
<label class="layui-form-label">生產數量</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input asp-for="productionQty" class="layui-input" /> |
||||
|
</div> |
||||
|
<label class="layui-form-label">無效/異常代號</label> |
||||
|
<div class="layui-input-inline"> |
||||
|
<input asp-for="exceptionCode" class="layui-input" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="layui-form-item"> |
||||
|
<label class="layui-form-label">備註說明</label> |
||||
|
<div class="layui-input-block"> |
||||
|
<textarea asp-for="remarks" class="layui-textarea"></textarea> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<span style="color: firebrick;word-break: break-all;" class="text-danger offset-sm-3">@Html.ValidationMessage("error")</span> |
||||
|
<div class="layui-row" style="text-align:center"> |
||||
|
<div class="layui-col-md12"> |
||||
|
<input type="submit" value="儲存" class="layui-btn" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</form> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
@section Scripts { |
||||
|
@{ |
||||
|
await Html.RenderPartialAsync("_ValidationScriptsPartial"); |
||||
|
await Html.RenderPartialAsync("_FileinputScriptsPartial"); |
||||
|
} |
||||
|
@{ |
||||
|
var now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); |
||||
|
} |
||||
|
<script type="text/javascript"> |
||||
|
layui.use(['form', 'laydate', 'element'], function () { |
||||
|
var form = layui.form, laydate = layui.laydate; |
||||
|
|
||||
|
laydate.render({ |
||||
|
elem: '#startTime', |
||||
|
type: 'datetime', |
||||
|
theme: '#393D49', |
||||
|
}); |
||||
|
|
||||
|
laydate.render({ |
||||
|
elem: '#endTime', |
||||
|
type: 'datetime', |
||||
|
theme: '#393D49', |
||||
|
value: new Date('@now') |
||||
|
}); |
||||
|
}); |
||||
|
|
||||
|
$(document).ready(function () { |
||||
|
var error = '@Html.ValidationMessage("error")'; |
||||
|
if ($(error).text() != '') { |
||||
|
parent.hg.msg(error); |
||||
|
} |
||||
|
}); |
||||
|
</script> |
||||
|
} |
@ -0,0 +1,201 @@ |
|||||
|
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; |
||||
|
using AMESCoreStudio.WebApi.DTO.AMES; |
||||
|
using AMESCoreStudio.WebApi.Enum; |
||||
|
|
||||
|
namespace AMESCoreStudio.WebApi.Controllers.AMES |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 單站報工資料
|
||||
|
/// </summary>
|
||||
|
[Route("api/[controller]")]
|
||||
|
[ApiController] |
||||
|
public class WorkStationLogController : ControllerBase |
||||
|
{ |
||||
|
private readonly AMESContext _context; |
||||
|
|
||||
|
public WorkStationLogController(AMESContext context) |
||||
|
{ |
||||
|
_context = context; |
||||
|
} |
||||
|
|
||||
|
[HttpGet] |
||||
|
public async Task<ActionResult<IEnumerable<WorkStationLog>>> GetWorkStationLogs() |
||||
|
{ |
||||
|
return await _context.WorkStationLogs.ToListAsync(); |
||||
|
} |
||||
|
|
||||
|
[HttpGet("{id}")] |
||||
|
public async Task<ActionResult<WorkStationLog>> GetWorkStationLog(int id) |
||||
|
{ |
||||
|
var workStationLog = await _context.WorkStationLogs.FindAsync(id); |
||||
|
return workStationLog; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 查詢 單站報工資料 ByQuery
|
||||
|
/// </summary>
|
||||
|
/// <param name="wipNo">工單號碼</param>
|
||||
|
/// <param name="type">狀態</param>
|
||||
|
/// <param name="dateStr">開始日期</param>
|
||||
|
/// <param name="dateEnd">結束日期</param>
|
||||
|
/// <param name="page">頁數</param>
|
||||
|
/// <param name="limit"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet("Query")] |
||||
|
public async Task<ResultModel<WorkStationLogDto>> GetWorkStationLogQuery(string wipNo = null, string dateStr = null, string dateEnd = null, string type = null, int page = 0, int limit = 10) |
||||
|
{ |
||||
|
ResultModel<WorkStationLogDto> result = new ResultModel<WorkStationLogDto>(); |
||||
|
|
||||
|
IQueryable<WorkStationLogDto> q = from q1 in _context.WorkStationLogs |
||||
|
join q2 in _context.WipInfos on q1.wipNo equals q2.WipNO |
||||
|
join q3 in _context.Stationses on q1.StationID equals q3.StationID |
||||
|
join q4 in _context.UserInfoes on q1.CreateUserID equals q4.UserID |
||||
|
select new WorkStationLogDto |
||||
|
{ |
||||
|
workStationid = q1.workStationid, |
||||
|
wipNo = q1.wipNo, |
||||
|
wipQty = q2.PlanQTY, |
||||
|
itemNo = q1.itemNo, |
||||
|
StationID = q1.StationID, |
||||
|
StationName = q3.StationName, |
||||
|
productionQty = q1.productionQty, |
||||
|
exceptionCode = q1.exceptionCode, |
||||
|
remarks = q1.remarks, |
||||
|
type = q1.type, |
||||
|
startTime = q1.startTime, |
||||
|
endTime = q1.endTime, |
||||
|
CreateUserName = q4.UserName |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
if (!string.IsNullOrWhiteSpace(wipNo)) |
||||
|
q = q.Where(w => w.wipNo == wipNo); |
||||
|
|
||||
|
if (!string.IsNullOrWhiteSpace(type)) |
||||
|
q = q.Where(w => w.type == type); |
||||
|
|
||||
|
if (DateTime.TryParse(dateStr, out _)) |
||||
|
{ |
||||
|
q = q.Where(w => w.startTime >= DateTime.Parse(dateStr + " 00:00:00")); |
||||
|
} |
||||
|
|
||||
|
if (DateTime.TryParse(dateEnd, out _)) |
||||
|
{ |
||||
|
q = q.Where(w => w.startTime <= DateTime.Parse(dateEnd + " 23:59:59")); |
||||
|
} |
||||
|
|
||||
|
// 紀錄筆數
|
||||
|
result.DataTotal = q.Count(); |
||||
|
|
||||
|
// Table 頁數
|
||||
|
if (page > 0) |
||||
|
{ |
||||
|
q = q.Skip((page - 1) * limit).Take(limit); |
||||
|
} |
||||
|
|
||||
|
result.Data = await q.ToListAsync(); |
||||
|
|
||||
|
foreach (var item in result.Data) |
||||
|
{ |
||||
|
item.type = item.type == "A" ? "生產工時" : |
||||
|
item.type == "B" ? "無效工時" : |
||||
|
item.type == "C" ? "異常工時" : |
||||
|
item.type; |
||||
|
} |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 更新單站報工資料
|
||||
|
/// </summary>
|
||||
|
/// <param name="workStationLog"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPut] |
||||
|
public async Task<ResultModel<WorkStationLog>> PutWorkStationLog(WorkStationLog workStationLog) |
||||
|
{ |
||||
|
ResultModel<WorkStationLog> result = new ResultModel<WorkStationLog>(); |
||||
|
_context.Entry(workStationLog).State = EntityState.Modified; |
||||
|
_context.Entry<WorkStationLog>(workStationLog).Property("CreateDate").IsModified = false; |
||||
|
_context.Entry<WorkStationLog>(workStationLog).Property("CreateUserID").IsModified = false; |
||||
|
workStationLog.UpdateDate = DateTime.Now; |
||||
|
|
||||
|
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="workStationLog"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost] |
||||
|
public async Task<ResultModel<WorkStationLog>> PostWorkStationLog(WorkStationLog workStationLog) |
||||
|
{ |
||||
|
ResultModel<WorkStationLog> result = new ResultModel<WorkStationLog>(); |
||||
|
Helper helper = new Helper(_context); |
||||
|
workStationLog.workStationid = helper.GetIDKey("WORK_STATION_ID").Result; |
||||
|
_context.WorkStationLogs.Add(workStationLog); |
||||
|
try |
||||
|
{ |
||||
|
await _context.SaveChangesAsync(); |
||||
|
result.Success = true; |
||||
|
result.Msg = "OK"; |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
result.Success = false; |
||||
|
result.Msg = ex.InnerException.Message; |
||||
|
} |
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
[HttpDelete("{id}")] |
||||
|
public async Task<ResultModel<string>> DeleteWorkStationLog(int id) |
||||
|
{ |
||||
|
ResultModel<string> result = new ResultModel<string>(); |
||||
|
var workStationLog = await _context.WorkStationLogs.FindAsync(id); |
||||
|
|
||||
|
try |
||||
|
{ |
||||
|
if (workStationLog == null) |
||||
|
{ |
||||
|
result.Success = false; |
||||
|
result.Msg = "找不到要刪除資料"; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
_context.WorkStationLogs.Remove(workStationLog); |
||||
|
await _context.SaveChangesAsync(); |
||||
|
result.Success = true; |
||||
|
result.Msg = "OK"; |
||||
|
} |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
result.Success = false; |
||||
|
result.Msg = ex.InnerException.Message; |
||||
|
} |
||||
|
return result; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,109 @@ |
|||||
|
using System; |
||||
|
|
||||
|
#nullable disable |
||||
|
|
||||
|
namespace AMESCoreStudio.WebApi.DTO.AMES |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 單站報工資料Dto
|
||||
|
/// </summary>
|
||||
|
public partial class WorkStationLogDto |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 流水號
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public int workStationid { get; set; } = 0; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 工單號碼
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string wipNo { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 工單料號
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string itemNo { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 工單數量
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public int wipQty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 作業站
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public int StationID { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 作業站
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public string StationName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 型態
|
||||
|
/// </summary>
|
||||
|
public string type { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 生產數量
|
||||
|
/// </summary>
|
||||
|
public int? productionQty { get; set; } = 0; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 開始時間
|
||||
|
/// </summary>
|
||||
|
public DateTime? startTime { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 結束時間
|
||||
|
/// </summary>
|
||||
|
public DateTime? endTime { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 無效/異常代碼
|
||||
|
/// </summary>
|
||||
|
public string exceptionCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 備註
|
||||
|
/// </summary>
|
||||
|
public string remarks { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 建立UserID
|
||||
|
/// </summary>
|
||||
|
public int CreateUserID { get; set; } = 0; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 建立UserName
|
||||
|
/// </summary>
|
||||
|
public string CreateUserName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 建立日期
|
||||
|
/// </summary>
|
||||
|
public DateTime CreateDate { get; set; } = DateTime.Now; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 更新UserID
|
||||
|
/// </summary>
|
||||
|
|
||||
|
public int? UpdateUserID { get; set; } = 0; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 建立UserName
|
||||
|
/// </summary>
|
||||
|
public string UpdateUserName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 更新日期
|
||||
|
/// </summary>
|
||||
|
public DateTime? UpdateDate { get; set; } = DateTime.Now; |
||||
|
} |
||||
|
} |
@ -0,0 +1,118 @@ |
|||||
|
using System; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using System.Runtime.Serialization; |
||||
|
|
||||
|
#nullable disable |
||||
|
|
||||
|
namespace AMESCoreStudio.WebApi.Models.AMES |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 單站報工資料
|
||||
|
/// </summary>
|
||||
|
[Table("WORK_STATION_LOG", Schema = "JHAMES")] |
||||
|
public partial class WorkStationLog |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 流水號
|
||||
|
/// </summary>
|
||||
|
[Key] |
||||
|
[Required] |
||||
|
[DataMember] |
||||
|
[Column("WORK_STATION_ID")] |
||||
|
public int workStationid { get; set; } = 0; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 工單號碼
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
[Column("WIP_NO")] |
||||
|
public string wipNo { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 工單料號
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
[Column("ITEM_NO")] |
||||
|
public string itemNo { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 作業站
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
[Column("STATION_ID")] |
||||
|
public int StationID { get; set; } = 0; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 型態
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
[Column("TYPE")] |
||||
|
public string type { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 生產數量
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
[Column("PRODUCTION_QTY")] |
||||
|
public int? productionQty { get; set; } = 0; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 開始時間
|
||||
|
/// </summary>
|
||||
|
[Column("START_TIME")] |
||||
|
[DataMember] |
||||
|
[DataType(DataType.Text), DisplayFormat(DataFormatString = "{0:yyyy-MM-dd HH:mm:ss}", ApplyFormatInEditMode = true)] |
||||
|
public DateTime? startTime { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 結束時間
|
||||
|
/// </summary>
|
||||
|
[Column("END_TIME")] |
||||
|
[DataMember] |
||||
|
[DataType(DataType.Text), DisplayFormat(DataFormatString = "{0:yyyy-MM-dd HH:mm:ss}", ApplyFormatInEditMode = true)] |
||||
|
public DateTime? endTime { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 無效/異常代碼
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
[Column("EXCEPTION_CODE")] |
||||
|
public string exceptionCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 備註
|
||||
|
/// </summary>
|
||||
|
[DataMember] |
||||
|
[Column("REMARKS")] |
||||
|
public string remarks { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 建立UserID
|
||||
|
/// </summary>
|
||||
|
[Column("CREATE_USERID")] |
||||
|
[DataMember] |
||||
|
public int CreateUserID { get; set; } = 0; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 建立日期
|
||||
|
/// </summary>
|
||||
|
[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; |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue