package cn.wisenergy.service.app.impl; import cn.wisenergy.common.utils.DateUtil; import cn.wisenergy.common.utils.R; import cn.wisenergy.mapper.AccountMapper; import cn.wisenergy.mapper.LastAccountMapper; import cn.wisenergy.mapper.TradeRecordMapper; import cn.wisenergy.model.app.AccountInfo; import cn.wisenergy.model.app.LastMonthAccount; import cn.wisenergy.model.app.TradeRecord; import cn.wisenergy.model.enums.TradeRecordEnum; import cn.wisenergy.model.vo.*; import cn.wisenergy.service.app.WalletService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** * @author 86187 */ @Service @Slf4j public class WalletServiceImpl implements WalletService { private static final String PATTERN = "yyyy-MM"; @Autowired private AccountMapper accountMapper; @Autowired private TradeRecordMapper tradeRecordMapper; @Autowired private LastAccountMapper lastAccountMapper; @Override public R<MoneyPackageVo> getMoneyPackage(String userId) { log.info("shop-mall[]WalletServiceImpl[]getMoneyPackage[]input.param.userId:" + userId); if (StringUtils.isBlank(userId)) { return R.error("入参为空!"); } Date date = new Date(); String yearMonth = DateUtil.convertDateToStr(date, PATTERN); //1、获取用户账户信息 AccountInfo accountInfo = accountMapper.getByUserIdAndTime(userId, yearMonth); if (null == accountInfo) { return R.error("用户账户信息不存在!"); } MoneyPackageVo moneyPackageVo = new MoneyPackageVo(); moneyPackageVo.setUserId(accountInfo.getUserId()); moneyPackageVo.setMoneyIncome(accountInfo.getEarningsMonth()); moneyPackageVo.setTotalIncome(accountInfo.getEarningsTotal()); moneyPackageVo.setCurrentMoneyCan(accountInfo.getExtractMoney()); return R.ok(moneyPackageVo); } @Override public R<WithdrawalAmountVo> getWithdrawalAmount(String userId) { log.info("shop-mall[]WalletServiceImpl[]getWithdrawalAmount[]input.param.userId:" + userId); if (StringUtils.isBlank(userId)) { return R.error("入参为空!"); } Date date = new Date(); String yearMonth = DateUtil.convertDateToStr(date, PATTERN); WithdrawalAmountVo withdrawalAmountVo = new WithdrawalAmountVo(); withdrawalAmountVo.setUserId(userId); withdrawalAmountVo.setWithdrawRule("这是一条规则!"); //1、获取用户账户信息 AccountInfo accountInfo = accountMapper.getByUserIdAndTime(userId, yearMonth); if (null == accountInfo) { withdrawalAmountVo.setCurrentMoneyCan(new BigDecimal(0)); } else { withdrawalAmountVo.setCurrentMoneyCan(accountInfo.getExtractMoney()); } //2、 获取上月未提现 Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); cal.add(Calendar.MONTH, -1); Date lastDate = cal.getTime(); String lastMonthTime = DateUtil.convertDateToStr(lastDate, PATTERN); LastMonthAccount lastMonthAccount = lastAccountMapper.getByUserIdAndTime(userId, lastMonthTime); if (null == lastMonthAccount) { withdrawalAmountVo.setLastMoneyNot(new BigDecimal(0)); } else { withdrawalAmountVo.setLastMoneyNot(lastMonthAccount.getExtractMoney()); } return R.ok(withdrawalAmountVo); } @Override public R<List<AccumulatedIncomeVo>> showIncomeRecord(String userId) { log.info("shop-mall[]WalletServiceImpl[]showIncomeRecord[]input.param.userId:" + userId); if (StringUtils.isBlank(userId)) { return R.error("入参为空!"); } //获取包括本月在内的六个月的收益 List<AccumulatedIncomeVo> list = tradeRecordMapper.getSixMonthIncome(userId); return R.ok(list); } @Override public R<MoneyPackageDetailVo> queryIncomeDetail(String userId) { log.info("shop-mall[]WalletServiceImpl[]queryIncomeDetail[]input.param.userId:" + userId); if (StringUtils.isBlank(userId)) { return R.error("入参为空!"); } Date date = new Date(); String yearMonth = DateUtil.convertDateToStr(date, PATTERN); //获取当月账户信息 AccountInfo accountInfo = accountMapper.getByUserIdAndTime(userId, yearMonth); if (null == accountInfo) { return R.error("账户信息为空!"); } MoneyPackageDetailVo detailVo = new MoneyPackageDetailVo(); detailVo.setUserId(userId); //获取培育奖信息 BigDecimal earningsMonth = new BigDecimal(0); TradeRecord trade = tradeRecordMapper.getByUserIdAndTypeAndStatus(userId, TradeRecordEnum.CULTIVATING_PRIZE.getCode(), new Date(), 0); if (null != trade) { earningsMonth = accountInfo.getEarningsMonth().add(trade.getMoney()); } else { earningsMonth = accountInfo.getEarningsMonth(); } detailVo.setTotalIncome(earningsMonth); //获取本月交易记录 List<TradeRecord> list = getTradeRecordList(userId); List<IncomeDetailVo> incomeDetailVos = new ArrayList<>(); for (TradeRecord tradeRecord : list) { IncomeDetailVo incomeDetailVo = new IncomeDetailVo(); String typeName = TradeRecordEnum.getByCode(tradeRecord.getTradeType()); incomeDetailVo.setTypeName(typeName); incomeDetailVo.setMoney(tradeRecord.getMoney()); incomeDetailVo.setIncomeTime(tradeRecord.getCreateTime()); incomeDetailVos.add(incomeDetailVo); } detailVo.setList(incomeDetailVos); return R.ok(detailVo); } @Override public R<List<WithdrawalRecordVo>> getWithdrawalRecord(String userId, String yearMonth) { log.info("shop-mall[]WalletServiceImpl[]queryIncomeDetail[]input.param.yearMonth:" + yearMonth); if (StringUtils.isBlank(yearMonth)) { return R.error("入参为空!"); } Date date = DateUtil.convertStrToDate(yearMonth, PATTERN); List<WithdrawalRecordVo> list = tradeRecordMapper.getWithdrawalRecord(userId, date); return R.ok(list); } private List<TradeRecord> getTradeRecordList(String userId) { List<TradeRecord> list = new ArrayList<>(); Date date = new Date(); //获取返佣、月度肥料、培育奖、最大进步奖、运营中心补贴类型交易记录 //获取返佣本月交易记录 List<TradeRecord> orderRebate = tradeRecordMapper.getRebateList(userId, date); if (!CollectionUtils.isEmpty(orderRebate)) { list.addAll(orderRebate); } //获取月度肥料本月交易记录 TradeRecord monthFertilizer = tradeRecordMapper.getByUserIdAndType(userId, TradeRecordEnum.MONTHLY_FERTILIZER.getCode(), date); if (null != monthFertilizer) { list.add(monthFertilizer); } //获取培育奖本月交易记录 TradeRecord trainRecord = tradeRecordMapper.getByUserIdAndType(userId, TradeRecordEnum.CULTIVATING_PRIZE.getCode(), date); if (null != trainRecord) { list.add(trainRecord); } //获取最大进步奖本月交易记录 TradeRecord prizeRecord = tradeRecordMapper.getByUserIdAndType(userId, TradeRecordEnum.PROGRESS_PRIZE.getCode(), date); if (null != prizeRecord) { list.add(prizeRecord); } //获取运营中心补贴本月交易记录 TradeRecord centerRecord = tradeRecordMapper.getByUserIdAndType(userId, TradeRecordEnum.RUN_CENTER_SUBSIDY.getCode(), date); if (null != centerRecord) { list.add(centerRecord); } return list; } }