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