百世仓储信息同步接口
作者:Sevattal
博客地址:sevattal.github.io
源码:源码下载
该文章的案例介绍
Chenk Erp系统 与 百世仓储,完成ERP系统中的出入库单、产品的信息同步给百世。而百世会同步出入库状态给Chenk Erp系统的案例。
该篇文章不介绍百世接口具体的使用案例,请根据百世官方接口文档的案例学习。百世仓储的官方文档地址为:https://open.800best.com/login
该篇文章主要是为了学习SpringBoot+MyBatis框架在数据同步接口上的运用,需要有一定的Spring 和MyBatis的基础。当然拿去照班修改服务和mybatis配置文件部分,也可以完成你所需的百世的仓储接口同步。
下面主要介绍代码的结构与包分类的介绍,具体实现请参考压缩包内源代码(源代码中有大量注释,可以参考)。本代码没有使用数据库的存储过程,所以在配置mybatis的xml配置文件会有大量的配置。大多数配置参数,都为以后升级做了基础,所以有很多参数不需要配置。
该代码实现了百世如下接口(客户即本地数据库,百世即远端百世数据库)
百世产品信息的同步(客户-百世),百世入库单的同步(客户-百世),百世入库单状态推送的同步(百世-客户),百世出库单的同步(客户-百世),百世出库单状态推送的同步(百世-客户),百世出入库单取消(客户-百世)
数据的交互,都是以传送Json报文为主。我们传送给百世的Json报文为百世SDK中Client传入的参数,百世SDK中Client会自动将传入的参数转换成json报文并传给百世。而与chenk本地系统的数据交互也是传输Json报文,该Json报文参数,我为了图方便直接写死了,在util包中的ChenkJson中,只有两个Json对象返回True或者False。
在log日志配置方面使用了SpringBoot的默认日志org.slf4j.Logger
下面只介绍源代码的包,resource文件等的路径分配,以及环境的部署。对于代码的理解请详情查看源码包。
简单的环境的配置
开发环境的配置
开源框架为 SpringBoot + Mybatis
IDE工具为 IntelliJ IDEA
百世仓储的SDK地址(也有如何使用该SDK文档)
https://open.800best.com/login
1、开发环境配置
需要将Spring Web这个启动依赖添加上
以上SpringBoot的环境就配置好了
2、将百世的SDK包放到java代码目录下,(百世的SDK代码,是可以直接调用的),包名如下
com.best.javaSdk
3、实现个人的代码包入经为 com.chenk 包
在com.chenk包下面,我按照实现的功能分为如下几个包,除了util包以外,每个包都有一套MVC包(service,mapper,domain,controller…)
包名 接口 controller开放地址
名称 | 作用 | 地址 |
---|---|---|
wmssku | 仓储产品信息同步(SKU) | chenk/wmssku |
twasn | 仓储入库单同步接口 | chenk/twasn |
wmsasn | 仓储入库单状态推送接口 | chenk/wmsasn |
twso | 仓储出库单同步接口 | chenk/twso |
wmsso | 仓储出库单状态推送接口 | chenk/wmsso |
twcancel | 仓储出入库取消接口 | chenk/twcancel |
test | 本地测试包 | |
util | 自制工具包 |
4、resources目录配置
mapper 为各个接口对应的mapper.xml配置文件(由于mapper.xml配置的数据量非常的大,所以在介绍mapper.class的时候代入)
application.properties 为项目的全局配置
best.properties 为百世接口一些配置参数
5、application.properties的配置
# 服务器的端口号
server.port=8082
# 当前web应用的名称
server.servlet.context-path=/chenk
# 项目启动时,默认不会初始化DispatcherServlet
# spring.mvc.servlet.load-on-startup=1
# loggin配置
# 以下配置的是项目根目录为日志的目录,日志名称为wms-jcerp.log
logging.file.path=/
logging.file.name=wms-jcerp.log
#数据库配置
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3308/chenkuserdb21?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username=chenk
spring.datasource.password=123456
#最小链接数
spring.datasource.druid.initial-size=5
#最大链接数
spring.datasource.druid.max-active=20
#最小空闲数
spring.datasource.druid.min-idle=10
#最大等待时长
spring.datasource.druid.max-wait=10
#是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。
#在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。
#spring.datasource.druid.pool-prepared-statements=true
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
#配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
#配置mybaits信息
#spring集成Mybatis环境 #pojo别名扫描包
mybatis.type-aliases-package=com.chenk.domain
#全局解决无效的列类型1111
mybatis.configuration.jdbc-type-for-null=NULL
#手动设置缓存
mybatis.configuration.cache-enabled=false
# 加载Mybatis映射文件
mybatis.mapper-locations=classpath:mapper/**/*Mapper.xml
# mybatis.mapper-locations=classpath:/mapper/wmsSkuNotify/*Mapper.xml,classpath*:/mapper/wmsAsnStatusPush/*Mapper.xml
6、best.properties 百世的参数配置
注:以下的百世的一些参数,需要注册百世账号并获取测试接口才能获得这些参数
# 该配置文件参数均有best提供
# 对应的地址
url=http://openapi.800best.com/api-server/ec/api/process
# 根据实际partnerId
partnerId=3875
# 根据实际partnerKey
partnerKey=OTKPJROQ
# 如果是JSON的数据格式,填JSON
format=JSON
# ProviderCode
providerCode=WT2010143054
# customerCode 客户编码
customerCode=WT2010143054
# wareHouseCode 仓库编码
wareHouseCode=BEST_WH
# projectCode 项目编码
projectCode=P2010143054
# actionType SKU同步接口需要传的参数,但是这个参数暂时没有用到,写在了mapper中
skuactionType=ADD-OW
# skuSize Sku同步产品信息,每次同步的大小,最大为100
skuSize=10
# actionType TwASn同步所填参数
twasnactionType=ADD
# operationFlag 业务标识配送(W-仓,T-配,WT-仓+配,)
twasnoperationFlag=W
# operationTypeCode 业务表示入库
twasnoperationTypeCode=ASN
# actionType TwASn同步所填参数
twsoactionType=ADD
# operationFlag 业务标识配送(W-仓,T-配,WT-仓+配,)
twasooperationFlag=W
# operationTypeCode 订单类型:NORMAL -普通订单/交易订单(B2C) WDO -出库单/非交易订单(B2B),仓储必填
twsooperationTypeCode=WDO
7、pom.xml 依赖的配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.chenk</groupId>
<artifactId>wms-jcerp</artifactId>
<version>1.0-SNAPSHOT</version>
<!--所有springboot工程都必须继承-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--SpringBoot的WEB启动依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis起步依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--@ConfiguaritionProperties的执行器配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--SpringBoot继承Junit测试的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!--fashjson依赖包-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.45</version>
</dependency>
</dependencies>
<!--配置发布成jar前提-->
<!--配置springboot打包jar所需配置-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>