From 8819762ad58f77e606431fca4072c19e542e6055 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期三, 25 三月 2026 13:42:44 +0800
Subject: [PATCH] 销售金额

---
 jyz-base-start/src/main/java/com/tievd/jyz/entity/OilRecord.java                  |    8 ++++
 jyz-base-start/src/main/java/com/tievd/jyz/entity/vo/StatDataTableVo.java         |   22 +++++++++++
 jyz-base-start/src/main/resources/xml/OilRecordMapper.xml                         |   15 +++++++
 jyz-base-start/src/main/java/com/tievd/jyz/service/impl/OilRecordServiceImpl.java |   45 ++++++++++++++++++----
 jyz-base-start/src/main/java/com/tievd/jyz/mapper/OilRecordMapper.java            |    2 +
 jyz-base-start/src/main/java/com/tievd/jyz/entity/vo/DataStatisReqVo.java         |   20 +++++++---
 6 files changed, 97 insertions(+), 15 deletions(-)

diff --git a/jyz-base-start/src/main/java/com/tievd/jyz/entity/OilRecord.java b/jyz-base-start/src/main/java/com/tievd/jyz/entity/OilRecord.java
index 367bfdb..8f446d6 100644
--- a/jyz-base-start/src/main/java/com/tievd/jyz/entity/OilRecord.java
+++ b/jyz-base-start/src/main/java/com/tievd/jyz/entity/OilRecord.java
@@ -101,6 +101,14 @@
     @TableField("record_day")
     private String recordDay;
     
+    @Schema(description = "娌瑰搧绫诲瀷:92,95,98,鏌存补")
+    @TableField("oil_type")
+    private String oilType;
+    
+    @Schema(description = "鎬婚噾棰�")
+    @TableField("total_amount")
+    private java.math.BigDecimal totalAmount;
+    
     @Schema(description = "鍒涘缓鏃堕棿")
     @TableField("create_time")
     private Date createTime;
diff --git a/jyz-base-start/src/main/java/com/tievd/jyz/entity/vo/DataStatisReqVo.java b/jyz-base-start/src/main/java/com/tievd/jyz/entity/vo/DataStatisReqVo.java
index edb793a..d1f7fa0 100644
--- a/jyz-base-start/src/main/java/com/tievd/jyz/entity/vo/DataStatisReqVo.java
+++ b/jyz-base-start/src/main/java/com/tievd/jyz/entity/vo/DataStatisReqVo.java
@@ -108,12 +108,20 @@
     }
     
     public enum TrendType {
-        TRAFFIC(1, StatDataTableVo::getCarCount, StatDataTableVo::getEntryRate, "杞︽祦閲�", "鎷愬叆鐜�"),
-        OIL(2, StatDataTableVo::getOilCount, StatDataTableVo::getOilVolume, "鍔犳补鏁�", "娌瑰搧閿�閲�"),
-        OIL_vOLUME(3, StatDataTableVo::getOilVolume, t -> 100 * (t.getOilVolume() - t.getPreStatVo().getOilVolume()) / (t.getPreStatVo().getOilVolume() + 1), "娌瑰搧閿�閲�", "鐜瘮"),
-        SPAND_AVG(4, StatDataTableVo::getSpandAvg, t -> 100 * (t.getSpandAvg() - t.getPreStatVo().getSpandAvg()) / (t.getPreStatVo().getSpandAvg() + 1), "閫氳繃鐜�", "鐜瘮"),
-        CLIENT(5, null),
-        LOSE_CLIENT(6, null);
+        TRAFFIC(0, StatDataTableVo::getCarCount, StatDataTableVo::getEntryRate, "杞︽祦閲�", "鎷愬叆鐜�"),
+        OIL(1, StatDataTableVo::getOilCount, StatDataTableVo::getOilVolume, "鍔犳补鏁�", "娌瑰搧閿�閲�"),
+        OIL_vOLUME(2, StatDataTableVo::getOilVolume, t -> 100 * (t.getOilVolume() - t.getPreStatVo().getOilVolume()) / (t.getPreStatVo().getOilVolume() + 1), "娌瑰搧閿�閲�", "鐜瘮"),
+        SPAND_AVG(3, StatDataTableVo::getSpandAvg, t -> 100 * (t.getSpandAvg() - t.getPreStatVo().getSpandAvg()) / (t.getPreStatVo().getSpandAvg() + 1), "閫氳繃鐜�", "鐜瘮"),
+        CLIENT(4, null),
+        LOSE_CLIENT(5, null),
+        SALES_AMOUNT(6, StatDataTableVo::getTotalAmount, t -> {
+            java.math.BigDecimal current = t.getTotalAmount();
+            java.math.BigDecimal previous = t.getPreStatVo().getTotalAmount();
+            if (previous.compareTo(java.math.BigDecimal.ZERO) == 0) {
+                return java.math.BigDecimal.ZERO;
+            }
+            return current.subtract(previous).multiply(new java.math.BigDecimal(100)).divide(previous, 2, java.math.RoundingMode.HALF_UP);
+        }, "閿�鍞噾棰�", "鐜瘮");
         
         int val;
         
diff --git a/jyz-base-start/src/main/java/com/tievd/jyz/entity/vo/StatDataTableVo.java b/jyz-base-start/src/main/java/com/tievd/jyz/entity/vo/StatDataTableVo.java
index 495f79e..6961637 100644
--- a/jyz-base-start/src/main/java/com/tievd/jyz/entity/vo/StatDataTableVo.java
+++ b/jyz-base-start/src/main/java/com/tievd/jyz/entity/vo/StatDataTableVo.java
@@ -41,6 +41,9 @@
     @Schema(description = "鍥炲ご鐜�")
     private String rebackRate;
     
+    @Schema(description = "閿�鍞噾棰�")
+    private java.math.BigDecimal totalAmount;
+    
     
     
     @Schema(description = "鍔犳补浣�")
@@ -48,6 +51,9 @@
     
     @Schema(description = "杞﹀瀷")
     private String modelName;
+    
+    @Schema(description = "娌瑰搧绫诲瀷")
+    private String oilType;
     
     @Schema(description = "鏃堕棿杞�")
     private LocalDateTime statTime;
@@ -72,6 +78,22 @@
         this.sumSpand += sumSpand;
     }
     
+    public void addTotalAmount(java.math.BigDecimal totalAmount) {
+        if (this.totalAmount == null) {
+            this.totalAmount = java.math.BigDecimal.ZERO;
+        }
+        if (totalAmount != null) {
+            this.totalAmount = this.totalAmount.add(totalAmount);
+        }
+    }
+    
+    public java.math.BigDecimal getTotalAmount() {
+        if (totalAmount == null) {
+            totalAmount = java.math.BigDecimal.ZERO;
+        }
+        return totalAmount;
+    }
+    
     public int getSpandAvg() {
         if (spandAvg == null) {
             spandAvg = appearCount == 0 ? 0 : sumSpand / appearCount;
diff --git a/jyz-base-start/src/main/java/com/tievd/jyz/mapper/OilRecordMapper.java b/jyz-base-start/src/main/java/com/tievd/jyz/mapper/OilRecordMapper.java
index dabd2a9..867145a 100644
--- a/jyz-base-start/src/main/java/com/tievd/jyz/mapper/OilRecordMapper.java
+++ b/jyz-base-start/src/main/java/com/tievd/jyz/mapper/OilRecordMapper.java
@@ -107,6 +107,8 @@
     
     List<StatDataTableVo> statFanByPosition(DataStatisReqVo param);
     
+    List<StatDataTableVo> statFanByOilType(DataStatisReqVo param);
+    
     List<StatDataTableVo> statBarByModel(DataStatisReqVo param);
     
     Map getVehicleFrequencyBeforeActivity(@Param("startTime") String startTime, @Param("orgCodes") List<String> orgCodes);
diff --git a/jyz-base-start/src/main/java/com/tievd/jyz/service/impl/OilRecordServiceImpl.java b/jyz-base-start/src/main/java/com/tievd/jyz/service/impl/OilRecordServiceImpl.java
index 1e01e1d..91c0eeb 100644
--- a/jyz-base-start/src/main/java/com/tievd/jyz/service/impl/OilRecordServiceImpl.java
+++ b/jyz-base-start/src/main/java/com/tievd/jyz/service/impl/OilRecordServiceImpl.java
@@ -165,7 +165,7 @@
         JSONObject res;
         List<StatDataTableVo> dataList = new ArrayList<>();
         Function<StatDataTableVo, ?> xfunc = null;
-        Function<StatDataTableVo, Integer> barfunc = null;
+        Function<StatDataTableVo, ?> barfunc = null;
         switch(param.getType()) {
             case 1 :
                 dataList = oilRecordMapper.statFanByModel(param);
@@ -186,6 +186,16 @@
                 dataList = oilRecordMapper.statFanByPosition(param);
                 xfunc = StatDataTableVo::getOilPosition;
                 barfunc = StatDataTableVo::getOilVolume;
+                break;
+            case 5 :
+                dataList = oilRecordMapper.statFanByOilType(param);
+                xfunc = StatDataTableVo::getOilType;
+                barfunc = StatDataTableVo::getOilVolume;
+                break;
+            case 6 :
+                dataList = oilRecordMapper.statFanByOilType(param);
+                xfunc = StatDataTableVo::getOilType;
+                barfunc = StatDataTableVo::getTotalAmount;
                 break;
         }
         res = dataTransLists(dataList, xfunc, barfunc, null, "", "");
@@ -236,6 +246,7 @@
                 .minus(timeUnit.value(), ChronoUnit.valueOf(timeUnit.name()))
                 .with(timeUnit.initField(), 1);
         LocalDateTime timeLimitRight = LocalDateTime.now().with(timeUnit.initField(), 1);
+        log.info("鎵撳嵃鏃堕棿寮�濮�: {}, 鎵撳嵃鏃堕棿缁撴潫: {}", timeLimit.toString(), timeLimitRight.toString());
         LambdaQueryWrapper wrapper = new LambdaQueryWrapper<OilRecord>()
                 .ge(OilRecord::getStartTime, timeLimit.toString())
                 .le(OilRecord::getStartTime, timeLimitRight.toString())
@@ -263,6 +274,7 @@
             statVo.addAppearCount(1);
             if (record.getBehavior().intValue() == SystemConstant.BEHAVIOR_TYPE_OIL) statVo.addOilCount(1);
             if (record.getBehavior().intValue() == SystemConstant.BEHAVIOR_TYPE_OIL) statVo.addOilVolume(record.getOilVolume());
+            if (record.getBehavior().intValue() == SystemConstant.BEHAVIOR_TYPE_OIL) statVo.addTotalAmount(record.getTotalAmount());
             statVo.addSumSpand(record.getSpandTime());
         }
         
@@ -455,6 +467,10 @@
                     && (oilRecord.getBehavior() == null || oilRecord.getBehavior().intValue() != SystemConstant.BEHAVIOR_TYPE_OIL)) {
                 continue;
             }
+            if (trendType == DataStatisReqVo.TrendType.SALES_AMOUNT
+                    && (oilRecord.getBehavior() == null || oilRecord.getBehavior().intValue() != SystemConstant.BEHAVIOR_TYPE_OIL)) {
+                continue;
+            }
             Map<String, Object> row = new LinkedHashMap<>();
             row.put("id", oilRecord.getId());
             row.put("startTime", oilRecord.getStartTime());
@@ -463,6 +479,7 @@
             row.put("behaviorText", behaviorText(oilRecord.getBehavior()));
             row.put("oilPosition", oilRecord.getOilPosition());
             row.put("oilVolume", oilRecord.getOilVolume());
+            row.put("totalAmount", oilRecord.getTotalAmount());
             row.put("spandTime", oilRecord.getSpandTime());
             detailList.add(row);
         }
@@ -502,16 +519,21 @@
             String barName,
             String lineName) {
         List xDatas = new ArrayList();
-        List<Integer> barDatas = new ArrayList<>();
+        List<Object> barDatas = new ArrayList<>();
         List lineDatas = new ArrayList<>();
-        int sum = 0;
+        double sum = 0;
         for (E statVo : dataList) {
             Object xData = "";
-            int barData = 0;
+            Object barData = 0;
             Object lineData = 0;
             try {
                 xData = xDataMapper.apply(statVo);
-                barData = Integer.valueOf(barDataMapper.apply(statVo).toString());
+                Object barValue = barDataMapper.apply(statVo);
+                if (barValue instanceof java.math.BigDecimal) {
+                    barData = ((java.math.BigDecimal) barValue).doubleValue();
+                } else {
+                    barData = Integer.valueOf(barValue.toString());
+                }
                 if (lineDataMapper != null) lineData = lineDataMapper.apply(statVo);
             } catch (Exception e) {
                 e.printStackTrace();
@@ -521,11 +543,18 @@
             xDatas.add(xData);
             barDatas.add(barData);
             lineDatas.add(lineData);
-            sum += barData;
+            if (barData instanceof Number) {
+                sum += ((Number) barData).doubleValue();
+            }
         }
         if (lineDataMapper == null) {
-            int finalSum = sum;
-            lineDatas = barDatas.stream().map(n -> n*100/ finalSum).collect(Collectors.toList());
+            double finalSum = sum;
+            lineDatas = barDatas.stream().map(n -> {
+                if (n instanceof Number) {
+                    return ((Number) n).doubleValue() * 100 / finalSum;
+                }
+                return 0;
+            }).collect(Collectors.toList());
         }
         JSONObject res = new JSONObject();
         res.put("xData", xDatas);
diff --git a/jyz-base-start/src/main/resources/xml/OilRecordMapper.xml b/jyz-base-start/src/main/resources/xml/OilRecordMapper.xml
index 1c5b368..65a05ef 100644
--- a/jyz-base-start/src/main/resources/xml/OilRecordMapper.xml
+++ b/jyz-base-start/src/main/resources/xml/OilRecordMapper.xml
@@ -120,7 +120,8 @@
             count(if(behavior=1,1,null)) oilCount,
             sum(oil_volume) oilVolume,
             sum(spand_time) sumSpand,
-            count(DISTINCT if(behavior=1, r.license_num, null)) onceOilCount
+            count(DISTINCT if(behavior=1, r.license_num, null)) onceOilCount,
+            sum(if(behavior=1, total_amount, 0)) totalAmount
             from t_oil_record r
             join (
             select sum(car_count) carCount from t_traffic_flow
@@ -269,6 +270,18 @@
         ) f on m.model_code = f.model_code
     </select>
 
+    <select id="statFanByOilType" resultType="com.tievd.jyz.entity.vo.StatDataTableVo" parameterType="com.tievd.jyz.entity.vo.DataStatisReqVo">
+        select
+        count(if(behavior=1,1,null)) oilCount,
+        sum(oil_volume) oilVolume,
+        sum(if(behavior=1, total_amount, 0)) totalAmount,
+        oil_type oilType
+        from t_oil_record
+        <include refid="statRecordCondition" />
+        and oil_type is not null and oil_type != ''
+        GROUP BY oil_type
+    </select>
+
     <select id="getVehicleFrequencyBeforeActivity" resultType="java.util.Map">
         SELECT 
             COUNT(DISTINCT license_num) as totalVehicles,

--
Gitblit v1.8.0