439 lines
14 KiB
JavaScript
439 lines
14 KiB
JavaScript
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(); |