zhaoxian пре 2 година
родитељ
комит
378d495368

+ 36 - 28
ruixuan-live/src/main/java/com/ruixuan/isc/service/impl/KuaishouItemCollectSamplesServiceImpl.java

@@ -408,15 +408,15 @@ public class KuaishouItemCollectSamplesServiceImpl implements IKuaishouItemColle
         returnJson.put("code", 0);
         returnJson.put("message", "调用成功");
         if ("1".equals(type)) {
-            returnJson.put("data", getgetOrderDataByChannel(userList, startDate, endDate));
+            returnJson.put("data", getOrderDataByChannel(userList, startDate, endDate));
         } else {
-            returnJson.put("data", getgetOrderDataByAttractInvestment(userList, startDate, endDate));
+            returnJson.put("data", getOrderDataByAttractInvestment(userList, startDate, endDate));
         }
         return returnJson;
     }
 
     //渠道数据
-    private JSONObject getgetOrderDataByChannel(List<Long> userList, String startDate, String endDate) {
+    private JSONObject getOrderDataByChannel(List<Long> userList, String startDate, String endDate) {
         JSONObject data = new JSONObject();
         List<Long> promoterIds = promoterService.selectPromoterIdList(userList);
         if (Check.isNotNull(promoterIds)) {
@@ -450,15 +450,12 @@ public class KuaishouItemCollectSamplesServiceImpl implements IKuaishouItemColle
             JSONObject weeklyDayData = supplyChainService.selectOrderRate(promoterIds, null, todayOfLastWeek, todayOfLastWeek);
 
             //日环比 (今天-昨天)/昨天*100%
-            BigDecimal dateOrder = toData.getBigDecimal("allNumber").subtract(yesData.getBigDecimal("allNumber")).divide(yesData.getBigDecimal("allNumber"), 4, RoundingMode.HALF_UP);
-            BigDecimal dateAmount = toData.getBigDecimal("orderAmount").subtract(yesData.getBigDecimal("orderAmount")).divide(yesData.getBigDecimal("orderAmount"), 4, RoundingMode.HALF_UP);
-            data.put("dateOrderRate", dateOrder);
-            data.put("dateAmountRate", dateAmount);
+            data.put("dateOrderRate", getOrderRateValue(toData, yesData));
+            data.put("dateAmountRate", getAmountRateValue(toData, yesData));
+
             //周同比
-            BigDecimal monthOrder = toData.getBigDecimal("allNumber").subtract(weeklyDayData.getBigDecimal("allNumber")).divide(weeklyDayData.getBigDecimal("allNumber"), 4, RoundingMode.HALF_UP);
-            BigDecimal monthAmount = toData.getBigDecimal("orderAmount").subtract(weeklyDayData.getBigDecimal("orderAmount")).divide(weeklyDayData.getBigDecimal("orderAmount"), 4, RoundingMode.HALF_UP);
-            data.put("monthOrderRate", monthOrder);
-            data.put("monthAmountRate", monthAmount);
+            data.put("monthOrderRate", getOrderRateValue(toData, weeklyDayData));
+            data.put("monthAmountRate", getAmountRateValue(toData, weeklyDayData));
 
             JSONObject inDayData = null;
             JSONObject lastDayData = null;
@@ -485,17 +482,33 @@ public class KuaishouItemCollectSamplesServiceImpl implements IKuaishouItemColle
                 lastDayData = supplyChainService.selectOrderRate(promoterIds, null, lastStart, lastEnd);
             }
             //数据对比
-            BigDecimal dataOrder = inDayData.getBigDecimal("allNumber").subtract(lastDayData.getBigDecimal("allNumber")).divide(lastDayData.getBigDecimal("allNumber"), 4, RoundingMode.HALF_UP);
-            BigDecimal dataAmount = inDayData.getBigDecimal("orderAmount").subtract(lastDayData.getBigDecimal("orderAmount")).divide(lastDayData.getBigDecimal("orderAmount"), 4, RoundingMode.HALF_UP);
-            data.put("dataOrderRate", dataOrder);
-            data.put("dataAmountRate", dataAmount);
+            data.put("dataOrderRate", getOrderRateValue(inDayData, lastDayData));
+            data.put("dataAmountRate", getAmountRateValue(inDayData, lastDayData));
         }
         return data;
     }
 
 
+    private BigDecimal getOrderRateValue(JSONObject toData, JSONObject yesData) {
+        BigDecimal allNumber = yesData.getBigDecimal("allNumber");
+        if ((BigDecimal.ZERO).compareTo(allNumber) != 0) {
+            return toData.getBigDecimal("allNumber").subtract(allNumber).divide(allNumber, 4, RoundingMode.HALF_UP);
+        } else {
+            return new BigDecimal(0);
+        }
+    }
+
+    private BigDecimal getAmountRateValue(JSONObject toData, JSONObject yesData) {
+        BigDecimal orderAmount = yesData.getBigDecimal("orderAmount");
+        if ((BigDecimal.ZERO).compareTo(orderAmount) != 0) {
+            return toData.getBigDecimal("orderAmount").subtract(orderAmount).divide(orderAmount, 4, RoundingMode.HALF_UP);
+        } else {
+            return new BigDecimal(0);
+        }
+    }
+
     //招商数据
-    private JSONObject getgetOrderDataByAttractInvestment(List<Long> userList, String startDate, String endDate) {
+    private JSONObject getOrderDataByAttractInvestment(List<Long> userList, String startDate, String endDate) {
         JSONObject data = new JSONObject();
         List<Long> promoterIds = promoterService.selectPromoterIdList(null);
         if (Check.isNotNull(promoterIds)) {
@@ -529,15 +542,12 @@ public class KuaishouItemCollectSamplesServiceImpl implements IKuaishouItemColle
             JSONObject weeklyDayData = supplyChainService.selectOrderRate(null, itemIds, todayOfLastWeek, todayOfLastWeek);
 
             //日环比 (今天-昨天)/昨天*100%
-            BigDecimal dateOrder = toData.getBigDecimal("allNumber").subtract(yesData.getBigDecimal("allNumber")).divide(yesData.getBigDecimal("allNumber"), 4, RoundingMode.HALF_UP);
-            BigDecimal dateAmount = toData.getBigDecimal("orderAmount").subtract(yesData.getBigDecimal("orderAmount")).divide(yesData.getBigDecimal("orderAmount"), 4, RoundingMode.HALF_UP);
-            data.put("dateOrderRate", dateOrder);
-            data.put("dateAmountRate", dateAmount);
+            data.put("dateOrderRate", getOrderRateValue(toData, yesData));
+            data.put("dateAmountRate", getAmountRateValue(toData, yesData));
+
             //周同比
-            BigDecimal monthOrder = toData.getBigDecimal("allNumber").subtract(weeklyDayData.getBigDecimal("allNumber")).divide(weeklyDayData.getBigDecimal("allNumber"), 4, RoundingMode.HALF_UP);
-            BigDecimal monthAmount = toData.getBigDecimal("orderAmount").subtract(weeklyDayData.getBigDecimal("orderAmount")).divide(weeklyDayData.getBigDecimal("orderAmount"), 4, RoundingMode.HALF_UP);
-            data.put("monthOrderRate", monthOrder);
-            data.put("monthAmountRate", monthAmount);
+            data.put("monthOrderRate", getOrderRateValue(toData, weeklyDayData));
+            data.put("monthAmountRate", getAmountRateValue(toData, weeklyDayData));
 
             JSONObject inDayData = null;
             JSONObject lastDayData = null;
@@ -564,10 +574,8 @@ public class KuaishouItemCollectSamplesServiceImpl implements IKuaishouItemColle
                 lastDayData = supplyChainService.selectOrderRate(null, itemIds, lastStart, lastEnd);
             }
             //数据对比
-            BigDecimal dataOrder = inDayData.getBigDecimal("allNumber").subtract(lastDayData.getBigDecimal("allNumber")).divide(lastDayData.getBigDecimal("allNumber"), 4, RoundingMode.HALF_UP);
-            BigDecimal dataAmount = inDayData.getBigDecimal("orderAmount").subtract(lastDayData.getBigDecimal("orderAmount")).divide(lastDayData.getBigDecimal("orderAmount"), 4, RoundingMode.HALF_UP);
-            data.put("dataOrderRate", dataOrder);
-            data.put("dataAmountRate", dataAmount);
+            data.put("dataOrderRate", getOrderRateValue(inDayData, lastDayData));
+            data.put("dataAmountRate", getAmountRateValue(inDayData, lastDayData));
         }
         return data;
     }

+ 2 - 2
ruixuan-live/src/main/resources/mapper/isc/SupplyChainMapper.xml

@@ -1098,12 +1098,12 @@
     <select id="selectOrderRate" resultType="com.alibaba.fastjson.JSONObject">
         SELECT
         count(oid) as 'allNumber',
-        sum(
+        IFNULL(sum(
         CASE
         WHEN order_status != 80 THEN order_amount
         ELSE 0
         END
-        ) AS 'orderAmount'
+        ),0) AS 'orderAmount'
         FROM kuaishou_supply_chain
         WHERE stat_date >= #{statDate}
         AND stat_date &lt;= #{endDate}