⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shippingevents.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
字号:
/* * $Id: ShippingEvents.java 5462 2005-08-05 18:35:48Z jonesde $ * *  Copyright (c) 2001, 2002 The Open For Business Project - www.ofbiz.org * *  Permission is hereby granted, free of charge, to any person obtaining a *  copy of this software and associated documentation files (the "Software"), *  to deal in the Software without restriction, including without limitation *  the rights to use, copy, modify, merge, publish, distribute, sublicense, *  and/or sell copies of the Software, and to permit persons to whom the *  Software is furnished to do so, subject to the following conditions: * *  The above copyright notice and this permission notice shall be included *  in all copies or substantial portions of the Software. * *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY *  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT *  OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *  THE USE OR OTHER DEALINGS IN THE SOFTWARE. */package org.ofbiz.order.shoppingcart.shipping;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.ofbiz.base.util.Debug;import org.ofbiz.base.util.GeneralException;import org.ofbiz.base.util.UtilValidate;import org.ofbiz.entity.GenericDelegator;import org.ofbiz.entity.GenericValue;import org.ofbiz.order.order.OrderReadHelper;import org.ofbiz.order.shoppingcart.ShoppingCart;import org.ofbiz.product.store.ProductStoreWorker;import org.ofbiz.service.GenericServiceException;import org.ofbiz.service.LocalDispatcher;import org.ofbiz.service.ModelService;import org.ofbiz.service.ServiceUtil;import org.ofbiz.base.util.UtilMisc;/** * ShippingEvents - Events used for processing shipping fees * * @author     <a href="mailto:jaz@ofbiz.org">Andy Zeneski</a> * @version    $Rev: 5462 $ * @since      2.0 */public class ShippingEvents {    public static final String module = ShippingEvents.class.getName();    public static String getShipEstimate(HttpServletRequest request, HttpServletResponse response) {        ShoppingCart cart = (ShoppingCart) request.getSession().getAttribute("shoppingCart");        LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");        GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");        int shipGroups = cart.getShipGroupSize();        for (int i = 0; i < shipGroups; i++) {            Map result = getShipGroupEstimate(dispatcher, delegator, cart, i);            ServiceUtil.getMessages(request, result, null, "", "", "", "", null, null);            if (result.get(ModelService.RESPONSE_MESSAGE).equals(ModelService.RESPOND_ERROR)) {                return "error";            }            Double shippingTotal = (Double) result.get("shippingTotal");            if (shippingTotal == null) {                shippingTotal = new Double(0.00);            }            cart.setItemShipGroupEstimate(shippingTotal.doubleValue(), i);        }        // all done        return "success";    }    public static Map getShipGroupEstimate(LocalDispatcher dispatcher, GenericDelegator delegator, ShoppingCart cart, int groupNo) {        // check for shippable items        if (!cart.shippingApplies()) {            Map responseResult = ServiceUtil.returnSuccess();            responseResult.put("shippingTotal", new Double(0.00));            return responseResult;        }        String shipmentMethodTypeId = cart.getShipmentMethodTypeId(groupNo);        String carrierPartyId = cart.getCarrierPartyId(groupNo);        return getShipGroupEstimate(dispatcher, delegator, cart.getOrderType(), shipmentMethodTypeId, carrierPartyId, null,                cart.getShippingContactMechId(groupNo), cart.getProductStoreId(), cart.getShippableItemInfo(groupNo),                cart.getShippableWeight(groupNo), cart.getShippableQuantity(groupNo), cart.getShippableTotal(groupNo));    }    public static Map getShipEstimate(LocalDispatcher dispatcher, GenericDelegator delegator, OrderReadHelper orh, String shipGroupSeqId) {        // check for shippable items        if (!orh.shippingApplies()) {            Map responseResult = ServiceUtil.returnSuccess();            responseResult.put("shippingTotal", new Double(0.00));            return responseResult;        }        GenericValue shipGroup = orh.getOrderItemShipGroup(shipGroupSeqId);        String shipmentMethodTypeId = shipGroup.getString("shipmentMethodTypeId");        String carrierRoleTypeId = shipGroup.getString("carrierRoleTypeId");        String carrierPartyId = shipGroup.getString("carrierPartyId");        GenericValue shipAddr = orh.getShippingAddress(shipGroupSeqId);        if (shipAddr == null) {            return UtilMisc.toMap("shippingTotal", new Double(0));        }        String contactMechId = shipAddr.getString("contactMechId");        return getShipGroupEstimate(dispatcher, delegator, orh.getOrderTypeId(), shipmentMethodTypeId, carrierPartyId, carrierRoleTypeId,                contactMechId, orh.getProductStoreId(), orh.getShippableItemInfo(shipGroupSeqId), orh.getShippableWeight(shipGroupSeqId),                orh.getShippableQuantity(shipGroupSeqId), orh.getShippableTotal(shipGroupSeqId));    }    public static Map getShipGroupEstimate(LocalDispatcher dispatcher, GenericDelegator delegator, String orderTypeId,            String shipmentMethodTypeId, String carrierPartyId, String carrierRoleTypeId, String shippingContactMechId,            String productStoreId, List itemInfo, double shippableWeight, double shippableQuantity,            double shippableTotal) {        String standardMessage = "A problem occurred calculating shipping. Fees will be calculated offline.";        List errorMessageList = new ArrayList();        if (shipmentMethodTypeId == null || carrierPartyId == null) {            if ("SALES_ORDER".equals(orderTypeId)) {                errorMessageList.add("Please Select Your Shipping Method.");                return ServiceUtil.returnError(errorMessageList);            } else {                return ServiceUtil.returnSuccess();            }        }        if (carrierRoleTypeId == null) {            carrierRoleTypeId = "CARRIER";        }        if (shippingContactMechId == null) {            errorMessageList.add("Please Select Your Shipping Address.");            return ServiceUtil.returnError(errorMessageList);        }        // no shippable items; we won't change any shipping at all        if (shippableQuantity == 0) {            Map result = ServiceUtil.returnSuccess();            result.put("shippingTotal", new Double(0));            return result;        }        // check for an external service call        GenericValue storeShipMethod = ProductStoreWorker.getProductStoreShipmentMethod(delegator, productStoreId,                shipmentMethodTypeId, carrierPartyId, carrierRoleTypeId);        if (storeShipMethod == null) {            errorMessageList.add("No applicable shipment method found.");            return ServiceUtil.returnError(errorMessageList);        }        // the initial amount before manual estimates        double shippingTotal = 0.00;        // prepare the service invocation fields        Map serviceFields = new HashMap();        serviceFields.put("initialEstimateAmt", new Double(shippingTotal));        serviceFields.put("shippableTotal", new Double(shippableTotal));        serviceFields.put("shippableQuantity", new Double(shippableQuantity));        serviceFields.put("shippableWeight", new Double(shippableWeight));                serviceFields.put("shippableItemInfo", itemInfo);        serviceFields.put("productStoreId", productStoreId);        serviceFields.put("carrierRoleTypeId", "CARRIER");        serviceFields.put("carrierPartyId", carrierPartyId);        serviceFields.put("shipmentMethodTypeId", shipmentMethodTypeId);        serviceFields.put("shippingContactMechId", shippingContactMechId);        // call the external shipping service        try {            Double externalAmt = getExternalShipEstimate(dispatcher, storeShipMethod, serviceFields);            if (externalAmt != null) {                shippingTotal += externalAmt.doubleValue();            }        } catch (GeneralException e) {            return ServiceUtil.returnSuccess(standardMessage);        }        // update the initial amount        serviceFields.put("initialEstimateAmt", new Double(shippingTotal));        // call the generic estimate service        try {            Double genericAmt = getGenericShipEstimate(dispatcher, storeShipMethod, serviceFields);            if (genericAmt != null) {                shippingTotal += genericAmt.doubleValue();            }        } catch (GeneralException e) {            return ServiceUtil.returnSuccess(standardMessage);        }        // return the totals        Map responseResult = ServiceUtil.returnSuccess();        responseResult.put("shippingTotal", new Double(shippingTotal));        return responseResult;    }    public static Double getGenericShipEstimate(LocalDispatcher dispatcher, GenericValue storeShipMeth, Map context) throws GeneralException {        // invoke the generic estimate service next -- append to estimate amount        Map genericEstimate = null;        Double genericShipAmt = null;        try {            genericEstimate = dispatcher.runSync("calcShipmentCostEstimate", context);        } catch (GenericServiceException e) {            Debug.logError(e, "Shipment Service Error", module);            throw new GeneralException();        }        if (ServiceUtil.isError(genericEstimate)) {            Debug.logError(ServiceUtil.getErrorMessage(genericEstimate), module);            throw new GeneralException();        } else {            genericShipAmt = (Double) genericEstimate.get("shippingEstimateAmount");        }        return genericShipAmt;    }    public static Double getExternalShipEstimate(LocalDispatcher dispatcher, GenericValue storeShipMeth, Map context) throws GeneralException {        // invoke the external shipping estimate service        Double externalShipAmt = null;        if (storeShipMeth.get("serviceName") != null) {            String serviceName = storeShipMeth.getString("serviceName");            String configProps = storeShipMeth.getString("configProps");            if (UtilValidate.isNotEmpty(serviceName)) {                // prepare the external service context                context.put("serviceConfigProps", configProps);                // invoke the service                Map serviceResp = null;                try {                    Debug.log("Service : " + serviceName + " / " + configProps + " -- " + context, module);                    // because we don't want to blow up too big or rollback the transaction when this happens, always have it run in its own transaction...                    serviceResp = dispatcher.runSync(serviceName, context, 0, true);                } catch (GenericServiceException e) {                    Debug.logError(e, "Shipment Service Error", module);                    throw new GeneralException();                }                if (!ServiceUtil.isError(serviceResp)) {                    externalShipAmt = (Double) serviceResp.get("shippingEstimateAmount");                } else {                    String errMsg = "Error getting external shipment cost estimate: " + ServiceUtil.getErrorMessage(serviceResp);                     Debug.logError(errMsg, module);                    throw new GeneralException(errMsg);                }            }        }        return externalShipAmt;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -