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 implements AppUserService { @Resource private OrderMapper orderMapper; @Resource private CompanyMapper companyMapper; @Resource private AccountDetailMapper accountDetailMapper; @Override public IPage getAppUserPage(AppUserPageDTO dto) { IPage 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 orders=companyMapper.getProcessingOrdersByUserId(id); //2.2计算订单金额 扣减超时订单金额 for(BuyerInfoAndOrder order :orders) { BigDecimal total = new BigDecimal("0.00"); order.setPrice(order.getPrice()==null?BigDecimal.ZERO:order.getPrice()); order.setCommissionPrice(order.getCommissionPrice()==null?BigDecimal.ZERO:order.getCommissionPrice()); order.setCommissionPlatform(order.getCommissionPlatform()==null?BigDecimal.ZERO:order.getCommissionPlatform()); 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 list = this.baseMapper.getInviteUserListByInviteId(id); vo.setInviteUserList(list); List list1 = accountDetailMapper.selectList(new LambdaQueryWrapper().eq(AccountDetail::getCategory, 2).eq(AccountDetail::getStatus, 1).eq(AccountDetail::getUserId, id)); BigDecimal reduce2 = list1.stream().map(AccountDetail::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add); vo.setRecorded(reduce2); 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.setCategory(6); 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); } }