【购物商城】限制配送区域在加入购物车时提示扩展开发指南原创
金蝶云社区-5240
5240
8人赞赏了该文章 318次浏览 未经作者许可,禁止转载编辑于2023年07月05日 09:47:21
  1. 目标接口

    查询商品在特定区域是否可售:

    https://bizapi.jd.com/api/product/checkAreaLimit

    入参:

     参数名称

    类型

    是否必填

    描述

    token

    String           

    授权时获取的access token

    skuIds

    String           

    商品编号,支持批量,以’,’分隔  (最高支持100个商品)

    province

    String           

    京东一级地址编号

    city

    String           

    京东二级地址编号

    county

    String           

    京东三级地址编号

    town

    String           

    京东四级地址编号(如果该地区有四级地址,则必须传递四级地址,没有四级地址则传0)

    出参:



     参数名称

    类型

    非空

    描述

    success

    boolean

    状态码(true;false)

    resultMessage

    String

    异常信息提示,(成功时是””)

    resultCode

    String

    异常代码KEY(0000:正常;)

    result

    Json数组

    返回购买限制数据

     

    参数名称 result说明:

     参数名称

    类型

    非空

    描述

    skuId

    Long

    商品编码

    isAreaRestrict

    boolean

    true 或空值代表区域受限 false 区域不受限

        对应集成对象为SRM_JD_GOODS_checkAreaLimit。


    2.电商接口集成对象的调用

注册扩展插件(图为详情页面插件注册,搜索同样)

image.png

重写详情页面插件beforeDoOperation方法,校验商品详情加入购物车的配送区域限制,参考代码下:

public class MalNewProductDetailPluginExt  extends AbstractFormPlugin {
    @Override
    public void beforeDoOperation(BeforeDoOperationEventArgs args) {
        super.beforeDoOperation(args);
        String operateKey = ((AbstractOperate) args.getSource()).getOperateKey();
        if(operateKey.equals("addcart")){
            String source = this.getPageCache().get("source");
            if(EcPlatformEnum.ECPLATFORM_JD.getVal().equals(source)){
                //获取当前登录用的京东地址长编码
                String[] addr = AddressUtil.getNumberArr(Long.valueOf(String.valueOf(this.getModel().getValue("admindivisionfield")))
                        , EcPlatformEnum.ECPLATFORM_JD.getVal());
                Map<String, Object> params = new HashMap<>();
                params.put("provinceId", addr[MalPlaceOrderConstant.PROVINCE_INDEX]);// 一级地址
                params.put("cityId", addr[MalPlaceOrderConstant.CITY_INDEX]);// 二级地址
                params.put("countyId", addr[MalPlaceOrderConstant.COUNTY_INDEX]);// 三级地址
                if (addr.length > 3) {
                    params.put("townId", addr[MalPlaceOrderConstant.TOWN_INDEX]);// 四级地址
                } else {
                    // 四级地址编码:收货人乡镇地址编码(如果该地区有四级地址,则必须传递四级地址,没有四级地址则传0)
                    params.put("townId", "0");// 四级地址
                }
                //获取商品编码
                params.put("skuIds", Collections.singletonList(this.getModel().getValue("number")));
                //调用接口
                Map<String, Object> invokeRes = (Map<String, Object>) ApiAccessor.invoke(JdApiParser.getJdApiNumber(EcPlatformEnum.ECPLATFORM_JD.getVal()
                        , ApiConstant.SRM_JD_GOODS_CHECKAREALIMIT), params);
                if(invokeRes != null && (Boolean) invokeRes.get("success")){
                    List<Map<String, Object>> result = (List<Map<String, Object>>) invokeRes.get("result");
                    if(!ObjectUtils.isEmpty(result)){
                        if(!"1".equals(result.get(0).get("state"))){
                            this.getView().showErrorNotification("当前配送区域所限,请修改配送地址。");
                            args.setCancel(true);
                        }
                    }
                }
            }
        }
    }
}



重写搜索页面beforeDoOperation方法,校验搜索页面加入购物车的配送区域限制,参考代码下:

public class MalSearchNewListPluginExt extends AbstractFormPlugin {
    @Override
    public void registerListener(EventObject e) {
        super.registerListener(e);
        Button addCartBtn = this.getControl("add_cart_btn");
        addCartBtn.addClickListener(this);
    }

    @Override
    public void beforeClick(BeforeClickEvent evt) {
        super.beforeClick(evt);
        if(evt.getSource() instanceof  Button && "add_cart_btn".equals(((Button)evt.getSource()).getKey())){
            EntryGrid grid = this.getView().getControl("search_entryentity");
            this.getModel().getValue("productgoods_source");
            int[] selectRows = grid.getSelectRows();
            String source = (String) this.getModel().getValue("productgoods_source", selectRows[0]);
            if(EcPlatformEnum.ECPLATFORM_JD.getVal().equals(source)){
                String sku = (String) this.getModel().getValue("searchgoods_sku", selectRows[0]);
                //获取当前登录用的京东地址长编码
                String[] addr = AddressUtil.getNumberArr(MalAddressUtil.getDefaultAdmindivisionId()
                        , EcPlatformEnum.ECPLATFORM_JD.getVal());
                Map<String, Object> params = new HashMap<>();
                params.put("provinceId", addr[MalPlaceOrderConstant.PROVINCE_INDEX]);// 一级地址
                params.put("cityId", addr[MalPlaceOrderConstant.CITY_INDEX]);// 二级地址
                params.put("countyId", addr[MalPlaceOrderConstant.COUNTY_INDEX]);// 三级地址
                if (addr.length > 3) {
                    params.put("townId", addr[MalPlaceOrderConstant.TOWN_INDEX]);// 四级地址
                } else {
                    // 四级地址编码:收货人乡镇地址编码(如果该地区有四级地址,则必须传递四级地址,没有四级地址则传0)
                    params.put("townId", "0");// 四级地址
                }
                //获取商品编码
                params.put("skuIds", Collections.singletonList(sku));
                //调用接口
                Map<String, Object> invokeRes = (Map<String, Object>) ApiAccessor.invoke(JdApiParser.getJdApiNumber(EcPlatformEnum.ECPLATFORM_JD.getVal()
                        , ApiConstant.SRM_JD_GOODS_CHECKAREALIMIT), params);
                if(invokeRes != null && (Boolean) invokeRes.get("success")){
                    List<Map<String, Object>> result = (List<Map<String, Object>>) invokeRes.get("result");
                    if(!ObjectUtils.isEmpty(result)){
                        if(!"1".equals(result.get(0).get("state"))){
                            this.getView().showErrorNotification("当前配送区域所限,请修改配送地址。");
                            evt.setCancel(true);
                        }
                    }
                }
            }
        }
    }
}


赞 8