|
|
@@ -6,6 +6,8 @@ import com.sckw.core.utils.DateUtils;
|
|
|
import com.sckw.core.utils.StringUtils;
|
|
|
import com.sckw.core.web.context.LoginUserHolder;
|
|
|
import com.sckw.mongo.model.SckwTradeOrder;
|
|
|
+import com.sckw.payment.api.dubbo.PaymentDubboService;
|
|
|
+import com.sckw.payment.api.model.dto.SettlementMoney;
|
|
|
import com.sckw.product.api.dubbo.GoodsStatisticsService;
|
|
|
import com.sckw.product.api.model.GoodsNumStsParam;
|
|
|
import com.sckw.report.model.dto.WorkbenchOrderStsDTO;
|
|
|
@@ -43,6 +45,8 @@ public class KwOrderStatisticsService {
|
|
|
|
|
|
@DubboReference(version = "1.0.0", group = "design", check = false)
|
|
|
private GoodsStatisticsService goodsStatisticsService;
|
|
|
+ @DubboReference(version = "1.0.0", group = "design", check = false)
|
|
|
+ private PaymentDubboService paymentDubboService;
|
|
|
|
|
|
|
|
|
/**
|
|
|
@@ -68,6 +72,9 @@ public class KwOrderStatisticsService {
|
|
|
GoodsNumStsParam goodsNumStsParam = new GoodsNumStsParam();
|
|
|
goodsNumStsParam.setTopEntId(entId).setUnit(unit);
|
|
|
Long currentGoodsNum = goodsStatisticsService.getOnShelfGoodsNum(goodsNumStsParam);
|
|
|
+ //待付款金额
|
|
|
+ SettlementMoney settlement = Objects.equals(orderType, 1) ?
|
|
|
+ paymentDubboService.countPurchase(entId, dateType) : paymentDubboService.countSell(entId, dateType);
|
|
|
//订单统计
|
|
|
WorkbenchOrderStsDTO currentOrderSts = getOrderStsInfo(orderType, unit, currentStart, null);
|
|
|
BigDecimal currentAmount = BigDecimal.valueOf(currentOrderSts.getOrderAmount());
|
|
|
@@ -76,8 +83,8 @@ public class KwOrderStatisticsService {
|
|
|
.setGoodsNum(currentGoodsNum)
|
|
|
.setOrderAmount(currentAmount)
|
|
|
.setOrderPrice(currentPrice)
|
|
|
+ .setWaitCollectedPrice(new BigDecimal(settlement.getCurrent()))
|
|
|
.setNotArrivedAmount(currentAmount.subtract(BigDecimal.valueOf(currentOrderSts.getOrderActualAmount())));
|
|
|
- //todo 待付款金额
|
|
|
list.add(currentDataSts);
|
|
|
|
|
|
//上周/上月数据
|
|
|
@@ -93,45 +100,27 @@ public class KwOrderStatisticsService {
|
|
|
.setGoodsNum(lastGoodsNum)
|
|
|
.setOrderAmount(lastAmount)
|
|
|
.setOrderPrice(lastPrice)
|
|
|
+ .setWaitCollectedPrice(new BigDecimal(settlement.getBefore()))
|
|
|
.setNotArrivedAmount(lastAmount.subtract(BigDecimal.valueOf(lastOrderSts.getOrderActualAmount())));
|
|
|
- //todo 待付款金额
|
|
|
list.add(lastDataSts);
|
|
|
res.setTOrderDataStsList(list);
|
|
|
- //环比数据
|
|
|
//商品数量环比
|
|
|
- BigDecimal goodsNumRingRate = Objects.isNull(lastGoodsNum) || lastGoodsNum == 0L ? NumberConstant.ONE_HUNDRED :
|
|
|
- new BigDecimal((currentGoodsNum - lastGoodsNum)).multiply(NumberConstant.ONE_HUNDRED)
|
|
|
- .divide(new BigDecimal(lastGoodsNum), 2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal goodsNumRingRate = getRingRate(new BigDecimal(currentGoodsNum), new BigDecimal(lastGoodsNum));
|
|
|
boolean goodsNumFlag = goodsNumRingRate.compareTo(BigDecimal.ZERO) >= 0;
|
|
|
goodsNumRingRate = goodsNumRingRate.abs();
|
|
|
//订单总量环比
|
|
|
- BigDecimal orderAmountRingRate = lastAmount.compareTo(BigDecimal.ZERO) == 0 ? NumberConstant.ONE_HUNDRED :
|
|
|
- (currentAmount.subtract(lastAmount)).multiply(NumberConstant.ONE_HUNDRED)
|
|
|
- .divide(lastAmount, 2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal orderAmountRingRate = getRingRate(currentAmount, lastAmount);
|
|
|
boolean orderAmountFlag = orderAmountRingRate.compareTo(BigDecimal.ZERO) >= 0;
|
|
|
orderAmountRingRate = orderAmountRingRate.abs();
|
|
|
//订单总金额环比
|
|
|
- BigDecimal orderPriceRingRate = lastPrice.compareTo(BigDecimal.ZERO) == 0 ? NumberConstant.ONE_HUNDRED :
|
|
|
- (currentPrice.subtract(lastPrice)).multiply(NumberConstant.ONE_HUNDRED)
|
|
|
- .divide(lastPrice, 2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal orderPriceRingRate = getRingRate(currentPrice, lastPrice);
|
|
|
boolean orderPriceFlag = orderPriceRingRate.compareTo(BigDecimal.ZERO) >= 0;
|
|
|
orderPriceRingRate = orderPriceRingRate.abs();
|
|
|
//未到货量环比
|
|
|
- BigDecimal currentNotArrived = currentDataSts.getNotArrivedAmount();
|
|
|
- BigDecimal lastNotArrived = lastDataSts.getNotArrivedAmount();
|
|
|
- BigDecimal notArrivedAmountRingRate = lastNotArrived.compareTo(BigDecimal.ZERO) == 0 ? NumberConstant.ONE_HUNDRED :
|
|
|
- (currentNotArrived.subtract(lastNotArrived)).multiply(NumberConstant.ONE_HUNDRED)
|
|
|
- .divide(lastNotArrived, 2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal notArrivedAmountRingRate = getRingRate(currentDataSts.getNotArrivedAmount(), lastDataSts.getNotArrivedAmount());
|
|
|
boolean notArrivedAmountFlag = notArrivedAmountRingRate.compareTo(BigDecimal.ZERO) >= 0;
|
|
|
notArrivedAmountRingRate = notArrivedAmountRingRate.abs();
|
|
|
- //待付款金额环比
|
|
|
- BigDecimal currentWaitPrice = currentDataSts.getWaitCollectedPrice();
|
|
|
- BigDecimal lastWaitPrice = lastDataSts.getWaitCollectedPrice();
|
|
|
- BigDecimal waitCollectedPriceRingRate = lastWaitPrice.compareTo(BigDecimal.ZERO) == 0 ? NumberConstant.ONE_HUNDRED :
|
|
|
- (currentWaitPrice.subtract(lastWaitPrice)).multiply(NumberConstant.ONE_HUNDRED)
|
|
|
- .divide(lastWaitPrice, 2, RoundingMode.HALF_UP);
|
|
|
- boolean waitCollectedPriceFlag = waitCollectedPriceRingRate.compareTo(BigDecimal.ZERO) >= 0;
|
|
|
- waitCollectedPriceRingRate = waitCollectedPriceRingRate.abs();
|
|
|
+
|
|
|
res.setGoodsNumRingRate(goodsNumRingRate)
|
|
|
.setGoodsNumFlag(goodsNumFlag)
|
|
|
.setOrderAmountRingRate(orderAmountRingRate)
|
|
|
@@ -140,8 +129,18 @@ public class KwOrderStatisticsService {
|
|
|
.setOrderPriceFlag(orderPriceFlag)
|
|
|
.setNotArrivedAmountRingRate(notArrivedAmountRingRate)
|
|
|
.setNotArrivedAmountFlag(notArrivedAmountFlag)
|
|
|
- .setWaitCollectedPriceRingRate(waitCollectedPriceRingRate)
|
|
|
- .setWaitCollectedPriceFlag(waitCollectedPriceFlag);
|
|
|
+ .setWaitCollectedPriceRingRate(new BigDecimal(settlement.getPercent().replace("%", "")))
|
|
|
+ .setWaitCollectedPriceFlag(Objects.equals(settlement.getFlag(), 1));
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ private BigDecimal getRingRate(BigDecimal current, BigDecimal last) {
|
|
|
+ BigDecimal res;
|
|
|
+ if (last.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ res = (current.subtract(last)).compareTo(BigDecimal.ZERO) != 0 ? NumberConstant.ONE_HUNDRED : BigDecimal.ZERO;
|
|
|
+ } else {
|
|
|
+ res = (current.subtract(last)).multiply(NumberConstant.ONE_HUNDRED).divide(last, 2, RoundingMode.HALF_UP);
|
|
|
+ }
|
|
|
return res;
|
|
|
}
|
|
|
|