From c5462d60b99823adb10d9e9eda671920118538f7 Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期四, 12 九月 2024 09:06:35 +0800
Subject: [PATCH] 9.12

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java               |   30 +
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingUserEquimentVO.java                        |   25 +
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java               |    5 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java     |    4 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java                          |   12 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java                          |    5 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java |   32 +
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java                        |    2 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TParkingRecordService.java          |   15 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java                        |   12 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TParkingRecordMapper.java            |   13 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TShoppingOrderMapper.java                          |    4 
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml                                |  336 ++++++++++++++++++
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkLotRecordVO.java                |   20 +
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java                  |  154 ++++++++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingStatisticsQueryDto.java                       |    2 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingWorkVO.java                                |   23 +
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingDetailQueryDto.java                           |   23 +
 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml                  |  168 +++++++++
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkLotRecordCountVo.java           |   19 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java    |   80 ++++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java  |    4 
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml                                |   27 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java           |    2 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java     |   10 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordQueryDto.java              |   18 +
 26 files changed, 1,036 insertions(+), 9 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java
index ff0b238..c85317a 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java
@@ -28,6 +28,10 @@
     @PostMapping(value = "/t-charging-pile/getChargingPileBySiteId")
     R<List<TChargingPile>> getChargingPileBySiteId(@RequestParam("siteId") Integer siteId);
 
+    @ApiOperation(value = "获取站点列表")
+    @PostMapping(value = "/t-charging-pile/getChargingPileBySiteIds")
+    R<List<TChargingPile>> getChargingPileBySiteIds(@RequestParam("siteIds") List<Integer> siteIds);
+
     /**
      * 小程序远程调用 根据会员折扣、预付金额 计算服务费
      * @return
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkLotRecordCountVo.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkLotRecordCountVo.java
new file mode 100644
index 0000000..ccf9eb4
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkLotRecordCountVo.java
@@ -0,0 +1,19 @@
+package com.ruoyi.chargingPile.api.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class TParkLotRecordCountVo {
+    @ApiModelProperty("从左到右依次")
+    int count1;
+    int count2;
+    int count3;
+    int count4;
+    BigDecimal count5;
+
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkLotRecordVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkLotRecordVO.java
new file mode 100644
index 0000000..2e4a0f5
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkLotRecordVO.java
@@ -0,0 +1,20 @@
+package com.ruoyi.chargingPile.api.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class TParkLotRecordVO {
+    @ApiModelProperty("上方折线图")
+    List<Map<String,Object>> maps;
+    @ApiModelProperty("车辆类型饼图")
+    List<Map<String,Object>> carColor;
+    @ApiModelProperty("出场类型")
+    List<Map<String,Object>> outType;
+    @ApiModelProperty("进场充电占比")
+    List<Map<String,Object>> isCharge;
+
+}
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingUserEquimentVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingUserEquimentVO.java
new file mode 100644
index 0000000..29c7b90
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingUserEquimentVO.java
@@ -0,0 +1,25 @@
+package com.ruoyi.order.api.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class TCharingUserEquimentVO {
+    @ApiModelProperty("直流可用率")
+    List<Map<String,Object>> equipmentMap1;
+    @ApiModelProperty("交流可用率")
+    List<Map<String,Object>> equipmentMap2;
+    @ApiModelProperty("直流故障率")
+    List<Map<String,Object>> equipmentMapbroke1;
+    @ApiModelProperty("交流故障率")
+    List<Map<String,Object>> equipmentMapbroke2;
+    @ApiModelProperty("直流离网率")
+    List<Map<String,Object>> equipmentMapOut1;
+    @ApiModelProperty("交流离网率")
+    List<Map<String,Object>> equipmentMapOut2;
+    @ApiModelProperty("需求电流满足率")
+    List<Map<String,Object>> needElec;
+}
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingWorkVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingWorkVO.java
new file mode 100644
index 0000000..f661876
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TCharingWorkVO.java
@@ -0,0 +1,23 @@
+package com.ruoyi.order.api.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class TCharingWorkVO {
+    @ApiModelProperty("订单数量")
+    int count;
+    @ApiModelProperty("充电总收入")
+    BigDecimal totalPaymentAmount;
+    @ApiModelProperty("充电电费")
+    BigDecimal totalElectrovalence;
+    @ApiModelProperty("累计服务费")
+    BigDecimal totalServiceCharge;
+    @ApiModelProperty("充电度数综合")
+    BigDecimal totalChargingCapacity;
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
index b5de0af..b237c1f 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -94,7 +94,12 @@
         return R.ok(chargingPileService.list(Wrappers.lambdaQuery(TChargingPile.class)
                 .eq(TChargingPile::getSiteId,siteId)));
     }
-	
+
+	@PostMapping(value = "/getChargingPileBySiteIds")
+	public R<List<TChargingPile>> getChargingPileBySiteIds(@RequestParam("siteIds") List<Integer> siteIds) {
+		return R.ok(chargingPileService.list(Wrappers.lambdaQuery(TChargingPile.class)
+				.in(!siteIds.isEmpty(),TChargingPile::getSiteId,siteIds)));
+	}
 	
 	@ResponseBody
 	@GetMapping("/pageChargingPileList")
@@ -161,7 +166,8 @@
 		ChargeMonitoring chargeMonitoring = chargingPileService.chargeMonitoring(siteId);
 		return AjaxResult.success(chargeMonitoring);
 	}
-	
+
+
 	@ResponseBody
 	@GetMapping("/getChargingGunCountMonitoring/{siteId}")
 	@ApiOperation(value = "获取充电枪各种状态汇总监控数据", tags = {"管理后台-充电设备监控"})
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
index fec52ef..dc6ca04 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
@@ -8,10 +8,9 @@
 import com.ruoyi.chargingPile.api.model.TParkingLot;
 import com.ruoyi.chargingPile.api.model.TParkingRecord;
 import com.ruoyi.chargingPile.api.query.ParkingRecordQuery;
-import com.ruoyi.chargingPile.api.vo.GetParkingRecord;
-import com.ruoyi.chargingPile.api.vo.TParkingRecordPageInfoVO;
-import com.ruoyi.chargingPile.api.vo.TParkingRecordVO;
+import com.ruoyi.chargingPile.api.vo.*;
 import com.ruoyi.chargingPile.dto.ParkingRecordPageQuery;
+import com.ruoyi.chargingPile.dto.ParkingRecordQueryDto;
 import com.ruoyi.chargingPile.export.TParkingRecordExport;
 import com.ruoyi.chargingPile.service.TParkingLotService;
 import com.ruoyi.chargingPile.service.TParkingRecordService;
@@ -23,6 +22,7 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.order.api.query.TOrderInvoiceQuery;
+import com.ruoyi.order.api.vo.TCharingUserEquimentVO;
 import com.ruoyi.order.api.vo.TOrderInvoiceVO;
 import io.swagger.annotations.ApiOperation;
 import org.apache.poi.ss.usermodel.Workbook;
@@ -33,9 +33,12 @@
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -179,5 +182,76 @@
     public void addParkingRecord(@RequestBody TParkingRecord parkingRecord){
         parkingRecordService.save(parkingRecord);
     }
+
+    @ResponseBody
+    @PostMapping(value = "/parking/data")
+    @ApiOperation(value = "统计", tags = {"管理后台-数据分析-车场运营分析"})
+    public R<TParkLotRecordVO> data(@RequestBody ParkingRecordQueryDto parkingRecordQueryDto){
+        //上方折线图
+        TParkLotRecordVO tParkLotRecordVO = new TParkLotRecordVO();
+
+        if (parkingRecordQueryDto.getDayType()==1) {
+            List<Map<String, Object>> maps = parkingRecordService.parkingData(parkingRecordQueryDto);
+            tParkLotRecordVO.setMaps(maps);
+        }else {
+            List<Map<String, Object>> maps = parkingRecordService.parkingDataByDate(parkingRecordQueryDto);
+            tParkLotRecordVO.setMaps(maps);
+        }
+
+        //车辆类型饼图
+        List<Map<String, Object>> carColor  =   parkingRecordService.getCarColor(parkingRecordQueryDto);
+
+        //出场类型
+        List<Map<String, Object>> outType  =   parkingRecordService.getOutType(parkingRecordQueryDto);
+
+        //进场充电占比
+        List<Map<String, Object>> isCharge  =   parkingRecordService.getIsCharge(parkingRecordQueryDto);
+
+
+        tParkLotRecordVO.setCarColor(carColor);
+        tParkLotRecordVO.setOutType(outType);
+        tParkLotRecordVO.setIsCharge(isCharge);
+        return R.ok(tParkLotRecordVO);
+
+    }
+
+
+    @ResponseBody
+    @PostMapping(value = "/parking/work")
+    @ApiOperation(value = "停车订单统计", tags = {"管理后台-工作台"})
+    public R<TParkLotRecordCountVo> work(@RequestBody ParkingRecordQueryDto parkingRecordQueryDto){
+        List<TParkingRecord> list = parkingRecordService.lambdaQuery().eq(parkingRecordQueryDto.getParkingLotId() != null, TParkingRecord::getParkingLotId, parkingRecordQueryDto.getParkingLotId())
+                .between(TParkingRecord::getCreateTime, parkingRecordQueryDto.getStartTime(), parkingRecordQueryDto.getEndTime()).list();
+        int count1 = list.size();
+        //统计出list中chargingOrderId为null的数据个数
+        int count2 = list.stream().filter(item -> item.getChargingOrderId() == null).collect(Collectors.toList()).size();
+        int count3 = count1-count2;
+        //计算出list中parkingDuration的总和
+        int count4 = 0;
+        for (TParkingRecord tParkingRecord : list) {
+            count4 = count4+tParkingRecord.getParkingDuration();
+        }
+        //计算出list中orderAmount的总和
+        BigDecimal count5 = list.stream().map(TParkingRecord::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        TParkLotRecordCountVo tParkLotRecordCountVo = new TParkLotRecordCountVo();
+        tParkLotRecordCountVo.setCount1(count1);
+        tParkLotRecordCountVo.setCount2(count2);
+        tParkLotRecordCountVo.setCount3(count3);
+        tParkLotRecordCountVo.setCount4(count4);
+        tParkLotRecordCountVo.setCount5(count5);
+
+        return R.ok(tParkLotRecordCountVo);
+
+    }
+
+    @ResponseBody
+    @PostMapping(value = "/parking/income")
+    @ApiOperation(value = "停车收入统计", tags = {"管理后台-工作台"})
+    public R income(@RequestBody ParkingRecordQueryDto parkingRecordQueryDto){
+
+       List<Map<String,Object>>  maps =  parkingRecordService.income(parkingRecordQueryDto);
+        return R.ok(maps);
+    }
 }
 
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordQueryDto.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordQueryDto.java
new file mode 100644
index 0000000..2cecb9d
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordQueryDto.java
@@ -0,0 +1,18 @@
+package com.ruoyi.chargingPile.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Data
+public class ParkingRecordQueryDto {
+    @ApiModelProperty("停车场Id")
+    private Integer parkingLotId;
+    @ApiModelProperty("1今日2本周3本月4今年5自定义")
+    private Integer dayType;
+    @ApiModelProperty("开始时间")
+    private LocalDate startTime;
+    @ApiModelProperty("结束时间")
+    private LocalDate endTime;
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TParkingRecordMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TParkingRecordMapper.java
index d0b6ced..256234b 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TParkingRecordMapper.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TParkingRecordMapper.java
@@ -5,12 +5,14 @@
 import com.ruoyi.chargingPile.api.query.ParkingRecordQuery;
 import com.ruoyi.chargingPile.api.vo.TParkingRecordPageInfoVO;
 import com.ruoyi.chargingPile.api.vo.TParkingRecordVO;
+import com.ruoyi.chargingPile.dto.ParkingRecordQueryDto;
 import com.ruoyi.common.core.web.page.PageInfo;
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -39,4 +41,15 @@
      */
     TParkingRecordPageInfoVO getParkingRecordCount(@Param("query")ParkingRecordQuery query);
 
+    List<Map<String, Object>> parkingData(@Param("parkingRecordQueryDto") ParkingRecordQueryDto parkingRecordQueryDto);
+
+    List<Map<String, Object>> parkingDataByDate(@Param("parkingRecordQueryDto")ParkingRecordQueryDto parkingRecordQueryDto);
+
+    List<Map<String, Object>> getCarColor(@Param("parkingRecordQueryDto")ParkingRecordQueryDto parkingRecordQueryDto);
+
+    List<Map<String, Object>> getOutType(@Param("parkingRecordQueryDto")ParkingRecordQueryDto parkingRecordQueryDto);
+
+    List<Map<String, Object>> getIsCharge(@Param("parkingRecordQueryDto")ParkingRecordQueryDto parkingRecordQueryDto);
+
+    List<Map<String, Object>> income(@Param("parkingRecordQueryDto")ParkingRecordQueryDto parkingRecordQueryDto);
 }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java
index 0246a3e..c25a254 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java
@@ -89,7 +89,7 @@
 	 * @return
 	 */
 	ChargeMonitoring chargeMonitoring(Integer siteId);
-	
+
 	
 	/**
 	 * 获取充电枪各种状态汇总
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TParkingRecordService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TParkingRecordService.java
index 9479008..b0eafce 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TParkingRecordService.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TParkingRecordService.java
@@ -4,10 +4,13 @@
 import com.ruoyi.chargingPile.api.model.TParkingRecord;
 import com.ruoyi.chargingPile.api.query.ParkingRecordQuery;
 import com.ruoyi.chargingPile.api.vo.TParkingRecordPageInfoVO;
+import com.ruoyi.chargingPile.dto.ParkingRecordQueryDto;
 import com.ruoyi.common.core.web.page.PageInfo;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -27,4 +30,16 @@
      * @return
      */
     TParkingRecordPageInfoVO pageList(ParkingRecordQuery query);
+
+    List<Map<String, Object>> parkingData(ParkingRecordQueryDto parkingRecordQueryDto);
+
+    List<Map<String, Object>> parkingDataByDate(ParkingRecordQueryDto parkingRecordQueryDto);
+
+    List<Map<String, Object>> getCarColor(ParkingRecordQueryDto parkingRecordQueryDto);
+
+    List<Map<String, Object>> getOutType(ParkingRecordQueryDto parkingRecordQueryDto);
+
+    List<Map<String, Object>> getIsCharge(ParkingRecordQueryDto parkingRecordQueryDto);
+
+    List<Map<String, Object>> income(ParkingRecordQueryDto parkingRecordQueryDto);
 }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
index 00e72b4..e41add3 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -344,7 +344,9 @@
 		chargeMonitoring.setUtilizationTrend(utilizationTrend);
 		return chargeMonitoring;
 	}
-	
+
+
+
 	/**
 	 * 获取充电枪各种状态汇总
 	 * @param siteId 站点id
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java
index f897f64..119f6ac 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java
@@ -10,6 +10,7 @@
 import com.ruoyi.chargingPile.api.vo.TParkingRecordPageInfoVO;
 import com.ruoyi.chargingPile.api.vo.TParkingRecordVO;
 import com.ruoyi.chargingPile.domain.SiteMenu;
+import com.ruoyi.chargingPile.dto.ParkingRecordQueryDto;
 import com.ruoyi.chargingPile.mapper.SiteMapper;
 import com.ruoyi.chargingPile.mapper.TParkingLotMapper;
 import com.ruoyi.chargingPile.mapper.TParkingRecordMapper;
@@ -21,6 +22,7 @@
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
@@ -73,4 +75,34 @@
         infoVO.setParkingRecordVOS(pageInfo);
         return infoVO;
     }
+
+    @Override
+    public List<Map<String, Object>> parkingData(ParkingRecordQueryDto parkingRecordQueryDto) {
+        return this.baseMapper.parkingData(parkingRecordQueryDto);
+    }
+
+    @Override
+    public List<Map<String, Object>> parkingDataByDate(ParkingRecordQueryDto parkingRecordQueryDto) {
+        return this.baseMapper.parkingDataByDate(parkingRecordQueryDto);
+    }
+
+    @Override
+    public List<Map<String, Object>> getCarColor(ParkingRecordQueryDto parkingRecordQueryDto) {
+        return this.baseMapper.getCarColor(parkingRecordQueryDto);
+    }
+
+    @Override
+    public List<Map<String, Object>> getOutType(ParkingRecordQueryDto parkingRecordQueryDto) {
+        return this.baseMapper.getOutType(parkingRecordQueryDto);
+    }
+
+    @Override
+    public List<Map<String, Object>> getIsCharge(ParkingRecordQueryDto parkingRecordQueryDto) {
+        return this.baseMapper.getIsCharge(parkingRecordQueryDto);
+    }
+
+    @Override
+    public List<Map<String, Object>> income(ParkingRecordQueryDto parkingRecordQueryDto) {
+        return this.baseMapper.income(parkingRecordQueryDto);
+    }
 }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml
index bebe052..c2a81d1 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml
@@ -82,5 +82,173 @@
         group by create_time
         ORDER BY create_time DESC
     </select>
+    <select id="parkingData" resultType="java.util.Map">
+        SELECT
+            DATE_FORMAT( create_time, '%Y-%m-%d %H' ) AS TIME,
+	count( 1 ) AS orders,
+	SUM( timeout_amount ) AS timeoutAmount
+        FROM
+            t_parking_record
+        where DATE(create_time ) = CURDATE()
+        <if test="parkingRecordQueryDto.parkingLotId !=null">
+            AND parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
+        </if>
+        GROUP BY
+            TIME
+        ORDER BY
+            TIME
+    </select>
+    <select id="parkingDataByDate" resultType="java.util.Map">
+        SELECT
+            DATE_FORMAT( create_time, '%Y-%m-%d' ) AS TIME,
+	count( 1 ) AS orders,
+	SUM( timeout_amount ) AS timeoutAmount
+        FROM
+            t_parking_record
+        <where>
+            <if test="parkingRecordQueryDto.parkingLotId !=null">
+                AND parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
+            </if>
+            <if test="parkingRecordQueryDto.dayType == 2">
+                AND WEEKOFYEAR( co.create_time ) = WEEKOFYEAR( CURDATE() )
+            </if>
+            <if test="parkingRecordQueryDto.dayType == 3">
+                AND MONTH( co.create_time ) = MONTH(CURDATE())
+            </if>
+            <if test="parkingRecordQueryDto.dayType == 4">
+                AND YEAR( co.create_time ) = YEAR(CURDATE() )
+            </if>
+            <if test="parkingRecordQueryDto.dayType == 5">
+                <if test="parkingRecordQueryDto.startTime != null">
+                    AND co.create_time >= #{parkingRecordQueryDto.startTime}
+                </if>
+                <if test="parkingRecordQueryDto.endTime != null">
+                    AND co.create_time &lt;= #{parkingRecordQueryDto.endTime}
+                </if>
+            </if>
+        </where>
+        GROUP BY
+            TIME
+        ORDER BY
+            TIME
+
+
+    </select>
+    <select id="getCarColor" resultType="java.util.Map">
+        SELECT
+            vehicle_color,count(1) as counts
+        FROM
+            t_parking_record
+        <where>
+            <if test="parkingRecordQueryDto.parkingLotId !=null">
+                AND parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
+            </if>
+        <if test="parkingRecordQueryDto.dayType == 1">
+            AND DATE( create_time ) = CURDATE()
+        </if>
+        <if test="parkingRecordQueryDto.dayType == 2">
+            AND WEEKOFYEAR( co.create_time ) = WEEKOFYEAR( CURDATE() )
+        </if>
+        <if test="parkingRecordQueryDto.dayType == 3">
+            AND MONTH( co.create_time ) = MONTH(CURDATE())
+        </if>
+        <if test="parkingRecordQueryDto.dayType == 4">
+            AND YEAR( co.create_time ) = YEAR(CURDATE() )
+        </if>
+        <if test="parkingRecordQueryDto.dayType == 5">
+            <if test="parkingRecordQueryDto.startTime != null">
+                AND co.create_time >= #{parkingRecordQueryDto.startTime}
+            </if>
+            <if test="parkingRecordQueryDto.endTime != null">
+                AND co.create_time &lt;= #{parkingRecordQueryDto.endTime}
+            </if>
+        </if>
+        </where>
+        GROUP BY vehicle_color
+
+    </select>
+    <select id="getOutType" resultType="java.util.Map">
+        SELECT
+            out_parking_type,count(1) as counts
+        FROM
+            t_parking_record
+        <where>
+            <if test="parkingRecordQueryDto.parkingLotId !=null">
+                AND parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
+            </if>
+            <if test="parkingRecordQueryDto.dayType == 1">
+                AND DATE( create_time ) = CURDATE()
+            </if>
+            <if test="parkingRecordQueryDto.dayType == 2">
+                AND WEEKOFYEAR( co.create_time ) = WEEKOFYEAR( CURDATE() )
+            </if>
+            <if test="parkingRecordQueryDto.dayType == 3">
+                AND MONTH( co.create_time ) = MONTH(CURDATE())
+            </if>
+            <if test="parkingRecordQueryDto.dayType == 4">
+                AND YEAR( co.create_time ) = YEAR(CURDATE() )
+            </if>
+            <if test="parkingRecordQueryDto.dayType == 5">
+                <if test="parkingRecordQueryDto.startTime != null">
+                    AND co.create_time >= #{parkingRecordQueryDto.startTime}
+                </if>
+                <if test="parkingRecordQueryDto.endTime != null">
+                    AND co.create_time &lt;= #{parkingRecordQueryDto.endTime}
+                </if>
+            </if>
+        </where>
+        GROUP BY out_parking_type
+    </select>
+    <select id="getIsCharge" resultType="java.util.Map">
+        SELECT
+            CASE
+                WHEN charging_order_id IS NOT NULL THEN 'WithChargingOrder'
+                ELSE 'WithoutChargingOrder'
+                END AS order_status,
+            COUNT(*) AS counts
+        FROM
+            `t_parking_record`
+        <where>
+            <if test="parkingRecordQueryDto.parkingLotId !=null">
+                AND parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
+            </if>
+            <if test="parkingRecordQueryDto.dayType == 1">
+                AND DATE( create_time ) = CURDATE()
+            </if>
+            <if test="parkingRecordQueryDto.dayType == 2">
+                AND WEEKOFYEAR( co.create_time ) = WEEKOFYEAR( CURDATE() )
+            </if>
+            <if test="parkingRecordQueryDto.dayType == 3">
+                AND MONTH( co.create_time ) = MONTH(CURDATE())
+            </if>
+            <if test="parkingRecordQueryDto.dayType == 4">
+                AND YEAR( co.create_time ) = YEAR(CURDATE() )
+            </if>
+            <if test="parkingRecordQueryDto.dayType == 5">
+                <if test="parkingRecordQueryDto.startTime != null">
+                    AND co.create_time >= #{parkingRecordQueryDto.startTime}
+                </if>
+                <if test="parkingRecordQueryDto.endTime != null">
+                    AND co.create_time &lt;= #{parkingRecordQueryDto.endTime}
+                </if>
+            </if>
+        </where>
+        GROUP BY
+            order_status
+    </select>
+    <select id="income" resultType="java.util.Map">
+        SELECT sum(pr.order_amount) as amount,pl.name
+        from t_parking_record pr
+                 LEFT JOIN t_parking_lot pl on pr.parking_lot_id = pl.id
+        <where>
+            <if test="parkingRecordQueryDto.parkingLotId !=null">
+                AND pr.parking_lot_id = #{parkingRecordQueryDto.parkingLotId}
+            </if>
+
+            AND DATE( pr.create_time ) between #{parkingRecordQueryDto.startTime} and #{parkingRecordQueryDto.endTime}
+
+        </where>
+        GROUP  BY pl.name
+    </select>
 
 </mapper>
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
index 8362c2c..f011021 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -3,6 +3,7 @@
 import com.google.common.collect.Lists;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -583,6 +584,16 @@
     }
 
     @ResponseBody
+    @GetMapping(value = "/work/shop")
+    @ApiOperation(value = "购物收入", tags = {"后台-工作台"})
+    public R workShop(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) {
+        //count近6个月的数据
+        LocalDate sixBefore = PreviousSixMonths.get();
+        List<Map<String,Object >> shopData =  shoppingOrderService.getData(statisticsQueryDto);
+        return R.ok(shopData);
+    }
+
+    @ResponseBody
     @GetMapping(value = "/six/vip")
     @ApiOperation(value = "vip收入", tags = {"后台-数据分析-平台收入分析"})
     public R<List<SixVipDto>> vip() {
@@ -866,7 +877,7 @@
     @ResponseBody
     @PostMapping(value = "/charging/equipment")
     @ApiOperation(value = "电站评价", tags = {"管理后台-数据分析-设备运维分析"})
-    public R<TCharingUserEvaluateVO> equipment(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto){
+    public R<TCharingUserEquimentVO> equipment(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto){
         List<Integer> siteIds =new ArrayList<>();
         if (statisticsQueryDto.getSiteId()==null) {
             Long userId = SecurityUtils.getUserId();
@@ -893,11 +904,152 @@
 
 
         //需求电流满足率
+        List<Map<String,Object>>  needElec =  chargingOrderService.needElec(siteIds,statisticsQueryDto);
 
+        TCharingUserEquimentVO tCharingUserEquimentVO = new TCharingUserEquimentVO();
+        tCharingUserEquimentVO.setEquipmentMap1(equipmentMap1);
+        tCharingUserEquimentVO.setEquipmentMap2(equipmentMap2);
+        tCharingUserEquimentVO.setEquipmentMapbroke1(equipmentMapbroke1);
+        tCharingUserEquimentVO.setEquipmentMapbroke2(equipmentMapbroke2);
+        tCharingUserEquimentVO.setEquipmentMapOut1(equipmentMapOut1);
+        tCharingUserEquimentVO.setEquipmentMapOut2(equipmentMapOut2);
+        tCharingUserEquimentVO.setNeedElec(needElec);
+        return R.ok(tCharingUserEquimentVO);
+    }
+
+
+    @ResponseBody
+    @PostMapping(value = "/work/charge")
+    @ApiOperation(value = "上方充电数据统计", tags = {"管理后台-工作台"})
+    public R<TCharingWorkVO> workCharge(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) {
+        List<Integer> siteIds = new ArrayList<>();
+        if (statisticsQueryDto.getSiteId() == null) {
+            Long userId = SecurityUtils.getUserId();
+            //获取当前登录的siteIds
+            List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+            for (GetSiteListDTO datum : data) {
+                siteIds.add(datum.getId());
+            }
+        } else {
+            siteIds.add(statisticsQueryDto.getSiteId());
+        }
+        List<TChargingOrder> list = chargingOrderService.lambdaQuery().in(!siteIds.isEmpty(), TChargingOrder::getSiteId, siteIds).eq(statisticsQueryDto.getSiteId() != null, TChargingOrder::getSiteId, statisticsQueryDto.getSiteId()).list();
+        //当日的订单总数
+        int size = list.size();
+        //计算list中paymentAmount的总和
+        BigDecimal totalPaymentAmount = list.stream().map(TChargingOrder::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        //计算list中electrovalence的总和
+        BigDecimal totalElectrovalence = list.stream().map(TChargingOrder::getElectrovalence).reduce(BigDecimal.ZERO, BigDecimal::add);
+        //计算list中serviceCharge的总和
+        BigDecimal totalServiceCharge = list.stream().map(TChargingOrder::getServiceCharge).reduce(BigDecimal.ZERO, BigDecimal::add);
+        //计算list中charging_capacity的总和
+        BigDecimal totalChargingCapacity = list.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+        TCharingWorkVO tCharingWorkVO = new TCharingWorkVO();
+        tCharingWorkVO.setCount(size);
+        tCharingWorkVO.setTotalPaymentAmount(totalPaymentAmount);
+        tCharingWorkVO.setTotalElectrovalence(totalElectrovalence);
+        tCharingWorkVO.setTotalServiceCharge(totalServiceCharge);
+        tCharingWorkVO.setTotalChargingCapacity(totalChargingCapacity);
+        return R.ok(tCharingWorkVO);
+    }
+
+
+
+    @ResponseBody
+    @PostMapping(value = "/work/chargeDetail")
+    @ApiOperation(value = "运营情况", tags = {"管理后台-工作台"})
+    public R workCharge(@RequestBody ChargingDetailQueryDto statisticsQueryDto) {
+        List<Integer> siteIds = new ArrayList<>();
+        if (statisticsQueryDto.getSiteId() == null) {
+            Long userId = SecurityUtils.getUserId();
+            //获取当前登录的siteIds
+            List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+            for (GetSiteListDTO datum : data) {
+                siteIds.add(datum.getId());
+            }
+        } else {
+            siteIds.add(statisticsQueryDto.getSiteId());
+        }
+        if (statisticsQueryDto.getDayType()==1) {
+          List<Map<String,Object>> charMap = chargingOrderService.getHourType(siteIds,statisticsQueryDto);
+          return R.ok(charMap);
+        }else if (statisticsQueryDto.getDayType()==2){
+            List<Map<String,Object>> charMap =  chargingOrderService.getDateType(siteIds,statisticsQueryDto);
+            return R.ok(charMap);
+        }else if (statisticsQueryDto.getDayType()==3){
+            List<Map<String,Object>> charMap =  chargingOrderService.getMonthType(siteIds,statisticsQueryDto);
+        }
+
+        return R.ok();
 
 
     }
 
+    @ResponseBody
+    @PostMapping(value = "/work/use")
+    @ApiOperation(value = "运营情况", tags = {"管理后台-工作台"})
+    public R workUse(@RequestBody ChargingDetailQueryDto statisticsQueryDto) {
+        List<Integer> siteIds = new ArrayList<>();
+        if (statisticsQueryDto.getSiteId() == null) {
+            Long userId = SecurityUtils.getUserId();
+            //获取当前登录的siteIds
+            List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+            for (GetSiteListDTO datum : data) {
+                siteIds.add(datum.getId());
+            }
+        } else {
+            siteIds.add(statisticsQueryDto.getSiteId());
+        }
+       List<Map<String,Object>>   capMap  =   chargingOrderService.getchargingCapacity(siteIds,statisticsQueryDto);
+        List<TChargingPile> chargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData();
+        //获取chargingPiles的ratedPower的总和再乘以chargingPiles的数量再乘以24
+        BigDecimal totalRatedPower = chargingPiles.stream().map(TChargingPile::getRatedPower).reduce(BigDecimal.ZERO, BigDecimal::add).multiply(new BigDecimal(chargingPiles.size())).multiply(new BigDecimal(24));
+
+        //将capMap的chargingCapacity除以totalRatedPower保留两位数
+        capMap.forEach(map -> {
+            BigDecimal chargingCapacity = (BigDecimal) map.get("chargingCapacity");
+            BigDecimal result = chargingCapacity.divide(totalRatedPower, 2, RoundingMode.HALF_UP);
+            map.put("chargingCapacity", result);
+        });
+        return R.ok(capMap);
+
+
+    }
+
+    @Resource
+    private TOrderInvoiceService invoiceService;
+    @ResponseBody
+    @PostMapping(value = "/work/shopOrder")
+    @ApiOperation(value = "购物订单统计", tags = {"管理后台-工作台"})
+    public R shopOrder(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) {
+        Long count = shoppingOrderService.lambdaQuery().eq(TShoppingOrder::getStatus, 1).count();
+        Long count1 = shoppingOrderService.lambdaQuery().eq(TShoppingOrder::getStatus, 2).count();
+        List<Long> counts = new ArrayList<>();
+        counts.add(count);
+        counts.add(count1);
+        return R.ok(counts);
+    }
+
+    @ResponseBody
+    @PostMapping(value = "/work/invoice")
+    @ApiOperation(value = "开票统计", tags = {"管理后台-工作台"})
+    public R invoice(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) {
+        Long count = invoiceService.lambdaQuery().eq(TOrderInvoice::getStatus, 1).count();
+        Long count1 = invoiceService.lambdaQuery().eq(TOrderInvoice::getStatus, 3).count();
+        List<Long> counts = new ArrayList<>();
+        counts.add(count);
+        counts.add(count1);
+        return R.ok(counts);
+    }
+
+    @ResponseBody
+    @PostMapping(value = "/work/users/count")
+    @ApiOperation(value = "用户数量", tags = {"管理后台-工作台"})
+    public R usersCount(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) {
+       List<Map<String,Object>>  userMap  =    chargingOrderService.countAllUserData();
+            return R.ok(userMap);
+
+    }
     public static void main(String[] args) {
         // 示例数据
         List<TChargingOrder> list = getSampleData();
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingDetailQueryDto.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingDetailQueryDto.java
new file mode 100644
index 0000000..adb5ac8
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingDetailQueryDto.java
@@ -0,0 +1,23 @@
+package com.ruoyi.order.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Data
+public class ChargingDetailQueryDto {
+    @ApiModelProperty("电站id")
+    private Integer siteId;
+    @ApiModelProperty("1时2日3月")
+    private Integer dayType;
+    @ApiModelProperty("1开始或2结束")
+    private Integer type;
+    @ApiModelProperty("时用Date")
+    private LocalDate hourDate;
+    @ApiModelProperty("开始时间")
+    private LocalDate startTime;
+    @ApiModelProperty("结束时间")
+    private LocalDate endTime;
+
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingStatisticsQueryDto.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingStatisticsQueryDto.java
index c75710d..7e70f9a 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingStatisticsQueryDto.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingStatisticsQueryDto.java
@@ -15,4 +15,6 @@
     private LocalDate startTime;
     @ApiModelProperty("结束时间")
     private LocalDate endTime;
+    @ApiModelProperty("工作台用查询参数")
+    private LocalDate selectDate;
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
index 5866e8f..b86d8b1 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
@@ -121,4 +121,16 @@
 	List<Map<String, Object>> equipmentMapOut1(@Param("siteIds")List<Integer> siteIds, @Param("statisticsQueryDto")ChargingStatisticsQueryDto statisticsQueryDto);
 
 	List<Map<String, Object>> equipmentMapOut2(@Param("siteIds")List<Integer> siteIds,@Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto);
+
+	List<Map<String, Object>> needElec(@Param("siteIds")List<Integer> siteIds, @Param("statisticsQueryDto")ChargingStatisticsQueryDto statisticsQueryDto);
+
+	List<Map<String, Object>> getHourType(@Param("siteIds")List<Integer> siteIds, @Param("statisticsQueryDto")ChargingDetailQueryDto statisticsQueryDto);
+
+	List<Map<String, Object>> getDateType(@Param("siteIds")List<Integer> siteIds,@Param("statisticsQueryDto") ChargingDetailQueryDto statisticsQueryDto);
+
+	List<Map<String, Object>> getMonthType(@Param("siteIds")List<Integer> siteIds, @Param("statisticsQueryDto")ChargingDetailQueryDto statisticsQueryDto);
+
+	List<Map<String, Object>> getchargingCapacity(@Param("siteIds")List<Integer> siteIds,@Param("statisticsQueryDto") ChargingDetailQueryDto statisticsQueryDto);
+
+	List<Map<String, Object>> countAllUserData();
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TShoppingOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TShoppingOrderMapper.java
index 4dd50d6..262c3e1 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TShoppingOrderMapper.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TShoppingOrderMapper.java
@@ -6,6 +6,7 @@
 import com.ruoyi.order.api.query.ShoppingOrderQuery;
 import com.ruoyi.order.api.query.TActivityStatisticsQuery;
 import com.ruoyi.order.api.vo.TActivityStatisticslVO;
+import com.ruoyi.order.dto.ChargingStatisticsQueryDto;
 import com.ruoyi.order.dto.SixShopDto;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -13,6 +14,7 @@
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -44,4 +46,6 @@
     List<SixShopDto> sixBefore(@Param("sixBefore")LocalDate sixBefore,@Param("status") Integer status);
 
     BigDecimal getSumAmount(@Param("sixBefore")LocalDate sixBefore);
+
+    List<Map<String, Object>> getData(@Param("statisticsQueryDto")ChargingStatisticsQueryDto statisticsQueryDto);
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
index 0ab5dc4..7ca2197 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -214,4 +214,16 @@
 	List<Map<String, Object>> equipmentMapOut1(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto);
 
 	List<Map<String, Object>> equipmentMapOut2(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto);
+
+	List<Map<String, Object>> needElec(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto);
+
+	List<Map<String, Object>> getHourType(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto);
+
+	List<Map<String, Object>> getDateType(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto);
+
+	List<Map<String, Object>> getMonthType(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto);
+
+	List<Map<String, Object>> getchargingCapacity(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto);
+
+	List<Map<String, Object>> countAllUserData();
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java
index 0412e97..09a7d53 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java
@@ -80,4 +80,6 @@
     List<SixShopDto> sixBefore(LocalDate sixBefore, Integer status);
 
     BigDecimal getSumAmount(LocalDate sixBefore);
+
+    List<Map<String, Object>> getData(ChargingStatisticsQueryDto statisticsQueryDto);
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
index 239c34f..691fcb5 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -2132,6 +2132,36 @@
 		return this.baseMapper.equipmentMapOut2(siteIds,statisticsQueryDto);
 	}
 
+	@Override
+	public List<Map<String, Object>> needElec(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
+		return this.baseMapper.needElec(siteIds,statisticsQueryDto);
+	}
+
+	@Override
+	public List<Map<String, Object>> getHourType(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
+		return this.baseMapper.getHourType(siteIds,statisticsQueryDto);
+	}
+
+	@Override
+	public List<Map<String, Object>> getDateType(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
+		return this.baseMapper.getDateType(siteIds,statisticsQueryDto);
+	}
+
+	@Override
+	public List<Map<String, Object>> getMonthType(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
+		return this.baseMapper.getMonthType(siteIds,statisticsQueryDto);
+	}
+
+	@Override
+	public List<Map<String, Object>> getchargingCapacity(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
+		return this.baseMapper.getchargingCapacity(siteIds,statisticsQueryDto);
+	}
+
+	@Override
+	public List<Map<String, Object>> countAllUserData() {
+		return this.baseMapper.countAllUserData();
+	}
+
 	public static void main(String[] args) {
 //		String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
 //		String format1 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
index cb41922..5dbf254 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
@@ -547,5 +547,10 @@
         return this.baseMapper.getSumAmount(sixBefore);
     }
 
+    @Override
+    public List<Map<String, Object>> getData(ChargingStatisticsQueryDto statisticsQueryDto) {
+        return this.baseMapper.getData(statisticsQueryDto);
+    }
+
 
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
index 485f264..5a1e339 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -908,6 +908,26 @@
                 #{siteId}
             </foreach>
         </if>
+        <if test="statisticsQueryDto.dayType == 1">
+            AND DATE( co.create_time ) = CURDATE()
+        </if>
+        <if test="statisticsQueryDto.dayType == 2">
+            AND WEEKOFYEAR( co.create_time ) = WEEKOFYEAR( CURDATE() )
+        </if>
+        <if test="statisticsQueryDto.dayType == 3">
+            AND MONTH( co.create_time ) = MONTH(CURDATE())
+        </if>
+        <if test="statisticsQueryDto.dayType == 4">
+            AND YEAR( co.create_time ) = YEAR(CURDATE() )
+        </if>
+        <if test="statisticsQueryDto.dayType == 5">
+            <if test="statisticsQueryDto.startTime != null">
+                AND co.create_time >= #{statisticsQueryDto.startTime}
+            </if>
+            <if test="statisticsQueryDto.endTime != null">
+                AND co.create_time &lt;= #{statisticsQueryDto.endTime}
+            </if>
+        </if>
         GROUP BY tc.name,cp.name,co.charging_gun_id
 
 
@@ -948,6 +968,26 @@
                 #{siteId}
             </foreach>
         </if>
+        <if test="statisticsQueryDto.dayType == 1">
+            AND DATE( co.create_time ) = CURDATE()
+        </if>
+        <if test="statisticsQueryDto.dayType == 2">
+            AND WEEKOFYEAR( co.create_time ) = WEEKOFYEAR( CURDATE() )
+        </if>
+        <if test="statisticsQueryDto.dayType == 3">
+            AND MONTH( co.create_time ) = MONTH(CURDATE())
+        </if>
+        <if test="statisticsQueryDto.dayType == 4">
+            AND YEAR( co.create_time ) = YEAR(CURDATE() )
+        </if>
+        <if test="statisticsQueryDto.dayType == 5">
+            <if test="statisticsQueryDto.startTime != null">
+                AND co.create_time >= #{statisticsQueryDto.startTime}
+            </if>
+            <if test="statisticsQueryDto.endTime != null">
+                AND co.create_time &lt;= #{statisticsQueryDto.endTime}
+            </if>
+        </if>
         GROUP BY tc.name,cp.name,co.charging_gun_id
 
 
@@ -979,6 +1019,32 @@
                 LEFT JOIN  `charging_pile_service`.`t_charging_pile` cp on tc.charging_pile_id = cp.id
         WHERE
             co.down_time IS NOT NULL AND co.end_time IS NOT NULL and cp.type = 1 and co.status =2
+        <if test="siteIds != null and siteIds.size() > 0">
+            and co.site_id IN
+            <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
+                #{siteId}
+            </foreach>
+        </if>
+        <if test="statisticsQueryDto.dayType == 1">
+            AND DATE( co.create_time ) = CURDATE()
+        </if>
+        <if test="statisticsQueryDto.dayType == 2">
+            AND WEEKOFYEAR( co.create_time ) = WEEKOFYEAR( CURDATE() )
+        </if>
+        <if test="statisticsQueryDto.dayType == 3">
+            AND MONTH( co.create_time ) = MONTH(CURDATE())
+        </if>
+        <if test="statisticsQueryDto.dayType == 4">
+            AND YEAR( co.create_time ) = YEAR(CURDATE() )
+        </if>
+        <if test="statisticsQueryDto.dayType == 5">
+            <if test="statisticsQueryDto.startTime != null">
+                AND co.create_time >= #{statisticsQueryDto.startTime}
+            </if>
+            <if test="statisticsQueryDto.endTime != null">
+                AND co.create_time &lt;= #{statisticsQueryDto.endTime}
+            </if>
+        </if>
         GROUP BY tc.name,cp.name,co.charging_gun_id
 
 
@@ -1010,6 +1076,32 @@
         LEFT JOIN  `charging_pile_service`.`t_charging_pile` cp on tc.charging_pile_id = cp.id
         WHERE
         co.down_time IS NOT NULL AND co.end_time IS NOT NULL and cp.type = 2 and co.status =2
+        <if test="siteIds != null and siteIds.size() > 0">
+            and co.site_id IN
+            <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
+                #{siteId}
+            </foreach>
+        </if>
+        <if test="statisticsQueryDto.dayType == 1">
+            AND DATE( co.create_time ) = CURDATE()
+        </if>
+        <if test="statisticsQueryDto.dayType == 2">
+            AND WEEKOFYEAR( co.create_time ) = WEEKOFYEAR( CURDATE() )
+        </if>
+        <if test="statisticsQueryDto.dayType == 3">
+            AND MONTH( co.create_time ) = MONTH(CURDATE())
+        </if>
+        <if test="statisticsQueryDto.dayType == 4">
+            AND YEAR( co.create_time ) = YEAR(CURDATE() )
+        </if>
+        <if test="statisticsQueryDto.dayType == 5">
+            <if test="statisticsQueryDto.startTime != null">
+                AND co.create_time >= #{statisticsQueryDto.startTime}
+            </if>
+            <if test="statisticsQueryDto.endTime != null">
+                AND co.create_time &lt;= #{statisticsQueryDto.endTime}
+            </if>
+        </if>
         GROUP BY tc.name,cp.name,co.charging_gun_id
 
 
@@ -1041,6 +1133,32 @@
         LEFT JOIN  `charging_pile_service`.`t_charging_pile` cp on tc.charging_pile_id = cp.id
         WHERE
         co.down_time IS NOT NULL AND co.end_time IS NOT NULL and cp.type = 1 and co.status =1
+        <if test="siteIds != null and siteIds.size() > 0">
+            and co.site_id IN
+            <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
+                #{siteId}
+            </foreach>
+        </if>
+        <if test="statisticsQueryDto.dayType == 1">
+            AND DATE( co.create_time ) = CURDATE()
+        </if>
+        <if test="statisticsQueryDto.dayType == 2">
+            AND WEEKOFYEAR( co.create_time ) = WEEKOFYEAR( CURDATE() )
+        </if>
+        <if test="statisticsQueryDto.dayType == 3">
+            AND MONTH( co.create_time ) = MONTH(CURDATE())
+        </if>
+        <if test="statisticsQueryDto.dayType == 4">
+            AND YEAR( co.create_time ) = YEAR(CURDATE() )
+        </if>
+        <if test="statisticsQueryDto.dayType == 5">
+            <if test="statisticsQueryDto.startTime != null">
+                AND co.create_time >= #{statisticsQueryDto.startTime}
+            </if>
+            <if test="statisticsQueryDto.endTime != null">
+                AND co.create_time &lt;= #{statisticsQueryDto.endTime}
+            </if>
+        </if>
         GROUP BY tc.name,cp.name,co.charging_gun_id
     </select>
     <select id="equipmentMapOut2" resultType="java.util.Map">
@@ -1070,7 +1188,225 @@
         LEFT JOIN  `charging_pile_service`.`t_charging_pile` cp on tc.charging_pile_id = cp.id
         WHERE
         co.down_time IS NOT NULL AND co.end_time IS NOT NULL and cp.type = 2 and co.status =1
+        <if test="siteIds != null and siteIds.size() > 0">
+            and co.site_id IN
+            <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
+                #{siteId}
+            </foreach>
+        </if>
+        <if test="statisticsQueryDto.dayType == 1">
+            AND DATE( co.create_time ) = CURDATE()
+        </if>
+        <if test="statisticsQueryDto.dayType == 2">
+            AND WEEKOFYEAR( co.create_time ) = WEEKOFYEAR( CURDATE() )
+        </if>
+        <if test="statisticsQueryDto.dayType == 3">
+            AND MONTH( co.create_time ) = MONTH(CURDATE())
+        </if>
+        <if test="statisticsQueryDto.dayType == 4">
+            AND YEAR( co.create_time ) = YEAR(CURDATE() )
+        </if>
+        <if test="statisticsQueryDto.dayType == 5">
+            <if test="statisticsQueryDto.startTime != null">
+                AND co.create_time >= #{statisticsQueryDto.startTime}
+            </if>
+            <if test="statisticsQueryDto.endTime != null">
+                AND co.create_time &lt;= #{statisticsQueryDto.endTime}
+            </if>
+        </if>
         GROUP BY tc.name,cp.name,co.charging_gun_id
 
     </select>
+    <select id="needElec" resultType="java.util.Map">
+        SELECT
+            FORMAT((SUM(co.current) / SUM(co.need_elec)), 2) AS percent,
+            co.charging_gun_id,
+            tc.name,
+            cp.name AS gun_name
+        FROM
+            `charging_pile_order`.`t_charging_order` co
+                LEFT JOIN `charging_pile_service`.`t_charging_gun` tc ON co.charging_gun_id = tc.id
+                LEFT JOIN `charging_pile_service`.`t_charging_pile` cp ON tc.charging_pile_id = cp.id
+        <where>
+            <if test="siteIds != null and siteIds.size() > 0">
+                and co.site_id IN
+                <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
+                    #{siteId}
+                </foreach>
+            </if>
+            <if test="statisticsQueryDto.dayType == 1">
+                AND DATE( co.create_time ) = CURDATE()
+            </if>
+            <if test="statisticsQueryDto.dayType == 2">
+                AND WEEKOFYEAR( co.create_time ) = WEEKOFYEAR( CURDATE() )
+            </if>
+            <if test="statisticsQueryDto.dayType == 3">
+                AND MONTH( co.create_time ) = MONTH(CURDATE())
+            </if>
+            <if test="statisticsQueryDto.dayType == 4">
+                AND YEAR( co.create_time ) = YEAR(CURDATE() )
+            </if>
+            <if test="statisticsQueryDto.dayType == 5">
+                <if test="statisticsQueryDto.startTime != null">
+                    AND co.create_time >= #{statisticsQueryDto.startTime}
+                </if>
+                <if test="statisticsQueryDto.endTime != null">
+                    AND co.create_time &lt;= #{statisticsQueryDto.endTime}
+                </if>
+            </if>
+        </where>
+        GROUP BY
+            tc.name,
+            cp.name,
+            co.charging_gun_id;
+
+
+    </select>
+    <select id="getHourType" resultType="java.util.Map">
+        SELECT
+            DATE_FORMAT(
+        <if test="statisticsQueryDto.type == 1">
+            start_time
+        </if>
+        <if test="statisticsQueryDto.type == 2">
+            end_time
+        </if>
+        , '%Y-%m-%d %H' ) as time,
+	SUM(service_charge) as servicecharge,
+	SUM(electrovalence) as electrovalence,
+    count(1) as orderCount
+        FROM
+            t_charging_order
+
+        WHERE     del_flag = 0 and recharge_payment_status = 2  and DATE(
+        <if test="statisticsQueryDto.type == 1">
+            start_time
+        </if>
+        <if test="statisticsQueryDto.type == 2">
+            end_time
+        </if>
+        ) = #{statisticsQueryDto.hourDate}
+        <if test="siteIds != null and siteIds.size() > 0">
+            and site_id IN
+            <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
+                #{siteId}
+            </foreach>
+        </if>
+        GROUP BY
+            time
+        ORDER BY
+            time
+    </select>
+    <select id="getDateType" resultType="java.util.Map">
+        SELECT
+        DATE_FORMAT(
+        <if test="statisticsQueryDto.type == 1">
+            start_time
+        </if>
+        <if test="statisticsQueryDto.type == 2">
+            end_time
+        </if>
+        , '%Y-%m-%d' ) as time,
+        SUM(service_charge) as servicecharge,
+        SUM(electrovalence) as electrovalence,
+        count(1) as orderCount
+        FROM
+        t_charging_order
+
+        WHERE     del_flag = 0 and recharge_payment_status = 2  and DATE(
+        <if test="statisticsQueryDto.type == 1">
+            start_time
+        </if>
+        <if test="statisticsQueryDto.type == 2">
+            end_time
+        </if>
+        ) between #{statisticsQueryDto.startTime} and #{statisticsQueryDto.endTime}
+        <if test="siteIds != null and siteIds.size() > 0">
+            and site_id IN
+            <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
+                #{siteId}
+            </foreach>
+        </if>
+        GROUP BY
+        time
+        ORDER BY
+        time
+    </select>
+    <select id="getMonthType" resultType="java.util.Map">
+        SELECT
+        DATE_FORMAT(
+        <if test="statisticsQueryDto.type == 1">
+            start_time
+        </if>
+        <if test="statisticsQueryDto.type == 2">
+            end_time
+        </if>
+        , '%Y-%m' ) as time,
+        SUM(service_charge) as servicecharge,
+        SUM(electrovalence) as electrovalence,
+        count(1) as orderCount
+        FROM
+        t_charging_order
+
+        WHERE     del_flag = 0 and recharge_payment_status = 2  and DATE(
+        <if test="statisticsQueryDto.type == 1">
+            start_time
+        </if>
+        <if test="statisticsQueryDto.type == 2">
+            end_time
+        </if>
+        ) between #{statisticsQueryDto.startTime} and #{statisticsQueryDto.endTime}
+        <if test="siteIds != null and siteIds.size() > 0">
+            and site_id IN
+            <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
+                #{siteId}
+            </foreach>
+        </if>
+        GROUP BY
+        time
+        ORDER BY
+        time
+
+
+    </select>
+    <select id="getchargingCapacity" resultType="java.util.Map">
+        SELECT
+            DATE_FORMAT( create_time, '%Y-%m-%d %H' ) as time,
+	SUM(charging_capacity) as chargingCapacity
+        FROM
+            t_charging_order
+        WHERE     del_flag = 0 and recharge_payment_status = 2
+        <if test="statisticsQueryDto.dayType == 1">
+            AND DATE( create_time ) between #{statisticsQueryDto.startTime} and #{statisticsQueryDto.endTime}
+        </if>
+        GROUP BY
+            time
+        ORDER BY
+            time
+    </select>
+    <select id="countAllUserData" resultType="java.util.Map">
+        SELECT
+            COUNT( DISTINCT app_user_id ) AS counts,
+            '1' AS type
+        FROM
+            `charging_pile_order`.`t_charging_order` UNION ALL
+        SELECT
+            COUNT(*) AS counts,
+            '2' AS type
+        FROM
+            `charging_pile_account`.`t_app_user`
+        WHERE
+            `vip_end_time` > NOW()
+
+        UNION ALL
+        SELECT
+            COUNT(*) AS counts,
+            '3' AS type
+        FROM
+            `charging_pile_account`.`t_app_user`
+        WHERE
+            del_flag = 0
+
+
+    </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml
index 4aa2f35..d19a9f2 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml
@@ -292,4 +292,31 @@
             and DATE_FORMAT(create_time, '%Y-%m-%d') &gt;= DATE_FORMAT(#{sixBefore}, '%Y-%m-%d')
         </if>
     </select>
+    <select id="getData" resultType="java.util.Map">
+
+        SELECT
+        DATE_FORMAT( subquery.create_time, '%Y-%m-%d' ) AS MONTH,
+        count(1) AS orderNum,
+        SUM(payment_amount) AS paymentAmount
+        FROM
+        (
+        SELECT
+        create_time,
+        payment_amount
+        FROM
+        t_shopping_order
+        <where>
+            WHERE del_flag = 0 and payment_status = 2 and ISNULL(refund_status) and status!=4
+
+                DATE_FORMAT(create_time, '%Y-%m-%d') between #{statisticsQueryDto.startTime} and #{statisticsQueryDto.endTime}
+
+
+        </where>
+
+        ) AS subquery
+        GROUP BY
+        DATE_FORMAT( subquery.create_time, '%Y-%m-%d' );
+
+
+    </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
index 6c6629d..a7cad6f 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
@@ -185,6 +185,7 @@
         //检查当前用户积分是否够
         Long userId = tokenService.getLoginUserApplet().getUserId();
         Integer point = 0;
+        TAppUser user = appUserClient.getUserById(userId).getData();
 
         if (exchangeDto.getGoodType()==1) {
             //查询当前商品信息
@@ -195,7 +196,6 @@
             if (good.getLimitExchangeTimes() != -1 && count >= good.getLimitExchangeTimes()) {
                 return AjaxResult.error("当前用户已兑换"+count+"张");
             }
-        TAppUser user = appUserClient.getUserById(userId).getData();
         if (user.getPoints()<good.getRedeemPoints()){
             return AjaxResult.error("当前用户积分不足");
              }
@@ -207,6 +207,9 @@
             if (coupon.getInventoryQuantity() != -1 && count >= coupon.getInventoryQuantity()) {
                 return AjaxResult.error("当前用户已到达兑换"+coupon+"次");
             }
+            if (user.getPoints()<point){
+                return AjaxResult.error("当前用户积分不足");
+            }
         }
         exchangeDto.setPoint(point);
         exchangeDto.setUserId(userId);

--
Gitblit v1.7.1