//MobileMidleware standard send Service define(["angularAMD"], function (angularAMD) { angularAMD.service('MMWService', ['$rootScope', '$filter', '$translate', 'config', '$http', 'Hub', function($rootScope, $filter, $translate, config, $http, $Hub){ var MMWService = this; /**prepare header data**/ function prepareHeader(data){ var header = {}; //TODO header.Method = data.uri; header["mds.userid"] = config.cache.account||''; header["mds.password"] = config.cache.password||''; header["mds.environment"] = config.setting.environment; header["mds.language_mode"] = $translate.use(); header["mds.computer_name"] = config.client.ip; header["mds.sessionno"] = config.mdssessionno; return header; } function prepareMESHeader(data){ var header = {}; var languagemode = $translate.use(); if (languagemode == 'en_US') languagemode = 'en'; if (languagemode == 'zh_CN') languagemode = 'zh-chs'; if (languagemode == 'zh_TW') languagemode = 'zh-cht'; //TODO header["method"] = data.uri; header["invoketype"] = data.invoketype; header["userid"] = config.cache.account||''; header["languagemode"] = languagemode; header["computername"] = config.client.ip; header["sessionno"] = config.mdssessionno; return header; } /* prepare content data * add default fields * use angular merge method to combine data.content */ function prepareContent(data){ var content = {}; content.CompanyID = config.setting.companyId; content.Equipment = config.cache.equipment; content = angular.merge(content, data.content); return content; } /* MMW send method * '*' mean require * sendData fields example { * *uri : header's method * *content : data you want send * *success : success callback method , paramter is feedback data * *error : error callback method , paramter is feedback data * netError : connect error callback method , paramter is feedback data * notify : notify callback method , paramter is feedback data * } */ this.sendToWMMServer = function(sendData, showLoading){ var digiwin = digiwin; if(showLoading == undefined) showLoading = true; if(showLoading){ $rootScope.showLoading(); } //TODO TransactClient 及 send 是否可以修改? var header = prepareHeader(sendData); var content = prepareContent(sendData); //if(digiwin != undefined){ if(false){ digiwin.exec( function(data){ if(showLoading) $rootScope.hideLoading(); MMWConnectSuccess(data, sendData.success, sendData.error); }, function(data){ if(showLoading) $rootScope.hideLoading(); MMWConnectError(data, sendData.netError); }, function(data){ if(showLoading) $rootScope.hideLoading(); MMWConnectNotify(data, sendData.notify); }, "TransactClient", "send", [sendData.uri, JSON.stringify(content), header]); } else { send(header, content, sendData, showLoading); } } this.sendToEAIServer = function(sendData, showLoading){ if(showLoading == undefined){ showLoading = true; } if(showLoading){ $rootScope.showLoading(sendData.msg); } //var ip = config.server.eaiip; //var port = config.server.eaiport; //20210505 ,新增選擇DNS/IP var ip = config.setting.DNSMode ? config.server.DNS : config.server.ip; var port = config.server.port; //var name = "MES_Production_MESws_EAI"; //sendData.invoke = sendData.invoke||'/wsEAI.asmx/invokeSrv_Json'; var data = { url : 'http://'+ip+':'+port+'/'+name+'/wsEAI.asmx/InvokeSrv_json', //url : 'http://10.40.10.66/MESws_STD/wsInvoke.asmx/invokeSrv', method : 'POST', headers : { 'Content-Type': 'application/json;charset=UTF-8' }, data : { "uri":sendData.uri, "content":JSON.stringify(sendData.content) } }; console.log(JSON.stringify(data)); if(config.server.timeout != 0) data.timeout =config.server.timeout; $http(data).success(function(data, status, headers, config) { if(showLoading) $rootScope.hideLoading(); iMESConnectSuccess(data, sendData.success, sendData.error); }).error(function(respose,status_code,c,d){ if(showLoading) $rootScope.hideLoading(); MMWConnectError(status_code, respose, data, sendData.netError); }); } //帳號認證用接口 this.sendToMESSrv_Session_plain = function(sendData, showLoading){ if(showLoading == undefined){ showLoading = true; } if(showLoading){ $rootScope.showLoading(sendData.msg); } //var ip = "localhost"; //測試用 //var name = "MESws_STD_603"; //測試用 //20210505 ,新增選擇DNS/IP var ip = config.setting.DNSMode ? config.server.DNS : config.server.ip; var name = config.server.name; var port = config.server.port; var header = prepareMESHeader(sendData); //sendData.invoke = sendData.invoke||'/wsInvoke.asmx/invokeSrv_Session_plainjson'; var data = { //url : 'http://'+ip+':'+port+'/'+name+'/wsInvoke.asmx/invokeSrv_Session_json', url : 'http://'+ip+':'+port+'/'+name+'/wsInvoke.asmx/invokeSrv_Session_plainjson', //url : 'http://10.40.10.66:80/MESws_STD/wsInvoke.asmx/invokeSrv_Session', method : 'POST', headers : { 'Content-Type': 'application/json;charset=UTF-8' }, data : { "uri":JSON.stringify(header), "content":JSON.stringify(sendData.content) } }; console.log(JSON.stringify(data)); if(config.server.timeout != 0) data.timeout =config.server.timeout; $http(data).success(function(data, status, headers, config) { //$http(data).success(function(data,parameter) { if(showLoading) $rootScope.hideLoading(); iMESConnectSuccess(data, sendData.success, sendData.error); }).error(function(respose,status_code,c,d){ if(showLoading) $rootScope.hideLoading(); MMWConnectError(status_code, respose, data, sendData.netError); }); } // JSON共用接口 this.sendToMESSrv_plain = function(sendData, showLoading){ if(showLoading == undefined){ showLoading = true; } if(showLoading){ $rootScope.showLoading(sendData.msg); } //var ip = "localhost" //var name = "MESws_STD_603"; //20210505 ,新增選擇DNS/IP var ip = config.setting.DNSMode ? config.server.DNS : config.server.ip; var name = config.server.name; var port = config.server.port; var header = prepareMESHeader(sendData); //sendData.invoke = sendData.invoke||'/wsInvoke.asmx/invokeSrv_plainjson'; var data = { //url : 'http://'+ip+':'+port+'/'+name+'/wsInvoke.asmx/invokeSrv_Session_json', url : 'http://'+ip+':'+port+'/'+name+'/wsInvoke.asmx/invokeSrv_plainjson', //url : 'http://10.40.10.66:80/MESws_STD/wsInvoke.asmx/invokeSrv_plainjson', method : 'POST', headers : { 'Content-Type': 'application/json;charset=UTF-8' }, data : { "uri":JSON.stringify(header), "content":JSON.stringify(sendData.content) } }; console.log(JSON.stringify(data)); if(config.server.timeout != 0) data.timeout =config.server.timeout; $http(data).success(function(data, status, headers, config) { //$http(data).success(function(data,parameter) { if(showLoading) $rootScope.hideLoading(); //if (sendData.uri=="kcUSR.clsUSRSecurity.Test_Connection"){ // $rootScope.showAlert("測試成功"); //} iMESConnectSuccess(data, sendData.success, sendData.error); }).error(function(respose,status_code,c,d){ if(showLoading) $rootScope.hideLoading(); //if (sendData.uri=="kcUSR.clsUSRSecurity.Test_Connection"){ // $rootScope.showAlert("與伺服器連線出錯",1); //} //MMWConnectError(status_code, respose, data, sendData.netError); //20200604 雋辰,改為只顯示label不彈錯誤框 if(sendData.error) sendData.error(); }); } // EAI JSON共用接口 this.sendToEAISrv = function(sendData, showLoading){ if(showLoading == undefined){ showLoading = true; } if(showLoading){ $rootScope.showLoading(sendData.msg); } //var ip = "localhost" //var eainame = "EAIws_603STD"; //20210505 ,新增選擇DNS/IP var ip = config.setting.DNSMode ? config.server.DNS : config.server.ip; var port = config.server.port; var eainame = config.server.eainame; var header = prepareMESHeader(sendData); //sendData.invoke = sendData.invoke||'EAIws/wsEAI.asmx/invokeSrv_json'; var data = { //url : 'http://'+ip+':'+port+'/'+name+'/wsEAI.asmx/invokeSrv_json', url : 'http://'+ip+':'+port+'/'+eainame+'/wsEAI.asmx/invokeSrv_json', //url : 'http://10.40.10.66:80/MESws_EAI_603/EAIws/wsEAI.asmx/invokeSrv_json', method : 'POST', headers : { 'Content-Type': 'application/json;charset=UTF-8' }, data : { "uri":JSON.stringify(header), "content":JSON.stringify(sendData.content) } }; console.log(JSON.stringify(data)); if(config.server.timeout != 0) data.timeout =config.server.timeout; $http(data).success(function(data, status, headers, config) { //$http(data).success(function(data,parameter) { if(showLoading) $rootScope.hideLoading(); iMESEAIConnectSuccess(data, sendData.success, sendData.error); }).error(function(respose,status_code,c,d){ if(showLoading) $rootScope.hideLoading(); //MMWConnectError(status_code, respose, data, sendData.netError); //20200604 雋辰,改為只顯示label不彈錯誤框 if(sendData.error) sendData.error(); }); } //yenru,建立SigNalR Connect this.createHub = function(hubName, options){ var port = options.port||config.server.port; var name = config.server.name; var error = undefined; //20210505 ,新增選擇DNS/IP var ip = config.setting.DNSMode ? config.server.DNS : config.server.ip; options.rootPath = 'http://'+ip+':'+port+'/'+name+'/Notification'; options.useSharedConnection = false; options.errorHandler = function(error){ $rootScope.hideLoading(); console.error(error); //$rootScope.showAlert(error); try{ $rootScope.$apply(); }catch(e){ console.error(e); } }; options.stateChanged = function(state){ switch (state.newState) { case $.signalR.connectionState.connecting: $rootScope.showLoading(); break; case $.signalR.connectionState.connected: $rootScope.hideLoading(); if(options.connected){ options.connected(); } break; case $.signalR.connectionState.reconnecting: //your code here break; case $.signalR.connectionState.disconnected: //當為人為中斷的時候則不顯示訊息 if(options.disconnected){ options.disconnected(); } else { if(hub && hub.connection_close != 'manual'){ $rootScope.showConfirm($filter('translate')('common.msg.lose_server_connect'),function(dialog){ dialog.hide(); hub.connect(); }); } } break; } }; var hub = new $Hub(hubName, options); return hub; }; //2019/06/26 OwenLiu, MES JSON 共用接口 this.sendToMESSrv = function(sendData, showLoading){ if(showLoading == undefined){ showLoading = true; } if(showLoading){ $rootScope.showLoading(sendData.msg); } //20210505 ,新增選擇DNS/IP var ip = config.setting.DNSMode ? config.server.DNS : config.server.ip; var name = config.server.name; var port = config.server.port; var header = prepareMESHeader(sendData); var data = { url : 'http://'+ip+':'+port+'/'+name+'/wsInvoke.asmx/invokeSrv_json', method : 'POST', headers : { 'Content-Type': 'application/json;charset=UTF-8' }, data : { "uri":JSON.stringify(header), "content":JSON.stringify(sendData.content) } }; console.log(JSON.stringify(data)); if(config.server.timeout != 0) data.timeout =config.server.timeout; $http(data).success(function(data, status, headers, config) { //$http(data).success(function(data,parameter) { if(showLoading) $rootScope.hideLoading(); iMESEAIConnectSuccess(data, sendData.success, sendData.error); }).error(function(respose,status_code,c,d){ if(showLoading) $rootScope.hideLoading(); MMWConnectError(status_code, respose, data, sendData.netError); }); } // 2020-04-28 yenru ADD Multi KC data Querry this.sendToMESSrv_Multi = function(sendData, showLoading){ if(showLoading == undefined){ showLoading = true; } if(showLoading){ $rootScope.showLoading(sendData.msg); } //20210505 ,新增選擇DNS/IP var ip = config.setting.DNSMode ? config.server.DNS : config.server.ip; var name = config.server.name; var port = config.server.port; var header = prepareMESHeader(sendData); var data = { url : 'http://'+ip+':'+port+'/'+name+'/wsInvoke.asmx/InvokeSrv_Json_Multi', method : 'POST', headers : { 'Content-Type': 'application/json;charset=UTF-8' }, data : { "uri":JSON.stringify(header), "content":JSON.stringify(sendData.content) } }; console.log(JSON.stringify(data)); if(config.server.timeout != 0) data.timeout =config.server.timeout; $http(data).success(function(data, status, headers, config) { if(showLoading) $rootScope.hideLoading(); iMESEAIConnectSuccess(data, sendData.success, sendData.error); }).error(function(respose,status_code,c,d){ if(showLoading) $rootScope.hideLoading(); MMWConnectError(status_code, respose, data, sendData.netError); }); } function send(header, content, sendData, showLoading){ //20210505 ,新增選擇DNS/IP var ip = config.setting.DNSMode ? config.server.DNS : config.server.ip; var data = { url : 'http://'+ip+':'+config.server.port+'/'+config.server.name+'/api/v1/transaction/json', method : 'POST', headers : { 'Content-Type': 'application/json;charset=UTF-8' }, data : { "applicationId":config.applicationId, "uri": sendData.uri, "headers":header, "cookies":[], 'content':JSON.stringify(content) } }; if(config.server.timeout != 0) data.timeout =config.server.timeout; $http(data).success(function(data, status, headers, config) { if(showLoading) $rootScope.hideLoading(); MMWConnectSuccess(data, sendData.success, sendData.error); }).error(function(respose,status_code,c,d){ if(showLoading) $rootScope.hideLoading(); MMWConnectError(status_code, respose, data, sendData.netError); }); } /**STD send success handler**/ function iMESConnectSuccess(data, success, error){ var contentData; try{ contentData = JSON.parse(data.d); } catch(e){ $rootScope.showAlert('Can\'t parse content : ' + data.d); } if(contentData){ try{ if(contentData.Code === '0' || contentData.Code === null || contentData.code === '0' || contentData.code === null){ if(success) success(contentData); } else if(contentData.Code === '-1' || contentData.code === '-1'){ //20181002 modify by Dustdusk for M#51006: 判斷是否需要登出 if(MMWService.needLogout) MMWService.needLogout(MMWService.needLogoutExtend); } else { if(error){ error(contentData); } else { //$rootScope.showAlert($filter('translate')('Login.errorMsg.'+contentData.Code)) $rootScope.showAlert(contentData.exception); } } } catch(e){ $rootScope.showAlert(e.stack); console.error(e); } } } /**EAI send success handler**/ function iMESEAIConnectSuccess(data, success, error){ var contentData; try{ contentData = JSON.parse(data.d); } catch(e){ $rootScope.showAlert('Can\'t parse content : ' + data.d); } if(contentData){ try{ if(contentData.Code === '0' || contentData.Code === null){ if(success) success(contentData); } else if(contentData.Code === '-1'){ //20181002 modify by Dustdusk for M#51006: 判斷是否需要登出 if(MMWService.needLogout) MMWService.needLogout(MMWService.needLogoutExtend); } else { //if(error){ // error(contentData); //} else { // //$rootScope.showAlert($filter('translate')('Login.errorMsg.'+contentData.code)) // if (contentData.Exception) { // if(success) // success(contentData); // //2020/08/12 Grace 調整訊息顯示 // //$rootScope.showAlert(contentData.Exception); // //var msg = "Code:" + contentData.Code + "
" + contentData.CodeInformation + "
" +"Message:" +contentData.Message +"
" +"exception:" +contentData.Exception + "
" +"stack:" +contentData.StackTrace;
// //$rootScope.showAlert(msg);
// //2021/05/18 凱煊 修正錯誤處理
// $rootScope.showAlert({
// title: contentData.CodeInformation,
// code: contentData.Code,
// message: contentData.Message,
// exception: contentData.Exception,
// stack: contentData.StackTrace,
// });
// }
// else{$rootScope.showAlert(contentData.description);}
//}
//20210601 13871,修改程與PAD相同處理方式
//20200828 雋辰,修正錯誤處理,
if (contentData.Exception) {
$rootScope.showAlert({
title: contentData.CodeInformation,
code: contentData.Code,
message: contentData.Message,
exception: contentData.Exception,
stack: contentData.StackTrace,
});
}
else { $rootScope.showAlert(contentData.description); }
if (error) {
error(contentData);
}
}
} catch(e){
$rootScope.showAlert(e.stack);
console.error(e);
}
}
}
/**send success handler**/
function MMWConnectSuccess(data, success, error){
var contentData;
try{
contentData = JSON.parse(data.content);
} catch(e){
$rootScope.showAlert('Can\'t parse content : ' + data.content);
}
if(contentData){
try{
contentData.mdssessionno = data.headers.mdssessionno;
if(contentData.IsSuccess){
if(contentData.needlogout && MMWService.needLogout){
MMWService.needLogout(MMWService.needLogoutExtend);
} else {
if(success)
success(contentData);
}
} else {
if(error){
error(contentData);
} else {
$rootScope.showAlert(contentData.SysException);
}
}
} catch(e){
$rootScope.showAlert(e.stack);
console.error(e);
}
}
}
/**send error handler**/
function MMWConnectError(status_code, respose, data, callback){
var msg = '';
if(status_code == 500){
if(!respose.Message){
msg = angular.element(new DOMParser().parseFromString(respose, 'text/html')).find('body')[0].innerHTML;
} else {
msg = respose.Message;
}
} else if(status_code == -1){
msg = $filter('translate')('error.connect_timeout');
} else {
msg = 'respose code : '+ status_code + '
'+$filter('translate')('error.connectRefused');
}
$rootScope.showAlert(msg, function(data){
if(callback)
callback(data);
});
}
/**send notify handler**/
function MMWConnectNotify(data, callback){
$rootScope.showAlert($filter('translate')('error.connectNotify'), function(data){
if(callback)
callback(data);
});
}
MMWService.needLogout = undefined;
MMWService.needLogoutExtend = undefined;
}]);
});