chenxiaofei 7 цаг өмнө
parent
commit
b917e9284c
17 өөрчлөгдсөн 983 нэмэгдсэн , 70 устгасан
  1. 28 5
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/ParkingChangeStrategyController.java
  2. 38 48
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/ParkingWalletFeeController.java
  3. 17 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtParkingStrategySwitchMapper.java
  4. 53 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtParkingStrategySwitch.java
  5. 61 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/ParkingWalletFeeSaveParam.java
  6. 34 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/ParkingWalletFeeTotalQueryParam.java
  7. 56 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/enuma/WalletTypEnum.java
  8. 36 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/ParkingStrategySwitchResp.java
  9. 43 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/ParkingStrategySwitchSaveParam.java
  10. 75 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/ParkingWalletFeeBalanceQueryParam.java
  11. 91 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/ParkingWalletFeeBalanceResp.java
  12. 54 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/ParkingWalletFeeQueryParam.java
  13. 62 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/ParkingWalletFeeResp.java
  14. 31 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtParkingStrategySwitchRepository.java
  15. 43 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ParkingChangeStrategyService.java
  16. 249 12
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ParkingWalletFeeService.java
  17. 12 1
      sql/2026/06/2026_06_16_create.sql

+ 28 - 5
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/ParkingChangeStrategyController.java

@@ -4,10 +4,7 @@ package com.sckw.transport.controller;
 import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.transport.model.ParkingChangeStrategySaveParam;
-import com.sckw.transport.model.param.ParkingChangeStrategyQueryParam;
-import com.sckw.transport.model.param.ParkingChangeStrategyResp;
-import com.sckw.transport.model.param.ParkingChangeStrategyUnitResp;
-import com.sckw.transport.model.param.ParkingChangeStrategyUnitSaveParam;
+import com.sckw.transport.model.param.*;
 import com.sckw.transport.service.ParkingChangeStrategyService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -33,7 +30,7 @@ public class ParkingChangeStrategyController {
     private final ParkingChangeStrategyService parkingChangeStrategyService;
 
     /**
-     * 分页查询门卫订单
+     * 分页查询收费策略
      *
      * @param param
      * @return
@@ -98,4 +95,30 @@ public class ParkingChangeStrategyController {
     }
 
 
+    /**
+     * 查询收费策略开关
+     *
+     * @param
+     * @return
+     */
+    @Operation(summary = "查询收费策略开关", description = "查询收费策略开关")
+    @PostMapping("/querySwitch")
+    public BaseResult<ParkingStrategySwitchResp> querySwitch(){
+        ParkingStrategySwitchResp resp = parkingChangeStrategyService.querySwitch();
+        return BaseResult.success(resp);
+    }
+
+    /**
+     * 修改收费策略开关
+     *
+     * @param
+     * @return
+     */
+    @Operation(summary = "查询收费策略开关", description = "查询收费策略开关")
+    @PostMapping("/updateSwitch")
+    public BaseResult updateSwitch(@RequestBody @Valid ParkingStrategySwitchSaveParam param){
+        parkingChangeStrategyService.updateSwitch(param);
+        return BaseResult.success();
+    }
+
 }

+ 38 - 48
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/ParkingWalletFeeController.java

@@ -3,21 +3,23 @@ package com.sckw.transport.controller;
 
 import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.result.PageDataResult;
-import com.sckw.transport.model.ParkingChangeStrategySaveParam;
-import com.sckw.transport.model.param.ParkingChangeStrategyQueryParam;
-import com.sckw.transport.model.param.ParkingChangeStrategyResp;
-import com.sckw.transport.model.param.ParkingChangeStrategyUnitResp;
-import com.sckw.transport.model.param.ParkingChangeStrategyUnitSaveParam;
-import com.sckw.transport.service.ParkingChangeStrategyService;
+import com.sckw.transport.model.ParkingWalletFeeSaveParam;
+import com.sckw.transport.model.ParkingWalletFeeTotalQueryParam;
+import com.sckw.transport.model.param.ParkingWalletFeeBalanceQueryParam;
+import com.sckw.transport.model.param.ParkingWalletFeeBalanceResp;
+import com.sckw.transport.model.param.ParkingWalletFeeQueryParam;
+import com.sckw.transport.model.param.ParkingWalletFeeResp;
+import com.sckw.transport.service.ParkingWalletFeeService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
-import java.util.List;
-
-/**
+/**s
  * Author: donglang
  * Time: 2026-01-05
  * Des: 服务费
@@ -30,71 +32,59 @@ import java.util.List;
 @Tag(name = "服务费接口", description = "服务费接口")
 public class ParkingWalletFeeController {
 
-    private final ParkingChangeStrategyService parkingChangeStrategyService;
+    private final ParkingWalletFeeService parkingWalletFeeService;
+
 
     /**
-     * 分页查询门卫订单
+     * 查询服务费汇总
      *
      * @param param
      * @return
      */
-    @Operation(summary = "分页查询收费策略", description = "分页查询收费策略")
-    @PostMapping("/pageQueryChangeStrategy")
-    public BaseResult<PageDataResult<ParkingChangeStrategyResp>> pageQueryChangeStrategy(@RequestBody @Valid ParkingChangeStrategyQueryParam param){
-        PageDataResult<ParkingChangeStrategyResp> gatekeeperOrderList = parkingChangeStrategyService.pageQueryChangeStrategy(param);
-        return BaseResult.success(gatekeeperOrderList);
+    @Operation(summary = "查询服务费汇总", description = "查询服务费汇总")
+    @PostMapping("/queryTotalServerFee")
+    public BaseResult<ParkingWalletFeeResp> queryTotalServerFee(@RequestBody @Valid ParkingWalletFeeTotalQueryParam param){
+        ParkingWalletFeeResp gatekeeperOrder = parkingWalletFeeService.queryTotalServerFee(param);
+        return BaseResult.success(gatekeeperOrder);
     }
 
     /**
-     * 保存收费策略
+     * 分页查询服务费
      *
      * @param param
      * @return
      */
-    @Operation(summary = "保存收费策略", description = "保存收费策略")
-    @PostMapping("/saveChangeStrategy")
-    public BaseResult saveChangeStrategy(@RequestBody @Valid ParkingChangeStrategySaveParam param){
-        parkingChangeStrategyService.saveChangeStrategy(param);
-        return BaseResult.success();
+    @Operation(summary = "分页查询服务费", description = "分页查询服务费")
+    @PostMapping("/pageQueryServerFee")
+    public BaseResult<PageDataResult<ParkingWalletFeeResp>> pageQueryServerFee(@RequestBody @Valid ParkingWalletFeeQueryParam param){
+        PageDataResult<ParkingWalletFeeResp> gatekeeperOrderList = parkingWalletFeeService.pageQueryServerFee(param);
+        return BaseResult.success(gatekeeperOrderList);
     }
 
     /**
-     * 删除收费策略
+     * 保存服务费
      *
-     * @param id
+     * @param param
      * @return
      */
-    @Operation(summary = "删除收费策略", description = "删除收费策略")
-    @PostMapping("/deleteChangeStrategy")
-    public BaseResult deleteChangeStrategy(@RequestParam Long id){
-        parkingChangeStrategyService.deleteChangeStrategy(id);
+    @Operation(summary = "保存服务费", description = "保存服务费")
+    @PostMapping("/saveServerFee")
+    public BaseResult saveServerFee(@RequestBody @Valid ParkingWalletFeeSaveParam param){
+        parkingWalletFeeService.saveServerFee(param);
         return BaseResult.success();
     }
 
     /**
-     * 查询单位分配
-     *
-     * @param id
-     * @return
-     */
-    @Operation(summary = "查询单位分配", description = "查询单位分配")
-    @PostMapping("/queryChangeStrategyEnt")
-    public BaseResult<List<ParkingChangeStrategyUnitResp>> queryChangeStrategyEnt(@RequestParam Long id){
-        List<ParkingChangeStrategyUnitResp> changeStrategyUnitRespList = parkingChangeStrategyService.queryChangeStrategyEnt(id);
-        return BaseResult.success(changeStrategyUnitRespList);
-    }
-
-    /**
-     * 保存单位分配
+     * 分页查询服务费明细
      *
      * @param param
      * @return
      */
-    @Operation(summary = "保存单位分配", description = "保存单位分配")
-    @PostMapping("/saveChangeStrategyEnt")
-    public BaseResult saveChangeStrategyEnt(@RequestBody @Valid ParkingChangeStrategyUnitSaveParam param){
-        parkingChangeStrategyService.saveChangeStrategyEnt(param);
-        return BaseResult.success();
+    @Operation(summary = "分页查询服务费明细", description = "分页查询服务费明细")
+    @PostMapping("/pageQueryServerFeeDetails")
+    public BaseResult<PageDataResult<ParkingWalletFeeBalanceResp>> pageQueryServerFeeDetails(@RequestBody @Valid ParkingWalletFeeBalanceQueryParam param){
+        PageDataResult<ParkingWalletFeeBalanceResp> gatekeeperOrderList = parkingWalletFeeService.pageQueryServerFeeDetails(param);
+        return BaseResult.success(gatekeeperOrderList);
     }
 
 

+ 17 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtParkingStrategySwitchMapper.java

@@ -0,0 +1,17 @@
+package com.sckw.transport.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.transport.model.KwtParkingChargeStrategy;
+import com.sckw.transport.model.KwtParkingStrategySwitch;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author zk
+ * @desc 收费策略开关
+ * @date 2026/01/06
+ */
+@Mapper
+public interface KwtParkingStrategySwitchMapper extends BaseMapper<KwtParkingStrategySwitch> {
+
+
+}

+ 53 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtParkingStrategySwitch.java

@@ -0,0 +1,53 @@
+package com.sckw.transport.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author lfdc
+ * @description 收费策略
+ * @date 2023-06-26 16:06:12
+ */
+@Data
+@TableName("kwt_parking_strategy_switch")
+public class KwtParkingStrategySwitch implements Serializable {
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 状态(0-关闭,1-开启)
+     */
+    private Integer status;
+
+    /**
+     * 默认费用
+     */
+    private BigDecimal defaultFee;
+
+    /**
+     * 创建人
+     */
+    private Long createUser;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 创建人更新人
+     */
+    private Long updateUser;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+}

+ 61 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/ParkingWalletFeeSaveParam.java

@@ -0,0 +1,61 @@
+package com.sckw.transport.model;
+
+import com.sckw.core.web.request.PageReq;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author :donglang
+ * @version :1.0
+ * @description : 收费策略
+ * @create :2026-01-05 08:59:00
+ */
+@Data
+public class ParkingWalletFeeSaveParam extends PageReq implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -5431003248533000828L;
+
+    /**
+     * 主键id
+     */
+    @NotNull(message = "主键id不能为空")
+    @Schema(description = "主键id")
+    private Long id;
+
+    /**
+     * 采购商企业id
+     */
+    @NotNull(message = "采购商企业id不能为空")
+    @Schema(description = "采购商企业id")
+    private Long entId;
+
+    /**
+     * 服务费余额
+     */
+    @NotNull(message = "服务费余额不能为空")
+    @Schema(description = "服务费余额")
+    private BigDecimal serviceFee;
+
+    /**
+     * 凭证图片
+     */
+    @NotBlank(message = "凭证图片不能为空")
+    @Schema(description = "凭证图片")
+    private String voucherUrl;
+
+    /**
+     * 备注
+     */
+    @NotBlank(message = "备注不能为空")
+    @Schema(description = "备注")
+    private String remark;
+
+
+}

+ 34 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/ParkingWalletFeeTotalQueryParam.java

@@ -0,0 +1,34 @@
+package com.sckw.transport.model;
+
+import com.sckw.core.web.request.PageReq;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :donglang
+ * @version :1.0
+ * @description : 服务费
+ * @create :2026-01-05 08:59:00
+ */
+@Data
+public class ParkingWalletFeeTotalQueryParam extends PageReq implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -5431003248533000828L;
+
+    /**
+     * 平台企业id
+     */
+    @Schema(description = "平台企业id")
+    private Long supEntId;
+
+    /**
+     * 采购商企业id
+     */
+    @Schema(description = "采购商企业id")
+    private Long proEntId;
+
+}

+ 56 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/enuma/WalletTypEnum.java

@@ -0,0 +1,56 @@
+package com.sckw.transport.model.enuma;
+
+import lombok.Getter;
+
+@Getter
+public enum WalletTypEnum {
+
+    PREPAY(2, "预付"),
+    INCOME(3, "收益"),
+    FREEZE(4, "冻结"),
+    UNFREEZE(5, "解冻"),
+    CONSUME(6, "消费"),
+    MANUAL_ENTRY(9, "人工录入");
+    /**
+     * 数据库存储的编码值
+     */
+    private final Integer code;
+
+    /**
+     * 类型描述(用于页面展示)
+     */
+    private final String desc;
+
+    WalletTypEnum(Integer code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    /**
+     * 根据编码值获取枚举
+     * @param code 数据库存储的编码
+     * @return 对应的枚举对象,无匹配时返回 null
+     */
+    public static WalletTypEnum getByCode(Integer code) {
+        if (code == null) {
+            return null;
+        }
+        for (WalletTypEnum type : values()) {
+            if (type.code.equals(code)) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 根据编码值获取描述
+     * @param code 数据库存储的编码
+     * @return 描述文本,无匹配时返回"未知类型"
+     */
+    public static String getDescByCode(Integer code) {
+        WalletTypEnum type = getByCode(code);
+        return type != null ? type.desc : "未知类型";
+    }
+
+}

+ 36 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/ParkingStrategySwitchResp.java

@@ -0,0 +1,36 @@
+package com.sckw.transport.model.param;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 查询收费策略开关
+ * @create :2025-11-11 20:16:00
+ */
+@Data
+public class ParkingStrategySwitchResp implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -6153312023002477484L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 状态开关
+     */
+    private Integer status;
+
+    /**
+     * 默认费用
+     */
+    private BigDecimal defaultFee;
+
+}

+ 43 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/ParkingStrategySwitchSaveParam.java

@@ -0,0 +1,43 @@
+package com.sckw.transport.model.param;
+
+import com.sckw.core.web.request.PageReq;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author :donglang
+ * @version :1.0
+ * @description : 收费策略
+ * @create :2026-01-05 08:59:00
+ */
+@Data
+public class ParkingStrategySwitchSaveParam extends PageReq implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -5431003248533000828L;
+
+    /**
+     * 收费策略id
+     */
+    @NotNull(message = "收费策略id不能为空")
+    @Schema(description = "收费策略id")
+    private Long id;
+
+    /**
+     * 状态开关(0-关闭、1-开启)
+     */
+    @NotNull(message = "状态开关不能为空")
+    @Schema(description = "状态开关")
+    private Integer status;
+
+    /**
+     * 默认费用
+     */
+    private BigDecimal defaultFee;
+}

+ 75 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/ParkingWalletFeeBalanceQueryParam.java

@@ -0,0 +1,75 @@
+package com.sckw.transport.model.param;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.sckw.core.web.request.PageReq;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author :donglang
+ * @version :1.0
+ * @description : 服务费明细
+ * @create :2026-01-05 08:59:00
+ */
+@Data
+public class ParkingWalletFeeBalanceQueryParam extends PageReq implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -5431003248533000828L;
+
+    /**
+     * 主键id
+     */
+    @Schema(description = "主键id")
+    private Long id;
+
+    /**
+     * 订单号
+     */
+    private String orderNo;
+
+    /**
+     * 交易类型 2-预付 3-收益 4-冻结 5-解冻 6-消费 9-人工录入
+     */
+    private Integer tradeType;
+
+    /**
+     * 采购商企业id
+     */
+    private Long proEntId;
+
+    /**
+     * 供应商商企业id
+     */
+    private Long supEntId;
+
+    /**
+     * 最小服务费
+     */
+    @Schema(description = "最小服务费")
+    private BigDecimal minFee;
+
+    /**
+     * 最大服务费
+     */
+    @Schema(description = "最大服务费")
+    private BigDecimal maxFee;
+
+    /**
+     * 开始时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startCreateTime;
+
+    /**
+     * 结束时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endCreateTime;
+
+}

+ 91 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/ParkingWalletFeeBalanceResp.java

@@ -0,0 +1,91 @@
+package com.sckw.transport.model.param;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 服务费明细
+ * @create :2025-11-11 20:16:00
+ */
+@Data
+public class ParkingWalletFeeBalanceResp implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -6153312023002477484L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 关联订单编号
+     */
+    private String orderNo;
+
+    /**
+     * 采购商企业id
+     */
+    private Long proEntId;
+
+    /**
+     * 采购商企业名称
+     */
+    private String proEntName;
+
+    /**
+     * 供应商企业id
+     */
+    private Long supEntId;
+
+    /**
+     * 供应商企业名称
+     */
+    private String supEntName;
+
+    /**
+     * 交易类型 2-预付 3-收益 4-冻结 5-解冻 6-消费 9-人工录入
+     */
+    private Integer tradeType;
+
+    /**
+     * 交易类型描述
+     */
+    private String tradeTypeDesc;
+
+    /**
+     * 交易金额
+     */
+    private BigDecimal tradeAmount;
+
+    /**
+     * 服务费余额
+     */
+    private BigDecimal serviceFeeBalance;
+
+    /**
+     * 履约中金额
+     */
+    private BigDecimal tradingAmount;
+
+    /**
+     * 凭证图片
+     */
+    private String voucherUrl;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}

+ 54 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/ParkingWalletFeeQueryParam.java

@@ -0,0 +1,54 @@
+package com.sckw.transport.model.param;
+
+import com.sckw.core.web.request.PageReq;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author :donglang
+ * @version :1.0
+ * @description : 服务费
+ * @create :2026-01-05 08:59:00
+ */
+@Data
+public class ParkingWalletFeeQueryParam extends PageReq implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -5431003248533000828L;
+
+//    /**
+//     * 类型
+//     */
+//    @NotNull(message = "类型不能为空")
+//    @Schema(description = "类型(1-平台,2-采购商)")
+//    private Integer type;
+
+    /**
+     * 平台企业id
+     */
+    @Schema(description = "平台企业id")
+    private Long supEntId;
+
+    /**
+     * 采购商企业id
+     */
+    @Schema(description = "采购商企业id")
+    private Long proEntId;
+
+    /**
+     * 最小服务费
+     */
+    @Schema(description = "最小服务费")
+    private BigDecimal minFee;
+
+    /**
+     * 最大服务费
+     */
+    @Schema(description = "最大服务费")
+    private BigDecimal maxFee;
+
+}

+ 62 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/ParkingWalletFeeResp.java

@@ -0,0 +1,62 @@
+package com.sckw.transport.model.param;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 服务费
+ * @create :2025-11-11 20:16:00
+ */
+@Data
+public class ParkingWalletFeeResp implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -6153312023002477484L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 采购商企业id
+     */
+    private Long proEntId;
+
+    /**
+     * 采购商企业名称
+     */
+    private Long proEntName;
+
+    /**
+     * 平台企业id
+     */
+    private Long supEntId;
+
+    /**
+     * 平台企业名称
+     */
+    private Long supEntName;
+
+    /**
+     * 服务费余额
+     */
+    private BigDecimal serviceFeeBalance;
+
+    /**
+     * 履约中金额
+     */
+    private BigDecimal tradingAmount;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+}

+ 31 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtParkingStrategySwitchRepository.java

@@ -0,0 +1,31 @@
+package com.sckw.transport.repository;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.transport.dao.KwtParkingChangeStrategyMapper;
+import com.sckw.transport.dao.KwtParkingStrategySwitchMapper;
+import com.sckw.transport.model.KwtParkingChargeStrategy;
+import com.sckw.transport.model.KwtParkingStrategySwitch;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @Author: 门卫车辆订单
+ * @CreateTime: 2025-10-12
+ * @Description:
+ * @Version: 1.0
+ */
+
+@Repository
+public class KwtParkingStrategySwitchRepository extends ServiceImpl<KwtParkingStrategySwitchMapper, KwtParkingStrategySwitch> {
+
+
+    public KwtParkingStrategySwitch queryParkingStrategySwitch() {
+        return getOne(
+                Wrappers.<KwtParkingStrategySwitch>lambdaQuery()
+                        .orderByDesc(KwtParkingStrategySwitch::getId)
+                        .last("limit 1"));
+    }
+
+}

+ 43 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ParkingChangeStrategyService.java

@@ -16,13 +16,12 @@ import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.transport.model.KwtParkingChargeStrategy;
 import com.sckw.transport.model.KwtParkingChargeStrategyUnit;
+import com.sckw.transport.model.KwtParkingStrategySwitch;
 import com.sckw.transport.model.ParkingChangeStrategySaveParam;
-import com.sckw.transport.model.param.ParkingChangeStrategyQueryParam;
-import com.sckw.transport.model.param.ParkingChangeStrategyResp;
-import com.sckw.transport.model.param.ParkingChangeStrategyUnitResp;
-import com.sckw.transport.model.param.ParkingChangeStrategyUnitSaveParam;
+import com.sckw.transport.model.param.*;
 import com.sckw.transport.repository.KwtParkingChangeStrategyRepository;
 import com.sckw.transport.repository.KwtParkingChangeStrategyUnitRepository;
+import com.sckw.transport.repository.KwtParkingStrategySwitchRepository;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -48,6 +47,7 @@ public class ParkingChangeStrategyService {
 
     private final KwtParkingChangeStrategyRepository parkingChangeStrategyRepository;
     private final KwtParkingChangeStrategyUnitRepository parkingChangeStrategyUnitRepository;
+    private final KwtParkingStrategySwitchRepository parkingStrategySwitchRepository;
 
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
    RemoteSystemService remoteSystemService;
@@ -230,4 +230,43 @@ public class ParkingChangeStrategyService {
         }
     }
 
+    /**
+     * 查询收费策略开关
+     */
+    public ParkingStrategySwitchResp querySwitch() {
+        log.info("查询收费策略开关");
+
+        ParkingStrategySwitchResp resp = new ParkingStrategySwitchResp();
+        resp.setStatus(Global.NO);
+        KwtParkingStrategySwitch strategySwitch = parkingStrategySwitchRepository.queryParkingStrategySwitch();
+        if (strategySwitch == null) {
+            return resp;
+        }
+
+        resp.setId(strategySwitch.getId());
+        resp.setStatus(strategySwitch.getStatus());
+        resp.setDefaultFee(strategySwitch.getDefaultFee());
+        log.info("收费策略开关查询结束,开关状态:{}", Objects.equals(strategySwitch.getStatus(), Global.YES) ? "开启" : "关闭");
+        return resp;
+    }
+
+    /**
+     * 查询收费策略开关
+     */
+    public void updateSwitch(ParkingStrategySwitchSaveParam param) {
+        log.info("修改收费策略开关");
+
+        KwtParkingStrategySwitch strategySwitch = parkingStrategySwitchRepository.getById(param.getId());
+        if (strategySwitch == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.DRIVER_NOT_FOUND, "收费策略开关不存在");
+        }
+
+        if (Objects.equals(param.getStatus(), Global.YES)  && param.getDefaultFee() == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.DRIVER_NOT_FOUND, "开关打开后,默认费用不能为空");
+        }
+        strategySwitch.setStatus(strategySwitch.getStatus());
+        strategySwitch.setDefaultFee(strategySwitch.getDefaultFee());
+        parkingStrategySwitchRepository.updateById(strategySwitch);
+    }
+
 }

+ 249 - 12
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ParkingWalletFeeService.java

@@ -1,38 +1,38 @@
 package com.sckw.transport.service;
 
 
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.sckw.core.common.enums.enums.ErrorCodeEnum;
 import com.sckw.core.exception.BusinessPlatfromException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.ParkingChangeStrategyEnum;
+import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.web.context.LoginUserHolder;
-import com.sckw.transport.model.KwtParkingChargeStrategy;
-import com.sckw.transport.model.KwtParkingChargeStrategyUnit;
-import com.sckw.transport.model.KwtParkingWalletFee;
-import com.sckw.transport.model.KwtParkingWalletFeeBalance;
-import com.sckw.transport.model.param.ParkingWalletFeeEstimateQueryParam;
-import com.sckw.transport.model.param.ParkingWalletFeeEstimateResp;
+import com.sckw.core.web.response.result.PageDataResult;
+import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.transport.api.model.param.ParkingWalletFeeFreezeParam;
 import com.sckw.transport.api.model.vo.ParkingWalletFeeFreezeResult;
+import com.sckw.transport.model.*;
+import com.sckw.transport.model.enuma.WalletTypEnum;
+import com.sckw.transport.model.param.*;
 import com.sckw.transport.repository.KwtParkingChangeStrategyRepository;
 import com.sckw.transport.repository.KwtParkingChangeStrategyUnitRepository;
-import com.sckw.system.api.RemoteSystemService;
 import com.sckw.transport.repository.KwtParkingWalletFeeBalanceRepository;
 import com.sckw.transport.repository.KwtParkingWalletFeeRepository;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.CollectionUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * Author: donglang
@@ -741,5 +741,242 @@ public class ParkingWalletFeeService {
         return walletFee.getServiceFeeBalance();
     }
 
+    /**
+     * 查询汇总服务费
+     * @param param
+     */
+    public ParkingWalletFeeResp queryTotalServerFee(ParkingWalletFeeTotalQueryParam param) {
+        log.info("查询汇总服务费:{}", JSON.toJSONString(param));
+        //构建查询条件
+        LambdaQueryWrapper<KwtParkingWalletFee> wrapper = buildAndExecuteQuery(param);
+
+        // 初始化
+        ParkingWalletFeeResp resp = new ParkingWalletFeeResp();
+        resp.setServiceFeeBalance(BigDecimal.ZERO);
+        resp.setTradingAmount(BigDecimal.ZERO);
+
+        List<KwtParkingWalletFee> records = parkingWalletFeeRepository.list(wrapper);
+        if (CollectionUtils.isEmpty(records)) {
+            log.info("汇总服务费信息为空");
+            return resp;
+        }
+        // 查询采购商汇总服务费
+        if (param.getProEntId() != null) {
+            return getProWalletFee(records.get(0));
+        }
+        // 查询平台汇总服务费
+        if (param.getSupEntId() != null) {
+            return getSupWalletFee(records);
+        }
+        return resp;
+    }
+
+    /**
+     * 获取采购商汇总服务费
+     * @param fee
+     */
+    private ParkingWalletFeeResp getProWalletFee(KwtParkingWalletFee fee) {
+        log.info("开始汇总采购商服务费,param:{}", JSON.toJSONString(fee));
+
+        ParkingWalletFeeResp resp = new ParkingWalletFeeResp();
+        resp.setServiceFeeBalance(fee.getServiceFeeBalance() != null ? fee.getServiceFeeBalance() : BigDecimal.ZERO);
+        resp.setTradingAmount(fee.getTradingAmount() != null ? fee.getTradingAmount() : BigDecimal.ZERO);
+        log.info("汇总采购商服务费结束,总余额:{}, 总履约中金额:{}", fee.getServiceFeeBalance(), fee.getTradingAmount());
+        return resp;
+
+    }
+
+
+    /**
+     * 获取平台汇总服务费
+     * @param feeList
+     */
+    private ParkingWalletFeeResp getSupWalletFee(List<KwtParkingWalletFee> feeList) {
+        log.info("开始汇总平台服务费, size:{}", CollectionUtils.isEmpty(feeList) ? 0 : feeList.size());
+        // 汇总余额
+        BigDecimal totalServiceFee  = feeList.stream()
+                .map(fee -> fee.getServiceFeeBalance() != null ? fee.getServiceFeeBalance() : BigDecimal.ZERO)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 汇总冻结金额
+        BigDecimal totalTradingAmount   = feeList.stream()
+                .map(fee -> fee.getTradingAmount() != null ? fee.getTradingAmount() : BigDecimal.ZERO)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        ParkingWalletFeeResp resp = new ParkingWalletFeeResp();
+        resp.setServiceFeeBalance(totalServiceFee);
+        resp.setTradingAmount(totalTradingAmount);
+        log.info("汇总平台服务费结束,总余额:{}, 总履约中金额:{}", totalServiceFee, totalTradingAmount);
+        return resp;
+    }
+    /**
+     * 构建查询条件并执行分页查询
+     */
+    private LambdaQueryWrapper<KwtParkingWalletFee> buildAndExecuteQuery(ParkingWalletFeeTotalQueryParam param) {
+        return  Wrappers.<KwtParkingWalletFee>lambdaQuery()
+                .eq(param.getProEntId() != null, KwtParkingWalletFee::getProEntId, param.getProEntId())
+                .eq(param.getSupEntId() != null, KwtParkingWalletFee::getSupEntId, param.getSupEntId())
+                .orderByDesc(KwtParkingWalletFee::getUpdateTime);
+    }
+
+    /**
+     * 分页查询服务费
+     * @param param
+     */
+    public PageDataResult<ParkingWalletFeeResp> pageQueryServerFee(ParkingWalletFeeQueryParam param) {
+        log.info("分页查询服务费:{}", JSON.toJSONString(param));
+
+        //构建查询条件
+        LambdaQueryWrapper<KwtParkingWalletFee> wrapper = buildAndExecuteQuery(param);
+
+        Page<KwtParkingWalletFee> pageByStatus = parkingWalletFeeRepository.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
+        List<KwtParkingWalletFee> records = pageByStatus.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            log.info("服务费信息为空");
+            return PageDataResult.empty(param.getPageNum(), param.getPageSize());
+        }
+        List<ParkingWalletFeeResp> changeStrategyRespList = getWalletFeePageResult(records);
+        return PageDataResult.success(param.getPageNum(), param.getPageSize(), pageByStatus.getTotal(), changeStrategyRespList);
+    }
+
+    /**
+     * 获取收费策略
+     * @param records
+     */
+    private List<ParkingWalletFeeResp> getWalletFeePageResult(List<KwtParkingWalletFee> records) {
+        log.info("组装服务费,param:{}", JSON.toJSONString(records));
+        if (CollectionUtils.isEmpty(records)) {
+            return Collections.emptyList();
+        }
+        List<ParkingWalletFeeResp> walletFeeList = records.stream()
+                .map(fee -> {
+                    ParkingWalletFeeResp resp = new ParkingWalletFeeResp();
+                    resp.setId(fee.getId());
+                    resp.setProEntId(fee.getProEntId());
+                    resp.setProEntName(null);
+                    resp.setSupEntId(fee.getSupEntId());
+                    resp.setSupEntName(null);
+                    resp.setServiceFeeBalance(fee.getServiceFeeBalance());
+                    resp.setTradingAmount(fee.getTradingAmount());
+                    resp.setUpdateTime(fee.getUpdateTime());
+                    return resp;
+                }).collect(Collectors.toList());
+
+        log.info("组装服务费结束,size:{}", JSON.toJSONString(walletFeeList.size()));
+        return walletFeeList;
+    }
+    /**
+     * 构建查询条件并执行分页查询
+     */
+    private LambdaQueryWrapper<KwtParkingWalletFee> buildAndExecuteQuery(ParkingWalletFeeQueryParam param) {
+        return  Wrappers.<KwtParkingWalletFee>lambdaQuery()
+                .eq(param.getSupEntId() != null, KwtParkingWalletFee::getSupEntId, param.getSupEntId())
+                .eq(param.getProEntId() != null, KwtParkingWalletFee::getProEntId, param.getProEntId())
+                .orderByDesc(KwtParkingWalletFee::getUpdateTime);
+    }
+
+    /**
+     * 保存服务费
+     * @param param
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void saveServerFee(ParkingWalletFeeSaveParam param) {
+        log.info("保存服务费,param:{}", JSON.toJSONString(param));
+        KwtParkingWalletFee walletFee = parkingWalletFeeRepository.getById(param.getId());
+        if (walletFee == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.DRIVER_NOT_FOUND, "服务费信息不存在");
+        }
+        // 1. 先修改服务余额
+        walletFee.setServiceFeeBalance(walletFee.getServiceFeeBalance().add(param.getServiceFee()));
+        parkingWalletFeeRepository.updateById(walletFee);
+
+        // 2.新增明细
+        KwtParkingWalletFeeBalance feeBalance = new KwtParkingWalletFeeBalance();
+        feeBalance.setProEntId(param.getEntId());
+        feeBalance.setTradeType(9);
+        feeBalance.setTradeAmount(param.getServiceFee());
+        feeBalance.setServiceFeeBalance(walletFee.getServiceFeeBalance());
+        feeBalance.setTradingAmount(walletFee.getTradingAmount());
+        feeBalance.setVoucherUrl(param.getVoucherUrl());
+        feeBalance.setRemark(param.getRemark());
+        parkingWalletFeeBalanceRepository.save(feeBalance);
+    }
+    /**
+     * 分页查询服务费明细
+     * @param param
+     */
+    public PageDataResult<ParkingWalletFeeBalanceResp> pageQueryServerFeeDetails(ParkingWalletFeeBalanceQueryParam param) {
+        log.info("分页查询服务费明细:{}", JSON.toJSONString(param));
+
+        //构建查询条件
+        LambdaQueryWrapper<KwtParkingWalletFeeBalance> wrapper = buildAndExecuteQuery(param);
 
+        Page<KwtParkingWalletFeeBalance> pageByStatus = parkingWalletFeeBalanceRepository.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
+        List<KwtParkingWalletFeeBalance> records = pageByStatus.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            log.info("分页查询服务费明细为空");
+            return PageDataResult.empty(param.getPageNum(), param.getPageSize());
+        }
+        List<ParkingWalletFeeBalanceResp> changeStrategyRespList = getWalletFeeBalancePageResult(records);
+        return PageDataResult.success(param.getPageNum(), param.getPageSize(), pageByStatus.getTotal(), changeStrategyRespList);
+    }
+    /**
+     * 构建查询条件并执行分页查询
+     */
+    private LambdaQueryWrapper<KwtParkingWalletFeeBalance> buildAndExecuteQuery(ParkingWalletFeeBalanceQueryParam param) {
+        return  Wrappers.<KwtParkingWalletFeeBalance>lambdaQuery()
+                .eq(param.getSupEntId() != null, KwtParkingWalletFeeBalance::getSupEntId, param.getSupEntId())
+                .eq(param.getProEntId() != null, KwtParkingWalletFeeBalance::getProEntId, param.getProEntId())
+                .eq(KwtParkingWalletFeeBalance::getOrderNo, param.getOrderNo())
+                .eq(KwtParkingWalletFeeBalance::getTradeType, param.getTradeType())
+                .ge(KwtParkingWalletFeeBalance::getTradeAmount, param.getMinFee())
+                .le(KwtParkingWalletFeeBalance::getTradeAmount, param.getMaxFee())
+                .ge(KwtParkingWalletFeeBalance::getCreateTime, param.getStartCreateTime())
+                .le(KwtParkingWalletFeeBalance::getCreateTime, param.getEndCreateTime())
+                .orderByDesc(KwtParkingWalletFeeBalance::getServiceFeeBalance);
+    }
+    /**
+     * 获取服务费明细
+     * @param records
+     */
+    private List<ParkingWalletFeeBalanceResp> getWalletFeeBalancePageResult(List<KwtParkingWalletFeeBalance> records) {
+        log.info("组装服务费明细,param:{}", JSON.toJSONString(records));
+        if (CollectionUtils.isEmpty(records)) {
+            return Collections.emptyList();
+        }
+        List<ParkingWalletFeeBalanceResp> walletFeeList = records.stream()
+                .map(feeBalance -> {
+                    ParkingWalletFeeBalanceResp resp = new ParkingWalletFeeBalanceResp();
+                    resp.setId(feeBalance.getId());
+                    resp.setOrderNo(feeBalance.getOrderNo());
+                    resp.setProEntId(feeBalance.getProEntId());
+                    resp.setProEntName(getEntName(feeBalance.getProEntId()));
+                    resp.setSupEntId(feeBalance.getSupEntId());
+                    resp.setSupEntName(getEntName(feeBalance.getSupEntId()));
+                    resp.setTradeType(feeBalance.getTradeType());
+                    resp.setTradeTypeDesc(WalletTypEnum.getDescByCode(feeBalance.getTradeType()));
+                    resp.setTradeAmount(feeBalance.getTradeAmount());
+                    resp.setServiceFeeBalance(feeBalance.getServiceFeeBalance());
+                    resp.setTradingAmount(feeBalance.getTradingAmount());
+                    resp.setVoucherUrl(feeBalance.getVoucherUrl());
+                    resp.setRemark(feeBalance.getRemark());
+                    resp.setCreateTime(feeBalance.getCreateTime());
+                    return resp;
+                }).collect(Collectors.toList());
+
+        log.info("组装服务费明细结束,size:{}", JSON.toJSONString(walletFeeList.size()));
+        return walletFeeList;
+    }
+
+
+    /**
+     * 通过企业id查询企业名称
+     * @param entId
+     */
+    private String getEntName(Long entId) {
+        // 查询企业名称
+        EntCacheResDto entCacheResDto = remoteSystemService.queryEntDetails(entId);
+        if (entCacheResDto == null) {
+            return null;
+        }
+        return entCacheResDto.getFirmName();
+    }
 }

+ 12 - 1
sql/2026/06/2026_06_16_create.sql

@@ -64,4 +64,15 @@ CREATE TABLE `kwt_parking_wallet_fee_balance` (
                                                   create_user                     bigint          NOT NULL DEFAULT '-1' COMMENT '创建人',
                                                   update_user                     bigint          NOT NULL DEFAULT '-1' COMMENT '更新人',
                                                   PRIMARY KEY (`id`) USING BTREE
-) comment '预存服务费明细';
+) comment '预存服务费明细';
+
+CREATE TABLE `kwt_parking_strategy_switch` (
+                                               `id`                            bigint          NOT NULL AUTO_INCREMENT COMMENT '主键',
+                                               status                          int             NOT NULL DEFAULT '0' COMMENT '状态(0-关闭,1-开启)',
+                                               default_fee                decimal(16,2)   NOT NULL DEFAULT '0.00' COMMENT '默认服务费',
+                                               create_time                     datetime        NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+                                               update_time                     datetime        NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP COMMENT '更新时间',
+                                               create_user                     bigint          NOT NULL DEFAULT '-1' COMMENT '创建人',
+                                               update_user                     bigint          NOT NULL DEFAULT '-1' COMMENT '更新人',
+                                               PRIMARY KEY (`id`) USING BTREE
+) comment '收费策开关表';