Commit 3c7c9981 by wutong

销售额不分平台计算, 统一改为 销售额=产品金额+运费-促销; 新增了部分注释

parent 05d36f6d
......@@ -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费
// SKUPaypal费
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());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment