From fa0c90d5a05eac4e83b204b86311de7cb0e4b418 Mon Sep 17 00:00:00 2001
From: sen <sen@qq.com>
Date: 星期三, 17 十二月 2025 16:08:03 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/cwxt_master' into cwxt_master

---
 service/src/main/java/com/ruoyi/cwgl/domain/PayableFeeDetail.java                     |  131 +++
 ui/admin-ui3/src/api/cwgl/receivableFeeDetail.ts                                      |   67 +
 service/src/main/java/com/ruoyi/cwgl/service/IPayableFeeDetailService.java            |  102 ++
 service/src/main/resources/mapper/cwgl/PayableFeeDetailMapper.xml                     |  182 +++++
 service/src/main/java/com/ruoyi/cwgl/service/IReceivableFeeDetailService.java         |  102 ++
 service/src/main/java/com/ruoyi/cwgl/mapper/PayableFeeDetailMapper.java               |   87 ++
 ui/admin-ui3/src/views/cwgl/receivableFeeDetail/index.vue                             |  177 +++++
 service/src/main/java/com/ruoyi/cwgl/service/impl/ReceivableFeeDetailServiceImpl.java |  182 +++++
 service/src/main/java/com/ruoyi/cwgl/controller/PayableFeeDetailController.java       |  108 +++
 service/src/main/java/com/ruoyi/cwgl/mapper/ReceivableFeeDetailMapper.java            |   87 ++
 ui/admin-ui3/src/api/cwgl/payableFeeDetail.ts                                         |   67 +
 service/src/main/java/com/ruoyi/cwgl/domain/ReceivableFeeDetail.java                  |  132 +++
 service/src/main/resources/mapper/cwgl/ReceivableFeeDetailMapper.xml                  |  182 +++++
 ui/admin-ui3/src/views/cwgl/payableFeeDetail/index.vue                                |  177 +++++
 service/src/main/java/com/ruoyi/cwgl/controller/ReceivableFeeDetailController.java    |  108 +++
 service/src/main/java/com/ruoyi/cwgl/service/impl/PayableFeeDetailServiceImpl.java    |  182 +++++
 16 files changed, 2,073 insertions(+), 0 deletions(-)

diff --git a/service/src/main/java/com/ruoyi/cwgl/controller/PayableFeeDetailController.java b/service/src/main/java/com/ruoyi/cwgl/controller/PayableFeeDetailController.java
new file mode 100644
index 0000000..be9f002
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/controller/PayableFeeDetailController.java
@@ -0,0 +1,108 @@
+package com.ruoyi.cwgl.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.utils.file.DownloadExportUtil;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.cwgl.domain.PayableFeeDetail;
+import com.ruoyi.cwgl.service.IPayableFeeDetailService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 搴斾粯璐圭敤鏄庣粏Controller
+ *
+ * @author ruoyi
+ * @date 2025-12-17
+ */
+@RestController
+@RequestMapping("/cwgl/payableFeeDetail")
+public class PayableFeeDetailController extends BaseController
+{
+    @Autowired
+    private IPayableFeeDetailService payableFeeDetailService;
+
+
+
+    /**
+     * 鏌ヨ搴斾粯璐圭敤鏄庣粏鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:payableFeeDetail:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(PayableFeeDetail payableFeeDetail)
+    {
+        startPage();
+        List<PayableFeeDetail> list = payableFeeDetailService.selectPayableFeeDetailList(payableFeeDetail);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭搴斾粯璐圭敤鏄庣粏鍒楄〃
+     * @param payableFeeDetail 鏌ヨ鏉′欢瀵硅薄
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:payableFeeDetail:export')")
+    @Log(title = "搴斾粯璐圭敤鏄庣粏", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(PayableFeeDetail payableFeeDetail,String exportKey)
+    {
+        payableFeeDetailService.export(payableFeeDetail,exportKey);
+        return AjaxResult.success("瀵煎嚭璇锋眰鎴愬姛锛岃绋嶅悗鐐瑰嚮涓嬭浇...!");
+    }
+
+
+
+    /**
+     * 鑾峰彇搴斾粯璐圭敤鏄庣粏璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:payableFeeDetail:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Integer id)
+    {
+        return AjaxResult.success(payableFeeDetailService.selectPayableFeeDetailById(id));
+    }
+
+    /**
+     * 鏂板搴斾粯璐圭敤鏄庣粏
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:payableFeeDetail:add')")
+    @Log(title = "搴斾粯璐圭敤鏄庣粏", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody PayableFeeDetail payableFeeDetail)
+    {
+        return toAjax(payableFeeDetailService.insertPayableFeeDetail(payableFeeDetail));
+    }
+
+    /**
+     * 淇敼搴斾粯璐圭敤鏄庣粏
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:payableFeeDetail:edit')")
+    @Log(title = "搴斾粯璐圭敤鏄庣粏", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody PayableFeeDetail payableFeeDetail)
+    {
+        return toAjax(payableFeeDetailService.updatePayableFeeDetail(payableFeeDetail));
+    }
+
+    /**
+     * 鍒犻櫎搴斾粯璐圭敤鏄庣粏
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:payableFeeDetail:remove')")
+    @Log(title = "搴斾粯璐圭敤鏄庣粏", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Integer[] ids)
+    {
+        return toAjax(payableFeeDetailService.deletePayableFeeDetailByIds(ids));
+    }
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/controller/ReceivableFeeDetailController.java b/service/src/main/java/com/ruoyi/cwgl/controller/ReceivableFeeDetailController.java
new file mode 100644
index 0000000..7bd0e15
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/controller/ReceivableFeeDetailController.java
@@ -0,0 +1,108 @@
+package com.ruoyi.cwgl.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.utils.file.DownloadExportUtil;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.cwgl.domain.ReceivableFeeDetail;
+import com.ruoyi.cwgl.service.IReceivableFeeDetailService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 搴旀敹璐圭敤鏄庣粏Controller
+ *
+ * @author ruoyi
+ * @date 2025-12-17
+ */
+@RestController
+@RequestMapping("/cwgl/receivableFeeDetail")
+public class ReceivableFeeDetailController extends BaseController
+{
+    @Autowired
+    private IReceivableFeeDetailService receivableFeeDetailService;
+
+
+
+    /**
+     * 鏌ヨ搴旀敹璐圭敤鏄庣粏鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:receivableFeeDetail:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ReceivableFeeDetail receivableFeeDetail)
+    {
+        startPage();
+        List<ReceivableFeeDetail> list = receivableFeeDetailService.selectReceivableFeeDetailList(receivableFeeDetail);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭搴旀敹璐圭敤鏄庣粏鍒楄〃
+     * @param receivableFeeDetail 鏌ヨ鏉′欢瀵硅薄
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:receivableFeeDetail:export')")
+    @Log(title = "搴旀敹璐圭敤鏄庣粏", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(ReceivableFeeDetail receivableFeeDetail,String exportKey)
+    {
+        receivableFeeDetailService.export(receivableFeeDetail,exportKey);
+        return AjaxResult.success("瀵煎嚭璇锋眰鎴愬姛锛岃绋嶅悗鐐瑰嚮涓嬭浇...!");
+    }
+
+
+
+    /**
+     * 鑾峰彇搴旀敹璐圭敤鏄庣粏璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:receivableFeeDetail:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Integer id)
+    {
+        return AjaxResult.success(receivableFeeDetailService.selectReceivableFeeDetailById(id));
+    }
+
+    /**
+     * 鏂板搴旀敹璐圭敤鏄庣粏
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:receivableFeeDetail:add')")
+    @Log(title = "搴旀敹璐圭敤鏄庣粏", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ReceivableFeeDetail receivableFeeDetail)
+    {
+        return toAjax(receivableFeeDetailService.insertReceivableFeeDetail(receivableFeeDetail));
+    }
+
+    /**
+     * 淇敼搴旀敹璐圭敤鏄庣粏
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:receivableFeeDetail:edit')")
+    @Log(title = "搴旀敹璐圭敤鏄庣粏", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ReceivableFeeDetail receivableFeeDetail)
+    {
+        return toAjax(receivableFeeDetailService.updateReceivableFeeDetail(receivableFeeDetail));
+    }
+
+    /**
+     * 鍒犻櫎搴旀敹璐圭敤鏄庣粏
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:receivableFeeDetail:remove')")
+    @Log(title = "搴旀敹璐圭敤鏄庣粏", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Integer[] ids)
+    {
+        return toAjax(receivableFeeDetailService.deleteReceivableFeeDetailByIds(ids));
+    }
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/domain/PayableFeeDetail.java b/service/src/main/java/com/ruoyi/cwgl/domain/PayableFeeDetail.java
new file mode 100644
index 0000000..bb827b5
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/domain/PayableFeeDetail.java
@@ -0,0 +1,131 @@
+package com.ruoyi.cwgl.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.util.Date;
+import lombok.Data;
+/**
+ * 搴斾粯璐圭敤鏄庣粏瀵硅薄 payable_fee_detail
+ *
+ * @author ruoyi
+ * @date 2025-12-17
+ */
+@Data
+public class PayableFeeDetail{
+
+
+    /** ID */
+        @TableField("id")
+    private Integer id;
+
+
+    /** 搴斾粯璐圭敤绠$悊ID */
+    @Excel(name = "搴斾粯璐圭敤绠$悊ID")
+
+        @TableField("payable_fee_id")
+    private Integer payableFeeId;
+
+
+    /** 璐圭敤绫诲瀷 */
+    @Excel(name = "璐圭敤绫诲瀷")
+
+        @TableField("fee_type")
+    private String feeType;
+
+
+    /** 璐圭敤鍚嶇О */
+    @Excel(name = "璐圭敤鍚嶇О")
+
+        @TableField("fee_name")
+    private String feeName;
+
+
+    /** 璁¤垂鍗曚綅 */
+    @Excel(name = "璁¤垂鍗曚綅")
+
+        @TableField("billing_unit")
+    private String billingUnit;
+
+
+    /** 璁¤垂鍗曚环 */
+    @Excel(name = "璁¤垂鍗曚环")
+
+        @TableField("unit_price")
+    private BigDecimal unitPrice;
+
+
+    /** 璁¤垂鏁伴噺 */
+    @Excel(name = "璁¤垂鏁伴噺")
+
+        @TableField("billing_quantity")
+    private BigDecimal billingQuantity;
+
+
+    /** 璁¤垂閲戦 */
+    @Excel(name = "璁¤垂閲戦")
+
+        @TableField("billing_amount")
+    private BigDecimal billingAmount;
+
+
+    /** 瀹炰粯閲戦 */
+    @Excel(name = "瀹炰粯閲戦")
+
+        @TableField("actual_amount")
+    private BigDecimal actualAmount;
+
+
+    /** 甯佸埗 */
+    @Excel(name = "甯佸埗")
+
+        @TableField("currency")
+    private String currency;
+
+
+    /** 璐圭敤鐧昏鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "璐圭敤鐧昏鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+        @TableField("fee_reg_time")
+    private Date feeRegTime;
+
+
+    /** 澶囨敞 */
+    @Excel(name = "澶囨敞")
+
+        @TableField("remark")
+    private String remark;
+
+
+    /** 鍒涘缓浜� */
+        @TableField("create_by")
+    private String createBy;
+
+
+    /** 鍒涘缓鏃堕棿 */
+        @JsonFormat(pattern = "yyyy-MM-dd")
+        @TableField("create_time")
+    private Date createTime;
+
+
+    /** 鏇存柊浜� */
+        @TableField("update_by")
+    private String updateBy;
+
+
+    /** 鏇存柊鏃堕棿 */
+        @JsonFormat(pattern = "yyyy-MM-dd")
+        @TableField("update_time")
+    private Date updateTime;
+
+
+    /** 鍒犻櫎鏍囪(0:姝e父;1:鍒犻櫎) */
+    @Excel(name = "鍒犻櫎鏍囪(0:姝e父;1:鍒犻櫎)")
+
+        @TableField("deleted")
+    private Integer deleted;
+
+
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/domain/ReceivableFeeDetail.java b/service/src/main/java/com/ruoyi/cwgl/domain/ReceivableFeeDetail.java
new file mode 100644
index 0000000..013373e
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/domain/ReceivableFeeDetail.java
@@ -0,0 +1,132 @@
+package com.ruoyi.cwgl.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.util.Date;
+import lombok.Data;
+/**
+ * 搴旀敹璐圭敤鏄庣粏瀵硅薄 receivable_fee_detail
+ *
+ * @author ruoyi
+ * @date 2025-12-17
+ */
+@Data
+public class ReceivableFeeDetail{
+
+
+    /** ID */
+        @TableField("id")
+    private Integer id;
+
+
+    /** 搴旀敹璐圭敤绠$悊ID */
+    @Excel(name = "搴旀敹璐圭敤绠$悊ID")
+
+        @TableField("receivable_fee_id")
+    private Integer receivableFeeId;
+
+
+    /** 璐圭敤绫诲瀷 */
+    @Excel(name = "璐圭敤绫诲瀷")
+
+        @TableField("fee_type")
+    private String feeType;
+
+
+    /** 璐圭敤鍚嶇О */
+    @Excel(name = "璐圭敤鍚嶇О")
+
+        @TableField("fee_name")
+    private String feeName;
+
+
+    /** 璁¤垂鍗曚綅 */
+    @Excel(name = "璁¤垂鍗曚綅")
+
+        @TableField("billing_unit")
+    private String billingUnit;
+
+
+    /** 璁¤垂鍗曚环 */
+    @Excel(name = "璁¤垂鍗曚环")
+
+        @TableField("unit_price")
+    private BigDecimal unitPrice;
+
+
+    /** 璁¤垂鏁伴噺 */
+    @Excel(name = "璁¤垂鏁伴噺")
+
+        @TableField("billing_quantity")
+    private BigDecimal billingQuantity;
+
+
+    /** 璁¤垂閲戦 */
+    @Excel(name = "璁¤垂閲戦")
+
+        @TableField("billing_amount")
+    private BigDecimal billingAmount;
+
+
+    /** 瀹炴敹閲戦 */
+    @Excel(name = "瀹炴敹閲戦")
+
+        @TableField("actual_amount")
+    private BigDecimal actualAmount;
+
+
+    /** 甯佸埗 */
+    @Excel(name = "甯佸埗")
+
+        @TableField("currency")
+    private String currency;
+
+
+    /** 璐圭敤鐧昏鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "璐圭敤鐧昏鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+
+        @TableField("fee_reg_time")
+    private Date feeRegTime;
+
+
+    /** 澶囨敞 */
+    @Excel(name = "澶囨敞")
+
+        @TableField("remark")
+    private String remark;
+
+
+    /** 鍒涘缓浜� */
+        @TableField("create_by")
+    private String createBy;
+
+
+    /** 鍒涘缓鏃堕棿 */
+        @JsonFormat(pattern = "yyyy-MM-dd")
+        @TableField("create_time")
+    private Date createTime;
+
+
+    /** 鏇存柊浜� */
+        @TableField("update_by")
+    private String updateBy;
+
+
+    /** 鏇存柊鏃堕棿 */
+        @JsonFormat(pattern = "yyyy-MM-dd")
+        @TableField("update_time")
+    private Date updateTime;
+
+
+    /** 鍒犻櫎鏍囪(0:姝e父;1:鍒犻櫎) */
+    @Excel(name = "鍒犻櫎鏍囪(0:姝e父;1:鍒犻櫎)")
+
+        @TableField("deleted")
+    private Integer deleted;
+
+
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/mapper/PayableFeeDetailMapper.java b/service/src/main/java/com/ruoyi/cwgl/mapper/PayableFeeDetailMapper.java
new file mode 100644
index 0000000..2023ad9
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/mapper/PayableFeeDetailMapper.java
@@ -0,0 +1,87 @@
+package com.ruoyi.cwgl.mapper;
+
+import java.util.List;
+import com.ruoyi.cwgl.domain.PayableFeeDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * 搴斾粯璐圭敤鏄庣粏Mapper鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2025-12-17
+ */
+public interface PayableFeeDetailMapper  extends BaseMapper<PayableFeeDetail>
+{
+    /**
+     * 鏌ヨ搴斾粯璐圭敤鏄庣粏
+     * 
+     * @param id 搴斾粯璐圭敤鏄庣粏ID
+     * @return 搴斾粯璐圭敤鏄庣粏
+     */
+    public PayableFeeDetail selectPayableFeeDetailById(Integer id);
+
+    /**
+     * 鏌ヨ搴斾粯璐圭敤鏄庣粏 璁板綍鏁�
+     *
+     * @param payableFeeDetail 搴斾粯璐圭敤鏄庣粏
+     * @return 搴斾粯璐圭敤鏄庣粏闆嗗悎
+     */
+    public int selectPayableFeeDetailCount(PayableFeeDetail payableFeeDetail);
+
+    /**
+     * 鏌ヨ搴斾粯璐圭敤鏄庣粏鍒楄〃
+     * 
+     * @param payableFeeDetail 搴斾粯璐圭敤鏄庣粏
+     * @return 搴斾粯璐圭敤鏄庣粏闆嗗悎
+     */
+    public List<PayableFeeDetail> selectPayableFeeDetailList(PayableFeeDetail payableFeeDetail);
+
+    /**
+     * 鏂板搴斾粯璐圭敤鏄庣粏
+     * 
+     * @param payableFeeDetail 搴斾粯璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int insertPayableFeeDetail(PayableFeeDetail payableFeeDetail);
+
+    /**
+     * 鏂板搴斾粯璐圭敤鏄庣粏[鎵归噺]
+     *
+     * @param payableFeeDetails 搴斾粯璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int insertPayableFeeDetailBatch(List<PayableFeeDetail> payableFeeDetails);
+
+    /**
+     * 淇敼搴斾粯璐圭敤鏄庣粏
+     * 
+     * @param payableFeeDetail 搴斾粯璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int updatePayableFeeDetail(PayableFeeDetail payableFeeDetail);
+
+    /**
+     * 淇敼搴斾粯璐圭敤鏄庣粏[鎵归噺]
+     *
+     * @param payableFeeDetails 搴斾粯璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int updatePayableFeeDetailBatch(List<PayableFeeDetail> payableFeeDetails);
+
+    /**
+     * 鍒犻櫎搴斾粯璐圭敤鏄庣粏
+     * 
+     * @param id 搴斾粯璐圭敤鏄庣粏ID
+     * @return 缁撴灉
+     */
+    public int deletePayableFeeDetailById(Integer id);
+
+    /**
+     * 鎵归噺鍒犻櫎搴斾粯璐圭敤鏄庣粏
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deletePayableFeeDetailByIds(Integer[] ids);
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/mapper/ReceivableFeeDetailMapper.java b/service/src/main/java/com/ruoyi/cwgl/mapper/ReceivableFeeDetailMapper.java
new file mode 100644
index 0000000..a6c67d3
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/mapper/ReceivableFeeDetailMapper.java
@@ -0,0 +1,87 @@
+package com.ruoyi.cwgl.mapper;
+
+import java.util.List;
+import com.ruoyi.cwgl.domain.ReceivableFeeDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * 搴旀敹璐圭敤鏄庣粏Mapper鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2025-12-17
+ */
+public interface ReceivableFeeDetailMapper  extends BaseMapper<ReceivableFeeDetail>
+{
+    /**
+     * 鏌ヨ搴旀敹璐圭敤鏄庣粏
+     * 
+     * @param id 搴旀敹璐圭敤鏄庣粏ID
+     * @return 搴旀敹璐圭敤鏄庣粏
+     */
+    public ReceivableFeeDetail selectReceivableFeeDetailById(Integer id);
+
+    /**
+     * 鏌ヨ搴旀敹璐圭敤鏄庣粏 璁板綍鏁�
+     *
+     * @param receivableFeeDetail 搴旀敹璐圭敤鏄庣粏
+     * @return 搴旀敹璐圭敤鏄庣粏闆嗗悎
+     */
+    public int selectReceivableFeeDetailCount(ReceivableFeeDetail receivableFeeDetail);
+
+    /**
+     * 鏌ヨ搴旀敹璐圭敤鏄庣粏鍒楄〃
+     * 
+     * @param receivableFeeDetail 搴旀敹璐圭敤鏄庣粏
+     * @return 搴旀敹璐圭敤鏄庣粏闆嗗悎
+     */
+    public List<ReceivableFeeDetail> selectReceivableFeeDetailList(ReceivableFeeDetail receivableFeeDetail);
+
+    /**
+     * 鏂板搴旀敹璐圭敤鏄庣粏
+     * 
+     * @param receivableFeeDetail 搴旀敹璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int insertReceivableFeeDetail(ReceivableFeeDetail receivableFeeDetail);
+
+    /**
+     * 鏂板搴旀敹璐圭敤鏄庣粏[鎵归噺]
+     *
+     * @param receivableFeeDetails 搴旀敹璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int insertReceivableFeeDetailBatch(List<ReceivableFeeDetail> receivableFeeDetails);
+
+    /**
+     * 淇敼搴旀敹璐圭敤鏄庣粏
+     * 
+     * @param receivableFeeDetail 搴旀敹璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int updateReceivableFeeDetail(ReceivableFeeDetail receivableFeeDetail);
+
+    /**
+     * 淇敼搴旀敹璐圭敤鏄庣粏[鎵归噺]
+     *
+     * @param receivableFeeDetails 搴旀敹璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int updateReceivableFeeDetailBatch(List<ReceivableFeeDetail> receivableFeeDetails);
+
+    /**
+     * 鍒犻櫎搴旀敹璐圭敤鏄庣粏
+     * 
+     * @param id 搴旀敹璐圭敤鏄庣粏ID
+     * @return 缁撴灉
+     */
+    public int deleteReceivableFeeDetailById(Integer id);
+
+    /**
+     * 鎵归噺鍒犻櫎搴旀敹璐圭敤鏄庣粏
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteReceivableFeeDetailByIds(Integer[] ids);
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/service/IPayableFeeDetailService.java b/service/src/main/java/com/ruoyi/cwgl/service/IPayableFeeDetailService.java
new file mode 100644
index 0000000..41a8145
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/service/IPayableFeeDetailService.java
@@ -0,0 +1,102 @@
+package com.ruoyi.cwgl.service;
+
+import java.util.List;
+import com.ruoyi.cwgl.domain.PayableFeeDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+/**
+ * 搴斾粯璐圭敤鏄庣粏Service鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2025-12-17
+ */
+public interface IPayableFeeDetailService extends IService<PayableFeeDetail>
+{
+    /**
+     * 鏌ヨ搴斾粯璐圭敤鏄庣粏
+     * 
+     * @param id 搴斾粯璐圭敤鏄庣粏ID
+     * @return 搴斾粯璐圭敤鏄庣粏
+     */
+    public PayableFeeDetail selectPayableFeeDetailById(Integer id);
+
+    /**
+     * 鏌ヨ搴斾粯璐圭敤鏄庣粏 璁板綍鏁�
+     *
+     * @param payableFeeDetail 搴斾粯璐圭敤鏄庣粏
+     * @return 搴斾粯璐圭敤鏄庣粏闆嗗悎
+     */
+    public int selectPayableFeeDetailCount(PayableFeeDetail payableFeeDetail);
+
+    /**
+     * 鏌ヨ搴斾粯璐圭敤鏄庣粏鍒楄〃
+     * 
+     * @param payableFeeDetail 搴斾粯璐圭敤鏄庣粏
+     * @return 搴斾粯璐圭敤鏄庣粏闆嗗悎
+     */
+    public List<PayableFeeDetail> selectPayableFeeDetailList(PayableFeeDetail payableFeeDetail);
+
+    /**
+     * 鏌ヨ搴斾粯璐圭敤鏄庣粏鍒楄〃 寮傛 瀵煎嚭
+     *
+     * @param payableFeeDetail 搴斾粯璐圭敤鏄庣粏
+     * @param exportKey 瀵煎嚭鍔熻兘鐨勫敮涓�鏍囪瘑
+     * @return 搴斾粯璐圭敤鏄庣粏闆嗗悎
+     */
+    public void export(PayableFeeDetail payableFeeDetail, String exportKey) ;
+
+
+    /**
+     * 鏂板搴斾粯璐圭敤鏄庣粏
+     * 
+     * @param payableFeeDetail 搴斾粯璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int insertPayableFeeDetail(PayableFeeDetail payableFeeDetail);
+
+    /**
+     * 鏂板搴斾粯璐圭敤鏄庣粏[鎵归噺]
+     *
+     * @param payableFeeDetails 搴斾粯璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int insertPayableFeeDetailBatch(List<PayableFeeDetail> payableFeeDetails);
+
+    /**
+     * 淇敼搴斾粯璐圭敤鏄庣粏
+     * 
+     * @param payableFeeDetail 搴斾粯璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int updatePayableFeeDetail(PayableFeeDetail payableFeeDetail);
+
+    /**
+     * 淇敼搴斾粯璐圭敤鏄庣粏[鎵归噺]
+     *
+     * @param payableFeeDetails 搴斾粯璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int updatePayableFeeDetailBatch(List<PayableFeeDetail> payableFeeDetails);
+    /**
+     * 鎵归噺鍒犻櫎搴斾粯璐圭敤鏄庣粏
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deletePayableFeeDetailByIds(String ids);
+
+    /**
+     * 鎵归噺鍒犻櫎搴斾粯璐圭敤鏄庣粏
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deletePayableFeeDetailByIds(Integer[] ids);
+
+    /**
+     * 鍒犻櫎搴斾粯璐圭敤鏄庣粏淇℃伅
+     * 
+     * @param id 搴斾粯璐圭敤鏄庣粏ID
+     * @return 缁撴灉
+     */
+    public int deletePayableFeeDetailById(Integer id);
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/service/IReceivableFeeDetailService.java b/service/src/main/java/com/ruoyi/cwgl/service/IReceivableFeeDetailService.java
new file mode 100644
index 0000000..35081cb
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/service/IReceivableFeeDetailService.java
@@ -0,0 +1,102 @@
+package com.ruoyi.cwgl.service;
+
+import java.util.List;
+import com.ruoyi.cwgl.domain.ReceivableFeeDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+/**
+ * 搴旀敹璐圭敤鏄庣粏Service鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2025-12-17
+ */
+public interface IReceivableFeeDetailService extends IService<ReceivableFeeDetail>
+{
+    /**
+     * 鏌ヨ搴旀敹璐圭敤鏄庣粏
+     * 
+     * @param id 搴旀敹璐圭敤鏄庣粏ID
+     * @return 搴旀敹璐圭敤鏄庣粏
+     */
+    public ReceivableFeeDetail selectReceivableFeeDetailById(Integer id);
+
+    /**
+     * 鏌ヨ搴旀敹璐圭敤鏄庣粏 璁板綍鏁�
+     *
+     * @param receivableFeeDetail 搴旀敹璐圭敤鏄庣粏
+     * @return 搴旀敹璐圭敤鏄庣粏闆嗗悎
+     */
+    public int selectReceivableFeeDetailCount(ReceivableFeeDetail receivableFeeDetail);
+
+    /**
+     * 鏌ヨ搴旀敹璐圭敤鏄庣粏鍒楄〃
+     * 
+     * @param receivableFeeDetail 搴旀敹璐圭敤鏄庣粏
+     * @return 搴旀敹璐圭敤鏄庣粏闆嗗悎
+     */
+    public List<ReceivableFeeDetail> selectReceivableFeeDetailList(ReceivableFeeDetail receivableFeeDetail);
+
+    /**
+     * 鏌ヨ搴旀敹璐圭敤鏄庣粏鍒楄〃 寮傛 瀵煎嚭
+     *
+     * @param receivableFeeDetail 搴旀敹璐圭敤鏄庣粏
+     * @param exportKey 瀵煎嚭鍔熻兘鐨勫敮涓�鏍囪瘑
+     * @return 搴旀敹璐圭敤鏄庣粏闆嗗悎
+     */
+    public void export(ReceivableFeeDetail receivableFeeDetail, String exportKey) ;
+
+
+    /**
+     * 鏂板搴旀敹璐圭敤鏄庣粏
+     * 
+     * @param receivableFeeDetail 搴旀敹璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int insertReceivableFeeDetail(ReceivableFeeDetail receivableFeeDetail);
+
+    /**
+     * 鏂板搴旀敹璐圭敤鏄庣粏[鎵归噺]
+     *
+     * @param receivableFeeDetails 搴旀敹璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int insertReceivableFeeDetailBatch(List<ReceivableFeeDetail> receivableFeeDetails);
+
+    /**
+     * 淇敼搴旀敹璐圭敤鏄庣粏
+     * 
+     * @param receivableFeeDetail 搴旀敹璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int updateReceivableFeeDetail(ReceivableFeeDetail receivableFeeDetail);
+
+    /**
+     * 淇敼搴旀敹璐圭敤鏄庣粏[鎵归噺]
+     *
+     * @param receivableFeeDetails 搴旀敹璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    public int updateReceivableFeeDetailBatch(List<ReceivableFeeDetail> receivableFeeDetails);
+    /**
+     * 鎵归噺鍒犻櫎搴旀敹璐圭敤鏄庣粏
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteReceivableFeeDetailByIds(String ids);
+
+    /**
+     * 鎵归噺鍒犻櫎搴旀敹璐圭敤鏄庣粏
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteReceivableFeeDetailByIds(Integer[] ids);
+
+    /**
+     * 鍒犻櫎搴旀敹璐圭敤鏄庣粏淇℃伅
+     * 
+     * @param id 搴旀敹璐圭敤鏄庣粏ID
+     * @return 缁撴灉
+     */
+    public int deleteReceivableFeeDetailById(Integer id);
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/service/impl/PayableFeeDetailServiceImpl.java b/service/src/main/java/com/ruoyi/cwgl/service/impl/PayableFeeDetailServiceImpl.java
new file mode 100644
index 0000000..fbf59c1
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/service/impl/PayableFeeDetailServiceImpl.java
@@ -0,0 +1,182 @@
+package com.ruoyi.cwgl.service.impl;
+
+import java.util.List;
+
+import com.ruoyi.common.utils.DateUtils;
+import javax.annotation.Resource;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.stereotype.Service;
+import org.springframework.scheduling.annotation.Async;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.enums.DataSourceType;
+import com.ruoyi.common.core.service.BaseService;
+
+import com.ruoyi.cwgl.mapper.PayableFeeDetailMapper;
+import com.ruoyi.cwgl.domain.PayableFeeDetail;
+import com.ruoyi.cwgl.service.IPayableFeeDetailService;
+import com.ruoyi.common.core.text.Convert;
+
+/**
+ * 搴斾粯璐圭敤鏄庣粏Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2025-12-17
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class PayableFeeDetailServiceImpl  extends BaseService<PayableFeeDetailMapper, PayableFeeDetail> implements IPayableFeeDetailService
+{
+    protected final Logger logger = LoggerFactory.getLogger(getClass());
+    @Resource
+    private PayableFeeDetailMapper payableFeeDetailMapper;
+
+
+    /**
+     * 鏌ヨ搴斾粯璐圭敤鏄庣粏
+     *
+     * @param id 搴斾粯璐圭敤鏄庣粏ID
+     * @return 搴斾粯璐圭敤鏄庣粏
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Override
+    public PayableFeeDetail selectPayableFeeDetailById(Integer id)
+    {
+        return payableFeeDetailMapper.selectPayableFeeDetailById(id);
+    }
+
+    /**
+     * 鏌ヨ搴斾粯璐圭敤鏄庣粏 璁板綍鏁�
+     *
+     * @param payableFeeDetail 搴斾粯璐圭敤鏄庣粏
+     * @return 搴斾粯璐圭敤鏄庣粏闆嗗悎
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Override
+    public int selectPayableFeeDetailCount(PayableFeeDetail payableFeeDetail)
+    {
+        return payableFeeDetailMapper.selectPayableFeeDetailCount(payableFeeDetail);
+    }
+
+    /**
+     * 鏌ヨ搴斾粯璐圭敤鏄庣粏鍒楄〃
+     *
+     * @param payableFeeDetail 搴斾粯璐圭敤鏄庣粏
+     * @return 搴斾粯璐圭敤鏄庣粏
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Override
+    public List<PayableFeeDetail> selectPayableFeeDetailList(PayableFeeDetail payableFeeDetail)
+    {
+        return payableFeeDetailMapper.selectPayableFeeDetailList(payableFeeDetail);
+    }
+
+    /**
+     * 鏌ヨ搴斾粯璐圭敤鏄庣粏鍒楄〃 寮傛 瀵煎嚭
+     *
+     * @param payableFeeDetail 搴斾粯璐圭敤鏄庣粏
+     * @param exportKey 瀵煎嚭鍔熻兘鐨勫敮涓�鏍囪瘑
+     * @return 搴斾粯璐圭敤鏄庣粏闆嗗悎
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Async
+    @Override
+    public void export(PayableFeeDetail payableFeeDetail,String exportKey) {
+
+        super.export(PayableFeeDetail.class,exportKey,"payableFeeDetailData",(pageNum)->{
+            PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE);
+            return selectPayableFeeDetailList(payableFeeDetail);
+        });
+    }
+
+
+    /**
+     * 鏂板搴斾粯璐圭敤鏄庣粏
+     *
+     * @param payableFeeDetail 搴斾粯璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertPayableFeeDetail(PayableFeeDetail payableFeeDetail)
+    {
+        payableFeeDetail.setCreateTime(DateUtils.getNowDate());
+        return payableFeeDetailMapper.insertPayableFeeDetail(payableFeeDetail);
+    }
+
+    /**
+     * 鏂板搴斾粯璐圭敤鏄庣粏[鎵归噺]
+     *
+     * @param payableFeeDetails 搴斾粯璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertPayableFeeDetailBatch(List<PayableFeeDetail> payableFeeDetails)
+    {
+        int rows = payableFeeDetailMapper.insertPayableFeeDetailBatch(payableFeeDetails);
+        return rows;
+    }
+
+    /**
+     * 淇敼搴斾粯璐圭敤鏄庣粏
+     *
+     * @param payableFeeDetail 搴斾粯璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    @Override
+    public int updatePayableFeeDetail(PayableFeeDetail payableFeeDetail)
+    {
+        payableFeeDetail.setUpdateTime(DateUtils.getNowDate());
+        return payableFeeDetailMapper.updatePayableFeeDetail(payableFeeDetail);
+    }
+
+    /**
+     * 淇敼搴斾粯璐圭敤鏄庣粏[鎵归噺]
+     *
+     * @param payableFeeDetails 搴斾粯璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    @Override
+    public int updatePayableFeeDetailBatch(List<PayableFeeDetail> payableFeeDetails){
+        return payableFeeDetailMapper.updatePayableFeeDetailBatch(payableFeeDetails);
+    }
+
+    /**
+     * 鍒犻櫎搴斾粯璐圭敤鏄庣粏瀵硅薄
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deletePayableFeeDetailByIds(String ids)
+    {
+        return deletePayableFeeDetailByIds(Convert.toIntArray(ids));
+    }
+
+    /**
+     * 鍒犻櫎搴斾粯璐圭敤鏄庣粏瀵硅薄
+     *
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deletePayableFeeDetailByIds(Integer[] ids)
+    {
+        return payableFeeDetailMapper.deletePayableFeeDetailByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎搴斾粯璐圭敤鏄庣粏淇℃伅
+     *
+     * @param id 搴斾粯璐圭敤鏄庣粏ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deletePayableFeeDetailById(Integer id)
+    {
+        return payableFeeDetailMapper.deletePayableFeeDetailById(id);
+    }
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/service/impl/ReceivableFeeDetailServiceImpl.java b/service/src/main/java/com/ruoyi/cwgl/service/impl/ReceivableFeeDetailServiceImpl.java
new file mode 100644
index 0000000..808dfb8
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/service/impl/ReceivableFeeDetailServiceImpl.java
@@ -0,0 +1,182 @@
+package com.ruoyi.cwgl.service.impl;
+
+import java.util.List;
+
+import com.ruoyi.common.utils.DateUtils;
+import javax.annotation.Resource;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.stereotype.Service;
+import org.springframework.scheduling.annotation.Async;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.enums.DataSourceType;
+import com.ruoyi.common.core.service.BaseService;
+
+import com.ruoyi.cwgl.mapper.ReceivableFeeDetailMapper;
+import com.ruoyi.cwgl.domain.ReceivableFeeDetail;
+import com.ruoyi.cwgl.service.IReceivableFeeDetailService;
+import com.ruoyi.common.core.text.Convert;
+
+/**
+ * 搴旀敹璐圭敤鏄庣粏Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2025-12-17
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ReceivableFeeDetailServiceImpl  extends BaseService<ReceivableFeeDetailMapper, ReceivableFeeDetail> implements IReceivableFeeDetailService
+{
+    protected final Logger logger = LoggerFactory.getLogger(getClass());
+    @Resource
+    private ReceivableFeeDetailMapper receivableFeeDetailMapper;
+
+
+    /**
+     * 鏌ヨ搴旀敹璐圭敤鏄庣粏
+     *
+     * @param id 搴旀敹璐圭敤鏄庣粏ID
+     * @return 搴旀敹璐圭敤鏄庣粏
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Override
+    public ReceivableFeeDetail selectReceivableFeeDetailById(Integer id)
+    {
+        return receivableFeeDetailMapper.selectReceivableFeeDetailById(id);
+    }
+
+    /**
+     * 鏌ヨ搴旀敹璐圭敤鏄庣粏 璁板綍鏁�
+     *
+     * @param receivableFeeDetail 搴旀敹璐圭敤鏄庣粏
+     * @return 搴旀敹璐圭敤鏄庣粏闆嗗悎
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Override
+    public int selectReceivableFeeDetailCount(ReceivableFeeDetail receivableFeeDetail)
+    {
+        return receivableFeeDetailMapper.selectReceivableFeeDetailCount(receivableFeeDetail);
+    }
+
+    /**
+     * 鏌ヨ搴旀敹璐圭敤鏄庣粏鍒楄〃
+     *
+     * @param receivableFeeDetail 搴旀敹璐圭敤鏄庣粏
+     * @return 搴旀敹璐圭敤鏄庣粏
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Override
+    public List<ReceivableFeeDetail> selectReceivableFeeDetailList(ReceivableFeeDetail receivableFeeDetail)
+    {
+        return receivableFeeDetailMapper.selectReceivableFeeDetailList(receivableFeeDetail);
+    }
+
+    /**
+     * 鏌ヨ搴旀敹璐圭敤鏄庣粏鍒楄〃 寮傛 瀵煎嚭
+     *
+     * @param receivableFeeDetail 搴旀敹璐圭敤鏄庣粏
+     * @param exportKey 瀵煎嚭鍔熻兘鐨勫敮涓�鏍囪瘑
+     * @return 搴旀敹璐圭敤鏄庣粏闆嗗悎
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Async
+    @Override
+    public void export(ReceivableFeeDetail receivableFeeDetail,String exportKey) {
+
+        super.export(ReceivableFeeDetail.class,exportKey,"receivableFeeDetailData",(pageNum)->{
+            PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE);
+            return selectReceivableFeeDetailList(receivableFeeDetail);
+        });
+    }
+
+
+    /**
+     * 鏂板搴旀敹璐圭敤鏄庣粏
+     *
+     * @param receivableFeeDetail 搴旀敹璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertReceivableFeeDetail(ReceivableFeeDetail receivableFeeDetail)
+    {
+        receivableFeeDetail.setCreateTime(DateUtils.getNowDate());
+        return receivableFeeDetailMapper.insertReceivableFeeDetail(receivableFeeDetail);
+    }
+
+    /**
+     * 鏂板搴旀敹璐圭敤鏄庣粏[鎵归噺]
+     *
+     * @param receivableFeeDetails 搴旀敹璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertReceivableFeeDetailBatch(List<ReceivableFeeDetail> receivableFeeDetails)
+    {
+        int rows = receivableFeeDetailMapper.insertReceivableFeeDetailBatch(receivableFeeDetails);
+        return rows;
+    }
+
+    /**
+     * 淇敼搴旀敹璐圭敤鏄庣粏
+     *
+     * @param receivableFeeDetail 搴旀敹璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateReceivableFeeDetail(ReceivableFeeDetail receivableFeeDetail)
+    {
+        receivableFeeDetail.setUpdateTime(DateUtils.getNowDate());
+        return receivableFeeDetailMapper.updateReceivableFeeDetail(receivableFeeDetail);
+    }
+
+    /**
+     * 淇敼搴旀敹璐圭敤鏄庣粏[鎵归噺]
+     *
+     * @param receivableFeeDetails 搴旀敹璐圭敤鏄庣粏
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateReceivableFeeDetailBatch(List<ReceivableFeeDetail> receivableFeeDetails){
+        return receivableFeeDetailMapper.updateReceivableFeeDetailBatch(receivableFeeDetails);
+    }
+
+    /**
+     * 鍒犻櫎搴旀敹璐圭敤鏄庣粏瀵硅薄
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteReceivableFeeDetailByIds(String ids)
+    {
+        return deleteReceivableFeeDetailByIds(Convert.toIntArray(ids));
+    }
+
+    /**
+     * 鍒犻櫎搴旀敹璐圭敤鏄庣粏瀵硅薄
+     *
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteReceivableFeeDetailByIds(Integer[] ids)
+    {
+        return receivableFeeDetailMapper.deleteReceivableFeeDetailByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎搴旀敹璐圭敤鏄庣粏淇℃伅
+     *
+     * @param id 搴旀敹璐圭敤鏄庣粏ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteReceivableFeeDetailById(Integer id)
+    {
+        return receivableFeeDetailMapper.deleteReceivableFeeDetailById(id);
+    }
+}
diff --git a/service/src/main/resources/mapper/cwgl/PayableFeeDetailMapper.xml b/service/src/main/resources/mapper/cwgl/PayableFeeDetailMapper.xml
new file mode 100644
index 0000000..205cc7b
--- /dev/null
+++ b/service/src/main/resources/mapper/cwgl/PayableFeeDetailMapper.xml
@@ -0,0 +1,182 @@
+<?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.cwgl.mapper.PayableFeeDetailMapper">
+
+    <resultMap type="com.ruoyi.cwgl.domain.PayableFeeDetail" id="PayableFeeDetailResult">
+        <result property="id"    column="id"    />
+        <result property="payableFeeId"    column="payable_fee_id"    />
+        <result property="feeType"    column="fee_type"    />
+        <result property="feeName"    column="fee_name"    />
+        <result property="billingUnit"    column="billing_unit"    />
+        <result property="unitPrice"    column="unit_price"    />
+        <result property="billingQuantity"    column="billing_quantity"    />
+        <result property="billingAmount"    column="billing_amount"    />
+        <result property="actualAmount"    column="actual_amount"    />
+        <result property="currency"    column="currency"    />
+        <result property="feeRegTime"    column="fee_reg_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="deleted"    column="deleted"    />
+    </resultMap>
+
+    <sql id="selectPayableFeeDetailVo">
+        select thisTab.id, thisTab.payable_fee_id, thisTab.fee_type, thisTab.fee_name, thisTab.billing_unit, thisTab.unit_price, thisTab.billing_quantity, thisTab.billing_amount, thisTab.actual_amount, thisTab.currency, thisTab.fee_reg_time, thisTab.remark, thisTab.create_by, thisTab.create_time, thisTab.update_by, thisTab.update_time, thisTab.deleted from payable_fee_detail AS thisTab
+    </sql>
+    <sql id="selectPayableFeeDetailVoCount">
+        select count(0) from payable_fee_detail as thisTab
+    </sql>
+
+    <sql id="whereCondition">
+        <if test="payableFeeId != null "> and thisTab.payable_fee_id = #{payableFeeId}</if>
+        <if test="feeType != null  and feeType != ''"> and thisTab.fee_type = #{feeType}</if>
+        <if test="feeName != null  and feeName != ''"> and  thisTab.fee_name like concat('%', #{feeName}, '%')</if>
+        <if test="billingUnit != null  and billingUnit != ''"> and thisTab.billing_unit = #{billingUnit}</if>
+        <if test="unitPrice != null "> and thisTab.unit_price = #{unitPrice}</if>
+        <if test="billingQuantity != null "> and thisTab.billing_quantity = #{billingQuantity}</if>
+        <if test="billingAmount != null "> and thisTab.billing_amount = #{billingAmount}</if>
+        <if test="actualAmount != null "> and thisTab.actual_amount = #{actualAmount}</if>
+        <if test="currency != null  and currency != ''"> and thisTab.currency = #{currency}</if>
+        <if test="feeRegTime != null "> and thisTab.fee_reg_time = #{feeRegTime}</if>
+        <if test="deleted != null "> and thisTab.deleted = #{deleted}</if>
+    </sql>
+
+    <!--鏌ヨ-->
+    <select id="selectPayableFeeDetailById" parameterType="Integer" resultMap="PayableFeeDetailResult">
+        <include refid="selectPayableFeeDetailVo"/>
+        where id = #{id}
+    </select>
+
+    <select id="selectPayableFeeDetailCount" parameterType="com.ruoyi.cwgl.domain.PayableFeeDetail" resultType="int">
+        <include refid="selectPayableFeeDetailVoCount"/>
+        <where>
+            <include refid="whereCondition"/>
+        </where>
+    </select>
+
+    <select id="selectPayableFeeDetailList" parameterType="com.ruoyi.cwgl.domain.PayableFeeDetail" resultMap="PayableFeeDetailResult">
+        <include refid="selectPayableFeeDetailVo"/>
+        <where>
+            <include refid="whereCondition"/>
+        </where>
+        order by thisTab.id desc
+    </select>
+
+    <!-- 鏂板 -->
+    <insert id="insertPayableFeeDetail" parameterType="com.ruoyi.cwgl.domain.PayableFeeDetail"  useGeneratedKeys="true" keyProperty="id">
+        insert into payable_fee_detail
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="payableFeeId != null">payable_fee_id,</if>
+            <if test="feeType != null and feeType != ''">fee_type,</if>
+            <if test="feeName != null and feeName != ''">fee_name,</if>
+            <if test="billingUnit != null">billing_unit,</if>
+            <if test="unitPrice != null">unit_price,</if>
+            <if test="billingQuantity != null">billing_quantity,</if>
+            <if test="billingAmount != null">billing_amount,</if>
+            <if test="actualAmount != null">actual_amount,</if>
+            <if test="currency != null">currency,</if>
+            <if test="feeRegTime != null">fee_reg_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="deleted != null">deleted,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="payableFeeId != null">#{payableFeeId},</if>
+            <if test="feeType != null and feeType != ''">#{feeType},</if>
+            <if test="feeName != null and feeName != ''">#{feeName},</if>
+            <if test="billingUnit != null">#{billingUnit},</if>
+            <if test="unitPrice != null">#{unitPrice},</if>
+            <if test="billingQuantity != null">#{billingQuantity},</if>
+            <if test="billingAmount != null">#{billingAmount},</if>
+            <if test="actualAmount != null">#{actualAmount},</if>
+            <if test="currency != null">#{currency},</if>
+            <if test="feeRegTime != null">#{feeRegTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="deleted != null">#{deleted},</if>
+         </trim>
+    </insert>
+
+    <insert id="insertPayableFeeDetailBatch" parameterType="java.util.List"  useGeneratedKeys="true" keyProperty="id">
+        insert into payable_fee_detail
+        <trim prefix="(" suffix=") values" suffixOverrides=",">
+            id,payable_fee_id,fee_type,fee_name,billing_unit,unit_price,billing_quantity,billing_amount,actual_amount,currency,fee_reg_time,remark,create_by,create_time,update_by,update_time,deleted,
+        </trim>
+        <foreach item="item" index="index" collection="list" separator=",">
+            <trim prefix="(" suffix=") " suffixOverrides=",">
+                #{item.id},#{item.payableFeeId},#{item.feeType},#{item.feeName},#{item.billingUnit},#{item.unitPrice},#{item.billingQuantity},#{item.billingAmount},#{item.actualAmount},#{item.currency},#{item.feeRegTime},#{item.remark},#{item.createBy},#{item.createTime},#{item.updateBy},#{item.updateTime},#{item.deleted},
+            </trim>
+        </foreach>
+    </insert>
+
+    <!-- 淇敼 -->
+    <update id="updatePayableFeeDetail" parameterType="com.ruoyi.cwgl.domain.PayableFeeDetail">
+        update payable_fee_detail
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="payableFeeId != null">payable_fee_id = #{payableFeeId},</if>
+            <if test="feeType != null and feeType != ''">fee_type = #{feeType},</if>
+            <if test="feeName != null and feeName != ''">fee_name = #{feeName},</if>
+            <if test="billingUnit != null">billing_unit = #{billingUnit},</if>
+            <if test="unitPrice != null">unit_price = #{unitPrice},</if>
+            <if test="billingQuantity != null">billing_quantity = #{billingQuantity},</if>
+            <if test="billingAmount != null">billing_amount = #{billingAmount},</if>
+            <if test="actualAmount != null">actual_amount = #{actualAmount},</if>
+            <if test="currency != null">currency = #{currency},</if>
+            <if test="feeRegTime != null">fee_reg_time = #{feeRegTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="deleted != null">deleted = #{deleted},</if>
+        </trim>
+        where id = #{id}
+    </update>
+    <!-- 淇敼 -->
+    <update id="updatePayableFeeDetailBatch" parameterType="java.util.List">
+        <foreach collection="list" item="item" index="index" separator=";">
+            update payable_fee_detail
+            <trim prefix="SET" suffixOverrides=",">
+                <if test="item.payableFeeId != null">payable_fee_id = #{item.payableFeeId},</if>
+                <if test="item.feeType != null and item.feeType != ''">fee_type = #{item.feeType},</if>
+                <if test="item.feeName != null and item.feeName != ''">fee_name = #{item.feeName},</if>
+                <if test="item.billingUnit != null">billing_unit = #{item.billingUnit},</if>
+                <if test="item.unitPrice != null">unit_price = #{item.unitPrice},</if>
+                <if test="item.billingQuantity != null">billing_quantity = #{item.billingQuantity},</if>
+                <if test="item.billingAmount != null">billing_amount = #{item.billingAmount},</if>
+                <if test="item.actualAmount != null">actual_amount = #{item.actualAmount},</if>
+                <if test="item.currency != null">currency = #{item.currency},</if>
+                <if test="item.feeRegTime != null">fee_reg_time = #{item.feeRegTime},</if>
+                <if test="item.remark != null">remark = #{item.remark},</if>
+                <if test="item.createBy != null">create_by = #{item.createBy},</if>
+                <if test="item.createTime != null">create_time = #{item.createTime},</if>
+                <if test="item.updateBy != null">update_by = #{item.updateBy},</if>
+                <if test="item.updateTime != null">update_time = #{item.updateTime},</if>
+                <if test="item.deleted != null">deleted = #{item.deleted},</if>
+            </trim>
+        where id = #{item.id}
+        </foreach>
+    </update>
+
+    <!--鍒犻櫎-->
+    <delete id="deletePayableFeeDetailById" parameterType="Integer">
+        delete from payable_fee_detail where id = #{id}
+    </delete>
+    <delete id="deletePayableFeeDetailByIds" parameterType="Integer">
+        delete from payable_fee_detail where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>
\ No newline at end of file
diff --git a/service/src/main/resources/mapper/cwgl/ReceivableFeeDetailMapper.xml b/service/src/main/resources/mapper/cwgl/ReceivableFeeDetailMapper.xml
new file mode 100644
index 0000000..1a0da45
--- /dev/null
+++ b/service/src/main/resources/mapper/cwgl/ReceivableFeeDetailMapper.xml
@@ -0,0 +1,182 @@
+<?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.cwgl.mapper.ReceivableFeeDetailMapper">
+
+    <resultMap type="com.ruoyi.cwgl.domain.ReceivableFeeDetail" id="ReceivableFeeDetailResult">
+        <result property="id"    column="id"    />
+        <result property="receivableFeeId"    column="receivable_fee_id"    />
+        <result property="feeType"    column="fee_type"    />
+        <result property="feeName"    column="fee_name"    />
+        <result property="billingUnit"    column="billing_unit"    />
+        <result property="unitPrice"    column="unit_price"    />
+        <result property="billingQuantity"    column="billing_quantity"    />
+        <result property="billingAmount"    column="billing_amount"    />
+        <result property="actualAmount"    column="actual_amount"    />
+        <result property="currency"    column="currency"    />
+        <result property="feeRegTime"    column="fee_reg_time"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="deleted"    column="deleted"    />
+    </resultMap>
+
+    <sql id="selectReceivableFeeDetailVo">
+        select thisTab.id, thisTab.receivable_fee_id, thisTab.fee_type, thisTab.fee_name, thisTab.billing_unit, thisTab.unit_price, thisTab.billing_quantity, thisTab.billing_amount, thisTab.actual_amount, thisTab.currency, thisTab.fee_reg_time, thisTab.remark, thisTab.create_by, thisTab.create_time, thisTab.update_by, thisTab.update_time, thisTab.deleted from receivable_fee_detail AS thisTab
+    </sql>
+    <sql id="selectReceivableFeeDetailVoCount">
+        select count(0) from receivable_fee_detail as thisTab
+    </sql>
+
+    <sql id="whereCondition">
+        <if test="receivableFeeId != null "> and thisTab.receivable_fee_id = #{receivableFeeId}</if>
+        <if test="feeType != null  and feeType != ''"> and thisTab.fee_type = #{feeType}</if>
+        <if test="feeName != null  and feeName != ''"> and  thisTab.fee_name like concat('%', #{feeName}, '%')</if>
+        <if test="billingUnit != null  and billingUnit != ''"> and thisTab.billing_unit = #{billingUnit}</if>
+        <if test="unitPrice != null "> and thisTab.unit_price = #{unitPrice}</if>
+        <if test="billingQuantity != null "> and thisTab.billing_quantity = #{billingQuantity}</if>
+        <if test="billingAmount != null "> and thisTab.billing_amount = #{billingAmount}</if>
+        <if test="actualAmount != null "> and thisTab.actual_amount = #{actualAmount}</if>
+        <if test="currency != null  and currency != ''"> and thisTab.currency = #{currency}</if>
+        <if test="feeRegTime != null "> and thisTab.fee_reg_time = #{feeRegTime}</if>
+        <if test="deleted != null "> and thisTab.deleted = #{deleted}</if>
+    </sql>
+
+    <!--鏌ヨ-->
+    <select id="selectReceivableFeeDetailById" parameterType="Integer" resultMap="ReceivableFeeDetailResult">
+        <include refid="selectReceivableFeeDetailVo"/>
+        where id = #{id}
+    </select>
+
+    <select id="selectReceivableFeeDetailCount" parameterType="com.ruoyi.cwgl.domain.ReceivableFeeDetail" resultType="int">
+        <include refid="selectReceivableFeeDetailVoCount"/>
+        <where>
+            <include refid="whereCondition"/>
+        </where>
+    </select>
+
+    <select id="selectReceivableFeeDetailList" parameterType="com.ruoyi.cwgl.domain.ReceivableFeeDetail" resultMap="ReceivableFeeDetailResult">
+        <include refid="selectReceivableFeeDetailVo"/>
+        <where>
+            <include refid="whereCondition"/>
+        </where>
+        order by thisTab.id desc
+    </select>
+
+    <!-- 鏂板 -->
+    <insert id="insertReceivableFeeDetail" parameterType="com.ruoyi.cwgl.domain.ReceivableFeeDetail"  useGeneratedKeys="true" keyProperty="id">
+        insert into receivable_fee_detail
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="receivableFeeId != null">receivable_fee_id,</if>
+            <if test="feeType != null and feeType != ''">fee_type,</if>
+            <if test="feeName != null and feeName != ''">fee_name,</if>
+            <if test="billingUnit != null">billing_unit,</if>
+            <if test="unitPrice != null">unit_price,</if>
+            <if test="billingQuantity != null">billing_quantity,</if>
+            <if test="billingAmount != null">billing_amount,</if>
+            <if test="actualAmount != null">actual_amount,</if>
+            <if test="currency != null">currency,</if>
+            <if test="feeRegTime != null">fee_reg_time,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="deleted != null">deleted,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="receivableFeeId != null">#{receivableFeeId},</if>
+            <if test="feeType != null and feeType != ''">#{feeType},</if>
+            <if test="feeName != null and feeName != ''">#{feeName},</if>
+            <if test="billingUnit != null">#{billingUnit},</if>
+            <if test="unitPrice != null">#{unitPrice},</if>
+            <if test="billingQuantity != null">#{billingQuantity},</if>
+            <if test="billingAmount != null">#{billingAmount},</if>
+            <if test="actualAmount != null">#{actualAmount},</if>
+            <if test="currency != null">#{currency},</if>
+            <if test="feeRegTime != null">#{feeRegTime},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="deleted != null">#{deleted},</if>
+         </trim>
+    </insert>
+
+    <insert id="insertReceivableFeeDetailBatch" parameterType="java.util.List"  useGeneratedKeys="true" keyProperty="id">
+        insert into receivable_fee_detail
+        <trim prefix="(" suffix=") values" suffixOverrides=",">
+            id,receivable_fee_id,fee_type,fee_name,billing_unit,unit_price,billing_quantity,billing_amount,actual_amount,currency,fee_reg_time,remark,create_by,create_time,update_by,update_time,deleted,
+        </trim>
+        <foreach item="item" index="index" collection="list" separator=",">
+            <trim prefix="(" suffix=") " suffixOverrides=",">
+                #{item.id},#{item.receivableFeeId},#{item.feeType},#{item.feeName},#{item.billingUnit},#{item.unitPrice},#{item.billingQuantity},#{item.billingAmount},#{item.actualAmount},#{item.currency},#{item.feeRegTime},#{item.remark},#{item.createBy},#{item.createTime},#{item.updateBy},#{item.updateTime},#{item.deleted},
+            </trim>
+        </foreach>
+    </insert>
+
+    <!-- 淇敼 -->
+    <update id="updateReceivableFeeDetail" parameterType="com.ruoyi.cwgl.domain.ReceivableFeeDetail">
+        update receivable_fee_detail
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="receivableFeeId != null">receivable_fee_id = #{receivableFeeId},</if>
+            <if test="feeType != null and feeType != ''">fee_type = #{feeType},</if>
+            <if test="feeName != null and feeName != ''">fee_name = #{feeName},</if>
+            <if test="billingUnit != null">billing_unit = #{billingUnit},</if>
+            <if test="unitPrice != null">unit_price = #{unitPrice},</if>
+            <if test="billingQuantity != null">billing_quantity = #{billingQuantity},</if>
+            <if test="billingAmount != null">billing_amount = #{billingAmount},</if>
+            <if test="actualAmount != null">actual_amount = #{actualAmount},</if>
+            <if test="currency != null">currency = #{currency},</if>
+            <if test="feeRegTime != null">fee_reg_time = #{feeRegTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="deleted != null">deleted = #{deleted},</if>
+        </trim>
+        where id = #{id}
+    </update>
+    <!-- 淇敼 -->
+    <update id="updateReceivableFeeDetailBatch" parameterType="java.util.List">
+        <foreach collection="list" item="item" index="index" separator=";">
+            update receivable_fee_detail
+            <trim prefix="SET" suffixOverrides=",">
+                <if test="item.receivableFeeId != null">receivable_fee_id = #{item.receivableFeeId},</if>
+                <if test="item.feeType != null and item.feeType != ''">fee_type = #{item.feeType},</if>
+                <if test="item.feeName != null and item.feeName != ''">fee_name = #{item.feeName},</if>
+                <if test="item.billingUnit != null">billing_unit = #{item.billingUnit},</if>
+                <if test="item.unitPrice != null">unit_price = #{item.unitPrice},</if>
+                <if test="item.billingQuantity != null">billing_quantity = #{item.billingQuantity},</if>
+                <if test="item.billingAmount != null">billing_amount = #{item.billingAmount},</if>
+                <if test="item.actualAmount != null">actual_amount = #{item.actualAmount},</if>
+                <if test="item.currency != null">currency = #{item.currency},</if>
+                <if test="item.feeRegTime != null">fee_reg_time = #{item.feeRegTime},</if>
+                <if test="item.remark != null">remark = #{item.remark},</if>
+                <if test="item.createBy != null">create_by = #{item.createBy},</if>
+                <if test="item.createTime != null">create_time = #{item.createTime},</if>
+                <if test="item.updateBy != null">update_by = #{item.updateBy},</if>
+                <if test="item.updateTime != null">update_time = #{item.updateTime},</if>
+                <if test="item.deleted != null">deleted = #{item.deleted},</if>
+            </trim>
+        where id = #{item.id}
+        </foreach>
+    </update>
+
+    <!--鍒犻櫎-->
+    <delete id="deleteReceivableFeeDetailById" parameterType="Integer">
+        delete from receivable_fee_detail where id = #{id}
+    </delete>
+    <delete id="deleteReceivableFeeDetailByIds" parameterType="Integer">
+        delete from receivable_fee_detail where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>
\ No newline at end of file
diff --git a/ui/admin-ui3/src/api/cwgl/payableFeeDetail.ts b/ui/admin-ui3/src/api/cwgl/payableFeeDetail.ts
new file mode 100644
index 0000000..df9b68f
--- /dev/null
+++ b/ui/admin-ui3/src/api/cwgl/payableFeeDetail.ts
@@ -0,0 +1,67 @@
+import request,{download,requestType} from "@/utils/request";
+import {BaseEntityInterface} from "@/utils/globalInterface";
+export interface PayableFeeDetailI extends BaseEntityInterface{
+            id ?:  number   ,            payableFeeId ?:  number   ,            feeType ?:  string   ,            feeName ?:  string   ,            billingUnit ?:  string   ,            unitPrice ?:  string   ,            billingQuantity ?:  string   ,            billingAmount ?:  string   ,            actualAmount ?:  string   ,            currency ?:  string   ,            feeRegTime ?:  string   ,            remark ?:  string   ,            createBy ?:  string   ,            createTime ?:  string   ,            updateBy ?:  string   ,            updateTime ?:  string   ,            deleted ?:  number       }
+
+
+/**
+ * 鏌ヨ搴斾粯璐圭敤鏄庣粏鍒楄〃
+ */
+export const listPayableFeeDetail:requestType = (query) => {
+    return request({
+        url: '/cwgl/payableFeeDetail/list',
+        method:'get',
+        params:query
+    })
+}
+/**
+ * 鏌ヨ搴斾粯璐圭敤鏄庣粏璇︾粏
+ */
+export const getPayableFeeDetail:requestType = (id) => {
+    return request({
+        url: '/cwgl/payableFeeDetail/' + id,
+        method:'get'
+    })
+}
+
+/**
+ * 鏂板搴斾粯璐圭敤鏄庣粏
+ */
+export const addPayableFeeDetail:requestType = (data) => {
+    return request({
+        url: '/cwgl/payableFeeDetail',
+        method: 'post',
+        data
+    })
+}
+
+/**
+ * 淇敼搴斾粯璐圭敤鏄庣粏
+ */
+export const updatePayableFeeDetail:requestType = (data) => {
+    return request({
+        url: '/cwgl/payableFeeDetail',
+        method: 'put',
+        data
+    })
+}
+
+/**
+ * 鍒犻櫎搴斾粯璐圭敤鏄庣粏
+ */
+export const delPayableFeeDetail:requestType = (id) => {
+    return request({
+        url: '/cwgl/payableFeeDetail/' + id,
+        method: 'delete'
+    })
+}
+
+
+/**
+ * 瀵煎嚭搴斾粯璐圭敤鏄庣粏
+ */
+export const exportPayableFeeDetail:requestType = (query) => {
+    return new Promise<any>(()=>{
+        download('/cwgl/payableFeeDetail/export',query);
+    })
+}
diff --git a/ui/admin-ui3/src/api/cwgl/receivableFeeDetail.ts b/ui/admin-ui3/src/api/cwgl/receivableFeeDetail.ts
new file mode 100644
index 0000000..68618be
--- /dev/null
+++ b/ui/admin-ui3/src/api/cwgl/receivableFeeDetail.ts
@@ -0,0 +1,67 @@
+import request,{download,requestType} from "@/utils/request";
+import {BaseEntityInterface} from "@/utils/globalInterface";
+export interface ReceivableFeeDetailI extends BaseEntityInterface{
+            id ?:  number   ,            receivableFeeId ?:  number   ,            feeType ?:  string   ,            feeName ?:  string   ,            billingUnit ?:  string   ,            unitPrice ?:  string   ,            billingQuantity ?:  string   ,            billingAmount ?:  string   ,            actualAmount ?:  string   ,            currency ?:  string   ,            feeRegTime ?:  string   ,            remark ?:  string   ,            createBy ?:  string   ,            createTime ?:  string   ,            updateBy ?:  string   ,            updateTime ?:  string   ,            deleted ?:  number       }
+
+
+/**
+ * 鏌ヨ搴旀敹璐圭敤鏄庣粏鍒楄〃
+ */
+export const listReceivableFeeDetail:requestType = (query) => {
+    return request({
+        url: '/cwgl/receivableFeeDetail/list',
+        method:'get',
+        params:query
+    })
+}
+/**
+ * 鏌ヨ搴旀敹璐圭敤鏄庣粏璇︾粏
+ */
+export const getReceivableFeeDetail:requestType = (id) => {
+    return request({
+        url: '/cwgl/receivableFeeDetail/' + id,
+        method:'get'
+    })
+}
+
+/**
+ * 鏂板搴旀敹璐圭敤鏄庣粏
+ */
+export const addReceivableFeeDetail:requestType = (data) => {
+    return request({
+        url: '/cwgl/receivableFeeDetail',
+        method: 'post',
+        data
+    })
+}
+
+/**
+ * 淇敼搴旀敹璐圭敤鏄庣粏
+ */
+export const updateReceivableFeeDetail:requestType = (data) => {
+    return request({
+        url: '/cwgl/receivableFeeDetail',
+        method: 'put',
+        data
+    })
+}
+
+/**
+ * 鍒犻櫎搴旀敹璐圭敤鏄庣粏
+ */
+export const delReceivableFeeDetail:requestType = (id) => {
+    return request({
+        url: '/cwgl/receivableFeeDetail/' + id,
+        method: 'delete'
+    })
+}
+
+
+/**
+ * 瀵煎嚭搴旀敹璐圭敤鏄庣粏
+ */
+export const exportReceivableFeeDetail:requestType = (query) => {
+    return new Promise<any>(()=>{
+        download('/cwgl/receivableFeeDetail/export',query);
+    })
+}
diff --git a/ui/admin-ui3/src/views/cwgl/payableFeeDetail/index.vue b/ui/admin-ui3/src/views/cwgl/payableFeeDetail/index.vue
new file mode 100644
index 0000000..03763af
--- /dev/null
+++ b/ui/admin-ui3/src/views/cwgl/payableFeeDetail/index.vue
@@ -0,0 +1,177 @@
+<template>
+  <basicContainer >
+    <avue-crud
+        :option="option"
+        :table-loading="pageF.loading"
+        :data="tableData"
+        :page="page"
+        :permission="permissionList"
+        :before-open="beforeOpen"
+        v-model="form"
+        ref="crudRef"
+        @row-update="rowUpdate"
+        @row-save="rowSave"
+        @refresh-change="refreshChange"
+        @row-del="rowDel"
+        @search-change="searchChange"
+        @search-reset="searchReset"
+        @selection-change="selectionChange"
+        @current-change="currentChange"
+        @size-change="sizeChange"
+        @on-load="onLoad"
+    >
+      <template #menu-left>
+        <el-button
+            type="success"
+            icon="Edit"
+            :disabled="pageF.single"
+            v-hasPermi="['cwgl:payableFeeDetail:edit']"
+            @click="handleUpdate">淇敼
+        </el-button>
+        <el-button
+            type="danger"
+            icon="Delete"
+            :disabled="pageF.multiple"
+            @click="handleDelete"
+            v-hasPermi="['cwgl:payableFeeDetail:remove']"
+        >鍒犻櫎
+        </el-button>
+        <el-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            v-hasPermi="['cwgl:payableFeeDetail:export']"
+        >瀵煎嚭
+        </el-button>
+      </template>
+    </avue-crud>
+  </basicContainer>
+</template>
+
+<script setup name="payableFeeDetail" lang="ts">
+  import {PayableFeeDetailI,addPayableFeeDetail, delPayableFeeDetail, exportPayableFeeDetail, getPayableFeeDetail, listPayableFeeDetail, updatePayableFeeDetail} from "@/api/cwgl/payableFeeDetail";
+  import useCurrentInstance from "@/utils/useCurrentInstance";
+  import {computed,reactive, ref, toRefs} from "vue";
+  import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface";
+  import {usePagePlus} from "@/hooks/usePagePlus";
+  import {hasPermission} from "@/utils/permissionUtils";
+
+  const { proxy } = useCurrentInstance();
+  const crudRef = ref();
+
+  const permissionList = computed(()=>{
+    return {
+      addBtn: hasPermission(["cwgl:payableFeeDetail:add"]),
+      delBtn: hasPermission(["cwgl:payableFeeDetail:remove"]),
+      editBtn: hasPermission(["cwgl:payableFeeDetail:edit"]),
+      viewBtn: hasPermission(["cwgl:payableFeeDetail:query"]),
+    }
+  })
+
+  const data = reactive({
+    form:<PayableFeeDetailI>{},
+    queryParams:<PayableFeeDetailI&PageQueryInterface>{},
+    page: <PagesInterface>{
+      pageSize: 10,
+      total: 0,
+      currentPage: 1,
+    },
+    selectionList:[],
+  })
+  const {queryParams,form,page,selectionList} = toRefs(data);
+  const option = ref({
+    pageKey: 'PayableFeeDetail',
+    rowKey: 'id',
+    column: {
+                                id: {
+          label: 'ID',
+                            },
+                                payableFeeId: {
+          label: '搴斾粯璐圭敤绠$悊ID',
+                                rules: [
+              {
+                required: true,
+                message: "搴斾粯璐圭敤绠$悊ID涓嶈兘涓虹┖", trigger: "blur" }
+            ],                  },
+                                feeType: {
+          label: '璐圭敤绫诲瀷',
+                                rules: [
+              {
+                required: true,
+                message: "璐圭敤绫诲瀷涓嶈兘涓虹┖", trigger: "change"
+                 }
+            ],                  },
+                                feeName: {
+          label: '璐圭敤鍚嶇О',
+                                rules: [
+              {
+                required: true,
+                message: "璐圭敤鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
+            ],                  },
+                                billingUnit: {
+          label: '璁¤垂鍗曚綅',
+                            },
+                                unitPrice: {
+          label: '璁¤垂鍗曚环',
+                            },
+                                billingQuantity: {
+          label: '璁¤垂鏁伴噺',
+                            },
+                                billingAmount: {
+          label: '璁¤垂閲戦',
+                            },
+                                actualAmount: {
+          label: '瀹炰粯閲戦',
+                            },
+                                currency: {
+          label: '甯佸埗',
+                            },
+                                feeRegTime: {
+          label: '璐圭敤鐧昏鏃堕棿',
+                            },
+                                remark: {
+          label: '澶囨敞',
+                      type: 'textarea', minRows: 3, maxRows: 5,
+                            },
+                                createBy: {
+          label: '鍒涘缓浜�',
+                            },
+                                createTime: {
+          label: '鍒涘缓鏃堕棿',
+                            },
+                                updateBy: {
+          label: '鏇存柊浜�',
+                            },
+                                updateTime: {
+          label: '鏇存柊鏃堕棿',
+                            },
+                                deleted: {
+          label: '鍒犻櫎鏍囪(0:姝e父;1:鍒犻櫎)',
+                            },
+          }
+  })
+
+  const { tableData,pageF,rowSave,rowUpdate,rowDel,beforeOpen,searchChange,
+    searchReset,selectionChange,onLoad,currentChange,sizeChange,handleDelete,handleExport,handleUpdate,refreshChange} = usePagePlus({
+    form:form,
+    option:option,
+    queryParams:queryParams,
+    idKey:'id',
+    page:page.value,
+    getListApi:listPayableFeeDetail,
+    getDetailApi:getPayableFeeDetail,
+    exportApi:exportPayableFeeDetail,
+    deleteApi:delPayableFeeDetail,
+    addApi:addPayableFeeDetail,
+    updateApi:updatePayableFeeDetail,
+    handleUpdateFunc:()=>{
+      crudRef.value.rowEdit(selectionList.value[0]);
+    },
+    handleSelectionChangeFunc:(selection:any)=>{
+      selectionList.value = selection;
+    }
+  })
+
+
+</script>
diff --git a/ui/admin-ui3/src/views/cwgl/receivableFeeDetail/index.vue b/ui/admin-ui3/src/views/cwgl/receivableFeeDetail/index.vue
new file mode 100644
index 0000000..9f60743
--- /dev/null
+++ b/ui/admin-ui3/src/views/cwgl/receivableFeeDetail/index.vue
@@ -0,0 +1,177 @@
+<template>
+  <basicContainer >
+    <avue-crud
+        :option="option"
+        :table-loading="pageF.loading"
+        :data="tableData"
+        :page="page"
+        :permission="permissionList"
+        :before-open="beforeOpen"
+        v-model="form"
+        ref="crudRef"
+        @row-update="rowUpdate"
+        @row-save="rowSave"
+        @refresh-change="refreshChange"
+        @row-del="rowDel"
+        @search-change="searchChange"
+        @search-reset="searchReset"
+        @selection-change="selectionChange"
+        @current-change="currentChange"
+        @size-change="sizeChange"
+        @on-load="onLoad"
+    >
+      <template #menu-left>
+        <el-button
+            type="success"
+            icon="Edit"
+            :disabled="pageF.single"
+            v-hasPermi="['cwgl:receivableFeeDetail:edit']"
+            @click="handleUpdate">淇敼
+        </el-button>
+        <el-button
+            type="danger"
+            icon="Delete"
+            :disabled="pageF.multiple"
+            @click="handleDelete"
+            v-hasPermi="['cwgl:receivableFeeDetail:remove']"
+        >鍒犻櫎
+        </el-button>
+        <el-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            v-hasPermi="['cwgl:receivableFeeDetail:export']"
+        >瀵煎嚭
+        </el-button>
+      </template>
+    </avue-crud>
+  </basicContainer>
+</template>
+
+<script setup name="receivableFeeDetail" lang="ts">
+  import {ReceivableFeeDetailI,addReceivableFeeDetail, delReceivableFeeDetail, exportReceivableFeeDetail, getReceivableFeeDetail, listReceivableFeeDetail, updateReceivableFeeDetail} from "@/api/cwgl/receivableFeeDetail";
+  import useCurrentInstance from "@/utils/useCurrentInstance";
+  import {computed,reactive, ref, toRefs} from "vue";
+  import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface";
+  import {usePagePlus} from "@/hooks/usePagePlus";
+  import {hasPermission} from "@/utils/permissionUtils";
+
+  const { proxy } = useCurrentInstance();
+  const crudRef = ref();
+
+  const permissionList = computed(()=>{
+    return {
+      addBtn: hasPermission(["cwgl:receivableFeeDetail:add"]),
+      delBtn: hasPermission(["cwgl:receivableFeeDetail:remove"]),
+      editBtn: hasPermission(["cwgl:receivableFeeDetail:edit"]),
+      viewBtn: hasPermission(["cwgl:receivableFeeDetail:query"]),
+    }
+  })
+
+  const data = reactive({
+    form:<ReceivableFeeDetailI>{},
+    queryParams:<ReceivableFeeDetailI&PageQueryInterface>{},
+    page: <PagesInterface>{
+      pageSize: 10,
+      total: 0,
+      currentPage: 1,
+    },
+    selectionList:[],
+  })
+  const {queryParams,form,page,selectionList} = toRefs(data);
+  const option = ref({
+    pageKey: 'ReceivableFeeDetail',
+    rowKey: 'id',
+    column: {
+                                id: {
+          label: 'ID',
+                            },
+                                receivableFeeId: {
+          label: '搴旀敹璐圭敤绠$悊ID',
+                                rules: [
+              {
+                required: true,
+                message: "搴旀敹璐圭敤绠$悊ID涓嶈兘涓虹┖", trigger: "blur" }
+            ],                  },
+                                feeType: {
+          label: '璐圭敤绫诲瀷',
+                                rules: [
+              {
+                required: true,
+                message: "璐圭敤绫诲瀷涓嶈兘涓虹┖", trigger: "change"
+                 }
+            ],                  },
+                                feeName: {
+          label: '璐圭敤鍚嶇О',
+                                rules: [
+              {
+                required: true,
+                message: "璐圭敤鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
+            ],                  },
+                                billingUnit: {
+          label: '璁¤垂鍗曚綅',
+                            },
+                                unitPrice: {
+          label: '璁¤垂鍗曚环',
+                            },
+                                billingQuantity: {
+          label: '璁¤垂鏁伴噺',
+                            },
+                                billingAmount: {
+          label: '璁¤垂閲戦',
+                            },
+                                actualAmount: {
+          label: '瀹炴敹閲戦',
+                            },
+                                currency: {
+          label: '甯佸埗',
+                            },
+                                feeRegTime: {
+          label: '璐圭敤鐧昏鏃堕棿',
+                            },
+                                remark: {
+          label: '澶囨敞',
+                      type: 'textarea', minRows: 3, maxRows: 5,
+                            },
+                                createBy: {
+          label: '鍒涘缓浜�',
+                            },
+                                createTime: {
+          label: '鍒涘缓鏃堕棿',
+                            },
+                                updateBy: {
+          label: '鏇存柊浜�',
+                            },
+                                updateTime: {
+          label: '鏇存柊鏃堕棿',
+                            },
+                                deleted: {
+          label: '鍒犻櫎鏍囪(0:姝e父;1:鍒犻櫎)',
+                            },
+          }
+  })
+
+  const { tableData,pageF,rowSave,rowUpdate,rowDel,beforeOpen,searchChange,
+    searchReset,selectionChange,onLoad,currentChange,sizeChange,handleDelete,handleExport,handleUpdate,refreshChange} = usePagePlus({
+    form:form,
+    option:option,
+    queryParams:queryParams,
+    idKey:'id',
+    page:page.value,
+    getListApi:listReceivableFeeDetail,
+    getDetailApi:getReceivableFeeDetail,
+    exportApi:exportReceivableFeeDetail,
+    deleteApi:delReceivableFeeDetail,
+    addApi:addReceivableFeeDetail,
+    updateApi:updateReceivableFeeDetail,
+    handleUpdateFunc:()=>{
+      crudRef.value.rowEdit(selectionList.value[0]);
+    },
+    handleSelectionChangeFunc:(selection:any)=>{
+      selectionList.value = selection;
+    }
+  })
+
+
+</script>

--
Gitblit v1.8.0