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