From 0a492b64ca1a4e40cc9ea56eddd1afe2c09a12b3 Mon Sep 17 00:00:00 2001
From: huliguo <2023611923@qq.com>
Date: 星期四, 05 六月 2025 16:27:11 +0800
Subject: [PATCH] 财务管理

---
 ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml                         |   81 ++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/OrderService.java                 |    7 
 ruoyi-system/src/main/java/com/ruoyi/system/service/WithdrawService.java              |    9 
 ruoyi-system/src/main/resources/mapper/system/WithdrawMapper.xml                      |   26 ++
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/FinanceFlowsPageVO.java           |   38 +++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java        |   42 ++++
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/WithdrawMapper.java                |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/WithdrawPageVO.java               |   45 ++++
 ruoyi-system/src/main/java/com/ruoyi/system/domain/AccountDetail.java                 |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/FinanceController.java      |   55 ++++
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithdrawPageDTO.java             |   25 ++
 /dev/null                                                                             |   19 -
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/AddSystemConfigDTO.java          |    4 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/PaymentUtil.java                 |   12 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/Order.java                         |    9 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java                   |   11 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WithdrawServiceImpl.java     |   90 +++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithDrawRefuseDTO.java           |   15 +
 ruoyi-system/src/main/java/com/ruoyi/system/domain/Message.java                       |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SystemConfigServiceImpl.java |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithDrawAgreeDTO.java            |   20 ++
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/FinanceFlowsTopVO.java            |   26 ++
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/FinanceFlowsDTO.java             |   37 +++
 23 files changed, 550 insertions(+), 39 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/FinanceController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/FinanceController.java
index a706a23..3436c14 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/FinanceController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/FinanceController.java
@@ -1,11 +1,21 @@
 package com.ruoyi.web.controller.system;
 
-import com.ruoyi.system.mapper.WithdrawMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.pojo.dto.FinanceFlowsDTO;
+import com.ruoyi.system.pojo.dto.WithDrawAgreeDTO;
+import com.ruoyi.system.pojo.dto.WithDrawRefuseDTO;
+import com.ruoyi.system.pojo.dto.WithdrawPageDTO;
+import com.ruoyi.system.pojo.vo.FinanceFlowsPageVO;
+import com.ruoyi.system.pojo.vo.FinanceFlowsTopVO;
+import com.ruoyi.system.pojo.vo.WithdrawPageVO;
+import com.ruoyi.system.service.OrderService;
 import com.ruoyi.system.service.WithdrawService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 
@@ -17,28 +27,61 @@
 
     @Resource
     private WithdrawService withdrawService;
-
+    @Resource
+    private OrderService orderService;
 
     /**
      * 财务流水-顶部
      */
-
+    @PostMapping("/top")
+    @ApiOperation(value = "财务流水-顶部")
+    @PreAuthorize("@ss.hasPermi('finance:flows')")
+    public R<FinanceFlowsTopVO> top(){
+        return R.ok(orderService.financeTop());
+    }
 
     /**
      * 财务流水-分页
      */
 
-
+    @PostMapping("/flows/page")
+    @ApiOperation(value = "财务流水-分页")
+    @PreAuthorize("@ss.hasPermi('finance:flows')")
+    public R<IPage<FinanceFlowsPageVO>> flowsPage(@RequestBody FinanceFlowsDTO dto){
+        return R.ok(orderService.flowsPage(dto));
+    }
 
     /**
      * 提现申请-分页
      */
+    @PostMapping("/withdraw/page")
+    @ApiOperation(value = "提现申请-分页")
+    @PreAuthorize("@ss.hasPermi('finance:apply')")
+    public R<IPage<WithdrawPageVO>> withdrawPage(@RequestBody WithdrawPageDTO dto){
+        return R.ok(withdrawService.withdrawPage(dto));
+    }
 
     /**
      * 同意
      */
 
+    @PutMapping("/withdraw/agree")
+    @ApiOperation(value = "提现申请-同意")
+    @PreAuthorize("@ss.hasPermi('finance:flows')")
+    public R<Void> agree(@RequestBody WithDrawAgreeDTO dto){
+        withdrawService.agree(dto);
+        return R.ok();
+    }
+
+
     /**
      * 拒绝
      */
+    @PutMapping("/withdraw/refuse")
+    @ApiOperation(value = "提现申请-拒绝")
+    @PreAuthorize("@ss.hasPermi('finance:flows')")
+    public R<Void> refuse(@RequestBody WithDrawRefuseDTO dto){
+        withdrawService.refuse(dto);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/PaymentUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/PaymentUtil.java
index e27493e..c33c581 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/PaymentUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/PaymentUtil.java
@@ -14,24 +14,24 @@
 @Slf4j
 public class PaymentUtil {
 	
-	//微信公众号、微信小程序、微信 APP+/H5、云微小程序支付
-	private static final String appId = "wxdeed472c98e42a54";
+	//todo 商户号配置  微信公众号、微信小程序、微信 APP+/H5、云微小程序支付
+	private static final String appId = "";
 	/**
 	 * 商户密钥
 	 */
-	private static final String key = "925899fcc374430f9e4b4ba3db05b448";
+	private static final String key = "";
 	/**
 	 * 商户号
 	 */
-	private static final String merchantNo = "888122600004175";
+	private static final String merchantNo = "";
 	/**
 	 * 平台-报备商户号
 	 */
-	private static final String sysTradeMerchantNo = "777168500885852";
+	private static final String sysTradeMerchantNo = "";
 	/**
 	 * 支付回调地址
 	 */
-	private static final String callbackUrl = "https://www.qijisheng.top";
+	private static final String callbackUrl = "";
 	
 	
 	/**
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/AccountDetail.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/AccountDetail.java
index 1ccd5f6..df7a604 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/AccountDetail.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/AccountDetail.java
@@ -36,6 +36,10 @@
     @ApiModelProperty(value = "分类:1提现 2售卖商品 3平台退款 4分佣")
     private Integer category;
 
+    @TableField("source_id")
+    @ApiModelProperty(value = "来源 下单用户id   1为提现表id")
+    private String sourceId;
+
     @TableField("status")
     @ApiModelProperty(value = "状态:1待审核 2通过(完成) 3拒绝(取消)")
     private Integer status;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/Message.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/Message.java
index 3ea63e5..a2ddeaf 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/Message.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/Message.java
@@ -35,4 +35,8 @@
     @ApiModelProperty(value = "创建时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;
+
+    @TableField("order_id")
+    @ApiModelProperty(value = "关联订单ID")
+    private String orderId;
 }
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/Order.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/Order.java
index cb286a8..a62221a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/Order.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/Order.java
@@ -81,4 +81,13 @@
     @ApiModelProperty(value = "完成时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime sellerFinishTime;
+
+    @TableField("is_refund")
+    @ApiModelProperty("是否退款(1是,0-否)")
+    private Integer isRefund;
+
+    @TableField(value = "refund_time")
+    @ApiModelProperty(value = "退款时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime refundTime;
 }
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java
index ee0b68f..0af246b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java
@@ -4,11 +4,10 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ruoyi.system.domain.Agreement;
 import com.ruoyi.system.domain.Order;
+import com.ruoyi.system.pojo.dto.FinanceFlowsDTO;
 import com.ruoyi.system.pojo.dto.OrderPageDTO;
 import com.ruoyi.system.pojo.model.DailyStatistics;
-import com.ruoyi.system.pojo.vo.OrderDetailVO;
-import com.ruoyi.system.pojo.vo.OrderPageVO;
-import com.ruoyi.system.pojo.vo.TodayStatisticsVO;
+import com.ruoyi.system.pojo.vo.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -27,4 +26,10 @@
     TodayStatisticsVO today(@Param("startTime")LocalDateTime startTime,@Param("endTime") LocalDateTime endTime);
 
     List<DailyStatistics> getDailyStatistics(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
+
+    FinanceFlowsTopVO financeTop();
+
+    IPage<FinanceFlowsPageVO> flowsPage(@Param("page") IPage<FinanceFlowsPageVO> page, @Param("dto")FinanceFlowsDTO dto);
+
+    Long countFlowsPage(@Param("dto")FinanceFlowsDTO dto);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WithdrawMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WithdrawMapper.java
index 7c21e7e..a52a5cd 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WithdrawMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WithdrawMapper.java
@@ -1,10 +1,15 @@
 package com.ruoyi.system.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ruoyi.system.domain.AccountDetail;
 import com.ruoyi.system.domain.Withdrawal;
+import com.ruoyi.system.pojo.dto.WithdrawPageDTO;
+import com.ruoyi.system.pojo.vo.WithdrawPageVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 @Mapper
 public interface WithdrawMapper extends BaseMapper<Withdrawal> {
+    IPage<WithdrawPageVO> withdrawPage(@Param("page") IPage<WithdrawPageVO> page,@Param("dto")  WithdrawPageDTO dto);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/AddSystemConfigDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/AddSystemConfigDTO.java
index 89ddd93..5c2c3a8 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/AddSystemConfigDTO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/AddSystemConfigDTO.java
@@ -19,9 +19,9 @@
     private String url;
 
     @ApiModelProperty("每单平台提成比例")
-    @Digits(integer = 4, fraction = 2, message = "整数部分不超过4位,保留2位小数")
+    @Digits(integer = 2, fraction = 2, message = "整数部分不超过2位,保留2位小数")
     private BigDecimal platform;
     @ApiModelProperty("绑定用户可提成比例")
-    @Digits(integer = 4, fraction = 2, message = "整数部分不超过4位,保留2位小数")
+    @Digits(integer = 2, fraction = 2, message = "整数部分不超过2位,保留2位小数")
     private BigDecimal user;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/FinanceFlowsDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/FinanceFlowsDTO.java
new file mode 100644
index 0000000..4c06185
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/FinanceFlowsDTO.java
@@ -0,0 +1,37 @@
+package com.ruoyi.system.pojo.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel("财务流水DTO")
+public class FinanceFlowsDTO {
+    @ApiModelProperty("页码")
+    private Integer pageNum=0;
+    @ApiModelProperty("分页大小")
+    private Integer pageSize=10;
+
+    @ApiModelProperty(value = "订单编号")
+    private String orderNo;
+
+
+    @ApiModelProperty(value = "类型:0-全部 1-收入 2-退款")
+    private Integer type = 0;
+
+
+    @ApiModelProperty(value = "操作时间-开始")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime operateTimeStart;
+
+
+    @ApiModelProperty(value = "操作时间-结束")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime operateTimeEnd;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithDrawAgreeDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithDrawAgreeDTO.java
new file mode 100644
index 0000000..afca905
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithDrawAgreeDTO.java
@@ -0,0 +1,20 @@
+package com.ruoyi.system.pojo.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("审核通过DTO")
+public class WithDrawAgreeDTO {
+
+    @ApiModelProperty(value = "申请主键ID")
+    private String id;
+
+    @ApiModelProperty(value = "凭证图片URL")
+    private String img;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithDrawRefuseDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithDrawRefuseDTO.java
new file mode 100644
index 0000000..b15e0fc
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithDrawRefuseDTO.java
@@ -0,0 +1,15 @@
+package com.ruoyi.system.pojo.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("审核拒绝DTO")
+public class WithDrawRefuseDTO {
+    @ApiModelProperty(value = "申请主键ID")
+    private String id;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithdrawPageDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithdrawPageDTO.java
new file mode 100644
index 0000000..c17def5
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithdrawPageDTO.java
@@ -0,0 +1,25 @@
+package com.ruoyi.system.pojo.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("提现申请分页DTO")
+public class WithdrawPageDTO {
+    @ApiModelProperty("页码")
+    private Integer pageNum=0;
+    @ApiModelProperty("分页大小")
+    private Integer pageSize=10;
+
+    @ApiModelProperty(value = "用户名称")
+    private String userName;
+
+    @ApiModelProperty(value = "联系电话")
+    private String phone;
+
+    @ApiModelProperty(value = "状态(0=待审核,1=通过,2=拒绝)")
+    private Integer status;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/FinanceFlowsPageVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/FinanceFlowsPageVO.java
new file mode 100644
index 0000000..dd9fa16
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/FinanceFlowsPageVO.java
@@ -0,0 +1,38 @@
+package com.ruoyi.system.pojo.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel("财务流水分页VO")
+public class FinanceFlowsPageVO {
+    @ApiModelProperty(value = "订单编号")
+    private String orderNo;
+
+
+    @ApiModelProperty(value = "操作时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime operateTime;
+
+    @ApiModelProperty(value = "总金额")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "卖家上级分佣")
+    private BigDecimal commissionPrice;
+
+    @ApiModelProperty(value = "平台利润")
+    private BigDecimal commissionPlatform;
+
+    @ApiModelProperty(value = "卖家收入")
+    private BigDecimal seller;
+
+    @ApiModelProperty("类型1-收入,2-退款")
+    private Integer type;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/FinanceFlowsTopVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/FinanceFlowsTopVO.java
new file mode 100644
index 0000000..7f3eb30
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/FinanceFlowsTopVO.java
@@ -0,0 +1,26 @@
+package com.ruoyi.system.pojo.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel("财务流水-顶部VO")
+public class FinanceFlowsTopVO {
+
+    @ApiModelProperty("总入账")
+    private BigDecimal total;
+
+    @ApiModelProperty(value = "总利润")
+    private BigDecimal totalProfit;
+
+    @ApiModelProperty(value = "上级分佣金额")
+    private BigDecimal superior;
+
+    @ApiModelProperty(value = "卖家收入金额")
+    private BigDecimal seller;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/WithdrawPageVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/WithdrawPageVO.java
new file mode 100644
index 0000000..fccc931
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/WithdrawPageVO.java
@@ -0,0 +1,45 @@
+package com.ruoyi.system.pojo.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel("提现申请VO")
+public class WithdrawPageVO {
+
+    @ApiModelProperty(value = "申请主键ID")
+    private String id;
+
+    @ApiModelProperty(value = "用户名称")
+    private String appName;
+
+    @ApiModelProperty(value = "联系电话")
+    private String phone;
+
+    @ApiModelProperty(value = "提现金额")
+    private BigDecimal money;
+
+    @ApiModelProperty(value = "申请时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "银行卡号")
+    private String cardNo;
+
+    @ApiModelProperty(value = "持卡人姓名")
+    private String cardName;
+
+    @ApiModelProperty(value = "状态(0=待审核,1=通过,2=拒绝)")
+    private Integer status;
+
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OrderService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OrderService.java
index baebfe6..2fa893c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OrderService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OrderService.java
@@ -7,7 +7,9 @@
 import com.ruoyi.system.domain.Agreement;
 import com.ruoyi.system.domain.Order;
 import com.ruoyi.system.pojo.dto.AddAgreementDTO;
+import com.ruoyi.system.pojo.dto.FinanceFlowsDTO;
 import com.ruoyi.system.pojo.dto.OrderPageDTO;
+import com.ruoyi.system.pojo.dto.WithdrawPageDTO;
 import com.ruoyi.system.pojo.vo.*;
 
 import java.time.LocalDate;
@@ -40,4 +42,9 @@
     TodayStatisticsVO today();
 
     IndexLineChartVO chart(LocalDate startDate, LocalDate endDate);
+
+    FinanceFlowsTopVO financeTop();
+
+    IPage<FinanceFlowsPageVO> flowsPage(FinanceFlowsDTO dto);
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/WithdrawService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/WithdrawService.java
index e3750e6..e793c09 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/WithdrawService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/WithdrawService.java
@@ -1,11 +1,18 @@
 package com.ruoyi.system.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.system.domain.Agreement;
 import com.ruoyi.system.domain.Withdrawal;
-import com.ruoyi.system.pojo.dto.AddAgreementDTO;
+import com.ruoyi.system.pojo.dto.*;
+import com.ruoyi.system.pojo.vo.WithdrawPageVO;
 
 
 public interface WithdrawService extends IService<Withdrawal>  {
 
+    IPage<WithdrawPageVO> withdrawPage(WithdrawPageDTO dto);
+
+    void agree(WithDrawAgreeDTO dto);
+
+    void refuse(WithDrawRefuseDTO dto);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/WithdrawServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/WithdrawServiceImpl.java
deleted file mode 100644
index a954a1b..0000000
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/WithdrawServiceImpl.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.ruoyi.system.service;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.system.domain.Agreement;
-import com.ruoyi.system.domain.Withdrawal;
-import com.ruoyi.system.mapper.AgreementMapper;
-import com.ruoyi.system.mapper.WithdrawMapper;
-import com.ruoyi.system.pojo.dto.AddAgreementDTO;
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-
-@Service
-public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdrawal> implements WithdrawService {
-
-
-}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java
index d05c266..126b219 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java
@@ -13,7 +13,9 @@
 import com.ruoyi.system.domain.*;
 import com.ruoyi.system.mapper.*;
 import com.ruoyi.system.pojo.dto.AddAgreementDTO;
+import com.ruoyi.system.pojo.dto.FinanceFlowsDTO;
 import com.ruoyi.system.pojo.dto.OrderPageDTO;
+import com.ruoyi.system.pojo.dto.WithdrawPageDTO;
 import com.ruoyi.system.pojo.model.DailyStatistics;
 import com.ruoyi.system.pojo.model.DrawSheet;
 import com.ruoyi.system.pojo.vo.*;
@@ -53,6 +55,10 @@
     private CompanyMapper companyMapper;
     @Autowired
     private SystemConfigMapper systemConfigMapper;
+    @Autowired
+    private AppUserMapper appUserMapper;
+    @Autowired
+    private WithdrawMapper withdrawMapper;
 
     @Override
     public IPage<OrderPageVO> getOrderPage(OrderPageDTO dto) {
@@ -238,6 +244,7 @@
 
     }
 
+    @Transactional
     @Override
     public void cancel(String id) {
         Company company = companyMapper.selectById(id);
@@ -262,12 +269,28 @@
             //未付款 直接取消订单
             order.setStatus(-1);
             this.baseMapper.updateById(order);
+            //将分佣次数加回
+            User user = appUserMapper.selectById(order.getUserId());
+            user.setInviteNum(user.getInviteNum()+1);
+            appUserMapper.updateById(user);
+            //商品状态修改
+            company.setStatus(1);
+            companyMapper.updateById(company);
         }else{
-            //退款
-            order.setStatus(-1);
             R r = refundPayMoney(order);//退款
             if (200 == r.getCode()) {
+                //退款成功
+                order.setStatus(-1);//订单取消状态
+                order.setIsRefund(1);//退款标志
+                order.setRefundTime(LocalDateTime.now());//退款时间
                 this.updateById(order);
+                //将分佣次数加回
+                User user = appUserMapper.selectById(order.getUserId());
+                user.setInviteNum(user.getInviteNum()+1);
+                appUserMapper.updateById(user);
+                //商品状态修改
+                company.setStatus(1);
+                companyMapper.updateById(company);
             }
         }
     }
@@ -345,5 +368,20 @@
 
     }
 
+    @Override
+    public FinanceFlowsTopVO financeTop() {
+        return this.baseMapper.financeTop();
+    }
+
+    @Override
+    public IPage<FinanceFlowsPageVO> flowsPage(FinanceFlowsDTO dto) {
+        IPage<FinanceFlowsPageVO> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        Long total  = this.baseMapper.countFlowsPage(dto);
+        IPage<FinanceFlowsPageVO> financeFlowsPageVOIPage = this.baseMapper.flowsPage(page, dto);
+        financeFlowsPageVOIPage.setTotal(total);
+        return financeFlowsPageVOIPage;
+    }
+
+
 
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SystemConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SystemConfigServiceImpl.java
index 28be7ee..3b1c046 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SystemConfigServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SystemConfigServiceImpl.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.system.mapper.SystemConfigMapper;
 import com.ruoyi.system.domain.SystemConfig;
 import com.ruoyi.system.pojo.dto.AddSystemConfigDTO;
@@ -12,6 +13,7 @@
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 
 @Service
 public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigMapper, SystemConfig> implements SystemConfigService {
@@ -49,6 +51,9 @@
         //根据类型删除
         systemConfigMapper.delete(new LambdaQueryWrapper<SystemConfig>().eq(SystemConfig::getType, dto.getType()));
         if (dto.getType()==3){
+            if (dto.getPlatform().add(dto.getUser()).compareTo(BigDecimal.valueOf(100)) > 0){
+                throw new ServiceException("平台提成+绑定用户提成不能超过100");
+            }
             //抽单设置
             DrawSheet drawSheet = new DrawSheet();
             drawSheet.setPlatform(dto.getPlatform());
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WithdrawServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WithdrawServiceImpl.java
new file mode 100644
index 0000000..2de515a
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WithdrawServiceImpl.java
@@ -0,0 +1,90 @@
+package com.ruoyi.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.system.domain.AccountDetail;
+import com.ruoyi.system.domain.User;
+import com.ruoyi.system.domain.Withdrawal;
+import com.ruoyi.system.mapper.AccountDetailMapper;
+import com.ruoyi.system.mapper.AppUserMapper;
+import com.ruoyi.system.mapper.WithdrawMapper;
+import com.ruoyi.system.pojo.dto.FinanceFlowsDTO;
+import com.ruoyi.system.pojo.dto.WithDrawAgreeDTO;
+import com.ruoyi.system.pojo.dto.WithDrawRefuseDTO;
+import com.ruoyi.system.pojo.dto.WithdrawPageDTO;
+import com.ruoyi.system.pojo.vo.WithdrawPageVO;
+import com.ruoyi.system.service.WithdrawService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdrawal> implements WithdrawService {
+
+
+    private final AccountDetailMapper accountDetailMapper;
+    private final AppUserMapper appUserMapper;
+
+    public WithdrawServiceImpl(AccountDetailMapper accountDetailMapper, AppUserMapper appUserMapper) {
+        this.accountDetailMapper = accountDetailMapper;
+        this.appUserMapper = appUserMapper;
+    }
+
+    @Override
+    public IPage<WithdrawPageVO> withdrawPage(WithdrawPageDTO dto) {
+        IPage<WithdrawPageVO> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        return this.baseMapper.withdrawPage(page,dto);
+    }
+
+    @Transactional
+    @Override
+    public void agree(WithDrawAgreeDTO dto) {
+        Withdrawal withdrawal = this.baseMapper.selectById(dto.getId());
+        if (null == withdrawal  ) {
+            throw new ServiceException("该申请记录不存在");
+        }
+        if (withdrawal.getStatus() != 0) {
+            throw new ServiceException("状态错误,不在审核状态中");
+        }
+        //审核通过 线下打款
+        //1.审核状态修改
+        withdrawal.setStatus(1);//通过
+        withdrawal.setImg(dto.getImg());
+        withdrawal.setRemark(dto.getRemark());
+        this.baseMapper.updateById(withdrawal);
+        //2.修改账户明细表
+        AccountDetail accountDetail = accountDetailMapper.selectOne(new LambdaQueryWrapper<AccountDetail>().eq(AccountDetail::getSourceId, withdrawal.getId()));
+        accountDetail.setStatus(2);//通过
+        accountDetail.setRemark(dto.getRemark());
+        accountDetailMapper.updateById(accountDetail);
+    }
+
+    @Transactional
+    @Override
+    public void refuse(WithDrawRefuseDTO dto) {
+        Withdrawal withdrawal = this.baseMapper.selectById(dto.getId());
+        if (null == withdrawal  ) {
+            throw new ServiceException("该申请记录不存在");
+        }
+        if (withdrawal.getStatus() != 0) {
+            throw new ServiceException("状态错误,不在审核状态中");
+        }
+        //1.审核拒绝
+        withdrawal.setStatus(2);//拒绝
+        withdrawal.setRemark(dto.getRemark());//备注
+        this.baseMapper.updateById(withdrawal);
+
+        //2. 返回账户余额
+        User user = appUserMapper.selectById(withdrawal.getUserId());
+        user.setBalance(user.getBalance().add(withdrawal.getMoney()));
+        appUserMapper.updateById(user);
+
+        //3.修改账户明细表
+        AccountDetail accountDetail = accountDetailMapper.selectOne(new LambdaQueryWrapper<AccountDetail>().eq(AccountDetail::getSourceId, withdrawal.getId()));
+        accountDetail.setStatus(3);//通过
+        accountDetail.setRemark(dto.getRemark());
+        accountDetailMapper.updateById(accountDetail);
+    }
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml
index 697616a..c1a5b93 100644
--- a/ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml
@@ -195,4 +195,85 @@
         GROUP BY DATE(pay_time)
         ORDER BY DATE(pay_time) ASC
     </select>
+    <select id="financeTop" resultType="com.ruoyi.system.pojo.vo.FinanceFlowsTopVO">
+        SELECT
+            SUM(price) AS totalIncome,
+            SUM(commission_platform) AS totalProfit,
+            SUM(commission_price) AS totalCommission,
+            SUM(price - commission_platform - commission_price) AS sellerIncome
+        FROM tb_order
+        WHERE status IN (4, 5, 6)
+          AND is_refund = 0
+    </select>
+    <select id="flowsPage" resultType="com.ruoyi.system.pojo.vo.FinanceFlowsPageVO">
+        SELECT
+            order_no,
+            price,
+            commission_price,
+            commission_platform,
+            pay_time AS operateTime,
+            (price - commission_platform - commission_price) as seller,
+            1 AS type  -- 收入类型
+        FROM tb_order
+        WHERE
+            ((status IN (4, 5, 6))  -- 只查询已支付订单
+            or
+            (status=-1 and is_refund =1))  -- 已取消且已退款的订单
+            <if test="null != dto.orderNo and '' != dto.orderNo">
+                and order_no LIKE CONCAT('%', #{dto.orderNo}, '%')
+            </if>
+            <if test="null != dto.operateTimeStart and null != dto.operateTimeEnd">
+                and pay_time between #{dto.operateTimeStart} and #{dto.operateTimeEnd}
+            </if>
+        AND ( #{dto.type} IS NULL OR 1 = #{dto.type} )
+        UNION ALL
+        SELECT
+            order_no,
+            0 AS price,
+            0 AS commission_price,
+            0 AS commission_platform,
+            refund_time AS operateTime,
+        0 as seller,
+            2 AS type  -- 退款类型
+        FROM tb_order
+        WHERE is_refund = 1  -- 只查询已退款订单
+        <if test="null != dto.orderNo and '' != dto.orderNo">
+            and order_no LIKE CONCAT('%', #{dto.orderNo}, '%')
+        </if>
+        <if test="null != dto.operateTimeStart and null != dto.operateTimeEnd">
+            and refund_time between #{dto.operateTimeStart} and #{dto.operateTimeEnd}
+        </if>
+        AND ( #{dto.type} IS NULL OR 2 = #{dto.type} )
+        ORDER BY operateTime DESC
+        LIMIT #{dto.pageNum}, #{dto.pageSize};
+    </select>
+    <select id="countFlowsPage" resultType="java.lang.Long">
+        SELECT COUNT(*) FROM (
+        select 1
+        from
+        tb_order
+        WHERE
+        ((status IN (4, 5, 6)) -- 只查询已支付订单
+        or
+        (status=-1 and is_refund =1)) -- 已取消且已退款的订单
+        <if test="null != dto.orderNo and '' != dto.orderNo">
+            and order_no LIKE CONCAT('%', #{dto.orderNo}, '%')
+        </if>
+        <if test="null != dto.operateTimeStart and null != dto.operateTimeEnd">
+            and pay_time between #{dto.operateTimeStart} and #{dto.operateTimeEnd}
+        </if>
+        AND ( #{dto.type} IS NULL OR 1 = #{dto.type} )
+        UNION ALL
+        select 1
+        FROM tb_order
+        WHERE is_refund = 1 -- 只查询已退款订单
+        <if test="null != dto.orderNo and '' != dto.orderNo">
+            and order_no LIKE CONCAT('%', #{dto.orderNo}, '%')
+        </if>
+        <if test="null != dto.operateTimeStart and null != dto.operateTimeEnd">
+            and refund_time between #{dto.operateTimeStart} and #{dto.operateTimeEnd}
+        </if>
+        AND ( #{dto.type} IS NULL OR 2 = #{dto.type} )
+        ) AS t
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/WithdrawMapper.xml b/ruoyi-system/src/main/resources/mapper/system/WithdrawMapper.xml
index f34e966..3058419 100644
--- a/ruoyi-system/src/main/resources/mapper/system/WithdrawMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/WithdrawMapper.xml
@@ -3,4 +3,30 @@
 <mapper namespace="com.ruoyi.system.mapper.WithdrawMapper">
 
 
+    <select id="withdrawPage" resultType="com.ruoyi.system.pojo.vo.WithdrawPageVO">
+        select
+            w.id,
+            u.user_name as appName,
+            u.phone,
+            w.money,
+            w.create_time,
+            w.card_no,
+            w.username as cardName,
+            w.status
+            from
+                tb_withdrawal w
+            left join
+                tb_user u on w.user_id = u.id
+        <where>
+            <if test="null != dto.userName and ''!=dto.userName">
+                and u.user_name like concat('%',#{dto.userName},'%')
+            </if>
+            <if test="null != dto.phone and '' != dto.phone">
+                and u.phone like concat('%',#{dto.phone},'%')
+            </if>
+            <if test="null != dto.status">
+                and w.status = #{dto.status}
+            </if>
+        </where>
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.7.1