xiaoyong931011
2023-03-10 417842b77970a8647945cff4ada68f3707f555e5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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.conversion.MallOrderInfoConversion;
import cc.mrbird.febs.mall.dto.ApiMallScoreSignRecordDto;
import cc.mrbird.febs.mall.dto.ScoreSettingDto;
import cc.mrbird.febs.mall.entity.*;
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.ApiMallScoreSignRecordVo;
import cc.mrbird.febs.mall.vo.ScoreSignVo;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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;
import java.util.List;
 
/**
 * @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());
 
        ScoreSignVo scoreSign = new ScoreSignVo();
        scoreSign.setMineScore(wallet.getPrizeScore().intValue());
 
        DataDictionaryCustom signScpreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.SIGN_SCORE.getType(), DataDictionaryEnum.SIGN_SCORE.getCode());
        if (signScpreDic != null) {
            scoreSign.setSetting(Integer.parseInt(signScpreDic.getValue()));
        }
        return scoreSign;
    }
 
    @Override
    public MallScoreSignRecord judgeScoreIsContinuity(MallScoreSignRecord mallScoreSignRecord) {
        if (mallScoreSignRecord.getSignTime() == null) {
            return mallScoreSignRecord;
        }
 
        // 若最新签到日期,与当天相差大于一天,则更新数据库(避免定时器更新失败)
        if (DateUtil.betweenDay(mallScoreSignRecord.getSignTime(), new Date(), true) > 1 || mallScoreSignRecord.getTotalCnt() == 7) {
            mallScoreSignRecord.setTotalCnt(0);
            mallScoreSignRecordMapper.updateById(mallScoreSignRecord);
        }
        return mallScoreSignRecord;
    }
 
    @Override
    public List<ApiMallScoreSignRecordVo> findMallScoreSignRecordList(ApiMallScoreSignRecordDto apiMallScoreSignRecordDto) {
 
        MallMember member = LoginUserUtil.getLoginUser();
        IPage<ApiMallScoreSignRecordVo> page = new Page<>(apiMallScoreSignRecordDto.getPageNum(), apiMallScoreSignRecordDto.getPageSize());
        apiMallScoreSignRecordDto.setMemberId(member.getId());
        IPage<ApiMallScoreSignRecordVo> apiMallScoreSignRecordVos = mallScoreSignRecordMapper.selectApiOrderListInPage(page, apiMallScoreSignRecordDto);
        return apiMallScoreSignRecordVos.getRecords();
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void sign() {
        MallMember member = LoginUserUtil.getLoginUser();
 
        DataDictionaryCustom signScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.SIGN_SCORE.getType(),
                DataDictionaryEnum.SIGN_SCORE.getCode());
        if (signScoreDic == null) {
            throw new FebsException("签到活动未开启");
        }
 
        MallScoreSignRecord mallScoreSignRecord = mallScoreSignRecordMapper.selectRecentSignRecord(member.getId());
        if (mallScoreSignRecord == null) {
            mallScoreSignRecord = new MallScoreSignRecord();
        }
 
        if (mallScoreSignRecord.getSignTime() != null && DateUtil.betweenDay(mallScoreSignRecord.getSignTime(), new Date(), true) == 0) {
            throw new FebsException("今日已签到");
        }
 
        Integer signScore = Integer.parseInt(signScoreDic.getValue());
        mallScoreSignRecord.setMemberId(member.getId());
        mallScoreSignRecord.setTotalCnt(signScore);
        mallScoreSignRecord.setSignTime(new Date());
        mallScoreSignRecord.setScore(signScore);
        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());
    }
}