package cn.lili.modules.wallet.serviceimpl; import cn.hutool.core.date.DateTime; import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.SnowFlake; import cn.lili.common.vo.PageVO; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.trade.entity.vo.RechargeQueryVO; import cn.lili.modules.wallet.entity.dos.Recharge; import cn.lili.modules.wallet.entity.dto.MemberWalletUpdateDTO; import cn.lili.modules.wallet.entity.enums.DepositServiceTypeEnum; import cn.lili.modules.wallet.mapper.RechargeMapper; import cn.lili.modules.wallet.service.MemberWalletService; import cn.lili.modules.wallet.service.RechargeService; import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; /** * 预存款业务层实现 * * @author pikachu * @since 2020-02-25 14:10:16 */ @Service public class RechargeServiceImpl extends ServiceImpl implements RechargeService { /** * 会员预存款 */ @Autowired private MemberWalletService memberWalletService; @Override public Recharge recharge(Double price) { if (price == null || price <= 0 || price > 1000000) { throw new ServiceException(ResultCode.RECHARGE_PRICE_ERROR); } //获取当前登录的会员 AuthUser authUser = UserContext.getCurrentUser(); //构建sn String sn = "Y" + SnowFlake.getId(); //整合充值订单数据 Recharge recharge = new Recharge(sn, authUser.getId(), authUser.getUsername(), price); //添加预存款充值账单 this.save(recharge); //返回预存款 return recharge; } @Override public IPage rechargePage(PageVO page, RechargeQueryVO rechargeQueryVO) { //构建查询条件 QueryWrapper queryWrapper = new QueryWrapper<>(); //会员名称 queryWrapper.like(!CharSequenceUtil.isEmpty(rechargeQueryVO.getMemberName()), "member_name", rechargeQueryVO.getMemberName()); //充值订单号 queryWrapper.eq(!CharSequenceUtil.isEmpty(rechargeQueryVO.getRechargeSn()), "recharge_sn", rechargeQueryVO.getRechargeSn()); //会员id queryWrapper.eq(!CharSequenceUtil.isEmpty(rechargeQueryVO.getMemberId()), "member_id", rechargeQueryVO.getMemberId()); //支付时间 开始时间和结束时间 if (!CharSequenceUtil.isEmpty(rechargeQueryVO.getStartDate()) && !CharSequenceUtil.isEmpty(rechargeQueryVO.getEndDate())) { Date start = cn.hutool.core.date.DateUtil.parse(rechargeQueryVO.getStartDate()); Date end = cn.hutool.core.date.DateUtil.parse(rechargeQueryVO.getEndDate()); queryWrapper.between("pay_time", start, end); } queryWrapper.orderByDesc("create_time"); //查询返回数据 return this.page(PageUtil.initPage(page), queryWrapper); } @Override public void paySuccess(String sn, String receivableNo, String paymentMethod) { //根据sn获取支付账单 Recharge recharge = this.getOne(new QueryWrapper().eq("recharge_sn", sn)); //如果支付账单不为空则进行一下逻辑 if (recharge != null && !recharge.getPayStatus().equals(PayStatusEnum.PAID.name())) { //将此账单支付状态更改为已支付 recharge.setPayStatus(PayStatusEnum.PAID.name()); recharge.setReceivableNo(receivableNo); recharge.setPayTime(new DateTime()); recharge.setRechargeWay(paymentMethod); //执行保存操作 this.updateById(recharge); //增加预存款余额 memberWalletService.increase(new MemberWalletUpdateDTO(recharge.getRechargeMoney(), recharge.getMemberId(), "会员余额充值,充值单号为:" + recharge.getRechargeSn(), DepositServiceTypeEnum.WALLET_RECHARGE.name())); } } @Override public Recharge getRecharge(String sn) { Recharge recharge = this.getOne(new QueryWrapper().eq("recharge_sn", sn)); if (recharge != null) { return recharge; } throw new ServiceException(ResultCode.ORDER_NOT_EXIST); } @Override public void rechargeOrderCancel(String sn) { Recharge recharge = this.getOne(new QueryWrapper().eq("recharge_sn", sn)); if (recharge != null) { recharge.setPayStatus(PayStatusEnum.CANCEL.name()); this.updateById(recharge); } } }