1
luodangjia
2025-01-22 3eb56cab8a5a453ac5e70b6e36618dde32431326
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
142
143
144
145
146
147
148
package com.ruoyi.company.controller.front;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.constant.CacheConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.CaptchaException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.annotation.InnerAuth;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.company.api.domain.Company;
import com.ruoyi.company.api.domain.User;
import com.ruoyi.company.api.domain.dto.MgtCompanyDTO;
import com.ruoyi.company.api.model.RegisterUser;
import com.ruoyi.company.api.model.UpdatePassword;
import com.ruoyi.company.api.model.UpdatePhone;
import com.ruoyi.company.api.model.UserDetail;
import com.ruoyi.company.service.CompanyService;
import com.ruoyi.company.service.UserService;
import com.ruoyi.system.api.model.AppUser;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import lombok.experimental.StandardException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
 
import java.time.LocalDateTime;
 
@RestController
@RequestMapping("/front/user")
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
public class UserController {
    private final UserService userService;
    private final CompanyService companyService;
    private final RedisService redisService;
 
    @PostMapping("/register")
    public R register(@RequestBody MgtCompanyDTO mgtCompanyDTO) {
        companyService.saveCompany(mgtCompanyDTO);
        return R.ok();
    }
 
    @GetMapping("/getUserDetail")
    @Operation(summary = "获取用户详情",tags = {"企业端"})
    public R<UserDetail> getUserDetail() {
        AppUser appLoginUser = SecurityUtils.getAppLoginUser();
        User user = userService.getById(appLoginUser.getUserId());
        Company company = companyService.getOne(new LambdaQueryWrapper<Company>()
                .eq(Company::getUserId, user.getUserId()));
        UserDetail userDetail = new UserDetail();
        BeanUtils.copyProperties(user, userDetail);
        BeanUtils.copyProperties(company, userDetail);
        userDetail.setRegisterTime(user.getCreateTime());
        return R.ok(userDetail);
    }
 
    @GetMapping("/getUserByAccountName")
    @InnerAuth
    public R<User> getUserByAccountName(String accountName) {
        return R.ok(userService.getOne(new LambdaQueryWrapper<User>()
                .eq(User::getAccountName,accountName)));
    }
 
    @GetMapping("/getUserByPhone")
    @InnerAuth
    public R<User> getUserByPhone(String phone){
        return R.ok(userService.getOne(new LambdaQueryWrapper<User>()
        .eq(User::getPhone,phone)));
    }
 
    @PutMapping("/updateUser")
    @InnerAuth
    public R<Void> updateUser(@RequestBody User user){
        user.setUpdateTime(LocalDateTime.now());
        userService.updateById(user);
        return R.ok();
    }
 
    /**
     * 编辑联系人信息
     */
    @PutMapping("/updateUserDetail")
    @Operation(summary = "编辑联系人信息",tags = {"企业端"})
    public R<Void> updateUserDetail(@RequestBody UserDetail userDetail) {
        AppUser appLoginUser = SecurityUtils.getAppLoginUser();
        userDetail.setUserId(appLoginUser.getUserId());
        User user = userService.getById(appLoginUser.getUserId());
        BeanUtils.copyProperties(userDetail, user);
        userService.updateById(user);
        return R.ok();
    }
 
    /**
     * 修改手机号
     */
    @PutMapping("/updatePhone")
    @Operation(summary = "修改手机号",tags = {"企业端"})
    public R<Void> updatePhone(@RequestBody UpdatePhone updatePhone) {
        AppUser appLoginUser = SecurityUtils.getAppLoginUser();
        User user = userService.getById(appLoginUser.getUserId());
        if (!user.getPhone().equals(updatePhone.getOldPhone())) {
            return R.fail("旧手机号错误");
        }
        String verifyKey = CacheConstants.PHONE_CODE_KEY + StringUtils.nvl(updatePhone.getNewPhone(), "");
        String captcha = redisService.getCacheObject(verifyKey);
        String[] split = captcha.split(":");
        long l = Long.parseLong(split[2]);
        long l1 = System.currentTimeMillis();
        // 判断是否大于两分钟
        if (l1 - l > 2 * 60 * 1000) {
            throw new CaptchaException("验证码已失效");
        }
        if (captcha == null) {
            throw new CaptchaException("验证码错误");
        }
        if (!updatePhone.getCode().equalsIgnoreCase(captcha)) {
            throw new CaptchaException("验证码错误");
        }
 
        if (!SecurityUtils.matchesPassword(updatePhone.getPassword(), user.getPassword())) {
            return R.fail("密码错误");
        }
        user.setPhone(updatePhone.getNewPhone());
        userService.updateById(user);
        return R.ok();
    }
 
    /**
     * 修改密码
     */
    @PutMapping("/updatePassword")
    @Operation(summary = "修改密码",tags = {"企业端"})
    public R<Void> updatePassword(@RequestBody UpdatePassword updatePassword) {
        AppUser appLoginUser = SecurityUtils.getAppLoginUser();
        User user = userService.getById(appLoginUser.getUserId());
        if (!SecurityUtils.matchesPassword(updatePassword.getOldPassword(), user.getPassword())) {
            return R.fail("旧密码错误");
        }
        if (!updatePassword.getNewPassword().equals(updatePassword.getConfirmPassword())){
            return R.fail("两次密码不一致");
        }
        user.setPassword(SecurityUtils.encryptPassword(updatePassword.getNewPassword()));
        userService.updateById(user);
        return R.ok();
    }
}