Correct export of Delivery Unit EON_EMOBILITY_VIRTA (42 files, replaces incomplete initial export)

This commit is contained in:
Thorsten Schmitz
2026-07-09 02:05:30 +02:00
parent dafd956626
commit 3348c5d03b
42 changed files with 6303 additions and 157 deletions
+416
View File
@@ -0,0 +1,416 @@
// Prod API Documentation Url: https://virta-api-admin.api-docs.io/
var ParDebug = false;
var Billingrunmode = "EMP";
var DateFrom = "";
var DateTo = "";
var output = {};
var outMessages = [];
var outErrorMessages = [];
var outMsg = {};
var outStatus = "success";
var myDebug = {};
var destn_pkg = "uniorg.eon.virta.v1";
var dest_name = "VirtaAPI";
var serviceVersion = '1.3';
var pageSize = 100;
/*if ($.request.parameters.get("pageSize")) {
pageSize = $.request.parameters.get("pageSize");
}*/
var debugLevel = 0;
switch ($.request.parameters.get("debug")) {
case "true":
case "yes":
case "1":
debugLevel = 1;
break;
case "full":
case "2":
debugLevel = 2;
break;
}
if (debugLevel > 0) {
output.requestParams = $.request.parameters;
}
function setOutputMessage() {
output.status = outStatus;
if (debugLevel > 0) {
output.debugInfos = myDebug;
}
output.messages = outMessages;
$.response.contentType = "application/json";
$.response.setBody(JSON.stringify(output));
//$.response.status = $.net.http.OK;
}
function exceptionHandler(ex) {
outMsg = {};
outMsg.method = "exceptionHandler";
outMsg.status = "error";
outMsg.message = ex.toString();
if (debugLevel > 0) {
outMsg.exceptionInfo = {};
outMsg.exceptionInfo.name = ex.name;
outMsg.exceptionInfo.message = ex.message;
outMsg.exceptionInfo.fileName = ex.fileName;
outMsg.exceptionInfo.lineNumber = ex.lineNumber;
outMsg.exceptionInfo.columnNumber = ex.columnNumber;
outMsg.exceptionInfo.stack = ex.stack;
//outMsg.exceptionInfo.source = ex.toSource();
}
outMessages.push(outMsg);
outStatus = "error";
output.status = outStatus;
if (debugLevel > 0) {
output.debugInfos = myDebug;
}
output.messages = outMessages;
var errbody = JSON.stringify(output);
$.response.contentType = 'application/json';
$.response.setBody(errbody);
$.response.status = $.net.http.INTERNAL_SERVER_ERROR;
}
function getVirtaToken(ifUsername, ifPassword) {
try
{
var dest = $.net.http.readDestination(destn_pkg, dest_name);
var client = new $.net.http.Client();
var req = new $.web.WebRequest($.net.http.POST, "/auth");
req.contentType = "application/json";
outMsg = {};
outMsg.username = ifUsername;
outMsg.password = ifPassword;
req.setBody(JSON.stringify(outMsg));
client.request(req, dest);
var response = client.getResponse();
var b1iResp = response.body.asString();
var retObj = JSON.parse(b1iResp);
return retObj.token.toString();
} catch (e) {
$.response.contentType = "text/plain";
$.response.setBody(e.message);
}
}
function getCPOList() {
var mytoken = getVirtaToken("b1_api_user", "E3qq$§U,Q3hD#K2}");
var dest = $.net.http.readDestination(destn_pkg, dest_name);
var client = new $.net.http.Client();
var req = new $.web.WebRequest($.net.http.GET, "/cpo/charges");
req.contentType = "application/json";
req.headers.set("Authorization", "Bearer" + mytoken);
req.parameters.set("perPage", pageSize.toString());
req.parameters.set("from", DateFrom);
req.parameters.set("to", DateTo);
var totalCount = 1;
myDebug.Calls = [];
for (var p = 1; p <= Math.ceil(totalCount / pageSize); ++p) {
var debugCall = {};
debugCall.request = { "page": p };
req.parameters.set("page", p.toString());
client.request(req, dest);
var response = client.getResponse();
// get all the cookies and headers from the response
var he = [];
for(var c in response.headers) {
he.push(response.headers[c]);
}
debugCall.response = { "headers": he };
var virtaBody = response.body.asString();
totalCount = response.headers.get('X-Total-Count');
var maxPageSize = Math.ceil(totalCount / pageSize);
debugCall.totalCount = totalCount;
debugCall.pagesCount = maxPageSize;
debugCall.link = response.headers.get('link');
debugCall.responseLineCount = JSON.parse(virtaBody).length;
//debugCall.virtaBody = virtaBody;
// debugCall.header = response.headers.toSting();
myDebug.Calls.push(debugCall);
writeObj2Table(virtaBody);
}
//$.response.status = $.net.http.OK;
//$.response.contentType = "application/json";
// $.response.setBody(JSON.stringify(b1iResp));
//$.response.setBody(JSON.stringify(virtaBody));
}
function getnextval() {
var conn = $.db.getConnection();
var pstmt;
var query = "select \"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL from dummy";
pstmt = conn.prepareStatement(query);
var rs = pstmt.executeQuery();
if (!rs.next()) {
outMsg = {};
outMsg.method = "getnexval from sequence error";
outMsg.status = "error";
// outMsg.message = e.message;
outMessages.push(outMsg);
} else {
return rs.getString(1);
}
rs.close();
pstmt.close();
conn.close();
}
function writeObj2Table(myOBJ) {
//var pdcontent = $.request.body.asString();
// pdcontent = pdcontent.replace(/\"([^(\")"]+)\":/g,"$1:");
var transOBJ = JSON.parse(myOBJ);
var conn = $.db.getConnection();
var pstmt;
var query;
var vals = {};
var data = [];
// var query2;
// var output = {results: [] };
//var mynextval = getnextval();
//myDebug.mynextval = mynextval;
try {
// query = "INSERT INTO \"NICEPORTAL\".\"UO_CRM_DATA_BP\" (ID,ID_MSD,TYPE,GROUP,SALUTATION,TITLE,NAME,SURNAME,PHONE,MOBILE_PHONE,EMAIL,ADDRESS_JSON,IBAN,BIC,SEPA_MANDATE_ID,SIGNATURE_DATE,ACCOUNT_OWNER,STREET,STREET_NO,ZIP_CODE,CITY,JSONRAW,CREATE_TS,UPDATE_TS) values (\"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)";
query =
"UPSERT \"VIRTAPORTAL\".\"CPO_CHARGES\" (CDRID,UUID,STATIONUUID,EMPSELLERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,METHOD,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,ROAMINGEMPID,EVCOID,ORGANIZATIONID,FULLEVSEID,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,FREECHARGING,CONNECTORID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,UPDATE_TS,EICHRECHTTYPE) values (" +
"?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?) WITH PRIMARY KEY";
// "INSERT INTO \"NICEPORTAL\".\"UO_CRM_DATA_BP\" (ID,ID_MSD,ID_CRM,TYPE,BPGROUP,SALUTATION,TITLE,NAME,SURNAME,PHONE,MOBILE_PHONE,EMAIL,ADDRESS_JSON,IBAN,BIC,SEPA_MANDATE_ID,SIGNATURE_DATE,ACCOUNT_OWNER,STREET,STREET_NO,ZIP_CODE,CITY,JSONRAW,CREATE_TS,UPDATE_TS) values (\"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)";
pstmt = conn.prepareStatement(query);
pstmt.setBatchSize(transOBJ.length);
//$.trace.debug("prepareBatchStatement (" + transOBJ.length.toString() + " rows): " + query);
transOBJ.forEach(function(transRow) {
if (!isNaN(parseInt(transRow.cdrId))) {
pstmt.setInteger(1, transRow.cdrId);
} else {
pstmt.setNull(1);
}
if (transRow.UUID){
pstmt.setNString(2, transRow.UUID);
} else {
pstmt.setNull(2);
}
if (!isNaN(parseInt(transRow.locationId))) {
pstmt.setInteger(3, transRow.locationId);
} else {
pstmt.setNull(3);
}
if (!isNaN(parseInt(transRow.empSellerId))) {
pstmt.setInteger(4, transRow.empSellerId);
} else {
pstmt.setNull(4);
}
if (transRow.startTime) {
pstmt.setNString(5, transRow.startTime);
} else {
pstmt.setNull(5);
}
if (transRow.stopTime) {
pstmt.setNString(6, transRow.stopTime);
} else {
pstmt.setNull(6);
}
if (!isNaN(parseInt(transRow.duration))) {
pstmt.setInteger(7, transRow.duration);
} else {
pstmt.setNull(7);
}
if (!isNaN(parseInt(transRow.wattHour))) {
pstmt.setInteger(8, transRow.wattHour);
} else {
pstmt.setNull(8);
}
if (!isNaN(parseInt(transRow.amount))) {
pstmt.setInteger(9, transRow.amount);
} else {
pstmt.setNull(9);
}
pstmt.setNString(10, transRow.currency);
pstmt.setNString(11, transRow.method);
if (transRow.created) {
pstmt.setNString(12, transRow.created);
} else {
pstmt.setNull(12);
}
if (transRow.rfid) {
pstmt.setNString(13, transRow.rfid);
} else {
pstmt.setNull(13);
}
if (transRow.station) {
pstmt.setNClob(14, JSON.stringify(transRow.station));
pstmt.setNString(15, transRow.station.identity);
pstmt.setNString(16, transRow.station.name);
pstmt.setInteger(17, transRow.station.location.id);
pstmt.setNString(18, transRow.station.location.address);
pstmt.setNString(19, transRow.station.location.city);
pstmt.setNString(20, transRow.station.location.locationType);
} else {
pstmt.setNull(14);
pstmt.setNull(15);
pstmt.setNull(16);
pstmt.setNull(17);
pstmt.setNull(18);
pstmt.setNull(19);
pstmt.setNull(20);
}
if (transRow.roamingEmpId) {
pstmt.setNString(21, transRow.roamingEmpId);
} else {
pstmt.setNull(21);
}
pstmt.setNString(22, transRow.evcoId);
pstmt.setInteger(23, transRow.organizationId);
if (transRow.fullEvseId) {
pstmt.setNString(24, transRow.fullEvseId);
} else {
pstmt.setNull(24);
}
if (transRow.evseId) {
pstmt.setNString(25, transRow.evseId.toString());
} else {
pstmt.setNull(25);
}
pstmt.setNString(26, transRow.socketType);
if (!isNaN(parseInt(transRow.empShare))) {
pstmt.setInteger(27, transRow.empShare);
} else {
pstmt.setNull(27);
}
if (transRow.signedMeterValueBegin) {
pstmt.setNString(28, transRow.signedMeterValueBegin);
} else {
pstmt.setNull(28);
}
if (transRow.signedMeterValueEnd) {
pstmt.setNString(29, transRow.signedMeterValueEnd);
} else {
pstmt.setNull(29);
}
pstmt.setNString(30, transRow.freeCharging);
if (!isNaN(parseInt(transRow.connectorId))) {
pstmt.setInteger(31, transRow.connectorId);
} else {
pstmt.setNull(31);
}
if (!isNaN(parseInt(transRow.meterStart))) {
pstmt.setInteger(32, transRow.meterStart);
} else {
pstmt.setNull(32);
}
if (!isNaN(parseInt(transRow.meterStop))) {
pstmt.setInteger(33, transRow.meterStop);
} else {
pstmt.setNull(33);
}
pstmt.setNString(34, JSON.stringify(transRow.notes));
if (transRow.notes && transRow.notes.length > 0) {
pstmt.setInteger(35, transRow.notes[0].value);
} else {
pstmt.setNull(35);
}
//pstmt.setNString(34, "1234");
pstmt.setNString(36, JSON.stringify(transRow));
pstmt.setNString(37, transRow.eichrechtType);
pstmt.addBatch();
});
var batchResult = pstmt.executeBatch();
//$.trace.debug("BatchUpsert Result: " + batchResult.toString());
pstmt.close();
conn.commit();
conn.close();
outMsg = {};
outMsg.method = "insertDB";
outMsg.status = "success";
outMessages.push(outMsg);
} catch (e) {
$.trace.error("InsertDB ExceptionHandler: " + e.toString());
outMsg = {};
outMsg.method = "exceptionHandler";
outMsg.status = "error";
outMsg.message = e.toString();
if (ParDebug) {
outMsg.exceptionInfo = {};
outMsg.exceptionInfo.name = e.name;
outMsg.exceptionInfo.message = e.message;
outMsg.exceptionInfo.fileName = e.fileName;
outMsg.exceptionInfo.lineNumber = e.lineNumber;
outMsg.exceptionInfo.columnNumber = e.columnNumber;
outMsg.exceptionInfo.stack = e.stack;
//outMsg.exceptionInfo.source = e.toSource();
}
outMessages.push(outMsg);
vals.status = 'error';
//vals.description = e.message;
vals.messages = outMessages;
if (ParDebug) {
vals.debug = {};
vals.debug.statement = query;
}
}
}
var content = '';
if ($.request.body) {
content = $.request.body.asString();
}
ParDebug = $.request.parameters.get('debug') && $.request.parameters.get('debug').toLowerCase() === "true";
if ($.request.parameters.get('Billingrunmode') > 0) {
Billingrunmode = $.request.parameters.get('Billingrunmode');
}
if ($.request.parameters.get('DateFrom')) {
DateFrom = $.request.parameters.get('DateFrom');
}
if ($.request.parameters.get('DateTo')) {
DateTo = $.request.parameters.get('DateTo');
}
//doHTTPCallstartBillingrun("FEE","20180101","20180131");
//getVirtaToken("b1_api_user","E3qq$§U,Q3hD#K2}");
getCPOList();
setOutputMessage();
+492
View File
@@ -0,0 +1,492 @@
// Prod API Documentation Url: https://virta-api-admin.api-docs.io/
var ParDebug = false;
var Billingrunmode = "EMP";
var DateFrom = "";
var DateTo = "";
var output = {};
var outMessages = [];
var outErrorMessages = [];
var outMsg = {};
var outStatus = "success";
var myDebug = {};
var destn_pkg = "uniorg.eon.virta.v2";
var dest_name = "VirtaAPI";
var api_key = "qk2OLoXL3Y2Bqre9IQBdjaTqFUDvOJk888usKRiV";
var serviceVersion = '1.8';
var pageSize = 100;
/*if ($.request.parameters.get("pageSize")) {
pageSize = $.request.parameters.get("pageSize");
}*/
var debugLevel = 0;
switch ($.request.parameters.get("debug")) {
case "true":
case "yes":
case "1":
debugLevel = 1;
break;
case "full":
case "2":
debugLevel = 2;
break;
}
if (debugLevel > 0) {
output.requestParams = $.request.parameters;
}
function setOutputMessage() {
output.status = outStatus;
if (debugLevel > 0) {
output.debugInfos = myDebug;
}
output.messages = outMessages;
$.response.contentType = "application/json";
$.response.setBody(JSON.stringify(output));
//$.response.status = $.net.http.OK;
}
function exceptionHandler(ex) {
outMsg = {};
outMsg.method = "exceptionHandler";
outMsg.status = "error";
outMsg.message = ex.toString();
if (debugLevel > 0) {
outMsg.exceptionInfo = {};
outMsg.exceptionInfo.name = ex.name;
outMsg.exceptionInfo.message = ex.message;
outMsg.exceptionInfo.fileName = ex.fileName;
outMsg.exceptionInfo.lineNumber = ex.lineNumber;
outMsg.exceptionInfo.columnNumber = ex.columnNumber;
outMsg.exceptionInfo.stack = ex.stack;
//outMsg.exceptionInfo.source = ex.toSource();
}
outMessages.push(outMsg);
outStatus = "error";
output.status = outStatus;
if (debugLevel > 0) {
output.debugInfos = myDebug;
}
output.messages = outMessages;
var errbody = JSON.stringify(output);
$.response.contentType = 'application/json';
$.response.setBody(errbody);
$.response.status = $.net.http.INTERNAL_SERVER_ERROR;
}
function getVirtaToken(ifUsername, ifPassword) {
try
{
var dest = $.net.http.readDestination(destn_pkg, dest_name);
var client = new $.net.http.Client();
var req = new $.web.WebRequest($.net.http.POST, "/auth");
req.headers.set("x-api-key", api_key);
req.contentType = "application/json";
outMsg = {};
outMsg.username = ifUsername;
outMsg.password = ifPassword;
req.setBody(JSON.stringify(outMsg));
client.request(req, dest);
var response = client.getResponse();
var b1iResp = response.body.asString();
var retObj = JSON.parse(b1iResp);
return retObj.token.toString();
} catch (e) {
$.response.contentType = "text/plain";
$.response.setBody(e.message);
}
}
function sleep(seconds) {
var currentTime = new Date().getTime();
while (currentTime + seconds * 1000 >= new Date().getTime()) {}
}
function getEMPList() {
var mytoken = getVirtaToken("b1_api_user", "E3qq$§U,Q3hD#K2}");
var dest = $.net.http.readDestination(destn_pkg, dest_name);
var client = new $.net.http.Client();
var req = new $.web.WebRequest($.net.http.GET, "/emp/transactions");
req.contentType = "application/json";
req.headers.set("Authorization", "Bearer" + mytoken);
req.headers.set("x-api-key", api_key);
req.parameters.set("perPage", pageSize.toString());
req.parameters.set("from", DateFrom);
req.parameters.set("to", DateTo);
var totalCount = 1;
myDebug.Calls = [];
for (var p = 1; p <= Math.ceil(totalCount / pageSize); ++p) {
var debugCall = {};
debugCall.request = {
"page": p
};
req.parameters.set("page", p.toString());
client.request(req, dest);
var response = client.getResponse();
// get all the cookies and headers from the response
var he = [];
for (var c in response.headers) {
he.push(response.headers[c]);
}
debugCall.response = {
"headers": he
};
if (response.status === 429) {
// HTTP Status 429 "Too many requests"
var retryAfter = parseInt(response.headers.get('retry-after'), 10) + 1;
if (!(retryAfter > 0)) {
retryAfter = 10;
}
debugCall.waitSeconds = retryAfter;
sleep(retryAfter);
--p;
myDebug.Calls.push(debugCall);
} else if (response.status >= 200 && response.status < 300) {
var virtaBody = response.body.asString();
totalCount = response.headers.get('X-Total-Count');
var maxPageSize = Math.ceil(totalCount / pageSize);
debugCall.totalCount = totalCount;
debugCall.pagesCount = maxPageSize;
debugCall.link = response.headers.get('link');
debugCall.responseLineCount = JSON.parse(virtaBody).length;
myDebug.Calls.push(debugCall);
writeObj2Table(virtaBody);
} else {
debugCall.responseStatus = response.status;
myDebug.Calls.push(debugCall);
break;
}
//debugCall.virtaBody = virtaBody;
// debugCall.header = response.headers.toSting();
}
//$.response.status = $.net.http.OK;
//$.response.contentType = "application/json";
// $.response.setBody(JSON.stringify(b1iResp));
//$.response.setBody(JSON.stringify(virtaBody));
}
function getnextval() {
var conn = $.db.getConnection();
var pstmt;
var query = "select \"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL from dummy";
pstmt = conn.prepareStatement(query);
var rs = pstmt.executeQuery();
if (!rs.next()) {
outMsg = {};
outMsg.method = "getnexval from sequence error";
outMsg.status = "error";
// outMsg.message = e.message;
outMessages.push(outMsg);
} else {
return rs.getString(1);
}
rs.close();
pstmt.close();
conn.close();
}
function writeObj2Table(myOBJ) {
//var pdcontent = $.request.body.asString();
// pdcontent = pdcontent.replace(/\"([^(\")"]+)\":/g,"$1:");
var transOBJ = JSON.parse(myOBJ);
var conn = $.db.getConnection();
var pstmt;
var query;
var vals = {};
var data = [];
// var query2;
// var output = {results: [] };
//var mynextval = getnextval();
//myDebug.mynextval = mynextval;
try {
// query = "INSERT INTO \"NICEPORTAL\".\"UO_CRM_DATA_BP\" (ID,ID_MSD,TYPE,GROUP,SALUTATION,TITLE,NAME,SURNAME,PHONE,MOBILE_PHONE,EMAIL,ADDRESS_JSON,IBAN,BIC,SEPA_MANDATE_ID,SIGNATURE_DATE,ACCOUNT_OWNER,STREET,STREET_NO,ZIP_CODE,CITY,JSONRAW,CREATE_TS,UPDATE_TS) values (\"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)";
query =
"UPSERT \"VIRTAPORTAL\".\"EMP_TRANSACTIONS\" (UUID,CDRID,STATIONUUID,CUSTOMERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,TRANSACTIONTYPE,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,CUSTOMERGROUPID,CUSTOMERGROUPNAME,ORGANIZATIONID,PAYMENTTYPE,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,OPERATORPRICE,OPERATORCURRENCY,OPERATORID,FREECHARGING,EMPTARIFFID,EMPTARIFFNAME,FULLEVSEID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,UPDATE_TS,EICHRECHTTYPE,KWHNETPRICE,MINUTENETPRICE,SESSIONNETPRICE,CPOOPERATORID,KWHGROSSPRICE,MINUTEGROSSPRICE,SESSIONGROSSPRICE,LOCATION_COUNTRY) values (" +
"?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?,?,?,?,?,?,?,?,?) WITH PRIMARY KEY";
// "INSERT INTO \"NICEPORTAL\".\"UO_CRM_DATA_BP\" (ID,ID_MSD,ID_CRM,TYPE,BPGROUP,SALUTATION,TITLE,NAME,SURNAME,PHONE,MOBILE_PHONE,EMAIL,ADDRESS_JSON,IBAN,BIC,SEPA_MANDATE_ID,SIGNATURE_DATE,ACCOUNT_OWNER,STREET,STREET_NO,ZIP_CODE,CITY,JSONRAW,CREATE_TS,UPDATE_TS) values (\"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)";
pstmt = conn.prepareStatement(query);
pstmt.setBatchSize(transOBJ.length);
//$.trace.debug("prepareBatchStatement (" + transOBJ.length.toString() + " rows): " + query);
transOBJ.forEach(function(transRow) {
pstmt.setNString(1, transRow.uuid);
/*
if (!isNaN(parseInt(transRow.cdrId))) {
pstmt.setInteger(2, transRow.cdrId);
} else {
pstmt.setNull(2);
}
*/
if (transRow.cdrId) {
pstmt.setNString(2, transRow.cdrId.toString());
} else {
pstmt.setNull(2);
}
pstmt.setNString(3, transRow.stationUuid);
pstmt.setInteger(4, transRow.customerId);
pstmt.setNString(5, transRow.startTime);
pstmt.setNString(6, transRow.stopTime);
if (!isNaN(parseInt(transRow.duration))) {
pstmt.setInteger(7, transRow.duration);
} else {
pstmt.setNull(7);
}
if (!isNaN(parseInt(transRow.wattHour))) {
pstmt.setInteger(8, transRow.wattHour);
} else {
pstmt.setNull(8);
}
if (!isNaN(parseInt(transRow.amount))) {
pstmt.setInteger(9, transRow.amount);
} else {
pstmt.setNull(9);
}
pstmt.setNString(10, transRow.currency);
pstmt.setNString(11, transRow.transactionType);
pstmt.setNString(12, transRow.created);
if (transRow.rfid) {
pstmt.setNString(13, transRow.rfid);
} else {
pstmt.setNull(13);
}
if (transRow.station) {
pstmt.setNClob(14, JSON.stringify(transRow.station));
pstmt.setNString(15, transRow.station.identity);
if (transRow.station.name) {
pstmt.setNString(16, transRow.station.name);
} else {
pstmt.setNull(16);
}
if (typeof transRow.station.location === "undefined") {
pstmt.setNull(17);
pstmt.setNull(18);
pstmt.setNull(19);
pstmt.setNull(20);
pstmt.setNull(50);
} else {
pstmt.setInteger(17, transRow.station.location.id);
pstmt.setNString(18, transRow.station.location.address);
pstmt.setNString(19, transRow.station.location.city);
pstmt.setNString(20, transRow.station.location.locationType);
pstmt.setNString(50, transRow.station.location.country);
}
} else {
pstmt.setNull(14);
pstmt.setNull(15);
pstmt.setNull(16);
pstmt.setNull(17);
pstmt.setNull(18);
pstmt.setNull(19);
pstmt.setNull(20);
pstmt.setNull(50);
}
pstmt.setInteger(21, transRow.customerGroupId);
pstmt.setNString(22, transRow.customerGroupName);
pstmt.setInteger(23, transRow.organizationId);
pstmt.setNString(24, transRow.paymentType);
if (transRow.evseId) {
pstmt.setNString(25, transRow.evseId.toString());
} else {
pstmt.setNull(25);
}
if (transRow.plugType) {
pstmt.setNString(26, transRow.plugType);
} else {
pstmt.setNull(26);
}
if (!isNaN(parseInt(transRow.empShare))) {
pstmt.setInteger(27, transRow.empShare);
} else {
pstmt.setNull(27);
}
if (transRow.signedMeterValueBegin) {
pstmt.setNString(28, transRow.signedMeterValueBegin.substring(0, 50));
} else {
pstmt.setNull(28);
}
if (transRow.signedMeterValueEnd) {
pstmt.setNString(29, transRow.signedMeterValueEnd.substring(0, 50));
} else {
pstmt.setNull(29);
}
if (!isNaN(parseInt(transRow.operatorPrice))) {
pstmt.setInteger(30, transRow.operatorPrice);
} else {
pstmt.setNull(30);
}
pstmt.setNString(31, transRow.operatorCurrency);
if (!isNaN(parseInt(transRow.operatorId))) {
pstmt.setInteger(32, transRow.operatorId);
} else {
pstmt.setNull(32);
}
pstmt.setNString(33, transRow.freeCharging);
if (!isNaN(parseInt(transRow.empTariffId))) {
pstmt.setInteger(34, transRow.empTariffId);
} else {
pstmt.setNull(34);
}
if (transRow.empTariffName) {
pstmt.setNString(35, transRow.empTariffName);
} else {
pstmt.setNull(35);
}
if (transRow.fullEvseId) {
pstmt.setNString(36, transRow.fullEvseId);
} else {
pstmt.setNull(36);
}
if (!isNaN(parseInt(transRow.meterStart))) {
pstmt.setInteger(37, transRow.meterStart);
} else {
pstmt.setNull(37);
}
if (!isNaN(parseInt(transRow.meterStop))) {
pstmt.setInteger(38, transRow.meterStop);
} else {
pstmt.setNull(38);
}
pstmt.setNString(39, JSON.stringify(transRow.notes));
if (transRow.notes && transRow.notes.length > 0) {
pstmt.setInteger(40, transRow.notes[0].value);
} else {
pstmt.setNull(40);
}
//pstmt.setNString(34, "1234");
pstmt.setNString(41, JSON.stringify(transRow));
pstmt.setNString(42, transRow.eichrechtType);
if (!isNaN(parseInt(transRow.empKwhNetPrice))) {
pstmt.setInteger(43, transRow.empKwhNetPrice);
} else {
pstmt.setNull(43);
}
if (!isNaN(parseInt(transRow.empMinuteNetPrice))) {
pstmt.setInteger(44, transRow.empMinuteNetPrice);
} else {
pstmt.setNull(44);
}
if (!isNaN(parseInt(transRow.empSessionNetPrice))) {
pstmt.setInteger(45, transRow.empSessionNetPrice);
} else {
pstmt.setNull(45);
}
if (transRow.cpoOperatorId) {
pstmt.setNString(46, transRow.cpoOperatorId);
} else {
pstmt.setNull(46);
}
if (!isNaN(parseInt(transRow.empKwhGrossPrice))) {
pstmt.setInteger(47, transRow.empKwhGrossPrice);
} else {
pstmt.setNull(47);
}
if (!isNaN(parseInt(transRow.empMinuteGrossPrice))) {
pstmt.setInteger(48, transRow.empMinuteGrossPrice);
} else {
pstmt.setNull(48);
}
if (!isNaN(parseInt(transRow.empSessionGrossPrice))) {
pstmt.setInteger(49, transRow.empSessionGrossPrice);
} else {
pstmt.setNull(49);
}
pstmt.addBatch();
});
var batchResult = pstmt.executeBatch();
//$.trace.debug("BatchUpsert Result: " + batchResult.toString());
pstmt.close();
conn.commit();
conn.close();
outMsg = {};
outMsg.method = "insertDB";
outMsg.status = "success";
outMessages.push(outMsg);
} catch (e) {
$.trace.error("InsertDB ExceptionHandler: " + e.toString());
outMsg = {};
outMsg.method = "exceptionHandler";
outMsg.status = "error";
outMsg.message = e.toString();
if (ParDebug) {
outMsg.exceptionInfo = {};
outMsg.exceptionInfo.name = e.name;
outMsg.exceptionInfo.message = e.message;
outMsg.exceptionInfo.fileName = e.fileName;
outMsg.exceptionInfo.lineNumber = e.lineNumber;
outMsg.exceptionInfo.columnNumber = e.columnNumber;
outMsg.exceptionInfo.stack = e.stack;
//outMsg.exceptionInfo.source = e.toSource();
}
outMessages.push(outMsg);
vals.status = 'error';
//vals.description = e.message;
vals.messages = outMessages;
if (ParDebug) {
vals.debug = {};
vals.debug.statement = query;
}
}
}
var content = '';
if ($.request.body) {
content = $.request.body.asString();
}
ParDebug = $.request.parameters.get('debug') && $.request.parameters.get('debug').toLowerCase() === "true";
if ($.request.parameters.get('Billingrunmode') > 0) {
Billingrunmode = $.request.parameters.get('Billingrunmode');
}
if ($.request.parameters.get('DateFrom')) {
DateFrom = $.request.parameters.get('DateFrom');
}
if ($.request.parameters.get('DateTo')) {
DateTo = $.request.parameters.get('DateTo');
}
//doHTTPCallstartBillingrun("FEE","20180101","20180131");
//getVirtaToken("b1_api_user","E3qq$§U,Q3hD#K2}");
getEMPList();
setOutputMessage();
+454
View File
@@ -0,0 +1,454 @@
// Prod API Documentation Url: https://virta-api-admin.api-docs.io/
var ParDebug = false;
var Billingrunmode = "EMP";
var DateFrom = "";
var DateTo = "";
var output = {};
var outMessages = [];
var outErrorMessages = [];
var outMsg = {};
var outStatus = "success";
var myDebug = {};
var destn_pkg = "uniorg.eon.virta.v2";
var dest_name = "VirtaAPI";
var api_key = "qk2OLoXL3Y2Bqre9IQBdjaTqFUDvOJk888usKRiV";
var serviceVersion = '1.7';
var pageSize = 100;
/*if ($.request.parameters.get("pageSize")) {
pageSize = $.request.parameters.get("pageSize");
}*/
var debugLevel = 0;
switch ($.request.parameters.get("debug")) {
case "true":
case "yes":
case "1":
debugLevel = 1;
break;
case "full":
case "2":
debugLevel = 2;
break;
}
if (debugLevel > 0) {
output.requestParams = $.request.parameters;
}
function setOutputMessage() {
output.status = outStatus;
if (debugLevel > 0) {
output.debugInfos = myDebug;
}
output.messages = outMessages;
$.response.contentType = "application/json";
$.response.setBody(JSON.stringify(output));
//$.response.status = $.net.http.OK;
}
function exceptionHandler(ex) {
outMsg = {};
outMsg.method = "exceptionHandler";
outMsg.status = "error";
outMsg.message = ex.toString();
if (debugLevel > 0) {
outMsg.exceptionInfo = {};
outMsg.exceptionInfo.name = ex.name;
outMsg.exceptionInfo.message = ex.message;
outMsg.exceptionInfo.fileName = ex.fileName;
outMsg.exceptionInfo.lineNumber = ex.lineNumber;
outMsg.exceptionInfo.columnNumber = ex.columnNumber;
outMsg.exceptionInfo.stack = ex.stack;
//outMsg.exceptionInfo.source = ex.toSource();
}
outMessages.push(outMsg);
outStatus = "error";
output.status = outStatus;
if (debugLevel > 0) {
output.debugInfos = myDebug;
}
output.messages = outMessages;
var errbody = JSON.stringify(output);
$.response.contentType = 'application/json';
$.response.setBody(errbody);
$.response.status = $.net.http.INTERNAL_SERVER_ERROR;
}
function getVirtaToken(ifUsername, ifPassword) {
try
{
var dest = $.net.http.readDestination(destn_pkg, dest_name);
var client = new $.net.http.Client();
var req = new $.web.WebRequest($.net.http.POST, "/auth");
req.headers.set("x-api-key", api_key);
req.contentType = "application/json";
outMsg = {};
outMsg.username = ifUsername;
outMsg.password = ifPassword;
req.setBody(JSON.stringify(outMsg));
client.request(req, dest);
var response = client.getResponse();
var b1iResp = response.body.asString();
var retObj = JSON.parse(b1iResp);
return retObj.token.toString();
} catch (e) {
$.response.contentType = "text/plain";
$.response.setBody(e.message);
}
}
function getEMPList() {
try {
var mytoken = getVirtaToken("b1_api_user", "E3qq$§U,Q3hD#K2}");
var dest = $.net.http.readDestination(destn_pkg, dest_name);
var client = new $.net.http.Client();
var req = new $.web.WebRequest($.net.http.GET, "/emp/transactions");
req.contentType = "application/json";
req.headers.set("x-api-key", api_key);
req.headers.set("Authorization", "Bearer" + mytoken);
req.parameters.set("perPage", pageSize.toString());
req.parameters.set("from", DateFrom);
req.parameters.set("to", DateTo);
var totalCount = 1;
myDebug.Calls = [];
for (var p = 1; p <= Math.ceil(totalCount / pageSize); ++p) {
var debugCall = {};
debugCall.request = {
"page": p
};
req.parameters.set("page", p.toString());
client.request(req, dest);
var response = client.getResponse();
// get all the cookies and headers from the response
var he = [];
for (var c in response.headers) {
he.push(response.headers[c]);
}
debugCall.response = {
"headers": he
};
var virtaBody = response.body.asString();
totalCount = response.headers.get('X-Total-Count');
var maxPageSize = Math.ceil(totalCount / pageSize);
debugCall.totalCount = totalCount;
debugCall.pagesCount = maxPageSize;
debugCall.link = response.headers.get('link');
debugCall.responseLineCount = JSON.parse(virtaBody).length;
debugCall.virtaBody = virtaBody;
debugCall.header = response.headers.toString();
myDebug.Calls.push(debugCall);
writeObj2Table(virtaBody);
}
} catch (e) {
exceptionHandler(e);
}
//$.response.status = $.net.http.OK;
//$.response.contentType = "application/json";
// $.response.setBody(JSON.stringify(b1iResp));
//$.response.setBody(JSON.stringify(virtaBody));
}
function getnextval() {
var conn = $.db.getConnection();
var pstmt;
var query = "select \"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL from dummy";
pstmt = conn.prepareStatement(query);
var rs = pstmt.executeQuery();
if (!rs.next()) {
outMsg = {};
outMsg.method = "getnexval from sequence error";
outMsg.status = "error";
// outMsg.message = e.message;
outMessages.push(outMsg);
} else {
return rs.getString(1);
}
rs.close();
pstmt.close();
conn.close();
}
function writeObj2Table(myOBJ) {
//var pdcontent = $.request.body.asString();
// pdcontent = pdcontent.replace(/\"([^(\")"]+)\":/g,"$1:");
var transOBJ = JSON.parse(myOBJ);
var conn = $.db.getConnection();
var pstmt;
var query;
var vals = {};
var data = [];
// var query2;
// var output = {results: [] };
//var mynextval = getnextval();
//myDebug.mynextval = mynextval;
try {
// query = "INSERT INTO \"NICEPORTAL\".\"UO_CRM_DATA_BP\" (ID,ID_MSD,TYPE,GROUP,SALUTATION,TITLE,NAME,SURNAME,PHONE,MOBILE_PHONE,EMAIL,ADDRESS_JSON,IBAN,BIC,SEPA_MANDATE_ID,SIGNATURE_DATE,ACCOUNT_OWNER,STREET,STREET_NO,ZIP_CODE,CITY,JSONRAW,CREATE_TS,UPDATE_TS) values (\"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)";
query =
"UPSERT \"VIRTAPORTAL\".\"EMP_TRANSACTIONS\" (UUID,CDRID,STATIONUUID,CUSTOMERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,TRANSACTIONTYPE,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,CUSTOMERGROUPID,CUSTOMERGROUPNAME,ORGANIZATIONID,PAYMENTTYPE,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,OPERATORPRICE,OPERATORCURRENCY,OPERATORID,FREECHARGING,EMPTARIFFID,EMPTARIFFNAME,FULLEVSEID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,UPDATE_TS,EICHRECHTTYPE,KWHNETPRICE,MINUTENETPRICE,SESSIONNETPRICE,CPOOPERATORID) values (" +
"?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?,?,?,?,?) WITH PRIMARY KEY";
// "INSERT INTO \"NICEPORTAL\".\"UO_CRM_DATA_BP\" (ID,ID_MSD,ID_CRM,TYPE,BPGROUP,SALUTATION,TITLE,NAME,SURNAME,PHONE,MOBILE_PHONE,EMAIL,ADDRESS_JSON,IBAN,BIC,SEPA_MANDATE_ID,SIGNATURE_DATE,ACCOUNT_OWNER,STREET,STREET_NO,ZIP_CODE,CITY,JSONRAW,CREATE_TS,UPDATE_TS) values (\"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)";
pstmt = conn.prepareStatement(query);
pstmt.setBatchSize(transOBJ.length);
//$.trace.debug("prepareBatchStatement (" + transOBJ.length.toString() + " rows): " + query);
transOBJ.forEach(function(transRow) {
pstmt.setNString(1, transRow.uuid);
/*
if (!isNaN(parseInt(transRow.cdrId))) {
pstmt.setInteger(2, transRow.cdrId);
} else {
pstmt.setNull(2);
}
*/
if (transRow.cdrId) {
pstmt.setNString(2, transRow.cdrId.toString());
} else {
pstmt.setNull(2);
}
pstmt.setNString(3, transRow.stationUuid);
pstmt.setInteger(4, transRow.customerId);
pstmt.setNString(5, transRow.startTime);
pstmt.setNString(6, transRow.stopTime);
if (!isNaN(parseInt(transRow.duration))) {
pstmt.setInteger(7, transRow.duration);
} else {
pstmt.setNull(7);
}
if (!isNaN(parseInt(transRow.wattHour))) {
pstmt.setInteger(8, transRow.wattHour);
} else {
pstmt.setNull(8);
}
if (!isNaN(parseInt(transRow.amount))) {
pstmt.setInteger(9, transRow.amount);
} else {
pstmt.setNull(9);
}
pstmt.setNString(10, transRow.currency);
pstmt.setNString(11, transRow.transactionType);
pstmt.setNString(12, transRow.created);
if (transRow.rfid) {
pstmt.setNString(13, transRow.rfid);
} else {
pstmt.setNull(13);
}
if (transRow.station) {
pstmt.setNClob(14, JSON.stringify(transRow.station));
pstmt.setNString(15, transRow.station.identity);
if (transRow.station.name) {
pstmt.setNString(16, transRow.station.name);
} else {
pstmt.setNull(16);
}
if (typeof transRow.station.location === "undefined") {
pstmt.setNull(17);
pstmt.setNull(18);
pstmt.setNull(19);
pstmt.setNull(20);
} else {
pstmt.setInteger(17, transRow.station.location.id);
pstmt.setNString(18, transRow.station.location.address);
pstmt.setNString(19, transRow.station.location.city);
pstmt.setNString(20, transRow.station.location.locationType);
}
} else {
pstmt.setNull(14);
pstmt.setNull(15);
pstmt.setNull(16);
pstmt.setNull(17);
pstmt.setNull(18);
pstmt.setNull(19);
pstmt.setNull(20);
}
pstmt.setInteger(21, transRow.customerGroupId);
pstmt.setNString(22, transRow.customerGroupName);
pstmt.setInteger(23, transRow.organizationId);
pstmt.setNString(24, transRow.paymentType);
if (transRow.evseId) {
pstmt.setNString(25, transRow.evseId.toString());
} else {
pstmt.setNull(25);
}
pstmt.setNString(26, transRow.plugType);
if (!isNaN(parseInt(transRow.empShare))) {
pstmt.setInteger(27, transRow.empShare);
} else {
pstmt.setNull(27);
}
if (transRow.signedMeterValueBegin) {
pstmt.setNString(28, transRow.signedMeterValueBegin);
} else {
pstmt.setNull(28);
}
if (transRow.signedMeterValueEnd) {
pstmt.setNString(29, transRow.signedMeterValueEnd);
} else {
pstmt.setNull(29);
}
if (!isNaN(parseInt(transRow.operatorPrice))) {
pstmt.setInteger(30, transRow.operatorPrice);
} else {
pstmt.setNull(30);
}
pstmt.setNString(31, transRow.operatorCurrency);
if (!isNaN(parseInt(transRow.operatorId))) {
pstmt.setInteger(32, transRow.operatorId);
} else {
pstmt.setNull(32);
}
pstmt.setNString(33, transRow.freeCharging);
if (!isNaN(parseInt(transRow.empTariffId))) {
pstmt.setInteger(34, transRow.empTariffId);
} else {
pstmt.setNull(34);
}
if (transRow.empTariffName) {
pstmt.setNString(35, transRow.empTariffName);
} else {
pstmt.setNull(35);
}
if (transRow.fullEvseId) {
pstmt.setNString(36, transRow.fullEvseId);
} else {
pstmt.setNull(36);
}
if (!isNaN(parseInt(transRow.meterStart))) {
pstmt.setInteger(37, transRow.meterStart);
} else {
pstmt.setNull(37);
}
if (!isNaN(parseInt(transRow.meterStop))) {
pstmt.setInteger(38, transRow.meterStop);
} else {
pstmt.setNull(38);
}
pstmt.setNString(39, JSON.stringify(transRow.notes));
if (transRow.notes && transRow.notes.length > 0) {
pstmt.setInteger(40, transRow.notes[0].value);
} else {
pstmt.setNull(40);
}
//pstmt.setNString(34, "1234");
pstmt.setNString(41, JSON.stringify(transRow));
pstmt.setNString(42, transRow.eichrechtType);
if (!isNaN(parseInt(transRow.empKwhNetPrice))) {
pstmt.setInteger(43, transRow.empKwhNetPrice);
} else {
pstmt.setNull(43);
}
if (!isNaN(parseInt(transRow.empMinuteNetPrice))) {
pstmt.setInteger(44, transRow.empMinuteNetPrice);
} else {
pstmt.setNull(44);
}
if (!isNaN(parseInt(transRow.empSessionNetPrice))) {
pstmt.setInteger(45, transRow.empSessionNetPrice);
} else {
pstmt.setNull(45);
}
if (transRow.cpoOperatorId) {
pstmt.setNString(46, transRow.cpoOperatorId);
} else {
pstmt.setNull(46);
}
pstmt.addBatch();
});
var batchResult = pstmt.executeBatch();
//$.trace.debug("BatchUpsert Result: " + batchResult.toString());
pstmt.close();
conn.commit();
conn.close();
outMsg = {};
outMsg.method = "insertDB";
outMsg.status = "success";
outMessages.push(outMsg);
} catch (e) {
$.trace.error("InsertDB ExceptionHandler: " + e.toString());
outMsg = {};
outMsg.method = "exceptionHandler";
outMsg.status = "error";
outMsg.message = e.toString();
if (ParDebug) {
outMsg.exceptionInfo = {};
outMsg.exceptionInfo.name = e.name;
outMsg.exceptionInfo.message = e.message;
outMsg.exceptionInfo.fileName = e.fileName;
outMsg.exceptionInfo.lineNumber = e.lineNumber;
outMsg.exceptionInfo.columnNumber = e.columnNumber;
outMsg.exceptionInfo.stack = e.stack;
//outMsg.exceptionInfo.source = e.toSource();
}
outMessages.push(outMsg);
vals.status = 'error';
//vals.description = e.message;
vals.messages = outMessages;
if (ParDebug) {
vals.debug = {};
vals.debug.statement = query;
}
}
}
try{
var content = '';
if ($.request.body) {
content = $.request.body.asString();
}
ParDebug = $.request.parameters.get('debug') && $.request.parameters.get('debug').toLowerCase() === "true";
if ($.request.parameters.get('Billingrunmode') > 0) {
Billingrunmode = $.request.parameters.get('Billingrunmode');
}
if ($.request.parameters.get('DateFrom')) {
DateFrom = $.request.parameters.get('DateFrom');
}
if ($.request.parameters.get('DateTo')) {
DateTo = $.request.parameters.get('DateTo');
}
//doHTTPCallstartBillingrun("FEE","20180101","20180131");
//getVirtaToken("b1_api_user","E3qq$§U,Q3hD#K2}");
getEMPList();
setOutputMessage();
} catch (e) {
exceptionHandler(e);
}
+684
View File
@@ -0,0 +1,684 @@
var output = {};
var outMessages = [];
var outMsg = {};
var outStatus = "success";
var myDebug = {};
var serviceName = "eon.virta.v2.reloadfields.xsjs";
var serviceVersion = '1.4';
var startTS = new Date();
var debugLevel = 0;
switch ($.request.parameters.get("debug")) {
case "true":
case "yes":
case "1":
debugLevel = 1;
break;
case "full":
case "2":
debugLevel = 2;
break;
}
if (debugLevel > 0) {
output.requestParams = $.request.parameters;
}
function setOutputMessage() {
output.status = outStatus;
output.durationSeconds = Math.floor((new Date() - startTS) / 1000);
if (debugLevel > 0) {
output.debugInfos = myDebug;
}
output.messages = outMessages;
$.response.contentType = "application/json";
$.response.setBody(JSON.stringify(output));
//$.response.status = $.net.http.OK;
}
function exceptionHandler(ex) {
if (outMsg.method && outMessages.indexOf(outMsg) === -1) {
outMsg.status = "canceled";
outMessages.push(outMsg);
}
outMsg = {};
outMsg.method = "exceptionHandler";
outMsg.status = "error";
outMsg.message = ex.toString();
if (debugLevel > 0) {
outMsg.exceptionInfo = {};
outMsg.exceptionInfo.name = ex.name;
outMsg.exceptionInfo.message = ex.message;
outMsg.exceptionInfo.fileName = ex.fileName;
outMsg.exceptionInfo.lineNumber = ex.lineNumber;
outMsg.exceptionInfo.columnNumber = ex.columnNumber;
outMsg.exceptionInfo.stack = ex.stack;
//outMsg.exceptionInfo.source = ex.toSource();
}
outMessages.push(outMsg);
outStatus = "error";
output.status = outStatus;
if (debugLevel > 0) {
output.debugInfos = myDebug;
}
output.messages = outMessages;
var errbody = JSON.stringify(output);
$.response.contentType = 'application/json';
$.response.setBody(errbody);
//$.response.status = $.net.http.INTERNAL_SERVER_ERROR;
// Workaround, weil CRM scheinbar Probleme mit anderen Statuscodes hat
$.response.status = $.net.http.OK;
}
function checkParams() {
var isValid = true;
var missingParams = [];
try {
if (!$.request.parameters.get("field")) {
missingParams.push("field");
isValid = false;
}
if (!$.request.parameters.get("datefrom")) {
missingParams.push("datefrom");
isValid = false;
}
if (!$.request.parameters.get("dateto")) {
missingParams.push("dateto");
isValid = false;
}
} catch (e) {
exceptionHandler(e);
isValid = false;
}
if (!isValid) {
outMsg = {};
outMsg.method = "checkParams";
outMsg.status = "error";
outStatus = "error";
outMsg.message = "missing mandatory parameters: " + missingParams.join();
outMessages.push(outMsg);
$.response.status = $.net.http.BAD_REQUEST;
}
return isValid;
}
function getCpoTransactionData() {
var datefrom = $.request.parameters.get("datefrom");
var dateto = $.request.parameters.get("dateto");
var limit = 1000;
var offset = 0;
outMsg = {};
outMsg.method = "getCpoTransactionData";
outMsg.status = "error";
var resultData = {};
var resultSet = [];
var conn = $.hdb.getConnection();
do {
if (debugLevel > 1) {
outMsg.limit = limit;
outMsg.offset = offset;
}
var queryResult = conn.executeQuery(
"select CDRID, JSONRAW \
from VIRTAPORTAL.CPO_CHARGES \
where STARTTIME >= ? and STARTTIME <= ? and JSONRAW is not null \
order by CDRID \
limit ? offset ?",
datefrom, dateto, limit, offset);
var iterator = queryResult.getIterator();
while (iterator.next()) {
resultSet.push(JSON.parse(JSON.stringify(iterator.value())));
}
offset += limit;
} while (queryResult.length === limit)
conn.close();
resultData = {
count: resultSet.length,
rows: resultSet
};
outMsg.status = "success";
outMsg.result = resultData;
if (debugLevel > 0 || outMsg.status === "error") {
outMessages.push(outMsg);
}
return resultData;
}
function updateCpoValidationResults() {
var cpoTransData = getCpoTransactionData();
var completeData = [];
if (cpoTransData.count > 0) {
completeData = cpoTransData.rows.map(function(row) {
var parsedData = {};
var valid = true;
try {
parsedData = JSON.parse(row.JSONRAW);
if (!parsedData.hasOwnProperty('businessValidationResult') || !parsedData.hasOwnProperty('techValidationResult') || !parsedData.hasOwnProperty('notBillableReason')) {
valid = false;
}
} catch (e) {
valid = false;
}
return {
CDRID: row.CDRID,
BUSINESSVALIDATIONRESULT: parsedData.businessValidationResult,
TECHVALIDATIONRESULT: parsedData.techValidationResult,
NOTBILLABLEREASON: parsedData.notBillableReason,
valid: valid
};
});
}
if (completeData.some(function(row) {
return row.valid;
})) {
var paramList = completeData.filter(function(row) {
return row.valid;
}).map(function(row) {
return [row.BUSINESSVALIDATIONRESULT, row.TECHVALIDATIONRESULT, row.NOTBILLABLEREASON, row.CDRID];
});
outMsg = {};
outMsg.method = "updateData";
outMsg.status = "error";
var resultData = {};
var conn = $.hdb.getConnection();
var statement = "update VIRTAPORTAL.CPO_CHARGES \
set BUSINESSVALIDATIONRESULT=?,TECHVALIDATIONRESULT=?,NOTBILLABLEREASON=? \
where CDRID = ?";
if (debugLevel > 1) {
outMsg.statement = statement;
outMsg.paramList = paramList;
}
var affectedRows = conn.executeUpdate(statement, paramList);
conn.commit();
conn.close();
resultData = {
count: affectedRows.reduce(function(cur, acc) {
return cur + acc;
}, 0)
};
outMsg.status = "success";
outMsg.result = resultData;
outMessages.push(outMsg);
}
}
function getEmpTransactionData() {
var datefrom = $.request.parameters.get("datefrom");
var dateto = $.request.parameters.get("dateto");
var limit = 1000;
var offset = 0;
outMsg = {};
outMsg.method = "getEmpTransactionData";
outMsg.status = "error";
var resultData = {};
var resultSet = [];
var conn = $.hdb.getConnection();
do {
if (debugLevel > 1) {
outMsg.limit = limit;
outMsg.offset = offset;
}
var queryResult = conn.executeQuery(
"select UUID, JSONRAW \
from VIRTAPORTAL.EMP_TRANSACTIONS \
where STARTTIME >= ? and STARTTIME <= ? and JSONRAW is not null \
order by UUID \
limit ? offset ?",
datefrom, dateto, limit, offset);
var iterator = queryResult.getIterator();
while (iterator.next()) {
resultSet.push(JSON.parse(JSON.stringify(iterator.value())));
}
offset += limit;
} while (queryResult.length === limit)
conn.close();
resultData = {
count: resultSet.length,
rows: resultSet
};
outMsg.status = "success";
outMsg.result = resultData;
if (debugLevel > 0 || outMsg.status === "error") {
outMessages.push(outMsg);
}
return resultData;
}
function updateEmpFreeMinutes() {
var empTransData = getEmpTransactionData();
var completeData = [];
if (empTransData.count > 0) {
completeData = empTransData.rows.map(function(row) {
var parsedData = {};
var valid = true;
try {
parsedData = JSON.parse(row.JSONRAW);
if (!parsedData.hasOwnProperty('empFreeMinutes')) {
valid = false;
}
} catch (e) {
valid = false;
}
return {
UUID: row.UUID,
FREEMINUTES: parsedData.empFreeMinutes,
valid: valid
};
});
}
// myDebug.completeData = completeData;
/*var updateData = completeData.filter(function(row) {
return row.valid;
}).map(function(row) {
return {
UUID: row.UUID,
FREEMINUTES: row.parsedData.empFreeMinutes
};
});*/
//myDebug.updateData = updateData;
if (completeData.some(function(row) {
return row.valid;
})) {
var paramList = completeData.filter(function(row) {
return row.valid;
}).map(function(row) {
return [row.FREEMINUTES, row.UUID];
});
outMsg = {};
outMsg.method = "updateData";
outMsg.status = "error";
var resultData = {};
var conn = $.hdb.getConnection();
var statement = "update VIRTAPORTAL.EMP_TRANSACTIONS \
set FREEMINUTES = ? \
where UUID = ?";
if (debugLevel > 1) {
outMsg.statement = statement;
outMsg.paramList = paramList;
}
var affectedRows = conn.executeUpdate(statement, paramList);
conn.commit();
conn.close();
resultData = {
count: affectedRows.reduce(function(cur, acc) {
return cur + acc;
}, 0)
};
outMsg.status = "success";
outMsg.result = resultData;
outMessages.push(outMsg);
}
}
function updateEmpValidationResults() {
var empTransData = getEmpTransactionData();
var completeData = [];
if (empTransData.count > 0) {
completeData = empTransData.rows.map(function(row) {
var parsedData = {};
var valid = true;
try {
parsedData = JSON.parse(row.JSONRAW);
if (!parsedData.hasOwnProperty('businessValidationResult') || !parsedData.hasOwnProperty('techValidationResult') || !parsedData.hasOwnProperty('notBillableReason')) {
valid = false;
}
} catch (e) {
valid = false;
}
return {
UUID: row.UUID,
BUSINESSVALIDATIONRESULT: parsedData.businessValidationResult,
TECHVALIDATIONRESULT: parsedData.techValidationResult,
NOTBILLABLEREASON: parsedData.notBillableReason,
valid: valid
};
});
}
if (completeData.some(function(row) {
return row.valid;
})) {
var paramList = completeData.filter(function(row) {
return row.valid;
}).map(function(row) {
return [row.BUSINESSVALIDATIONRESULT, row.TECHVALIDATIONRESULT, row.NOTBILLABLEREASON, row.UUID];
});
outMsg = {};
outMsg.method = "updateData";
outMsg.status = "error";
var resultData = {};
var conn = $.hdb.getConnection();
var statement = "update VIRTAPORTAL.EMP_TRANSACTIONS \
set BUSINESSVALIDATIONRESULT=?,TECHVALIDATIONRESULT=?,NOTBILLABLEREASON=? \
where UUID = ?";
if (debugLevel > 1) {
outMsg.statement = statement;
outMsg.paramList = paramList;
}
var affectedRows = conn.executeUpdate(statement, paramList);
conn.commit();
conn.close();
resultData = {
count: affectedRows.reduce(function(cur, acc) {
return cur + acc;
}, 0)
};
outMsg.status = "success";
outMsg.result = resultData;
outMessages.push(outMsg);
}
}
function checkEmpFreePeriod() {
var empTransData = getEmpTransactionData();
var completeData = [];
if (empTransData.count > 0) {
completeData = empTransData.rows.map(function(row) {
var parsedData = {};
var valid = true;
try {
parsedData = JSON.parse(row.JSONRAW);
if (!parsedData.hasOwnProperty('empFreePeriod')) {
valid = false;
}
} catch (e) {
valid = false;
}
return {
UUID: row.UUID,
FREEPERIOD: parsedData.empFreePeriod,
valid: valid
};
});
}
// myDebug.completeData = completeData;
/*var updateData = completeData.filter(function(row) {
return row.valid;
}).map(function(row) {
return {
UUID: row.UUID,
FREEMINUTES: row.parsedData.empFreeMinutes
};
});*/
//myDebug.updateData = updateData;
var foundData = completeData.filter(function(row) {
return row.valid && row.FREEPERIOD !== null;
}).map(function(row) {
return {
FreePeriod: row.FREEPERIOD,
UUID: row.UUID
};
});
outMsg = {};
outMsg.method = "updateData";
outMsg.foundData = foundData;
outMsg.status = "success";
outMessages.push(outMsg);
}
function getEoperateTransactionData() {
var datefrom = $.request.parameters.get("datefrom");
var dateto = $.request.parameters.get("dateto");
var limit = 1000;
var offset = 0;
outMsg = {};
outMsg.method = "getEoperateTransactionData";
outMsg.status = "error";
var resultData = {};
var resultSet = [];
var conn = $.hdb.getConnection();
do {
if (debugLevel > 1) {
outMsg.limit = limit;
outMsg.offset = offset;
}
var queryResult = conn.executeQuery(
"select BDR_ID, JSONRAW \
from EOPERATE.CHARGEDATA \
where CHARGE_DATA_BEGIN_UTC >= ? and CHARGE_DATA_BEGIN_UTC <= ? and JSONRAW is not null \
order by BDR_ID \
limit ? offset ?",
datefrom, dateto, limit, offset);
var iterator = queryResult.getIterator();
while (iterator.next()) {
resultSet.push(JSON.parse(JSON.stringify(iterator.value())));
}
offset += limit;
} while (queryResult.length === limit)
conn.close();
resultData = {
count: resultSet.length,
rows: resultSet
};
outMsg.status = "success";
outMsg.result = resultData;
if (debugLevel > 0 || outMsg.status === "error") {
outMessages.push(outMsg);
}
return resultData;
}
function roundTo(n, digits) {
var negative = false;
if (digits === undefined) {
digits = 0;
}
if (n < 0) {
negative = true;
n = n * -1;
}
var multiplicator = Math.pow(10, digits);
n = parseFloat((n * multiplicator).toFixed(11));
n = (Math.round(n) / multiplicator).toFixed(digits);
if (negative) {
n = (n * -1).toFixed(digits);
}
return Number(n);
}
function updateEoperatePricingItems() {
var transData = getEoperateTransactionData();
var completeData = [];
if (transData.count > 0) {
completeData = transData.rows.map(function(row) {
var parsedData = {};
var valid = false;
var pricingItemsArray = [];
try {
parsedData = JSON.parse(row.JSONRAW)[0];
if (parsedData.hasOwnProperty('PRICING') && parsedData.PRICING.hasOwnProperty('ITEMS')) {
valid = true;
pricingItemsArray = parsedData.PRICING.ITEMS.filter(function(pricingItem) {
return pricingItem.TYPE === "CUS";
});
}
} catch (e) {
valid = false;
}
return {
BDR_ID: row.BDR_ID,
ITEMS: pricingItemsArray,
valid: valid
};
});
}
myDebug.completeData = completeData;
if (completeData.some(function(row) {
return row.valid;
})) {
var paramList = completeData.filter(function(row) {
return row.valid;
}).map(function(row) {
/*
"TYPE": "CUS",
"UNIT": "KWH",
"UNIT_PRICE": "0.74710000",
"QUANTITY": "1.97050000",
"NET_AMOUNT": "1.47207941",
"CURRENCY": "EUR"
*/
var params = [];
for (let ii = 0; ii < 4; ii++) {
var item = row.ITEMS[ii];
if (item) {
params.push(item.TYPE, item.UNIT, roundTo(item.UNIT_PRICE, 4), roundTo(item.QUANTITY, 3), roundTo(item.NET_AMOUNT, 3), item.CURRENCY);
} else {
params.push(null, null, null, null, null, null);
}
}
params.push(row.BDR_ID);
return params;
});
// myDebug.paramList = paramList;
outMsg = {};
outMsg.method = "updateData";
outMsg.status = "error";
var resultData = {};
var conn = $.hdb.getConnection();
var statement =
"UPDATE EOPERATE.CHARGEDATA SET PRICING_ITEMS_1_TYPE= ?,PRICING_ITEMS_1_UNIT= ?,PRICING_ITEMS_1_UNIT_PRICE= ?,PRICING_ITEMS_1_QUANTITY= ?,PRICING_ITEMS_1_NET_AMOUNT= ?,PRICING_ITEMS_1_CURRENCY= ?,PRICING_ITEMS_2_TYPE= ?,PRICING_ITEMS_2_UNIT= ?,PRICING_ITEMS_2_UNIT_PRICE= ?,PRICING_ITEMS_2_QUANTITY= ?,PRICING_ITEMS_2_NET_AMOUNT= ?,PRICING_ITEMS_2_CURRENCY= ?,PRICING_ITEMS_3_TYPE= ?,PRICING_ITEMS_3_UNIT= ?,PRICING_ITEMS_3_UNIT_PRICE= ?,PRICING_ITEMS_3_QUANTITY= ?,PRICING_ITEMS_3_NET_AMOUNT= ?,PRICING_ITEMS_3_CURRENCY= ?,PRICING_ITEMS_4_TYPE= ?,PRICING_ITEMS_4_UNIT= ?,PRICING_ITEMS_4_UNIT_PRICE= ?,PRICING_ITEMS_4_QUANTITY= ?,PRICING_ITEMS_4_NET_AMOUNT= ?,PRICING_ITEMS_4_CURRENCY= ? where BDR_ID = ?";
if (debugLevel > 1) {
outMsg.statement = statement;
outMsg.paramList = paramList;
}
var affectedRows = conn.executeUpdate(statement, paramList);
conn.commit();
conn.close();
resultData = {
count: affectedRows.reduce(function(cur, acc) {
return cur + acc;
}, 0)
};
outMsg.status = "success";
outMsg.result = resultData;
outMessages.push(outMsg);
}
}
function updateEoperateValidationResults() {
var transData = getEoperateTransactionData();
var completeData = [];
if (transData.count > 0) {
completeData = transData.rows.map(function(row) {
var parsedData = {};
var valid = true;
try {
parsedData = JSON.parse(row.JSONRAW)[0];
if (!parsedData.hasOwnProperty('BUSINESS_VALIDATION_RESULT') || !parsedData.hasOwnProperty('TECH_VALIDATION_RESULT') || !parsedData.hasOwnProperty('NOT_BILLABLE_REASON')) {
valid = false;
}
} catch (e) {
valid = false;
}
return {
BDR_ID: row.BDR_ID,
BUSINESSVALIDATIONRESULT: parsedData.BUSINESS_VALIDATION_RESULT,
TECHVALIDATIONRESULT: parsedData.TECH_VALIDATION_RESULT,
NOTBILLABLEREASON: parsedData.NOT_BILLABLE_REASON,
valid: valid
};
});
}
myDebug.completeData = completeData;
if (completeData.some(function(row) {
return row.valid;
})) {
var paramList = completeData.filter(function(row) {
return row.valid;
}).map(function(row) {
return [row.BUSINESSVALIDATIONRESULT, row.TECHVALIDATIONRESULT, row.NOTBILLABLEREASON, row.BDR_ID];
});
// myDebug.paramList = paramList;
outMsg = {};
outMsg.method = "updateData";
outMsg.status = "error";
var resultData = {};
var conn = $.hdb.getConnection();
var statement =
"UPDATE EOPERATE.CHARGEDATA SET BUSINESSVALIDATIONRESULT=?,TECHVALIDATIONRESULT=?,NOTBILLABLEREASON=? where BDR_ID = ?";
if (debugLevel > 1) {
outMsg.statement = statement;
outMsg.paramList = paramList;
}
var affectedRows = conn.executeUpdate(statement, paramList);
conn.commit();
conn.close();
resultData = {
count: affectedRows.reduce(function(cur, acc) {
return cur + acc;
}, 0)
};
outMsg.status = "success";
outMsg.result = resultData;
outMessages.push(outMsg);
}
}
function chooseMode(field) {
switch (field) {
case 'empfreeminutes':
updateEmpFreeMinutes();
break;
case 'empfreeperiod':
checkEmpFreePeriod();
break;
case 'empValidationResults':
updateEmpValidationResults();
break;
case 'cpoValidationResults':
updateCpoValidationResults();
break;
case 'updateEoperatePricingItems':
updateEoperatePricingItems();
break;
case 'eoperateValidationResults':
updateEoperateValidationResults();
break;
default:
exceptionHandler(new Error("unsupported mode: field=" + field));
}
}
try {
if (checkParams()) {
chooseMode($.request.parameters.get("field"));
}
} catch (e) {
exceptionHandler(e);
}
setOutputMessage();
+439
View File
@@ -0,0 +1,439 @@
var ParDebug = false;
var output = {};
var outMessages = [];
var outErrorMessages = [];
var outMsg = {};
var outStatus = "success";
var myDebug = {};
var serviceVersion = '2.8';
// 4.5.2023 Validation Felder hinzugefügt
// 22.01.2024 Anpassung zulässige null werte in location TS
var debugLevel = 0;
switch ($.request.parameters.get("debug")) {
case "true":
case "yes":
case "1":
debugLevel = 1;
break;
case "full":
case "2":
debugLevel = 2;
break;
}
if (debugLevel > 0) {
output.requestParams = $.request.parameters;
}
function checkCDRID(myCDRID) {
var exists = false;
var conn = $.db.getConnection();
var pstmt;
var query = "select \"CDRID\" from \"VIRTAPORTAL\".\"CPO_CHARGES\" where CDRID = ?";
pstmt = conn.prepareStatement(query);
pstmt.setNString(1, myCDRID);
var rs = pstmt.executeQuery();
if (rs.next()) {
exists = true;
}
rs.close();
pstmt.close();
conn.close();
return exists;
}
function setOutputMessage() {
output.status = outStatus;
if (debugLevel > 0) {
output.debugInfos = myDebug;
}
output.messages = outMessages;
$.response.contentType = "application/json";
$.response.setBody(JSON.stringify(output));
//$.response.status = $.net.http.OK;
}
function exceptionHandler(ex) {
outMsg = {};
outMsg.method = "exceptionHandler";
outMsg.status = "error";
outMsg.message = ex.toString();
if (debugLevel > 0) {
outMsg.exceptionInfo = {};
outMsg.exceptionInfo.name = ex.name;
outMsg.exceptionInfo.message = ex.message;
outMsg.exceptionInfo.fileName = ex.fileName;
outMsg.exceptionInfo.lineNumber = ex.lineNumber;
outMsg.exceptionInfo.columnNumber = ex.columnNumber;
outMsg.exceptionInfo.stack = ex.stack;
//outMsg.exceptionInfo.source = ex.toSource();
}
outMessages.push(outMsg);
outStatus = "error";
output.status = outStatus;
if (debugLevel > 0) {
output.debugInfos = myDebug;
}
output.messages = outMessages;
var errbody = JSON.stringify(output);
$.response.contentType = 'application/json';
$.response.setBody(errbody);
$.response.status = $.net.http.INTERNAL_SERVER_ERROR;
}
function writeObj2Table(transOBJ) {
//var pdcontent = $.request.body.asString();
// pdcontent = pdcontent.replace(/\"([^(\")"]+)\":/g,"$1:");
var conn = $.db.getConnection();
var pstmt;
var query;
var vals = {};
var data = [];
var isUpdateMode = false;
// var query2;
// var output = {results: [] };
//var mynextval = getnextval();
//myDebug.mynextval = mynextval;
try {
var myCDRID = transOBJ[0].cdrId.toString();
isUpdateMode = checkCDRID(myCDRID);
if (isUpdateMode) {
// "UPDATE \"EOPERATE\".\"CHARGEDATA\" SET BDR_ID = ?,EMAID =? ,UNIQUE_ID = ?, CREATION_DATE_UTC = ?,CHARGEPOINT_ID= ?,CHARGEPOINT_TYPE= ?,CHARGEPOINT_METER_ID= ?,CHARGEPOINT_ADDRESS_COUNTRY= ?,CHARGEPOINT_ADDRESS_POSTALCODE= ?,CHARGEPOINT_ADDRESS_CITY= ?,CHARGEPOINT_ADDRESS_STREET= ?,CHARGEPOINT_OPERATOR_ID= ?,CHARGEPOINT_OPERATOR_NAME= ?,EMOBILITY_PROVIDER_ID= ?,EMOBILITY_PROVIDER_NAME= ?,CHARGE_DATA_AUTHORIZATION_TYPE= ?,CHARGE_DATA_CONSUMPTION_KWH= ?,CHARGE_DATA_BEGIN_UTC= ?,CHARGE_DATA_END_UTC= ?,CHARGE_DATA_TIME_ZONE= ?,CHARGE_DATA_EKA_STATUS= ?,PRICING_ITEMS_1_TYPE= ?,PRICING_ITEMS_1_UNIT= ?,PRICING_ITEMS_1_UNIT_PRICE= ?,PRICING_ITEMS_1_QUANTITY= ?,PRICING_ITEMS_1_NET_AMOUNT= ?,PRICING_ITEMS_1_CURRENCY= ?,PRICING_ITEMS_2_TYPE= ?,PRICING_ITEMS_2_UNIT= ?,PRICING_ITEMS_2_UNIT_PRICE= ?,PRICING_ITEMS_2_QUANTITY= ?,PRICING_ITEMS_2_NET_AMOUNT= ?,PRICING_ITEMS_2_CURRENCY= ?,PRICING_ITEMS_3_TYPE= ?,PRICING_ITEMS_3_UNIT= ?,PRICING_ITEMS_3_UNIT_PRICE= ?,PRICING_ITEMS_3_QUANTITY= ?,PRICING_ITEMS_3_NET_AMOUNT= ?,PRICING_ITEMS_3_CURRENCY= ?,PRICING_ITEMS_4_TYPE= ?,PRICING_ITEMS_4_UNIT= ?,PRICING_ITEMS_4_UNIT_PRICE= ?,PRICING_ITEMS_4_QUANTITY= ?,PRICING_ITEMS_4_NET_AMOUNT= ?,PRICING_ITEMS_4_CURRENCY= ?,SUBSCRIPTION_ID= ?,JSONRAW= ?,UPDATE_TS= CURRENT_TIMESTAMP,UPDATE_USER= CURRENT_USER)";
query =
"UPDATE \"VIRTAPORTAL\".\"CPO_CHARGES\" SET CDRID=?,UUID=?,STATIONUUID=?,EMPSELLERID=?,STARTTIME=?,STOPTIME=?,DURATION=?,WATTHOUR=?,AMOUNT=?,CURRENCY=?,METHOD=?,CREATED=?,RFID=?,STATION=?,STATION_ID=?,STATION_NAME=?,LOCATION_ID=?,LOCATION_ADDRESS=?,LOCATION_CITY=?,LOCATION_TYPE=?,ROAMINGEMPID=?,EVCOID=?,ORGANIZATIONID=?,FULLEVSEID=?,EVSEID=?,PLUGTYPE=?,EMPSHARE=?,SIGNEDMETERVALUEBEGIN=?,SIGNEDMETERVALUEEND=?,FREECHARGING=?,CONNECTORID=?,METERSTART=?,METERSTOP=?,NOTES=?,MILEAGE=?,JSONRAW=?,EICHRECHTTYPE=?,UPDATE_TS=CURRENT_TIMESTAMP,UPDATE_USER=CURRENT_USER,BUSINESSVALIDATIONRESULT=?,TECHVALIDATIONRESULT=?,NOTBILLABLEREASON=? where CDRID = ?";
outMsg.method = "Update Data CDRID: " + myCDRID;
} else {
query =
"INSERT INTO \"VIRTAPORTAL\".\"CPO_CHARGES\" (CDRID,UUID,STATIONUUID,EMPSELLERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,METHOD,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,ROAMINGEMPID,EVCOID,ORGANIZATIONID,FULLEVSEID,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,FREECHARGING,CONNECTORID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,EICHRECHTTYPE,UPDATE_TS,UPDATE_USER,BUSINESSVALIDATIONRESULT,TECHVALIDATIONRESULT,NOTBILLABLEREASON) values (" +
"?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP, CURRENT_USER,?,?,?)";
outMsg.method = "Insert Data CDRID: " + myCDRID;
}
myDebug.query = query;
// query = "INSERT INTO \"NICEPORTAL\".\"UO_CRM_DATA_BP\" (ID,ID_MSD,TYPE,GROUP,SALUTATION,TITLE,NAME,SURNAME,PHONE,MOBILE_PHONE,EMAIL,ADDRESS_JSON,IBAN,BIC,SEPA_MANDATE_ID,SIGNATURE_DATE,ACCOUNT_OWNER,STREET,STREET_NO,ZIP_CODE,CITY,JSONRAW,CREATE_TS,UPDATE_TS) values (\"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)";
//query =
// "UPSERT \"VIRTAPORTAL\".\"CPO_CHARGES\" (CDRID,UUID,STATIONUUID,EMPSELLERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,METHOD,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,ROAMINGEMPID,EVCOID,ORGANIZATIONID,FULLEVSEID,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,FREECHARGING,CONNECTORID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,EICHRECHTTYPE,UPDATE_TS,UPDATE_USER) values (" +
// "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP, CURRENT_USER) WITH PRIMARY KEY";
// "INSERT INTO \"NICEPORTAL\".\"UO_CRM_DATA_BP\" (ID,ID_MSD,ID_CRM,TYPE,BPGROUP,SALUTATION,TITLE,NAME,SURNAME,PHONE,MOBILE_PHONE,EMAIL,ADDRESS_JSON,IBAN,BIC,SEPA_MANDATE_ID,SIGNATURE_DATE,ACCOUNT_OWNER,STREET,STREET_NO,ZIP_CODE,CITY,JSONRAW,CREATE_TS,UPDATE_TS) values (\"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)";
pstmt = conn.prepareStatement(query);
pstmt.setBatchSize(transOBJ.length);
//$.trace.debug("prepareBatchStatement (" + transOBJ.length.toString() + " rows): " + query);
transOBJ.forEach(function(transRow) {
if (!isNaN(parseInt(transRow.cdrId))) {
pstmt.setInteger(1, transRow.cdrId);
} else {
pstmt.setNull(1);
}
if (transRow.UUID){
pstmt.setNString(2, transRow.UUID);
} else {
pstmt.setNull(2);
}
if (!isNaN(parseInt(transRow.locationId))) {
pstmt.setInteger(3, transRow.locationId);
} else {
pstmt.setNull(3);
}
if (!isNaN(parseInt(transRow.empSellerId))) {
pstmt.setInteger(4, transRow.empSellerId);
} else {
pstmt.setNull(4);
}
if (transRow.startTime) {
pstmt.setNString(5, transRow.startTime);
} else {
pstmt.setNull(5);
}
if (transRow.stopTime) {
pstmt.setNString(6, transRow.stopTime);
} else {
pstmt.setNull(6);
}
if (!isNaN(parseInt(transRow.duration))) {
pstmt.setInteger(7, transRow.duration);
} else {
pstmt.setNull(7);
}
if (!isNaN(parseInt(transRow.wattHour))) {
pstmt.setInteger(8, transRow.wattHour);
} else {
pstmt.setNull(8);
}
if (!isNaN(parseInt(transRow.amount))) {
pstmt.setInteger(9, transRow.amount);
} else {
pstmt.setNull(9);
}
pstmt.setNString(10, transRow.currency);
pstmt.setNString(11, transRow.method);
if (transRow.created) {
pstmt.setNString(12, transRow.created);
} else {
pstmt.setNull(12);
}
if (transRow.rfid) {
pstmt.setNString(13, transRow.rfid);
} else {
pstmt.setNull(13);
}
if (transRow.station) {
pstmt.setNClob(14, JSON.stringify(transRow.station));
if(transRow.station.identity){
pstmt.setNString(15, transRow.station.identity);
} else {
pstmt.setNull(15);
}
if(transRow.station.name){
pstmt.setNString(16, transRow.station.name);
} else {
pstmt.setNull(16);
}
if (!isNaN(parseInt(transRow.station.location.id))) {
pstmt.setInteger(17, transRow.station.location.id);
} else {
pstmt.setNull(17);
}
if(transRow.station.location.address){
pstmt.setNString(18, transRow.station.location.address);
} else {
pstmt.setNull(18);
}
if(transRow.station.location.city){
pstmt.setNString(19, transRow.station.location.city);
} else {
pstmt.setNull(19);
}
if (transRow.station.location.locationType){
pstmt.setNString(20, transRow.station.location.locationType);
} else {
pstmt.setNull(20);
}
} else {
pstmt.setNull(14);
pstmt.setNull(15);
pstmt.setNull(16);
pstmt.setNull(17);
pstmt.setNull(18);
pstmt.setNull(19);
pstmt.setNull(20);
}
if (transRow.roamingEmpId) {
pstmt.setNString(21, transRow.roamingEmpId);
} else {
pstmt.setNull(21);
}
if(transRow.evcoId){
pstmt.setNString(22, transRow.evcoId);
} else {
pstmt.setNull(22);
}
pstmt.setInteger(23, transRow.organizationId);
if (transRow.fullEvseId) {
pstmt.setNString(24, transRow.fullEvseId);
} else {
pstmt.setNull(24);
}
if (transRow.evseId) {
pstmt.setNString(25, transRow.evseId.toString());
} else {
pstmt.setNull(25);
}
if(transRow.socketType){
pstmt.setNString(26, transRow.socketType);
} else {
pstmt.setNull(26);
}
if (!isNaN(parseInt(transRow.empShare))) {
pstmt.setInteger(27, transRow.empShare);
} else {
pstmt.setNull(27);
}
if (transRow.signedMeterValueBegin) {
pstmt.setNString(28, transRow.signedMeterValueBegin.substring(0,49));
} else {
pstmt.setNull(28);
}
if (transRow.signedMeterValueEnd) {
pstmt.setNString(29, transRow.signedMeterValueEnd.substring(0,49));
} else {
pstmt.setNull(29);
}
if(transRow.freeCharging){
pstmt.setNString(30, transRow.freeCharging);
} else {
pstmt.setNull(30);
}
if (!isNaN(parseInt(transRow.connectorId))) {
pstmt.setInteger(31, transRow.connectorId);
} else {
pstmt.setNull(31);
}
if (!isNaN(parseInt(transRow.meterStart))) {
pstmt.setInteger(32, transRow.meterStart);
} else {
pstmt.setNull(32);
}
if (!isNaN(parseInt(transRow.meterStop))) {
pstmt.setInteger(33, transRow.meterStop);
} else {
pstmt.setNull(33);
}
pstmt.setNString(34, JSON.stringify(transRow.notes));
if (transRow.notes && transRow.notes.length > 0) {
pstmt.setInteger(35, transRow.notes[0].value);
} else {
pstmt.setNull(35);
}
//pstmt.setNString(34, "1234");
pstmt.setNString(36, JSON.stringify(transRow));
if (transRow.eichrechtType) {
pstmt.setNString(37, transRow.eichrechtType);
} else {
pstmt.setNull(37);
}
//04.05.2023 Erweiterung PlausiheckFelder
if (transRow.businessValidationResult) {
pstmt.setNString(38, transRow.businessValidationResult);
} else {
pstmt.setNull(38);
}
if (transRow.techValidationResult) {
pstmt.setNString(39, transRow.techValidationResult);
} else {
pstmt.setNull(39);
}
if (transRow.notBillableReason) {
pstmt.setNString(40, transRow.notBillableReason);
} else {
pstmt.setNull(40);
}
if (isUpdateMode) {
pstmt.setNString(41, myCDRID);
}
pstmt.addBatch();
});
var batchResult = pstmt.executeBatch();
//$.trace.debug("BatchUpsert Result: " + batchResult.toString());
pstmt.close();
conn.commit();
conn.close();
outMsg = {};
outMsg.method = "insertDB";
outMsg.status = "success";
outMessages.push(outMsg);
} catch (e) {
$.trace.error("InsertDB ExceptionHandler: " + e.toString());
exceptionHandler(e);
/*outMsg = {};
outMsg.method = "exceptionHandler";
outMsg.status = "error";
outMsg.message = e.toString();
if (ParDebug) {
outMsg.exceptionInfo = {};
outMsg.exceptionInfo.name = e.name;
outMsg.exceptionInfo.message = e.message;
outMsg.exceptionInfo.fileName = e.fileName;
outMsg.exceptionInfo.lineNumber = e.lineNumber;
outMsg.exceptionInfo.columnNumber = e.columnNumber;
outMsg.exceptionInfo.stack = e.stack;
//outMsg.exceptionInfo.source = e.toSource();
}
outMessages.push(outMsg);
vals.status = 'error';
//vals.description = e.message;
vals.messages = outMessages;
if (ParDebug) {
vals.debug = {};
vals.debug.statement = query;
}*/
}
}
function checkPayload(aCDR) {
var isValid = true;
var reason = "";
try {
if (Array.isArray(aCDR)) {
aCDR.forEach(function(cdrObj) {
if (!cdrObj.hasOwnProperty('cdrId')) {
isValid = false;
reason =
" (mandatory properties are: cdrId)";
}
});
} else {
isValid = false;
reason = " (payload is not an array)";
}
} catch (e) {
exceptionHandler(e);
isValid = false;
}
if (!isValid) {
outMsg = {};
outMsg.method = "checkPayload";
outMsg.status = "error";
outStatus = "error";
$.response.status = $.net.http.BAD_REQUEST;
outMsg.message = "invalid payload structure" + reason;
outMessages.push(outMsg);
}
return isValid;
}
function processData(sObj) {
try {
var cdrData = JSON.parse(sObj);
if (!Array.isArray(cdrData)) {
cdrData = [cdrData];
}
if (checkPayload(cdrData)) {
writeObj2Table(cdrData);
}
} catch (e) {
exceptionHandler(e);
}
}
ParDebug = $.request.parameters.get('debug') && $.request.parameters.get('debug').toLowerCase() === "true";
var content = '';
if ($.request.body) {
content = $.request.body.asString();
}
processData(content);
setOutputMessage();
+533
View File
@@ -0,0 +1,533 @@
var ParDebug = false;
var output = {};
var outMessages = [];
var outErrorMessages = [];
var outMsg = {};
var outStatus = "success";
var myDebug = {};
var serviceVersion = '2.8';
var debugLevel = 0;
switch ($.request.parameters.get("debug")) {
case "true":
case "yes":
case "1":
debugLevel = 1;
break;
case "full":
case "2":
debugLevel = 2;
break;
}
if (debugLevel > 0) {
output.requestParams = $.request.parameters;
}
function setOutputMessage() {
output.status = outStatus;
if (debugLevel > 0) {
output.debugInfos = myDebug;
}
output.messages = outMessages;
$.response.contentType = "application/json";
$.response.setBody(JSON.stringify(output));
//$.response.status = $.net.http.OK;
}
function exceptionHandler(ex) {
outMsg = {};
outMsg.method = "exceptionHandler";
outMsg.status = "error";
outMsg.message = ex.toString();
if (debugLevel > 0) {
outMsg.exceptionInfo = {};
outMsg.exceptionInfo.name = ex.name;
outMsg.exceptionInfo.message = ex.message;
outMsg.exceptionInfo.fileName = ex.fileName;
outMsg.exceptionInfo.lineNumber = ex.lineNumber;
outMsg.exceptionInfo.columnNumber = ex.columnNumber;
outMsg.exceptionInfo.stack = ex.stack;
//outMsg.exceptionInfo.source = ex.toSource();
outMsg.serviceVersion = serviceVersion;
}
outMessages.push(outMsg);
outStatus = "error";
output.status = outStatus;
if (debugLevel > 0) {
output.debugInfos = myDebug;
}
output.messages = outMessages;
var errbody = JSON.stringify(output);
$.response.contentType = 'application/json';
$.response.setBody(errbody);
$.response.status = $.net.http.INTERNAL_SERVER_ERROR;
}
function checkUUID(myUUID) {
var exists = false;
var conn = $.db.getConnection();
var pstmt;
var query = "select \"UUID\" from \"VIRTAPORTAL\".\"EMP_TRANSACTIONS\" where UUID = ?";
pstmt = conn.prepareStatement(query);
pstmt.setNString(1, myUUID);
var rs = pstmt.executeQuery();
if (rs.next()) {
exists = true;
}
rs.close();
pstmt.close();
conn.close();
return exists;
}
function writeObj2Table(transOBJ) {
//var pdcontent = $.request.body.asString();
// pdcontent = pdcontent.replace(/\"([^(\")"]+)\":/g,"$1:");
var conn = $.db.getConnection();
var pstmt;
var query;
var vals = {};
var data = [];
var isUpdateMode = false;
// var query2;
// var output = {results: [] };
//var mynextval = getnextval();
//myDebug.mynextval = mynextval;
try {
var myUUID = transOBJ[0].uuid.toString();
isUpdateMode = checkUUID(myUUID);
if (isUpdateMode) {
// "UPDATE \"EOPERATE\".\"CHARGEDATA\" SET BDR_ID = ?,EMAID =? ,UNIQUE_ID = ?, CREATION_DATE_UTC = ?,CHARGEPOINT_ID= ?,CHARGEPOINT_TYPE= ?,CHARGEPOINT_METER_ID= ?,CHARGEPOINT_ADDRESS_COUNTRY= ?,CHARGEPOINT_ADDRESS_POSTALCODE= ?,CHARGEPOINT_ADDRESS_CITY= ?,CHARGEPOINT_ADDRESS_STREET= ?,CHARGEPOINT_OPERATOR_ID= ?,CHARGEPOINT_OPERATOR_NAME= ?,EMOBILITY_PROVIDER_ID= ?,EMOBILITY_PROVIDER_NAME= ?,CHARGE_DATA_AUTHORIZATION_TYPE= ?,CHARGE_DATA_CONSUMPTION_KWH= ?,CHARGE_DATA_BEGIN_UTC= ?,CHARGE_DATA_END_UTC= ?,CHARGE_DATA_TIME_ZONE= ?,CHARGE_DATA_EKA_STATUS= ?,PRICING_ITEMS_1_TYPE= ?,PRICING_ITEMS_1_UNIT= ?,PRICING_ITEMS_1_UNIT_PRICE= ?,PRICING_ITEMS_1_QUANTITY= ?,PRICING_ITEMS_1_NET_AMOUNT= ?,PRICING_ITEMS_1_CURRENCY= ?,PRICING_ITEMS_2_TYPE= ?,PRICING_ITEMS_2_UNIT= ?,PRICING_ITEMS_2_UNIT_PRICE= ?,PRICING_ITEMS_2_QUANTITY= ?,PRICING_ITEMS_2_NET_AMOUNT= ?,PRICING_ITEMS_2_CURRENCY= ?,PRICING_ITEMS_3_TYPE= ?,PRICING_ITEMS_3_UNIT= ?,PRICING_ITEMS_3_UNIT_PRICE= ?,PRICING_ITEMS_3_QUANTITY= ?,PRICING_ITEMS_3_NET_AMOUNT= ?,PRICING_ITEMS_3_CURRENCY= ?,PRICING_ITEMS_4_TYPE= ?,PRICING_ITEMS_4_UNIT= ?,PRICING_ITEMS_4_UNIT_PRICE= ?,PRICING_ITEMS_4_QUANTITY= ?,PRICING_ITEMS_4_NET_AMOUNT= ?,PRICING_ITEMS_4_CURRENCY= ?,SUBSCRIPTION_ID= ?,JSONRAW= ?,UPDATE_TS= CURRENT_TIMESTAMP,UPDATE_USER= CURRENT_USER)";
query =
"UPDATE \"VIRTAPORTAL\".\"EMP_TRANSACTIONS\" SET UUID=?,CDRID=?,STATIONUUID=?,CUSTOMERID=?,STARTTIME=?,STOPTIME=?,DURATION=?,WATTHOUR=?,AMOUNT=?,CURRENCY=?,TRANSACTIONTYPE=?,CREATED=?,RFID=?,STATION=?,STATION_ID=?,STATION_NAME=?,LOCATION_ID=?,LOCATION_ADDRESS=?,LOCATION_CITY=?,LOCATION_TYPE=?,CUSTOMERGROUPID=?,CUSTOMERGROUPNAME=?,ORGANIZATIONID=?,PAYMENTTYPE=?,EVSEID=?,PLUGTYPE=?,EMPSHARE=?,SIGNEDMETERVALUEBEGIN=?,SIGNEDMETERVALUEEND=?,OPERATORPRICE=?,OPERATORCURRENCY=?,OPERATORID=?,FREECHARGING=?,EMPTARIFFID=?,EMPTARIFFNAME=?,FULLEVSEID=?,METERSTART=?,METERSTOP=?,NOTES=?,MILEAGE=?,JSONRAW=?,EICHRECHTTYPE=?,KWHNETPRICE=?,MINUTENETPRICE=?,SESSIONNETPRICE=?,CPOOPERATORID=?,KWHGROSSPRICE=?,MINUTEGROSSPRICE=?,SESSIONGROSSPRICE=?,LOCATION_COUNTRY=?,BUSINESSVALIDATIONRESULT=?,TECHVALIDATIONRESULT=?,NOTBILLABLEREASON=?,FREEMINUTES=?,UPDATE_TS=CURRENT_TIMESTAMP,UPDATE_USER=CURRENT_USER where UUID = ?";
outMsg.method = "Update Data UUID: " + myUUID;
} else {
query =
"INSERT INTO \"VIRTAPORTAL\".\"EMP_TRANSACTIONS\" (UUID,CDRID,STATIONUUID,CUSTOMERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,TRANSACTIONTYPE,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,CUSTOMERGROUPID,CUSTOMERGROUPNAME,ORGANIZATIONID,PAYMENTTYPE,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,OPERATORPRICE,OPERATORCURRENCY,OPERATORID,FREECHARGING,EMPTARIFFID,EMPTARIFFNAME,FULLEVSEID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,UPDATE_TS,EICHRECHTTYPE,KWHNETPRICE,MINUTENETPRICE,SESSIONNETPRICE,CPOOPERATORID,KWHGROSSPRICE,MINUTEGROSSPRICE,SESSIONGROSSPRICE,LOCATION_COUNTRY,BUSINESSVALIDATIONRESULT,TECHVALIDATIONRESULT,NOTBILLABLEREASON,FREEMINUTES,UPDATE_USER) values (" +
"?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_USER)";
outMsg.method = "Insert Data UUID: " + myUUID;
}
// query = "INSERT INTO \"NICEPORTAL\".\"UO_CRM_DATA_BP\" (ID,ID_MSD,TYPE,GROUP,SALUTATION,TITLE,NAME,SURNAME,PHONE,MOBILE_PHONE,EMAIL,ADDRESS_JSON,IBAN,BIC,SEPA_MANDATE_ID,SIGNATURE_DATE,ACCOUNT_OWNER,STREET,STREET_NO,ZIP_CODE,CITY,JSONRAW,CREATE_TS,UPDATE_TS) values (\"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)";
//query =
// "UPSERT \"VIRTAPORTAL\".\"EMP_TRANSACTIONS\" (UUID,CDRID,STATIONUUID,CUSTOMERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,TRANSACTIONTYPE,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,CUSTOMERGROUPID,CUSTOMERGROUPNAME,ORGANIZATIONID,PAYMENTTYPE,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,OPERATORPRICE,OPERATORCURRENCY,OPERATORID,FREECHARGING,EMPTARIFFID,EMPTARIFFNAME,FULLEVSEID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,UPDATE_TS,EICHRECHTTYPE,KWHNETPRICE,MINUTENETPRICE,SESSIONNETPRICE,CPOOPERATORID,KWHGROSSPRICE,MINUTEGROSSPRICE,SESSIONGROSSPRICE,LOCATION_COUNTRY) values (" +
// "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?,?,?,?,?,?,?,?,?) WITH PRIMARY KEY";
// "INSERT INTO \"NICEPORTAL\".\"UO_CRM_DATA_BP\" (ID,ID_MSD,ID_CRM,TYPE,BPGROUP,SALUTATION,TITLE,NAME,SURNAME,PHONE,MOBILE_PHONE,EMAIL,ADDRESS_JSON,IBAN,BIC,SEPA_MANDATE_ID,SIGNATURE_DATE,ACCOUNT_OWNER,STREET,STREET_NO,ZIP_CODE,CITY,JSONRAW,CREATE_TS,UPDATE_TS) values (\"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)";
pstmt = conn.prepareStatement(query);
pstmt.setBatchSize(transOBJ.length);
//$.trace.debug("prepareBatchStatement (" + transOBJ.length.toString() + " rows): " + query);
transOBJ.forEach(function(transRow) {
pstmt.setNString(1, transRow.uuid);
/*
if (!isNaN(parseInt(transRow.cdrId))) {
pstmt.setInteger(2, transRow.cdrId);
} else {
pstmt.setNull(2);
}
*/
if (transRow.cdrId) {
pstmt.setNString(2, transRow.cdrId.toString());
} else {
pstmt.setNull(2);
}
if (transRow.stationUuid) {
pstmt.setNString(3, transRow.stationUuid);
} else {
pstmt.setNull(3);
}
if (!isNaN(parseInt(transRow.customerId))) {
pstmt.setInteger(4, transRow.customerId);
} else {
pstmt.setNull(4);
}
if (transRow.startTime) {
pstmt.setNString(5, transRow.startTime);
} else {
pstmt.setNull(5);
}
if (transRow.stopTime) {
pstmt.setNString(6, transRow.stopTime);
} else {
pstmt.setNull(6);
}
if (!isNaN(parseInt(transRow.duration))) {
pstmt.setInteger(7, transRow.duration);
} else {
pstmt.setNull(7);
}
if (!isNaN(parseInt(transRow.wattHour))) {
pstmt.setInteger(8, transRow.wattHour);
} else {
pstmt.setNull(8);
}
if (!isNaN(parseInt(transRow.amount))) {
pstmt.setInteger(9, transRow.amount);
} else {
pstmt.setNull(9);
}
if (transRow.currency) {
pstmt.setNString(10, transRow.currency);
} else {
pstmt.setNull(10);
}
if (transRow.transactionType) {
pstmt.setNString(11, transRow.transactionType);
} else {
pstmt.setNull(11);
}
if (transRow.created) {
pstmt.setNString(12, transRow.created);
} else {
pstmt.setNull(12);
}
if (transRow.rfid) {
pstmt.setNString(13, transRow.rfid);
} else {
pstmt.setNull(13);
}
if (transRow.station) {
pstmt.setNClob(14, JSON.stringify(transRow.station));
pstmt.setNString(15, transRow.station.identity);
if (transRow.station.name) {
pstmt.setNString(16, transRow.station.name.substr(0,100));
} else {
pstmt.setNull(16);
}
if (typeof transRow.station.location === "undefined") {
pstmt.setNull(17);
pstmt.setNull(18);
pstmt.setNull(19);
pstmt.setNull(20);
pstmt.setNull(50);
} else {
if (!isNaN(parseInt(transRow.station.location.id))) {
pstmt.setInteger(17, transRow.station.location.id);
} else {
pstmt.setNull(17);
}
if (transRow.station.location.address) {
pstmt.setNString(18, transRow.station.location.address);
} else {
pstmt.setNull(18);
}
if (transRow.station.location.city) {
pstmt.setNString(19, transRow.station.location.city);
} else {
pstmt.setNull(19);
}
if (transRow.station.location.locationType) {
pstmt.setNString(20, transRow.station.location.locationType);
} else {
pstmt.setNull(20);
}
if (transRow.station.location.country) {
pstmt.setNString(50, transRow.station.location.country);
} else {
pstmt.setNull(50);
}
}
} else {
pstmt.setNull(14);
pstmt.setNull(15);
pstmt.setNull(16);
pstmt.setNull(17);
pstmt.setNull(18);
pstmt.setNull(19);
pstmt.setNull(20);
pstmt.setNull(50);
}
pstmt.setInteger(21, transRow.customerGroupId);
if (transRow.customerGroupName) {
pstmt.setNString(22, transRow.customerGroupName);
} else {
pstmt.setNull(22);
}
if (!isNaN(parseInt(transRow.organizationId))) {
pstmt.setInteger(23, transRow.organizationId);
} else {
pstmt.setNull(23);
}
if (transRow.paymentType) {
pstmt.setNString(24, transRow.paymentType);
} else {
pstmt.setNull(24);
}
if (transRow.evseId) {
pstmt.setNString(25, transRow.evseId.toString());
} else {
pstmt.setNull(25);
}
if (transRow.plugType) {
pstmt.setNString(26, transRow.plugType);
} else {
pstmt.setNull(26);
}
if (!isNaN(parseInt(transRow.empShare))) {
pstmt.setInteger(27, transRow.empShare);
} else {
pstmt.setNull(27);
}
if (transRow.signedMeterValueBegin) {
pstmt.setNString(28, transRow.signedMeterValueBegin.substr(0, 50));
} else {
pstmt.setNull(28);
}
if (transRow.signedMeterValueEnd) {
pstmt.setNString(29, transRow.signedMeterValueEnd.substr(0, 50));
} else {
pstmt.setNull(29);
}
if (!isNaN(parseInt(transRow.operatorPrice))) {
pstmt.setInteger(30, transRow.operatorPrice);
} else {
pstmt.setNull(30);
}
if (transRow.operatorCurrency) {
pstmt.setNString(31, transRow.operatorCurrency);
} else {
pstmt.setNull(31);
}
if (!isNaN(parseInt(transRow.operatorId))) {
pstmt.setInteger(32, transRow.operatorId);
} else {
pstmt.setNull(32);
}
if (transRow.freeCharging) {
pstmt.setNString(33, transRow.freeCharging);
} else {
pstmt.setNull(33);
}
if (!isNaN(parseInt(transRow.empTariffId))) {
pstmt.setInteger(34, transRow.empTariffId);
} else {
pstmt.setNull(34);
}
if (transRow.empTariffName) {
pstmt.setNString(35, transRow.empTariffName);
} else {
pstmt.setNull(35);
}
if (transRow.fullEvseId) {
pstmt.setNString(36, transRow.fullEvseId);
} else {
pstmt.setNull(36);
}
if (!isNaN(parseInt(transRow.meterStart))) {
pstmt.setInteger(37, transRow.meterStart);
} else {
pstmt.setNull(37);
}
if (!isNaN(parseInt(transRow.meterStop))) {
pstmt.setInteger(38, transRow.meterStop);
} else {
pstmt.setNull(38);
}
pstmt.setNString(39, JSON.stringify(transRow.notes));
if (transRow.notes && transRow.notes.length > 0) {
pstmt.setInteger(40, transRow.notes[0].value);
} else {
pstmt.setNull(40);
}
//pstmt.setNString(34, "1234");
pstmt.setNString(41, JSON.stringify(transRow));
if (transRow.eichrechtType) {
pstmt.setNString(42, transRow.eichrechtType);
} else {
pstmt.setNull(42);
}
if (!isNaN(parseInt(transRow.empKwhNetPrice))) {
pstmt.setInteger(43, transRow.empKwhNetPrice);
} else {
pstmt.setNull(43);
}
if (!isNaN(parseInt(transRow.empMinuteNetPrice))) {
pstmt.setInteger(44, transRow.empMinuteNetPrice);
} else {
pstmt.setNull(44);
}
if (!isNaN(parseInt(transRow.empSessionNetPrice))) {
pstmt.setInteger(45, transRow.empSessionNetPrice);
} else {
pstmt.setNull(45);
}
if (transRow.cpoOperatorId) {
pstmt.setNString(46, transRow.cpoOperatorId);
} else {
pstmt.setNull(46);
}
if (!isNaN(parseInt(transRow.empKwhGrossPrice))) {
pstmt.setInteger(47, transRow.empKwhGrossPrice);
} else {
pstmt.setNull(47);
}
if (!isNaN(parseInt(transRow.empMinuteGrossPrice))) {
pstmt.setInteger(48, transRow.empMinuteGrossPrice);
} else {
pstmt.setNull(48);
}
if (!isNaN(parseInt(transRow.empSessionGrossPrice))) {
pstmt.setInteger(49, transRow.empSessionGrossPrice);
} else {
pstmt.setNull(49);
}
//20.04.2023 Erweiterung PlausiheckFelder
if (transRow.businessValidationResult) {
pstmt.setNString(51, transRow.businessValidationResult);
} else {
pstmt.setNull(51);
}
if (transRow.techValidationResult) {
pstmt.setNString(52, transRow.techValidationResult);
} else {
pstmt.setNull(52);
}
if (transRow.notBillableReason) {
pstmt.setNString(53, transRow.notBillableReason);
} else {
pstmt.setNull(53);
}
if (!isNaN(parseInt(transRow.empFreeMinutes))) {
pstmt.setInteger(54, transRow.empFreeMinutes);
} else {
pstmt.setNull(54);
}
if (isUpdateMode) {
pstmt.setNString(55, myUUID);
}
pstmt.addBatch();
});
var batchResult = pstmt.executeBatch();
//$.trace.debug("BatchUpsert Result: " + batchResult.toString());
pstmt.close();
conn.commit();
conn.close();
outMsg = {};
outMsg.method = "insertDB";
outMsg.status = "success";
outMessages.push(outMsg);
} catch (e) {
$.trace.error("InsertDB ExceptionHandler: " + e.toString());
exceptionHandler(e);
/*outMsg = {};
outMsg.method = "exceptionHandler";
outMsg.status = "error";
outStatus = "error";
output.status = outStatus;
outMsg.message = e.toString();
if (ParDebug) {
outMsg.exceptionInfo = {};
outMsg.exceptionInfo.name = e.name;
outMsg.exceptionInfo.message = e.message;
outMsg.exceptionInfo.fileName = e.fileName;
outMsg.exceptionInfo.lineNumber = e.lineNumber;
outMsg.exceptionInfo.columnNumber = e.columnNumber;
outMsg.exceptionInfo.stack = e.stack;
//outMsg.exceptionInfo.source = e.toSource();
}
outMessages.push(outMsg);
vals.status = 'error';
//vals.description = e.message;
vals.messages = outMessages;
if (ParDebug) {
vals.debug = {};
vals.debug.statement = query;
}*/
}
}
function checkPayload(aCDR) {
var isValid = true;
var reason = "";
try {
if (Array.isArray(aCDR)) {
aCDR.forEach(function(cdrObj) {
if (!cdrObj.hasOwnProperty('uuid')) {
isValid = false;
reason =
" (mandatory properties are: uuid)";
}
});
} else {
isValid = false;
reason = " (payload is not an array)";
}
} catch (e) {
exceptionHandler(e);
isValid = false;
}
if (!isValid) {
outMsg = {};
outMsg.method = "checkPayload";
outMsg.status = "error";
outStatus = "error";
$.response.status = $.net.http.BAD_REQUEST;
outMsg.message = "invalid payload structure" + reason;
outMessages.push(outMsg);
}
return isValid;
}
function processData(sObj) {
try {
var cdrData = JSON.parse(sObj);
if (!Array.isArray(cdrData)) {
cdrData = [cdrData];
}
if (checkPayload(cdrData)) {
writeObj2Table(cdrData);
}
} catch (e) {
exceptionHandler(e);
}
}
ParDebug = $.request.parameters.get('debug') && $.request.parameters.get('debug').toLowerCase() === "true";
var content = '';
if ($.request.body) {
content = $.request.body.asString();
}
processData(content);
setOutputMessage();