Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
bailuntec-datacenter
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-datacenter
Commits
373ff44c
Commit
373ff44c
authored
Jan 19, 2021
by
huluobin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
# fee
parent
c1569b3e
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
259 additions
and
20 deletions
+259
-20
EbayFinanceJob.java
...-ebay/src/main/java/com/bailuntec/job/EbayFinanceJob.java
+3
-2
EbayFinanceWriter.java
...ay/src/main/java/com/bailuntec/job/EbayFinanceWriter.java
+33
-0
EbayItem.java
...e-sync-ebay/src/main/java/com/bailuntec/job/EbayItem.java
+26
-0
EbayItemProcessor.java
...ay/src/main/java/com/bailuntec/job/EbayItemProcessor.java
+74
-0
EbayItemReader.java
...-ebay/src/main/java/com/bailuntec/job/EbayItemReader.java
+46
-16
JobConfiguration.java
...bay/src/main/java/com/bailuntec/job/JobConfiguration.java
+75
-0
application-test.yml
...se/base-sync-ebay/src/main/resources/application-test.yml
+2
-2
No files found.
datacenter-job/datacenter-base/base-sync-ebay/src/main/java/com/bailuntec/job/
SampleApp
.java
→
datacenter-job/datacenter-base/base-sync-ebay/src/main/java/com/bailuntec/job/
EbayFinanceJob
.java
View file @
373ff44c
package
com
.
bailuntec
.
job
;
import
org.mybatis.spring.annotation.MapperScan
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
...
...
@@ -18,9 +19,9 @@ import org.springframework.scheduling.annotation.EnableScheduling;
@EnableScheduling
@ComponentScan
(
"com.bailuntec"
)
@EnableFeignClients
(
basePackages
=
{
"com.bailuntec.api"
,
"com.bailuntec.*.api"
})
public
class
SampleApp
{
public
class
EbayFinanceJob
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
SampleApp
.
class
,
args
);
SpringApplication
.
run
(
EbayFinanceJob
.
class
,
args
);
}
}
datacenter-job/datacenter-base/base-sync-ebay/src/main/java/com/bailuntec/job/EbayFinanceWriter.java
0 → 100644
View file @
373ff44c
package
com
.
bailuntec
.
job
;
import
com.bailuntec.application.IDcBaseFinanceEbayService
;
import
com.bailuntec.domain.DcBaseFinanceEbay
;
import
org.springframework.batch.item.ItemWriter
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.lang.NonNull
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2021/1/19 1:21 下午
*/
public
class
EbayFinanceWriter
implements
ItemWriter
<
DcBaseFinanceEbay
>
{
final
IDcBaseFinanceEbayService
dcBaseFinanceEbayService
;
public
EbayFinanceWriter
(
IDcBaseFinanceEbayService
dcBaseFinanceEbayService
)
{
this
.
dcBaseFinanceEbayService
=
dcBaseFinanceEbayService
;
}
@Override
public
void
write
(
@NonNull
List
<?
extends
DcBaseFinanceEbay
>
items
)
throws
Exception
{
dcBaseFinanceEbayService
.
saveBatch
(
items
.
stream
().
map
(
var
->
(
DcBaseFinanceEbay
)
var
).
collect
(
Collectors
.
toList
()));
}
}
datacenter-job/datacenter-base/base-sync-ebay/src/main/java/com/bailuntec/job/EbayItem.java
0 → 100644
View file @
373ff44c
package
com
.
bailuntec
.
job
;
import
com.bailuntec.domain.DcBaseCompanyAccount
;
import
com.ebay.soap.eBLBaseComponents.AccountEntryType
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.time.LocalDateTime
;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2021/1/19 9:47 上午
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
EbayItem
{
private
AccountEntryType
accountEntryType
;
private
DcBaseCompanyAccount
dcBaseCompanyAccount
;
}
datacenter-job/datacenter-base/base-sync-ebay/src/main/java/com/bailuntec/job/EbayItemProcessor.java
0 → 100644
View file @
373ff44c
package
com
.
bailuntec
.
job
;
import
com.bailuntec.api.bailuntec.oa.OaApi
;
import
com.bailuntec.domain.DcBaseCompanyAccount
;
import
com.bailuntec.domain.DcBaseFinanceEbay
;
import
com.bailuntec.domain.DcJobConfig
;
import
com.bailuntec.infrastructure.util.enumerate.CurrencyType
;
import
com.ebay.soap.eBLBaseComponents.AccountEntryType
;
import
org.springframework.batch.item.ItemProcessor
;
import
org.springframework.lang.NonNull
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.time.ZoneId
;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2021/1/19 9:36 上午
*/
public
class
EbayItemProcessor
implements
ItemProcessor
<
EbayItem
,
DcBaseFinanceEbay
>
{
private
DcJobConfig
dcJobConfig
;
private
final
OaApi
oaApi
;
public
EbayItemProcessor
(
DcJobConfig
dcJobConfig
,
OaApi
oaApi
)
{
this
.
dcJobConfig
=
dcJobConfig
;
this
.
oaApi
=
oaApi
;
}
@Override
public
DcBaseFinanceEbay
process
(
@NonNull
EbayItem
ebayItem
)
throws
Exception
{
DcBaseFinanceEbay
dcBaseFinanceEbay
=
new
DcBaseFinanceEbay
();
AccountEntryType
accountEntryType
=
ebayItem
.
getAccountEntryType
();
DcBaseCompanyAccount
dcBaseCompanyAccount
=
ebayItem
.
getDcBaseCompanyAccount
();
ZoneId
zone
=
ZoneId
.
systemDefault
();
LocalDateTime
gmt
=
LocalDateTime
.
ofInstant
(
accountEntryType
.
getDate
().
getTime
().
toInstant
(),
zone
);
dcBaseFinanceEbay
.
setGmtDate
(
gmt
);
dcBaseFinanceEbay
.
setBjDate
(
dcBaseFinanceEbay
.
getGmtDate
().
minusHours
(
15L
));
dcBaseFinanceEbay
.
setAccountEntryType
(
accountEntryType
.
getAccountDetailsEntryType
()
==
null
?
""
:
accountEntryType
.
getAccountDetailsEntryType
().
value
());
dcBaseFinanceEbay
.
setVatPercent
(
accountEntryType
.
getVATPercent
());
dcBaseFinanceEbay
.
setItemId
(
accountEntryType
.
getItemID
());
dcBaseFinanceEbay
.
setTransactionId
(
accountEntryType
.
getTransactionID
());
dcBaseFinanceEbay
.
setOrderLineId
(
accountEntryType
.
getOrderLineItemID
());
dcBaseFinanceEbay
.
setReceivedTopRatedDiscount
(
accountEntryType
.
isReceivedTopRatedDiscount
());
dcBaseFinanceEbay
.
setDescription
(
accountEntryType
.
getDescription
());
dcBaseFinanceEbay
.
setMemo
(
accountEntryType
.
getMemo
());
dcBaseFinanceEbay
.
setRefNumber
(
accountEntryType
.
getRefNumber
());
dcBaseFinanceEbay
.
setTitle
(
accountEntryType
.
getTitle
());
dcBaseFinanceEbay
.
setReportDate
(
dcJobConfig
.
getEndTime
().
toLocalDate
());
if
(
accountEntryType
.
getGrossDetailAmount
()
!=
null
)
{
dcBaseFinanceEbay
.
setGrossAmount
(
BigDecimal
.
valueOf
(
accountEntryType
.
getGrossDetailAmount
().
getValue
()));
dcBaseFinanceEbay
.
setCurrency
(
accountEntryType
.
getGrossDetailAmount
().
getCurrencyID
().
value
());
dcBaseFinanceEbay
.
setExchangeRate
(
oaApi
.
getExchangeRateByCurAndDate
(
dcBaseFinanceEbay
.
getCurrency
(),
CurrencyType
.
CNY
.
value
(),
dcBaseFinanceEbay
.
getBjDate
().
toLocalDate
()).
getRate
());
dcBaseFinanceEbay
.
setExchangeRateUsd
(
oaApi
.
getExchangeRateByCurAndDate
(
dcBaseFinanceEbay
.
getCurrency
(),
CurrencyType
.
USD
.
value
(),
dcBaseFinanceEbay
.
getBjDate
().
toLocalDate
()).
getRate
());
}
if
(
accountEntryType
.
getGrossDetailAmount
()
!=
null
)
{
dcBaseFinanceEbay
.
setNetAmount
(
BigDecimal
.
valueOf
(
accountEntryType
.
getGrossDetailAmount
().
getValue
()));
}
dcBaseFinanceEbay
.
setAccountId
(
dcBaseCompanyAccount
.
getAccountId
());
dcBaseFinanceEbay
.
setCompanyId
(
dcBaseCompanyAccount
.
getCompanyId
());
dcBaseFinanceEbay
.
setBjModified
(
LocalDateTime
.
now
());
return
dcBaseFinanceEbay
;
}
}
datacenter-job/datacenter-base/base-sync-ebay/src/main/java/com/bailuntec/job/EbayItemReader.java
View file @
373ff44c
...
...
@@ -3,6 +3,8 @@ package com.bailuntec.job;
import
com.bailuntec.common.ListUtil
;
import
com.bailuntec.domain.DcBaseCompanyAccount
;
import
com.bailuntec.domain.DcJobConfig
;
import
com.bailuntec.infrastructure.mapper.DcBaseCompanyAccountMapper
;
import
com.bailuntec.infrastructure.mapper.DcJobConfigMapper
;
import
com.ebay.sdk.ApiContext
;
import
com.ebay.sdk.ApiCredential
;
import
com.ebay.sdk.TimeFilter
;
...
...
@@ -12,10 +14,9 @@ import com.ebay.soap.eBLBaseComponents.AccountHistorySelectionCodeType;
import
com.ebay.soap.eBLBaseComponents.DetailLevelCodeType
;
import
com.ebay.soap.eBLBaseComponents.PaginationType
;
import
com.google.common.collect.Lists
;
import
lombok.SneakyThrows
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.batch.item.ItemReader
;
import
org.springframework.batch.item.NonTransientResourceException
;
import
org.springframework.batch.item.ParseException
;
import
org.springframework.batch.item.UnexpectedInputException
;
import
java.time.ZoneId
;
import
java.util.Calendar
;
...
...
@@ -30,7 +31,8 @@ import java.util.List;
* @author robbendev
* @since 2021/1/18 5:23 下午
*/
public
class
EbayItemReader
implements
ItemReader
<
AccountEntryType
>
{
@Slf4j
public
class
EbayItemReader
implements
ItemReader
<
EbayItem
>
{
//剩余账户
private
List
<
DcBaseCompanyAccount
>
dcBaseCompanyAccountList
;
...
...
@@ -38,28 +40,52 @@ public class EbayItemReader implements ItemReader<AccountEntryType> {
private
List
<
AccountEntryType
>
accountEntryTypeList
;
//当前账户
private
DcBaseCompanyAccount
dcBaseCompanyAccount
;
//当前ebay请求接口
private
GetAccountCall
getAccountCall
;
//当前页码
private
Integer
pageNum
;
//配置
private
DcJobConfig
dcJobConfig
;
private
final
DcBaseCompanyAccountMapper
dcBaseCompanyAccountMapper
;
private
final
DcJobConfigMapper
dcJobConfigMapper
;
private
Integer
pageNum
;
private
Integer
pageSize
;
private
DcJobConfig
dcJobConfig
;
@SneakyThrows
public
EbayItemReader
(
DcBaseCompanyAccountMapper
dcBaseCompanyAccountMapper
,
DcJobConfigMapper
dcJobConfigMapper
)
{
this
.
dcBaseCompanyAccountMapper
=
dcBaseCompanyAccountMapper
;
this
.
dcJobConfigMapper
=
dcJobConfigMapper
;
this
.
init
();
}
private
void
init
()
throws
Exception
{
dcBaseCompanyAccountList
=
dcBaseCompanyAccountMapper
.
queryPageEbay
();
dcJobConfig
=
dcJobConfigMapper
.
selectByName
(
"base-sync-finance-ebay-ad"
);
this
.
pageNum
=
dcJobConfig
.
getPageNum
();
this
.
nextAccount
();
}
@Override
public
AccountEntryType
read
()
throws
Exception
,
UnexpectedInputException
,
ParseException
,
NonTransientResource
Exception
{
public
EbayItem
read
()
throws
Exception
{
if
(
ListUtil
.
isNotEmpty
(
accountEntryTypeList
))
{
return
accountEntryTypeList
.
remove
(
0
);
AccountEntryType
accountEntryType
=
accountEntryTypeList
.
remove
(
0
);
log
.
info
(
"读取一条广告费用记录"
);
return
new
EbayItem
(
accountEntryType
,
dcBaseCompanyAccount
);
}
else
{
nextPage
();
if
(
ListUtil
.
isNotEmpty
(
accountEntryTypeList
))
{
return
accountEntryTypeList
.
remove
(
0
);
AccountEntryType
accountEntryType
=
accountEntryTypeList
.
remove
(
0
);
log
.
info
(
"读取一条广告费用记录"
);
return
new
EbayItem
(
accountEntryType
,
dcBaseCompanyAccount
);
}
else
{
nextAccount
();
if
(
ListUtil
.
isNotEmpty
(
accountEntryTypeList
))
{
return
accountEntryTypeList
.
remove
(
0
);
AccountEntryType
accountEntryType
=
accountEntryTypeList
.
remove
(
0
);
log
.
info
(
"读取一条广告费用记录"
);
return
new
EbayItem
(
accountEntryType
,
dcBaseCompanyAccount
);
}
else
{
return
null
;
}
...
...
@@ -73,12 +99,13 @@ public class EbayItemReader implements ItemReader<AccountEntryType> {
refreshPage
();
}
private
void
nextAccount
()
{
private
void
nextAccount
()
throws
Exception
{
this
.
pageNum
=
1
;
if
(
ListUtil
.
isNotEmpty
(
dcBaseCompanyAccountList
))
{
dcBaseCompanyAccount
=
dcBaseCompanyAccountList
.
remove
(
0
);
this
.
refreshAccountCall
();
this
.
refreshPage
();
}
}
...
...
@@ -88,10 +115,11 @@ public class EbayItemReader implements ItemReader<AccountEntryType> {
cred
.
seteBayToken
(
dcBaseCompanyAccount
.
getSoapAuthToken
());
apiContext
.
setApiServerUrl
(
"https://api.ebay.com/wsapi"
);
GetAccountCall
getAccountCall
=
new
GetAccountCall
(
apiContext
);
getAccountCall
=
new
GetAccountCall
(
apiContext
);
//详情类型 返回所有
getAccountCall
.
setDetailLevel
(
new
DetailLevelCodeType
[]{
DetailLevelCodeType
.
RETURN_ALL
});
AccountHistorySelectionCodeType
accountHistorySelectionCodeType
=
AccountHistorySelectionCodeType
.
BETWEEN_SPECIFIED_DATES
;
getAccountCall
.
setViewType
(
accountHistorySelectionCodeType
);
//类型
getAccountCall
.
setViewType
(
AccountHistorySelectionCodeType
.
BETWEEN_SPECIFIED_DATES
);
//开始时间
Calendar
startCal
=
Calendar
.
getInstance
();
...
...
@@ -103,6 +131,8 @@ public class EbayItemReader implements ItemReader<AccountEntryType> {
TimeFilter
timeFilter
=
new
TimeFilter
(
startCal
,
endCal
);
getAccountCall
.
setViewPeriod
(
timeFilter
);
//endCal
getAccountCall
.
setInvoiceDate
(
endCal
);
}
...
...
datacenter-job/datacenter-base/base-sync-ebay/src/main/java/com/bailuntec/job/JobConfiguration.java
0 → 100644
View file @
373ff44c
package
com
.
bailuntec
.
job
;
import
com.bailuntec.domain.DcBaseFinanceEbay
;
import
com.bailuntec.infrastructure.mapper.DcBaseCompanyAccountMapper
;
import
com.bailuntec.infrastructure.mapper.DcJobConfigMapper
;
import
org.springframework.batch.core.Job
;
import
org.springframework.batch.core.Step
;
import
org.springframework.batch.core.configuration.annotation.EnableBatchProcessing
;
import
org.springframework.batch.core.configuration.annotation.JobBuilderFactory
;
import
org.springframework.batch.core.configuration.annotation.StepBuilderFactory
;
import
org.springframework.batch.core.launch.support.RunIdIncrementer
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
javax.batch.api.listener.JobListener
;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2021/1/19 1:37 下午
*/
@Configuration
@EnableBatchProcessing
public
class
JobConfiguration
{
public
final
JobBuilderFactory
jobBuilderFactory
;
public
final
StepBuilderFactory
stepBuilderFactory
;
private
final
EbayItemReader
ebayItemReader
;
private
final
EbayItemProcessor
ebayItemProcessor
;
private
final
EbayFinanceWriter
ebayFinanceWriter
;
private
final
DcBaseCompanyAccountMapper
dcBaseCompanyAccountMapper
;
private
final
DcJobConfigMapper
dcJobConfigMapper
;
@Autowired
public
JobConfiguration
(
JobBuilderFactory
jobBuilderFactory
,
StepBuilderFactory
stepBuilderFactory
,
EbayItemReader
ebayItemReader
,
EbayItemProcessor
ebayItemProcessor
,
EbayFinanceWriter
ebayFinanceWriter
,
JobListener
jobListener
,
DcBaseCompanyAccountMapper
dcBaseCompanyAccountMapper
,
DcJobConfigMapper
dcJobConfigMapper
)
{
this
.
jobBuilderFactory
=
jobBuilderFactory
;
this
.
stepBuilderFactory
=
stepBuilderFactory
;
this
.
ebayItemReader
=
ebayItemReader
;
this
.
ebayItemProcessor
=
ebayItemProcessor
;
this
.
ebayFinanceWriter
=
ebayFinanceWriter
;
this
.
dcBaseCompanyAccountMapper
=
dcBaseCompanyAccountMapper
;
this
.
dcJobConfigMapper
=
dcJobConfigMapper
;
}
@Bean
EbayItemReader
reader
()
{
return
new
EbayItemReader
(
dcBaseCompanyAccountMapper
,
dcJobConfigMapper
);
}
@Bean
public
Job
dataHandleJob
()
{
return
jobBuilderFactory
.
get
(
"dataHandleJob"
)
.
incrementer
(
new
RunIdIncrementer
())
.
start
(
handleDataStep
())
//start是JOB执行的第一个step
// ...
.
build
();
}
@Bean
public
Step
handleDataStep
()
{
return
stepBuilderFactory
.
get
(
"getData"
)
.<
EbayItem
,
DcBaseFinanceEbay
>
chunk
(
100
)
// <输入,输出> 。chunk通俗的讲类似于SQL的commit; 这里表示处理(processor)100条后写入(writer)一次。
.
reader
(
reader
())
//指定ItemReader
.
processor
(
ebayItemProcessor
)
//指定ItemProcessor
.
writer
(
ebayFinanceWriter
)
//指定ItemWriter
.
build
();
}
}
datacenter-job/datacenter-base/base-sync-ebay/src/main/resources/application-test.yml
View file @
373ff44c
spring
:
# 服务名称
application
:
name
:
base-sync-
sample
name
:
base-sync-
ebay
# 数据配置
datasource
:
url
:
jdbc:mysql://gz-cdb-kp7s5i79.sql.tencentcdb.com:61691/bailun_dat
acenter
?serverTimezone=GMT%2B8&characterEncoding=utf-8&rewriteBatchedStatements=true
url
:
jdbc:mysql://gz-cdb-kp7s5i79.sql.tencentcdb.com:61691/bailun_dat
ecenter_test
?serverTimezone=GMT%2B8&characterEncoding=utf-8&rewriteBatchedStatements=true
username
:
root
password
:
'
#7kfnymAM$Y9-Ntf'
driver-class-name
:
com.mysql.jdbc.Driver
...
...
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