diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..dc6b62e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +.git +.idea +*.iws +*.iml +*.ipr +.vscode +.DS_Store diff --git a/src/main/java/com/cool/modules/user/controller/admin/AdminUserInfoController.java b/src/main/java/com/cool/modules/user/controller/admin/AdminUserInfoController.java index 833762d..6663003 100644 --- a/src/main/java/com/cool/modules/user/controller/admin/AdminUserInfoController.java +++ b/src/main/java/com/cool/modules/user/controller/admin/AdminUserInfoController.java @@ -2,23 +2,72 @@ package com.cool.modules.user.controller.admin; import static com.cool.modules.user.entity.table.UserInfoEntityTableDef.USER_INFO_ENTITY; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.ObjUtil; import cn.hutool.json.JSONObject; import com.cool.core.annotation.CoolRestController; import com.cool.core.base.BaseController; +import com.cool.core.cache.CoolCache; +import com.cool.core.request.R; +import com.cool.core.security.jwt.JwtUser; import com.cool.modules.user.entity.UserInfoEntity; import com.cool.modules.user.service.UserInfoService; +import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.Map; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestAttribute; +@RequiredArgsConstructor @Tag(name = "用户信息", description = "用户信息") @CoolRestController(api = {"add", "delete", "update", "page", "list", "info"}) public class AdminUserInfoController extends BaseController { + private final UserInfoService userInfoService; + private final CoolCache coolCache; + @Override protected void init(HttpServletRequest request, JSONObject requestParams) { - setPageOption(createOp().fieldEq(USER_INFO_ENTITY.STATUS, USER_INFO_ENTITY.GENDER, USER_INFO_ENTITY.LOGIN_TYPE) - .keyWordLikeFields(USER_INFO_ENTITY.NICK_NAME, USER_INFO_ENTITY.PHONE)); + .keyWordLikeFields(USER_INFO_ENTITY.NICK_NAME, USER_INFO_ENTITY.PHONE, + USER_INFO_ENTITY.USERNAME, USER_INFO_ENTITY.EMAIL)); + } + + @Override + @PostMapping("/update") + protected R update(@RequestBody UserInfoEntity t, @RequestAttribute JSONObject requestParams) { + Long id = t.getId(); + if (id != null) { + UserInfoEntity before = userInfoService.getById(id); + if (before != null && !ObjUtil.equals(before.getStatus(), t.getStatus())) { + coolCache.del("app:userDetails:" + id); + } + } + return super.update(t, requestParams); + } + + @Operation(summary = "注销用户") + @PostMapping("/logoff") + public R logoff(@RequestBody JSONObject requestParams) { + Long id = requestParams.getLong("id"); + userInfoService.adminLogoff(id); + coolCache.del("app:userDetails:" + id); + return R.ok(); + } + + @Override + @PostMapping("/delete") + protected R delete(HttpServletRequest request, @RequestBody Map params, + @RequestAttribute JSONObject requestParams) { + Long[] ids = Convert.toLongArray(getIds(params)); + if (ids != null) { + Arrays.stream(ids).forEach(userInfoService::checkLogoffBeforeDelete); + } + return super.delete(request, params, requestParams); } } diff --git a/src/main/java/com/cool/modules/user/controller/app/AppUserInfoController.java b/src/main/java/com/cool/modules/user/controller/app/AppUserInfoController.java index 0f09313..b3cc7f0 100644 --- a/src/main/java/com/cool/modules/user/controller/app/AppUserInfoController.java +++ b/src/main/java/com/cool/modules/user/controller/app/AppUserInfoController.java @@ -35,6 +35,8 @@ public class AppUserInfoController { public R updatePerson(@RequestAttribute JSONObject requestParams) { UserInfoEntity infoEntity = requestParams.toBean(UserInfoEntity.class); infoEntity.setId(CoolSecurityUtil.getCurrentUserId()); + infoEntity.setUsername(null); + infoEntity.setEmail(null); return R.ok( userInfoService.updateById(infoEntity) ); @@ -67,4 +69,20 @@ public class AppUserInfoController { userInfoService.bindPhone(CoolSecurityUtil.getCurrentUserId(), phone, code); return R.ok(); } + + @Operation(summary = "绑定邮箱") + @PostMapping("/bindEmail") + public R bindEmail(@RequestAttribute JSONObject requestParams) { + String email = requestParams.getStr("email"); + userInfoService.bindEmail(CoolSecurityUtil.getCurrentUserId(), email); + return R.ok(); + } + + @Operation(summary = "绑定用户名") + @PostMapping("/bindUsername") + public R bindUsername(@RequestAttribute JSONObject requestParams) { + String username = requestParams.getStr("username"); + userInfoService.bindUsername(CoolSecurityUtil.getCurrentUserId(), username); + return R.ok(); + } } diff --git a/src/main/java/com/cool/modules/user/entity/UserInfoEntity.java b/src/main/java/com/cool/modules/user/entity/UserInfoEntity.java index 67dfe86..c60f56e 100644 --- a/src/main/java/com/cool/modules/user/entity/UserInfoEntity.java +++ b/src/main/java/com/cool/modules/user/entity/UserInfoEntity.java @@ -30,6 +30,10 @@ public class UserInfoEntity extends BaseEntity { @ColumnDefine(comment = "邮箱") private String email; + @UniIndex + @ColumnDefine(comment = "用户名") + private String username; + @ColumnDefine(comment = "性别 0-未知 1-男 2-女", defaultValue = "0") private Integer gender; diff --git a/src/main/java/com/cool/modules/user/service/UserInfoService.java b/src/main/java/com/cool/modules/user/service/UserInfoService.java index a779e80..f843229 100644 --- a/src/main/java/com/cool/modules/user/service/UserInfoService.java +++ b/src/main/java/com/cool/modules/user/service/UserInfoService.java @@ -25,4 +25,24 @@ public interface UserInfoService extends BaseService { * 绑定手机号 */ void bindPhone(Long currentUserId, String phone, String code); + + /** + * 绑定邮箱 + */ + void bindEmail(Long currentUserId, String email); + + /** + * 绑定用户名 + */ + void bindUsername(Long currentUserId, String username); + + /** + * 注销(管理端) + */ + void adminLogoff(Long userId); + + /** + * 删除前校验:必须已注销 + */ + void checkLogoffBeforeDelete(Long userId); } diff --git a/src/main/java/com/cool/modules/user/service/impl/UserInfoServiceImpl.java b/src/main/java/com/cool/modules/user/service/impl/UserInfoServiceImpl.java index e66e993..0143275 100644 --- a/src/main/java/com/cool/modules/user/service/impl/UserInfoServiceImpl.java +++ b/src/main/java/com/cool/modules/user/service/impl/UserInfoServiceImpl.java @@ -1,12 +1,15 @@ package com.cool.modules.user.service.impl; +import cn.hutool.core.util.ObjUtil; import cn.hutool.crypto.digest.MD5; import com.cool.core.base.BaseServiceImpl; +import com.cool.core.exception.CoolPreconditions; import com.cool.modules.user.entity.UserInfoEntity; import com.cool.modules.user.mapper.UserInfoMapper; import com.cool.modules.user.service.UserInfoService; import com.cool.modules.user.util.UserSmsUtil; import com.cool.modules.user.util.UserSmsUtil.SendSceneEnum; +import com.mybatisflex.core.query.QueryWrapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -41,6 +44,29 @@ public class UserInfoServiceImpl extends BaseServiceImpl