From f955449bf78c8704290b48612218a66e9a7b9eed Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期二, 30 一月 2024 14:29:41 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/controller/BaseController.java            |   32 ++++++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/controller/param/UpdatePasswordParam.java |   16 ++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/entity/Menu.java                          |    5 +
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java                              |   33 ++++++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/controller/AuthController.java            |   66 +++++++++++++++-
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/annotation/OperationLog.java           |   41 ++++++++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/impl/UserServiceImpl.java         |   10 ++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/UserService.java                  |    2 
 8 files changed, 200 insertions(+), 5 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/annotation/OperationLog.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/annotation/OperationLog.java
new file mode 100644
index 0000000..5069bb0
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/annotation/OperationLog.java
@@ -0,0 +1,41 @@
+package com.zy.asrs.wcs.common.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 鎿嶄綔鏃ュ織璁板綍娉ㄨВ
+ *
+ * @author vincent
+ * @since 2020-03-21 17:03:08
+ */
+@Documented
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface OperationLog {
+
+    /**
+     * 鎿嶄綔鍔熻兘
+     */
+    String value() default "";
+
+    /**
+     * 鎿嶄綔妯″潡
+     */
+    String module() default "";
+
+    /**
+     * 澶囨敞
+     */
+    String comments() default "";
+
+    /**
+     * 鏄惁璁板綍璇锋眰鍙傛暟
+     */
+    boolean param() default true;
+
+    /**
+     * 鏄惁璁板綍杩斿洖缁撴灉
+     */
+    boolean result() default true;
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/controller/AuthController.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/controller/AuthController.java
index cac933e..92e3bbd 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/controller/AuthController.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/controller/AuthController.java
@@ -1,23 +1,27 @@
 package com.zy.asrs.wcs.sys.controller;
 
-import com.zy.asrs.common.web.BaseController;
+import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.common.R;
+import com.zy.asrs.wcs.common.annotation.OperationLog;
 import com.zy.asrs.wcs.common.config.ConfigProperties;
 import com.zy.asrs.wcs.common.security.JwtSubject;
 import com.zy.asrs.wcs.sys.controller.param.LoginParam;
+import com.zy.asrs.wcs.sys.controller.param.UpdatePasswordParam;
 import com.zy.asrs.wcs.sys.controller.result.LoginResult;
+import com.zy.asrs.wcs.sys.entity.Menu;
 import com.zy.asrs.wcs.sys.entity.User;
 import com.zy.asrs.wcs.sys.entity.UserLogin;
+import com.zy.asrs.wcs.sys.service.RoleMenuService;
 import com.zy.asrs.wcs.sys.service.UserLoginService;
 import com.zy.asrs.wcs.sys.service.UserService;
 import com.zy.asrs.wcs.utils.JwtUtil;
-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 com.zy.asrs.wcs.utils.Utils;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 /**
  * 璁よ瘉鎺у埗鍣�
@@ -34,6 +38,8 @@
     private UserService userService;
     @Resource
     private UserLoginService userLoginService;
+    @Resource
+    private RoleMenuService roleMenuService;
 
     @PostMapping("/login")
     public R login(@RequestBody LoginParam param, HttpServletRequest request) {
@@ -55,5 +61,55 @@
         return R.ok("鐧诲綍鎴愬姛").add(new LoginResult(accessToken, user));
     }
 
+    @GetMapping("/auth/user")
+    public R userInfo() {
+        return R.ok(userService.getByIdRel(getLoginUserId()));
+    }
+
+    @GetMapping("/auth/menu")
+    public R userMenu() {
+        List<Menu> menus = roleMenuService.listMenuByUserId(getLoginUserId(), Menu.TYPE_MENU);
+        return R.ok().add(Utils.toTreeData(menus, 0, Menu::getParentId, Menu::getId, Menu::setChildren));
+    }
+
+    @PreAuthorize("hasAuthority('sys:auth:user')")
+    @OperationLog
+    @PutMapping("/auth/user")
+    public R updateInfo(@RequestBody User user) {
+        user.setId(getLoginUserId());
+        // 涓嶈兘淇敼鐨勫瓧娈�
+        user.setUsername(null);
+        user.setPassword(null);
+        user.setEmailVerified(null);
+        user.setHostId(null);
+        user.setStatus(null);
+        if (userService.updateById(user)) {
+            return R.ok().add(userService.getByIdRel(user.getId()));
+        }
+        return R.error("淇濆瓨澶辫触");
+    }
+
+    @PreAuthorize("hasAuthority('sys:auth:password')")
+    @OperationLog
+    @PutMapping("/auth/password")
+    public R updatePassword(@RequestBody UpdatePasswordParam param) {
+        if (Cools.isEmpty(param.getOldPassword(), param.getPassword())) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖");
+        }
+        Long userId = getLoginUserId();
+        if (userId == null) {
+            return R.error("鏈櫥褰�");
+        }
+        if (!userService.comparePassword(userService.getById(userId).getPassword(), param.getOldPassword())) {
+            return R.error("鍘熷瘑鐮佽緭鍏ヤ笉姝g‘");
+        }
+        User user = new User();
+        user.setId(userId);
+        user.setPassword(userService.encodePassword(param.getPassword()));
+        if (userService.updateById(user)) {
+            return R.ok("淇敼鎴愬姛");
+        }
+        return R.error("淇敼澶辫触");
+    }
 
 }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/controller/BaseController.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/controller/BaseController.java
new file mode 100644
index 0000000..4bbfd32
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/controller/BaseController.java
@@ -0,0 +1,32 @@
+package com.zy.asrs.wcs.sys.controller;
+
+import com.zy.asrs.wcs.sys.entity.User;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+
+/**
+ * Created by vincent on 1/30/2024
+ */
+public class BaseController {
+
+    public User getLoginUser() {
+        try {
+            Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+            if (authentication != null) {
+                Object object = authentication.getPrincipal();
+                if (object instanceof User) {
+                    return (User) object;
+                }
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
+        return null;
+    }
+
+    public Long getLoginUserId() {
+        User loginUser = getLoginUser();
+        return loginUser == null ? null : loginUser.getId();
+    }
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/controller/param/UpdatePasswordParam.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/controller/param/UpdatePasswordParam.java
new file mode 100644
index 0000000..4931a0f
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/controller/param/UpdatePasswordParam.java
@@ -0,0 +1,16 @@
+package com.zy.asrs.wcs.sys.controller.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class UpdatePasswordParam implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private String oldPassword;
+
+    private String password;
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/entity/Menu.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/entity/Menu.java
index 7b014d1..f312f35 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/entity/Menu.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/entity/Menu.java
@@ -1,6 +1,7 @@
 package com.zy.asrs.wcs.sys.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.zy.asrs.framework.common.Cools;
@@ -15,6 +16,7 @@
 import java.io.Serializable;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.List;
 
 @Data
 @TableName("sys_menu")
@@ -160,6 +162,9 @@
     @ApiModelProperty(value= "澶囨敞")
     private String memo;
 
+    @TableField(exist = false)
+    private List<Menu> children;
+
     public Menu() {}
 
     public Menu(String name,Long parentId,String parentName,String path,String pathName,String route,String brief,String code,Integer type,String authority,String icon,Integer sort,String meta,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) {
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/UserService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/UserService.java
index b4b2a55..fe72fd9 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/UserService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/UserService.java
@@ -7,6 +7,8 @@
 
     User getByUsername(String username, Long hostId);
 
+    User getByIdRel(Long userId);
+
     boolean comparePassword(String dbPassword, String inputPassword);
 
     String encodePassword(String password);
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/impl/UserServiceImpl.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/impl/UserServiceImpl.java
index af82439..81953c4 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/impl/UserServiceImpl.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/sys/service/impl/UserServiceImpl.java
@@ -36,6 +36,16 @@
     }
 
     @Override
+    public User getByIdRel(Long userId) {
+        User user = this.getById(userId);
+        if (user != null) {
+            user.setRoles(userRoleService.listByUserId(user.getId()));
+            user.setAuthorities(roleMenuService.listMenuByUserId(user.getId(), null));
+        }
+        return user;
+    }
+
+    @Override
     public boolean comparePassword(String dbPassword, String inputPassword) {
         return bCryptPasswordEncoder.matches(inputPassword, dbPassword);
     }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java
index 9db68ff..5c21a4f 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/utils/Utils.java
@@ -3,7 +3,11 @@
 
 import com.zy.asrs.framework.common.Cools;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Optional;
+import java.util.function.BiConsumer;
+import java.util.function.Function;
 
 /**
  * Created by vincent on 2023/3/14
@@ -11,6 +15,35 @@
 public class Utils {
 
     /**
+     * List杞负鏍戝舰缁撴瀯
+     *
+     * @param data           List
+     * @param parentId       椤剁骇鐨刾arentId
+     * @param parentIdMapper 鑾峰彇parentId鐨凢unction
+     * @param idMapper       鑾峰彇id鐨凢unction
+     * @param consumer       璧嬪�糲hildren鐨凜onsumer
+     * @param <T>            鏁版嵁鐨勭被鍨�
+     * @param <R>            parentId鐨勭被鍨�
+     * @return List<T>
+     */
+    public static <T, R> List<T> toTreeData(List<T> data, R parentId,
+                                            Function<? super T, ? extends R> parentIdMapper,
+                                            Function<? super T, ? extends R> idMapper,
+                                            BiConsumer<T, List<T>> consumer) {
+        List<T> result = new ArrayList<>();
+        for (T d : data) {
+            R dParentId = parentIdMapper.apply(d);
+            if (parentId.equals(dParentId)) {
+                R dId = idMapper.apply(d);
+                List<T> children = toTreeData(data, dId, parentIdMapper, idMapper, consumer);
+                consumer.accept(d, children);
+                result.add(d);
+            }
+        }
+        return result;
+    }
+
+    /**
      * 鏁扮粍鍊掑簭
      * @param bytes
      * @param <T>

--
Gitblit v1.9.1