From ec2cbf749e996ed7685ca903be740dae926579dc Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期一, 31 八月 2026 17:05:34 +0800
Subject: [PATCH] 瀹屽杽鍒峰崱鍏呯數璁㈠崟鏌ヨ鎺ュ彛

---
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/CardChargingOrderQuery.java           |   22 +++-
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TCardChargingOrderController.java    |    5 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TCardChargingOrderServiceImpl.java |  102 ++++++++++++++++++++++++-
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TCardChargingOrderService.java          |    5 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TCardChargingOrderMapper.java            |   27 +++++-
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TCardChargingOrderMapper.xml                  |   61 +++++++--------
 6 files changed, 169 insertions(+), 53 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/CardChargingOrderQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/CardChargingOrderQuery.java
index b5c9871..0356c2f 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/CardChargingOrderQuery.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/CardChargingOrderQuery.java
@@ -5,6 +5,8 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 @ApiModel(value = "CardChargingOrderQuery刷卡充电订单查询对象")
 public class CardChargingOrderQuery extends BasePage {
@@ -12,11 +14,11 @@
     @ApiModelProperty("订单编号")
     private String code;
 
-    @ApiModelProperty("充电卡ID(分片键)")
-    private Long cardId;
-
     @ApiModelProperty("充电卡号")
     private String cardNo;
+
+    @ApiModelProperty("站点ids(权限过滤,前端忽略)")
+    private List<Integer> siteIds;
 
     @ApiModelProperty("订单状态")
     private Integer status;
@@ -30,9 +32,15 @@
     @ApiModelProperty("充电枪ID")
     private Integer gunId;
 
-    @ApiModelProperty("开始时间范围")
-    private String startTime;
+    @ApiModelProperty("充电开始时间范围的开始时间")
+    private String startTime1;
 
-    @ApiModelProperty("结束时间范围")
-    private String endTime;
+    @ApiModelProperty("充电开始时间范围的结束时间")
+    private String startTime2;
+
+    @ApiModelProperty("充电结束时间范围的开始时间")
+    private String endTime1;
+
+    @ApiModelProperty("充电结束时间范围的结束时间")
+    private String endTime2;
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TCardChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TCardChargingOrderController.java
index d3b3286..d8fa6ab 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TCardChargingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TCardChargingOrderController.java
@@ -1,8 +1,9 @@
 package com.ruoyi.order.controller;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.order.api.query.CardChargingOrderQuery;
+import com.ruoyi.order.api.vo.ChargingOrderVO;
 import com.ruoyi.order.service.TCardChargingOrderService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -26,7 +27,7 @@
 
     @GetMapping("/list")
     @ApiOperation("刷卡充电订单列表")
-    public R<IPage<Map<String, Object>>> list(CardChargingOrderQuery query) {
+    public R<PageInfo<ChargingOrderVO>> list(CardChargingOrderQuery query) {
         return R.ok(cardChargingOrderService.pageList(query));
     }
 
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TCardChargingOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TCardChargingOrderMapper.java
index 0267763..44a0250 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TCardChargingOrderMapper.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TCardChargingOrderMapper.java
@@ -1,10 +1,9 @@
 package com.ruoyi.order.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.order.api.model.TCardChargingOrder;
 import com.ruoyi.order.api.query.CardChargingOrderQuery;
+import com.ruoyi.order.api.vo.ChargingOrderVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -12,11 +11,31 @@
 
 public interface TCardChargingOrderMapper extends BaseMapper<TCardChargingOrder> {
 
-    IPage<Map<String, Object>> pageList(Page<?> page, @Param("query") CardChargingOrderQuery query);
+    List<ChargingOrderVO> pageList(@Param("query") CardChargingOrderQuery query,
+                                   @Param("startTime1") String startTime1,
+                                   @Param("startTime2") String startTime2,
+                                   @Param("endTime1") String endTime1,
+                                   @Param("endTime2") String endTime2,
+                                   @Param("offset") long offset,
+                                   @Param("pageSize") long pageSize);
 
-    Map<String, Object> summary(@Param("query") CardChargingOrderQuery query);
+    long count(@Param("query") CardChargingOrderQuery query,
+               @Param("startTime1") String startTime1,
+               @Param("startTime2") String startTime2,
+               @Param("endTime1") String endTime1,
+               @Param("endTime2") String endTime2);
+
+    Map<String, Object> summary(@Param("query") CardChargingOrderQuery query,
+                                @Param("startTime1") String startTime1,
+                                @Param("startTime2") String startTime2,
+                                @Param("endTime1") String endTime1,
+                                @Param("endTime2") String endTime2);
 
     List<Map<String, Object>> balanceIncomeDetail(@Param("query") CardChargingOrderQuery query);
 
     List<Map<String, Object>> accountingStrategyList(@Param("chargingOrderId") Long chargingOrderId);
+
+    List<Map<String, Object>> shareIncomeByOrderIds(@Param("orderIds") List<Long> orderIds);
+
+    Map<String, Object> shareIncomeSummaryByOrderIds(@Param("orderIds") List<Long> orderIds);
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TCardChargingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TCardChargingOrderService.java
index df7776e..da02306 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TCardChargingOrderService.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TCardChargingOrderService.java
@@ -1,16 +1,17 @@
 package com.ruoyi.order.service;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.common.core.web.page.PageInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.order.api.model.TCardChargingOrder;
 import com.ruoyi.order.api.query.CardChargingOrderQuery;
+import com.ruoyi.order.api.vo.ChargingOrderVO;
 
 import java.util.List;
 import java.util.Map;
 
 public interface TCardChargingOrderService extends IService<TCardChargingOrder> {
 
-    IPage<Map<String, Object>> pageList(CardChargingOrderQuery query);
+    PageInfo<ChargingOrderVO> pageList(CardChargingOrderQuery query);
 
     Map<String, Object> summary(CardChargingOrderQuery query);
 
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TCardChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TCardChargingOrderServiceImpl.java
index 79bb6c0..8b0a392 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TCardChargingOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TCardChargingOrderServiceImpl.java
@@ -1,30 +1,74 @@
 package com.ruoyi.order.service.impl;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
+import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
+import com.ruoyi.chargingPile.api.feignClient.SiteClient;
+import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
+import com.ruoyi.chargingPile.api.model.TChargingGun;
+import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.order.api.model.TCardChargingOrder;
 import com.ruoyi.order.api.query.CardChargingOrderQuery;
+import com.ruoyi.order.api.vo.ChargingOrderVO;
 import com.ruoyi.order.mapper.TCardChargingOrderMapper;
 import com.ruoyi.order.service.TCardChargingOrderService;
+import com.ruoyi.chargingPile.api.model.Site;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 @Service
 public class TCardChargingOrderServiceImpl extends ServiceImpl<TCardChargingOrderMapper, TCardChargingOrder>
         implements TCardChargingOrderService {
 
+    @Resource
+    private TokenService tokenService;
+    @Resource
+    private SiteClient siteClient;
+    @Resource
+    private ChargingPileClient chargingPileClient;
+    @Resource
+    private ChargingGunClient chargingGunClient;
+
     @Override
-    public IPage<Map<String, Object>> pageList(CardChargingOrderQuery query) {
-        Page<Map<String, Object>> page = new Page<>(query.getPageCurr(), query.getPageSize());
-        return baseMapper.pageList(page, query);
+    public PageInfo<ChargingOrderVO> pageList(CardChargingOrderQuery query) {
+        String[] timeRange = parseTimeRange(query);
+        int pageCurr = query.getPageCurr() == null || query.getPageCurr() < 1 ? 1 : query.getPageCurr();
+        int pageSize = query.getPageSize() == null || query.getPageSize() < 1 ? 50 : query.getPageSize();
+        PageInfo<ChargingOrderVO> pageInfo = new PageInfo<>(pageCurr, pageSize);
+        setAuthSiteIds(query);
+        long offset = (long) (pageCurr - 1) * pageSize;
+        long total = baseMapper.count(query, timeRange[0], timeRange[1], timeRange[2], timeRange[3]);
+        pageInfo.setTotal(total);
+        List<ChargingOrderVO> list = total == 0 ? Collections.emptyList()
+                : baseMapper.pageList(query, timeRange[0], timeRange[1], timeRange[2], timeRange[3], offset, pageSize);
+        fillPageExtra(list);
+        pageInfo.setRecords(list);
+        return pageInfo;
     }
 
     @Override
     public Map<String, Object> summary(CardChargingOrderQuery query) {
-        return baseMapper.summary(query);
+        String[] timeRange = parseTimeRange(query);
+        setAuthSiteIds(query);
+        Map<String, Object> result = baseMapper.summary(query, timeRange[0], timeRange[1], timeRange[2], timeRange[3]);
+        if (result == null) {
+            result = new HashMap<>();
+        }
+        result.putIfAbsent("platformIncome", BigDecimal.ZERO);
+        result.putIfAbsent("partnerIncome", BigDecimal.ZERO);
+        return result;
     }
 
     @Override
@@ -36,4 +80,50 @@
     public List<Map<String, Object>> accountingStrategyList(Long chargingOrderId) {
         return baseMapper.accountingStrategyList(chargingOrderId);
     }
+
+    private void setAuthSiteIds(CardChargingOrderQuery query) {
+        List<Integer> siteIds = new ArrayList<>();
+        if (query.getSiteId() != null) {
+            siteIds.add(query.getSiteId());
+        } else {
+            Long userId = tokenService.getLoginUser().getUserid();
+            if (userId != null) {
+                siteIds = Optional.ofNullable(siteClient.getSiteListByUserId(userId).getData()).orElse(Collections.emptyList())
+                        .stream().map(GetSiteListDTO::getId).collect(Collectors.toList());
+            }
+        }
+        if (siteIds.isEmpty()) {
+            siteIds.add(-1);
+        }
+        query.setSiteIds(siteIds);
+    }
+
+    private void fillPageExtra(List<ChargingOrderVO> list) {
+        if (list == null || list.isEmpty()) {
+            return;
+        }
+        List<Integer> siteIds = list.stream().map(ChargingOrderVO::getSiteId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+        List<Integer> gunIds = list.stream().map(ChargingOrderVO::getChargingGunId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+        Map<Integer, Site> sites = Optional.ofNullable(siteClient.getSiteByIds(siteIds).getData()).orElse(Collections.emptyList()).stream()
+                .collect(Collectors.toMap(Site::getId, item -> item, (a, b) -> a));
+        Map<Integer, TChargingGun> guns = gunIds.isEmpty() ? Collections.emptyMap()
+                : Optional.ofNullable(chargingGunClient.getChargingGunByIds(gunIds).getData()).orElse(Collections.emptyList()).stream()
+                        .collect(Collectors.toMap(TChargingGun::getId, item -> item, (a, b) -> a));
+
+        for (ChargingOrderVO item : list) {
+            Site site = sites.get(item.getSiteId());
+            item.setSiteName(site == null ? null : site.getName());
+            TChargingGun gun = guns.get(item.getChargingGunId());
+            item.setTerminalName(gun == null ? null : gun.getName());
+            if (item.getStartTime() != null && item.getEndTime() != null) {
+                item.setChargingSecond(ChronoUnit.SECONDS.between(item.getStartTime(), item.getEndTime()));
+            }
+            item.setPlatformIncome(BigDecimal.ZERO);
+            item.setPartnerIncome(BigDecimal.ZERO);
+        }
+    }
+
+    private String[] parseTimeRange(CardChargingOrderQuery query) {
+        return new String[]{query.getStartTime1(), query.getStartTime2(), query.getEndTime1(), query.getEndTime2()};
+    }
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TCardChargingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TCardChargingOrderMapper.xml
index d5fa099..877ce4e 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TCardChargingOrderMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TCardChargingOrderMapper.xml
@@ -5,11 +5,14 @@
     <sql id="queryCondition">
         <where>
             o.del_flag = 0
+            <if test="query.siteIds != null and query.siteIds.size() > 0">
+                AND o.site_id IN
+                <foreach collection="query.siteIds" item="siteId" open="(" separator="," close=")">
+                    #{siteId}
+                </foreach>
+            </if>
             <if test="query.code != null and query.code != ''">
                 AND o.code LIKE CONCAT('%', #{query.code}, '%')
-            </if>
-            <if test="query.cardId != null">
-                AND o.card_id = #{query.cardId}
             </if>
             <if test="query.cardNo != null and query.cardNo != ''">
                 AND o.card_no LIKE CONCAT('%', #{query.cardNo}, '%')
@@ -26,51 +29,45 @@
             <if test="query.gunId != null">
                 AND o.charging_gun_id = #{query.gunId}
             </if>
-            <if test="query.startTime != null and query.startTime != ''">
-                AND o.start_time &gt;= #{query.startTime}
+            <if test="startTime1 != null and startTime1 != ''">
+                AND o.pay_time BETWEEN #{startTime1} AND #{startTime2}
             </if>
-            <if test="query.endTime != null and query.endTime != ''">
-                AND o.start_time &lt;= #{query.endTime}
+            <if test="endTime1 != null and endTime1 != ''">
+                AND o.end_time BETWEEN #{endTime1} AND #{endTime2}
             </if>
         </where>
     </sql>
 
-    <select id="pageList" resultType="java.util.LinkedHashMap">
-        SELECT o.id,
-               o.code,
-               o.card_id AS cardId,
-               o.card_no AS cardNo,
-               o.site_id AS siteId,
-               o.charging_pile_id AS chargingPileId,
-               o.charging_gun_id AS chargingGunId,
-               o.start_time AS startTime,
-               o.end_time AS endTime,
-               o.status,
-               o.order_amount AS orderAmount,
-               o.payment_amount AS paymentAmount,
-               o.electrovalence,
-               o.service_charge AS serviceCharge,
-               o.charging_capacity AS chargingCapacity,
-               o.balance_pay_amount AS balancePayAmount,
-               o.third_pay_amount AS thirdPayAmount,
-               o.refund_amount AS refundAmount,
-               o.pay_time AS payTime,
-               o.create_time AS createTime
+    <select id="pageList" resultType="com.ruoyi.order.api.vo.ChargingOrderVO">
+        SELECT o.*
         FROM t_card_charging_order o
         <include refid="queryCondition"/>
-        ORDER BY o.id DESC
+        ORDER BY o.create_time DESC
+        LIMIT #{offset}, #{pageSize}
+    </select>
+
+    <select id="count" resultType="long">
+        SELECT COUNT(1)
+        FROM t_card_charging_order o
+        <include refid="queryCondition"/>
     </select>
 
     <select id="summary" resultType="java.util.LinkedHashMap">
         SELECT COUNT(1) AS orderCount,
+               IFNULL(SUM(o.charging_capacity), 0) AS total,
+               IFNULL(SUM(TIMESTAMPDIFF(SECOND, o.start_time, o.end_time)), 0) AS time,
+               IFNULL(SUM(o.electrovalence), 0) AS electronicMoney,
+               IFNULL(SUM(o.service_charge), 0) AS serviceMoney,
+               IFNULL(SUM(o.electrovalence), 0) + IFNULL(SUM(o.service_charge), 0) AS income,
                IFNULL(SUM(o.order_amount), 0) AS orderAmount,
                IFNULL(SUM(o.payment_amount), 0) AS paymentAmount,
                IFNULL(SUM(o.electrovalence), 0) AS electrovalence,
                IFNULL(SUM(o.service_charge), 0) AS serviceCharge,
-               IFNULL(SUM(o.charging_capacity), 0) AS chargingCapacity,
-               IFNULL(SUM(o.balance_pay_amount), 0) AS balancePayAmount,
                IFNULL(SUM(o.third_pay_amount), 0) AS thirdPayAmount,
-               IFNULL(SUM(o.refund_amount), 0) AS refundAmount
+               0 AS platformIncome,
+               0 AS partnerIncome,
+               0 AS platformIncomeTotal,
+               0 AS partnerIncomeTotal
         FROM t_card_charging_order o
         <include refid="queryCondition"/>
     </select>

--
Gitblit v1.7.1