Browse Source

1.修改維修資料統計

1.1.增加全部數據導出(引用excel.js)
PTD
Marvin 3 years ago
parent
commit
69225c207e
  1. 117
      AMESCoreStudio.Web/Views/REP/REP012.cshtml
  2. 80
      AMESCoreStudio.Web/wwwroot/lib/layui_ext/excel.js
  3. 26
      AMESCoreStudio.Web/wwwroot/lib/layui_ext/xlsx.js
  4. 67
      AMESCoreStudio.WebApi/Controllers/AMES/NgRepairsController.cs

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

@ -142,17 +142,46 @@
</div> </div>
<table class="layui-hide" id="query" lay-filter="query"></table> <table class="layui-hide" id="query" lay-filter="query"></table>
<div class="layui-inline"> <div class="layui-inline">
<button type="button" id="btnChart1" class="layui-btn layui-btn-normal layui-btn-sm"><i class="layui-icon">&#xe68a;</i>不良代碼統計</button> <button type="button" id="btnChart1" class="layui-btn layui-btn-normal layui-btn-sm"><i class="fa fa-pie-chart"></i>不良代碼統計</button>
<button type="button" id="btnChart2" class="layui-btn layui-btn-normal layui-btn-sm"><i class="layui-icon">&#xe68a;</i>維修代碼統計</button> <button type="button" id="btnChart2" class="layui-btn layui-btn-normal layui-btn-sm"><i class="layui-icon">&#xe68a;</i>維修代碼統計</button>
<button type="button" id="btnChart3" class="layui-btn layui-btn-normal layui-btn-sm"><i class="layui-icon">&#xe68a;</i>維修位置統計</button> <button type="button" id="btnChart3" class="layui-btn layui-btn-normal layui-btn-sm"><i class="layui-icon">&#xe68a;</i>維修位置統計</button>
<button type="button" id="btnChart4" class="layui-btn layui-btn-normal layui-btn-sm"><i class="layui-icon">&#xe68a;</i>責任單位統計</button> <button type="button" id="btnChart4" class="layui-btn layui-btn-normal layui-btn-sm"><i class="layui-icon">&#xe68a;</i>責任單位統計</button>
<button type="button" id="btnExport" class="layui-btn layui-btn-normal layui-btn-sm"><i class="fa fa-file-excel-o"></i>導出全部數據</button>
</div> </div>
</div> </div>
</div> </div>
@section Scripts{ @section Scripts{
<script type="text/javascript">
layui.config({
base: '../lib/layui_ext/',
}).extend({
excel: 'excel',
});
</script>
<script type="text/javascript"> <script type="text/javascript">
function formatJSONDate(jsonDate) {
if (jsonDate == null) {
return "";
}
else {
var date = eval(jsonDate.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));
var myDate = new Date(date);
var yy = myDate.getFullYear();
var mm = (myDate.getMonth() + 1 < 10 ? '0' : '') + (myDate.getMonth() + 1);
var dd = (myDate.getDate() < 10 ? '0' : '') + myDate.getDate();
var h = (myDate.getHours() < 10 ? '0' : '') + myDate.getHours();
var m = (myDate.getMinutes() < 10 ? '0' : '') + myDate.getMinutes();
var s = (myDate.getSeconds() < 10 ? '0' : '') + myDate.getSeconds();
//mm + "/" + dd + " " +
//var output = yy + "-" + mm + "-" + dd + " " + h + ":" + m + ":" + s;
var output = yy + mm + dd + h + m + s;
// myDate.getHours() + ":" + myDate.getMinutes() + ":" + myDate.getSeconds();
return output;
}
}
function getLineInfoList(data) function getLineInfoList(data)
{ {
$.ajax( $.ajax(
@ -199,6 +228,84 @@
}); });
}; };
layui.use(['jquery', 'excel', 'layer'], function () {
var $ = layui.jquery;
var layer = layui.layer;
var excel = layui.excel;
$('#btnExport').on('click', function () {
$.ajax({
url: '@Url.Action("REP012Query", "REP")',
dataType: 'json',
success(res) {
var data = res.data;
data = excel.filterExportData(data, [
'unitNO',
'lineDesc',
'createDate',
'stationName',
'wipNO',
'planQTY',
'barcodeNo',
'modelNO',
'itemNO',
'semiItemNo',
'oldPartNo',
'newPartNo',
'ngNo',
'reasonDesc',
'locationNo',
'changeMaterial',
'repairReason',
'repairType2',
'memo',
'repairDesc',
'ngType2',
'rrDesc',
'userNo',
'userName',
'replyDate',
'testDate',
'testUserNo',
'testUserName',
'testTypeName',
'qaTypeName',
'ngReasonDescEn',
'partNo',
'pinNo',
'reelNo',
'dateCode',
'vendorCode',
'replyReason',
'replyMeasure',
'replyUserNo',
'replyUserName'
]);
data.unshift({
unitNO: "製程單位", lineDesc: "線別", createDate: "維修時間", stationName: "站別", wipNO: "工單號碼", planQTY: "數量", barcodeNo: "條碼", modelNO: "機種", itemNO: "料號", semiItemNo: "半成品料號", oldPartNo: "舊料號", newPartNo: "新料號",
ngNo: "不良代碼", reasonDesc: "不良描述", locationNo: "維修位置", changeMaterial: "更換零件", repairReason: "維修原因", repairType2: "維修類別", memo: "維修備註", repairDesc: "維修描述",
ngType2: "不良類別", rrDesc: "不良責任類別", userNo: "維修工號", userName: "維修人員", replyDate: "回覆時間", testDate: "測試時間", testUserNo: "測試工號", testUserName: "測試人員"
, testTypeName: "測試類別", qaTypeName: "QA類別", ngReasonDescEn: "英文不良描述", partNo: "零件料號", pinNo: "腳位", reelNo: "料卷號"
, dateCode: "日期碼", vendorCode: "供應商代碼", replyReason: "回覆原因"
, replyMeasure: "回覆對策", replyUserNo: "回覆工號", replyUserName: "回覆人員"
});
var timestart = Date.now();
excel.downloadExcel(data, '維修數據' + formatJSONDate(Date.now().toString()), 'xlsx');
var timeend = Date.now();
var spent = (timeend - timestart) / 1000;
layer.alert('導出全部數據耗時 ' + spent + ' s');
}
, error() {
layer.alert('導出全部數據失敗');
}
});
});
});
layui.use(['form', 'layer', 'laydate'], function () { layui.use(['form', 'layer', 'laydate'], function () {
form = layui.form; form = layui.form;
laydate = layui.laydate; laydate = layui.laydate;
@ -219,14 +326,14 @@
form.on('select(productType)', function (data) form.on('select(productType)', function (data)
{ {
$("#productTypeNo").val(data.value); $("#productTypeNo").val(data.value);
}); });
form.on('select(testType)', function (data) { form.on('select(testType)', function (data) {
$("#testTypeNo").val(data.value); $("#testTypeNo").val(data.value);
}); });
form.on('select(unit)', function (data) { form.on('select(unit)', function (data) {
$("#unitNo").val(data.value); $("#unitNo").val(data.value);
@ -324,7 +431,7 @@
sort: true sort: true
}, },
{ {
field: 'rmaNo', field: 'repairNo',
title: '維修代碼', title: '維修代碼',
width: 120, width: 120,
sort: true sort: true

80
AMESCoreStudio.Web/wwwroot/lib/layui_ext/excel.js

@ -0,0 +1,80 @@
/*
* @Author: Jeffrey Wang
* @Desc: 改造网络上 xlsx 代码而成如有侵权请联系我删掉重写()
* @Date: 2018-03-24 09:54:17
* @Last Modified by: Jeffrey Wang
* @Last Modified time: 2018-12-14 21:45:50
*/
layui.define(['xlsx'], function(exports){
exports('excel', {
saveAs : function(obj, fileName) {//可以自定义简单的下载文件实现方式
var tmpa = document.createElement("a");
tmpa.download = fileName || "下载";
tmpa.href = URL.createObjectURL(obj); //绑定a标签
tmpa.click(); //模拟点击实现下载
setTimeout(function () { //延时释放
URL.revokeObjectURL(obj); //用URL.revokeObjectURL()来释放这个object URL
}, 100);
},
// const wopts = { bookType: 'xlsx', bookSST: false, type: 'binary' };//这里的数据是用来定义导出的格式类型
// const wopts = { bookType: 'csv', bookSST: false, type: 'binary' };//ods格式
// const wopts = { bookType: 'ods', bookSST: false, type: 'binary' };//ods格式
// const wopts = { bookType: 'xlsb', bookSST: false, type: 'binary' };//xlsb格式
// const wopts = { bookType: 'fods', bookSST: false, type: 'binary' };//fods格式
// const wopts = { bookType: 'biff2', bookSST: false, type: 'binary' };//xls格式
//
// 弹出下载框
downloadExcel : function(data, filename, type) {
type = type || 'xlsx';
var wopts = { bookType: type, bookSST: false, type: 'binary' }
const wb = { SheetNames: ['Sheet1'], Sheets: {}, Props: {} };
wb.Sheets['Sheet1'] = XLSX.utils.json_to_sheet(data, { skipHeader: true});//通过json_to_sheet转成单页(Sheet)数据
this.saveAs(new Blob([this.s2ab(XLSX.write(wb, wopts))], { type: "application/octet-stream" }), filename + '.' + (wopts.bookType=="biff2"?"xls":wopts.bookType));
},
s2ab : function(s) {
if (typeof ArrayBuffer !== 'undefined') {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
return buf;
} else {
var buf = new Array(s.length);
for (var i = 0; i != s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF;
return buf;
}
},
/**
* 梳理导出的数据包括字段排序和多余数据过滤
* @param {[type]} data [需要梳理的数据]
* @param {[type]} fields [支持数组和对象用于映射关系和字段排序]
* @return {[type]} [description]
*/
filterExportData(data, fields) {
// PS:之所以不直接引用 data 节省内存,是因为担心如果 fields 可能存在如下情况: { "id": 'test_id', 'test_id': 'new_id' },会导致处理异常
var exportData = [];
var true_fields = [];
// filed 支持两种模式,数组则单纯排序,对象则转换映射关系,为了统一处理,将数组转换为符合要求的统一对象
if (Array.isArray(fields)) {
for (var i in fields) {
true_fields[fields[i]] = fields[i];
}
} else {
true_fields = fields;
}
for (i in data) {
var item = data[i];
exportData[i] = {};
for (key in true_fields) {
var old_field_name = key;
var new_field_name = true_fields[key];
if (typeof item[old_field_name] != 'undefined') {
exportData[i][new_field_name] = item[old_field_name];
} else {
exportData[i][new_field_name] = '';
}
}
}
return exportData;
}
});
});

26
AMESCoreStudio.Web/wwwroot/lib/layui_ext/xlsx.js

File diff suppressed because one or more lines are too long

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

@ -113,6 +113,14 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
join q7 in _context.Stationses on q2.StationId equals q7.StationID join q7 in _context.Stationses on q2.StationId equals q7.StationID
join q8 in _context.NgComponents on q2.NgID equals q8.NgID join q8 in _context.NgComponents on q2.NgID equals q8.NgID
join q9 in _context.RepairResponsibleUnitses on q1.RepairResponsibleID equals q9.RRID join q9 in _context.RepairResponsibleUnitses on q1.RepairResponsibleID equals q9.RRID
join qa in _context.NGReasons on q8.NgNo equals qa.NGReasonNo
join qb in _context.RepairTypes on q1.RepairTypeNo equals qb.RepairTypeNo
join qc in _context.UserInfoes on q1.CreateUserID equals qc.UserID
join qd in _context.UserInfoes on q2.CreateUserID equals qd.UserID
join qe in _context.TestTypes on q2.TypeNo equals qe.TypeNo
join qf in _context.UserInfoes on q8.ReplyUserID equals qf.UserID
join qg in _context.RMAReasons on q1.RepairNo equals qg.RMAReasonNo
join qh in _context.QATypes on qg.QATypeId equals qh.QATypeID
select new select new
{ {
q4.UnitNO, q4.UnitNO,
@ -120,18 +128,51 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
q1.CreateDate, q1.CreateDate,
q7.StationName, q7.StationName,
q4.WipNO, q4.WipNO,
q4.PlanQTY,
q3.BarcodeNo,
q5.ModelNO,
q5.ItemNO, q5.ItemNO,
q8.SemiItemNo,
q8.OldPartNo,
q8.NewPartNo,
q8.NgNo,
ReasonDesc = q8.NgNo+'-'+qa.NGReasonDesc,
q8.LocationNo,
q8.ChangeMaterial,
RepairReason = q1.RepairNo+'-'+q1.RepairDesc,
RepairType2 = qb.RepairTypeNo+'-'+qb.RepairTypeDesc,
q1.Memo,
q1.RepairDesc,
NgType2 = qa.NGReasonNo+'-'+qa.NGReasonDesc,
ResponsibleUnit = q9.RRID+'-'+q9.RRDesc,
q9.RRDesc,
qc.UserNo,
qc.UserName,
q8.ReplyDate,
//RepairDays = (q8.ReplyDate-q2.CreateDate).TotalDays.ToString("0.00"),
TestDate = q2.CreateDate,
TestUserNo = qd.UserNo,
TestUserName = qd.UserName,
TestTypeName = qe.TypeName,
qh.QATypeName,
qa.NGReasonDescEn,
q1.PartNo,
q8.PinNo,
q8.ReelNo,
q8.DateCode,
q8.VendorCode,
q8.ReplyReason,
q8.ReplyMeasure,
q8.ReplyUserID,
ReplyUserNo = qf.UserNo,
ReplyUserName = qf.UserName,
q4.LineID, q4.LineID,
q3.BarcodeNo,
q2.TypeNo, q2.TypeNo,
q2.StationId, q2.StationId,
q2.ReasonNo, q1.RepairNo,
q1.RmaNo, q2.ReasonNo
q1.RepairTypeNo,
q1.RepairDesc,
q8.LocationNo,
q9.RRDesc
}; };
if (productType != "*") if (productType != "*")
{ {
@ -257,7 +298,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
q2.TypeNo, q2.TypeNo,
q2.StationId, q2.StationId,
q2.ReasonNo, q2.ReasonNo,
q1.RmaNo, q1.RepairNo,
q1.RepairTypeNo, q1.RepairTypeNo,
q1.RepairDesc, q1.RepairDesc,
q8.LocationNo, q8.LocationNo,
@ -388,7 +429,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
q2.TypeNo, q2.TypeNo,
q2.StationId, q2.StationId,
q2.ReasonNo, q2.ReasonNo,
q1.RmaNo, q1.RepairNo,
q1.RepairTypeNo, q1.RepairTypeNo,
q1.RepairDesc, q1.RepairDesc,
q8.LocationNo, q8.LocationNo,
@ -456,9 +497,9 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
q = q.OrderBy(w => w.CreateDate); q = q.OrderBy(w => w.CreateDate);
var g = q.GroupBy(x => new { x.RmaNo }).Select(x => new var g = q.GroupBy(x => new { x.RepairNo }).Select(x => new
{ {
RMACode = x.Key.RmaNo, RMACode = x.Key.RepairNo,
RMAQty = x.Count() RMAQty = x.Count()
}).ToList(); }).ToList();
@ -520,7 +561,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
q2.TypeNo, q2.TypeNo,
q2.StationId, q2.StationId,
q2.ReasonNo, q2.ReasonNo,
q1.RmaNo, q1.RepairNo,
q1.RepairTypeNo, q1.RepairTypeNo,
q1.RepairDesc, q1.RepairDesc,
q8.LocationNo, q8.LocationNo,
@ -652,7 +693,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
q2.TypeNo, q2.TypeNo,
q2.StationId, q2.StationId,
q2.ReasonNo, q2.ReasonNo,
q1.RmaNo, q1.RepairNo,
q1.RepairTypeNo, q1.RepairTypeNo,
q1.RepairDesc, q1.RepairDesc,
q8.LocationNo, q8.LocationNo,

Loading…
Cancel
Save