package com.pz.system.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.pz.common.core.page.TableDataInfo; import com.pz.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.pz.merchant.domain.Employees; import com.pz.merchant.mapper.CompanyMapper; import com.pz.merchant.mapper.EmployeesMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.pz.system.domain.bo.IncomeBo; import com.pz.system.domain.vo.IncomeVo; import com.pz.system.domain.Income; import com.pz.system.mapper.IncomeMapper; import com.pz.system.service.IIncomeService; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.Collection; import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; /** * 陪诊员/商户提现Service业务层处理 * * @author ruoyi * @date 2023-09-12 */ @RequiredArgsConstructor @Service public class IncomeServiceImpl implements IIncomeService { private final IncomeMapper baseMapper; private final EmployeesMapper employeesMapper; private final CompanyMapper companyMapper; /** * 查询陪诊员/商户提现 */ @Override public IncomeVo queryById(Integer id) { return baseMapper.selectVoById(id); } /** * 查询陪诊员/商户提现列表 */ @Override public TableDataInfo<IncomeVo> queryPageList(IncomeBo bo, PageQuery pageQuery) { LambdaQueryWrapper<Income> lqw = buildQueryWrapper(bo); Page<IncomeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Optional.ofNullable(result.getRecords()).ifPresent(incomeVos -> { incomeVos.forEach(incomeVo -> { AtomicReference<String> userName = new AtomicReference<>(""); //判断是陪诊员还是商户 if (incomeVo.getUserType() == 1) { //获取陪诊员表 Optional.ofNullable(employeesMapper.selectEmployeesById(incomeVo.getEcId())) .ifPresent(employeesVo -> { userName.set(employeesVo.getUserName()); }); } else { Optional.ofNullable(companyMapper.selectVoById(incomeVo.getEcId())) .ifPresent(companyVo -> { userName.set(companyVo.getName()); }); } incomeVo.setUserName(userName.get()); }); }); return TableDataInfo.build(result); } /** * 查询陪诊员/商户提现列表 */ @Override public List<IncomeVo> queryList(IncomeBo bo) { LambdaQueryWrapper<Income> lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } private LambdaQueryWrapper<Income> buildQueryWrapper(IncomeBo bo) { Map<String, Object> params = bo.getParams(); LambdaQueryWrapper<Income> lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getUserType() != null, Income::getUserType, bo.getUserType()); lqw.eq(bo.getEcId() != null, Income::getEcId, bo.getEcId()); lqw.eq(StringUtils.isNotBlank(bo.getOpenid()), Income::getOpenid, bo.getOpenid()); lqw.eq(StringUtils.isNotBlank(bo.getPartnerTradeNo()), Income::getPartnerTradeNo, bo.getPartnerTradeNo()); lqw.eq(bo.getAmount() != null, Income::getAmount, bo.getAmount()); lqw.eq(bo.getStatus() != null, Income::getStatus, bo.getStatus()); return lqw; } /** * 新增陪诊员/商户提现 */ @Override public Boolean insertByBo(IncomeBo bo) { Income add = BeanUtil.toBean(bo, Income.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); } return flag; } /** * 修改陪诊员/商户提现 */ @Override public Boolean updateByBo(IncomeBo bo) { Income update = BeanUtil.toBean(bo, Income.class); validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } /** * 保存前的数据校验 */ private void validEntityBeforeSave(Income entity) { //TODO 做一些数据校验,如唯一约束 } /** * 批量删除陪诊员/商户提现 */ @Override public Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid) { if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteBatchIds(ids) > 0; } @Override public TableDataInfo<IncomeVo> queryByEidList(IncomeBo bo, PageQuery pageQuery) { Page<IncomeVo> result = baseMapper.selectVoPage(pageQuery.build(), Wrappers.<Income>lambdaQuery().eq(Income::getEcId, bo.getEcId()).eq(Income::getUserType, 1).eq(Income::getStatus, bo.getStatus())); return TableDataInfo.build(result); } @Override @Transactional public Boolean withdrawEmployees(IncomeBo incomeBo) { //新增提现记录 incomeBo.setUserType(1); Income add = BeanUtil.toBean(incomeBo, Income.class); baseMapper.insert(add); //修改陪诊员余额 Employees employees = new Employees(); employees.setId(incomeBo.getEcId()); BigDecimal subtract = new BigDecimal(employees.getBalance()).subtract(incomeBo.getAmount()); employees.setBalance(subtract.toString()); return employeesMapper.updateById(employees) > 0; } }