From b50e57bf7e17d696ddb4e9785c909052da034ef4 Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期二, 14 七月 2026 09:10:47 +0800
Subject: [PATCH] Merge branch '2.1' into 2.3

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java |   71 +++++++++++++++++++++++++++++++----
 1 files changed, 63 insertions(+), 8 deletions(-)

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 3a23f90..c6323f7 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
@@ -58,6 +58,8 @@
 import com.ruoyi.order.util.PreviousSixMonths;
 import com.ruoyi.order.util.mongodb.service.UploadRealTimeMonitoringDataService;
 import com.ruoyi.order.vo.EndOfChargePageInfo;
+import com.ruoyi.order.vo.ChargingSimulationVO;
+import com.ruoyi.order.vo.IcbcAdminSubOrderVO;
 import com.ruoyi.order.vo.StatisticsOfBatteryVO;
 import com.ruoyi.order.vo.UpdateOrderPaymentAmountDto;
 import com.ruoyi.order.vo.WatchChargingOrderVo;
@@ -65,6 +67,9 @@
 import com.ruoyi.other.api.feignClient.UserSiteClient;
 import com.ruoyi.payment.api.feignClient.AliPaymentClient;
 import com.ruoyi.payment.api.feignClient.WxPaymentClient;
+import com.ruoyi.payment.api.vo.IcbcPaymentResp;
+import com.ruoyi.payment.api.vo.IcbcRefundResp;
+import com.ruoyi.payment.api.vo.IcbcSubOrderRefundResp;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import com.ruoyi.system.api.feignClient.SysUserRoleClient;
@@ -948,6 +953,48 @@
     public AjaxResult paymentChargingOrder(@RequestBody AddChargingOrder addChargingOrder) {
         return chargingOrderService.paymentChargingOrder(addChargingOrder);
     }
+
+    @RequiresPermissions(value = {"/chargingPileOrder", "/paymentOrder/refund"}, logical = Logical.AND)
+    @PostMapping("/icbc/fund/payment-query")
+    @ApiOperation(value = "管理后台查询工行支付订单", tags = {"后台-充电桩订单"})
+    public AjaxResult<IcbcPaymentResp> queryIcbcAdminPayment(@RequestBody IcbcAdminFundOperationReq request) {
+        return AjaxResult.success(chargingOrderService.queryIcbcAdminPayment(request == null ? null : request.getOrderCode()));
+    }
+
+    @RequiresPermissions(value = {"/chargingPileOrder", "/paymentOrder/refund"}, logical = Logical.AND)
+    @PostMapping("/icbc/fund/refund")
+    @ApiOperation(value = "管理后台工行主订单退款", tags = {"后台-充电桩订单"})
+    public AjaxResult<IcbcRefundResp> refundIcbcAdminPayment(@RequestBody IcbcAdminFundOperationReq request) {
+        return AjaxResult.success(chargingOrderService.refundIcbcAdminPayment(request));
+    }
+
+    @RequiresPermissions(value = {"/chargingPileOrder", "/paymentOrder/refund"}, logical = Logical.AND)
+    @PostMapping("/icbc/fund/sub-orders")
+    @ApiOperation(value = "管理后台查询工行分账子订单", tags = {"后台-充电桩订单"})
+    public AjaxResult<List<IcbcAdminSubOrderVO>> queryIcbcAdminSubOrders(@RequestBody IcbcAdminFundOperationReq request) {
+        return AjaxResult.success(chargingOrderService.queryIcbcAdminSubOrders(request == null ? null : request.getOrderCode()));
+    }
+
+    @RequiresPermissions(value = {"/chargingPileOrder", "/paymentOrder/refund"}, logical = Logical.AND)
+    @PostMapping("/icbc/fund/sub-order-refund")
+    @ApiOperation(value = "管理后台工行分账子订单退款", tags = {"后台-充电桩订单"})
+    public AjaxResult<IcbcSubOrderRefundResp> refundIcbcAdminSubOrder(@RequestBody IcbcAdminFundOperationReq request) {
+        return AjaxResult.success(chargingOrderService.refundIcbcAdminSubOrder(request));
+    }
+
+    @ResponseBody
+    @GetMapping("/simulation/current")
+    @ApiOperation(value = "查询当前枪可模拟结算的工行订单", tags = {"小程序-模拟充电"})
+    public AjaxResult<ChargingSimulationVO> getCurrentSimulationOrder(@RequestParam("gunId") Integer gunId) {
+        return AjaxResult.success(chargingOrderService.getCurrentSimulationOrder(gunId));
+    }
+
+    @ResponseBody
+    @PostMapping("/simulation/complete")
+    @ApiOperation(value = "模拟完成充电并执行真实结算", tags = {"小程序-模拟充电"})
+    public AjaxResult<ChargingSimulationVO> completeSimulation(@RequestBody ChargingSimulationReq request) {
+        return AjaxResult.success(chargingOrderService.completeSimulation(request));
+    }
     
     /**
      * 充电充值支付回调
@@ -1123,11 +1170,12 @@
     public R<List<SixChargingDto>> charge(Integer siteId) {
         Long userId = tokenService.getLoginUser().getUserid();
         SysUser sysUser = sysUserClient.getSysUser(userId).getData();
+        boolean partnerView = isPartnerView(sysUser);
         List<Integer> siteIds = resolvePlatformRevenueSiteIds(userId, sysUser, siteId);
         LocalDate sixBefore = PreviousSixMonths.get();
         //通过siteIds进行sql查询统计
         List<SixChargingDto> sixChargingDtos = generateLastSixMonths();
-        List<SixChargingDto> chargingDtos = chargingOrderService.charge(sixBefore, siteIds);
+        List<SixChargingDto> chargingDtos = chargingOrderService.charge(sixBefore, siteIds, partnerView);
         for (SixChargingDto sixChargingDto : sixChargingDtos) {
             for (SixChargingDto chargingDto : chargingDtos) {
                 if (sixChargingDto.getMonth().equals(chargingDto.getMonth())){
@@ -1165,9 +1213,10 @@
     public R<List<SixCircleDto>> circle() {
         Long userId = tokenService.getLoginUser().getUserid();
         SysUser sysUser = sysUserClient.getSysUser(userId).getData();
+        boolean partnerView = isPartnerView(sysUser);
         List<Integer> siteIds = resolvePlatformRevenueSiteIds(userId, sysUser, null);
         LocalDate sixBefore = PreviousSixMonths.get();
-        List<SixCircleDto> sixCircleDtos = chargingOrderService.circle(siteIds,sixBefore);
+        List<SixCircleDto> sixCircleDtos = chargingOrderService.circle(siteIds,sixBefore, partnerView);
         for (SixCircleDto sixCircleDto : sixCircleDtos) {
             Site site = siteClient.getSiteByIds(Arrays.asList(sixCircleDto.getSiteId())).getData().get(0);
             sixCircleDto.setSiteName(site.getName());
@@ -1252,14 +1301,15 @@
         //count近6个月的数据
         Long userId = tokenService.getLoginUser().getUserid();
         SysUser sysUser = sysUserClient.getSysUser(userId).getData();
+        boolean partnerView = isPartnerView(sysUser);
         List<Integer> siteIds = resolvePlatformRevenueSiteIds(userId, sysUser, null);
-        Map<String,Object>  map = chargingOrderService.countAll(siteIds);
-        boolean platformVisible = 1 == sysUser.getObjectId();
+        Map<String,Object>  map = chargingOrderService.countAll(siteIds, partnerView);
+        if (map == null) {
+            map = new HashMap<String,Object>();
+        }
+        boolean platformVisible = !partnerView;
         if(platformVisible){
             BigDecimal data = parkingLotClient.getRecordAmount().getData();
-            if (map ==null){
-                map = new HashMap<String,Object>();
-            }
             map.put("parkingAmount",data);
             BigDecimal data1 =   shoppingOrderService.getSumAmount();
             map.put("shopAmount",data1);
@@ -1281,9 +1331,14 @@
     public R<List<SixIncomeCircleDto>> payTypeCircle() {
         Long userId = tokenService.getLoginUser().getUserid();
         SysUser sysUser = sysUserClient.getSysUser(userId).getData();
+        boolean partnerView = isPartnerView(sysUser);
         List<Integer> siteIds = resolvePlatformRevenueSiteIds(userId, sysUser, null);
         LocalDate sixBefore = PreviousSixMonths.get();
-        return R.ok(chargingOrderService.payTypeCircle(sixBefore, siteIds));
+        return R.ok(chargingOrderService.payTypeCircle(sixBefore, siteIds, partnerView));
+    }
+
+    private boolean isPartnerView(SysUser sysUser) {
+        return sysUser != null && Integer.valueOf(2).equals(sysUser.getRoleType());
     }
 
     /**

--
Gitblit v1.7.1