|
@@ -161,18 +161,33 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
List<OrderItems> list = orderItemsService.list(new QueryWrapper<OrderItems>().eq("pid", order.getId()).eq("is_deleted", 0));
|
|
List<OrderItems> list = orderItemsService.list(new QueryWrapper<OrderItems>().eq("pid", order.getId()).eq("is_deleted", 0));
|
|
|
Order orderMessage = new Order();
|
|
Order orderMessage = new Order();
|
|
|
orderMessage.setId(order.getId());
|
|
orderMessage.setId(order.getId());
|
|
|
- if (CollectionUtils.isNotEmpty(list)){
|
|
|
|
|
|
|
+ if (CollectionUtils.isNotEmpty(list) && order.getTradeType().equals(OrderTypeEnum.DOMESTIC.getType())){
|
|
|
BigDecimal reduce = list.stream().reduce(BigDecimal.ZERO,(x,y) ->{
|
|
BigDecimal reduce = list.stream().reduce(BigDecimal.ZERO,(x,y) ->{
|
|
|
return x.add(y.getPurchaseAmount().multiply(y.getOrderQuantity()));
|
|
return x.add(y.getPurchaseAmount().multiply(y.getOrderQuantity()));
|
|
|
},BigDecimal::add);//采购金额求和
|
|
},BigDecimal::add);//采购金额求和
|
|
|
BigDecimal amount = list.stream().map(OrderItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);//金额求和
|
|
BigDecimal amount = list.stream().map(OrderItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);//金额求和
|
|
|
- BigDecimal grossProfit = amount.subtract(reduce);//毛利润
|
|
|
|
|
|
|
+ BigDecimal grossProfit = amount.subtract(reduce.add(order.getPredictOceanFreight()));//毛利润
|
|
|
BigDecimal grossProfitRate = new BigDecimal(BigInteger.ZERO);
|
|
BigDecimal grossProfitRate = new BigDecimal(BigInteger.ZERO);
|
|
|
if (amount.compareTo(BigDecimal.ZERO) > 0){
|
|
if (amount.compareTo(BigDecimal.ZERO) > 0){
|
|
|
- grossProfit = (grossProfit.divide(amount,2)).multiply(new BigDecimal(100));
|
|
|
|
|
|
|
+ grossProfitRate = (grossProfit.divide(amount,2)).multiply(new BigDecimal(100));
|
|
|
}
|
|
}
|
|
|
orderMessage.setGrossProfit(grossProfit);//毛利额
|
|
orderMessage.setGrossProfit(grossProfit);//毛利额
|
|
|
orderMessage.setGrossProfitRate(grossProfitRate);//毛利率
|
|
orderMessage.setGrossProfitRate(grossProfitRate);//毛利率
|
|
|
|
|
+ }else if (CollectionUtils.isNotEmpty(list) && order.getTradeType().equals(OrderTypeEnum.EXPORT.getType())){
|
|
|
|
|
+ //出口的毛利额=销售价 * 汇率 - (采购价+配件价格) 毛利率 =毛利额/(采购单价+配件价格)
|
|
|
|
|
+ BigDecimal amount = list.stream().map(OrderItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);//金额求和
|
|
|
|
|
+ BigDecimal purchaseAmount = list.stream().reduce(BigDecimal.ZERO,(x,y) ->{
|
|
|
|
|
+ return x.add(y.getPurchaseAmount().multiply(y.getOrderQuantity()));
|
|
|
|
|
+ },BigDecimal::add);//采购金额求和
|
|
|
|
|
+ BigDecimal partsPrice = list.stream().reduce(BigDecimal.ZERO,(x,y) ->{
|
|
|
|
|
+ return x.add(y.getPartsPrice().multiply(y.getOrderQuantity()));
|
|
|
|
|
+ },BigDecimal::add);//配件金额求和
|
|
|
|
|
+ orderMessage.setGrossProfit(amount.multiply(order.getExchangeRate()).subtract((purchaseAmount.add(partsPrice))));//毛利额
|
|
|
|
|
+ BigDecimal grossProfitRate = new BigDecimal(BigInteger.ZERO);
|
|
|
|
|
+ if ((amount.compareTo(BigDecimal.ZERO)) > 0){
|
|
|
|
|
+ grossProfitRate = orderMessage.getGrossProfit().divide((purchaseAmount.add(partsPrice)),2).multiply(new BigDecimal(100));
|
|
|
|
|
+ }
|
|
|
|
|
+ orderMessage.setGrossProfitRate(grossProfitRate);//毛利率
|
|
|
}else {
|
|
}else {
|
|
|
orderMessage.setGrossProfit(new BigDecimal(BigInteger.ZERO));//毛利额
|
|
orderMessage.setGrossProfit(new BigDecimal(BigInteger.ZERO));//毛利额
|
|
|
orderMessage.setGrossProfitRate(new BigDecimal(BigInteger.ZERO));//毛利率
|
|
orderMessage.setGrossProfitRate(new BigDecimal(BigInteger.ZERO));//毛利率
|