huliguo
2025-06-02 5952d2383571c3fcd96dc0eaad5347b21fce415d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
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.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 是否需要加消息
 
    }
}