📄 upsservices.java
字号:
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); } } try { shipmentRouteSegment.set("actualTransportCost", Double.valueOf(transportationMonetaryValue)); } catch (NumberFormatException e) { String excErrMsg = "Error parsing the transportationMonetaryValue [" + transportationMonetaryValue + "]: " + e.toString(); Debug.logError(e, excErrMsg, module); errorList.add(excErrMsg);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -