652 lines
30 KiB
JavaScript
652 lines
30 KiB
JavaScript
define(["angularAMD"], function (angularAMD) {
|
||
angularAMD.service('mrs05Service', ["$rootScope", "$filter", "$stateParams", "config", "DashboardService", "MMWService", '$mdDialog',
|
||
function ($rootScope, $filter, $stateParams, config, $DashboardService, $MMWService, $mdDialog) {
|
||
/***
|
||
* optins : {
|
||
* plotItem : {
|
||
* plot_no,
|
||
* op_seq,
|
||
* op_no
|
||
* work_station
|
||
* },
|
||
* close : function //關閉後呼叫的方法
|
||
* }
|
||
*/
|
||
this.init = function (options) {
|
||
|
||
function openDialog() {
|
||
$mdDialog.dialog('module/moduleWIP/program/mrs-eqp/mrs05/mrs05.html',
|
||
function (dialog) {
|
||
$rootScope.equipment = {};
|
||
|
||
initialDialogParameters(dialog);
|
||
if (dialog.equipmentNo != undefined) {
|
||
getQCList(dialog.equipmentNo, dialog.callByCheckIn, loadQcList);
|
||
}
|
||
|
||
function loadQcList(data) {
|
||
|
||
var tmp;
|
||
tmp = JSON.parse(data['kcWIP.clsLot.LoadWaitQCListData']);
|
||
ReplaceInspTypeInQcListWithValueList(tmp.WaitQCList, function (waitQCList) {
|
||
dialog.WaitQCList = waitQCList;
|
||
});
|
||
|
||
//BR進站時,不顯示補點檢
|
||
if (!dialog.callByCheckIn) {
|
||
tmp = JSON.parse(data['kcWIP.clsLot.LoadReQCListData']);
|
||
ReplaceInspTypeInQcListWithValueList(tmp.ReQCList, function (reQCList) {
|
||
dialog.ReQCList = reQCList;
|
||
});
|
||
}
|
||
}
|
||
|
||
//ValueList相關
|
||
function ReplaceInspTypeInQcListWithValueList(qcList, callback) {
|
||
GetValueList('FRMEQPQCLISTSETUP', 'QCTYPE', function (valueList) {
|
||
|
||
if (valueList.length > 0) {
|
||
qcList.forEach(
|
||
qcListItem => {
|
||
var drSel = valueList.filter(valueListItem => {
|
||
return qcListItem.INSPTYPE == valueListItem.COLUMNVALUE;
|
||
});
|
||
|
||
if (drSel.length > 0) {
|
||
return qcListItem.InspTypeName = $filter('translate')('mrs05.QCTYPE.' + drSel[0].DISPLAYTEXT.toUpperCase());
|
||
}
|
||
}
|
||
);
|
||
}
|
||
|
||
if (callback) callback(qcList);
|
||
});
|
||
}
|
||
function GetValueList(pTableName, pColumnName, callback) {
|
||
var uri = [];
|
||
var content = [];
|
||
|
||
uri.push("kcSYS.clsValueList.LoadValueList");
|
||
content.push({
|
||
pTableName: pTableName,
|
||
pColumnName: pColumnName
|
||
});
|
||
|
||
$MMWService.sendToMESSrv_Multi({
|
||
uri: uri,
|
||
content: content,
|
||
success: function (data) {
|
||
|
||
if (data.Code == "0") {
|
||
var tmpJson = JSON.parse(data.ResultJson);
|
||
var tmp;
|
||
var index = 0;
|
||
tmp = JSON.parse(tmpJson[uri[index]]);
|
||
tmp = tmp[Object.keys(tmp)[0]];
|
||
|
||
if (callback) {
|
||
callback(tmp);
|
||
}
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
return {
|
||
confirm: function () {
|
||
|
||
//全填寫完才可存檔
|
||
for (var n in dialog.eqpQcListDetail) {
|
||
if (dialog.eqpQcListDetail[n].QCResult == -1) {
|
||
$rootScope.showAlert(dialog.eqpQcListDetail[n].QCITEM + $filter('translate')('mrs05.msg.notDefine'));
|
||
return;
|
||
}
|
||
}
|
||
|
||
prepareParameters(dialog);
|
||
|
||
addWIPEQPQCListLog(dialog, function (data) {
|
||
data = JSON.parse(data.ResultJson);
|
||
if (data.Result != 'fail') {
|
||
|
||
options.callBack(true);
|
||
dialog.hide();
|
||
|
||
} else {
|
||
$rootScope.showAlert(data.SysMsg);
|
||
}
|
||
});
|
||
|
||
},
|
||
background: {
|
||
click: function () {
|
||
dialog.hide();
|
||
if (typeof (feedback) == 'function')
|
||
feedback();
|
||
}
|
||
},
|
||
itemStatus: function (item) {
|
||
if (item.check_type == '0') {
|
||
if (item.std_value == item.CheckValue) {
|
||
//item.CheckResult = 'OK'
|
||
item.CheckResult = 0
|
||
return 'check-point-ok';
|
||
} else {
|
||
//item.CheckResult = 'NG'
|
||
item.CheckResult = 1
|
||
return 'check-point-notok';
|
||
}
|
||
} else if (item.check_type == '1') {
|
||
var isInterval = true;
|
||
if (item.range_min !== null) {
|
||
isInterval = isInterval && ((+item.range_min) <= (+item.CheckValue));
|
||
}
|
||
if (item.range_max !== null) {
|
||
isInterval = isInterval && ((+item.CheckValue) <= (+item.range_max));
|
||
}
|
||
|
||
if (isInterval) {
|
||
//item.CheckResult = 'OK'
|
||
item.CheckResult = 0
|
||
return 'check-point-ok';
|
||
} else {
|
||
//item.CheckResult = 'NG'
|
||
item.CheckResult = 1
|
||
return 'check-point-notok';
|
||
}
|
||
} else if (item.check_type == '3') { //20190312 KevinChang加入QC類別為3的CheckResult直接給0
|
||
item.CheckResult = 0
|
||
}
|
||
|
||
return '';
|
||
},
|
||
itemClick: function (item) {
|
||
//item.isClick = !item.isClick;
|
||
if (item.CheckValue == '0') {
|
||
//item.CheckResult = 'NG'
|
||
item.CheckResult = 1
|
||
item.CheckValue = 1;
|
||
} else {
|
||
//item.CheckResult = 'OK';
|
||
item.CheckResult = 0
|
||
item.CheckValue = 0;
|
||
}
|
||
},
|
||
type2Init: function (item) {
|
||
if (!item.CheckValue) {
|
||
//item.CheckResult = 'NG';
|
||
item.CheckResult = 1
|
||
item.CheckValue = 1;
|
||
}
|
||
},
|
||
back: function () {
|
||
dialog.hide();
|
||
if (options.close)
|
||
options.close();
|
||
},
|
||
cancel: function () {
|
||
dialog.eqpQcListDetail = [];
|
||
},
|
||
loadMachineChecklist: function (item) {
|
||
|
||
dialog.qcListNo = item.QCLISTNO;
|
||
dialog.qcListName = item.QCLISTNAME;
|
||
dialog.qcTaskNo = item.QCTASKNO;
|
||
dialog.inspType = item.INSPTYPE;
|
||
|
||
//移除EAI 架構,直接呼叫KC
|
||
var uri = [];
|
||
var content = [];
|
||
|
||
//點檢序號
|
||
uri.push("kcWIP.clsWIP.GetQCListSerial");
|
||
content.push({
|
||
QCListSerialLeadString: getQCListSerialLeadString(item.QCLISTNO)
|
||
});
|
||
|
||
uri.push("kcEQP.clsEQPBasis.ShowEQPQCListBasis");
|
||
content.push({
|
||
QCListNo: item.QCLISTNO
|
||
});
|
||
|
||
//品管項目
|
||
uri.push("kcEQP.clsEQPBasis.ShowEQPQCListDetail");
|
||
content.push({
|
||
QCListNo: item.QCLISTNO
|
||
});
|
||
|
||
//設備
|
||
uri.push("kcEQP.clsEQPBasis.LoadEquipmentBasis");
|
||
content.push({
|
||
EquipmentNo: dialog.equipmentNo
|
||
});
|
||
|
||
getMachineChecklist(uri, content, function (data) {
|
||
data = JSON.parse(data.ResultJson);
|
||
if (Object.keys(data).length > 0) {
|
||
|
||
let temp;
|
||
|
||
//點檢序號
|
||
temp = JSON.parse(data['kcWIP.clsWIP.GetQCListSerial']);
|
||
dialog.qCListSerial = temp.ReturnValue;
|
||
|
||
temp = JSON.parse(data['kcEQP.clsEQPBasis.ShowEQPQCListBasis']);
|
||
temp = temp.ShowEQPQCListBasis;
|
||
if (temp.length > 0)
|
||
dialog.unValidAction = temp[0].UNVALIDACTION;
|
||
|
||
//品管項目
|
||
temp = JSON.parse(data['kcEQP.clsEQPBasis.ShowEQPQCListDetail']);
|
||
temp.ShowEQPQCListDetail = initialQcListDetail(temp.ShowEQPQCListDetail, dialog.qCListSerial);
|
||
dialog.expressionColQty = initialExpressionColQty(temp.ShowEQPQCListDetail);
|
||
dialog.eqpQcListDetail = temp.ShowEQPQCListDetail;
|
||
|
||
//設備類別、設備名稱
|
||
temp = JSON.parse(data['kcEQP.clsEQPBasis.LoadEquipmentBasis']);
|
||
temp = temp.EQPEquipmentBasis[0];
|
||
dialog.equipmentType = temp.EQUIPMENTTYPE;
|
||
dialog.equipmentName = temp.EQUIPMENTNAME;
|
||
}
|
||
});
|
||
},
|
||
inputValueCorrect: inputValueCorrect,
|
||
checkQCResult: checkQCResult,
|
||
switchQCResult: function (item) {
|
||
if (item.QCTYPE == 2) {
|
||
item.QCResult = (item.QCResult == 0) ? 1 : 0;
|
||
}
|
||
},
|
||
showCorrectIcon: showCorrectIcon,
|
||
showErrorIcon: showErrorIcon,
|
||
scanQrcode_eqp: function () {
|
||
$rootScope.$root.OpenScanner({
|
||
after: function (result) {
|
||
|
||
dialog.equipmentNo = result.text;
|
||
|
||
//20230324,13871,處理錯誤
|
||
//search_eqp({ eqpno: dialog.equipmentNo }, function (data) { });
|
||
getQCList(dialog.equipmentNo,dialog.callByCheckIn, loadQcList);
|
||
},
|
||
exception: function () {
|
||
//目前裝置無法使用相機
|
||
$rootScope.showAlert($filter('translate')('common.msg.camera_not_support'));
|
||
},
|
||
orientation: "landscape"
|
||
});
|
||
},
|
||
enter: function (event) {
|
||
if (event.keyCode == 13) {
|
||
getQCList(dialog.equipmentNo,dialog.callByCheckIn, loadQcList);
|
||
}
|
||
},
|
||
showEquipmentList: function () {
|
||
|
||
if (dialog.equipmentNoList == undefined) return;
|
||
if (dialog.equipmentNoList.length <= 0) return;
|
||
|
||
$rootScope.showSelect({
|
||
title: "{{'mrs05.title'|translate}}",
|
||
label: "MACHINE_NO",
|
||
code: "MACHINE_NO",
|
||
order: "MACHINE_NO",
|
||
selectCode: '',
|
||
list: dialog.equipmentNoList,
|
||
|
||
confirm: function (s_item, s_dialog) {
|
||
s_dialog.hide();
|
||
|
||
dialog.equipmentNo = s_item.MACHINE_NO;
|
||
getQCList(dialog.equipmentNo, dialog.callByCheckIn, loadQcList);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
}
|
||
);
|
||
}
|
||
|
||
|
||
|
||
function search_eqp(content, callback) {
|
||
|
||
$rootScope.alertStatus(function (Status) {
|
||
if (Status == 1) {
|
||
return;
|
||
} else {
|
||
|
||
getAllMachineData_OP(content.eqpno, function (data) {
|
||
data = JSON.parse(data.ResultJson);
|
||
var dt = data["ds"]["query_result"];
|
||
|
||
if (dt.length > 0) {
|
||
dialog.listWorkStation = dt;
|
||
|
||
} else {
|
||
$rootScope.showAlert($filter('translate')('mrs00.msg.cantGet') + dialog.equipmentNo + $filter('translate')('mrs00.msg.machineInfo'));
|
||
dialog.equipmentNo = '';
|
||
dialog.listWorkStation = [];
|
||
}
|
||
});
|
||
|
||
}
|
||
});
|
||
|
||
}
|
||
|
||
function getAllMachineData_OP(strEQP, callback) {
|
||
|
||
|
||
$MMWService.sendToMESSrv({
|
||
uri: 'kcWIP.clsMDS.LoadEquipmentInfoByOP',
|
||
content: {
|
||
EquipmentNo: strEQP,
|
||
ds: []
|
||
},
|
||
success: function (data) {
|
||
if (callback)
|
||
callback(data);
|
||
}
|
||
});
|
||
}
|
||
|
||
function prepareParameters(para) {
|
||
para.qcResult = calculateTotalQCResult(para.eqpQcListDetail);
|
||
|
||
for (var n in para.eqpQcListDetail) {
|
||
para.eqpQcListDetail[n].D01 = para.eqpQcListDetail[n].InputValue;
|
||
}
|
||
}
|
||
|
||
function inputValueCorrect(inputVal, item) {
|
||
if (inputVal == '') return true;
|
||
if (inputVal == null) return true;
|
||
return checkInputValueCorrect(inputVal, item);
|
||
}
|
||
|
||
function showErrorIcon(item) {
|
||
|
||
var show = false;
|
||
|
||
//提示訊息
|
||
if (item.QCTYPE == 2) {
|
||
show = (item.QCResult != 0);
|
||
|
||
} else {//其他
|
||
|
||
show = !inputValueCorrect(item.InputValue, item)
|
||
|
||
if (item.INPUTDATACOUNT >= 2) show |= !inputValueCorrect(item.D02, item)
|
||
if (item.INPUTDATACOUNT >= 3) show |= !inputValueCorrect(item.D03, item)
|
||
if (item.INPUTDATACOUNT >= 4) show |= !inputValueCorrect(item.D04, item)
|
||
if (item.INPUTDATACOUNT >= 5) show |= !inputValueCorrect(item.D05, item)
|
||
if (item.INPUTDATACOUNT >= 6) show |= !inputValueCorrect(item.D06, item)
|
||
if (item.INPUTDATACOUNT >= 7) show |= !inputValueCorrect(item.D07, item)
|
||
if (item.INPUTDATACOUNT >= 8) show |= !inputValueCorrect(item.D08, item)
|
||
if (item.INPUTDATACOUNT >= 9) show |= !inputValueCorrect(item.D09, item)
|
||
if (item.INPUTDATACOUNT >= 10) show |= !inputValueCorrect(item.D10, item)
|
||
}
|
||
|
||
//給QCResult 附值
|
||
if (show) {
|
||
item.QCResult = 1;
|
||
}
|
||
|
||
return show;
|
||
}
|
||
|
||
function showCorrectIcon(item) {
|
||
var show = false;
|
||
|
||
//提示訊息
|
||
if (item.QCTYPE == 2) {
|
||
show = (item.QCResult == 0);
|
||
|
||
} else {//其他
|
||
|
||
if (allFieldsArefilled(item)) {
|
||
show = checkQCResult(item);
|
||
}
|
||
}
|
||
|
||
//給QCResult 附值
|
||
if (show) {
|
||
item.QCResult = 0;
|
||
} else if (!showErrorIcon(item)){
|
||
item.QCResult = -1;
|
||
}
|
||
|
||
return show;
|
||
}
|
||
|
||
function allFieldsArefilled(item) {
|
||
|
||
var result = (item.InputValue != '' && item.InputValue != null);
|
||
|
||
if (item.INPUTDATACOUNT >= 2) result &= (item.D02 != '' && item.D02 != null);
|
||
if (item.INPUTDATACOUNT >= 3) result &= (item.D03 != '' && item.D03 != null);
|
||
if (item.INPUTDATACOUNT >= 4) result &= (item.D04 != '' && item.D04 != null);
|
||
if (item.INPUTDATACOUNT >= 5) result &= (item.D05 != '' && item.D05 != null);
|
||
if (item.INPUTDATACOUNT >= 6) result &= (item.D06 != '' && item.D06 != null);
|
||
if (item.INPUTDATACOUNT >= 7) result &= (item.D07 != '' && item.D07 != null);
|
||
if (item.INPUTDATACOUNT >= 8) result &= (item.D08 != '' && item.D08 != null);
|
||
if (item.INPUTDATACOUNT >= 9) result &= (item.D09 != '' && item.D09 != null);
|
||
if (item.INPUTDATACOUNT >= 10) result &= (item.D10 != '' && item.D10 != null);
|
||
|
||
return result;
|
||
}
|
||
|
||
function checkQCResult(item) {
|
||
|
||
var result = checkInputValueCorrect(item.InputValue, item);
|
||
|
||
if (item.INPUTDATACOUNT >= 2) result &= checkInputValueCorrect(item.D02, item);
|
||
if (item.INPUTDATACOUNT >= 3) result &= checkInputValueCorrect(item.D03, item);
|
||
if (item.INPUTDATACOUNT >= 4) result &= checkInputValueCorrect(item.D04, item);
|
||
if (item.INPUTDATACOUNT >= 5) result &= checkInputValueCorrect(item.D05, item);
|
||
if (item.INPUTDATACOUNT >= 6) result &= checkInputValueCorrect(item.D06, item);
|
||
if (item.INPUTDATACOUNT >= 7) result &= checkInputValueCorrect(item.D07, item);
|
||
if (item.INPUTDATACOUNT >= 8) result &= checkInputValueCorrect(item.D08, item);
|
||
if (item.INPUTDATACOUNT >= 9) result &= checkInputValueCorrect(item.D09, item);
|
||
if (item.INPUTDATACOUNT >= 10) result &= checkInputValueCorrect(item.D10, item);
|
||
|
||
return result;
|
||
}
|
||
|
||
function checkInputValueCorrect(inputVal, item) {
|
||
switch (item.QCTYPE) {
|
||
case 0:
|
||
//標準值
|
||
if (inputVal == item.STDVALUE) {
|
||
return true;
|
||
}
|
||
break;
|
||
case 1:
|
||
//區間
|
||
let inputValue = parseInt(inputVal, 10);
|
||
let max = parseInt(item.MAXIVALUE, 10);
|
||
let min = parseInt(item.MINIVALUE, 10);
|
||
|
||
if (inputValue <= max) {
|
||
if (inputValue >= min) {
|
||
return true;
|
||
}
|
||
}
|
||
break;
|
||
case 2:
|
||
//顯示訊息
|
||
return (item.qcResult==0);
|
||
break;
|
||
case 3:
|
||
//輸入資料
|
||
if (inputVal != undefined && inputVal != '') {
|
||
return true;
|
||
}
|
||
break;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
function initialDialogParameters(dialog) {
|
||
dialog.equipmentNoList = options.equipmentNoList;
|
||
dialog.equipmentNo = options.EquipmentNo;
|
||
dialog.equipmentType = "";
|
||
dialog.equipmentName = "";
|
||
dialog.qcListNo = "";
|
||
dialog.qcListName = "";
|
||
dialog.LotSerial = (options.LotSerial) ? options.LotSerial : "";
|
||
dialog.LogGroupSerial = (options.LogGroupSerial) ? options.LogGroupSerial : "";
|
||
dialog.callByCheckIn = (options.callByCheckIn) ? options.callByCheckIn : false;
|
||
dialog.eqpQcListDetail = [];
|
||
dialog.qCListSerial = "";
|
||
dialog.qcResult = -999;
|
||
dialog.description = "";
|
||
dialog.creator = config.cache.account;
|
||
dialog.unValidAction = -999;
|
||
dialog.expressionColQty = 1;
|
||
dialog.qcTaskNo = "";
|
||
dialog.inspType = -999;
|
||
}
|
||
|
||
function initialQcListDetail(qcListDetail, qCListSerial) {
|
||
for (var n in qcListDetail) {
|
||
qcListDetail[n]['QCListSerial'] = qCListSerial;
|
||
qcListDetail[n]['QCResult'] = (qcListDetail[n]['QCTYPE'] == 2) ? 0 : -1;
|
||
qcListDetail[n]['InputValue'] = "";
|
||
}
|
||
|
||
return qcListDetail
|
||
}
|
||
|
||
function initialExpressionColQty(qcListDetail) {
|
||
var result = 1;
|
||
|
||
for (var n in qcListDetail) {
|
||
if (qcListDetail[n]['INPUTDATACOUNT'] > result) {
|
||
result = qcListDetail[n]['INPUTDATACOUNT'];
|
||
}
|
||
}
|
||
|
||
return result
|
||
}
|
||
|
||
function calculateTotalQCResult(eqpQcListDetail) {
|
||
|
||
for (var n in eqpQcListDetail) {
|
||
if (eqpQcListDetail[n]['QCResult'] == -1) return -1
|
||
}
|
||
|
||
for (var n in eqpQcListDetail) {
|
||
if (eqpQcListDetail[n]['QCResult'] == 1) return 1
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
function getQCListSerialLeadString(qcListNo) {
|
||
|
||
const today = new Date();
|
||
|
||
var mm = '' + (today.getMonth() + 1);
|
||
var dd = '' + today.getDate();
|
||
var yy = today.getFullYear().toString().slice(-2);
|
||
|
||
var result = qcListNo + yy + padStart(mm, 2, '0') + padStart(dd, 2, '0');
|
||
|
||
return result
|
||
}
|
||
|
||
function padStart(string, targetLength, padString = ' ') {
|
||
return (Array(targetLength).join(padString) + string)
|
||
.slice(-targetLength)
|
||
}
|
||
|
||
function getMachineChecklist(uri, content, callback) {
|
||
$MMWService.sendToMESSrv_Multi({
|
||
uri: uri,
|
||
content: content,
|
||
success: function (data) {
|
||
|
||
if (callback) callback(data);
|
||
}
|
||
});
|
||
}
|
||
|
||
function getQCList(equipment, callByCheckIn, callback) {
|
||
|
||
//移除EAI 架構,直接呼叫KC
|
||
var uri = [];
|
||
var content = [];
|
||
|
||
//待點檢
|
||
uri.push("kcWIP.clsLot.LoadWaitQCListData");
|
||
content.push({
|
||
EquipmentNo: equipment,
|
||
CallByCheckIn: callByCheckIn
|
||
});
|
||
|
||
//補點檢
|
||
if (!callByCheckIn) {
|
||
uri.push("kcWIP.clsLot.LoadReQCListData");
|
||
content.push({
|
||
EquipmentNo: equipment
|
||
});
|
||
}
|
||
|
||
$MMWService.sendToMESSrv_Multi({
|
||
uri: uri,
|
||
content: content,
|
||
success: function (data) {
|
||
|
||
data = JSON.parse(data.ResultJson);
|
||
|
||
if (Object.keys(data).length > 0) {
|
||
callback(data);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
function addWIPEQPQCListLog(para, callback) {
|
||
|
||
//移除EAI 架構,直接呼叫KC
|
||
var uri = [];
|
||
var content = [];
|
||
|
||
//待點檢
|
||
uri.push("kcWIP.clsWIP.AddWIPEQPQCListLog");
|
||
content.push({
|
||
QCListSerial: para.qCListSerial,//ok
|
||
EquipmentNo: para.equipmentNo,//ok
|
||
QCListNo: para.qcListNo,//ok
|
||
LotSerial: para.LotSerial,
|
||
LogGroupSerial: para.LogGroupSerial,
|
||
QCResult: para.qcResult,
|
||
Description: para.description,
|
||
Creator: para.creator,
|
||
//CreateDate: para.createDate,
|
||
UnValidAction: para.unValidAction,
|
||
dtQCListDetail: para.eqpQcListDetail,
|
||
ExpressionColQty: para.expressionColQty,
|
||
QCTaskNo: para.qcTaskNo,
|
||
InspType: para.inspType
|
||
});
|
||
|
||
$MMWService.sendToMESSrv_Multi({
|
||
uri: uri,
|
||
content: content,
|
||
success: function (data) {
|
||
if (callback)
|
||
callback(data);
|
||
}
|
||
});
|
||
}
|
||
|
||
openDialog();
|
||
}
|
||
|
||
}]);
|
||
});
|