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