Pu Zhibing
2025-03-27 e7a4c604b4703caf135ec3d360106e7cf028cc89
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
130
131
132
133
134
135
136
137
138
139
140
141
package com.ruoyi.account.controller;
 
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.account.api.model.BalanceChangeRecord;
import com.ruoyi.account.api.model.UserPoint;
import com.ruoyi.account.api.model.UserSignRecord;
import com.ruoyi.account.dto.SignBackRDto;
import com.ruoyi.account.service.AppUserService;
import com.ruoyi.account.service.BalanceChangeRecordService;
import com.ruoyi.account.service.UserPointService;
import com.ruoyi.account.service.UserSignRecordService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.other.api.domain.PointSetting;
import com.ruoyi.other.api.domain.VipSetting;
import com.ruoyi.other.api.feignClient.PointSettingClient;
import com.ruoyi.other.api.feignClient.SystemConfigClient;
import com.ruoyi.other.api.feignClient.VipGoodClient;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
 
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
 
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author luodangjia
 * @since 2024-11-21
 */
@RestController
@RequestMapping("/user-sign-record")
public class UserSignRecordController {
    @Resource
    private UserSignRecordService userSignRecordService;
    @Resource
    private AppUserService appUserService;
    @Resource
    private TokenService tokenService;
    @Resource
    private PointSettingClient pointSettingClient;
    @Resource
    private SystemConfigClient systemConfigClient;
    
    @Resource
    private UserPointService userPointService;
    @Resource
    private BalanceChangeRecordService balanceChangeRecordService;
    
    
    
    
    
    @ResponseBody
    @GetMapping("/sign")
    @ApiOperation(value = "签到", tags = {"小程序-签到"})
    public R<SignBackRDto> sign(){
        Long userId1 = tokenService.getLoginUserApplet().getUserid();
        UserSignRecord one = userSignRecordService.getOne(new LambdaQueryWrapper<UserSignRecord>().eq(UserSignRecord::getAppUserId, userId1)
                .eq(UserSignRecord::getDelFlag, 0).last(" and DATE_FORMAT(NOW(), '%Y-%m-%d') = DATE_FORMAT(create_time, '%Y-%m-%d')"));
        if(null != one){
            return R.fail("今天已经签过到了");
        }
        AppUser appUser = appUserService.getById(userId1);
        //获取当前用户的会员信息
        PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData();
        UserSignRecord userSignRecord = new UserSignRecord();
        userSignRecord.setAppUserId(userId1);
        userSignRecord.setCreateTime(LocalDateTime.now());
        if (pointSetting != null) {
            userSignRecord.setPoint(pointSetting.getSignPoint());
            int signPoint = pointSetting.getSignPoint();
            if(signPoint > 0){
                int signPoint1 = 0;
                if(1 == pointSetting.getWorkPointOpen()){
                    signPoint1 = new BigDecimal(signPoint).multiply(pointSetting.getWorkPoint().divide(new BigDecimal(100))).intValue();
                }
                Integer lavePoint = appUser.getLavePoint();
                appUser.setTotalPoint(appUser.getTotalPoint() + signPoint);
                appUser.setLavePoint(appUser.getLavePoint() + signPoint);
                appUser.setAvailablePoint(appUser.getAvailablePoint() + signPoint1);
                appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() + signPoint1);
                if(null != pointSetting && 1 == pointSetting.getWorkPointGift()){
                    appUser.setTransferablePoint(appUser.getTransferablePoint() + signPoint1);
                }
                appUser.setTotalSignPoint(appUser.getTotalSignPoint() + signPoint);
                appUserService.updateById(appUser);
    
                //添加积分变动记录
                UserPoint userPoint = new UserPoint();
                userPoint.setType(5);
                userPoint.setVariablePoint(signPoint);
                userPoint.setCreateTime(LocalDateTime.now());
                userPoint.setAppUserId(appUser.getId());
                userPoint.setChangeDirection(1);
                userPointService.save(userPoint);
                //变更等级
                appUserService.vipUpgrade(appUser.getId());
                
                R<BigDecimal> bigDecimalR = systemConfigClient.redPackegeSet();
                BigDecimal data = bigDecimalR.getData();
                if(data.compareTo(BigDecimal.ZERO) > 0){
                    userSignRecord.setRedAmount(data);
                    userSignRecord.setSignDay(LocalDate.now());
                    BigDecimal sum = appUser.getTotalRedPacketAmount().add(bigDecimalR.getData());
                    appUser.setTotalRedPacketAmount(sum);
                    BigDecimal sum2 = appUser.getBalance().add(bigDecimalR.getData());
                    appUser.setBalance(sum2);
                    appUserService.updateById(appUser);
                    // 增加一条余额明细
                    BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord();
                    balanceChangeRecord.setAppUserId(appUser.getId());
                    balanceChangeRecord.setVipId(appUser.getVipId());
                    balanceChangeRecord.setChangeType(3);
                    balanceChangeRecord.setChangeAmount(bigDecimalR.getData());
                    balanceChangeRecord.setDelFlag(0);
                    balanceChangeRecord.setCreateTime(LocalDateTime.now());
                    balanceChangeRecord.setChangeDirection(1);
                    balanceChangeRecordService.save(balanceChangeRecord);
                }
                userSignRecordService.save(userSignRecord);
                SignBackRDto signBackRDto = new SignBackRDto();
                signBackRDto.setPoint(userSignRecord.getPoint());
                signBackRDto.setRedAmount(userSignRecord.getRedAmount());
                return R.ok(signBackRDto);
            }
        }
        return R.ok();
    }
 
}