📄 upsservices.java
字号:
boolean shipmentUpsSaveCertificationInfo = "true".equals(UtilProperties.getPropertyValue("shipment", "shipment.ups.save.certification.info"));
String shipmentUpsSaveCertificationPath = UtilProperties.getPropertyValue("shipment", "shipment.ups.save.certification.path");
File shipmentUpsSaveCertificationFile = null;
if (shipmentUpsSaveCertificationInfo) {
shipmentUpsSaveCertificationFile = new File(shipmentUpsSaveCertificationPath);
if (!shipmentUpsSaveCertificationFile.exists()) {
shipmentUpsSaveCertificationFile.mkdirs();
}
}
String shipmentAcceptResponseString = null;
try {
GenericValue shipment = delegator.findByPrimaryKey("Shipment", UtilMisc.toMap("shipmentId", shipmentId));
GenericValue shipmentRouteSegment = delegator.findByPrimaryKey("ShipmentRouteSegment", UtilMisc.toMap("shipmentId", shipmentId, "shipmentRouteSegmentId", shipmentRouteSegmentId));
if (!"UPS".equals(shipmentRouteSegment.getString("carrierPartyId"))) {
return ServiceUtil.returnError("ERROR: The Carrier for ShipmentRouteSegment " + shipmentRouteSegmentId + " of Shipment " + shipmentId + ", is not UPS.");
}
// add ShipmentRouteSegment carrierServiceStatusId, check before all UPS services
if (!"SHRSCS_CONFIRMED".equals(shipmentRouteSegment.getString("carrierServiceStatusId"))) {
return ServiceUtil.returnError("ERROR: The Carrier Service Status for ShipmentRouteSegment " + shipmentRouteSegmentId + " of Shipment " + shipmentId + ", is [" + shipmentRouteSegment.getString("carrierServiceStatusId") + "], but must be [SHRSCS_CONFIRMED] to perform the UPS Shipment Accept operation.");
}
List shipmentPackageRouteSegs = shipmentRouteSegment.getRelated("ShipmentPackageRouteSeg", null, UtilMisc.toList("+shipmentPackageSeqId"));
if (shipmentPackageRouteSegs == null || shipmentPackageRouteSegs.size() == 0) {
return ServiceUtil.returnError("No ShipmentPackageRouteSegs found for ShipmentRouteSegment with shipmentId " + shipmentId + " and shipmentRouteSegmentId " + shipmentRouteSegmentId);
}
if (UtilValidate.isEmpty(shipmentRouteSegment.getString("trackingDigest"))) {
return ServiceUtil.returnError("ERROR: The trackingDigest was not set for this Route Segment, meaning that a UPS shipment confirm has not been done.");
}
Document shipmentAcceptRequestDoc = UtilXml.makeEmptyXmlDocument("ShipmentAcceptRequest");
Element shipmentAcceptRequestElement = shipmentAcceptRequestDoc.getDocumentElement();
shipmentAcceptRequestElement.setAttribute("xml:lang", "en-US");
// Top Level Element: Request
Element requestElement = UtilXml.addChildElement(shipmentAcceptRequestElement, "Request", shipmentAcceptRequestDoc);
Element transactionReferenceElement = UtilXml.addChildElement(requestElement, "TransactionReference", shipmentAcceptRequestDoc);
UtilXml.addChildElementValue(transactionReferenceElement, "CustomerContext", "ShipAccept / 01", shipmentAcceptRequestDoc);
UtilXml.addChildElementValue(transactionReferenceElement, "XpciVersion", "1.0001", shipmentAcceptRequestDoc);
UtilXml.addChildElementValue(requestElement, "RequestAction", "ShipAccept", shipmentAcceptRequestDoc);
UtilXml.addChildElementValue(requestElement, "RequestOption", "01", shipmentAcceptRequestDoc);
UtilXml.addChildElementValue(shipmentAcceptRequestElement, "ShipmentDigest", shipmentRouteSegment.getString("trackingDigest"), shipmentAcceptRequestDoc);
String shipmentAcceptRequestString = null;
try {
shipmentAcceptRequestString = UtilXml.writeXmlDocument(shipmentAcceptRequestDoc);
} catch (IOException e) {
String ioeErrMsg = "Error writing the ShipmentAcceptRequest XML Document to a String: " + e.toString();
Debug.logError(e, ioeErrMsg, module);
return ServiceUtil.returnError(ioeErrMsg);
}
// create AccessRequest XML doc
Document accessRequestDocument = createAccessRequestDocument();
String accessRequestString = null;
try {
accessRequestString = UtilXml.writeXmlDocument(accessRequestDocument);
} catch (IOException e) {
String ioeErrMsg = "Error writing the AccessRequest XML Document to a String: " + e.toString();
Debug.logError(e, ioeErrMsg, module);
return ServiceUtil.returnError(ioeErrMsg);
}
// connect to UPS server, send AccessRequest to auth
// send ShipmentConfirmRequest String
// get ShipmentConfirmResponse String back
StringBuffer xmlString = new StringBuffer();
// TODO: note that we may have to append <?xml version="1.0"?> before each string
xmlString.append(accessRequestString);
xmlString.append(shipmentAcceptRequestString);
if (shipmentUpsSaveCertificationInfo) {
String outFileName = shipmentUpsSaveCertificationPath + "/UpsShipmentAcceptRequest" + shipmentId + "_" + shipmentRouteSegment.getString("shipmentRouteSegmentId") + ".xml";
try {
FileOutputStream fileOut = new FileOutputStream(outFileName);
fileOut.write(xmlString.toString().getBytes());
fileOut.flush();
fileOut.close();
} catch (IOException e) {
Debug.log(e, "Could not save UPS XML file: [[[" + xmlString.toString() + "]]] to file: " + outFileName, module);
}
}
try {
shipmentAcceptResponseString = sendUpsRequest("ShipAccept", xmlString.toString());
} catch (UpsConnectException e) {
String uceErrMsg = "Error sending UPS request for UPS Service ShipAccept: " + e.toString();
Debug.logError(e, uceErrMsg, module);
return ServiceUtil.returnError(uceErrMsg);
}
if (shipmentUpsSaveCertificationInfo) {
String outFileName = shipmentUpsSaveCertificationPath + "/UpsShipmentAcceptResponse" + shipmentId + "_" + shipmentRouteSegment.getString("shipmentRouteSegmentId") + ".xml";
try {
FileOutputStream fileOut = new FileOutputStream(outFileName);
fileOut.write(shipmentAcceptResponseString.getBytes());
fileOut.flush();
fileOut.close();
} catch (IOException e) {
Debug.log(e, "Could not save UPS XML file: [[[" + xmlString.toString() + "]]] to file: " + outFileName, module);
}
}
Document shipmentAcceptResponseDocument = null;
try {
shipmentAcceptResponseDocument = UtilXml.readXmlDocument(shipmentAcceptResponseString, false);
} catch (SAXException e2) {
String excErrMsg = "Error parsing the ShipmentAcceptResponse: " + e2.toString();
Debug.logError(e2, excErrMsg, module);
return ServiceUtil.returnError(excErrMsg);
} catch (ParserConfigurationException e2) {
String excErrMsg = "Error parsing the ShipmentAcceptResponse: " + e2.toString();
Debug.logError(e2, excErrMsg, module);
return ServiceUtil.returnError(excErrMsg);
} catch (IOException e2) {
String excErrMsg = "Error parsing the ShipmentAcceptResponse: " + e2.toString();
Debug.logError(e2, excErrMsg, module);
return ServiceUtil.returnError(excErrMsg);
}
return handleUpsShipmentAcceptResponse(shipmentAcceptResponseDocument, shipmentRouteSegment, shipmentPackageRouteSegs);
} catch (GenericEntityException e) {
Debug.logError(e, module);
return ServiceUtil.returnError("Error reading or writing Shipment data for UPS Shipment Accept: " + e.toString());
}
}
public static Map handleUpsShipmentAcceptResponse(Document shipmentAcceptResponseDocument, GenericValue shipmentRouteSegment, List shipmentPackageRouteSegs) throws GenericEntityException {
boolean shipmentUpsSaveCertificationInfo = "true".equals(UtilProperties.getPropertyValue("shipment", "shipment.ups.save.certification.info"));
String shipmentUpsSaveCertificationPath = UtilProperties.getPropertyValue("shipment", "shipment.ups.save.certification.path");
File shipmentUpsSaveCertificationFile = null;
if (shipmentUpsSaveCertificationInfo) {
shipmentUpsSaveCertificationFile = new File(shipmentUpsSaveCertificationPath);
if (!shipmentUpsSaveCertificationFile.exists()) {
shipmentUpsSaveCertificationFile.mkdirs();
}
}
// process ShipmentAcceptResponse, update data as needed
Element shipmentAcceptResponseElement = shipmentAcceptResponseDocument.getDocumentElement();
// handle Response element info
Element responseElement = UtilXml.firstChildElement(shipmentAcceptResponseElement, "Response");
Element responseTransactionReferenceElement = UtilXml.firstChildElement(responseElement, "TransactionReference");
String responseTransactionReferenceCustomerContext = UtilXml.childElementValue(responseTransactionReferenceElement, "CustomerContext");
String responseTransactionReferenceXpciVersion = UtilXml.childElementValue(responseTransactionReferenceElement, "XpciVersion");
String responseStatusCode = UtilXml.childElementValue(responseElement, "ResponseStatusCode");
String responseStatusDescription = UtilXml.childElementValue(responseElement, "ResponseStatusDescription");
List errorList = new LinkedList();
UpsServices.handleErrors(responseElement, errorList);
if ("1".equals(responseStatusCode)) {
Element shipmentResultsElement = UtilXml.firstChildElement(shipmentAcceptResponseElement, "ShipmentResults");
// This information is returned in both the ShipmentConfirmResponse and
//the ShipmentAcceptResponse. So, we'll go ahead and store it here again
//and warn of changes or something...
// handle ShipmentCharges element info
Element shipmentChargesElement = UtilXml.firstChildElement(shipmentResultsElement, "ShipmentCharges");
Element transportationChargesElement = UtilXml.firstChildElement(shipmentChargesElement, "TransportationCharges");
String transportationCurrencyCode = UtilXml.childElementValue(transportationChargesElement, "CurrencyCode");
String transportationMonetaryValue = UtilXml.childElementValue(transportationChargesElement, "MonetaryValue");
Element serviceOptionsChargesElement = UtilXml.firstChildElement(shipmentChargesElement, "ServiceOptionsCharges");
String serviceOptionsCurrencyCode = UtilXml.childElementValue(serviceOptionsChargesElement, "CurrencyCode");
String serviceOptionsMonetaryValue = UtilXml.childElementValue(serviceOptionsChargesElement, "MonetaryValue");
Element totalChargesElement = UtilXml.firstChildElement(shipmentChargesElement, "TotalCharges");
String totalCurrencyCode = UtilXml.childElementValue(totalChargesElement, "CurrencyCode");
String totalMonetaryValue = UtilXml.childElementValue(totalChargesElement, "MonetaryValue");
if (UtilValidate.isNotEmpty(totalCurrencyCode)) {
if (UtilValidate.isEmpty(shipmentRouteSegment.getString("currencyUomId"))) {
shipmentRouteSegment.set("currencyUomId", totalCurrencyCode);
} else if(!totalCurrencyCode.equals(shipmentRouteSegment.getString("currencyUomId"))) {
errorList.add("The Currency Unit of Measure returned [" + totalCurrencyCode + "] is not the same as the original [" + shipmentRouteSegment.getString("currencyUomId") + "], setting to the new one.");
shipmentRouteSegment.set("currencyUomId", totalCurrencyCode);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -