huliguo
2025-06-02 5952d2383571c3fcd96dc0eaad5347b21fce415d
用户管理
11个文件已添加
8个文件已修改
568 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/AppUserController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/domain/AccountDetail.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/domain/Order.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/AccountDetailMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/AppUserMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/CompanyMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/UpdateBalanceDTO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/pojo/model/BuyerInfoAndOrder.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/AppUserVO.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/InviteUser.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/AppUserService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AppUserServiceImpl.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/AccountDetailMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/AppUserMapper.xml 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/CompanyMapper.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/AppUserController.java
@@ -3,11 +3,14 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.pojo.dto.AppUserPageDTO;
import com.ruoyi.system.pojo.dto.UpdateBalanceDTO;
import com.ruoyi.system.pojo.vo.AppUserPageVO;
import com.ruoyi.system.pojo.vo.AppUserVO;
import com.ruoyi.system.pojo.vo.BannerPageVO;
import com.ruoyi.system.service.AppUserService;
import com.ruoyi.system.service.BannerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -37,9 +40,31 @@
    /**
     * 查看详情
     */
    @GetMapping("/detail/{id}")
    @ApiOperation(value = "查看详情")
    @PreAuthorize("@ss.hasPermi('appuser:manage')")
    public R<AppUserVO> detail(@PathVariable("id") String id){
        return R.ok(appUserService.detail(id));
    }
    /**
     * 冻结/解冻
     */
    @PutMapping("/frozen/{id}")
    @ApiOperation(value = "冻结/解冻")
    @PreAuthorize("@ss.hasPermi('appuser:manage')")
    public R<Void> frozen(@PathVariable("id") String id){
        appUserService.frozen(id);
        return R.ok();
    }
    /**
     * 变更余额
     */
    @PutMapping("/balance")
    @ApiOperation(value = "修改余额")
    @PreAuthorize("@ss.hasPermi('appuser:manage')")
    public R<Void> balance(@RequestBody UpdateBalanceDTO dto){
        appUserService.balance(dto);
        return R.ok();
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -255,19 +255,19 @@
    /**
     * 获取部门树列表
     */
  /*  @PreAuthorize("@ss.hasPermi('system:user:list')")
    @PreAuthorize("@ss.hasPermi('system:user:list')")
    @GetMapping("/deptTree")
    public AjaxResult deptTree(SysDept dept)
    {
        return success(deptService.selectDeptTreeList(dept));
    }*/
    }
    /**
     * 分页
     */
    @ApiOperation(value = "账号管理-获取账号分页列表", tags = "系统后台-权限管理")
    @PreAuthorize("@ss.hasPermi('permission:account')")
    @GetMapping("/list")
    @GetMapping("/page/list")
    public R<IPage<SysUserPageListVO>> getSysUserPageList(@RequestParam("pageNum")Integer pageNum,
                                                          @RequestParam("pageSize")Integer pageSize,
                                                          @RequestParam("nickName")String nickName,
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -111,10 +111,9 @@
            .authorizeHttpRequests((requests) -> {
                permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
                // 对于登录login 注册register 验证码captchaImage 允许匿名访问
                requests.antMatchers("/login", "/register", "/captchaImage").permitAll()
                requests.antMatchers("/system/login", "/register", "/captchaImage").permitAll()
                    // 静态资源,可匿名访问
                    .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                        .antMatchers("/system/banner/**","/system/config/**","/system/systemConfig/**").permitAll()//先放行所有的
                    .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
                    // 除上面外的所有请求全部需要鉴权认证
                    .anyRequest().authenticated();
ruoyi-system/src/main/java/com/ruoyi/system/domain/AccountDetail.java
@@ -48,4 +48,8 @@
    @TableField("money")
    @ApiModelProperty(value = "金额")
    private BigDecimal money;
    @TableField("remark")
    @ApiModelProperty(value = "备注")
    private String remark;
}
ruoyi-system/src/main/java/com/ruoyi/system/domain/Order.java
New file
@@ -0,0 +1,74 @@
package com.ruoyi.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@TableName("tb_order")
public class Order {
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键ID")
    private String id;
    @TableField(value = "company_id")
    @ApiModelProperty(value = "购买公司的用户id")
    private String companyId;
    @TableField(value = "status")
    @ApiModelProperty(value = "订单状态:-1取消 2待确认 3已确认 4办理中 5卖家已完成 6买家完成")
    private Integer status;
    @TableField(value = "user_id")
    @ApiModelProperty(value = "购买人id")
    private String userId;
    @TableField(value = "price")
    @ApiModelProperty(value = "购买价格")
    private BigDecimal price;
    @TableField(value = "order_no")
    @ApiModelProperty(value = "订单编号")
    private String orderNo;
    @TableField(value = "create_time")
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(value = "out_trade_no")
    @ApiModelProperty(value = "商户单号")
    private String outTradeNo;
    @TableField(value = "confirm_time")
    @ApiModelProperty(value = "确认时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime confirmTime;
    @TableField(value = "pay_time")
    @ApiModelProperty(value = "支付时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime payTime;
    @TableField(value = "share_user_id")
    @ApiModelProperty(value = "需要分佣的userid")
    private String shareUserId;
    @TableField(value = "commission_price")
    @ApiModelProperty(value = "分佣金额")
    private BigDecimal commissionPrice;
    @TableField(value = "commission_platform")
    @ApiModelProperty(value = "平台分佣金额")
    private BigDecimal commissionPlatform;
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/AccountDetailMapper.java
New file
@@ -0,0 +1,10 @@
package com.ruoyi.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.system.domain.AccountDetail;
import com.ruoyi.system.domain.Agreement;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface AccountDetailMapper extends BaseMapper<AccountDetail> {
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/AppUserMapper.java
@@ -6,11 +6,19 @@
import com.ruoyi.system.domain.User;
import com.ruoyi.system.pojo.dto.AppUserPageDTO;
import com.ruoyi.system.pojo.vo.AppUserPageVO;
import com.ruoyi.system.pojo.vo.AppUserVO;
import com.ruoyi.system.pojo.vo.InviteUser;
import com.ruoyi.system.pojo.vo.SysDeptPageVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface AppUserMapper extends BaseMapper<User> {
    IPage<AppUserPageVO> getAppUserPage(@Param("page") IPage<SysDeptPageVO> iPage, @Param("dto") AppUserPageDTO dto);
    AppUserVO getDetailInfoById(@Param("id")String id);
    List<InviteUser> getInviteUserListByInviteId(@Param("id")String id);
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/CompanyMapper.java
New file
@@ -0,0 +1,16 @@
package com.ruoyi.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.system.domain.Agreement;
import com.ruoyi.system.domain.Company;
import com.ruoyi.system.domain.Order;
import com.ruoyi.system.pojo.model.BuyerInfoAndOrder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface CompanyMapper extends BaseMapper<Company> {
    List<BuyerInfoAndOrder> getProcessingOrdersByUserId(@Param("id") String id);
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java
New file
@@ -0,0 +1,14 @@
package com.ruoyi.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.system.domain.Agreement;
import com.ruoyi.system.domain.Order;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
@Mapper
public interface OrderMapper extends BaseMapper<Order> {
    BigDecimal getProcessingCommissionPriceByShareUserId(@Param("id") String id);
}
ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/UpdateBalanceDTO.java
New file
@@ -0,0 +1,34 @@
package com.ruoyi.system.pojo.dto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.*;
import java.math.BigDecimal;
@Data
@ApiModel("修改余额DTO")
public class UpdateBalanceDTO {
    @ApiModelProperty(value = "主键ID")
    private String id;
    @ApiModelProperty(value = "类型:1+ 2-")
    @NotNull(message = "类型不能为空")
    @Max(value = 2, message = "类型选择范围在1-2")
    @Min(value = 1, message = "类型选择范围在1-2")
    private Integer type;
    @ApiModelProperty(value = "金额")
    @NotNull(message = "金额不能为空")
    @DecimalMin(value = "0.0", inclusive = false, message = "金额必须大于0")
    private BigDecimal money;
    @ApiModelProperty(value = "备注")
    @NotEmpty(message = "变更原因不能为空")
    private String remark;
}
ruoyi-system/src/main/java/com/ruoyi/system/pojo/model/BuyerInfoAndOrder.java
New file
@@ -0,0 +1,34 @@
package com.ruoyi.system.pojo.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class BuyerInfoAndOrder {
    @TableField(value = "price")
    @ApiModelProperty(value = "购买价格")
    private BigDecimal price;
    @ApiModelProperty(value = "支付时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime payTime;
    @ApiModelProperty(value = "分佣金额")
    private BigDecimal commissionPrice;
    @ApiModelProperty(value = "平台分佣金额")
    private BigDecimal commissionPlatform;
    @ApiModelProperty(value = "新增天数")
    private Integer addDay;
    @ApiModelProperty(value = "预估天数")
    private Integer estimatedDays;
}
ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/AppUserVO.java
New file
@@ -0,0 +1,68 @@
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;
import java.util.List;
@Data
@ApiModel("appUser详情VO")
public class AppUserVO {
    @ApiModelProperty("用户id")
    private String id;
    @ApiModelProperty(value = "用户名称")
    private String userName;
    @ApiModelProperty(value = "绑定手机号")
    private String phone;
    @ApiModelProperty(value = "注册时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @ApiModelProperty(value = "账户余额(默认0.00)")
    private BigDecimal balance;
    @ApiModelProperty(value = "已提现金额")
    private BigDecimal withdraw;
    @ApiModelProperty(value = "待审核金额")
    private BigDecimal audit;
    @ApiModelProperty(value = "待入账金额")
    private BigDecimal recorded;
    @ApiModelProperty(value = "发布次数")
    private Integer publishNum;
    @ApiModelProperty(value = "购买次数")
    private Integer buyNum;
    @ApiModelProperty(value = "购买总金额")
    private BigDecimal buyTotalMoney;
    @ApiModelProperty(value = "发布完成次数")
    private Integer publishFinishNum;
    @ApiModelProperty(value = "购买订单完成次数")
    private Integer buyFinishNum;
    @ApiModelProperty("绑定用户")
    private String bindUserName;
    @ApiModelProperty(value = "剩余分佣次数")
    private Integer inviteNum;
    @ApiModelProperty(value = "下级")
    private List<InviteUser> inviteUserList;
}
ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/InviteUser.java
New file
@@ -0,0 +1,26 @@
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 io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel("下级用户")
public class InviteUser {
    @ApiModelProperty(value = "主键ID")
    private String userId;
    @ApiModelProperty(value = "用户名称")
    private String userName;
    @ApiModelProperty(value = "剩余提成次数")
    private Integer inviteNum;
    @ApiModelProperty(value = "已分佣金额")
    private BigDecimal commissionMoney;
}
ruoyi-system/src/main/java/com/ruoyi/system/service/AppUserService.java
@@ -6,9 +6,17 @@
import com.ruoyi.system.domain.User;
import com.ruoyi.system.pojo.dto.AddAgreementDTO;
import com.ruoyi.system.pojo.dto.AppUserPageDTO;
import com.ruoyi.system.pojo.dto.UpdateBalanceDTO;
import com.ruoyi.system.pojo.vo.AppUserPageVO;
import com.ruoyi.system.pojo.vo.AppUserVO;
public interface AppUserService extends IService<User>  {
    IPage<AppUserPageVO> getAppUserPage(AppUserPageDTO getAppUserPage);
    AppUserVO detail(String id);
    void frozen(String id);
    void balance(UpdateBalanceDTO dto);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AppUserServiceImpl.java
@@ -4,28 +4,136 @@
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.system.domain.Agreement;
import com.ruoyi.system.domain.User;
import com.ruoyi.system.mapper.AgreementMapper;
import com.ruoyi.system.mapper.AppUserMapper;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.system.domain.*;
import com.ruoyi.system.mapper.*;
import com.ruoyi.system.pojo.dto.AddAgreementDTO;
import com.ruoyi.system.pojo.dto.AppUserPageDTO;
import com.ruoyi.system.pojo.dto.UpdateBalanceDTO;
import com.ruoyi.system.pojo.model.BuyerInfoAndOrder;
import com.ruoyi.system.pojo.vo.AppUserPageVO;
import com.ruoyi.system.pojo.vo.AppUserVO;
import com.ruoyi.system.pojo.vo.InviteUser;
import com.ruoyi.system.pojo.vo.SysDeptPageVO;
import com.ruoyi.system.service.AgreementService;
import com.ruoyi.system.service.AppUserService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.stream.Collectors;
import static com.ruoyi.common.utils.SecurityUtils.getLoginUser;
@Service
public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, User> implements AppUserService {
    @Resource
    private OrderMapper orderMapper;
    @Resource
    private CompanyMapper companyMapper;
    @Resource
    private AccountDetailMapper accountDetailMapper;
    @Override
    public IPage<AppUserPageVO> getAppUserPage(AppUserPageDTO dto) {
        IPage<SysDeptPageVO> iPage = new Page<>(dto.getPageNum(), dto.getPageSize());
        return this.baseMapper.getAppUserPage(iPage,dto);
    }
    @Override
    public AppUserVO detail(String id) {
        //1.基础信息
        AppUserVO vo=this.baseMapper.getDetailInfoById(id);
        //2.计算待入账金额
        BigDecimal recorded=new BigDecimal("0.00");
        //2.1查询待处理中的订单
        List<BuyerInfoAndOrder> orders=companyMapper.getProcessingOrdersByUserId(id);
        //2.2计算订单金额 扣减超时订单金额
        for(BuyerInfoAndOrder order :orders) {
            BigDecimal total = new BigDecimal("0.00");
            total = total.add(order.getPrice()).subtract(order.getCommissionPrice()).subtract(order.getCommissionPlatform());
            System.out.println(total);
            //扣减超时订单
            //到期时间 支付时间 + 预计时间 + 新增时间
            LocalDateTime end = order.getPayTime().plusDays(order.getEstimatedDays()).plusDays(order.getAddDay());
            LocalDateTime now = LocalDateTime.now();//计算扣费时间
            if (!now.isAfter(end)) {
                recorded = recorded.add(total);
                break;
            }
            // 计算两个时间点的差值(精确到秒)
            long seconds = ChronoUnit.SECONDS.between(end, now);
            // 向上取整:超过时间不满24小时按一天计算
            long  days= (seconds + 86399) / 86400;//24小时
            //计算天数差
            BigDecimal dailyAmount = new BigDecimal("100.00");
            total = total.subtract((dailyAmount.multiply(BigDecimal.valueOf(days))));
            recorded = recorded.add(total);
        }
        //2.3查询待处理中的分佣订单
        BigDecimal commissionPrice = orderMapper.getProcessingCommissionPriceByShareUserId(id);
        //2.4累计
        recorded = recorded.add(commissionPrice);
        vo.setRecorded(recorded);
        //3.下级用户
        List<InviteUser> list = this.baseMapper.getInviteUserListByInviteId(id);
        vo.setInviteUserList(list);
        return vo;
    }
    @Override
    public void frozen(String id) {
        //查看用户是否存在
        User user = this.baseMapper.selectById(id);
        if (null == user|| user.getIsDelete() != 0|| user.getStatus() == 3) {
            throw new ServiceException("用户不存在");
        }
        user.setStatus(user.getStatus()==1?2:1);
        user.setUpdateTime(LocalDateTime.now());
        LoginUser loginUser = getLoginUser();
        user.setUpdateBy(loginUser.getUserId());
        this.baseMapper.updateById(user);
    }
    @Transactional
    @Override
    public void balance(UpdateBalanceDTO dto) {
        User user = this.baseMapper.selectById(dto.getId());
        if (null == user|| user.getIsDelete() != 0|| user.getStatus() == 3) {
            throw new ServiceException("用户不存在");
        }
        //添加明细表
        AccountDetail accountDetail = new AccountDetail();
        accountDetail.setUserId(dto.getId());
        accountDetail.setType(dto.getType());
        accountDetail.setMoney(dto.getMoney());
        accountDetail.setRemark(dto.getRemark());
        accountDetailMapper.insert(accountDetail);
        //修改用户余额
        if (dto.getType()==1){
            //加余额
            user.setBalance(user.getBalance().add(accountDetail.getMoney()));
        }else {
            //减余额
            user.setBalance(user.getBalance().subtract(accountDetail.getMoney()));
        }
        user.setUpdateTime(LocalDateTime.now());
        user.setUpdateBy(getLoginUser().getUserId());
        this.baseMapper.updateById(user);
        //todo 是否需要加消息
    }
}
ruoyi-system/src/main/resources/mapper/system/AccountDetailMapper.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.AccountDetailMapper">
</mapper>
ruoyi-system/src/main/resources/mapper/system/AppUserMapper.xml
@@ -9,13 +9,86 @@
            tbu.user_name,
            tbu.phone,
            tbu.create_time,
            tbu.balance,
            ifnull(tbu.balance,0.00) as balance,
            tbu.status,
            ifnull(bingding.num , 0) as bingDingUser,
            ifnull(buy.num , 0)  as buyNum,
            ifnull(sell.num , 0) as sellNum
        from tb_user tbu
        LEFT JOIN tb_user u2 ON u1.id = u2.invite_id
        LEFT JOIN (select u.id,count(iu.id) as num from tb_user u LEFT JOIN tb_user iu ON u.id  = iu.invite_id group by u.id) bingding ON tbu.id =  bingding.id
        left join (select user_id, count(1) as num from tb_order  where  status = 6  group by user_id) buy on tbu.id=buy.user_id
        left join (select c.user_id,count(o.company_id) as num from tb_company c left join tb_order o on c.id=o.company_id and o.status=6  group by c.user_id) sell on tbu.id = sell.user_id
        where tbu.is_delete =0
        <if test="null != dto.username and dto.username != '' ">
            and tbu.user_name like concat('%',#{dto.username},'%')
        </if>
        <if test="null != dto.phone and dto.phone != '' ">
            and tbu.phone like concat('%',#{dto.phone},'%')
        </if>
        <if test="null != dto.startTime and null != dto.endTime">
            and tbu.create_time between #{dto.startTime} and #{dto.endTime}
        </if>
        <if test="null != dto.status">
            and tbu.status =#{dto.status}
        </if>
    </select>
    <select id="getDetailInfoById" resultType="com.ruoyi.system.pojo.vo.AppUserVO">
        select
            tbu.user_name as userName,
            tbu.phone as phone,
            tbu.create_time as createTime,
            ifnull(tbu.balance,0.00) as balance,
            IFNULL(tbu.invite_num, 0) AS inviteNum,
            invite.user_name as bindUserName,
            IFNULL(money.audit, 0) AS audit,
            IFNULL(money.withdraw, 0) AS withdraw,
            IFNULL(publised.publish_num, 0) AS publishNum,
            IFNULL(publised.publish_finish_num, 0) AS publishFinishNum,
            IFNULL(buy.buy_num, 0) AS buyNum,
            IFNULL(buy.buy_total_money, 0) AS buyTotalMoney,
            IFNULL(buy.buy_finish_num, 0) AS buyFinishNum
        from tb_user tbu
                 left join tb_user invite on invite.id = tbu.invite_id
                 left join (SELECT
                                user_id,
                                SUM(CASE WHEN status = 0 THEN money ELSE 0 END) AS audit,  -- 待审核金额
                                SUM(CASE WHEN status = 1 THEN money ELSE 0 END) AS withdraw   -- 已提现金额
                            FROM  tb_withdrawal  WHERE  status IN (0, 1)  group by user_id ) money on tbu.id = money.user_id
                 left join (select
                                user_id,
                                COUNT(*) AS publish_num,-- 发布次数
                                SUM(CASE WHEN status = 3 THEN 1 ELSE 0 END) AS publish_finish_num -- 发布完成次数
                            from tb_company  GROUP BY user_id ) publised ON tbu.id = publised.user_id
                 left join (select
                                user_id,
                                count(*) as buy_num,-- 购买次数
                                sum( price )as buy_total_money,-- 购买总金额
                                SUM(case when status=6 THEN 1 ELSE 0 end) as buy_finish_num -- 购买订单完成次数
                            from tb_order  GROUP BY user_id ) buy ON tbu.id = buy.user_id
        WHERE
            tbu.id = #{id}
    </select>
    <select id="getInviteUserListByInviteId" resultType="com.ruoyi.system.pojo.vo.InviteUser">
        SELECT
            tbu.id AS user_id,
            tbu.user_name,
            tbu.invite_num,
            COALESCE(commission.total_commission, 0) AS commission_money
        FROM
            tb_user tbu
                LEFT JOIN (SELECT
                        share_user_id,
                        user_id AS order_user_id,  -- 订单关联的用户ID(即被邀请用户)
                        SUM(commission_price) AS total_commission
                    FROM  tb_order  WHERE   status = 6  -- 已完成
                        AND share_user_id = #{id}
                    GROUP BY share_user_id, user_id     -- 按分佣用户和订单关联用户分组
                    ) commission ON tbu.id = commission.order_user_id  -- 关联被邀请用户ID
        WHERE
            tbu.status != 3               -- 未注销
            AND tbu.is_delete = 0         -- 未删除
            AND tbu.invite_id = #{id};
    </select>
</mapper>
ruoyi-system/src/main/resources/mapper/system/CompanyMapper.xml
New file
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.CompanyMapper">
    <select id="getProcessingOrdersByUserId" resultType="com.ruoyi.system.pojo.model.BuyerInfoAndOrder">
        SELECT
            c.estimated_days,          -- 公司预估天数
            tbo.price,                 -- 订单价格
            tbo.pay_time,              -- 支付时间
            tbo.commission_price,      -- 用户分佣金额
            tbo.commission_platform,   -- 平台分佣金额
            tinfo.add_day              -- 额外添加天数
        FROM
            tb_company c
                LEFT JOIN
            tb_order tbo
            ON c.id = tbo.company_id
                AND tbo.status IN (4, 5)   -- 仅关联状态为4或5的订单
                LEFT JOIN
            tb_buyer_company_info tinfo
            ON tbo.id = tinfo.order_id
        WHERE
            c.is_delete = 0            -- 公司未被删除
          AND c.user_id = #{id};  -- 指定用户的公司
    </select>
</mapper>
ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml
New file
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.OrderMapper">
    <select id="getProcessingCommissionPriceByShareUserId" resultType="java.math.BigDecimal">
        select  COALESCE(SUM(commission_price), 0.00) AS total_commission from tb_order where status in (4,5) and share_user_id =#{id}
    </select>
</mapper>