Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
bailuntec-api
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
huluobin
bailuntec-api
Commits
3ade14fe
Commit
3ade14fe
authored
Jan 14, 2021
by
huluobin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
# 百伦api README.md 更新
parent
824a8392
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
341 additions
and
42 deletions
+341
-42
Jenkinsfile
Jenkinsfile
+31
-0
README.md
README.md
+143
-16
Config.java
src/main/java/com/bailuntec/api/Config.java
+8
-14
OaApi.java
src/main/java/com/bailuntec/api/bailuntec/oa/OaApi.java
+17
-3
ExchangeRate.java
...com/bailuntec/api/bailuntec/oa/response/ExchangeRate.java
+4
-1
SsoApi.java
src/main/java/com/bailuntec/api/bailuntec/sso/SsoApi.java
+2
-2
BltResponseUtil.java
src/main/java/com/bailuntec/api/common/BltResponseUtil.java
+22
-0
FeignUtil.java
src/main/java/com/bailuntec/api/common/FeignUtil.java
+27
-0
TestApplication.java
src/test/java/com/bailuntec/api/TestApplication.java
+0
-1
OaApiTest.java
src/test/java/com/bailuntec/api/bailuntec/oa/OaApiTest.java
+7
-5
OaApiTestNoSpring.java
...ava/com/bailuntec/api/bailuntec/oa/OaApiTestNoSpring.java
+48
-0
PamsApiTestNoSpring.java
...com/bailuntec/api/bailuntec/pams/PamsApiTestNoSpring.java
+32
-0
No files found.
Jenkinsfile
0 → 100644
View file @
3ade14fe
pipeline
{
agent
any
stages
{
stage
(
'检出'
)
{
steps
{
checkout
([
$class
:
'GitSCM'
,
branches
:
[[
name:
GIT_BUILD_REF
]],
userRemoteConfigs:
[[
url
:
GIT_REPO_URL
,
credentialsId:
CREDENTIALS_ID
]]])
}
}
stage
(
'编译'
)
{
steps
{
sh
'mvn clean package'
}
}
stage
(
'推送到 CODING Maven 制品库'
)
{
steps
{
echo
'发布中...'
sh
'mvn deploy -DskipTests'
echo
'发布完成.'
}
}
}
environment
{
CODING_MAVEN_REPO_ID
=
"${CCI_CURRENT_TEAM}-${PROJECT_NAME}-${MAVEN_REPO_NAME}"
CODING_MAVEN_REPO_URL
=
"${CCI_CURRENT_WEB_PROTOCOL}://${CCI_CURRENT_TEAM}-maven.pkg.${CCI_CURRENT_DOMAIN}/repository/${PROJECT_NAME}/${MAVEN_REPO_NAME}/"
}
}
README.md
View file @
3ade14fe
### 百伦api
## 百伦api
封装所有Java项目需要用到的第三方服务和内部异构(.NET)服务的接口调用
封装所有对外的http接口成方法调用,以二方库的形式提供能力,不用在每个项目重复写。
### 如何使用
每个方法都要经过单元测试
-
继承parent
```
xml
<parent>
<groupId>
com.bailuntec
</groupId>
<artifactId>
bailuntec-parent
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</parent>
```
#### bailuntec
-
添加依赖
百伦内部 .net提供的api
```
xml
<dependency>
<groupId>
com.bailuntec
</groupId>
<artifactId>
bailuntec-api
</artifactId>
</dependency>
```
##### oms订单系统
-
非spring环境
订单系统开发api
```
java
#####
@Slf4j
class
PamsApiTestNoSpring
{
#### amazon
亚马逊开放api
#### ebay
@Test
ebay开放api
void
getAccountToken
()
{
PamsApi
pamsApi
=
FeignUtil
.
getInstance
(
PamsApi
.
class
);
PamsResult
<
List
<
GetAccountTokenResp
>>
result
=
pamsApi
.
getAccountToken
();
log
.
info
(
JsonUtilByFsJson
.
beanToJson
(
result
));
}
}
```
-
springboot环境
```
@ActiveProfiles(value = "test")
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApplication.class)
class PamsApiTest {
@Resource
PamsApi pamsApi;
@Test
void getAccountToken() {
PamsResult<List<GetAccountTokenResp>> result = pamsApi.getAccountToken();
log.info(JsonUtilByFsJson.beanToJson(result));
}
}
```
### 技术栈
-
pring-cloud-starter-openfeign 通过feign封装Api,以二方库形式提供能力,消费方通过接口方法调用
-
spring-cloud-starter-netflix-hystrix hystrix 提供熔断能力
-
jackson spring默认jackson作为序列化框架
### 项目目录
```
└── com
└── bailuntec
└── api
├── amazon //亚马逊开放api feign抽象
├── bailuntec //百伦内部api调用feign抽象
│ ├── crm //crm系统接口
│ ├── cw //财务系统接口
│ ├── fee //费用系统接口
│ ├── mj //美甲系统
│ ├── mjcg //美甲采购
│ ├── oa //oa系统接口
│ ├── oms //订单系统接口
│ ├── pams //pams
│ ├── pps //刊登系统接口
│ ├── purchase //采购系统接口
│ ├── sso //单点登录接口
│ ├── wms //库存接口
│ └── www //百伦其他
├── config //系统配置
├── ebay //ebay开放api
└── wish //
```
### 如何开发
### 如何开发
#### 包命名
#### 创建feign接口
com.xxx.request: xxx是公司名,该包存放方法入参定义。类命名为
**
Req
-
创建SpringMvc风格的接口
com.xxx.request: xxx是公司名,该包存放方法出参定义。类命名为
**
Resp
-
注解@FeignClient 指定name 和地址url
com.xxx.api: xxx是公司名,该包存放方法定义。~~
-
@GetMapping @PostMapping 用法同springMvc
-
@RequestBody @RequestParam @PathVariable 用法同springMvc
#### 熔断
-
创建熔断类继承feign接口实现熔断逻辑
-
熔断配置 @FeignClient fallback = 熔断类
```
java
@FeignClient
(
name
=
"sso"
,
url
=
"http://sso.bailuntec.com/"
,
fallback
=
SsoApi
.
SsoApiFallback
.
class
)
public
interface
SsoApi
{
/**
* <p>调用公司信息接口</p>
*
* @return 公司信息
*/
@GetMapping
(
"/GetCompanys"
)
SsoResult
<
List
<
GetCompanysResp
>>
getCompanys
();
/**
* <p>调用公司员工信息接口</p>
*
* @return 公司员工信息
*/
@GetMapping
(
"/GetUserByCompany"
)
SsoResult
<
GetUserByCompanyResp
>
getUserByCompany
();
@Component
class
SsoApiFallback
implements
SsoApi
{
@Override
public
SsoResult
<
List
<
GetCompanysResp
>>
getCompanys
()
{
return
new
SsoResult
<>();
}
@Override
public
SsoResult
<
GetUserByCompanyResp
>
getUserByCompany
()
{
return
new
SsoResult
<>();
}
}
}
```
#### 命名规范
-
入参定义:方法名+Req 。
-
出参定义:方法名+Resp。
-
api定义接口按照项目接口分类
#### 注意事项
-
@RequestParam 需要显示指定value
-
有一些三方服务的api返回的不是规范json不能直接序列化 需要用string接受然后再代码转换。
-
该类库只是对异构内部服务(主要是.Net)和三方接口的外部接口调用抽象,所以不存在feign的服务调用负载等,
统一通过@FeignClient的url参数直接指定调用地址。
#### 待扩展
kubernetes 云原生扩展
### 参考文档
[
open feign官方文档
](
https://docs.spring.io/spring-cloud-openfeign/docs/2.2.5.RELEASE/reference/html/
)
src/main/java/com/bailuntec/api/Config.java
View file @
3ade14fe
...
@@ -9,7 +9,6 @@ import org.springframework.cloud.openfeign.FeignFormatterRegistrar;
...
@@ -9,7 +9,6 @@ import org.springframework.cloud.openfeign.FeignFormatterRegistrar;
import
org.springframework.cloud.openfeign.support.SpringDecoder
;
import
org.springframework.cloud.openfeign.support.SpringDecoder
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.format.FormatterRegistry
;
import
org.springframework.format.datetime.standard.DateTimeFormatterRegistrar
;
import
org.springframework.format.datetime.standard.DateTimeFormatterRegistrar
;
import
java.time.format.DateTimeFormatter
;
import
java.time.format.DateTimeFormatter
;
...
@@ -45,19 +44,14 @@ public class Config {
...
@@ -45,19 +44,14 @@ public class Config {
@Bean
@Bean
public
FeignFormatterRegistrar
feignFormatterRegistrar
()
{
public
FeignFormatterRegistrar
feignFormatterRegistrar
()
{
return
new
FeignFormatterRegistrar
()
{
return
formatterRegistry
->
{
DateTimeFormatterRegistrar
registrar
=
@Override
new
DateTimeFormatterRegistrar
();
public
void
registerFormatters
(
registrar
.
setUseIsoFormat
(
false
);
FormatterRegistry
formatterRegistry
)
{
registrar
.
setDateFormatter
(
dateFormatter
);
DateTimeFormatterRegistrar
registrar
=
registrar
.
setTimeFormatter
(
timeFormatter
);
new
DateTimeFormatterRegistrar
();
registrar
.
setDateTimeFormatter
(
dateTimeFormatter
);
registrar
.
setUseIsoFormat
(
false
);
registrar
.
registerFormatters
(
formatterRegistry
);
registrar
.
setDateFormatter
(
dateFormatter
);
registrar
.
setTimeFormatter
(
timeFormatter
);
registrar
.
setDateTimeFormatter
(
dateTimeFormatter
);
registrar
.
registerFormatters
(
formatterRegistry
);
}
};
};
}
}
}
}
src/main/java/com/bailuntec/api/bailuntec/oa/OaApi.java
View file @
3ade14fe
package
com
.
bailuntec
.
api
.
bailuntec
.
oa
;
package
com
.
bailuntec
.
api
.
bailuntec
.
oa
;
import
com.bailuntec.api.bailuntec.oa.response.ExchangeRate
;
import
com.bailuntec.api.bailuntec.oa.response.OaDepartmentResp
;
import
com.bailuntec.api.bailuntec.oa.response.OaDepartmentResp
;
import
com.bailuntec.api.bailuntec.oa.response.OaUserResp
;
import
com.bailuntec.api.bailuntec.oa.response.OaUserResp
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.cloud.openfeign.FeignClient
;
...
@@ -17,7 +16,7 @@ import java.util.List;
...
@@ -17,7 +16,7 @@ import java.util.List;
* @author robbendev
* @author robbendev
* @since 2020/10/12 2:09 下午
* @since 2020/10/12 2:09 下午
*/
*/
@FeignClient
(
name
=
"oa"
,
url
=
"oa.bailuntec.com"
)
@FeignClient
(
name
=
"oa"
,
url
=
"
http://
oa.bailuntec.com"
)
public
interface
OaApi
{
public
interface
OaApi
{
/**
/**
...
@@ -42,7 +41,22 @@ public interface OaApi {
...
@@ -42,7 +41,22 @@ public interface OaApi {
List
<
OaDepartmentResp
>
getDeparmentList
();
List
<
OaDepartmentResp
>
getDeparmentList
();
/**
* 获取汇率
*
* @param fromCur 源币种
* @param toCur 目标币种
* @return str 需要手动转换成{@link com.bailuntec.api.bailuntec.oa.response.ExchangeRate}
* <p>
* <p>
* 转换代码
* <code>
* String res = oaApi.getExchangeRate("CNY", "CNY");
* String response = BltResponseUtil.filterColonAndBackslash(res);
* ExchangeRate exchangeRate = JsonUtilByFsJson.jsonToBean(response, ExchangeRate.class);
* </code>
*/
@GetMapping
(
"/api/ExchangeRate/GetExchangeRate"
)
@GetMapping
(
"/api/ExchangeRate/GetExchangeRate"
)
String
getExchangeRate
(
@RequestParam
(
"fromCur"
)
String
fromCur
,
String
getExchangeRate
(
@RequestParam
(
"fromCur"
)
String
fromCur
,
@RequestParam
(
"toCur"
)
String
toCur
);
@RequestParam
(
"toCur"
)
String
toCur
);
}
}
src/main/java/com/bailuntec/api/bailuntec/oa/response/ExchangeRate.java
View file @
3ade14fe
package
com
.
bailuntec
.
api
.
bailuntec
.
oa
.
response
;
package
com
.
bailuntec
.
api
.
bailuntec
.
oa
.
response
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
lombok.Data
;
import
lombok.Data
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
/**
/**
* <p>
* <p>
...
@@ -23,5 +23,8 @@ public class ExchangeRate {
...
@@ -23,5 +23,8 @@ public class ExchangeRate {
@JsonProperty
(
"ToCurName"
)
@JsonProperty
(
"ToCurName"
)
private
String
toCurName
;
private
String
toCurName
;
@JsonProperty
(
"CreateTime"
)
private
LocalDateTime
createTime
;
}
}
src/main/java/com/bailuntec/api/bailuntec/sso/SsoApi.java
View file @
3ade14fe
...
@@ -41,12 +41,12 @@ public interface SsoApi {
...
@@ -41,12 +41,12 @@ public interface SsoApi {
@Override
@Override
public
SsoResult
<
List
<
GetCompanysResp
>>
getCompanys
()
{
public
SsoResult
<
List
<
GetCompanysResp
>>
getCompanys
()
{
return
n
ull
;
return
n
ew
SsoResult
<>()
;
}
}
@Override
@Override
public
SsoResult
<
GetUserByCompanyResp
>
getUserByCompany
()
{
public
SsoResult
<
GetUserByCompanyResp
>
getUserByCompany
()
{
return
n
ull
;
return
n
ew
SsoResult
<>()
;
}
}
}
}
}
}
src/main/java/com/bailuntec/api/common/BltResponseUtil.java
0 → 100644
View file @
3ade14fe
package
com
.
bailuntec
.
api
.
common
;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2021/1/14 11:20 上午
*/
public
class
BltResponseUtil
{
/**
* 去除首尾冒号和反斜杠
*
* @param res str
*/
public
static
String
filterColonAndBackslash
(
String
res
)
{
return
res
.
replaceAll
(
"\\\\"
,
""
)
.
replaceAll
(
"^\"*|\"*$"
,
""
);
}
}
src/main/java/com/bailuntec/api/common/FeignUtil.java
0 → 100644
View file @
3ade14fe
package
com
.
bailuntec
.
api
.
common
;
import
com.bailuntec.api.Config
;
import
feign.Feign
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.cloud.openfeign.support.SpringMvcContract
;
import
org.springframework.lang.NonNull
;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2021/1/14 11:31 上午
*/
public
class
FeignUtil
{
public
static
<
T
>
T
getInstance
(
@NonNull
Class
<
T
>
FeignApiType
)
{
Config
config
=
new
Config
();
return
Feign
.
builder
()
.
decoder
(
config
.
feignDecoder
())
.
contract
(
new
SpringMvcContract
())
.
target
(
FeignApiType
,
FeignApiType
.
getAnnotation
(
FeignClient
.
class
).
url
());
}
}
src/test/java/com/bailuntec/api/TestApplication.java
View file @
3ade14fe
package
com
.
bailuntec
.
api
;
package
com
.
bailuntec
.
api
;
import
org.mybatis.spring.annotation.MapperScan
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
...
...
src/test/java/com/bailuntec/api/bailuntec/oa/OaApiTest.java
View file @
3ade14fe
...
@@ -3,6 +3,7 @@ package com.bailuntec.api.bailuntec.oa;
...
@@ -3,6 +3,7 @@ package com.bailuntec.api.bailuntec.oa;
import
com.bailuntec.api.TestApplication
;
import
com.bailuntec.api.TestApplication
;
import
com.bailuntec.api.amazon.api.JsonUtilByFsJson
;
import
com.bailuntec.api.amazon.api.JsonUtilByFsJson
;
import
com.bailuntec.api.bailuntec.oa.response.ExchangeRate
;
import
com.bailuntec.api.bailuntec.oa.response.ExchangeRate
;
import
com.bailuntec.api.common.BltResponseUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.junit.jupiter.api.Test
;
import
org.junit.jupiter.api.Test
;
import
org.junit.runner.RunWith
;
import
org.junit.runner.RunWith
;
...
@@ -34,14 +35,15 @@ class OaApiTest {
...
@@ -34,14 +35,15 @@ class OaApiTest {
}
}
@Test
@Test
void
getDeparmentList
()
{
void
getDepar
t
mentList
()
{
}
}
@Test
@Test
void
getExchangeRate
()
{
void
getExchangeRate
()
{
String
exchangeRate
=
oaApi
.
getExchangeRate
(
"CNY"
,
"CNY"
);
String
res
=
oaApi
.
getExchangeRate
(
"CNY"
,
"CNY"
);
log
.
info
(
exchangeRate
);
String
response
=
BltResponseUtil
.
filterColonAndBackslash
(
res
);
ExchangeRate
exchangeRate1
=
JsonUtilByFsJson
.
jsonToBean
(
exchangeRate
,
ExchangeRate
.
class
);
log
.
info
(
response
);
log
.
info
(
exchangeRate1
.
toString
());
ExchangeRate
exchangeRate
=
JsonUtilByFsJson
.
jsonToBean
(
response
,
ExchangeRate
.
class
);
log
.
info
(
exchangeRate
.
toString
());
}
}
}
}
src/test/java/com/bailuntec/api/bailuntec/oa/OaApiTestNoSpring.java
0 → 100644
View file @
3ade14fe
package
com
.
bailuntec
.
api
.
bailuntec
.
oa
;
import
com.bailuntec.api.Config
;
import
com.bailuntec.api.amazon.api.JsonUtilByFsJson
;
import
com.bailuntec.api.bailuntec.oa.response.ExchangeRate
;
import
com.bailuntec.api.common.BltResponseUtil
;
import
feign.Feign
;
import
lombok.extern.slf4j.Slf4j
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.cloud.openfeign.support.SpringMvcContract
;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020/10/29 6:04 下午
*/
@Slf4j
class
OaApiTestNoSpring
{
@Test
void
getAllUser
()
{
}
@Test
void
getDeparmentList
()
{
}
@Test
void
getExchangeRate
()
{
Config
config
=
new
Config
();
OaApi
oaApi
=
Feign
.
builder
()
.
decoder
(
config
.
feignDecoder
())
.
contract
(
new
SpringMvcContract
())
.
target
(
OaApi
.
class
,
OaApi
.
class
.
getAnnotation
(
FeignClient
.
class
).
url
());
String
exchangeRate
=
oaApi
.
getExchangeRate
(
"CNY"
,
"CNY"
);
log
.
info
(
exchangeRate
);
ExchangeRate
exchangeRate1
=
JsonUtilByFsJson
.
jsonToBean
(
BltResponseUtil
.
filterColonAndBackslash
(
exchangeRate
),
ExchangeRate
.
class
);
log
.
info
(
exchangeRate1
.
toString
());
}
}
src/test/java/com/bailuntec/api/bailuntec/pams/PamsApiTestNoSpring.java
0 → 100644
View file @
3ade14fe
package
com
.
bailuntec
.
api
.
bailuntec
.
pams
;
import
com.bailuntec.api.amazon.api.JsonUtilByFsJson
;
import
com.bailuntec.api.bailuntec.pams.response.GetAccountTokenResp
;
import
com.bailuntec.api.bailuntec.pams.response.PamsResult
;
import
com.bailuntec.api.common.FeignUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.junit.jupiter.api.Test
;
import
javax.annotation.Resource
;
import
java.util.List
;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020/10/28 5:37 下午
*/
@Slf4j
class
PamsApiTestNoSpring
{
@Test
void
getAccountToken
()
{
PamsApi
pamsApi
=
FeignUtil
.
getInstance
(
PamsApi
.
class
);
PamsResult
<
List
<
GetAccountTokenResp
>>
result
=
pamsApi
.
getAccountToken
();
log
.
info
(
JsonUtilByFsJson
.
beanToJson
(
result
));
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment