跳到主要内容

物流插件

物流插件体系说明

image-20201207114436309

插件接口

ExpressPlatform

插件方法描述

    /**
* 配置各个存储方案的参数
*
* @return 参数列表
*/
List<ConfigItem> definitionConfigItem();

/**
* 获取插件ID
*
* @return 插件beanId
*/
String getPluginId();

/**
* 获取插件名称
*
* @return 插件名称
*/
String getPluginName();

/**
* 快递平台是否开启
*
* @return 0 不开启 1 开启
*/
Integer getIsOpen();

/**
* 查询物流信息
*
* @param abbreviation 快递公司简称
* @param num 快递单号
* @param config 参数
* @return 物流详细
*/
ExpressDetailVO getExpressDetail(String abbreviation, String num, Map config);

现有物流方式

showapi、快递100

image-20201207114436309

开发新的物流插件

实现插件接口

@Service
public class YourPlugin implements ExpressPlatform {
//其他方法略
}

注意:用@Service注解为spring bean,以便spring ioc识别,将插件扫描加入插件体系。

定义插件id及名字

    @Override
public String getPluginId() {
return "myPluginName";
}
@Override
public String getPluginName() {
return "xx物流平台";
}

注意:需要保持插件id的唯一性,这是插件机制调起插件依据

定义物流配置项

快递平台配置项的目的是定义用户使用物流插件前需要配置的一些物流参数,如公司代码等:

image-20201207114436309

要达到上图的效果,需要后端来配置信息,具体在物流接口的definitionConfigItem中,一个配置项相当于一个ConfigItem对象,如下

    @Override
public List<ConfigItem> definitionConfigItem() {
List<ConfigItem> list = new ArrayList<>();
ConfigItem codeItem = new ConfigItem();
codeItem.setName("code");
codeItem.setText("公司代码");
codeItem.setType("text");

ConfigItem secretItem = new ConfigItem();
secretItem.setName("id");
secretItem.setText("id");
secretItem.setType("text");

ConfigItem typeItem = new ConfigItem();
typeItem.setName("user");
typeItem.setText("用户类型");
typeItem.setType("radio");
//组织用户类型可选项
List<RadioOption> options = new ArrayList<>();
RadioOption radioOption = new RadioOption();
radioOption.setLabel("普通用户");
radioOption.setValue(0);
options.add(radioOption);
radioOption = new RadioOption();
radioOption.setLabel("企业用户");
radioOption.setValue(1);
options.add(radioOption);
typeItem.setOptions(options);

list.add(codeItem);
list.add(secretItem);
list.add(typeItem);
return list;
}

物流配置的获取

用户配置了快递平台的参数(如公司代码等)在快递调起时需要获取到这些参数,可以通过如下方法获取:

 Map  ExpressPlatformManagerImpl.getConfig()

返回值

以快递100插件为例,返回类型Map如下,具体返回Map的值会根据不同的插件返回不同,与定义物流配置项相关

{
"code":"XXXXXXXXX",
"id":"XXXXXXX",
"user":"0"
}

编写查询逻辑

    @Override
public ExpressDetailVO getExpressDetail(String abbreviation, String num, Map config) {
//在这里编写插件的查询逻辑
}

入参:

  • abbreviation

    快递公司简称,比如shunfeng,zt

  • num

    快递单号

  • config

    物流参数获取的得到的map值

返回值

ExpressDetailVO对象,信息如下:

public class ExpressDetailVO {

/**
* 快递名称
*/
private String name;
/**
* 快递单号
*/
private String courierNum;
/**
* 物流详细信息
*/
private List<Map> data;

...getter and setter
}