孙永军 1 vuosi sitten
vanhempi
commit
9d3ff1495e

+ 3 - 0
src/main/java/com/smcic/api/epg/controller/EpgController.java

@@ -8,6 +8,7 @@ import com.smcic.api.epg.service.impl.ChannelService;
 import com.smcic.api.epg.service.impl.EpgDisableConfigService;
 import com.smcic.api.epg.service.impl.KeywordDisableConfigService;
 import com.smcic.api.epg.service.impl.ProgramService;
+import com.smcic.core.auth.LoginRequired;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.web.bind.annotation.*;
 
@@ -52,6 +53,7 @@ public class EpgController {
     }
 
     @PostMapping("disable")
+    @LoginRequired
     public void disable(@RequestBody DisableDTO disableDTO){
         epgDisableConfigService.disable(disableDTO);
     }
@@ -72,6 +74,7 @@ public class EpgController {
     }
 
     @PostMapping("update")
+    @LoginRequired
     public void update(@RequestBody DisableDTO disableDTO){
         epgDisableConfigService.update(disableDTO);
     }

+ 3 - 0
src/main/java/com/smcic/api/epg/controller/KeywordController.java

@@ -3,6 +3,7 @@ package com.smcic.api.epg.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.smcic.api.epg.entity.KeywordDisableConfig;
 import com.smcic.api.epg.service.impl.KeywordDisableConfigService;
+import com.smcic.core.auth.LoginRequired;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.web.bind.annotation.*;
 
@@ -24,11 +25,13 @@ public class KeywordController {
     }
 
     @PostMapping("disable")
+    @LoginRequired
     public void disable(@RequestBody KeywordDisableConfig keywordDisableConfig){
         keywordDisableConfigService.disable(keywordDisableConfig);
     }
 
     @PostMapping("update")
+    @LoginRequired
     public void update(@RequestBody KeywordDisableConfig keywordDisableConfig){
         keywordDisableConfigService.update(keywordDisableConfig);
     }

+ 62 - 0
src/main/java/com/smcic/api/user/controller/UserController.java

@@ -0,0 +1,62 @@
+package com.smcic.api.user.controller;
+
+import com.smcic.api.user.dto.LoginDto;
+import com.smcic.api.user.dto.PwdResetDTO;
+import com.smcic.api.user.dto.TokenDto;
+import com.smcic.api.user.dto.UserDTO;
+import com.smcic.api.user.entity.User;
+import com.smcic.api.user.service.impl.UserServiceImpl;
+import com.smcic.core.auth.LoginRequired;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author zyx
+ * @since 2023-02-15
+ */
+@RestController
+@RequestMapping("/user")
+public class UserController {
+
+    @Autowired
+    private UserServiceImpl userService;
+
+    @PostMapping("/login")
+    public TokenDto login(@RequestBody @Valid LoginDto dto) {
+        return userService.login(dto);
+    }
+
+    @RequestMapping("/info")
+    @LoginRequired
+    public User info() {
+        return userService.getLoginUser();
+    }
+
+    @RequestMapping("/logout")
+    @LoginRequired
+    public void logout() {
+        userService.logout();
+    }
+
+    @RequestMapping("pwd/reset")
+    @LoginRequired
+    public void reset(@RequestBody PwdResetDTO pwdResetDTO){
+        userService.reset(pwdResetDTO);
+    }
+
+    @RequestMapping("update")
+    @LoginRequired
+    public void update(@RequestBody UserDTO userDTO){
+        userService.updateRole(userDTO);
+    }
+
+}

+ 9 - 0
src/main/java/com/smcic/api/user/dto/CodeVerifyDto.java

@@ -0,0 +1,9 @@
+package com.smcic.api.user.dto;
+
+import lombok.Data;
+
+@Data
+public class CodeVerifyDto {
+    private String phone;
+    private String code;
+}

+ 15 - 0
src/main/java/com/smcic/api/user/dto/LoginDto.java

@@ -0,0 +1,15 @@
+package com.smcic.api.user.dto;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class LoginDto {
+
+    @NotBlank(message = "用户名不能为空")
+    private String loginName;
+    @NotBlank(message = "密码不能为空")
+    private String loginPassword;
+
+}

+ 11 - 0
src/main/java/com/smcic/api/user/dto/PwdResetDTO.java

@@ -0,0 +1,11 @@
+package com.smcic.api.user.dto;
+
+import lombok.Data;
+
+@Data
+public class PwdResetDTO {
+
+    private String oldPwd;
+
+    private String pwd;
+}

+ 16 - 0
src/main/java/com/smcic/api/user/dto/RoleDTO.java

@@ -0,0 +1,16 @@
+package com.smcic.api.user.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class RoleDTO {
+
+    private Integer id;
+
+    private String name;
+
+    private List<String> menuId;
+
+}

+ 8 - 0
src/main/java/com/smcic/api/user/dto/TokenDto.java

@@ -0,0 +1,8 @@
+package com.smcic.api.user.dto;
+
+import lombok.Data;
+
+@Data
+public class TokenDto {
+    private String token;
+}

+ 20 - 0
src/main/java/com/smcic/api/user/dto/UserDTO.java

@@ -0,0 +1,20 @@
+package com.smcic.api.user.dto;
+
+import lombok.Data;
+
+@Data
+public class UserDTO {
+
+    private Long id;
+
+    private String name;
+
+    private String loginPassword;
+
+    private Integer roleId;
+
+    private Integer page = 1;
+
+    private Integer pageSize = 5;
+
+}

+ 12 - 0
src/main/java/com/smcic/api/user/dto/UserStoreDTO.java

@@ -0,0 +1,12 @@
+package com.smcic.api.user.dto;
+
+import lombok.Data;
+
+@Data
+public class UserStoreDTO {
+    private String loginName;
+
+    private String loginPassword;
+
+    private Integer roleId;
+}

+ 50 - 0
src/main/java/com/smcic/api/user/entity/User.java

@@ -0,0 +1,50 @@
+package com.smcic.api.user.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author zyx
+ * @since 2023-02-15
+ */
+@Getter
+@Setter
+public class User implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private String loginName;
+
+    @JsonIgnore
+    private String loginPassword;
+    @JsonIgnore
+    private String encodePassword;
+
+    private Integer roleId;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime updateTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime logoutTime;
+
+    private String realName;
+
+}

+ 16 - 0
src/main/java/com/smcic/api/user/mapper/UserMapper.java

@@ -0,0 +1,16 @@
+package com.smcic.api.user.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.smcic.api.user.entity.User;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zyx
+ * @since 2023-02-15
+ */
+public interface UserMapper extends BaseMapper<User> {
+
+}

+ 16 - 0
src/main/java/com/smcic/api/user/service/IUserService.java

@@ -0,0 +1,16 @@
+package com.smcic.api.user.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.smcic.api.user.entity.User;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zyx
+ * @since 2023-02-15
+ */
+public interface IUserService extends IService<User> {
+
+}

+ 137 - 0
src/main/java/com/smcic/api/user/service/impl/UserServiceImpl.java

@@ -0,0 +1,137 @@
+package com.smcic.api.user.service.impl;
+
+import cn.hutool.crypto.SecureUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.smcic.api.user.dto.LoginDto;
+import com.smcic.api.user.dto.PwdResetDTO;
+import com.smcic.api.user.dto.TokenDto;
+import com.smcic.api.user.dto.UserDTO;
+import com.smcic.api.user.entity.User;
+import com.smcic.api.user.mapper.UserMapper;
+import com.smcic.api.user.service.IUserService;
+import com.smcic.core.advice.APIException;
+import com.smcic.core.auth.AESUtil;
+import com.smcic.core.auth.HttpContextUtil;
+import org.apache.http.util.TextUtils;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.Optional;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author zyx
+ * @since 2023-02-15
+ */
+@Service
+public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
+
+    public TokenDto login(LoginDto dto) {
+
+        Optional<User> optionalUser = lambdaQuery().eq(User::getLoginName, dto.getLoginName())
+                .eq(User::getLoginPassword, dto.getLoginPassword())
+                .oneOpt();
+
+        if (!optionalUser.isPresent()) {
+            throw new APIException("用户不存在");
+        }
+
+        Long id = optionalUser.get().getId();
+
+        String token = AESUtil.encryptHex(id.toString());
+        TokenDto tokenDto = new TokenDto();
+        tokenDto.setToken(token);
+        return tokenDto;
+
+    }
+
+    public User getLoginUser() {
+        Optional<String> token = HttpContextUtil.getToken();
+        if (!token.isPresent()) {
+            throw new APIException("获取token异常");
+        }
+        String userId = AESUtil.decryptStr(token.get());
+        User user = this.lambdaQuery().eq(User::getId, Long.parseLong(userId)).one();
+        if (user == null) {
+            throw new APIException("用户不存在");
+        }
+
+        return user;
+    }
+
+    public User getLoginUserByToken(String token) {
+        String userId = AESUtil.decryptStr(token);
+        User user = this.lambdaQuery().eq(User::getId, Long.parseLong(userId)).one();
+        if (user == null) {
+            throw new APIException("用户不存在");
+        }
+        return user;
+    }
+
+    public void createUser(String userName, String pwd) {
+        User user = new User();
+        user.setLoginName(userName);
+        user.setLoginPassword(SecureUtil.sha256(pwd));
+        user.setEncodePassword(AESUtil.encryptHex(pwd));
+        save(user);
+    }
+
+    public void createUser(String userName, String pwd, Integer roleId) {
+        User user = new User();
+        user.setLoginName(userName);
+        user.setLoginPassword(SecureUtil.sha256(pwd));
+        user.setEncodePassword(AESUtil.encryptHex(pwd));
+        user.setRoleId(roleId);
+        save(user);
+    }
+
+    public void logout(){
+        Optional<String> token = HttpContextUtil.getToken();
+        if (!token.isPresent()) {
+            throw new RuntimeException("获取token异常");
+        }
+        String userId = AESUtil.decryptStr(token.get());
+        User user = this.lambdaQuery().eq(User::getId, Long.parseLong(userId)).one();
+        if (user == null) {
+            throw new APIException("用户不存在");
+        }
+        user.setLogoutTime(LocalDateTime.now());
+        updateById(user);
+    }
+
+    public void reset(PwdResetDTO pwdResetDTO){
+        Optional<String> token = HttpContextUtil.getToken();
+
+        String uid = AESUtil.decryptStr(token.get());
+        User user = this.lambdaQuery().eq(User::getId, Long.parseLong(uid)).eq(User::getLoginPassword, pwdResetDTO.getOldPwd()).one();
+        if(null == user){
+            throw new APIException(40001, "原密码错误");
+        }
+
+        user.setLoginPassword(pwdResetDTO.getPwd());
+        user.setEncodePassword("密码已修改");
+        updateById(user);
+
+    }
+
+
+    public void updateRole(UserDTO userDTO){
+        User user = getById(userDTO.getId());
+        if(null == user){
+            throw new APIException(40001, "不存在的用户");
+        }
+
+        if(userDTO.getRoleId() != null && userDTO.getRoleId() > 0)
+            user.setRoleId(userDTO.getRoleId());
+
+        if(!TextUtils.isEmpty(userDTO.getLoginPassword())){
+            user.setLoginPassword(SecureUtil.sha256(userDTO.getLoginPassword()));
+            user.setEncodePassword(AESUtil.encryptHex(userDTO.getLoginPassword()));
+        }
+
+        updateById(user);
+    }
+}