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