package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; import cc.mrbird.febs.common.enumerates.FlowTypeEnum; import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.mall.dto.ScoreSettingDto; import cc.mrbird.febs.mall.entity.DataDictionaryCustom; import cc.mrbird.febs.mall.entity.MallMember; import cc.mrbird.febs.mall.entity.MallMemberWallet; import cc.mrbird.febs.mall.entity.MallScoreSignRecord; import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; import cc.mrbird.febs.mall.mapper.MallMemberWalletMapper; import cc.mrbird.febs.mall.mapper.MallScoreSignRecordMapper; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.IMallMoneyFlowService; import cc.mrbird.febs.mall.service.IScoreService; import cc.mrbird.febs.mall.vo.ScoreSignVo; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.Date; /** * @author wzy * @date 2022-05-09 **/ @Slf4j @Service @RequiredArgsConstructor public class ScoreServiceImpl implements IScoreService { private final MallMemberWalletMapper mallMemberWalletMapper; private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final MallScoreSignRecordMapper mallScoreSignRecordMapper; private final IMallMoneyFlowService mallMoneyFlowService; private final IApiMallMemberWalletService walletService; @Override public ScoreSignVo scoreSign() { MallMember member = LoginUserUtil.getLoginUser(); MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(member.getId()); MallScoreSignRecord mallScoreSignRecord = mallScoreSignRecordMapper.selectRecentSignRecord(member.getId()); ScoreSignVo scoreSign = new ScoreSignVo(); scoreSign.setMineScore(wallet.getPrizeScore().intValue()); scoreSign.setHasSignDays(mallScoreSignRecord == null ? 0 : mallScoreSignRecord.getTotalCnt()); DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SCORE_SIGN_SETTING.getType(), DataDictionaryEnum.SCORE_SIGN_SETTING.getCode()); if (dic != null) { scoreSign.setSetting(JSONObject.parseObject(dic.getValue(), ScoreSettingDto.class)); } return scoreSign; } @Override @Transactional(rollbackFor = Exception.class) public void sign() { MallMember member = LoginUserUtil.getLoginUser(); DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SCORE_SIGN_SETTING.getType(), DataDictionaryEnum.SCORE_SIGN_SETTING.getCode()); if (dic == null) { throw new FebsException("暂未设置积分"); } MallScoreSignRecord mallScoreSignRecord = mallScoreSignRecordMapper.selectRecentSignRecord(member.getId()); if (mallScoreSignRecord == null) { mallScoreSignRecord = new MallScoreSignRecord(); } if (mallScoreSignRecord.getSignTime() != null && DateUtil.between(mallScoreSignRecord.getSignTime(), new Date(), DateUnit.DAY) == 0) { throw new FebsException("今天已签到"); } ScoreSettingDto scoreSetting = JSONObject.parseObject(dic.getValue(),ScoreSettingDto.class); int days = mallScoreSignRecord.getTotalCnt() == null ? 1 : mallScoreSignRecord.getTotalCnt() + 1; switch (days) { case 1: if (scoreSetting.getSignInOne() == null) { throw new FebsException("积分未设置"); } mallScoreSignRecord.setScore(scoreSetting.getSignInOne()); break; case 2: if (scoreSetting.getSignInTwo() == null) { throw new FebsException("积分未设置"); } mallScoreSignRecord.setScore(scoreSetting.getSignInTwo()); break; case 3: if (scoreSetting.getSignInThree() == null) { throw new FebsException("积分未设置"); } mallScoreSignRecord.setScore(scoreSetting.getSignInThree()); break; case 4: if (scoreSetting.getSignInFour() == null) { throw new FebsException("积分未设置"); } mallScoreSignRecord.setScore(scoreSetting.getSignInFour()); break; case 5: if (scoreSetting.getSignInFive() == null) { throw new FebsException("积分未设置"); } mallScoreSignRecord.setScore(scoreSetting.getSignInFive()); break; case 6: if (scoreSetting.getSignInSix() == null) { throw new FebsException("积分未设置"); } mallScoreSignRecord.setScore(scoreSetting.getSignInSix()); break; case 7: if (scoreSetting.getSignInSeven() == null) { throw new FebsException("积分未设置"); } mallScoreSignRecord.setScore(scoreSetting.getSignInSeven()); break; } mallScoreSignRecord.setMemberId(member.getId()); mallScoreSignRecord.setTotalCnt(days); mallScoreSignRecord.setSignTime(new Date()); mallScoreSignRecordMapper.insert(mallScoreSignRecord); BigDecimal amount = BigDecimal.valueOf(mallScoreSignRecord.getScore()); walletService.add(amount, member.getId(), "prizeScore"); mallMoneyFlowService.addMoneyFlow(member.getId(), amount, MoneyFlowTypeEnum.SCORE_SIGN.getValue(), null, FlowTypeEnum.PRIZE_SCORE.getValue()); } }