diff --git a/pom.xml b/pom.xml
index 075f83c..4f678a2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -70,6 +70,12 @@
xservice-cache-starter
2.0
+
+
+ org.mapstruct
+ mapstruct
+ 1.5.5.Final
+
\ No newline at end of file
diff --git a/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/user/UserAddRequest.java b/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/user/UserAddRequest.java
index e19d0be..5af33d2 100644
--- a/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/user/UserAddRequest.java
+++ b/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/user/UserAddRequest.java
@@ -1,4 +1,49 @@
package com.xiang.xservice.auth.api.dto.req.user;
-public class UserAddRequest {
+import com.xiang.xservice.basic.common.req.BaseRequest;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserAddRequest extends BaseRequest {
+
+ /**
+ * 用户名(昵称)
+ */
+ private String name;
+
+ /**
+ * 账号
+ */
+ private String username;
+
+ /**
+ * 密码
+ */
+ private String password;
+
+ /**
+ * 邮箱
+ */
+ private String email;
+
+ /**
+ * 手机号
+ */
+ private String phone;
+
+ /**
+ * 头像
+ */
+ private String avatar;
+
+ /**
+ * 状态(0:禁用, 1:启用)
+ */
+ private Integer status;
}
diff --git a/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/user/UserQueryRequest.java b/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/user/UserQueryRequest.java
index 54a8bcc..9b22297 100644
--- a/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/user/UserQueryRequest.java
+++ b/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/user/UserQueryRequest.java
@@ -1,4 +1,36 @@
package com.xiang.xservice.auth.api.dto.req.user;
-public class UserQueryRequest {
+import com.xiang.xservice.basic.common.req.BaseRequest;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserQueryRequest extends BaseRequest {
+ /**
+ * 用户名(昵称)
+ */
+ private String name;
+
+ /**
+ * 账号
+ */
+ private String username;
+
+ /**
+ * 邮箱
+ */
+ private String email;
+
+ /**
+ * 手机号
+ */
+ private String phone;
+
+ /**
+ * 状态(0:禁用, 1:启用)
+ */
+ private Integer status;
}
diff --git a/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/user/UserUpdateRequest.java b/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/user/UserUpdateRequest.java
index a2e9f2c..dcebbad 100644
--- a/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/user/UserUpdateRequest.java
+++ b/xs-api/src/main/java/com/xiang/xservice/auth/api/dto/req/user/UserUpdateRequest.java
@@ -1,4 +1,12 @@
package com.xiang.xservice.auth.api.dto.req.user;
-public class UserUpdateRequest {
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserUpdateRequest extends UserAddRequest {
+ private Long id;
}
diff --git a/xs-server/src/main/java/com/xiang/xservice/auth/server/controller/UserController.java b/xs-server/src/main/java/com/xiang/xservice/auth/server/controller/UserController.java
index 973e2d4..32e0ea3 100644
--- a/xs-server/src/main/java/com/xiang/xservice/auth/server/controller/UserController.java
+++ b/xs-server/src/main/java/com/xiang/xservice/auth/server/controller/UserController.java
@@ -1,19 +1,17 @@
package com.xiang.xservice.auth.server.controller;
-import com.google.common.collect.Lists;
+import com.alibaba.fastjson.JSON;
import com.xiang.xservice.auth.api.dto.req.user.UserAddRequest;
import com.xiang.xservice.auth.api.dto.req.user.UserDeptUpdateRequest;
import com.xiang.xservice.auth.api.dto.req.user.UserQueryRequest;
import com.xiang.xservice.auth.api.dto.req.user.UserRoleUpdateRequest;
import com.xiang.xservice.auth.api.dto.req.user.UserUpdateRequest;
import com.xiang.xservice.auth.api.dto.resp.UserResp;
-import com.xiang.xservice.auth.service.entity.XUser;
-import com.xiang.xservice.auth.service.enums.UserStatusEnum;
-import com.xiang.xservice.auth.service.repository.mapper.XUserMapper;
+import com.xiang.xservice.auth.service.service.XUserService;
import com.xiang.xservice.basic.common.resp.Result;
+import com.xiang.xservice.basic.exception.BusinessException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
@@ -25,80 +23,118 @@ import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
-import java.util.concurrent.CompletableFuture;
@Slf4j
@RestController
@RequiredArgsConstructor
public class UserController {
- private final XUserMapper userMapper;
- private final PasswordEncoder passwordEncoder;
+ private final XUserService userService;
@PostMapping("/private/user/list")
public Result getUserList(@RequestBody @Valid @NotNull(message = "请求参数不能为空") UserQueryRequest request) {
- return Result.success(new UserResp());
+ return Result.success(userService.getUserList(request));
}
@GetMapping("/private/user/info/{id}")
public Result getUserById(@PathVariable("id") Long id) {
- return Result.success(new UserResp());
+ return Result.success(userService.getUserInfo(id));
}
@PostMapping("/private/user/add")
public Result addUser(@RequestBody @Valid @NotNull(message = "请求参数不能为空") UserAddRequest request) {
- return Result.success(true);
+ try {
+ return Result.success(userService.addUser(request));
+ } catch (BusinessException e) {
+ log.error("用户新增异常,请求:{}", JSON.toJSONString(request), e);
+ return Result.error(e.getMessage());
+ } catch (Exception e) {
+ log.error("用户新增异常,请求:{}", JSON.toJSONString(request), e);
+ }
+ return Result.error();
}
@PostMapping("/private/user/update")
public Result updateUser(@RequestBody @Valid @NotNull(message = "请求参数不能为空") UserUpdateRequest request) {
- return Result.success(true);
+ try {
+ return Result.success(userService.updateUser(request));
+ } catch (BusinessException e) {
+ log.error("用户编辑异常,请求:{}", JSON.toJSONString(request), e);
+ return Result.error(e.getMessage());
+ } catch (Exception e) {
+ log.error("用户编辑异常,请求:{}", JSON.toJSONString(request), e);
+ }
+ return Result.error();
}
@PostMapping("/private/user/del")
public Result delUser(@RequestParam @Valid @NotEmpty(message = "请求参数不能为空") List ids) {
- return Result.success(true);
+ try {
+ return Result.success(userService.delUser(ids));
+ } catch (BusinessException e) {
+ log.error("用户删除异常,请求:{}", JSON.toJSONString(ids), e);
+ return Result.error(e.getMessage());
+ } catch (Exception e) {
+ log.error("用户删除异常,请求:{}", JSON.toJSONString(ids), e);
+ }
+ return Result.error();
}
@PostMapping("/private/user/setDept")
public Result setUserDept(@RequestBody @Valid @NotNull(message = "请求参数不能为空") UserDeptUpdateRequest request) {
- return Result.success(true);
+ try {
+ return Result.success(userService.setUserDept(request));
+ } catch (BusinessException e) {
+ log.error("用户设置部门异常,请求:{}", JSON.toJSONString(request), e);
+ return Result.error(e.getMessage());
+ } catch (Exception e) {
+ log.error("用户设置部门异常,请求:{}", JSON.toJSONString(request), e);
+ }
+ return Result.error();
}
@PostMapping("/private/user/setRole")
public Result setUserRole(@RequestBody @Valid @NotNull(message = "请求参数不能为空") UserRoleUpdateRequest request) {
- return Result.success(true);
- }
-
-
- @PostMapping("/public/user/useraddBatch")
- public Result add() {
- List futures = Lists.newArrayList();
- List list = Lists.newCopyOnWriteArrayList();
- for (int i = 0; i < 100; i++) {
- int finalI = i;
- log.info("第{}批数据生成!", finalI);
- CompletableFuture future = CompletableFuture.runAsync(() -> {
- for (int j = 0; j < 1000; j++) {
- log.info("第{}批的第{}条数据生成!", finalI, j);
- XUser user = new XUser();
- user.setName("nameTest2" + finalI + j);
- user.setUsername("usernameTest2" + finalI + j);
- user.setPassword(passwordEncoder.encode("123456"));
- user.setEmail("emailTest2" + finalI + j + "@test.com");
- user.setPhone("13800000000");
- user.setStatus(UserStatusEnum.USING.getCode());
- list.add(user);
- }
- });
- futures.add(future);
+ try {
+ return Result.success(userService.setUserRole(request));
+ } catch (BusinessException e) {
+ log.error("用户设置角色异常,请求:{}", JSON.toJSONString(request), e);
+ return Result.error(e.getMessage());
+ } catch (Exception e) {
+ log.error("用户设置角色异常,请求:{}", JSON.toJSONString(request), e);
}
- CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
- List> partition = Lists.partition(list, 3000);
- CompletableFuture.runAsync(() -> {
- partition.stream().parallel().forEach(userMapper::insertBatch);
- });
- return Result.success();
+ return Result.error();
}
+
+
+// @PostMapping("/public/user/useraddBatch")
+// public Result add() {
+// List futures = Lists.newArrayList();
+// List list = Lists.newCopyOnWriteArrayList();
+// for (int i = 0; i < 100; i++) {
+// int finalI = i;
+// log.info("第{}批数据生成!", finalI);
+// CompletableFuture future = CompletableFuture.runAsync(() -> {
+// for (int j = 0; j < 1000; j++) {
+// log.info("第{}批的第{}条数据生成!", finalI, j);
+// XUser user = new XUser();
+// user.setName("nameTest2" + finalI + j);
+// user.setUsername("usernameTest2" + finalI + j);
+// user.setPassword(passwordEncoder.encode("123456"));
+// user.setEmail("emailTest2" + finalI + j + "@test.com");
+// user.setPhone("13800000000");
+// user.setStatus(UserStatusEnum.USING.getCode());
+// list.add(user);
+// }
+// });
+// futures.add(future);
+// }
+// CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
+// List> partition = Lists.partition(list, 3000);
+// CompletableFuture.runAsync(() -> {
+// partition.stream().parallel().forEach(userMapper::insertBatch);
+// });
+// return Result.success();
+// }
}
diff --git a/xs-service/src/main/java/com/xiang/xservice/auth/service/config/AuthorizationServerConfig.java b/xs-service/src/main/java/com/xiang/xservice/auth/service/config/AuthorizationServerConfig.java
index ead15c8..629b4c3 100644
--- a/xs-service/src/main/java/com/xiang/xservice/auth/service/config/AuthorizationServerConfig.java
+++ b/xs-service/src/main/java/com/xiang/xservice/auth/service/config/AuthorizationServerConfig.java
@@ -54,6 +54,7 @@ public class AuthorizationServerConfig {
.authorizeRequests(authorizeRequests -> authorizeRequests
.antMatchers("/public/**").permitAll()
.antMatchers("/open/**").permitAll()
+ .antMatchers("/private/**").permitAll()
.anyRequest().authenticated()
)
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
diff --git a/xs-service/src/main/java/com/xiang/xservice/auth/service/convert/XUserConvert.java b/xs-service/src/main/java/com/xiang/xservice/auth/service/convert/XUserConvert.java
new file mode 100644
index 0000000..6f82e36
--- /dev/null
+++ b/xs-service/src/main/java/com/xiang/xservice/auth/service/convert/XUserConvert.java
@@ -0,0 +1,24 @@
+package com.xiang.xservice.auth.service.convert;
+
+import com.xiang.xservice.auth.api.dto.req.user.UserAddRequest;
+import com.xiang.xservice.auth.api.dto.req.user.UserQueryRequest;
+import com.xiang.xservice.auth.api.dto.req.user.UserUpdateRequest;
+import com.xiang.xservice.auth.api.dto.resp.UserResp;
+import com.xiang.xservice.auth.service.entity.XUser;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+@Mapper(componentModel = "spring")
+public interface XUserConvert {
+ XUserConvert INSTANCE = Mappers.getMapper(XUserConvert.class);
+
+ XUser toDO (UserQueryRequest request);
+ XUser toDO (UserAddRequest request);
+ XUser toDO (UserUpdateRequest request);
+
+ List toRespList(List list);
+
+ UserResp toResp(XUser user);
+}
diff --git a/xs-service/src/main/java/com/xiang/xservice/auth/service/repository/mapper/XUserMapper.java b/xs-service/src/main/java/com/xiang/xservice/auth/service/repository/mapper/XUserMapper.java
index 2e09231..2a7bdbd 100644
--- a/xs-service/src/main/java/com/xiang/xservice/auth/service/repository/mapper/XUserMapper.java
+++ b/xs-service/src/main/java/com/xiang/xservice/auth/service/repository/mapper/XUserMapper.java
@@ -2,14 +2,21 @@ package com.xiang.xservice.auth.service.repository.mapper;
import com.xiang.xservice.auth.service.entity.XUser;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
+import java.time.LocalDateTime;
import java.util.List;
@Repository
@Mapper
public interface XUserMapper {
+ /**
+ * 根据用户名查询用户
+ * @param username
+ * @return
+ */
XUser selectByUsername(String username);
/**
@@ -19,5 +26,40 @@ public interface XUserMapper {
*/
int insert(XUser user);
+ /**
+ * 批量插入
+ * @param list
+ * @return
+ */
int insertBatch(List list);
+
+ /**
+ * 查询用户列表
+ * @param user
+ * @return
+ */
+ List getUserList(XUser user);
+
+ /**
+ * 查询用户详情
+ * @param id
+ * @return
+ */
+ XUser getUserById(Long id);
+
+ /**
+ * 编辑用户
+ * @param user
+ * @return
+ */
+ int update(XUser user);
+
+ /**
+ * 批量删除
+ * @param ids
+ * @param time
+ * @param operator
+ * @return
+ */
+ int deleteBatch(@Param("ids") List ids, @Param("time") LocalDateTime time, @Param("operator") String operator);
}
diff --git a/xs-service/src/main/java/com/xiang/xservice/auth/service/service/XUserService.java b/xs-service/src/main/java/com/xiang/xservice/auth/service/service/XUserService.java
index 36caf6f..ae04c54 100644
--- a/xs-service/src/main/java/com/xiang/xservice/auth/service/service/XUserService.java
+++ b/xs-service/src/main/java/com/xiang/xservice/auth/service/service/XUserService.java
@@ -2,10 +2,17 @@ package com.xiang.xservice.auth.service.service;
import com.xiang.xservice.auth.api.dto.req.LoginRequest;
import com.xiang.xservice.auth.api.dto.req.RegisterRequest;
+import com.xiang.xservice.auth.api.dto.req.user.UserAddRequest;
+import com.xiang.xservice.auth.api.dto.req.user.UserDeptUpdateRequest;
+import com.xiang.xservice.auth.api.dto.req.user.UserQueryRequest;
+import com.xiang.xservice.auth.api.dto.req.user.UserRoleUpdateRequest;
+import com.xiang.xservice.auth.api.dto.req.user.UserUpdateRequest;
import com.xiang.xservice.auth.api.dto.resp.LoginResp;
import com.xiang.xservice.auth.api.dto.resp.RegisterResp;
import com.xiang.xservice.auth.api.dto.resp.UserResp;
+import java.util.List;
+
public interface XUserService {
LoginResp login(LoginRequest request);
@@ -13,4 +20,18 @@ public interface XUserService {
UserResp getUserByUsername(String username);
RegisterResp userRegister(RegisterRequest request);
+
+ List getUserList(UserQueryRequest request);
+
+ UserResp getUserInfo(Long id);
+
+ Boolean addUser(UserAddRequest request);
+
+ Boolean updateUser(UserUpdateRequest request);
+
+ Boolean delUser(List ids);
+
+ Boolean setUserDept(UserDeptUpdateRequest request);
+
+ Boolean setUserRole(UserRoleUpdateRequest request);
}
diff --git a/xs-service/src/main/java/com/xiang/xservice/auth/service/service/impl/XUserServiceImpl.java b/xs-service/src/main/java/com/xiang/xservice/auth/service/service/impl/XUserServiceImpl.java
index 67de061..8b414f3 100644
--- a/xs-service/src/main/java/com/xiang/xservice/auth/service/service/impl/XUserServiceImpl.java
+++ b/xs-service/src/main/java/com/xiang/xservice/auth/service/service/impl/XUserServiceImpl.java
@@ -1,11 +1,18 @@
package com.xiang.xservice.auth.service.service.impl;
+import com.google.common.collect.Lists;
import com.xiang.xservice.auth.api.code.UserErrorCode;
import com.xiang.xservice.auth.api.dto.req.LoginRequest;
import com.xiang.xservice.auth.api.dto.req.RegisterRequest;
+import com.xiang.xservice.auth.api.dto.req.user.UserAddRequest;
+import com.xiang.xservice.auth.api.dto.req.user.UserDeptUpdateRequest;
+import com.xiang.xservice.auth.api.dto.req.user.UserQueryRequest;
+import com.xiang.xservice.auth.api.dto.req.user.UserRoleUpdateRequest;
+import com.xiang.xservice.auth.api.dto.req.user.UserUpdateRequest;
import com.xiang.xservice.auth.api.dto.resp.LoginResp;
import com.xiang.xservice.auth.api.dto.resp.RegisterResp;
import com.xiang.xservice.auth.api.dto.resp.UserResp;
+import com.xiang.xservice.auth.service.convert.XUserConvert;
import com.xiang.xservice.auth.service.entity.XUser;
import com.xiang.xservice.auth.service.enums.UserStatusEnum;
import com.xiang.xservice.auth.service.repository.mapper.XUserMapper;
@@ -14,6 +21,7 @@ import com.xiang.xservice.basic.enums.DelStatusEnum;
import com.xiang.xservice.basic.exception.BusinessException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
@@ -23,10 +31,12 @@ import org.springframework.security.oauth2.jwt.JwtClaimsSet;
import org.springframework.security.oauth2.jwt.JwtEncoder;
import org.springframework.security.oauth2.jwt.JwtEncoderParameters;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
+import java.util.List;
import java.util.Objects;
@Slf4j
@@ -38,6 +48,7 @@ public class XUserServiceImpl implements XUserService {
private final XUserMapper userMapper;
private final AuthenticationManager authenticationManager;
private final PasswordEncoder passwordEncoder;
+ private final XUserConvert userConvert;
@Override
public LoginResp login(LoginRequest request) {
@@ -122,4 +133,55 @@ public class XUserServiceImpl implements XUserService {
}
return null;
}
+
+ @Override
+ public List getUserList(UserQueryRequest request) {
+ List userList = userMapper.getUserList(userConvert.toDO(request));
+ if (CollectionUtils.isEmpty(userList)) {
+ return Lists.newArrayList();
+ }
+ return userConvert.toRespList(userList);
+ }
+
+ @Override
+ public UserResp getUserInfo(Long id) {
+ XUser user = userMapper.getUserById(id);
+ return userConvert.toResp(user);
+ }
+
+ @Override
+ public Boolean addUser(UserAddRequest request) {
+ XUser user = userConvert.toDO(request);
+ user.setCreateBy(request.getOperator());
+ user.setCreateTime(request.getDateTime());
+ user.setUpdateBy(request.getOperator());
+ user.setUpdateTime(request.getDateTime());
+ return userMapper.insert(user) > 0;
+ }
+
+ @Override
+ public Boolean updateUser(UserUpdateRequest request) {
+ XUser user = userConvert.toDO(request);
+ user.setCreateBy(request.getOperator());
+ user.setCreateTime(request.getDateTime());
+ user.setUpdateBy(request.getOperator());
+ user.setUpdateTime(request.getDateTime());
+ return userMapper.update(user) > 0;
+ }
+
+ @Override
+ public Boolean delUser(List ids) {
+ return userMapper.deleteBatch(ids, LocalDateTime.now(), "System") > 0;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean setUserDept(UserDeptUpdateRequest request) {
+ return null;
+ }
+
+ @Override
+ public Boolean setUserRole(UserRoleUpdateRequest request) {
+ return null;
+ }
}
diff --git a/xs-service/src/main/resources/mapper/user/XUserMapper.xml b/xs-service/src/main/resources/mapper/user/XUserMapper.xml
index a38b47a..2cb5254 100644
--- a/xs-service/src/main/resources/mapper/user/XUserMapper.xml
+++ b/xs-service/src/main/resources/mapper/user/XUserMapper.xml
@@ -160,6 +160,12 @@
WHERE id = #{id}
+
+ update x_user set del_flag = 0, update_time = #{time}, update_by = #{operator} where id in
+
+ #{id}
+
+
+
+
+
\ No newline at end of file