Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
dc-java
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
bltdc
dc-java
Commits
3c7c9981
Commit
3c7c9981
authored
Jul 06, 2019
by
wutong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
销售额不分平台计算, 统一改为 销售额=产品金额+运费-促销; 新增了部分注释
parent
05d36f6d
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
54 additions
and
50 deletions
+54
-50
OrderSyncJob.java
...s-order/src/main/java/com/bailuntec/job/OrderSyncJob.java
+54
-50
No files found.
data-base/base-sync-oms-order/src/main/java/com/bailuntec/job/OrderSyncJob.java
View file @
3c7c9981
...
...
@@ -103,7 +103,7 @@ public class OrderSyncJob extends PointJob {
*/
public
void
analyseOmsOrder
(
List
<
OmsResult
>
bailunOrderList
)
{
for
(
OmsResult
omsResult
:
bailunOrderList
)
{
log
.
warn
(
omsResult
.
getOriginOrderId
());
log
.
warn
(
omsResult
.
getOriginOrderId
());
//打印订单号, 出了问题可以快速定位到订单, 再单独跑测试可以排查出问题
if
(
omsResult
!=
null
&&
omsResult
.
getBailunPaymentStatus
()
!=
null
&&
omsResult
.
getBailunPaymentStatus
().
equals
(
Constant
.
PAYMENT_STATUS
))
{
DcBaseOmsOrder
dcBaseOmsOrder
=
new
DcBaseOmsOrder
();
assignmentOrderInfo
(
omsResult
,
dcBaseOmsOrder
);
...
...
@@ -116,27 +116,22 @@ public class OrderSyncJob extends PointJob {
listOrderExceptions
(
omsResult
,
dcBaseOmsOrder
);
//获取汇率
getExchangeRate
(
omsResult
,
dcBaseOmsOrder
);
//遍历平台SKU拿销售额
BigDecimal
totalAmountSale
=
BigDecimal
.
ZERO
;
if
(
omsResult
.
getPlatformSku
()
!=
null
&&
omsResult
.
getPlatformSku
().
size
()
>
0
)
{
for
(
PlatformSku
platformSku
:
omsResult
.
getPlatformSku
())
{
if
(
platformSku
.
getPlatformSkuUnitPrice
()
!=
null
&&
platformSku
.
getPlatformSkuUnitPrice
().
getAmount
()
!=
null
&&
platformSku
.
getPlatformSkuQuantityOrdered
()
!=
null
)
{
BigDecimal
platformSkuUnitPrice
=
platformSku
.
getPlatformSkuUnitPrice
().
getAmount
().
compareTo
(
BigDecimal
.
ZERO
)
==
1
?
platformSku
.
getPlatformSkuUnitPrice
().
getAmount
()
:
BigDecimal
.
ZERO
;
totalAmountSale
=
platformSkuUnitPrice
.
multiply
(
BigDecimal
.
valueOf
(
platformSku
.
getPlatformSkuQuantityOrdered
())).
add
(
totalAmountSale
).
setScale
(
2
,
RoundingMode
.
HALF_EVEN
);
}
}
}
//这个MAP, key放仓库. value放线物流路
HashMap
<
String
,
Logistics
>
logisticsHashMap
=
new
HashMap
<>();
//由LMS线路计算的物流费
BigDecimal
totalCostLogistics
=
getTotalCostLogistics
(
omsResult
.
getLogisticsItems
(),
logisticsHashMap
);
//如果订单中存在百伦SKU, 去拿一些放在SKU里的信息
Map
<
String
,
BailunSkuStructure
>
bailunSkuInfoMap
=
new
HashMap
<>();
//将每个SKU的头程费汇总为总头程费
BigDecimal
totalCostFirst
=
BigDecimal
.
ZERO
;
/**
* 遍历所有百伦SKU(omsResult.getBailunSku())
* 拿到SKU累计信息, 自发货运费按SKU重量比重取
*/
if
(
omsResult
.
getBailunSku
()
!=
null
&&
omsResult
.
getBailunSku
().
size
()
>
0
)
{
/*
* 遍历
所有百伦SKU(omsResult.getBailunSku())
*
拿到SKU累计信息, 自发货运费按SKU重量比重取
* 遍历
SKU,先拿到SKU部分数据的累计值
*
比如累计数量,累计重量
*/
BailunSkuCumulative
bailunSkuCumulative
=
getBailunSkuCumulative
(
omsResult
);
//SKU总个数
...
...
@@ -189,7 +184,7 @@ public class OrderSyncJob extends PointJob {
dcBaseOmsSku
.
setHasDelete
(
false
);
dcBaseOmsSku
.
setHasScalp
(
dcBaseOmsOrder
.
getHasScalp
());
/*
* 赋值,
初始值
避免null
* 赋值,
给初始值是为了
避免null
*/
assignmentSkuInfo
(
omsResult
,
dcBaseOmsOrder
,
dcBaseOmsSku
,
bailunSku
,
dcBaseWarehouse
,
logisticsHashMap
);
if
(
PlatformType
.
FBA
.
value
().
equals
(
omsResult
.
getPlatformType
().
toUpperCase
()))
{
...
...
@@ -213,30 +208,15 @@ public class OrderSyncJob extends PointJob {
* 配货单处理,
*/
handPickingOrder
(
dcBaseOmsOrder
,
omsResult
,
bailunSkuInfoMap
);
/*
/*
*
* Order费用处理
* 费用计算都从这里开始
*/
//促销费
dcBaseOmsOrder
.
setCostPromotion
((
omsResult
.
getOrderCharge
().
getCostPromotion
()
!=
null
&&
omsResult
.
getOrderCharge
().
getCostPromotion
().
getAmount
()
!=
null
)
?
omsResult
.
getOrderCharge
().
getCostPromotion
().
getAmount
()
:
BigDecimal
.
ZERO
);
//手工单销售额 = 平台SKU产品总售价 - 促销费, 手工单没有SKU售价, 只能拿订单收入
if
(
StringUtils
.
isNotBlank
(
omsResult
.
getPlatformOrderType
())
&&
omsResult
.
getPlatformOrderType
().
equals
(
Constant
.
MANUAL_ORDER
)
&&
omsResult
.
getOrderCharge
().
getAmountTotal
()
!=
null
)
{
totalAmountSale
=
omsResult
.
getOrderCharge
().
getAmountTotal
().
getAmount
();
dcBaseOmsOrder
.
setAmountProduct
(
omsResult
.
getOrderCharge
().
getAmountTotal
().
getAmount
());
}
//销售额
//如果是速卖通,销售额直接取, 其他平台还是算
if
(
omsResult
.
getPlatformType
().
toUpperCase
().
equals
(
PlatformType
.
Aliexpress
.
value
()))
{
dcBaseOmsOrder
.
setAmountSales
(
omsResult
.
getOrderCharge
().
getAmountTotal
().
getAmount
());
}
else
{
dcBaseOmsOrder
.
setAmountSales
(
totalAmountSale
//商品收入
.
add
((
omsResult
.
getPlatformType
().
toUpperCase
().
equals
(
PlatformType
.
FBA
.
value
())?
BigDecimal
.
ZERO
:
dcBaseOmsOrder
.
getAmountShipping
()))
//运费收入, FBA不算
.
subtract
(
dcBaseOmsOrder
.
getAmountGiftWrap
())
//礼品包装
.
subtract
(
dcBaseOmsOrder
.
getCostPromotion
()));
//促销费
}
//平台渠道费
dcBaseOmsOrder
.
setCostPlatformFee
((
omsResult
.
getOrderCharge
().
getCostPlatformFee
()
!=
null
&&
omsResult
.
getOrderCharge
().
getCostPlatformFee
().
getAmount
()
!=
null
)
?
omsResult
.
getOrderCharge
().
getCostPlatformFee
().
getAmount
()
:
BigDecimal
.
ZERO
);
//平台渠道费人民币 - Ebay的平台费币种不一样
BigDecimal
productAmount
=
dcBaseOmsOrder
.
getAmountProduct
().
compareTo
(
BigDecimal
.
ZERO
)
==
1
?
dcBaseOmsOrder
.
getAmountProduct
()
:
dcBaseOmsOrder
.
getAmountTotal
();
dcBaseOmsOrder
.
setAmountProduct
(
productAmount
);
//部分订单 AmountProduct(产品金额)字段没值或等于0, 就取AmountTotal(商品总收入)
//销售额统一改为 销售额=产品金额+运费-促销
dcBaseOmsOrder
.
setAmountSales
(
productAmount
.
add
(
dcBaseOmsOrder
.
getAmountShipping
()).
subtract
(
dcBaseOmsOrder
.
getCostPromotion
()));
//平台渠道费人民币 - Ebay的平台费币种不一样, 要取不同的汇率计算
BigDecimal
costPlatformFeeRMB
;
if
(
PlatformType
.
Ebay
.
value
().
equals
(
dcBaseOmsOrder
.
getPlatformType
().
toUpperCase
()))
{
costPlatformFeeRMB
=
dcBaseOmsOrder
.
getCostPlatformFee
().
multiply
(
dcBaseOmsOrder
.
getSellerOtherExchangeRate
()).
setScale
(
3
,
RoundingMode
.
HALF_EVEN
);
...
...
@@ -260,38 +240,37 @@ public class OrderSyncJob extends PointJob {
if
(
bailunSkuInfoMap
.
size
()
>
0
)
{
/*
* OMS过来的详细费用不用动
* 按比例算出SKU的售价
* 按比例算出SKU的售价
(运费相关按重量比例, 其他费用按采购价比例)
* 利润 = 销售额 -退款 -操作费 - 平台费 -头程-尾程- 处理费-采购成本
* FBA费用相当于FBA订单的尾程费
* 跟重量有关的费用按重量分摊
*/
for
(
BailunSkuStructure
bailunSkuStructure
:
bailunSkuInfoMap
.
values
())
{
DcBaseOmsSku
dcBaseOmsSku
=
bailunSkuStructure
.
getDcBaseOmsSku
();
DcBaseWarehouse
dcBaseWarehouse
=
bailunSkuStructure
.
getDcBaseWarehouse
();
dcBaseOmsSku
.
setRatioPrice
(
bailunSkuStructure
.
getSkuCostRatio
());
dcBaseOmsSku
.
setRatioWeight
(
bailunSkuStructure
.
getSkuWeightRatio
());
//总收入
//
SKU
总收入
BigDecimal
skuAmountTotal
=
bailunSkuStructure
.
getSkuCostRatio
().
multiply
(
dcBaseOmsOrder
.
getAmountTotal
()).
setScale
(
3
,
RoundingMode
.
HALF_EVEN
);
//退款
//
SKU
退款
BigDecimal
skuAmountRefund
=
bailunSkuStructure
.
getSkuCostRatio
().
multiply
(
dcBaseOmsOrder
.
getAmountRefund
()).
setScale
(
3
,
RoundingMode
.
HALF_EVEN
);
//商品收入
//
SKU
商品收入
BigDecimal
skuAmountProduct
=
bailunSkuStructure
.
getSkuCostRatio
().
multiply
(
dcBaseOmsOrder
.
getAmountProduct
()).
setScale
(
3
,
RoundingMode
.
HALF_EVEN
);
//礼品包装收入
//
SKU
礼品包装收入
BigDecimal
skuGiftAmountFee
=
bailunSkuStructure
.
getSkuCostRatio
().
multiply
(
dcBaseOmsOrder
.
getAmountGiftWrap
()).
setScale
(
3
,
RoundingMode
.
HALF_EVEN
);
//调整收入
//
SKU
调整收入
BigDecimal
skuAmountAdjustment
=
bailunSkuStructure
.
getSkuCostRatio
().
multiply
(
dcBaseOmsOrder
.
getAmountAdjustment
()).
setScale
(
3
,
RoundingMode
.
HALF_EVEN
);
//税费收入
//
SKU
税费收入
BigDecimal
skuAmountTax
=
bailunSkuStructure
.
getSkuCostRatio
().
multiply
(
dcBaseOmsOrder
.
getAmountTax
()).
setScale
(
3
,
RoundingMode
.
HALF_EVEN
);
//运费收入
//
SKU
运费收入
BigDecimal
skuAmountShipping
=
bailunSkuStructure
.
getSkuWeightRatio
().
multiply
(
dcBaseOmsOrder
.
getAmountShipping
()).
setScale
(
3
,
RoundingMode
.
HALF_EVEN
);
//将总销售额按比例摊分到SKU-原币种, SKU可能有多个
//
SKU销售额 =
将总销售额按比例摊分到SKU-原币种, SKU可能有多个
BigDecimal
skuAmountSales
=
bailunSkuStructure
.
getSkuCostRatio
().
multiply
(
dcBaseOmsOrder
.
getAmountSales
()).
setScale
(
3
,
RoundingMode
.
HALF_EVEN
);
//单个SKU售价-原币种
BigDecimal
skuSalesPrice
=
bailunSkuStructure
.
getSkuQuantityOrderd
()
>
0
?
skuAmountSales
.
divide
(
BigDecimal
.
valueOf
(
bailunSkuStructure
.
getSkuQuantityOrderd
()),
3
,
RoundingMode
.
HALF_EVEN
)
:
BigDecimal
.
ZERO
;
//平台费-原币种
//
SKU
平台费-原币种
BigDecimal
skuCostPlatformFee
=
bailunSkuStructure
.
getSkuCostRatio
().
multiply
(
dcBaseOmsOrder
.
getCostPlatformFee
()).
setScale
(
3
,
RoundingMode
.
HALF_EVEN
);
BigDecimal
skuCostPlatformFeeRMB
=
bailunSkuStructure
.
getSkuCostRatio
().
multiply
(
costPlatformFeeRMB
).
setScale
(
3
,
RoundingMode
.
HALF_EVEN
);
// Paypal费
//
SKU
Paypal费
BigDecimal
skuPaypalFee
=
bailunSkuStructure
.
getSkuCostRatio
().
multiply
(
dcBaseOmsOrder
.
getCostPaypalFee
()).
setScale
(
3
,
RoundingMode
.
HALF_EVEN
);
BigDecimal
skuPaypalFeeRmb
=
bailunSkuStructure
.
getSkuCostRatio
().
multiply
(
totalCostPaypalFeeRMB
).
setScale
(
3
,
RoundingMode
.
HALF_EVEN
);
//如果不是国内仓并且发货了 就需要去拿头程费
...
...
@@ -317,7 +296,7 @@ public class OrderSyncJob extends PointJob {
}
//促销费-原币种
BigDecimal
skuCostPromotion
=
bailunSkuStructure
.
getSkuCostRatio
().
multiply
(
dcBaseOmsOrder
.
getCostPromotion
()).
setScale
(
3
,
RoundingMode
.
HALF_EVEN
);
//
销售额 = 平台SKU产品总售价 - 促销费(如果不是FBA, 还要加上运费收入),这个费用在订单维度已经算好,按比例摊到SKU
//
SKU销售额人民币
BigDecimal
skuAmountSalesRMB
=
skuAmountSales
.
multiply
(
dcBaseOmsOrder
.
getSellerOrderExchangeRate
()).
setScale
(
3
,
RoundingMode
.
HALF_EVEN
);
BigDecimal
unitSkuAmountSalesRMB
=
BigDecimal
.
ZERO
;
//FBA费-人民币
...
...
@@ -421,6 +400,10 @@ public class OrderSyncJob extends PointJob {
if
(
i
==
0
)
{
omsOrderMapper
.
insertSelective
(
dcBaseOmsOrder
);
}
/**
* 这里存平台维度的东西到表里
* 留作他用, 不参与计算
*/
List
<
PlatformSku
>
platformSkuList
=
omsResult
.
getPlatformSku
();
DcBaseOmsPlatformSku
dcBaseOmsPlatformSku
=
new
DcBaseOmsPlatformSku
();
DcBaseOmsPlatformSkuMapper
mapper
=
SessionUtil
.
getSession
().
getMapper
(
DcBaseOmsPlatformSkuMapper
.
class
);
...
...
@@ -448,7 +431,7 @@ public class OrderSyncJob extends PointJob {
}
}
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
"Mybatis操作DB失败"
,
e
);
throw
new
RuntimeException
(
"Mybatis操作DB失败"
+
e
.
getCause
().
getMessage
()
,
e
);
}
finally
{
SessionUtil
.
closeSession
();
}
...
...
@@ -938,21 +921,42 @@ public class OrderSyncJob extends PointJob {
dcBaseOmsOrder
.
setOrderUpdateTime
(
omsResult
.
getOrderUpdateTime
());
dcBaseOmsOrder
.
setBailunPickingStatus
(
omsResult
.
getBailunPickingStatus
());
dcBaseOmsOrder
.
setBailunRequireLogistics
(
omsResult
.
getBailunRequireLogistics
());
//礼品包装收入
dcBaseOmsOrder
.
setAmountGiftWrap
((
omsResult
.
getOrderCharge
().
getAmountGiftWrap
()
!=
null
&&
omsResult
.
getOrderCharge
().
getAmountGiftWrap
().
getAmount
()
!=
null
)
?
omsResult
.
getOrderCharge
().
getAmountGiftWrap
().
getAmount
()
:
BigDecimal
.
ZERO
);
//总收入
dcBaseOmsOrder
.
setAmountTotal
((
omsResult
.
getOrderCharge
().
getAmountTotal
()
!=
null
&&
omsResult
.
getOrderCharge
().
getAmountTotal
().
getAmount
()
!=
null
)
?
omsResult
.
getOrderCharge
().
getAmountTotal
().
getAmount
()
:
BigDecimal
.
ZERO
);
//运费收入
dcBaseOmsOrder
.
setAmountShipping
((
omsResult
.
getOrderCharge
().
getAmountShipping
()
!=
null
&&
omsResult
.
getOrderCharge
().
getAmountShipping
().
getAmount
()
!=
null
)
?
omsResult
.
getOrderCharge
().
getAmountShipping
().
getAmount
()
:
BigDecimal
.
ZERO
);
//产品收入或产品金额
dcBaseOmsOrder
.
setAmountProduct
((
omsResult
.
getOrderCharge
().
getAmountProduct
()
!=
null
&&
omsResult
.
getOrderCharge
().
getAmountProduct
().
getAmount
()
!=
null
)
?
omsResult
.
getOrderCharge
().
getAmountProduct
().
getAmount
()
:
BigDecimal
.
ZERO
);
//税费
dcBaseOmsOrder
.
setAmountTax
((
omsResult
.
getOrderCharge
().
getAmountTax
()
!=
null
&&
omsResult
.
getOrderCharge
().
getAmountTax
().
getAmount
()
!=
null
)
?
omsResult
.
getOrderCharge
().
getAmountTax
().
getAmount
()
:
BigDecimal
.
ZERO
);
//调整费
dcBaseOmsOrder
.
setAmountAdjustment
((
omsResult
.
getOrderCharge
().
getAmountAdjustment
()
!=
null
&&
omsResult
.
getOrderCharge
().
getAmountAdjustment
().
getAmount
()
!=
null
)
?
omsResult
.
getOrderCharge
().
getAmountAdjustment
().
getAmount
()
:
BigDecimal
.
ZERO
);
//运费支出
dcBaseOmsOrder
.
setCostShipping
((
omsResult
.
getOrderCharge
().
getCostShipping
()
!=
null
&&
omsResult
.
getOrderCharge
().
getCostShipping
().
getAmount
()
!=
null
)
?
omsResult
.
getOrderCharge
().
getCostShipping
().
getAmount
()
:
BigDecimal
.
ZERO
);
//FBA费
dcBaseOmsOrder
.
setCostFbaFee
((
omsResult
.
getOrderCharge
().
getCostFbaFee
()
!=
null
&&
omsResult
.
getOrderCharge
().
getCostFbaFee
().
getAmount
()
!=
null
)
?
omsResult
.
getOrderCharge
().
getCostFbaFee
().
getAmount
()
:
BigDecimal
.
ZERO
);
//Paypal费
dcBaseOmsOrder
.
setCostPaypalFee
((
omsResult
.
getOrderCharge
().
getCostPaypalFee
()
!=
null
&&
omsResult
.
getOrderCharge
().
getCostPaypalFee
().
getAmount
()
!=
null
)
?
omsResult
.
getOrderCharge
().
getCostPaypalFee
().
getAmount
()
:
BigDecimal
.
ZERO
);
//产品成本
dcBaseOmsOrder
.
setCostProduct
((
omsResult
.
getOrderCharge
().
getCostProduct
()
!=
null
&&
omsResult
.
getOrderCharge
().
getCostProduct
().
getAmount
()
!=
null
)
?
omsResult
.
getOrderCharge
().
getCostProduct
().
getAmount
()
:
BigDecimal
.
ZERO
);
//促销费
dcBaseOmsOrder
.
setCostPromotion
((
omsResult
.
getOrderCharge
().
getCostPromotion
()
!=
null
&&
omsResult
.
getOrderCharge
().
getCostPromotion
().
getAmount
()
!=
null
)
?
omsResult
.
getOrderCharge
().
getCostPromotion
().
getAmount
()
:
BigDecimal
.
ZERO
);
//平台渠道费
dcBaseOmsOrder
.
setCostPlatformFee
((
omsResult
.
getOrderCharge
().
getCostPlatformFee
()
!=
null
&&
omsResult
.
getOrderCharge
().
getCostPlatformFee
().
getAmount
()
!=
null
)
?
omsResult
.
getOrderCharge
().
getCostPlatformFee
().
getAmount
()
:
BigDecimal
.
ZERO
);
//百伦处理费,自己的仓库操作费 - 需要计算的费用给个默认值
dcBaseOmsOrder
.
setCostHandleBailun
(
BigDecimal
.
ZERO
);
//第三方仓库操作费 - 需要计算的费用给个默认值
dcBaseOmsOrder
.
setCostHandlePlatform
(
BigDecimal
.
ZERO
);
//尾程费 - 需要计算的费用给个默认值
dcBaseOmsOrder
.
setCostTail
(
BigDecimal
.
ZERO
);
//头程费 - 需要计算的费用给个默认值
dcBaseOmsOrder
.
setCostFirst
(
BigDecimal
.
ZERO
);
//退款金额 - 需要计算的费用给个默认值
dcBaseOmsOrder
.
setAmountRefund
(
BigDecimal
.
ZERO
);
//销售额 - 需要计算的费用给个默认值
dcBaseOmsOrder
.
setAmountSales
(
BigDecimal
.
ZERO
);
if
(
omsResult
.
getRefundInfo
()
!=
null
)
{
dcBaseOmsOrder
.
setRefundTime
(
omsResult
.
getRefundInfo
().
getRefundTime
());
dcBaseOmsOrder
.
setBailunRefundStatus
(
omsResult
.
getRefundInfo
().
getRefundStatus
());
...
...
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