云
5 天以前 d0cf2cb2c352bdeb146aad2bb57ba7d39cef3bbd
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
package cn.iocoder.yudao.module.ums.service.member;
 
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import cn.iocoder.yudao.module.system.service.auth.WxcpPasswordSetupGrant;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import cn.iocoder.yudao.module.ums.dal.dataobject.member.UmsMemberDO;
import cn.iocoder.yudao.module.ums.dal.mysql.member.UmsMemberMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.ums.enums.ErrorCodeConstants.*;
 
@Service
public class WxcpInitialPasswordService {
    @Resource private UmsMemberMapper memberMapper;
    @Resource private AdminUserService userService;
    @Resource private WxcpPasswordSetupGrant grant;
 
    @Transactional(rollbackFor = Exception.class)
    public String setPassword(Long userId, String token, String password) {
        if (!grant.valid(token, userId)) throw exception(MEMBER_PASSWORD_SETUP_EXPIRED);
        UmsMemberDO member = memberMapper.selectByUserId(userId);
        if (member == null || !Boolean.TRUE.equals(member.getPasswordSetupRequired())) {
            throw exception(MEMBER_PASSWORD_SETUP_NOT_REQUIRED);
        }
        int changed = memberMapper.update(null, new LambdaUpdateWrapper<UmsMemberDO>()
                .eq(UmsMemberDO::getId, member.getId())
                .eq(UmsMemberDO::getUserId, userId)
                .eq(UmsMemberDO::getPasswordSetupRequired, true)
                .set(UmsMemberDO::getPasswordSetupRequired, false));
        if (changed != 1) throw exception(MEMBER_PASSWORD_SETUP_NOT_REQUIRED);
        userService.updateUserPassword(userId, password);
        String username = userService.getUser(userId).getUsername();
        grant.revoke(token);
        return username;
    }
}