From 7a4f9541331bef779a506b38a27ed5c3373c0bec Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 15 五月 2025 13:53:22 +0800
Subject: [PATCH] 开发二级等保功能及心跳消息队列修改

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java              |  153 +++++++++--
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderSummaryDataMapper.java              |   11 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java                         |    2 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderSummaryDataServiceImpl.java   |   15 +
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderSummaryDataMapper.xml                    |    5 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java                            |    1 
 /dev/null                                                                                                        |   60 -----
 ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml                                    |    3 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITChargingOrderSummaryDataService.java           |   11 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java                       |    3 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderSummaryData.java                 |   55 ++++
 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java             |    6 
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml                               |   95 ++++---
 ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java                                             |   24 --
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java |   31 ++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java                 |  188 ++++++++-------
 16 files changed, 409 insertions(+), 254 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderSummaryData.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderSummaryData.java
new file mode 100644
index 0000000..6cd7af5
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderSummaryData.java
@@ -0,0 +1,55 @@
+package com.ruoyi.order.api.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/9 11:35
+ */
+@Data
+@TableName("t_charging_order_summary_data")
+public class TChargingOrderSummaryData {
+	/**
+	 * 主键
+	 */
+	@TableId(value = "id", type = IdType.NONE)
+	private Long id;
+	/**
+	 * 充电订单id
+	 */
+	@TableField("charging_order_id")
+	private Long chargingOrderId;
+	/**
+	 * 充电时长(s)
+	 */
+	@TableField("charging_duration")
+	private Long chargingDuration;
+	/**
+	 * 充电度数
+	 */
+	@TableField("charging_capacity")
+	private BigDecimal chargingCapacity;
+	/**
+	 * 收入
+	 */
+	@TableField("income")
+	private BigDecimal income;
+	/**
+	 * 电费
+	 */
+	@TableField("electric_price")
+	private BigDecimal electricPrice;
+	/**
+	 * 服务费
+	 */
+	@TableField("service_price")
+	private BigDecimal servicePrice;
+	
+	
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
index 432952c..672f09f 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -61,13 +61,9 @@
 		claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId);
 		claimsMap.put(SecurityConstants.USER_TYPE, "system");
 		claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName);
-		
-		String token1 = JwtUtils.createToken(claimsMap);
-		String userKey = getUserKey(loginUser.getUserid());
-		redisService.setCacheObject(userKey, token1, expireTime, TimeUnit.MINUTES);
 		// 接口返回信息
 		Map<String, Object> rspMap = new HashMap<String, Object>();
-		rspMap.put("access_token", token1);
+		rspMap.put("access_token", JwtUtils.createToken(claimsMap));
 		rspMap.put("expires_in", expireTime);
 		return rspMap;
 	}
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
index 77ff10d..2a9d1a6 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
@@ -87,11 +87,6 @@
 		addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid);
 		addHeader(mutate, SecurityConstants.DETAILS_USERNAME, username);
 		addHeader(mutate, SecurityConstants.USER_TYPE, userType);
-		//管理后台记录用户最后一次的操作时间,用于判定30分钟无操作后删除token,退出登录
-		if("system".equals(userType)){
-			addLastTime(userid, url);
-		}
-		
 		// 内部请求来源参数清除
 		removeHeader(mutate, SecurityConstants.FROM_SOURCE);
 		return chain.filter(exchange.mutate().request(mutate.build()).build());
@@ -113,25 +108,6 @@
 	private Mono<Void> unauthorizedResponse(ServerWebExchange exchange, String msg) {
 		log.error("[鉴权异常处理]请求路径:{}", exchange.getRequest().getPath() + "\n" + msg);
 		return ServletUtils.webFluxResponseWriter(exchange.getResponse(), msg, HttpStatus.UNAUTHORIZED);
-	}
-	
-	
-	/**
-	 * 记录用户最后一次操作的时间
-	 * @param userid
-	 * @param url
-	 */
-	private void addLastTime(String userid, String url){
-		Object lastTime = redisService.getCacheObject("lastTime:" + userid);
-		if(null == lastTime){
-			redisService.setCacheObject("lastTime:" + userid, System.currentTimeMillis());
-		}else{
-			Long last = Long.valueOf(lastTime.toString());
-			//操作登录或者时间差值小于30分钟,写入新的数据到缓存中
-			if("/auth/login".equals(url) || System.currentTimeMillis() - last < 1800000L){
-				redisService.setCacheObject("lastTime:" + userid, System.currentTimeMillis());
-			}
-		}
 	}
 	
 	
diff --git a/ruoyi-gateway/src/main/resources/banner.txt b/ruoyi-gateway/src/main/resources/banner.txt
deleted file mode 100644
index ceced29..0000000
--- a/ruoyi-gateway/src/main/resources/banner.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Spring Boot Version: ${spring-boot.version}
-Spring Application Name: ${spring.application.name}
-                            _                        _                                 
-                           (_)                      | |                                
- _ __  _   _   ___   _   _  _  ______   __ _   __ _ | |_   ___ __      __  __ _  _   _ 
-| '__|| | | | / _ \ | | | || ||______| / _` | / _` || __| / _ \\ \ /\ / / / _` || | | |
-| |   | |_| || (_) || |_| || |        | (_| || (_| || |_ |  __/ \ V  V / | (_| || |_| |
-|_|    \__,_| \___/  \__, ||_|         \__, | \__,_| \__| \___|  \_/\_/   \__,_| \__, |
-                      __/ |             __/ |                                     __/ |
-                     |___/             |___/                                     |___/ 
\ No newline at end of file
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java
index c23ae19..1edc201 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java
@@ -19,7 +19,6 @@
 @MapperScan({"com.ruoyi.system.mapper"})
 @EnableCustomSwagger2
 @EnableRyFeignClients
-@EnableScheduling//开启定时任务
 @SpringBootApplication
 @EnableTransactionManagement
 public class RuoYiSystemApplication
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/TaskUtil.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/TaskUtil.java
deleted file mode 100644
index 31c030d..0000000
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/TaskUtil.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.ruoyi.system.util;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.ruoyi.common.core.utils.JwtUtils;
-import com.ruoyi.common.redis.service.RedisService;
-import com.ruoyi.common.security.auth.AuthUtil;
-import com.ruoyi.system.api.domain.SysUser;
-import com.ruoyi.system.service.ISysUserService;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.util.List;
-
-
-/**
- * @author zhibing.pu
- * @date 2023/7/11 8:39
- */
-@Component
-public class TaskUtil {
-    
-    @Resource
-    private ISysUserService sysUserService;
-    
-    @Resource
-    private RedisService redisService;
-    
-    
-    /**
-     * 每分钟检测后台用户是否有30分钟未进行操作
-     */
-    @Scheduled(fixedRate = 60000)
-    public void taskLogout() {
-        List<SysUser> list = sysUserService.list(new LambdaQueryWrapper<SysUser>().eq(SysUser::getDelFlag, "0").eq(SysUser::getStatus, "0"));
-        for (SysUser sysUser : list) {
-            Object lastTime = redisService.getCacheObject("lastTime:" + sysUser.getUserId());
-            if(null == lastTime){
-                Object cacheObject = redisService.getCacheObject("login_tokens:" + sysUser.getUserId());
-                if(null != cacheObject){
-                    String token = cacheObject.toString();
-                    // 删除用户缓存记录
-                    AuthUtil.logoutByToken(token);
-                }
-            }else{
-                Long last = Long.valueOf(lastTime.toString());
-                //操作登录或者时间差值小于30分钟,写入新的数据到缓存中
-                if(System.currentTimeMillis() - last >= 1800000L){
-                    Object cacheObject = redisService.getCacheObject("login_tokens:" + sysUser.getUserId());
-                    if(null != cacheObject){
-                        String token = cacheObject.toString();
-                        // 删除用户缓存记录
-                        AuthUtil.logoutByToken(token);
-                    }
-                }
-            }
-        }
-    }
-
-}
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index 47651b2..f18227b 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -24,6 +24,7 @@
         <result property="updateTime"   column="update_time"  />
 	    <result property="forbiddenRemark"           column="forbidden_remark"/>
         <result property="remark"       column="remark"       />
+	    <result property="passWordUpdate"       column="passWordUpdate"       />
         <result property="roleType"       column="roleType"       />
         <result property="objectId"       column="objectId"       />
         <association property="dept"    column="dept_id" javaType="com.ruoyi.system.api.domain.SysDept" resultMap="deptResult" />
@@ -49,7 +50,7 @@
     </resultMap>
 	
 	<sql id="selectUserVo">
-        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, 
+        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.passWordUpdate,
         d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
         r.role_id, r.role_name, r.role_key, r.data_scope, r.status as role_status ,u.roleType as roleType,u.objectId AS objectId
         from sys_user u
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
index e45fa9b..14214bf 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
@@ -4,7 +4,9 @@
 import com.alibaba.fastjson.JSONObject;
 import com.ruoyi.chargingPile.api.dto.CheckChargingStrategyDTO;
 import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient;
+import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
 import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail;
+import com.ruoyi.chargingPile.api.vo.UpdateChargingPileStatusVo;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.integration.api.model.*;
@@ -21,6 +23,7 @@
 import org.apache.rocketmq.client.producer.SendResult;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -30,6 +33,7 @@
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 /**
  * iotda消息监听
@@ -47,6 +51,12 @@
     private IotMessageProduce iotMessageProduce;
     @Resource
     private AccountingStrategyDetailClient accountingStrategyDetailClient;
+    
+    @Resource
+    private RedisTemplate redisTemplate;
+    
+    @Resource
+    private ChargingPileClient chargingPileClient;
     
     
     
@@ -99,7 +109,10 @@
                 break;
             case SendTagConstant.PING:
                 PingMessage pingMessage = JSON.parseObject(content.toJSONString(),PingMessage.class);
-                sendResult = enhanceProduce.pingMessage(pingMessage);
+                //存储缓存中,5分钟有效
+                redisTemplate.opsForValue().set("ping:" + pingMessage.getCharging_pile_code() + pingMessage.getCharging_gun_code(), pingMessage, 5, TimeUnit.MINUTES);
+                sendResult = null;
+//                sendResult = enhanceProduce.pingMessage(pingMessage);
 //                chargingMessage.setPingMessage(pingMessage);
 //                chargingMessageUtil.handleMessage(chargingMessage);
                 // 响应硬件
@@ -108,6 +121,22 @@
                 pong.setCharging_gun_code(pingMessage.getCharging_gun_code());
                 pong.setCharging_gun_status(0);
                 iotMessageProduce.sendMessage(pong.getCharging_pile_code(), ServiceIdMenu.PONG.getKey(), messageUtil.pong(pong));
+    
+                UpdateChargingPileStatusVo vo1 = new UpdateChargingPileStatusVo();
+                vo1.setGun_code(pingMessage.getCharging_gun_code());
+                vo1.setPile_code(pingMessage.getCharging_pile_code());
+                vo1.setStatus(pingMessage.getCharging_gun_status());
+                chargingPileClient.updateChargingPileStatus(vo1);
+                // 监管平台推送充电设备状态
+                String gunCode = pingMessage.getCharging_pile_code() + pingMessage.getCharging_gun_code();
+                ChargingMessage chargingMessage1 = new ChargingMessage();
+                chargingMessage1.setServiceId(SendTagConstant.GUN_STATUS);
+                GunStatusMessage gunStatusMessage = new GunStatusMessage();
+                gunStatusMessage.setFullNumber(gunCode);
+                chargingMessage1.setGunStatusMessage(gunStatusMessage);
+                sendResult = enhanceProduce.gunStatusMessage(chargingMessage1);
+                
+                
 //                sendResult = enhanceProduce.chargingMessage(chargingMessage);
                 break;
             case SendTagConstant.END_CHARGE:
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 57fa139..2838c76 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
@@ -1943,100 +1943,104 @@
     @PostMapping(value = "/work/chargeDetail")
     @ApiOperation(value = "运营情况", tags = {"管理后台-工作台"})
     public R workCharge(@RequestBody ChargingDetailQueryDto statisticsQueryDto) {
-        List<Integer> siteIds = new ArrayList<>();
-        if (statisticsQueryDto.getSiteId() == null) {
-            Long userId = tokenService.getLoginUser().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>> charMap1 = chargingOrderService.getHourType(siteIds,statisticsQueryDto);
-            List<Map<String, Object>> charMap = new ArrayList<>();
-            // 生成从 "00:00" 到 "23:00" 的时间数据
-            for (int hour = 0; hour < 24; hour++) {
-                String time = String.format("%02d:00", hour);
-                 Map<String, Object> mapWithTimeValue = findMapWithTimeValue(charMap1, time);
-                if (mapWithTimeValue!=null){
-                    charMap.add(mapWithTimeValue);
-                }else {
-                    Map<String, Object> timeMap = new HashMap<>();
-                    timeMap.put("time", time); // 初始化值为 null
-                    timeMap.put("electrovalence", 0);
-                    timeMap.put("orderCount", 0);
-                    timeMap.put("servicecharge", 0);
-                    timeMap.put("electricity", 0);
-                    charMap.add(timeMap);
+        try {
+            List<Integer> siteIds = new ArrayList<>();
+            if (statisticsQueryDto.getSiteId() == null) {
+                Long userId = tokenService.getLoginUser().getUserid();
+                //获取当前登录的siteIds
+                List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+                for (GetSiteListDTO datum : data) {
+                    siteIds.add(datum.getId());
                 }
+            } else {
+                siteIds.add(statisticsQueryDto.getSiteId());
             }
-          return R.ok(charMap);
-        }else if (statisticsQueryDto.getDayType()==2){
-            // 假设 chargingOrderService.getDateType() 返回的是按天的数据
-            List<Map<String, Object>> charMap1 = chargingOrderService.getDateType(siteIds, statisticsQueryDto);
-
-            // 解析 startTime 和 endTime 为 LocalDate
-            LocalDate startDate = statisticsQueryDto.getStartTime();
-            LocalDate endDate = statisticsQueryDto.getEndTime();
-
-            List<Map<String, Object>> dateRangeStatistics = new ArrayList<>();
-
-            // 遍历日期范围
-            while (!startDate.isAfter(endDate)) {
-                String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-                Map<String, Object> dailyStats = findMapWithDateValue(charMap1, formattedDate);
-
-                if (dailyStats != null) {
-                    dateRangeStatistics.add(dailyStats);
-                } else {
-                    Map<String, Object> dateMap = new HashMap<>();
-                    dateMap.put("time", formattedDate);
-                    dateMap.put("electrovalence", 0);
-                    dateMap.put("orderCount", 0);
-                    dateMap.put("servicecharge", 0);
-                    dateMap.put("electricity", 0);
-                    dateRangeStatistics.add(dateMap);
+            if (statisticsQueryDto.getDayType()==1) {
+                List<Map<String,Object>> charMap1 = chargingOrderService.getHourType(siteIds,statisticsQueryDto);
+                List<Map<String, Object>> charMap = new ArrayList<>();
+                // 生成从 "00:00" 到 "23:00" 的时间数据
+                for (int hour = 0; hour < 24; hour++) {
+                    String time = String.format("%02d:00", hour);
+                    Map<String, Object> mapWithTimeValue = findMapWithTimeValue(charMap1, time);
+                    if (mapWithTimeValue!=null){
+                        charMap.add(mapWithTimeValue);
+                    }else {
+                        Map<String, Object> timeMap = new HashMap<>();
+                        timeMap.put("time", time); // 初始化值为 null
+                        timeMap.put("electrovalence", 0);
+                        timeMap.put("orderCount", 0);
+                        timeMap.put("servicecharge", 0);
+                        timeMap.put("electricity", 0);
+                        charMap.add(timeMap);
+                    }
                 }
-
-                // 移动到下一天
-                startDate = startDate.plusDays(1);
-            }
+                return R.ok(charMap);
+            }else if (statisticsQueryDto.getDayType()==2){
+                // 假设 chargingOrderService.getDateType() 返回的是按天的数据
+                List<Map<String, Object>> charMap1 = chargingOrderService.getDateType(siteIds, statisticsQueryDto);
+        
+                // 解析 startTime 和 endTime 为 LocalDate
+                LocalDate startDate = statisticsQueryDto.getStartTime();
+                LocalDate endDate = statisticsQueryDto.getEndTime();
+        
+                List<Map<String, Object>> dateRangeStatistics = new ArrayList<>();
+        
+                // 遍历日期范围
+                while (!startDate.isAfter(endDate)) {
+                    String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                    Map<String, Object> dailyStats = findMapWithDateValue(charMap1, formattedDate);
+            
+                    if (dailyStats != null) {
+                        dateRangeStatistics.add(dailyStats);
+                    } else {
+                        Map<String, Object> dateMap = new HashMap<>();
+                        dateMap.put("time", formattedDate);
+                        dateMap.put("electrovalence", 0);
+                        dateMap.put("orderCount", 0);
+                        dateMap.put("servicecharge", 0);
+                        dateMap.put("electricity", 0);
+                        dateRangeStatistics.add(dateMap);
+                    }
+            
+                    // 移动到下一天
+                    startDate = startDate.plusDays(1);
+                }
 
 //            return dateRangeStatistics;
-            return R.ok(dateRangeStatistics);
-        }else if (statisticsQueryDto.getDayType()==3){
-            List<Map<String,Object>> charMap1 =  chargingOrderService.getMonthType(siteIds,statisticsQueryDto);
-            // 解析 startTime 和 endTime 为 LocalDate
-            LocalDate startDate = statisticsQueryDto.getStartTime();
-            LocalDate endDate = statisticsQueryDto.getEndTime();
-
-            List<Map<String, Object>> dateRangeStatistics = new ArrayList<>();
-
-            // 遍历日期范围
-            while (!startDate.isAfter(endDate)) {
-                String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
-                Map<String, Object> dailyStats = findMapWithDateValue(charMap1, formattedDate);
-
-                if (dailyStats != null) {
-                    dateRangeStatistics.add(dailyStats);
-                } else {
-                    Map<String, Object> dateMap = new HashMap<>();
-                    dateMap.put("time", formattedDate);
-                    dateMap.put("electrovalence", 0);
-                    dateMap.put("orderCount", 0);
-                    dateMap.put("servicecharge", 0);
-                    dateMap.put("electricity", 0);
-                    dateRangeStatistics.add(dateMap);
+                return R.ok(dateRangeStatistics);
+            }else if (statisticsQueryDto.getDayType()==3){
+                List<Map<String,Object>> charMap1 =  chargingOrderService.getMonthType(siteIds,statisticsQueryDto);
+                // 解析 startTime 和 endTime 为 LocalDate
+                LocalDate startDate = statisticsQueryDto.getStartTime();
+                LocalDate endDate = statisticsQueryDto.getEndTime();
+        
+                List<Map<String, Object>> dateRangeStatistics = new ArrayList<>();
+        
+                // 遍历日期范围
+                while (!startDate.isAfter(endDate)) {
+                    String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
+                    Map<String, Object> dailyStats = findMapWithDateValue(charMap1, formattedDate);
+            
+                    if (dailyStats != null) {
+                        dateRangeStatistics.add(dailyStats);
+                    } else {
+                        Map<String, Object> dateMap = new HashMap<>();
+                        dateMap.put("time", formattedDate);
+                        dateMap.put("electrovalence", 0);
+                        dateMap.put("orderCount", 0);
+                        dateMap.put("servicecharge", 0);
+                        dateMap.put("electricity", 0);
+                        dateRangeStatistics.add(dateMap);
+                    }
+            
+                    // 移动到下一天
+                    startDate = startDate.plusMonths(1);
                 }
-
-                // 移动到下一天
-                startDate = startDate.plusMonths(1);
+                return R.ok(dateRangeStatistics);
+        
             }
-            return R.ok(dateRangeStatistics);
-
+        }catch (Exception e){
+            e.printStackTrace();
         }
         return R.ok();
 
@@ -2345,4 +2349,14 @@
         return chargingOrderService.pushOrderInfo(code);
     }
     
+    
+    /**
+     * 添加汇总数据(临时)
+     * @return
+     */
+    @ResponseBody
+    @GetMapping(value = "/addChargingOrderSummaryData")
+    public R addChargingOrderSummaryData(){
+        return chargingOrderService.addChargingOrderSummaryData();
+    }
 }
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 0299e67..397efcf 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
@@ -55,7 +55,7 @@
 	                                        @Param("pageCurr") Integer pageCurr, @Param("pageSize") Integer pageSize);
 
     List<ChargingOrderVO> chargingOrder(@Param("pageInfo") PageInfo<ChargingOrderVO> pageInfo, @Param("req") ChargingOrderQuery dto, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2,@Param("endTime1") String endTime1,@Param("endTime2") String endTime11);
-    List<ChargingOrderVO> chargingOrderNolimit( @Param("req") ChargingOrderQuery dto, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2,@Param("endTime1") String endTime1,@Param("endTime2") String endTime11);
+    Map<String, Object> chargingOrderNolimit( @Param("req") ChargingOrderQuery dto, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2,@Param("endTime1") String endTime1,@Param("endTime2") String endTime11);
 
     List<PayOrderDto> payOrderQuery(@Param("pageInfo")PageInfo<PayOrderDto> pageInfo,@Param("data") PayOrderQueryDto payOrderQueryDto);
 
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderSummaryDataMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderSummaryDataMapper.java
new file mode 100644
index 0000000..13defe6
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderSummaryDataMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.order.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.order.api.model.TChargingOrderSummaryData;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/9 11:39
+ */
+public interface TChargingOrderSummaryDataMapper extends BaseMapper<TChargingOrderSummaryData> {
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITChargingOrderSummaryDataService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITChargingOrderSummaryDataService.java
new file mode 100644
index 0000000..dae6532
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITChargingOrderSummaryDataService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.order.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.order.api.model.TChargingOrderSummaryData;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/9 11:39
+ */
+public interface ITChargingOrderSummaryDataService extends IService<TChargingOrderSummaryData> {
+}
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 a1652ce..3e72100 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
@@ -319,4 +319,7 @@
 	 * @return
 	 */
 	R pushOrderInfo(String code);
+	
+	
+	R addChargingOrderSummaryData();
 }
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 a205fb2..896a517 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
@@ -210,6 +210,9 @@
 	
 	@Resource
 	private TransactionRecordClient transactionRecordClient;
+	
+	@Resource
+	private ITChargingOrderSummaryDataService chargingOrderSummaryDataService;
 
 
 
@@ -1476,42 +1479,50 @@
 //				.eq(TChargingOrderRefund::getRefundStatus,2).list();
 	
 	
-	    List<ChargingOrderVO> list1 = this.baseMapper.chargingOrderNolimit(dto,startTime1,startTime2,endTime1,endTime2);
-		for (ChargingOrderVO chargingOrderVO : list1) {
-			if(null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()){
-				continue;
-			}
-			List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList());
-			BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-			BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-			BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
-			electronicMoney = electronicMoney.add(electronic_reduce);
-			total = total.add(chargingCapacity);
-			if (!chargingOrderVO.getOrderSource().equals(2)) {
-				serviceMoney = serviceMoney.add(service_reduce);
-				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
-			}else{
-				serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
-				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
-			}
-			if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){
-				LocalDateTime startTime = chargingOrderVO.getStartTime();
-				LocalDateTime endTime = chargingOrderVO.getEndTime();
-				// 计算时间差 单位秒
-				long between = ChronoUnit.SECONDS.between(startTime, endTime);
-				time+=between;
-			}
-//			List<TChargingOrderRefund> list2 = chargingOrderRefunds.stream().filter(e -> e.getChargingOrderId() != null && e.getChargingOrderId().equals(chargingOrderVO.getId()))
-//					.collect(Collectors.toList());
-//			for (TChargingOrderRefund tChargingOrderRefund : list2) {
-//				refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount());
+	    Map<String, Object> map = this.baseMapper.chargingOrderNolimit(dto,startTime1,startTime2,endTime1,endTime2);
+//		for (ChargingOrderVO chargingOrderVO : list1) {
+//			if(null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()){
+//				continue;
 //			}
+//			List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList());
+//			BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+//			BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+//			BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+//			electronicMoney = electronicMoney.add(electronic_reduce);
+//			total = total.add(chargingCapacity);
+//			if (!chargingOrderVO.getOrderSource().equals(2)) {
+//				serviceMoney = serviceMoney.add(service_reduce);
+//				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
+//			}else{
+//				serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
+//				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
+//			}
+//			if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){
+//				LocalDateTime startTime = chargingOrderVO.getStartTime();
+//				LocalDateTime endTime = chargingOrderVO.getEndTime();
+//				// 计算时间差 单位秒
+//				long between = ChronoUnit.SECONDS.between(startTime, endTime);
+//				time+=between;
+//			}
+////			List<TChargingOrderRefund> list2 = chargingOrderRefunds.stream().filter(e -> e.getChargingOrderId() != null && e.getChargingOrderId().equals(chargingOrderVO.getId()))
+////					.collect(Collectors.toList());
+////			for (TChargingOrderRefund tChargingOrderRefund : list2) {
+////				refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount());
+////			}
+//		}
+		if(null != map){
+			tCharingOrderVO.setTotal(map.get("total")==null?BigDecimal.ZERO:(BigDecimal) map.get("total"));
+			tCharingOrderVO.setTime(map.get("time")==null?0L:(Long) map.get("time"));
+			tCharingOrderVO.setIncome((map.get("paymentMoney")==null?BigDecimal.ZERO:(BigDecimal) map.get("paymentMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
+			tCharingOrderVO.setElectronicMoney((map.get("electronicMoney")==null?BigDecimal.ZERO:(BigDecimal) map.get("electronicMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
+			tCharingOrderVO.setServiceMoney((map.get("serviceMoney")==null?BigDecimal.ZERO:(BigDecimal) map.get("serviceMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
+		}else{
+			tCharingOrderVO.setTotal(BigDecimal.ZERO);
+			tCharingOrderVO.setTime(0L);
+			tCharingOrderVO.setIncome(BigDecimal.ZERO);
+			tCharingOrderVO.setElectronicMoney(BigDecimal.ZERO);
+			tCharingOrderVO.setServiceMoney(BigDecimal.ZERO);
 		}
-		tCharingOrderVO.setTotal(total);
-		tCharingOrderVO.setTime(time);
-		tCharingOrderVO.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
-		tCharingOrderVO.setElectronicMoney(electronicMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
-		tCharingOrderVO.setServiceMoney(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
 		pageInfo.setRecords(list);
 		tCharingOrderVO.setList(pageInfo);
         return tCharingOrderVO;
@@ -2614,6 +2625,36 @@
 				
 			}
 		}
+		
+		//添加汇总统计数据
+		List<TChargingOrderAccountingStrategy> list4 = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>().eq("charging_order_id", chargingOrder.getId()));
+		BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+		BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+		BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+		BigDecimal serviceMoney = BigDecimal.ZERO;
+		BigDecimal paymentMoney = BigDecimal.ZERO;
+		long time = 0;
+		if (!chargingOrder.getOrderSource().equals(2)) {
+			serviceMoney = serviceMoney.add(service_reduce);
+			paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
+		}else{
+			serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
+			paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
+		}
+		if (chargingOrder.getStartTime()!=null && chargingOrder.getEndTime()!=null){
+			LocalDateTime startTime = chargingOrder.getStartTime();
+			LocalDateTime endTime = chargingOrder.getEndTime();
+			// 计算时间差 单位秒
+			time = ChronoUnit.SECONDS.between(startTime, endTime);
+		}
+		TChargingOrderSummaryData summaryData = new TChargingOrderSummaryData();
+		summaryData.setChargingOrderId(chargingOrder.getId());
+		summaryData.setChargingCapacity(chargingCapacity);
+		summaryData.setChargingDuration(time);
+		summaryData.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+		summaryData.setElectricPrice(electronic_reduce.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+		summaryData.setServicePrice(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+		chargingOrderSummaryDataService.save(summaryData);
 		return R.ok();
 	}
 	
@@ -3979,4 +4020,48 @@
 		tcecClient.notificationChargeOrderInfo(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
 		return R.ok();
 	}
+	
+	
+	
+	
+	public R addChargingOrderSummaryData(){
+		List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
+		List<TChargingOrder> list1 = this.list(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getDelFlag, 0));
+		for (TChargingOrder chargingOrderVO : list1) {
+			if(null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()){
+				continue;
+			}
+			List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList());
+			BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal serviceMoney = new BigDecimal("0");
+			BigDecimal paymentMoney = new BigDecimal("0");
+			if (!chargingOrderVO.getOrderSource().equals(2)) {
+				serviceMoney = serviceMoney.add(service_reduce);
+				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
+			}else{
+				serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
+				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
+			}
+			Long time = 0L;
+			if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){
+				LocalDateTime startTime = chargingOrderVO.getStartTime();
+				LocalDateTime endTime = chargingOrderVO.getEndTime();
+				// 计算时间差 单位秒
+				long between = ChronoUnit.SECONDS.between(startTime, endTime);
+				time+=between;
+			}
+			
+			TChargingOrderSummaryData summaryData = new TChargingOrderSummaryData();
+			summaryData.setChargingOrderId(chargingOrderVO.getId());
+			summaryData.setChargingCapacity(chargingCapacity);
+			summaryData.setChargingDuration(time);
+			summaryData.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+			summaryData.setElectricPrice(electronic_reduce.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+			summaryData.setServicePrice(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+			chargingOrderSummaryDataService.save(summaryData);
+		}
+		return R.ok();
+	}
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderSummaryDataServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderSummaryDataServiceImpl.java
new file mode 100644
index 0000000..c4d03f7
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderSummaryDataServiceImpl.java
@@ -0,0 +1,15 @@
+package com.ruoyi.order.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.order.api.model.TChargingOrderSummaryData;
+import com.ruoyi.order.mapper.TChargingOrderSummaryDataMapper;
+import com.ruoyi.order.service.ITChargingOrderSummaryDataService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/9 11:40
+ */
+@Service
+public class TChargingOrderSummaryDataServiceImpl extends ServiceImpl<TChargingOrderSummaryDataMapper, TChargingOrderSummaryData> implements ITChargingOrderSummaryDataService {
+}
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 d14c23d..193d5fb 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
@@ -1446,46 +1446,56 @@
 
     </select>
     <select id="getHourType" resultType="java.util.Map">
+        select
+        aa.time,
+        sum(aa.servicecharge) as servicecharge,
+        sum(aa.electrovalence) as electrovalence,
+        sum(aa.electricity) as electricity,
+        count(1) as orderCount
+        from (
         SELECT
-            DATE_FORMAT(
+        DATE_FORMAT(
         <if test="statisticsQueryDto.type == 1">
             a.start_time
         </if>
         <if test="statisticsQueryDto.type == 2">
             a.end_time
         </if>
-        , '%H:00' ) as time,
-        SUM(CASE
+        , '%H:00') as time,
+        (CASE
         WHEN a.order_source = 0 THEN b.period_service_price
         WHEN a.order_source = 1 THEN b.period_service_price
         ELSE b.period_service_price * 0.8
         END) as servicecharge,
-        SUM(b.period_electric_price) as electrovalence,
-        SUM(b.charging_capacity) as electricity,
-        count(1) as orderCount
+        (b.period_electric_price) as electrovalence,
+        (b.charging_capacity) as electricity
         FROM
-            t_charging_order a
+        t_charging_order a
         left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(charging_capacity) as charging_capacity, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
-        WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2  and DATE(
+        WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2  and DATE_FORMAT(
         <if test="statisticsQueryDto.type == 1">
             a.create_time
         </if>
         <if test="statisticsQueryDto.type == 2">
             a.end_time
         </if>
-        ) = #{statisticsQueryDto.hourDate}
+        , '%Y-%m-%d') = #{statisticsQueryDto.hourDate}
         <if test="siteIds != null and siteIds.size() > 0">
             and a.site_id IN
             <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
                 #{siteId}
             </foreach>
         </if>
-        GROUP BY
-            time
-        ORDER BY
-            time
+        ) as aa GROUP BY aa.time ORDER BY aa.time
     </select>
     <select id="getDateType" resultType="java.util.Map">
+        select
+        aa.time,
+        sum(aa.servicecharge) as servicecharge,
+        sum(aa.electrovalence) as electrovalence,
+        sum(aa.electricity) as electricity,
+        count(1) as orderCount
+        from (
         SELECT
         DATE_FORMAT(
         <if test="statisticsQueryDto.type == 1">
@@ -1494,38 +1504,41 @@
         <if test="statisticsQueryDto.type == 2">
             a.end_time
         </if>
-        , '%Y-%m-%d' ) as time,
-        SUM(CASE
+        , '%Y-%m-%d') as time,
+        (CASE
         WHEN a.order_source = 0 THEN b.period_service_price
         WHEN a.order_source = 1 THEN b.period_service_price
         ELSE b.period_service_price * 0.8
         END) as servicecharge,
-        SUM(b.period_electric_price) as electrovalence,
-        SUM(b.charging_capacity) as electricity,
-        count(1) as orderCount
+        (b.period_electric_price) as electrovalence,
+        (b.charging_capacity) as electricity
         FROM
         t_charging_order a
         left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(charging_capacity) as charging_capacity, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
-        WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2  and DATE(
+        WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2  and DATE_FORMAT(
         <if test="statisticsQueryDto.type == 1">
             a.start_time
         </if>
         <if test="statisticsQueryDto.type == 2">
             a.end_time
         </if>
-        ) between #{statisticsQueryDto.startTime} and #{statisticsQueryDto.endTime}
+        , '%Y-%m-%d') between #{statisticsQueryDto.startTime} and #{statisticsQueryDto.endTime}
         <if test="siteIds != null and siteIds.size() > 0">
             and a.site_id IN
             <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
                 #{siteId}
             </foreach>
         </if>
-        GROUP BY
-        time
-        ORDER BY
-        time
+        ) as aa GROUP BY aa.time ORDER BY aa.time
     </select>
     <select id="getMonthType" resultType="java.util.Map">
+        select
+        aa.time,
+        sum(aa.servicecharge) as servicecharge,
+        sum(aa.electrovalence) as electrovalence,
+        sum(aa.electricity) as electricity,
+        count(1) as orderCount
+        from (
         SELECT
         DATE_FORMAT(
         <if test="statisticsQueryDto.type == 1">
@@ -1534,38 +1547,32 @@
         <if test="statisticsQueryDto.type == 2">
             a.end_time
         </if>
-        , '%Y-%m' ) as time,
-        SUM(CASE
+        , '%Y-%m') as time,
+        (CASE
         WHEN a.order_source = 0 THEN b.period_service_price
         WHEN a.order_source = 1 THEN b.period_service_price
         ELSE b.period_service_price * 0.8
         END) as servicecharge,
-        SUM(b.period_electric_price) as electrovalence,
-        SUM(b.charging_capacity) as electricity,
-        count(1) as orderCount
+        (b.period_electric_price) as electrovalence,
+        (b.charging_capacity) as electricity
         FROM
         t_charging_order a
         left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(charging_capacity) as charging_capacity, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
-        WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2  and DATE(
+        WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2  and DATE_FORMAT(
         <if test="statisticsQueryDto.type == 1">
             a.start_time
         </if>
         <if test="statisticsQueryDto.type == 2">
             a.end_time
         </if>
-        ) between #{statisticsQueryDto.startTime} and #{statisticsQueryDto.endTime}
+        , '%Y-%m-%d') between #{statisticsQueryDto.startTime} and #{statisticsQueryDto.endTime}
         <if test="siteIds != null and siteIds.size() > 0">
             and a.site_id IN
             <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
                 #{siteId}
             </foreach>
         </if>
-        GROUP BY
-        time
-        ORDER BY
-        time
-
-
+        ) as aa GROUP BY aa.time ORDER BY aa.time
     </select>
     <select id="getchargingCapacity" resultType="java.util.Map">
         SELECT
@@ -1680,8 +1687,16 @@
         </foreach>
         </if>
     </select>
-    <select id="chargingOrderNolimit" resultType="com.ruoyi.order.api.vo.ChargingOrderVO">
-        select t1.*
+    <select id="chargingOrderNolimit" resultType="map">
+        select
+        sum(charging_capacity) as total,
+        sum(charging_duration) as `time`,
+        sum(electric_price) as electronicMoney,
+        sum(income) as paymentMoney,
+        sum(service_price) as serviceMoney
+        from t_charging_order_summary_data
+        where charging_order_id in (
+        select t1.id
         from t_charging_order t1
         where 1=1
         <if test="null != req.code and req.code!=''">
@@ -1730,6 +1745,6 @@
             and (t1.end_time between #{endTime1} and #{endTime2})
         </if>
         and t1.del_flag = 0
-        order by t1.create_time desc
+        )
     </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderSummaryDataMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderSummaryDataMapper.xml
new file mode 100644
index 0000000..189f0a7
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderSummaryDataMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.order.mapper.TChargingOrderSummaryDataMapper">
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.7.1