huliguo
2025-06-05 0a492b64ca1a4e40cc9ea56eddd1afe2c09a12b3
财务管理
1个文件已删除
8个文件已添加
14个文件已修改
589 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/FinanceController.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/PaymentUtil.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/domain/AccountDetail.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/domain/Message.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/domain/Order.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/WithdrawMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/AddSystemConfigDTO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/FinanceFlowsDTO.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithDrawAgreeDTO.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithDrawRefuseDTO.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithdrawPageDTO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/FinanceFlowsPageVO.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/FinanceFlowsTopVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/WithdrawPageVO.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/OrderService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/WithdrawService.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/WithdrawServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SystemConfigServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WithdrawServiceImpl.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/WithdrawMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
    }
}
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 = "";
    
    
    /**
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;
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;
}
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;
}
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);
}
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);
}
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;
}
ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/FinanceFlowsDTO.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithDrawAgreeDTO.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithDrawRefuseDTO.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/WithdrawPageDTO.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/FinanceFlowsPageVO.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/FinanceFlowsTopVO.java
New file
@@ -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;
}
ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/WithdrawPageVO.java
New file
@@ -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;
}
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);
}
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);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/WithdrawServiceImpl.java
File was deleted
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;
    }
}
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());
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WithdrawServiceImpl.java
New file
@@ -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);
    }
}
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>
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>