From 993f975edd5b7b89c4c8b5872c3b2bc0dfb8d77b Mon Sep 17 00:00:00 2001
From: admin <1752476835@qq.com>
Date: Fri, 19 Apr 2024 17:20:40 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9C=80=E6=96=B0=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
deploy.sh | 11 +
play-admin/pom.xml | 24 +-
.../common/aspect/ClerkUserLoginAspect.java | 5 +-
.../common/aspect/CustomUserLoginAspect.java | 4 +-
.../admin/common/aspect/DataScopeAspect.java | 3 +-
.../admin/common/component/JwtToken.java | 9 +-
.../admin/common/conf/ListTypeHandler.java | 54 +++
.../admin/common/conf/StringTypeHandler.java | 13 +
.../handler/GlobalExceptionHandler.java | 24 +-
.../mybatis/handler/MyMetaObjectHandler.java | 20 +-
.../mybatis/handler/MyTenantLineHandler.java | 9 +-
.../common/oss/controller/CosController.java | 9 -
.../common/oss/service/IOssFileService.java | 13 +-
.../oss/service/impl/OssFileServiceImpl.java | 25 +-
.../security/config/SpringSecurityConfig.java | 1 +
.../filter/JwtAuthenticationTokenFilter.java | 96 ++++-
...PlayClerkClassificationInfoController.java | 9 +-
.../PlayClerkCommodityController.java | 8 -
.../PlayClerkDataReviewInfoController.java | 132 +++++++
.../PlayClerkLevelInfoController.java | 6 -
.../PlayClerkUserInfoController.java | 10 +-
.../mapper/PlayClerkDataReviewInfoMapper.java | 16 +
.../clear/mapper/PlayClerkUserInfoMapper.java | 4 +-
.../PlayClarkUserEvaluateInfoEntity.java | 82 +++++
.../entity/PlayClarkUserTrendsInfoEntity.java | 44 +++
.../entity/PlayClerkDataReviewInfoEditVo.java | 41 +++
.../entity/PlayClerkDataReviewInfoEntity.java | 76 ++++
.../PlayClerkDataReviewInfoQueryVo.java | 65 ++++
.../entity/PlayClerkUserDetailResultVo.java | 85 +++++
.../entity/PlayClerkUserInfoEntity.java | 46 ++-
.../entity/PlayClerkUserInfoQueryVo.java | 17 +-
.../entity/PlayClerkUserListResultVo.java | 84 +++++
.../module/entity/PlayGiftInfoEntity.java | 47 +++
.../module/vo/PlayClerkCommodityEditVo.java | 2 +
.../IPlayClerkClassificationInfoService.java | 2 +-
.../service/IPlayClerkCommodityService.java | 8 +
.../IPlayClerkDataReviewInfoService.java | 72 ++++
.../service/IPlayClerkUserInfoService.java | 10 +-
...layClerkClassificationInfoServiceImpl.java | 2 +-
.../impl/PlayClerkCommodityServiceImpl.java | 10 +-
.../PlayClerkDataReviewInfoServiceImpl.java | 128 +++++++
.../impl/PlayClerkUserInfoServiceImpl.java | 77 +++-
.../service/IPlayCustomUserInfoService.java | 2 +-
.../controller/UserOnlineController.java | 7 +-
.../platform/entity/SysTenantEntity.java | 5 +
.../platform/service/ISysTenantService.java | 10 +
.../service/impl/SysTenantServiceImpl.java | 8 +
.../play/service/IPlayUserInfoService.java | 2 +
.../service/impl/PlayUserInfoServiceImpl.java | 2 +
.../system/controller/LoginController.java | 18 +
...ISysAdministrativeAreaDictInfoService.java | 2 +-
.../modules/system/service/LoginService.java | 13 +-
.../system/service/impl/LoginServiceImpl.java | 17 +-
...AdministrativeAreaDictInfoServiceImpl.java | 2 +-
.../service/impl/SysMenuServiceImpl.java | 4 +-
.../modules/system/vo/TenantLoginVo.java | 34 ++
.../weichat/controller/WxClerkController.java | 338 +++++++++++++++++-
.../controller/WxCommonController.java | 87 ++++-
.../controller/WxCustomController.java | 31 ++
.../weichat/controller/WxCustomService.java | 41 +++
.../weichat/controller/WxOauthController.java | 60 +++-
.../weichat/entity/PlayClerkUserAlbumVo.java | 22 ++
.../weichat/entity/PlayClerkUserAudioVo.java | 22 ++
.../weichat/entity/PlayClerkUserAvatarVo.java | 27 ++
...AddVo.java => PlayClerkUserByWxAddVo.java} | 82 +++--
.../entity/PlayClerkUserByWxEditVo.java | 123 +++++++
.../entity/PlayClerkUserLoginResponseVo.java | 134 +++++++
.../entity/PlayClerkUserOnlineStateVo.java | 24 ++
.../weichat/entity/PlayClerkUserOtherVo.java | 79 ++++
.../weichat/entity/PlayClerkUserQueryVo.java | 37 ++
.../weichat/service/WxAccessTokenService.java | 38 ++
.../weichat/service/WxOauthService.java | 26 +-
.../weichat/service/WxTokenService.java | 15 +-
.../modules/weichat/utils/WxFileUtils.java | 74 ++++
.../src/main/resources/application-test.yml | 23 --
play-admin/src/main/resources/oss.properties | 8 +-
play-common/pom.xml | 4 +
.../com/starry/common/filter/XssFilter.java | 5 +-
.../starry/common/result/ResultCodeEnum.java | 3 +-
.../common/utils/VerificationCodeUtils.java | 2 +-
.../starry/generator/utils/VelocityUtils.java | 7 +-
pom.xml | 25 ++
82 files changed, 2618 insertions(+), 248 deletions(-)
create mode 100644 deploy.sh
create mode 100644 play-admin/src/main/java/com/starry/admin/common/conf/ListTypeHandler.java
create mode 100644 play-admin/src/main/java/com/starry/admin/common/conf/StringTypeHandler.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkDataReviewInfoController.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/clear/mapper/PlayClerkDataReviewInfoMapper.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClarkUserEvaluateInfoEntity.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClarkUserTrendsInfoEntity.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkDataReviewInfoEditVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkDataReviewInfoEntity.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkDataReviewInfoQueryVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserDetailResultVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserListResultVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayGiftInfoEntity.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkDataReviewInfoService.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkDataReviewInfoServiceImpl.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/system/vo/TenantLoginVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomController.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomService.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserAlbumVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserAudioVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserAvatarVo.java
rename play-admin/src/main/java/com/starry/admin/modules/weichat/entity/{PlayClerkUserAddVo.java => PlayClerkUserByWxAddVo.java} (51%)
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserByWxEditVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserLoginResponseVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserOnlineStateVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserOtherVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserQueryVo.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxAccessTokenService.java
create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/utils/WxFileUtils.java
diff --git a/deploy.sh b/deploy.sh
new file mode 100644
index 0000000..18e97ba
--- /dev/null
+++ b/deploy.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+# 发包脚本
+set -e
+echo "发布开始,当前时间是:$current_time"
+#mvn clean install
+scp ./play-admin/target/play-admin-1.0.jar root@122.51.20.105:/www/wwwroot/july.hucs.top
+ssh root@122.51.20.105 "source /etc/profile;cd /www/wwwroot/july.hucs.top;sh start.sh restart"
+# 获取当前时间并格式化为指定格式
+current_time=$(date +"%Y-%m-%d %H:%M:%S")
+
+echo "发布完成,当前时间是:$current_time"
\ No newline at end of file
diff --git a/play-admin/pom.xml b/play-admin/pom.xml
index 30091bf..efcea76 100644
--- a/play-admin/pom.xml
+++ b/play-admin/pom.xml
@@ -48,6 +48,10 @@
mysql
mysql-connector-java
+
+ com.github.yulichang
+ mybatis-plus-join-boot-starter
+
com.alibaba
@@ -88,7 +92,6 @@
com.github.binarywang
wx-java-mp-spring-boot-starter
- 4.5.0
@@ -103,6 +106,25 @@
+
+
+ ws.schild
+ jave-core
+ 3.5.0
+
+
+ ws.schild
+ jave-native-win64
+ 2.4.6
+
+
+
+
+ ws.schild
+ jave-native-linux64
+ 2.4.6
+
+
diff --git a/play-admin/src/main/java/com/starry/admin/common/aspect/ClerkUserLoginAspect.java b/play-admin/src/main/java/com/starry/admin/common/aspect/ClerkUserLoginAspect.java
index 9cad6b2..d02ad63 100644
--- a/play-admin/src/main/java/com/starry/admin/common/aspect/ClerkUserLoginAspect.java
+++ b/play-admin/src/main/java/com/starry/admin/common/aspect/ClerkUserLoginAspect.java
@@ -29,7 +29,6 @@ import java.util.Objects;
public class ClerkUserLoginAspect {
-
@Resource
private PlayClerkUserInfoServiceImpl clerkUserInfoService;
@@ -45,7 +44,9 @@ public class ClerkUserLoginAspect {
if (StringUtils.isEmpty(userToken)) {
throw new ServiceException("token为空", HttpStatus.UNAUTHORIZED);
}
- userToken = userToken.replace(Constants.TOKEN_PREFIX, "");
+ if (userToken.startsWith(Constants.TOKEN_PREFIX)) {
+ userToken = userToken.replace(Constants.TOKEN_PREFIX, "");
+ }
// 解析token
String userId;
try {
diff --git a/play-admin/src/main/java/com/starry/admin/common/aspect/CustomUserLoginAspect.java b/play-admin/src/main/java/com/starry/admin/common/aspect/CustomUserLoginAspect.java
index 764cbe6..f329528 100644
--- a/play-admin/src/main/java/com/starry/admin/common/aspect/CustomUserLoginAspect.java
+++ b/play-admin/src/main/java/com/starry/admin/common/aspect/CustomUserLoginAspect.java
@@ -43,7 +43,9 @@ public class CustomUserLoginAspect {
if (StringUtils.isEmpty(userToken)) {
throw new ServiceException("token为空", HttpStatus.UNAUTHORIZED);
}
- userToken = userToken.replace(Constants.TOKEN_PREFIX, "");
+ if (userToken.startsWith(Constants.TOKEN_PREFIX)) {
+ userToken = userToken.replace(Constants.TOKEN_PREFIX, "");
+ }
// 解析token
String userId;
try {
diff --git a/play-admin/src/main/java/com/starry/admin/common/aspect/DataScopeAspect.java b/play-admin/src/main/java/com/starry/admin/common/aspect/DataScopeAspect.java
index 71a2517..02c7d44 100644
--- a/play-admin/src/main/java/com/starry/admin/common/aspect/DataScopeAspect.java
+++ b/play-admin/src/main/java/com/starry/admin/common/aspect/DataScopeAspect.java
@@ -1,6 +1,7 @@
package com.starry.admin.common.aspect;
import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.StrUtil;
import com.starry.admin.common.domain.LoginUser;
import com.starry.admin.modules.system.entity.SysRoleEntity;
import com.starry.admin.modules.system.entity.SysUserEntity;
@@ -72,7 +73,7 @@ public class DataScopeAspect {
if (!DATA_SCOPE_CUSTOM.equals(dataScope) && conditions.contains(dataScope)) {
continue;
}
- if (StringUtils.isNotEmpty(permission) && StringUtils.isNotEmpty(role.getPermissions())
+ if (StrUtil.isNotBlank(permission) && StringUtils.isNotEmpty(role.getPermissions())
&& !StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission))) {
continue;
}
diff --git a/play-admin/src/main/java/com/starry/admin/common/component/JwtToken.java b/play-admin/src/main/java/com/starry/admin/common/component/JwtToken.java
index 664d07e..81844bb 100644
--- a/play-admin/src/main/java/com/starry/admin/common/component/JwtToken.java
+++ b/play-admin/src/main/java/com/starry/admin/common/component/JwtToken.java
@@ -1,6 +1,7 @@
package com.starry.admin.common.component;
import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
@@ -185,7 +186,7 @@ public class JwtToken {
*/
public JwtUser getLoginUser(HttpServletRequest request) {
String token = getToken(request);
- if (StringUtils.isNotEmpty(token)) {
+ if (StrUtil.isNotBlank(token)) {
try {
Claims claims = getClaimsFromToken(token);
String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
@@ -208,7 +209,7 @@ public class JwtToken {
private String getToken(HttpServletRequest request) {
// 获取请求头
String token = request.getHeader(tokenHeader);
- if (StringUtils.isNotEmpty(token) && token.startsWith(tokenHead)) {
+ if (StrUtil.isNotBlank(token) && token.startsWith(tokenHead)) {
token = token.replace(tokenHead, "");
}
return token;
@@ -232,7 +233,7 @@ public class JwtToken {
* 删除用户身份信息
*/
public void removeJwtUser(String token) {
- if (StringUtils.isNotEmpty(token)) {
+ if (StrUtil.isNotBlank(token)) {
String userKey = getTokenKey(token);
redisCache.deleteObject(userKey);
}
@@ -307,7 +308,7 @@ public class JwtToken {
*/
public LoginUser getNewLoginUser(HttpServletRequest request) {
String token = getToken(request);
- if (StringUtils.isNotEmpty(token)) {
+ if (StrUtil.isNotBlank(token)) {
try {
Claims claims = getClaimsFromToken(token);
String uuid = (String) claims.get(SecurityConstants.USER_KEY);
diff --git a/play-admin/src/main/java/com/starry/admin/common/conf/ListTypeHandler.java b/play-admin/src/main/java/com/starry/admin/common/conf/ListTypeHandler.java
new file mode 100644
index 0000000..fc0272f
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/common/conf/ListTypeHandler.java
@@ -0,0 +1,54 @@
+package com.starry.admin.common.conf;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.TypeReference;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.type.BaseTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.MappedJdbcTypes;
+import org.apache.ibatis.type.MappedTypes;
+import org.springframework.util.StringUtils;
+
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@MappedJdbcTypes(JdbcType.VARCHAR) //数据库类型
+@MappedTypes({List.class}) //java数据类型
+public abstract class ListTypeHandler extends BaseTypeHandler> {
+ @Override
+ public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException {
+ String content = StringUtils.isEmpty(parameter) ? null : JSON.toJSONString(parameter);
+ ps.setString(i, content);
+ }
+
+ @Override
+ public List getNullableResult(ResultSet rs, String columnName) throws SQLException {
+ return this.getListByJsonArrayString(rs.getString(columnName));
+ }
+
+ @Override
+ public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
+ return this.getListByJsonArrayString(rs.getString(columnIndex));
+ }
+
+ @Override
+ public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
+ return this.getListByJsonArrayString(cs.getString(columnIndex));
+ }
+
+ private List getListByJsonArrayString(String content) {
+ return StringUtils.isEmpty(content) ? new ArrayList<>() : JSON.parseObject(content, this.specificType());
+ }
+
+ /**
+ * 具体类型,由子类提供
+ *
+ * @return 具体类型
+ */
+ protected abstract TypeReference> specificType();
+}
diff --git a/play-admin/src/main/java/com/starry/admin/common/conf/StringTypeHandler.java b/play-admin/src/main/java/com/starry/admin/common/conf/StringTypeHandler.java
new file mode 100644
index 0000000..a6ca59b
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/common/conf/StringTypeHandler.java
@@ -0,0 +1,13 @@
+package com.starry.admin.common.conf;
+
+import com.alibaba.fastjson2.TypeReference;
+import java.util.List;
+
+public class StringTypeHandler extends ListTypeHandler {
+ // 将ListTypeHandler(T为任意对象),具体为特定的对象String
+ @Override
+ protected TypeReference> specificType() {
+ return new TypeReference>() {
+ };
+ }
+}
\ No newline at end of file
diff --git a/play-admin/src/main/java/com/starry/admin/common/exception/handler/GlobalExceptionHandler.java b/play-admin/src/main/java/com/starry/admin/common/exception/handler/GlobalExceptionHandler.java
index d58a4e7..4460c5c 100644
--- a/play-admin/src/main/java/com/starry/admin/common/exception/handler/GlobalExceptionHandler.java
+++ b/play-admin/src/main/java/com/starry/admin/common/exception/handler/GlobalExceptionHandler.java
@@ -1,16 +1,19 @@
package com.starry.admin.common.exception.handler;
+import com.fasterxml.jackson.databind.exc.MismatchedInputException;
import com.starry.admin.common.exception.CustomException;
import com.starry.admin.common.exception.ServiceException;
import com.starry.common.result.R;
import com.starry.common.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@@ -79,6 +82,22 @@ public class GlobalExceptionHandler {
return R.error("请求参数异常," + errorMessageBuilder);
}
+ @ExceptionHandler(MismatchedInputException.class)
+ public R mismatchedInputException(MismatchedInputException e) {
+ return R.error("请求参数格式异常");
+ }
+
+ @ExceptionHandler(HttpMessageNotReadableException.class)
+ public R httpMessageNotReadableException(HttpMessageNotReadableException e) {
+ return R.error("请求参数格式异常");
+ }
+
+ @ExceptionHandler(MissingServletRequestParameterException.class)
+ public R missingServletRequestParameterException(MissingServletRequestParameterException e) {
+ return R.error("请求参数格式异常");
+ }
+
+
/**
* 自定义异常
*
@@ -89,10 +108,5 @@ public class GlobalExceptionHandler {
return R.error(e.getMessage());
}
- // @ExceptionHandler(ServiceException.class)
- // public R serviceException(ServiceException e) {
- // return R.error(e.getMessage());
- // }
-
}
diff --git a/play-admin/src/main/java/com/starry/admin/common/mybatis/handler/MyMetaObjectHandler.java b/play-admin/src/main/java/com/starry/admin/common/mybatis/handler/MyMetaObjectHandler.java
index f4cd821..d7d5a5e 100644
--- a/play-admin/src/main/java/com/starry/admin/common/mybatis/handler/MyMetaObjectHandler.java
+++ b/play-admin/src/main/java/com/starry/admin/common/mybatis/handler/MyMetaObjectHandler.java
@@ -1,5 +1,6 @@
package com.starry.admin.common.mybatis.handler;
+import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.starry.admin.modules.weichat.service.WxTokenService;
import com.starry.admin.utils.SecurityUtils;
@@ -54,13 +55,16 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
public String getOperatorId() {
if (request.getServletPath().startsWith("/wx/")) {
- String clerkToken = request.getHeader(Constants.CLERK_USER_LOGIN_TOKEN);
- String customToken = request.getHeader(Constants.CUSTOM_USER_LOGIN_TOKEN);
- if (clerkToken != null) {
- return tokenService.getWxUserIdByToken(clerkToken);
- }
- if (customToken != null) {
- return tokenService.getWxUserIdByToken(customToken);
+ String tenantKey = request.getHeader("tenantkey");
+ if (StrUtil.isBlankIfStr(tenantKey)) {
+ String clerkToken = request.getHeader(Constants.CLERK_USER_LOGIN_TOKEN);
+ String customToken = request.getHeader(Constants.CUSTOM_USER_LOGIN_TOKEN);
+ if (clerkToken != null) {
+ return tokenService.getWxUserIdByToken(clerkToken);
+ }
+ if (customToken != null) {
+ return tokenService.getWxUserIdByToken(customToken);
+ }
}
return "";
} else {
@@ -70,4 +74,4 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
}
return "";
}
- }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/common/mybatis/handler/MyTenantLineHandler.java b/play-admin/src/main/java/com/starry/admin/common/mybatis/handler/MyTenantLineHandler.java
index dc0f0b3..f84dbc5 100644
--- a/play-admin/src/main/java/com/starry/admin/common/mybatis/handler/MyTenantLineHandler.java
+++ b/play-admin/src/main/java/com/starry/admin/common/mybatis/handler/MyTenantLineHandler.java
@@ -1,6 +1,5 @@
package com.starry.admin.common.mybatis.handler;
-import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.starry.admin.utils.SecurityUtils;
import com.starry.common.utils.StringUtils;
@@ -23,7 +22,7 @@ public class MyTenantLineHandler implements TenantLineHandler {
/**
* 排除过滤的表
*/
- private static final String[] TABLE_FILTER = {"sys_user", "sys_menu", "sys_tenant_package", "sys_tenant", "sys_dict", "sys_dict_data", "sys_administrative_area_dict_info"};
+ private static final String[] TABLE_FILTER = {"sys_login_log", "sys_role", "sys_user", "sys_menu", "sys_tenant_package", "sys_tenant", "sys_dict", "sys_dict_data", "sys_administrative_area_dict_info"};
/**
* 排除过滤的表前缀
@@ -34,9 +33,9 @@ public class MyTenantLineHandler implements TenantLineHandler {
public Expression getTenantId() {
// 取出当前请求的服务商ID,通过解析器注入到SQL中。
String tenantId = SecurityUtils.getTenantId();
- if (StrUtil.isBlankIfStr(tenantId)) {
- tenantId = "9999";
- }
+// if (!StrUtil.isBlankIfStr(tenantId)) {
+// throw new CustomException("租户信息获取异常");
+// }
return new StringValue(tenantId);
}
diff --git a/play-admin/src/main/java/com/starry/admin/common/oss/controller/CosController.java b/play-admin/src/main/java/com/starry/admin/common/oss/controller/CosController.java
index b5afb5f..645895d 100644
--- a/play-admin/src/main/java/com/starry/admin/common/oss/controller/CosController.java
+++ b/play-admin/src/main/java/com/starry/admin/common/oss/controller/CosController.java
@@ -4,14 +4,12 @@ import com.starry.admin.common.oss.service.IOssFileService;
import com.starry.common.result.R;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
-import java.io.FileNotFoundException;
/**
* @author admin
@@ -36,11 +34,4 @@ public class CosController {
}
return R.error("上传照片异常,请联系管理员");
}
-
- @ApiOperation(value = "获取cos临时密钥")
- @GetMapping("/temp-key")
- public R getTempKey() throws FileNotFoundException {
-
- return R.ok();
- }
}
diff --git a/play-admin/src/main/java/com/starry/admin/common/oss/service/IOssFileService.java b/play-admin/src/main/java/com/starry/admin/common/oss/service/IOssFileService.java
index 1615404..8b64cfb 100644
--- a/play-admin/src/main/java/com/starry/admin/common/oss/service/IOssFileService.java
+++ b/play-admin/src/main/java/com/starry/admin/common/oss/service/IOssFileService.java
@@ -5,12 +5,15 @@ import java.io.InputStream;
public interface IOssFileService {
/**
- * 文件上传阿里云
+ * 文件上传只阿里云OSS
*
- * @param inputStream InputStream
- * @param module String
- * @param originalFilename 文件名称
- */
+ * @param inputStream 文件流
+ * @param module 文件保存模块地址
+ * @param originalFilename 原始文件名
+ * @return String
+ * @author admin
+ * @since 2024/4/11 10:24
+ **/
String upload(InputStream inputStream, String module, String originalFilename);
/**
diff --git a/play-admin/src/main/java/com/starry/admin/common/oss/service/impl/OssFileServiceImpl.java b/play-admin/src/main/java/com/starry/admin/common/oss/service/impl/OssFileServiceImpl.java
index 824c4ce..21f1b8f 100644
--- a/play-admin/src/main/java/com/starry/admin/common/oss/service/impl/OssFileServiceImpl.java
+++ b/play-admin/src/main/java/com/starry/admin/common/oss/service/impl/OssFileServiceImpl.java
@@ -17,8 +17,13 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.stereotype.Service;
+import java.io.BufferedInputStream;
+import java.io.IOException;
import java.io.InputStream;
+/**
+ * @author admin
+ */
@Service
@Slf4j
public class OssFileServiceImpl implements IOssFileService {
@@ -26,6 +31,15 @@ public class OssFileServiceImpl implements IOssFileService {
@Override
public String upload(InputStream inputStream, String module, String filename) {
+
+ BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
+ bufferedInputStream.mark(0);
+ String fileType = FileTypeUtil.getType(bufferedInputStream);
+ try {
+ bufferedInputStream.reset();
+ } catch (IOException e) {
+ throw new CustomException("文件上传到OSS失败");
+ }
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(OssProperties.ENDPOINT, OssProperties.KEY_ID, OssProperties.KEY_SECRET);
log.info("OSSClient实例创建成功");
@@ -42,16 +56,21 @@ public class OssFileServiceImpl implements IOssFileService {
// 构建日期路径:avatar/2019/02/26/文件名
String folder = new DateTime().toString("yyyy/MM/dd");
// 文件名:uuid.扩展名
- filename = IdUtil.fastSimpleUUID() + FileTypeUtil.getType(inputStream);
+
+
+ filename = IdUtil.fastSimpleUUID() + "." + fileType;
// 文件根路径
String key = module + "/" + folder + "/" + filename;
// 创建PutObjectRequest对象。
- PutObjectRequest putObjectRequest = new PutObjectRequest(OssProperties.BUCKET_NAME, key, inputStream);
+ PutObjectRequest putObjectRequest = new PutObjectRequest(OssProperties.BUCKET_NAME, key, bufferedInputStream);
// 创建PutObject请求。
ossClient.putObject(putObjectRequest);
log.info("oss文件上传成功");
// 阿里云文件绝对路径
- String endpoint = OssProperties.ENDPOINT.substring(OssProperties.ENDPOINT.lastIndexOf("//") + 2);
+ String endpoint = OssProperties.ENDPOINT;
+ if (OssProperties.ENDPOINT.contains("//")) {
+ endpoint = OssProperties.ENDPOINT.substring(OssProperties.ENDPOINT.lastIndexOf("//") + 2);
+ }
// 返回文件的访问路径
return "https://" + OssProperties.BUCKET_NAME + "." + endpoint + "/" + key;
} catch (OSSException oe) {
diff --git a/play-admin/src/main/java/com/starry/admin/common/security/config/SpringSecurityConfig.java b/play-admin/src/main/java/com/starry/admin/common/security/config/SpringSecurityConfig.java
index b58708c..2748347 100644
--- a/play-admin/src/main/java/com/starry/admin/common/security/config/SpringSecurityConfig.java
+++ b/play-admin/src/main/java/com/starry/admin/common/security/config/SpringSecurityConfig.java
@@ -46,6 +46,7 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Resource
private CustomLogoutSuccessHandler customLogoutSuccessHandler;
+
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity.csrf().disable()// 由于使用的是JWT,我们这里不需要csrf
diff --git a/play-admin/src/main/java/com/starry/admin/common/security/filter/JwtAuthenticationTokenFilter.java b/play-admin/src/main/java/com/starry/admin/common/security/filter/JwtAuthenticationTokenFilter.java
index 6625177..4ff3735 100644
--- a/play-admin/src/main/java/com/starry/admin/common/security/filter/JwtAuthenticationTokenFilter.java
+++ b/play-admin/src/main/java/com/starry/admin/common/security/filter/JwtAuthenticationTokenFilter.java
@@ -1,19 +1,25 @@
package com.starry.admin.common.security.filter;
+import cn.hutool.core.util.StrUtil;
import com.starry.admin.common.component.JwtToken;
import com.starry.admin.common.domain.LoginUser;
+import com.starry.admin.common.exception.CustomException;
import com.starry.admin.modules.clear.service.impl.PlayClerkUserInfoServiceImpl;
import com.starry.admin.modules.custom.service.impl.PlayCustomUserInfoServiceImpl;
+import com.starry.admin.modules.platform.entity.SysTenantEntity;
+import com.starry.admin.modules.platform.service.ISysTenantService;
import com.starry.admin.modules.weichat.service.WxTokenService;
import com.starry.admin.utils.SecurityUtils;
import com.starry.common.constant.Constants;
-import com.starry.common.utils.StringUtils;
+import com.starry.common.redis.RedisCache;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
import org.springframework.web.filter.OncePerRequestFilter;
+import org.springframework.web.servlet.HandlerExceptionResolver;
import javax.annotation.Resource;
import javax.servlet.FilterChain;
@@ -37,33 +43,36 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
@Resource
private JwtToken jwtToken;
+ @Resource
+ @Qualifier("handlerExceptionResolver")
+ private HandlerExceptionResolver resolver;
+
@Resource
private PlayCustomUserInfoServiceImpl customUserInfoService;
@Resource
private PlayClerkUserInfoServiceImpl clerkUserInfoService;
+ @Resource
+ private ISysTenantService sysTenantService;
+
+ @Resource
+ private RedisCache redisCache;
+
@Override
- protected void doFilterInternal(@NotNull HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
+ protected void doFilterInternal(@NotNull HttpServletRequest httpServletRequest, @NotNull HttpServletResponse httpServletResponse, @NotNull FilterChain filterChain) throws ServletException, IOException {
// 微信公众号的请求
if (httpServletRequest.getServletPath().startsWith("/wx/")) {
String clerkToken = httpServletRequest.getHeader(Constants.CLERK_USER_LOGIN_TOKEN);
String customToken = httpServletRequest.getHeader(Constants.CUSTOM_USER_LOGIN_TOKEN);
- if (StringUtils.isNotEmpty(clerkToken) || StringUtils.isNotEmpty(customToken)) {
- String userId = tokenService.getWxUserIdByToken(StringUtils.isNotEmpty(clerkToken) ? clerkToken : customToken);
- if (clerkToken != null) {
- SecurityUtils.setTenantId(clerkUserInfoService.selectById(userId).getTenantId());
- } else {
- SecurityUtils.setTenantId(customUserInfoService.selectById(userId).getTenantId());
- }
- } else {
- // 如果是微信端接口,并且未登录的话,从head中获取token
- String header = httpServletRequest.getHeader("tenantkey");
- // 根据租户表信息,查询租户ID(暂时先写死)
- String tenantId = "9999";
- SecurityUtils.setTenantId(header);
+ String tenantKey = httpServletRequest.getHeader("tenantkey");
+ String tenantId = getTenantId(clerkToken, customToken, tenantKey);
+ if (!checkTenantId(tenantId)) {
+ resolver.resolveException(httpServletRequest, httpServletResponse, null, new CustomException("租户信息异常"));
+ return;
}
+ SecurityUtils.setTenantId(tenantId);
} else {
// 管理端的请求
LoginUser jwtUser = jwtToken.getNewLoginUser(httpServletRequest);
@@ -76,4 +85,61 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
}
filterChain.doFilter(httpServletRequest, httpServletResponse);
}
+
+
+ /**
+ * 微信公众号端访问时,获取当前用户租户ID
+ * 如果用户(陪玩或客户)已登录,从token中获取租户ID
+ * 如果用户未登录,从tenantKey中获取租户ID
+ *
+ * @param clerkToken 陪玩登录Key
+ * @param customToken 客户登录key
+ * @param tenantKey 租户标识
+ */
+ public String getTenantId(String clerkToken, String customToken, String tenantKey) {
+ String tenantId = "";
+ //如果用户(陪玩或客户)已登录,从token中获取租户ID
+ if (StrUtil.isNotBlank(clerkToken) || StrUtil.isNotBlank(customToken)) {
+ String userId;
+ try {
+ userId = tokenService.getWxUserIdByToken(StrUtil.isNotBlank(clerkToken) ? clerkToken : customToken);
+ } catch (Exception e) {
+ return "";
+ }
+ if (clerkToken != null) {
+ String redisKey = "TENANT_INFO:" + userId;
+ SecurityUtils.setTenantId(redisCache.getCacheObject(redisKey));
+ tenantId = clerkUserInfoService.selectById(userId).getTenantId();
+ } else {
+ tenantId = customUserInfoService.selectById(userId).getTenantId();
+ }
+ } else {
+ // 如果用户未登录,从tenantKey中获取租户ID,然后验证租户ID是否存在,以及租户是否过期等
+ SysTenantEntity entity = sysTenantService.selectByTenantKey(tenantKey);
+ if (entity != null) {
+ tenantId = entity.getTenantId();
+ }
+ }
+ return tenantId;
+ }
+
+ /**
+ * 校验租户是否正常
+ *
+ * @param tenantId 租户ID
+ * @return true:租户正常,false:租户不正常
+ */
+ public boolean checkTenantId(String tenantId) {
+ if (StrUtil.isBlankIfStr(tenantId)) {
+ return false;
+ }
+ SysTenantEntity entity = sysTenantService.selectSysTenantByTenantId(tenantId);
+ if (entity == null) {
+ return false;
+ }
+ //判断租户是否过期
+ //...
+ //校验通过
+ return true;
+ }
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkClassificationInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkClassificationInfoController.java
index bc1d4f3..a726269 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkClassificationInfoController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkClassificationInfoController.java
@@ -6,7 +6,6 @@ import com.starry.admin.modules.clear.service.IPlayClerkClassificationInfoServic
import com.starry.common.annotation.Log;
import com.starry.common.enums.BusinessType;
import com.starry.common.result.R;
-import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -27,10 +26,9 @@ public class PlayClerkClassificationInfoController {
/**
* 查询店员分类列表
*/
- @PreAuthorize("@customSs.hasPermission('play:info:list')")
@GetMapping("/listAll")
public R listAll() {
- List list = playClerkClassificationInfoService.selectPlayClerkClassificationInfo();
+ List list = playClerkClassificationInfoService.selectAll();
return R.ok(list);
}
@@ -38,7 +36,6 @@ public class PlayClerkClassificationInfoController {
/**
* 查询店员分类列表
*/
- @PreAuthorize("@customSs.hasPermission('play:info:list')")
@GetMapping("/list")
public R list(PlayClerkClassificationInfoEntity playClerkClassificationInfo) {
IPage list = playClerkClassificationInfoService.selectPlayClerkClassificationInfoByPage(playClerkClassificationInfo);
@@ -48,7 +45,6 @@ public class PlayClerkClassificationInfoController {
/**
* 获取店员分类详细信息
*/
- @PreAuthorize("@customSs.hasPermission('play:info:query')")
@GetMapping(value = "/{id}")
public R getInfo(@PathVariable("id") String id) {
return R.ok(playClerkClassificationInfoService.selectPlayClerkClassificationInfoById(id));
@@ -57,7 +53,6 @@ public class PlayClerkClassificationInfoController {
/**
* 新增店员分类
*/
- @PreAuthorize("@customSs.hasPermission('play:info:create')")
@Log(title = "店员分类", businessType = BusinessType.INSERT)
@PostMapping("/create")
public R create(@RequestBody PlayClerkClassificationInfoEntity playClerkClassificationInfo) {
@@ -71,7 +66,6 @@ public class PlayClerkClassificationInfoController {
/**
* 修改店员分类
*/
- @PreAuthorize("@customSs.hasPermission('play:info:edit')")
@Log(title = "店员分类", businessType = BusinessType.UPDATE)
@PostMapping(value = "/update/{id}")
public R update(@PathVariable String id, @RequestBody PlayClerkClassificationInfoEntity playClerkClassificationInfo) {
@@ -86,7 +80,6 @@ public class PlayClerkClassificationInfoController {
/**
* 删除店员分类
*/
- @PreAuthorize("@customSs.hasPermission('play:info:remove')")
@Log(title = "店员分类", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R remove(@PathVariable String[] ids) {
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkCommodityController.java b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkCommodityController.java
index b2a3efd..89080a3 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkCommodityController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkCommodityController.java
@@ -9,7 +9,6 @@ import com.starry.common.annotation.Log;
import com.starry.common.enums.BusinessType;
import com.starry.common.result.R;
import com.starry.common.utils.ConvertUtil;
-import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -31,7 +30,6 @@ public class PlayClerkCommodityController {
/**
* 查询陪玩服务项目列表
*/
- @PreAuthorize("@customSs.hasPermission('play:commodity:list')")
@GetMapping("/listAllCommodity")
public R listAllCommodity() {
List list = playClerkCommodityService.selectAll();
@@ -42,7 +40,6 @@ public class PlayClerkCommodityController {
/**
* 查询陪玩服务项目列表
*/
- @PreAuthorize("@customSs.hasPermission('play:commodity:list')")
@GetMapping("/list")
public R list(PlayClerkCommodityEntity playClerkCommodity) {
IPage list = playClerkCommodityService.selectPlayClerkCommodityByPage(playClerkCommodity);
@@ -52,7 +49,6 @@ public class PlayClerkCommodityController {
/**
* 获取陪玩服务项目详细信息
*/
- @PreAuthorize("@customSs.hasPermission('play:commodity:query')")
@GetMapping(value = "/{id}")
public R getInfo(@PathVariable("id") String id) {
return R.ok(playClerkCommodityService.selectPlayClerkCommodityById(id));
@@ -61,7 +57,6 @@ public class PlayClerkCommodityController {
/**
* 新增陪玩服务项目
*/
- @PreAuthorize("@customSs.hasPermission('play:commodity:create')")
@Log(title = "陪玩服务项目", businessType = BusinessType.INSERT)
@PostMapping("/create")
public R create(@RequestBody PlayClerkCommodityEntity playClerkCommodity) {
@@ -73,7 +68,6 @@ public class PlayClerkCommodityController {
}
- @PreAuthorize("@customSs.hasPermission('play:commodity:edit')")
@Log(title = "启停陪玩服务项目", businessType = BusinessType.UPDATE)
@PostMapping(value = "/startStopClerkItem")
public R startStopClerkItem(@Validated @RequestBody PlayClerkCommodityEditVo vo) {
@@ -85,7 +79,6 @@ public class PlayClerkCommodityController {
/**
* 修改陪玩服务项目
*/
- @PreAuthorize("@customSs.hasPermission('play:commodity:edit')")
@Log(title = "陪玩服务项目", businessType = BusinessType.UPDATE)
@PostMapping(value = "/update/{id}")
public R update(@PathVariable String id, @RequestBody PlayClerkCommodityEntity playClerkCommodity) {
@@ -100,7 +93,6 @@ public class PlayClerkCommodityController {
/**
* 删除陪玩服务项目
*/
- @PreAuthorize("@customSs.hasPermission('play:commodity:remove')")
@Log(title = "陪玩服务项目", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R remove(@PathVariable String[] ids) {
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkDataReviewInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkDataReviewInfoController.java
new file mode 100644
index 0000000..17c7880
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkDataReviewInfoController.java
@@ -0,0 +1,132 @@
+package com.starry.admin.modules.clear.controller;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.starry.admin.modules.clear.module.entity.PlayClerkDataReviewInfoEditVo;
+import com.starry.admin.modules.clear.module.entity.PlayClerkDataReviewInfoEntity;
+import com.starry.admin.modules.clear.module.entity.PlayClerkDataReviewInfoQueryVo;
+import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
+import com.starry.admin.modules.clear.service.IPlayClerkCommodityService;
+import com.starry.admin.modules.clear.service.IPlayClerkDataReviewInfoService;
+import com.starry.admin.modules.clear.service.impl.PlayClerkUserInfoServiceImpl;
+import com.starry.admin.modules.weichat.entity.PlayClerkUserAlbumVo;
+import com.starry.admin.modules.weichat.entity.PlayClerkUserAudioVo;
+import com.starry.admin.modules.weichat.entity.PlayClerkUserAvatarVo;
+import com.starry.common.annotation.Log;
+import com.starry.common.enums.BusinessType;
+import com.starry.common.result.R;
+import com.starry.common.utils.ConvertUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * 店员资料审核Controller
+ *
+ * @author admin
+ * @since 2024-04-11
+ */
+@RestController
+@RequestMapping("/clerk/data/review")
+public class PlayClerkDataReviewInfoController {
+ private static final Logger log = LoggerFactory.getLogger(PlayClerkDataReviewInfoController.class);
+ @Resource
+ private IPlayClerkDataReviewInfoService playClerkDataReviewInfoService;
+
+
+ @Resource
+ private PlayClerkUserInfoServiceImpl playClerkUserInfoService;
+
+
+ @Resource
+ private IPlayClerkCommodityService playClerkCommodityService;
+
+
+ /**
+ * 查询店员资料审核列表
+ */
+ @PostMapping("/listByPage")
+ public R list(PlayClerkDataReviewInfoQueryVo vo) {
+ IPage list = playClerkDataReviewInfoService.selectPlayClerkDataReviewInfoByPage(vo);
+ return R.ok(list);
+ }
+
+ /**
+ * 获取店员资料审核详细信息
+ */
+ @GetMapping(value = "/{id}")
+ public R getInfo(@PathVariable("id") String id) {
+ return R.ok(playClerkDataReviewInfoService.selectPlayClerkDataReviewInfoById(id));
+ }
+
+
+ /**
+ * 修改店员资料审核
+ */
+
+ @Log(title = "店员资料审核", businessType = BusinessType.UPDATE)
+ @PostMapping(value = "/update")
+ public R update(@RequestBody PlayClerkDataReviewInfoEditVo vo) {
+ PlayClerkDataReviewInfoEntity entity = ConvertUtil.entityToVo(vo, PlayClerkDataReviewInfoEntity.class);
+ boolean success = playClerkDataReviewInfoService.update(entity);
+ if (success) {
+ entity = playClerkDataReviewInfoService.selectPlayClerkDataReviewInfoById(entity.getId());
+ if (entity != null && entity.getState().equals("1")) {
+ switch (entity.getDataType()) {
+ case "0": {
+ //陪玩申请审批通过,初始化陪玩信息
+ PlayClerkUserInfoEntity item = JSONObject.parseObject(entity.getContent(), PlayClerkUserInfoEntity.class);
+ item.setId(entity.getPlayUserId());
+ item.setClerkState("1");
+ playClerkUserInfoService.update(item);
+ //初始化陪玩服务项目
+ playClerkCommodityService.initClerkCommodity(entity.getPlayUserId());
+ break;
+ }
+ case "1": {
+ PlayClerkUserAvatarVo item = JSONObject.parseObject(entity.getContent(), PlayClerkUserAvatarVo.class);
+ PlayClerkUserInfoEntity userInfo = new PlayClerkUserInfoEntity();
+ userInfo.setId(entity.getPlayUserId());
+ userInfo.setAvatar(item.getAvatar());
+ playClerkUserInfoService.update(userInfo);
+ break;
+ }
+ case "2": {
+ PlayClerkUserAlbumVo item = JSONObject.parseObject(entity.getContent(), PlayClerkUserAlbumVo.class);
+ PlayClerkUserInfoEntity userInfo = new PlayClerkUserInfoEntity();
+ userInfo.setId(entity.getPlayUserId());
+ userInfo.setAlbum(item.getAlbum());
+ playClerkUserInfoService.update(userInfo);
+
+ break;
+ }
+ case "3": {
+ PlayClerkUserAudioVo item = JSONObject.parseObject(entity.getContent(), PlayClerkUserAudioVo.class);
+ PlayClerkUserInfoEntity userInfo = new PlayClerkUserInfoEntity();
+ userInfo.setId(entity.getPlayUserId());
+ userInfo.setAudio(item.getAudio());
+ playClerkUserInfoService.update(userInfo);
+ break;
+ }
+ default:
+ log.error("dataType not,dataType = {}", entity.getDataType());
+ }
+
+ }
+
+ return R.ok();
+ }
+ return R.error("修改失败");
+ }
+
+ /**
+ * 删除店员资料审核
+ */
+ @Log(title = "店员资料审核", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@PathVariable String[] ids) {
+ return R.ok(playClerkDataReviewInfoService.deletePlayClerkDataReviewInfoByIds(ids));
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkLevelInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkLevelInfoController.java
index 4cd74b4..3073523 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkLevelInfoController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkLevelInfoController.java
@@ -8,7 +8,6 @@ import com.starry.common.annotation.Log;
import com.starry.common.enums.BusinessType;
import com.starry.common.result.R;
import com.starry.common.utils.ConvertUtil;
-import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -29,7 +28,6 @@ public class PlayClerkLevelInfoController {
/**
* 查询店员等级列表
*/
- @PreAuthorize("@customSs.hasPermission('play:info:list')")
@GetMapping("/listAll")
public R listAll() {
return R.ok(playClerkLevelInfoService.selectAll());
@@ -38,7 +36,6 @@ public class PlayClerkLevelInfoController {
/**
* 获取店员等级详细信息
*/
- @PreAuthorize("@customSs.hasPermission('play:info:query')")
@GetMapping(value = "/{id}")
public R getInfo(@PathVariable("id") String id) {
return R.ok(playClerkLevelInfoService.selectPlayClerkLevelInfoById(id));
@@ -47,7 +44,6 @@ public class PlayClerkLevelInfoController {
/**
* 新增店员等级
*/
- @PreAuthorize("@customSs.hasPermission('play:info:create')")
@Log(title = "店员等级", businessType = BusinessType.INSERT)
@PostMapping("/create")
public R create(@RequestBody PlayClerkLevelAddVo vo) {
@@ -64,7 +60,6 @@ public class PlayClerkLevelInfoController {
/**
* 修改店员等级
*/
- @PreAuthorize("@customSs.hasPermission('play:info:edit')")
@Log(title = "店员等级", businessType = BusinessType.UPDATE)
@PostMapping(value = "/update")
public R update(@Validated @RequestBody PlayClerkLevelEditVo vo) {
@@ -79,7 +74,6 @@ public class PlayClerkLevelInfoController {
/**
* 删除店员等级
*/
- @PreAuthorize("@customSs.hasPermission('play:info:remove')")
@Log(title = "店员等级", businessType = BusinessType.DELETE)
@DeleteMapping("delMaxLevel")
public R remove() {
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkUserInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkUserInfoController.java
index 79fc75c..98a242e 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkUserInfoController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/controller/PlayClerkUserInfoController.java
@@ -18,7 +18,6 @@ import com.starry.common.annotation.Log;
import com.starry.common.enums.BusinessType;
import com.starry.common.result.R;
import com.starry.common.utils.ConvertUtil;
-import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -56,8 +55,7 @@ public class PlayClerkUserInfoController {
/**
* 查询店员列表
*/
- @PreAuthorize("@customSs.hasPermission('play:info:list')")
- @GetMapping("/wx/listByPage")
+ @PostMapping("listByPage")
public R listByPage(PlayClerkUserInfoQueryVo vo) {
IPage list = playClerkUserInfoService.selectPlayClerkUserInfoByPage(vo);
return R.ok(list);
@@ -67,7 +65,6 @@ public class PlayClerkUserInfoController {
/**
* 查询店员列表
*/
- @PreAuthorize("@customSs.hasPermission('play:info:list')")
@GetMapping("/list")
public R list(PlayClerkUserInfoQueryVo vo) {
IPage list = playClerkUserInfoService.selectPlayClerkUserInfoByPage(vo);
@@ -77,7 +74,6 @@ public class PlayClerkUserInfoController {
/**
* 获取店员详细信息
*/
- @PreAuthorize("@customSs.hasPermission('play:info:query')")
@GetMapping(value = "/{id}")
public R getInfo(@PathVariable("id") String id) {
return R.ok(playClerkUserInfoService.selectById(id));
@@ -87,7 +83,6 @@ public class PlayClerkUserInfoController {
/**
* 微信端口新增店员
*/
- @PreAuthorize("@customSs.hasPermission('play:info:create')")
@Log(title = "店员", businessType = BusinessType.INSERT)
@PostMapping("/wx/add")
public R add(@Validated @RequestBody PlayClerkUserAddToWxVo vo) {
@@ -110,7 +105,6 @@ public class PlayClerkUserInfoController {
/**
* 新增店员
*/
- @PreAuthorize("@customSs.hasPermission('play:info:create')")
@Log(title = "店员", businessType = BusinessType.INSERT)
@PostMapping("/create")
public R create(@Validated @RequestBody PlayClerkUserAddVo vo) {
@@ -126,7 +120,6 @@ public class PlayClerkUserInfoController {
/**
* 修改店员
*/
- @PreAuthorize("@customSs.hasPermission('play:info:edit')")
@Log(title = "店员", businessType = BusinessType.UPDATE)
@PostMapping(value = "/update")
public R update(@Validated @RequestBody PlayClerkUserEditVo vo) {
@@ -141,7 +134,6 @@ public class PlayClerkUserInfoController {
/**
* 删除店员
*/
- @PreAuthorize("@customSs.hasPermission('play:info:remove')")
@Log(title = "店员", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R remove(@PathVariable String[] ids) {
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/mapper/PlayClerkDataReviewInfoMapper.java b/play-admin/src/main/java/com/starry/admin/modules/clear/mapper/PlayClerkDataReviewInfoMapper.java
new file mode 100644
index 0000000..8c45f4e
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/mapper/PlayClerkDataReviewInfoMapper.java
@@ -0,0 +1,16 @@
+package com.starry.admin.modules.clear.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.starry.admin.modules.clear.module.entity.PlayClerkDataReviewInfoEntity;
+
+/**
+ * 店员资料审核Mapper接口
+ *
+ * @author admin
+ * @since 2024-04-11
+ */
+public interface PlayClerkDataReviewInfoMapper extends BaseMapper {
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/mapper/PlayClerkUserInfoMapper.java b/play-admin/src/main/java/com/starry/admin/modules/clear/mapper/PlayClerkUserInfoMapper.java
index 50f0548..3ebac14 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/mapper/PlayClerkUserInfoMapper.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/mapper/PlayClerkUserInfoMapper.java
@@ -1,7 +1,7 @@
package com.starry.admin.modules.clear.mapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
@@ -11,7 +11,7 @@ import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
* @author admin
* @since 2024-03-30
*/
-public interface PlayClerkUserInfoMapper extends BaseMapper {
+public interface PlayClerkUserInfoMapper extends MPJBaseMapper {
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClarkUserEvaluateInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClarkUserEvaluateInfoEntity.java
new file mode 100644
index 0000000..bef019c
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClarkUserEvaluateInfoEntity.java
@@ -0,0 +1,82 @@
+package com.starry.admin.modules.clear.module.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 店员评价信息
+ */
+@Data
+public class PlayClarkUserEvaluateInfoEntity {
+
+ private String id;
+
+
+ /**
+ * 评价人ID
+ */
+ private String evaluatorId;
+
+
+ /**
+ * 评价人昵称
+ */
+ private String evaluatorUsername;
+
+ /**
+ * 评价人头像
+ */
+ private String evaluatorAvatar;
+
+ /**
+ * 评价内容
+ */
+ private String con;
+
+ /**
+ * 评价时间
+ */
+ private Date evaluateTime;
+
+
+ /**
+ * 订单ID
+ */
+ private String orderId;
+
+ /**
+ * 店员昵称
+ */
+ private String clarkUsername;
+
+ /**
+ * 商品ID
+ */
+ private String commodityId;
+
+ /**
+ * 商品名称
+ */
+ private String commodityName;
+
+ /**
+ * 商品单位
+ */
+ private String commodityUnit;
+
+
+ public PlayClarkUserEvaluateInfoEntity(String id, String evaluatorId, String evaluatorUsername, String evaluatorAvatar, String con, Date evaluateTime, String orderId, String clarkUsername, String commodityId, String commodityName, String commodityUnit) {
+ this.id = id;
+ this.evaluatorId = evaluatorId;
+ this.evaluatorUsername = evaluatorUsername;
+ this.evaluatorAvatar = evaluatorAvatar;
+ this.con = con;
+ this.evaluateTime = evaluateTime;
+ this.orderId = orderId;
+ this.clarkUsername = clarkUsername;
+ this.commodityId = commodityId;
+ this.commodityName = commodityName;
+ this.commodityUnit = commodityUnit;
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClarkUserTrendsInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClarkUserTrendsInfoEntity.java
new file mode 100644
index 0000000..688c882
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClarkUserTrendsInfoEntity.java
@@ -0,0 +1,44 @@
+package com.starry.admin.modules.clear.module.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 店员动态
+ */
+@Data
+public class PlayClarkUserTrendsInfoEntity {
+
+ private String id;
+
+
+ private String title;
+
+ /**
+ * 动态类型(0:照片,1:视频)
+ */
+ private String type;
+
+
+ private String con;
+
+
+ private Date releaseTime;
+
+ public PlayClarkUserTrendsInfoEntity(String id, String title, String con, Date releaseTime) {
+ this.id = id;
+ this.title = title;
+ this.con = con;
+ this.releaseTime = releaseTime;
+ this.type = "1";
+ }
+
+ public PlayClarkUserTrendsInfoEntity(String id, String title, String type, String con, Date releaseTime) {
+ this.id = id;
+ this.title = title;
+ this.type = type;
+ this.con = con;
+ this.releaseTime = releaseTime;
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkDataReviewInfoEditVo.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkDataReviewInfoEditVo.java
new file mode 100644
index 0000000..4c041ed
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkDataReviewInfoEditVo.java
@@ -0,0 +1,41 @@
+package com.starry.admin.modules.clear.module.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 店员资料审核对象 play_clerk_data_review_info
+ *
+ * @author admin
+ * @since 2024-04-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class PlayClerkDataReviewInfoEditVo {
+
+
+ /**
+ * UUID
+ */
+ private String id;
+
+ /**
+ * 资料类型[0:店员申请,1:头像;2:相册;3:录音]
+ */
+ private String dataType;
+
+ /**
+ * 审核状态
+ * 0:未审核
+ * 1:审核通过
+ * 2:审核未通过
+ */
+ private String state;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkDataReviewInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkDataReviewInfoEntity.java
new file mode 100644
index 0000000..7ea0612
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkDataReviewInfoEntity.java
@@ -0,0 +1,76 @@
+package com.starry.admin.modules.clear.module.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.starry.common.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 店员资料审核对象 play_clerk_data_review_info
+ *
+ * @author admin
+ * @since 2024-04-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("play_clerk_data_review_info")
+public class PlayClerkDataReviewInfoEntity extends BaseEntity {
+
+
+ /**
+ * UUID
+ */
+ private String id;
+
+ /**
+ * 租户ID
+ */
+ private String tenantId;
+
+ /**
+ * 店员ID
+ */
+ private String playUserId;
+
+ /**
+ * 资料类型[0:店员申请,1:头像;2:相册;3:录音]
+ */
+ private String dataType;
+
+ /**
+ * 资料内容(JSON格式)
+ */
+ private String content;
+
+ /**
+ * 审核状态
+ * 0:未审核
+ * 1:审核通过
+ * 2:审核未通过
+ */
+ private String state;
+
+ /**
+ * 资料添加时间
+ */
+ private Date addTime;
+
+ /**
+ * 审核时间
+ */
+ private Date reviewTime;
+
+ /**
+ * 审核人
+ */
+ private String reviewBy;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkDataReviewInfoQueryVo.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkDataReviewInfoQueryVo.java
new file mode 100644
index 0000000..1cc8131
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkDataReviewInfoQueryVo.java
@@ -0,0 +1,65 @@
+package com.starry.admin.modules.clear.module.entity;
+
+import com.starry.common.domain.BasePageEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 店员资料审核对象 play_clerk_data_review_info
+ *
+ * @author admin
+ * @since 2024-04-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class PlayClerkDataReviewInfoQueryVo extends BasePageEntity {
+
+
+ /**
+ * UUID
+ */
+ private String id;
+
+
+ /**
+ * 资料类型[0:店员申请,1:头像;2:相册;3:录音]
+ */
+ private String dataType;
+
+ /**
+ * 资料内容(JSON格式)
+ */
+ private String content;
+
+ /**
+ * 审核状态
+ * 0:未审核
+ * 1:审核通过
+ * 2:审核未通过
+ */
+ private String state = "0";
+
+ /**
+ * 资料添加时间
+ */
+ private Date addTime;
+
+ /**
+ * 审核时间
+ */
+ private Date reviewTime;
+
+ /**
+ * 审核人
+ */
+ private String reviewBy;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserDetailResultVo.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserDetailResultVo.java
new file mode 100644
index 0000000..2db73d2
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserDetailResultVo.java
@@ -0,0 +1,85 @@
+package com.starry.admin.modules.clear.module.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PlayClerkUserDetailResultVo {
+
+ /**
+ * UUID
+ */
+ private String id;
+
+ /**
+ * 店员昵称
+ */
+ private String nickname;
+
+ /**
+ * 店员等级
+ */
+ private String levelId;
+
+ /**
+ * 店员等级
+ */
+ private String levelName;
+
+ /**
+ * 性别[0:未知;1:男;2:女]
+ */
+ private String sex;
+
+ /**
+ * 头像
+ */
+ private String avatar;
+
+ /**
+ * 头像框
+ */
+ private String avatarFrameId;
+
+ /**
+ * 音频
+ */
+ private String audio;
+
+ /**
+ * 标签
+ */
+ private String label;
+
+ /**
+ * 个性签名
+ */
+ private String signature;
+
+ /**
+ * 年龄
+ */
+ private Integer age;
+
+ /**
+ * 关注(0:未关注,1:已关注)
+ */
+ private String followState = "0";
+ /**
+ * 价格
+ */
+ private String price;
+
+ /**
+ * 礼物列表
+ */
+
+ private List gifts;
+
+ /**
+ * 服务项目
+ */
+ private List commodity;
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoEntity.java
index d4784f7..56c8f39 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoEntity.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoEntity.java
@@ -1,11 +1,16 @@
package com.starry.admin.modules.clear.module.entity;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.starry.admin.common.conf.StringTypeHandler;
import com.starry.common.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* 店员对象 play_clerk_user_info
*
@@ -14,7 +19,7 @@ import lombok.EqualsAndHashCode;
*/
@Data
@EqualsAndHashCode(callSuper = false)
-@TableName("play_clerk_user_info")
+@TableName(value = "play_clerk_user_info", autoResultMap = true)
public class PlayClerkUserInfoEntity extends BaseEntity {
@@ -28,6 +33,11 @@ public class PlayClerkUserInfoEntity extends BaseEntity
*/
private String tenantId;
+ /**
+ * 电话号码
+ */
+ private String phone;
+
/**
* 陪玩用户ID
*/
@@ -54,7 +64,7 @@ public class PlayClerkUserInfoEntity extends BaseEntity
private String typeId;
/**
- * 店员性别(1:男:0:女)
+ * 性别[0:未知;1:男;2:女]
*/
private String sex;
@@ -71,7 +81,7 @@ public class PlayClerkUserInfoEntity extends BaseEntity
/**
* 音频
*/
- private String audioFrequency;
+ private String audio;
/**
* 星座
@@ -81,7 +91,8 @@ public class PlayClerkUserInfoEntity extends BaseEntity
/**
* 标签
*/
- private String label;
+ @TableField(typeHandler = StringTypeHandler.class)
+ private List label = new ArrayList<>();
/**
* 个性签名
@@ -91,7 +102,7 @@ public class PlayClerkUserInfoEntity extends BaseEntity
/**
* 年龄
*/
- private Long age;
+ private Integer age;
/**
* 所在国家
@@ -118,7 +129,6 @@ public class PlayClerkUserInfoEntity extends BaseEntity
*/
private String remark;
-
/**
* 在职状态(1:在职,0:离职)
*/
@@ -164,6 +174,30 @@ public class PlayClerkUserInfoEntity extends BaseEntity
*/
private String randomOrder;
+ /**
+ * 店员状态(0:不是陪玩,1:陪玩)
+ */
+ private String clerkState;
+ /**
+ * 相册
+ */
+ @TableField(typeHandler = StringTypeHandler.class)
+ private List album = new ArrayList<>();
+ /**
+ * 微信二维码
+ **/
+ private String weChatCodeImage;
+
+ /**
+ * 微信收款码图片
+ **/
+ private String weChatPayImage;
+
+ /**
+ * 支付宝收款码图片
+ **/
+ private String alipayImage;
+
/**
* 最近一次登录token
*/
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoQueryVo.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoQueryVo.java
index 290dc0b..afeded3 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoQueryVo.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserInfoQueryVo.java
@@ -5,7 +5,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
/**
- * 店员对象 play_clerk_user_info
+ * 分页查询店员对象
*
* @author admin
* @since 2024-03-30
@@ -15,6 +15,10 @@ import lombok.EqualsAndHashCode;
public class PlayClerkUserInfoQueryVo extends BasePageEntity {
+ /**
+ * 店员昵称
+ **/
+ private String nickname;
/**
* 店员等级
*/
@@ -41,5 +45,16 @@ public class PlayClerkUserInfoQueryVo extends BasePageEntity {
*/
private String listingState;
+ /**
+ * 员工状态【1:是陪玩,0:不是陪玩】
+ */
+ private String clerkState;
+
+ /**
+ * 手机号码
+ */
+ private String phone;
+
+
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserListResultVo.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserListResultVo.java
new file mode 100644
index 0000000..d93c33a
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayClerkUserListResultVo.java
@@ -0,0 +1,84 @@
+package com.starry.admin.modules.clear.module.entity;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class PlayClerkUserListResultVo {
+
+ /**
+ * UUID
+ */
+ private String id;
+
+ /**
+ * 店员昵称
+ */
+ private String nickname;
+
+ /**
+ * 店员等级
+ */
+ private String levelId;
+
+ /**
+ * 店员等级
+ */
+ private String levelName;
+
+
+ /**
+ * 性别[0:未知;1:男;2:女]
+ */
+ private String sex;
+
+ /**
+ * 头像
+ */
+ private String avatar;
+
+
+ /**
+ * 音频
+ */
+ private String audio;
+
+ /**
+ * 标签
+ */
+ private List label = new ArrayList<>();
+
+ /**
+ * 相册
+ */
+ private List album = new ArrayList<>();
+
+ /**
+ * 个性签名
+ */
+ private String signature;
+
+ /**
+ * 年龄
+ */
+ private Integer age;
+
+
+ /**
+ * 关注(0:未关注,1:已关注)
+ */
+ private String followState = "0";
+
+ /**
+ * 在线状态【1:在线,0:离线】
+ */
+ private String onlineState;
+
+ /**
+ * 服务项目
+ */
+ private List commodity;
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayGiftInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayGiftInfoEntity.java
new file mode 100644
index 0000000..77f0488
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/entity/PlayGiftInfoEntity.java
@@ -0,0 +1,47 @@
+package com.starry.admin.modules.clear.module.entity;
+
+
+import lombok.Data;
+
+/**
+ * 礼物信息
+ */
+
+@Data
+public class PlayGiftInfoEntity {
+
+
+ /**
+ * 礼物ID
+ */
+ private String id;
+
+ /**
+ * 礼物名称
+ */
+ private String name;
+
+ /**
+ * 礼物地址
+ */
+ private String url;
+
+ /**
+ * 获得数量
+ */
+ private Integer number;
+
+
+ /**
+ * 礼物状态(0:正常,1:已下架)
+ */
+ private String state;
+
+ public PlayGiftInfoEntity(String id, String name, String url, Integer number, String state) {
+ this.id = id;
+ this.name = name;
+ this.url = url;
+ this.number = number;
+ this.state = state;
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/module/vo/PlayClerkCommodityEditVo.java b/play-admin/src/main/java/com/starry/admin/modules/clear/module/vo/PlayClerkCommodityEditVo.java
index c4318d2..0b24c8e 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/module/vo/PlayClerkCommodityEditVo.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/module/vo/PlayClerkCommodityEditVo.java
@@ -3,6 +3,7 @@ package com.starry.admin.modules.clear.module.vo;
import lombok.Data;
import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
@Data
public class PlayClerkCommodityEditVo {
@@ -20,5 +21,6 @@ public class PlayClerkCommodityEditVo {
* 1:启用
*/
@NotNull(message = "服务状态不能为空")
+ @Pattern(regexp = "[01]", message = "服务状态必须为0或1")
private String enablingState;
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkClassificationInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkClassificationInfoService.java
index a89daf9..4d5c659 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkClassificationInfoService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkClassificationInfoService.java
@@ -26,7 +26,7 @@ public interface IPlayClerkClassificationInfoService extends IService selectPlayClerkClassificationInfo();
+ List selectAll();
/**
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkCommodityService.java b/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkCommodityService.java
index e34f335..c0f54e2 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkCommodityService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkCommodityService.java
@@ -23,6 +23,14 @@ public interface IPlayClerkCommodityService extends IService
+ */
+ List selectByUser(String playUserId);
+
/**
* 查询当前陪玩所有服务项目
*/
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkDataReviewInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkDataReviewInfoService.java
new file mode 100644
index 0000000..5f72a17
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkDataReviewInfoService.java
@@ -0,0 +1,72 @@
+package com.starry.admin.modules.clear.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.starry.admin.modules.clear.module.entity.PlayClerkDataReviewInfoEntity;
+import com.starry.admin.modules.clear.module.entity.PlayClerkDataReviewInfoQueryVo;
+
+import java.util.List;
+
+/**
+ * 店员资料审核Service接口
+ *
+ * @author admin
+ * @since 2024-04-11
+ */
+public interface IPlayClerkDataReviewInfoService extends IService {
+ /**
+ * 查询店员资料审核
+ *
+ * @param id 店员资料审核主键
+ * @return 店员资料审核
+ */
+ PlayClerkDataReviewInfoEntity selectPlayClerkDataReviewInfoById(String id);
+
+ /**
+ * 查询店员资料审核列表
+ *
+ * @param entity 店员资料审核
+ * @return 店员资料审核集合
+ */
+ List queryList(PlayClerkDataReviewInfoEntity entity);
+
+ /**
+ * 查询店员资料审核列表
+ *
+ * @param playClerkDataReviewInfo 店员资料审核
+ * @return 店员资料审核集合
+ */
+ IPage selectPlayClerkDataReviewInfoByPage(PlayClerkDataReviewInfoQueryVo playClerkDataReviewInfo);
+
+ /**
+ * 新增店员资料审核
+ *
+ * @param playClerkDataReviewInfo 店员资料审核
+ * @return 结果
+ */
+ boolean create(PlayClerkDataReviewInfoEntity playClerkDataReviewInfo);
+
+ /**
+ * 修改店员资料审核
+ *
+ * @param playClerkDataReviewInfo 店员资料审核
+ * @return 结果
+ */
+ boolean update(PlayClerkDataReviewInfoEntity playClerkDataReviewInfo);
+
+ /**
+ * 批量删除店员资料审核
+ *
+ * @param ids 需要删除的店员资料审核主键集合
+ * @return 结果
+ */
+ int deletePlayClerkDataReviewInfoByIds(String[] ids);
+
+ /**
+ * 删除店员资料审核信息
+ *
+ * @param id 店员资料审核主键
+ * @return 结果
+ */
+ int deletePlayClerkDataReviewInfoById(String id);
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkUserInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkUserInfoService.java
index ec349cd..308028f 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkUserInfoService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/service/IPlayClerkUserInfoService.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoQueryVo;
+import com.starry.admin.modules.weichat.entity.PlayClerkUserLoginResponseVo;
/**
@@ -38,13 +39,20 @@ public interface IPlayClerkUserInfoService extends IService selectPlayClerkClassificationInfo() {
+ public List selectAll() {
return this.baseMapper.selectList(new LambdaQueryWrapper<>());
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkCommodityServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkCommodityServiceImpl.java
index 61c1505..2c4c62c 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkCommodityServiceImpl.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkCommodityServiceImpl.java
@@ -15,6 +15,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
/**
@@ -50,13 +51,18 @@ public class PlayClerkCommodityServiceImpl extends ServiceImpl selectAll() {
+ public List selectByUser(String playUserId) {
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.groupBy(PlayClerkCommodityEntity::getCommodityType);
- lambdaQueryWrapper.eq(PlayClerkCommodityEntity::getPlayUserId, "1");
+ lambdaQueryWrapper.eq(PlayClerkCommodityEntity::getPlayUserId, playUserId);
return this.baseMapper.selectList(lambdaQueryWrapper);
}
+ @Override
+ public List selectAll() {
+ return this.baseMapper.selectList(new LambdaQueryWrapper<>());
+ }
+
@Override
public void startStopClerkItem(String type, String enablingState) {
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkDataReviewInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkDataReviewInfoServiceImpl.java
new file mode 100644
index 0000000..9236f52
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkDataReviewInfoServiceImpl.java
@@ -0,0 +1,128 @@
+package com.starry.admin.modules.clear.service.impl;
+
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.starry.admin.modules.clear.mapper.PlayClerkDataReviewInfoMapper;
+import com.starry.admin.modules.clear.module.entity.PlayClerkDataReviewInfoEntity;
+import com.starry.admin.modules.clear.module.entity.PlayClerkDataReviewInfoQueryVo;
+import com.starry.admin.modules.clear.service.IPlayClerkDataReviewInfoService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 店员资料审核Service业务层处理
+ *
+ * @author admin
+ * @since 2024-04-11
+ */
+@Service
+public class PlayClerkDataReviewInfoServiceImpl extends ServiceImpl implements IPlayClerkDataReviewInfoService {
+ @Resource
+ private PlayClerkDataReviewInfoMapper playClerkDataReviewInfoMapper;
+
+ /**
+ * 查询店员资料审核
+ *
+ * @param id 店员资料审核主键
+ * @return 店员资料审核
+ */
+ @Override
+ public PlayClerkDataReviewInfoEntity selectPlayClerkDataReviewInfoById(String id) {
+ return this.baseMapper.selectById(id);
+ }
+
+
+ /**
+ * 查询店员资料审核列表
+ *
+ * @param entity 店员资料审核
+ * @return 店员资料审核
+ */
+ @Override
+ public List queryList(PlayClerkDataReviewInfoEntity entity) {
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ if (StrUtil.isNotBlank(entity.getId())) {
+ lambdaQueryWrapper.eq(PlayClerkDataReviewInfoEntity::getId, entity.getId());
+ }
+ if (StrUtil.isNotBlank(entity.getPlayUserId())) {
+ lambdaQueryWrapper.eq(PlayClerkDataReviewInfoEntity::getPlayUserId, entity.getPlayUserId());
+ }
+ if (StrUtil.isNotBlank(entity.getState())) {
+ lambdaQueryWrapper.eq(PlayClerkDataReviewInfoEntity::getState, entity.getState());
+ }
+ if (StrUtil.isNotBlank(entity.getDataType())) {
+ lambdaQueryWrapper.eq(PlayClerkDataReviewInfoEntity::getDataType, entity.getDataType());
+ }
+ return this.baseMapper.selectList(lambdaQueryWrapper);
+ }
+
+ /**
+ * 查询店员资料审核列表
+ *
+ * @param vo 店员资料审核分页对象
+ * @return 店员资料审核
+ */
+ @Override
+ public IPage selectPlayClerkDataReviewInfoByPage(PlayClerkDataReviewInfoQueryVo vo) {
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ if (StrUtil.isNotBlank(vo.getState())) {
+ lambdaQueryWrapper.eq(PlayClerkDataReviewInfoEntity::getState, vo.getState());
+ }
+ Page page = new Page<>(vo.getPageNum(), vo.getPageSize());
+ return this.baseMapper.selectPage(page, lambdaQueryWrapper);
+ }
+
+ /**
+ * 新增店员资料审核
+ *
+ * @param playClerkDataReviewInfo 店员资料审核
+ * @return 结果
+ */
+ @Override
+ public boolean create(PlayClerkDataReviewInfoEntity playClerkDataReviewInfo) {
+ if (StrUtil.isBlankIfStr(playClerkDataReviewInfo.getId())) {
+ playClerkDataReviewInfo.setId(IdUtil.fastSimpleUUID());
+ }
+ return save(playClerkDataReviewInfo);
+ }
+
+ /**
+ * 修改店员资料审核
+ *
+ * @param playClerkDataReviewInfo 店员资料审核
+ * @return 结果
+ */
+ @Override
+ public boolean update(PlayClerkDataReviewInfoEntity playClerkDataReviewInfo) {
+ return updateById(playClerkDataReviewInfo);
+ }
+
+ /**
+ * 批量删除店员资料审核
+ *
+ * @param ids 需要删除的店员资料审核主键
+ * @return 结果
+ */
+ @Override
+ public int deletePlayClerkDataReviewInfoByIds(String[] ids) {
+ return playClerkDataReviewInfoMapper.deleteBatchIds(Arrays.asList(ids));
+ }
+
+ /**
+ * 删除店员资料审核信息
+ *
+ * @param id 店员资料审核主键
+ * @return 结果
+ */
+ @Override
+ public int deletePlayClerkDataReviewInfoById(String id) {
+ return playClerkDataReviewInfoMapper.deleteById(id);
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkUserInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkUserInfoServiceImpl.java
index d0ecee6..8f39191 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkUserInfoServiceImpl.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/clear/service/impl/PlayClerkUserInfoServiceImpl.java
@@ -6,14 +6,25 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.starry.admin.modules.clear.mapper.PlayClerkUserInfoMapper;
+import com.starry.admin.modules.clear.module.entity.PlayClerkDataReviewInfoEntity;
+import com.starry.admin.modules.clear.module.entity.PlayClerkLevelInfoEntity;
import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoQueryVo;
+import com.starry.admin.modules.clear.module.vo.PlayClerkCommodityQueryVo;
+import com.starry.admin.modules.clear.service.IPlayClerkCommodityService;
+import com.starry.admin.modules.clear.service.IPlayClerkDataReviewInfoService;
import com.starry.admin.modules.clear.service.IPlayClerkUserInfoService;
+import com.starry.admin.modules.weichat.entity.PlayClerkUserLoginResponseVo;
+import com.starry.common.utils.ConvertUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
/**
@@ -27,6 +38,16 @@ public class PlayClerkUserInfoServiceImpl extends ServiceImpl list = dataReviewInfoService.queryList(dataReviewInfo);
+ Map map = list.stream().collect(Collectors.toMap(PlayClerkDataReviewInfoEntity::getDataType, account -> account));
+ if (map.containsKey("1")) {
+ result.setAvatarAllowEdit(false);
+ }
+ if (map.containsKey("2")) {
+ result.setAvatarAllowEdit(false);
+ }
+ if (map.containsKey("3")) {
+ result.setAudioAllowEdit(false);
+ }
+ if (map.containsKey("0") || ("1").equals(result.getClerkState())) {
+ result.setClerkAllowEdit(false);
+ }
+ result.setCommodity(ConvertUtil.entityToVoList(playClerkCommodityService.selectAll(), PlayClerkCommodityQueryVo.class));
+ result.setArea(userInfo.getProvince() + "-" + userInfo.getCity());
+ return result;
}
@@ -72,7 +118,36 @@ public class PlayClerkUserInfoServiceImpl extends ServiceImpl selectPlayClerkUserInfoByPage(PlayClerkUserInfoQueryVo vo) {
Page page = new Page<>(vo.getPageNum(), vo.getPageSize());
- return this.baseMapper.selectPage(page, new LambdaQueryWrapper<>());
+
+ MPJLambdaWrapper lambdaQueryWrapper = new MPJLambdaWrapper()
+ //查询主表全部字段
+ .selectAll(PlayClerkUserInfoEntity.class)
+ //等级表
+ .selectAs(PlayClerkLevelInfoEntity::getName, "levelName").leftJoin(PlayClerkLevelInfoEntity.class, PlayClerkLevelInfoEntity::getId, PlayClerkUserInfoEntity::getLevelId);
+ //服务项目表
+
+
+ if (StrUtil.isNotBlank(vo.getNickname())) {
+ lambdaQueryWrapper.like(PlayClerkUserInfoEntity::getNickname, vo.getNickname());
+ }
+ if (StrUtil.isNotBlank(vo.getTypeId())) {
+ lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getTypeId, vo.getTypeId());
+ }
+ if (StrUtil.isNotBlank(vo.getLevelId())) {
+ lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getLevelId, vo.getLevelId());
+ }
+ if (StrUtil.isNotBlank(vo.getSex())) {
+ lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getSex, vo.getSex());
+ }
+ if (StrUtil.isNotBlank(vo.getProvince())) {
+ lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getProvince, vo.getProvince());
+ }
+ if (StrUtil.isNotBlank(vo.getClerkState())) {
+ lambdaQueryWrapper.eq(PlayClerkUserInfoEntity::getClerkState, vo.getClerkState());
+ }
+
+ return this.baseMapper.selectJoinPage(page, PlayClerkUserInfoEntity.class, lambdaQueryWrapper);
+// return this.baseMapper.selectPage(page, lambdaQueryWrapper);
}
/**
diff --git a/play-admin/src/main/java/com/starry/admin/modules/custom/service/IPlayCustomUserInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/custom/service/IPlayCustomUserInfoService.java
index 9e46250..ea65c0b 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/custom/service/IPlayCustomUserInfoService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/custom/service/IPlayCustomUserInfoService.java
@@ -51,7 +51,7 @@ public interface IPlayCustomUserInfoService extends IService userOnlineList = new ArrayList<>();
for (String key : keys) {
LoginUser user = redisCache.getCacheObject(key);
- if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) {
+ if (StrUtil.isNotBlank(ipaddr) && StrUtil.isNotBlank(userName)) {
if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) {
userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
}
- } else if (StringUtils.isNotEmpty(ipaddr)) {
+ } else if (StrUtil.isNotBlank(ipaddr)) {
if (StringUtils.equals(ipaddr, user.getIpaddr())) {
userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
}
- } else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser())) {
+ } else if (StrUtil.isNotBlank(userName) && StringUtils.isNotNull(user.getUser())) {
if (StringUtils.equals(userName, user.getUsername())) {
userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/platform/entity/SysTenantEntity.java b/play-admin/src/main/java/com/starry/admin/modules/platform/entity/SysTenantEntity.java
index 0faa218..2c7e9dc 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/platform/entity/SysTenantEntity.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/platform/entity/SysTenantEntity.java
@@ -106,6 +106,11 @@ public class SysTenantEntity extends BaseEntity {
*/
private Date tenantTime;
+ /**
+ * 租户权限标识
+ */
+ private String tenantKey;
+
/**
* 微信公众号ID
*/
diff --git a/play-admin/src/main/java/com/starry/admin/modules/platform/service/ISysTenantService.java b/play-admin/src/main/java/com/starry/admin/modules/platform/service/ISysTenantService.java
index 13da4bf..c2c9c58 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/platform/service/ISysTenantService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/platform/service/ISysTenantService.java
@@ -15,6 +15,16 @@ import java.util.List;
* @author admin
*/
public interface ISysTenantService extends IService {
+
+
+ /**
+ * 根据租户权限标识查询租户
+ *
+ * @param tenantKey 租户权限标识
+ * @return 租户表
+ */
+ SysTenantEntity selectByTenantKey(String tenantKey);
+
/**
* 查询租户表
*
diff --git a/play-admin/src/main/java/com/starry/admin/modules/platform/service/impl/SysTenantServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/platform/service/impl/SysTenantServiceImpl.java
index f07fc81..0a0bf6e 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/platform/service/impl/SysTenantServiceImpl.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/platform/service/impl/SysTenantServiceImpl.java
@@ -58,6 +58,14 @@ public class SysTenantServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.eq(SysTenantEntity::getTenantKey, tenantKey);
+ return this.baseMapper.selectOne(lambdaQueryWrapper);
+ }
+
/**
* 查询租户表
*
diff --git a/play-admin/src/main/java/com/starry/admin/modules/play/service/IPlayUserInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/play/service/IPlayUserInfoService.java
index a812201..6af6256 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/play/service/IPlayUserInfoService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/play/service/IPlayUserInfoService.java
@@ -12,6 +12,8 @@ import com.starry.admin.modules.play.module.vo.PlayUserInfoQueryVo;
* @since 2024-03-30
*/
public interface IPlayUserInfoService extends IService {
+
+
/**
* 查询账号
*
diff --git a/play-admin/src/main/java/com/starry/admin/modules/play/service/impl/PlayUserInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/play/service/impl/PlayUserInfoServiceImpl.java
index 426b91d..e48ecb5 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/play/service/impl/PlayUserInfoServiceImpl.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/play/service/impl/PlayUserInfoServiceImpl.java
@@ -26,6 +26,8 @@ public class PlayUserInfoServiceImpl extends ServiceImpl tokenMap = jwtToken.createToken(userInfo);
return R.ok(tokenMap);
}
+
+
+ @ApiOperation(value = "租户登录")
+ @PostMapping(value = "tenant/login")
+ public R TenantLoginVo(@RequestBody TenantLoginVo loginVo) {
+ // 只有开启了验证码功能才需要验证
+ if (needAuthCode) {
+ String msg = captchaService.checkImageCode(loginVo.getNonceStr(), loginVo.getValue());
+ if (StringUtils.isNotBlank(msg)) {
+ return R.error(msg);
+ }
+ }
+ // 用户登录
+ LoginUser userInfo = loginService.tenantLogin(loginVo.getTenantkey(), loginVo.getUserName(), loginVo.getPassWord());
+ Map tokenMap = jwtToken.createToken(userInfo);
+ return R.ok(tokenMap);
+ }
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/system/service/ISysAdministrativeAreaDictInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/system/service/ISysAdministrativeAreaDictInfoService.java
index 432e90a..f25bf8d 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/system/service/ISysAdministrativeAreaDictInfoService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/system/service/ISysAdministrativeAreaDictInfoService.java
@@ -29,7 +29,7 @@ public interface ISysAdministrativeAreaDictInfoService extends IService
- * @author 杭州世平信息科技有限公司-xuhq
+ * @author admin
* @since 2024/4/10 14:47
**/
List selectTree(String level);
diff --git a/play-admin/src/main/java/com/starry/admin/modules/system/service/LoginService.java b/play-admin/src/main/java/com/starry/admin/modules/system/service/LoginService.java
index a81f6cd..ed4cfb3 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/system/service/LoginService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/system/service/LoginService.java
@@ -36,6 +36,17 @@ public interface LoginService {
*/
Set getRolePermission(SysUserEntity user);
+
+ /**
+ * 租户登录功能
+ *
+ * @param tenantkey 租户标识
+ * @param username 用户名
+ * @param password 密码
+ * @return 生成的JWT的token
+ */
+ LoginUser tenantLogin(String tenantkey, String username, String password);
+
/**
* 登录功能
*
@@ -51,5 +62,5 @@ public interface LoginService {
* @param userName 用户名
* @return 获取信息
*/
- LoginUser getLoginUserInfo(String userName);
+ LoginUser getLoginUserInfo( String userName);
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/LoginServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/LoginServiceImpl.java
index fb7f225..3d8913c 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/LoginServiceImpl.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/LoginServiceImpl.java
@@ -10,6 +10,7 @@ import com.starry.admin.manager.AsyncManager;
import com.starry.admin.manager.factory.AsyncFactory;
import com.starry.admin.modules.platform.entity.SysTenantEntity;
import com.starry.admin.modules.platform.service.ISysTenantService;
+import com.starry.admin.modules.play.service.IPlayUserInfoService;
import com.starry.admin.modules.system.entity.SysUserEntity;
import com.starry.admin.modules.system.service.LoginService;
import com.starry.admin.modules.system.service.SysMenuService;
@@ -56,6 +57,9 @@ public class LoginServiceImpl implements LoginService {
@Resource
private ISysTenantService SysTenantService;
+ @Resource
+ private IPlayUserInfoService playUserInfoService;
+
@Override
public String login(String username, String password) {
String token = null;
@@ -102,6 +106,12 @@ public class LoginServiceImpl implements LoginService {
return roles;
}
+ @Override
+ public LoginUser tenantLogin(String tenantId, String username, String password) {
+ LoginUser userInfo = this.getLoginUserInfo(username);
+ return null;
+ }
+
@Override
public LoginUser newLogin(String username, String password) {
// 用户名或密码为空 错误
@@ -111,15 +121,13 @@ public class LoginServiceImpl implements LoginService {
throw new ServiceException("用户/密码必须填写");
}
// 密码如果不在指定范围内 错误
- if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
- || password.length() > UserConstants.PASSWORD_MAX_LENGTH) {
+ if (password.length() < UserConstants.PASSWORD_MIN_LENGTH || password.length() > UserConstants.PASSWORD_MAX_LENGTH) {
// 登录记录日志
AsyncManager.me().execute(AsyncFactory.recordLoginLog(username, Constants.LOGIN_FAIL, "用户密码不在指定范围"));
throw new ServiceException("用户密码不在指定范围");
}
// 用户名不在指定范围内 错误
- if (username.length() < UserConstants.USERNAME_MIN_LENGTH
- || username.length() > UserConstants.USERNAME_MAX_LENGTH) {
+ if (username.length() < UserConstants.USERNAME_MIN_LENGTH || username.length() > UserConstants.USERNAME_MAX_LENGTH) {
// 登录记录日志
AsyncManager.me().execute(AsyncFactory.recordLoginLog(username, Constants.LOGIN_FAIL, "用户名不在指定范围"));
throw new ServiceException("用户名不在指定范围");
@@ -162,6 +170,7 @@ public class LoginServiceImpl implements LoginService {
public LoginUser getLoginUserInfo(String userName) {
SysUserEntity sysUser = sysUserService.selectUserByUserName(userName);
if (StringUtils.isNotNull(sysUser)) {
+// SecurityUtils.setTenantId(sysUser.getTenantId());
// 角色集合
Set roles = this.getRolePermission(sysUser);
// 权限集合
diff --git a/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/SysAdministrativeAreaDictInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/SysAdministrativeAreaDictInfoServiceImpl.java
index a9269a5..679c00e 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/SysAdministrativeAreaDictInfoServiceImpl.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/SysAdministrativeAreaDictInfoServiceImpl.java
@@ -58,7 +58,7 @@ public class SysAdministrativeAreaDictInfoServiceImpl extends ServiceImpl
- * @author 杭州世平信息科技有限公司-xuhq
+ * @author admin
* @since 2024/4/10 15:14
**/
public List assembleTree(Map> data, List list) {
diff --git a/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/SysMenuServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/SysMenuServiceImpl.java
index f815f2d..751790e 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/SysMenuServiceImpl.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/system/service/impl/SysMenuServiceImpl.java
@@ -128,7 +128,7 @@ public class SysMenuServiceImpl extends ServiceImpl perms = baseMapper.selectMenuPermsByUserId(userId);
Set permsSet = new HashSet<>();
for (String perm : perms) {
- if (StrUtil.isNotEmpty(perm)) {
+ if (StrUtil.isNotBlank(perm)) {
permsSet.addAll(Arrays.asList(perm.trim().split(",")));
}
}
@@ -319,7 +319,7 @@ public class SysMenuServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(PlayClerkDataReviewInfoEntity::getPlayUserId, entity.getOpenid());
+ dataReviewInfoService.remove(queryWrapper);
+ return R.ok("成功");
+ }
+
+
@ClerkUserLogin
@PostMapping("/user/sendCode")
- public R sendCode(@VisibleForTesting @RequestBody PlayClerkUserSendCodeVo vo) {
+ public R sendCode(@Valid @RequestBody PlayClerkUserSendCodeVo vo) {
String codeKey = "login_codes:" + SecurityUtils.getTenantId() + "_" + SecureUtil.md5(vo.getAreaCode() + vo.getPhone());
String code = VerificationCodeUtils.getVerificationCode(4);
redisCache.setCacheObject(codeKey, code, 5L, TimeUnit.MINUTES);
@@ -53,26 +104,277 @@ public class WxClerkController {
@ClerkUserLogin
@PostMapping("/user/bindCode")
- public R bindCode(@VisibleForTesting @RequestBody PlayClerkUserBindCodeVo vo) {
+ public R bindCode(@Valid @RequestBody PlayClerkUserBindCodeVo vo) {
String codeKey = "login_codes:" + SecurityUtils.getTenantId() + "_" + SecureUtil.md5(vo.getAreaCode() + vo.getPhone());
String code = redisCache.getCacheObject(codeKey);
if (code == null || !code.equals(vo.getCode())) {
throw new CustomException("验证码错误");
}
- redisCache.deleteObject(codeKey);
// 账号绑定操作
+ String id = ThreadLocalRequestDetail.getClerkUserInfo().getId();
+ PlayClerkUserInfoEntity clerkUserInfoEntity = new PlayClerkUserInfoEntity();
+ clerkUserInfoEntity.setId(id);
+ clerkUserInfoEntity.setPhone(vo.getPhone());
+ playClerkUserInfoService.update(clerkUserInfoEntity);
+ // 删除验证码缓存
+ redisCache.deleteObject(codeKey);
+
return R.ok("成功");
}
@ClerkUserLogin
@PostMapping("/user/add")
- public R userAdd(@Valid @RequestBody PlayClerkUserAddVo vo) {
- PlayClerkUserInfoEntity entity = ThreadLocalRequestDetail.getClerkUserInfo();
- BeanUtils.copyProperties(vo, entity);
- entity.setPlayUserId("0001");
- playClerkUserInfoService.update(entity);
+ public R userAdd(@Valid @RequestBody PlayClerkUserByWxAddVo vo) {
+ String playUserId = ThreadLocalRequestDetail.getClerkUserInfo().getId();
+ PlayClerkUserInfoEntity userInfo = playClerkUserInfoService.selectById(playUserId);
+ if (userInfo == null) {
+ throw new CustomException("系统错误,用户不存在");
+ }
+ if (userInfo.getClerkState().equals("1")) {
+ throw new CustomException("当前用户已经是店员");
+ }
+ PlayClerkDataReviewInfoEntity dataReviewInfo = new PlayClerkDataReviewInfoEntity();
+ dataReviewInfo.setPlayUserId(userInfo.getId());
+ dataReviewInfo.setState("0");
+ dataReviewInfo.setDataType("0");
+
+ if (!dataReviewInfoService.queryList(dataReviewInfo).isEmpty()) {
+ throw new CustomException("已有申请未审核");
+ }
+ dataReviewInfo.setContent(JSONObject.toJSONString(vo));
+ dataReviewInfo.setAddTime(new Date());
+ dataReviewInfoService.create(dataReviewInfo);
return R.ok("申请成功");
}
+ @ClerkUserLogin
+ @PostMapping("/user/updateAvatar")
+ public R updateAvatar(@Valid @RequestBody PlayClerkUserAvatarVo vo) {
+ PlayClerkUserInfoEntity userInfo = ThreadLocalRequestDetail.getClerkUserInfo();
+
+ PlayClerkDataReviewInfoEntity dataReviewInfo = new PlayClerkDataReviewInfoEntity();
+ dataReviewInfo.setPlayUserId(userInfo.getId());
+ dataReviewInfo.setState("0");
+ dataReviewInfo.setDataType("1");
+
+ if (!dataReviewInfoService.queryList(dataReviewInfo).isEmpty()) {
+ throw new CustomException("已有申请未审核");
+ }
+ dataReviewInfo.setContent(JSONObject.toJSONString(vo));
+ dataReviewInfo.setAddTime(new Date());
+ dataReviewInfoService.create(dataReviewInfo);
+ return R.ok("申请成功");
+ }
+
+ @ClerkUserLogin
+ @PostMapping("/user/updateAlbum")
+ public R updateAlbum(@Valid @RequestBody PlayClerkUserAlbumVo vo) {
+ PlayClerkUserInfoEntity userInfo = ThreadLocalRequestDetail.getClerkUserInfo();
+ PlayClerkDataReviewInfoEntity dataReviewInfo = new PlayClerkDataReviewInfoEntity();
+ dataReviewInfo.setPlayUserId(userInfo.getId());
+ dataReviewInfo.setState("0");
+ dataReviewInfo.setDataType("2");
+ if (!dataReviewInfoService.queryList(dataReviewInfo).isEmpty()) {
+ throw new CustomException("已有申请未审核");
+ }
+ dataReviewInfo.setContent(JSONObject.toJSONString(vo));
+ dataReviewInfoService.create(dataReviewInfo);
+ return R.ok("申请成功");
+ }
+
+ @ClerkUserLogin
+ @PostMapping("/user/updateAudio")
+ public R updateAudio(@Valid @RequestBody PlayClerkUserAudioVo vo) {
+ PlayClerkUserInfoEntity userInfo = ThreadLocalRequestDetail.getClerkUserInfo();
+ PlayClerkDataReviewInfoEntity dataReviewInfo = new PlayClerkDataReviewInfoEntity();
+ dataReviewInfo.setPlayUserId(userInfo.getId());
+ dataReviewInfo.setState("0");
+ dataReviewInfo.setDataType("3");
+ if (!dataReviewInfoService.queryList(dataReviewInfo).isEmpty()) {
+ throw new CustomException("已有申请未审核");
+ }
+ dataReviewInfo.setContent(JSONObject.toJSONString(vo));
+ dataReviewInfoService.create(dataReviewInfo);
+ return R.ok("申请成功");
+ }
+
+
+ @ClerkUserLogin
+ @PostMapping("/user/updateOnlineState")
+ public R updateAudio(@Valid @RequestBody PlayClerkUserOnlineStateVo vo) {
+ String userId = ThreadLocalRequestDetail.getClerkUserInfo().getId();
+ PlayClerkUserInfoEntity entity = new PlayClerkUserInfoEntity();
+ entity.setOnlineState(vo.getOnlineState());
+ entity.setId(userId);
+ playClerkUserInfoService.update(entity);
+ return R.ok("修改成功");
+ }
+
+ @ClerkUserLogin
+ @PostMapping("/user/updateCommodity")
+ public R updateAudio(@Valid @RequestBody PlayClerkCommodityEditVo vo) {
+ playClerkCommodityService.startStopClerkItem(vo.getCommodityType(), vo.getEnablingState());
+ return R.ok("成功");
+ }
+
+
+ @ClerkUserLogin
+ @PostMapping("/user/updateOther")
+ public R updateOther(@Valid @RequestBody PlayClerkUserOtherVo vo) {
+ PlayClerkUserInfoEntity userInfo = ConvertUtil.entityToVo(vo, PlayClerkUserInfoEntity.class);
+ userInfo.setId(ThreadLocalRequestDetail.getClerkUserInfo().getId());
+ playClerkUserInfoService.update(userInfo);
+ return R.ok("申请成功");
+ }
+
+
+ /**
+ * 查询陪玩服务项目列表
+ */
+ @GetMapping("/user/listAllCommodity")
+ public R listAllCommodity() {
+ List list = playClerkCommodityService.selectAll();
+ return R.ok(ConvertUtil.entityToVoList(list, PlayClerkCommodityQueryVo.class));
+ }
+
+ /**
+ * 分页获取店员列表
+ *
+ * @param vo PlayClerkUserInfoQueryVo
+ * @return 店员礼列表
+ */
+
+ @PostMapping("/user/queryByPage")
+ public R queryByPage(@RequestBody PlayClerkUserInfoQueryVo vo) {
+ IPage page = playClerkUserInfoService.selectPlayClerkUserInfoByPage(vo);
+ List resultVos = new ArrayList<>();
+ for (PlayClerkUserInfoEntity record : page.getRecords()) {
+ PlayClerkUserListResultVo item = ConvertUtil.entityToVo(record, PlayClerkUserListResultVo.class);
+ List list = playClerkCommodityService.selectByUser(record.getId()).stream().map(PlayClerkCommodityEntity::getCommodityType).collect(Collectors.toList());
+ item.setCommodity(list);
+ resultVos.add(item);
+ }
+
+ IPage resultPage = new Page<>();
+ resultPage.setRecords(resultVos);
+ // 设置分页参数
+ resultPage.setCurrent(page.getCurrent());
+ resultPage.setSize(page.getSize());
+ resultPage.setTotal(resultVos.size()); // 假设total和实际情况一致
+ return R.ok(resultPage);
+ }
+
+ /**
+ * 获取店员礼物信息
+ *
+ * @param id 店员ID
+ * @return 店员礼物
+ */
+
+ @GetMapping("/user/queryGiftById")
+ public R queryGiftById(@RequestParam("id") String id) {
+ PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(id);
+ if (entity == null) {
+ throw new CustomException("用户不存在");
+ }
+ List list = new ArrayList<>();
+ list.add(new PlayGiftInfoEntity(IdUtil.fastSimpleUUID(), "礼物1", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", 0, "0"));
+ list.add(new PlayGiftInfoEntity(IdUtil.fastSimpleUUID(), "礼物2", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", 1, "0"));
+ list.add(new PlayGiftInfoEntity(IdUtil.fastSimpleUUID(), "礼物3", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", 2, "1"));
+ list.add(new PlayGiftInfoEntity(IdUtil.fastSimpleUUID(), "礼物4", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", 3, "1"));
+ list.add(new PlayGiftInfoEntity(IdUtil.fastSimpleUUID(), "礼物5", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", 4, "1"));
+
+ return R.ok(list);
+ }
+
+
+ /**
+ * 获取店员价格
+ *
+ * @param id 店员ID
+ * @return 店员价格
+ */
+ @GetMapping("/user/queryPriceById")
+ public R queryDetailById(@RequestParam("id") String id) {
+ PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(id);
+ if (entity == null) {
+ throw new CustomException("用户不存在");
+ }
+ return R.ok(playClerkCommodityService.selectByUser(entity.getId()));
+ }
+
+
+ /**
+ * 分页获取店员动态
+ *
+ * @param id 店员ID
+ * @return 店员动态
+ */
+ @GetMapping("/user/queryTrendsById")
+ public R queryTrendsById(@RequestParam("id") String id) {
+ PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(id);
+ if (entity == null) {
+ throw new CustomException("用户不存在");
+ }
+ List entities = new ArrayList<>();
+ entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态1", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/0596854e16ae4a268eab4c08e2a9f762.mp3", new Date()));
+ entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态2", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/0596854e16ae4a268eab4c08e2a9f762.mp3", new Date()));
+ entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态3", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/0596854e16ae4a268eab4c08e2a9f762.mp3", new Date()));
+ entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态4", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/0596854e16ae4a268eab4c08e2a9f762.mp3", new Date()));
+ entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态5", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/0596854e16ae4a268eab4c08e2a9f762.mp3", new Date()));
+ entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态6", "0", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", new Date()));
+ entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态7", "0", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", new Date()));
+ entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态8", "0", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", new Date()));
+
+ IPage resultPage = new Page<>();
+ resultPage.setRecords(entities);
+ // 设置分页参数
+ resultPage.setCurrent(1);
+ resultPage.setSize(1);
+ resultPage.setTotal(5); // 假设total和实际情况一致
+ return R.ok(resultPage);
+ }
+
+
+ /**
+ * 分页获取店员评价
+ *
+ * @param id 店员ID
+ * @return 店员评价
+ */
+ @GetMapping("/user/queryEvaluateById")
+ public R queryEvaluateById(@RequestParam("id") String id) {
+ PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(id);
+ if (entity == null) {
+ throw new CustomException("用户不存在");
+ }
+
+ List entities = new ArrayList<>();
+ entities.add(new PlayClarkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人1昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
+ entities.add(new PlayClarkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人2昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
+ entities.add(new PlayClarkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人3昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
+ entities.add(new PlayClarkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人4昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
+ entities.add(new PlayClarkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人5昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
+
+ IPage resultPage = new Page<>();
+ resultPage.setRecords(entities);
+ // 设置分页参数
+ resultPage.setCurrent(1);
+ resultPage.setSize(1);
+ resultPage.setTotal(5); // 假设total和实际情况一致
+ return R.ok(resultPage);
+ }
+
+ @GetMapping("/level/queryAll")
+ public R userAdd() {
+ return R.ok(playClerkLevelInfoService.selectAll());
+ }
+
+ @GetMapping("/class/queryAll")
+ public R queryClassAll() {
+ return R.ok(playClerkClassificationInfoService.selectAll());
+ }
+
+
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCommonController.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCommonController.java
index 2720ab1..7519596 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCommonController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCommonController.java
@@ -1,16 +1,33 @@
package com.starry.admin.modules.weichat.controller;
+import cn.hutool.core.io.FastByteArrayOutputStream;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson2.JSONObject;
+import com.starry.admin.common.exception.CustomException;
+import com.starry.admin.common.oss.service.IOssFileService;
import com.starry.admin.modules.system.service.ISysAdministrativeAreaDictInfoService;
+import com.starry.admin.modules.weichat.service.WxAccessTokenService;
+import com.starry.admin.modules.weichat.utils.WxFileUtils;
+import com.starry.admin.utils.SecurityUtils;
import com.starry.common.result.R;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import me.chanjar.weixin.common.error.WxErrorException;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
/**
- * @author 杭州世平信息科技有限公司-xuhq
+ * @author admin
* @since 2024/4/10 16:18
**/
@Slf4j
@@ -18,12 +35,72 @@ import javax.annotation.Resource;
@RequestMapping("/wx/common/")
public class WxCommonController {
+ @Resource
+ private IOssFileService ossFileService;
+
@Resource
private ISysAdministrativeAreaDictInfoService areaDictInfoService;
+ @Resource
+ WxAccessTokenService wxAccessTokenService;
+
+
@GetMapping("area/tree")
- public R list() {
+ public R areaTree() {
return R.ok(areaDictInfoService.selectTree("2"));
}
+
+ @PostMapping("file/upload")
+ public R fileUpload(@RequestParam("file") MultipartFile file) throws IOException {
+ String fileAddress = ossFileService.upload(file.getInputStream(), SecurityUtils.getTenantId(), file.getOriginalFilename());
+ return R.ok(fileAddress);
+ }
+
+ @GetMapping("audio/upload")
+ public R audioUpload(@RequestParam("mediaId") String mediaId) throws IOException, WxErrorException {
+ if (StrUtil.isBlankIfStr(mediaId)) {
+ throw new CustomException("mediaId不能为空");
+ }
+ String accessToken = wxAccessTokenService.getAccessToken();
+ // 下载录音文件,并转化为InputStream
+ InputStream inputStream = WxFileUtils.getTemporaryMaterial(accessToken, mediaId);
+
+ try {
+ FastByteArrayOutputStream read = IoUtil.read(inputStream, false);
+ String str = new String(read.toByteArray(), StandardCharsets.UTF_8);
+ JSONObject jsonObject = JSONObject.parseObject(str);
+ if (jsonObject.containsKey("errcode")) {
+ throw new CustomException("获取微信素材异常" + jsonObject.getString("errmsg"));
+ }
+ } catch (Exception e) {
+ log.error("获取微信素材异常,", e);
+ throw new CustomException("获取微信素材异常");
+ }
+
+ File tempFile = FileUtil.createTempFile("wx_" + SecurityUtils.getTenantId(), IdUtil.fastSimpleUUID() + ".tmp", null).toFile();
+ // 可以在这里对临时文件进行操作
+ log.debug("tempFile = {}", tempFile.getPath());
+ try (FileOutputStream fileOutputStream = new FileOutputStream(tempFile)) {
+ byte[] buffer = new byte[1024];
+ int bytesRead;
+ // 读取InputStream并写入到FileOutputStream
+ while ((bytesRead = inputStream.read(buffer)) != -1) {
+ fileOutputStream.write(buffer, 0, bytesRead);
+ }
+ }
+ if (FileUtil.size(tempFile) <= 0) {
+ throw new CustomException("音频文件上传失败,文件不存在");
+ }
+ //将下载的微信素材文件,转化为MP3文件
+ File targetFile = FileUtil.createTempFile("wx_" + SecurityUtils.getTenantId(), IdUtil.fastSimpleUUID() + ".mp3", null).toFile();
+ log.debug("targetFile = {}", targetFile.getPath());
+ WxFileUtils.audioConvert2Mp3(tempFile, targetFile);
+ //将MP3文件上传到OSS
+ String fileAddress = ossFileService.upload(Files.newInputStream(targetFile.toPath()), SecurityUtils.getTenantId(), IdUtil.fastSimpleUUID() + ".mp3");
+ //删除临时文件
+ FileUtil.del(tempFile);
+ FileUtil.del(targetFile);
+ return R.ok(fileAddress);
+ }
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomController.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomController.java
new file mode 100644
index 0000000..54ed1ac
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomController.java
@@ -0,0 +1,31 @@
+package com.starry.admin.modules.weichat.controller;
+
+
+import com.starry.admin.modules.clear.service.IPlayClerkLevelInfoService;
+import com.starry.admin.modules.clear.service.impl.PlayClerkUserInfoServiceImpl;
+import com.starry.common.result.R;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * @author admin
+ */
+@Slf4j
+@RestController
+@RequestMapping("/wx/custom/")
+public class WxCustomController {
+
+
+ @Resource
+ private PlayClerkUserInfoServiceImpl playClerkUserInfoService;
+
+
+
+
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomService.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomService.java
new file mode 100644
index 0000000..a16d9f3
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomService.java
@@ -0,0 +1,41 @@
+package com.starry.admin.modules.weichat.controller;
+
+import cn.hutool.core.util.StrUtil;
+import com.starry.admin.common.exception.CustomException;
+import com.starry.admin.modules.platform.entity.SysTenantEntity;
+import com.starry.admin.modules.platform.service.impl.SysTenantServiceImpl;
+import com.starry.admin.utils.SecurityUtils;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.config.impl.WxMpMapConfigImpl;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Slf4j
+@Service
+public class WxCustomService {
+
+ @Resource
+ private WxMpService wxMpService;
+
+ @Resource
+ private SysTenantServiceImpl tenantService;
+
+
+ public WxMpService proxyWxMpService() {
+ String tenantId = SecurityUtils.getTenantId();
+ if (StrUtil.isBlankIfStr(tenantId)) {
+ throw new CustomException("系统错误,租户ID不能为空");
+ }
+ SysTenantEntity entity = tenantService.selectSysTenantByTenantId(tenantId);
+ if (entity == null) {
+ throw new CustomException("系统错误,租户ID不能为空");
+ }
+ WxMpMapConfigImpl config = new WxMpMapConfigImpl();
+ config.setAppId(entity.getAppId());
+ config.setSecret(entity.getSecret());
+ wxMpService.addConfigStorage(entity.getAppId(), config);
+ return wxMpService.switchoverTo(entity.getAppId());
+ }
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxOauthController.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxOauthController.java
index 07f1849..a24c01b 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxOauthController.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxOauthController.java
@@ -1,12 +1,12 @@
package com.starry.admin.modules.weichat.controller;
-import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.starry.admin.common.aspect.ClerkUserLogin;
import com.starry.admin.common.aspect.CustomUserLogin;
import com.starry.admin.common.conf.ThreadLocalRequestDetail;
+import com.starry.admin.common.exception.CustomException;
import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clear.service.IPlayClerkUserInfoService;
import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
@@ -15,10 +15,11 @@ import com.starry.admin.modules.weichat.entity.WxUserLoginVo;
import com.starry.admin.modules.weichat.entity.WxUserQueryAddressVo;
import com.starry.admin.modules.weichat.service.WxOauthService;
import com.starry.admin.modules.weichat.service.WxTokenService;
-import com.starry.admin.utils.SecurityUtils;
+import com.starry.common.redis.RedisCache;
import com.starry.common.result.R;
import lombok.extern.slf4j.Slf4j;
-import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.common.bean.WxJsapiSignature;
+import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -40,7 +41,7 @@ public class WxOauthController {
@Resource
- private WxMpService wxMpService;
+ private WxCustomService wxCustomService;
@Resource
private IPlayCustomUserInfoService customUserInfoService;
@@ -54,6 +55,20 @@ public class WxOauthController {
@Resource
private WxOauthService wxOauthService;
+ @Resource
+ private RedisCache redisCache;
+
+
+ @PostMapping("/getConfigAddress")
+ public R getConfigAddress(@RequestBody WxUserQueryAddressVo vo) throws WxErrorException {
+ // 默认回调地址
+ String defaultAddress = "http://july.hucs.top/api/wx/oauth2/clerkLoginCallback";
+ if (!StrUtil.isBlankIfStr(vo.getUrl())) {
+ defaultAddress = vo.getUrl();
+ }
+ WxJsapiSignature wxJsapiSignature = wxCustomService.proxyWxMpService().createJsapiSignature(defaultAddress);
+ return R.ok(wxJsapiSignature);
+ }
@PostMapping("/getClerkLoginAddress")
public R getClerkLoginAddress(@RequestBody WxUserQueryAddressVo vo) {
@@ -62,7 +77,7 @@ public class WxOauthController {
if (!StrUtil.isBlankIfStr(vo.getUrl())) {
defaultAddress = vo.getUrl();
}
- String url = wxMpService.getOAuth2Service().buildAuthorizationUrl(defaultAddress, "snsapi_userinfo", "STATE");
+ String url = wxCustomService.proxyWxMpService().getOAuth2Service().buildAuthorizationUrl(defaultAddress, "snsapi_userinfo", "STATE");
return R.ok(url);
}
@@ -76,23 +91,34 @@ public class WxOauthController {
public R clerkLogin(@Valid @RequestBody WxUserLoginVo vo) {
String userId = wxOauthService.clarkUserLogin(vo.getCode());
PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(userId);
- // 线程塞入租户ID
- SecurityUtils.setTenantId(Convert.toStr(entity.getTenantId()));
- JSONObject jsonObject = JSONObject.from(entity);
- String tokenForMiniUser = tokenService.createWxUserToken(entity.getId());
- jsonObject.put("tokenValue", TOKEN_PREFIX + tokenForMiniUser);
+ if (entity == null) {
+ throw new CustomException("用户不存在");
+ }
+ // 缓存租户信息
+ String redisKey = "TENANT_INFO:" + entity.getId();
+ redisCache.setCacheObject(redisKey, entity.getTenantId());
+ String tokenValue = tokenService.createWxUserToken(entity.getId());
+ JSONObject jsonObject = JSONObject.from(clerkUserInfoService.getVo(entity));
+ jsonObject.put("tokenValue", TOKEN_PREFIX + tokenValue);
jsonObject.put("tokenName", CLERK_USER_LOGIN_TOKEN);
jsonObject.put("loginDate", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
+ clerkUserInfoService.updateTokenById(entity.getId(), tokenValue);
return R.ok(jsonObject);
}
@PostMapping("/clark/loginById")
public R loginById(@Valid @RequestBody WxUserLoginVo vo) {
PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(vo.getCode());
- JSONObject jsonObject = JSONObject.from(entity);
+ if (entity == null) {
+ throw new CustomException("用户不存在");
+ }
+ // 缓存租户信息
+ String redisKey = "TENANT_INFO:" + entity.getId();
+ redisCache.setCacheObject(redisKey, entity.getTenantId());
+ JSONObject jsonObject = JSONObject.from(clerkUserInfoService.getVo(entity));
String tokenValue = tokenService.createWxUserToken(entity.getId());
- jsonObject.put("tokenValue", tokenValue);
- jsonObject.put("tokenName", TOKEN_PREFIX + CLERK_USER_LOGIN_TOKEN);
+ jsonObject.put("tokenValue", TOKEN_PREFIX + tokenValue);
+ jsonObject.put("tokenName", CLERK_USER_LOGIN_TOKEN);
jsonObject.put("loginDate", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
clerkUserInfoService.updateTokenById(entity.getId(), tokenValue);
return R.ok(jsonObject);
@@ -113,7 +139,7 @@ public class WxOauthController {
if (!StrUtil.isBlankIfStr(vo.getUrl())) {
defaultAddress = vo.getUrl();
}
- String url = wxMpService.getOAuth2Service().buildAuthorizationUrl(defaultAddress, "snsapi_userinfo", "STATE");
+ String url = wxCustomService.proxyWxMpService().getOAuth2Service().buildAuthorizationUrl(defaultAddress, "snsapi_userinfo", "STATE");
return R.ok(url);
}
@@ -127,6 +153,12 @@ public class WxOauthController {
public R customLogin(@Valid @RequestBody WxUserLoginVo vo) {
String userId = wxOauthService.customUserLogin(vo.getCode());
PlayCustomUserInfoEntity entity = customUserInfoService.selectById(userId);
+ if (entity == null) {
+ throw new CustomException("用户不存在");
+ }
+ // 缓存租户信息
+ String redisKey = "TENANT_INFO:" + entity.getId();
+ redisCache.setCacheObject(redisKey, entity.getTenantId());
JSONObject jsonObject = JSONObject.from(entity);
String tokenValue = tokenService.createWxUserToken(entity.getId());
jsonObject.put("tokenValue", TOKEN_PREFIX + tokenValue);
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserAlbumVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserAlbumVo.java
new file mode 100644
index 0000000..a279168
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserAlbumVo.java
@@ -0,0 +1,22 @@
+package com.starry.admin.modules.weichat.entity;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.List;
+
+/**
+ * 店员相册实体
+ *
+ * @author admin
+ * @since 2024/4/11 11:19
+ **/
+
+@Data
+public class PlayClerkUserAlbumVo {
+
+ @NotNull(message = "照片不能为空")
+ @Size(min = 1, max = 5, message = "照片必须为1-5张")
+ private List album;
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserAudioVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserAudioVo.java
new file mode 100644
index 0000000..bdd6923
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserAudioVo.java
@@ -0,0 +1,22 @@
+package com.starry.admin.modules.weichat.entity;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 店员录音文件
+ *
+ * @author admin
+ * @since 2024/4/11 11:19
+ **/
+@Data
+public class PlayClerkUserAudioVo {
+
+ /**
+ * 录音
+ */
+ @NotNull(message = "录音文件不能为空")
+ private String audio;
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserAvatarVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserAvatarVo.java
new file mode 100644
index 0000000..e254b24
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserAvatarVo.java
@@ -0,0 +1,27 @@
+package com.starry.admin.modules.weichat.entity;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 店员头像信息
+ *
+ * @author admin
+ * @since 2024/4/11 11:19
+ **/
+@Data
+public class PlayClerkUserAvatarVo {
+
+ /**
+ * 头像
+ */
+ @NotNull(message = "头像不能为空")
+ private String avatar;
+
+ /**
+ * 头像框
+ */
+ private String avatarFrameId;
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserAddVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserByWxAddVo.java
similarity index 51%
rename from play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserAddVo.java
rename to play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserByWxAddVo.java
index c456ead..4a5960d 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserAddVo.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserByWxAddVo.java
@@ -4,13 +4,17 @@ import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.List;
/**
+ * 微信端申请成为店员
+ *
* @author admin
*/
@Data
-public class PlayClerkUserAddVo {
+public class PlayClerkUserByWxAddVo {
/**
@@ -20,57 +24,40 @@ public class PlayClerkUserAddVo {
private String nickname;
/**
- * 店员等级
- */
- @NotBlank(message = "等级不能为空")
- private String levelId;
-
- /**
- * 店员性别(1:男:0:女)
+ * 店员性别(0:未知;1:男;2:女)
*/
@NotNull(message = "性别不能为空")
- private Integer sex;
-
- /**
- * 头像
- */
- @NotBlank(message = "头像不能为空")
- private String avatar;
-
- /**
- * 音频
- */
- @NotBlank(message = "音频不能为空")
- private String audioFrequency;
-
- /**
- * 星座
- */
- @NotBlank(message = "星座不能为空")
- private String constellation;
-
- /**
- * 标签
- */
- private String label;
-
- /**
- * 个性签名
- */
- @NotBlank(message = "签名不能为空")
- private String signature;
+ private String sex;
/**
* 年龄
*/
- @NotNull(message = "年龄不能为空")
- private Long age;
+ @NotNull(message = "性别不能为空")
+ private Integer age;
+
+ /**
+ * 微信号码
+ */
+ @NotNull(message = "微信号码不能为空")
+ private String weiChatCode;
+
+
+ /**
+ * 手机号码区号
+ */
+ @NotBlank(message = "手机号码区号不能为空")
+ private String areaCode;
+
+ /**
+ * 手机号码
+ */
+ @NotBlank(message = "手机号码不能为空")
+ private String phone;
/**
* 所在国家
*/
- @NotBlank(message = "国家不能为空")
- private String country;
+ private String country = "中国";
/**
* 所在省份
@@ -84,6 +71,17 @@ public class PlayClerkUserAddVo {
@NotBlank(message = "城市不能为空")
private String city;
+ /**
+ * 音频
+ */
+ @NotBlank(message = "音频不能为空")
+ private String audio;
+
+
+ @NotNull(message = "album不能为空")
+ @Size(min = 1, max = 5, message = "照片必须为1-5张")
+ private List album;
+
/**
* 备注
*/
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserByWxEditVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserByWxEditVo.java
new file mode 100644
index 0000000..3f4314f
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserByWxEditVo.java
@@ -0,0 +1,123 @@
+package com.starry.admin.modules.weichat.entity;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+
+/**
+ * 微信端申请成为店员
+ *
+ * @author admin
+ */
+@Data
+public class PlayClerkUserByWxEditVo {
+
+
+ /**
+ * 店员昵称
+ */
+ @NotBlank(message = "昵称不能为空")
+ private String nickname;
+
+ /**
+ * 店员性别(0:未知;1:男;2:女)
+ */
+ @NotNull(message = "性别不能为空")
+ private Integer sex;
+
+ /**
+ * 年龄
+ */
+ @NotNull(message = "性别不能为空")
+ private Integer age;
+
+ /**
+ * 微信号码
+ */
+ @NotNull(message = "微信号码不能为空")
+ private Integer weiChatCode;
+
+
+ /**
+ * 手机号码区号
+ */
+ @NotBlank(message = "手机号码区号不能为空")
+ private String areaCode;
+
+ /**
+ * 手机号码
+ */
+ @NotBlank(message = "手机号码不能为空")
+ private String phone;
+
+ /**
+ * 所在国家
+ */
+ private String country = "中国";
+
+ /**
+ * 所在省份
+ */
+ @NotBlank(message = "省份不能为空")
+ private String province;
+
+ /**
+ * 所在城市
+ */
+ @NotBlank(message = "城市不能为空")
+ private String city;
+
+ /**
+ * 音频
+ */
+ @NotBlank(message = "音频不能为空")
+ private String audioFrequency;
+
+ /**
+ * 图片1
+ **/
+ private String image1;
+
+ /**
+ * 图片2
+ **/
+ private String image2;
+
+ /**
+ * 图片3
+ **/
+ private String image3;
+
+ /**
+ * 图片4
+ **/
+ private String image4;
+
+ /**
+ * 图片4
+ **/
+ private String image5;
+
+ /**
+ * 微信二维码
+ **/
+ private String weChatCodeImage;
+
+ /**
+ * 支付宝收款码图片
+ **/
+ private String weChatPayImage;
+
+ /**
+ * 支付宝收款码图片
+ **/
+ private String alipayImage;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserLoginResponseVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserLoginResponseVo.java
new file mode 100644
index 0000000..9a3b815
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserLoginResponseVo.java
@@ -0,0 +1,134 @@
+package com.starry.admin.modules.weichat.entity;
+
+import com.starry.admin.modules.clear.module.vo.PlayClerkCommodityQueryVo;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * 微信端店员登录返回值
+ *
+ * @author admin
+ */
+@Data
+public class PlayClerkUserLoginResponseVo {
+
+ /**
+ * UUID
+ */
+ private String id;
+
+ /**
+ * 店员昵称
+ */
+ private String nickname;
+
+ /**
+ * 头像
+ */
+ private String avatar;
+
+ /**
+ * 头像是否可编辑
+ */
+ private boolean avatarAllowEdit = true;
+
+ /**
+ * 相册
+ */
+ private List album = new ArrayList<>();
+
+ /**
+ * 相册是否运行编辑
+ */
+ private boolean albumAllowEdit = true;
+
+ /**
+ * 音频
+ */
+ private String audio;
+
+ /**
+ * 音频是否可修改
+ */
+ private boolean audioAllowEdit = true;
+
+ /**
+ * 店员性别(0:未知;1:男;2:女)
+ */
+ private String sex;
+
+ /**
+ * 年龄
+ */
+ private Integer age;
+
+ /**
+ * 个性签名
+ */
+ private String signature;
+
+ /**
+ * 星座
+ */
+ private String constellation;
+
+ /**
+ * 地区
+ */
+ private String area;
+
+ /**
+ * 标签
+ */
+ private List labels = new ArrayList<>();
+
+ /**
+ * 分类
+ */
+ private String typeId;
+
+ /**
+ * 微信二维码
+ **/
+ private String weChatCodeImage;
+
+ /**
+ * 微信收款码图片
+ **/
+ private String weChatPayImage;
+
+ /**
+ * 支付宝收款码图片
+ **/
+ private String alipayImage;
+
+ /**
+ * 是否必须实名【1:必须实名,0:非必须实名】
+ */
+ private String mandatoryRealState;
+
+ /**
+ * 在线状态【1:在线,0:离线】
+ */
+ private String onlineState;
+
+ /**
+ * 员工状态【1:是陪玩,0:不是陪玩】
+ */
+ private String clerkState;
+
+ /**
+ * 允许申请陪玩
+ */
+ private boolean clerkAllowEdit = true;
+
+ /**
+ * 服务项目
+ */
+ private List commodity = new ArrayList<>();
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserOnlineStateVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserOnlineStateVo.java
new file mode 100644
index 0000000..f5b19d6
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserOnlineStateVo.java
@@ -0,0 +1,24 @@
+package com.starry.admin.modules.weichat.entity;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+
+/**
+ * 店员在线状态【1:在线,0:离线】
+ *
+ * @author admin
+ * @since 2024/4/11 11:19
+ **/
+@Data
+public class PlayClerkUserOnlineStateVo {
+
+ /**
+ * 在线状态
+ */
+ @NotNull(message = "在线状态不能为空")
+ @Pattern(regexp = "[01]", message = "在线状态必须为0或1")
+ private String onlineState;
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserOtherVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserOtherVo.java
new file mode 100644
index 0000000..43effa4
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserOtherVo.java
@@ -0,0 +1,79 @@
+package com.starry.admin.modules.weichat.entity;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 店员录音文件
+ *
+ * @author admin
+ * @since 2024/4/11 11:19
+ **/
+@Data
+public class PlayClerkUserOtherVo {
+
+ /**
+ * 店员性别(0:未知;1:男;2:女)
+ */
+ private Integer sex;
+
+ /**
+ * 年龄
+ */
+ private Integer age;
+
+ /**
+ * 个性签名
+ */
+ private String signature;
+
+
+ /**
+ * 星座
+ */
+ private String constellation;
+
+ /**
+ * 所在国家
+ */
+ private String country = "中国";
+
+ /**
+ * 所在省份
+ */
+ private String province;
+
+ /**
+ * 所在城市
+ */
+ private String city;
+
+ /**
+ * 标签
+ */
+ private List labels = new ArrayList<>();
+
+ /**
+ * 分类
+ */
+ private String typeId;
+
+ /**
+ * 微信二维码
+ **/
+ private String weChatCodeImage;
+
+ /**
+ * 微信收款码图片
+ **/
+ private String weChatPayImage;
+
+ /**
+ * 支付宝收款码图片
+ **/
+ private String alipayImage;
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserQueryVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserQueryVo.java
new file mode 100644
index 0000000..4ca6a59
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayClerkUserQueryVo.java
@@ -0,0 +1,37 @@
+package com.starry.admin.modules.weichat.entity;
+
+import com.starry.common.domain.BasePageEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 微信端分页查询店员文件
+ *
+ * @author admin
+ * @since 2024/4/11 11:19
+ **/
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class PlayClerkUserQueryVo extends BasePageEntity {
+
+ /**
+ * 分类
+ */
+ private String typeId;
+ /**
+ * 等级
+ **/
+ private String levelId;
+
+ /**
+ * 性别[0:未知;1:男;2:女]
+ **/
+ private Integer sex;
+
+ /**
+ * 省
+ **/
+ private String province;
+
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxAccessTokenService.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxAccessTokenService.java
new file mode 100644
index 0000000..6e82078
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxAccessTokenService.java
@@ -0,0 +1,38 @@
+package com.starry.admin.modules.weichat.service;
+
+
+import com.starry.admin.modules.weichat.controller.WxCustomService;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * 微信公众号开发
+ *
+ * @author admin
+ */
+@Slf4j
+@Service
+public class WxAccessTokenService {
+
+
+ @Resource
+ private WxCustomService wxCustomService;
+
+
+ /**
+ * 获取微信AccessToken
+ *
+ * @return access_token
+ */
+ public String getAccessToken() throws WxErrorException {
+ String token = wxCustomService.proxyWxMpService().getAccessToken();
+ log.error("token = " + token);
+ //缓存业务处理
+ return token;
+
+ }
+
+}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxOauthService.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxOauthService.java
index 8e61fda..6f44e42 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxOauthService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxOauthService.java
@@ -8,12 +8,12 @@ import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clear.service.IPlayClerkUserInfoService;
import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService;
+import com.starry.admin.modules.weichat.controller.WxCustomService;
import com.starry.common.utils.ConvertUtil;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.WxOAuth2UserInfo;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -24,7 +24,7 @@ public class WxOauthService {
@Resource
- private WxMpService wxMpService;
+ private WxCustomService wxCustomService;
@Resource
@@ -33,14 +33,22 @@ public class WxOauthService {
@Resource
private IPlayClerkUserInfoService clerkUserInfoService;
- @Resource
- private WxTokenService tokenService;
-
+ /**
+ * 微信用户登录
+ * 如果用户不存在,初始化用户并登录
+ *
+ * @param code 微信授权code
+ * @return String 用户ID
+ * @author admin
+ * @since 2024/4/15 11:01
+ **/
public String clarkUserLogin(String code) {
WxOAuth2AccessToken token = getWxOAuth2AccessToken(code);
+ log.info("token = " + token);
String openId = getOpenId(token);
- WxOAuth2UserInfo userInfo = new WxOAuth2UserInfo();
+ log.info("openId = " + openId);
+ WxOAuth2UserInfo userInfo = getWxOAuth2UserInfo(token);
PlayClerkUserInfoEntity item = clerkUserInfoService.selectByOpenid(openId);
if (item == null) {
PlayClerkUserInfoEntity entity = ConvertUtil.entityToVo(userInfo, PlayClerkUserInfoEntity.class);
@@ -49,8 +57,6 @@ public class WxOauthService {
clerkUserInfoService.create(entity);
return entity.getId();
} else {
- item.setAvatar(userInfo.getHeadImgUrl());
- clerkUserInfoService.update(item);
return item.getId();
}
}
@@ -95,7 +101,7 @@ public class WxOauthService {
}
synchronized (code.intern()) {
try {
- return wxMpService.getOAuth2Service().getAccessToken(code);
+ return wxCustomService.proxyWxMpService().getOAuth2Service().getAccessToken(code);
} catch (WxErrorException e) {
throw new RuntimeException(e);
}
@@ -134,7 +140,7 @@ public class WxOauthService {
throw new ServiceException("获取微信授权异常,WxOAuth2AccessToken不能为空");
}
try {
- return wxMpService.getOAuth2Service().getUserInfo(token, null);
+ return wxCustomService.proxyWxMpService().getOAuth2Service().getUserInfo(token, null);
} catch (WxErrorException e) {
throw new RuntimeException(e);
}
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxTokenService.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxTokenService.java
index 9b9b72a..2d3268c 100644
--- a/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxTokenService.java
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/service/WxTokenService.java
@@ -49,14 +49,12 @@ public class WxTokenService {
protected static final long MILLIS_SECOND = 1000;
-
-
/**
* 根据微信用户id创建token
*
* @param userId 微信用户ID
* @return String token
- * @author 杭州世平信息科技有限公司-xuhq
+ * @author admin
* @since 2024/4/10 11:21
**/
public String createWxUserToken(String userId) {
@@ -74,13 +72,16 @@ public class WxTokenService {
*
* @param token token
* @return String 微信用户ID
- * @author 杭州世平信息科技有限公司-xuhq
+ * @author admin
* @since 2024/4/10 11:24
**/
public String getWxUserIdByToken(String token) {
if (StringUtils.isEmpty(token)) {
throw new RuntimeException("token不能为空");
}
+ if (token.startsWith(Constants.TOKEN_PREFIX)) {
+ token = token.replace(Constants.TOKEN_PREFIX, "");
+ }
Claims claims = parseToken(token);
return claims.get(Constants.LOGIN_USER_KEY_WX).toString();
}
@@ -91,10 +92,10 @@ public class WxTokenService {
* @param token token
* @param identity 用户身份(0:租户,1:顾客)
* @return String 微信用户租户ID
- * @author 杭州世平信息科技有限公司-xuhq
+ * @author admin
* @since 2024/4/10 11:24
**/
- public String getWxUserTenantIdByToken(String token, String identity) {
+ public String getWxUserTenantIdByToken(String token) {
if (StringUtils.isEmpty(token)) {
throw new RuntimeException("token不能为空");
}
@@ -205,7 +206,7 @@ public class WxTokenService {
// */
// private String getToken(HttpServletRequest request) {
// String token = request.getHeader(header);
-// if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX)) {
+// if (StrUtil.isNotBlank(token) && token.startsWith(Constants.TOKEN_PREFIX)) {
// token = token.replace(Constants.TOKEN_PREFIX, "");
// }
// return token;
diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/utils/WxFileUtils.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/utils/WxFileUtils.java
new file mode 100644
index 0000000..0e9b7ac
--- /dev/null
+++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/utils/WxFileUtils.java
@@ -0,0 +1,74 @@
+package com.starry.admin.modules.weichat.utils;
+
+import cn.hutool.core.io.FileUtil;
+import com.alibaba.fastjson2.JSONObject;
+import com.starry.admin.common.exception.CustomException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import ws.schild.jave.Encoder;
+import ws.schild.jave.MultimediaObject;
+import ws.schild.jave.encode.AudioAttributes;
+import ws.schild.jave.encode.EncodingAttributes;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+
+
+@Slf4j
+public class WxFileUtils {
+
+
+ /**
+ * 下载微信临时素材文件
+ *
+ * @param access_token 微信token
+ * @param mediaId 素材ID
+ * @return InputStream
+ * @throws IOException IOException
+ */
+ public static InputStream getTemporaryMaterial(String access_token, String mediaId) throws IOException {
+ String url = "https://api.weixin.qq.com/cgi-bin/media/get?" + access_token + "=ACCESS_TOKEN&media_id=" + mediaId;
+ // 请求参数
+ HashMap param = new HashMap<>();
+ param.put("media_id", mediaId);
+ // 获取到http连接对象
+ HttpPost httpPost = new HttpPost(url);
+ StringEntity stringEntity = new StringEntity(JSONObject.toJSONString(param));
+ httpPost.setEntity(stringEntity);
+ // 打开链接发送请求 获取到返回的流
+ CloseableHttpClient build = HttpClients.custom().build();
+ CloseableHttpResponse execute = build.execute(httpPost);
+ return execute.getEntity().getContent();
+ }
+
+ public static void audioConvert2Mp3(File source, File target) {
+ if (FileUtil.isEmpty(source)) {
+ log.error("从微信下载的临时素材文件为空");
+ throw new CustomException("音频文件上传失败");
+ }
+ FileUtil.touch("/tmp/jave/ffmpeg-amd64-3.5.0/");
+ AudioAttributes audio = new AudioAttributes();
+ audio.setCodec("libmp3lame");
+ audio.setBitRate(128000);
+ audio.setChannels(2);
+ audio.setSamplingRate(44100);
+ EncodingAttributes attrs = new EncodingAttributes();
+ attrs.setOutputFormat("mp3");
+ attrs.setAudioAttributes(audio);
+ Encoder encoder = new Encoder();
+ MultimediaObject multimediaObject = new MultimediaObject(source);
+ try {
+ encoder.encode(multimediaObject, target, attrs);
+ } catch (Exception ex) {
+ log.error("音频文件格式转化失败", ex);
+ throw new CustomException("音频文件格式转化失败");
+ }
+ }
+
+}
diff --git a/play-admin/src/main/resources/application-test.yml b/play-admin/src/main/resources/application-test.yml
index ce27f18..f5ec4bf 100644
--- a/play-admin/src/main/resources/application-test.yml
+++ b/play-admin/src/main/resources/application-test.yml
@@ -101,26 +101,3 @@ xl:
authCode:
# 登录验证码是否开启,开发环境配置false方便测试
enable: false
-
-
-wx:
- # 消息模板ID
- templateId: o9YG7vWS8It-mddU2Wnknf1jgzTqZtLeBQRLhF54SXQ
- mp:
- # 微信公众号的appid
- appId: wx0683221d9c109406
- # 信公众号的app secret
- secret: 2c0b67a538a1b5de352ec22ce6a69761
- # 微信公众号的toke
- token: AkzAW8yqUhOWAFN550
- # 微信公众号的EncodingAESKey
- aesKey: tsoM88UUQ5uEHJ29xgNiaHHaoswZapS5ijWpaN6hUZF
- config-storage:
- type: redisson
- key-prefix: wx
- redis:
- host: 122.51.20.105
- port: 19087
- password: arcikXa7ZkEBGtLf
-
-
diff --git a/play-admin/src/main/resources/oss.properties b/play-admin/src/main/resources/oss.properties
index eddd26c..ee80ab2 100644
--- a/play-admin/src/main/resources/oss.properties
+++ b/play-admin/src/main/resources/oss.properties
@@ -1,4 +1,4 @@
-aliyun.endpoint=
-aliyun.accessKeyId=
-aliyun.accessKeySecret=
-aliyun.bucketName=
\ No newline at end of file
+aliyun.endpoint=oss-cn-hangzhou.aliyuncs.com
+aliyun.accessKeyId=xg5bkbnSMaq3BNRv
+aliyun.accessKeySecret=2ZcC7boLQYQb66jCyPBbrpMRBekgs1
+aliyun.bucketName=live-cloud-cvoon
\ No newline at end of file
diff --git a/play-common/pom.xml b/play-common/pom.xml
index 6816c05..4754aec 100644
--- a/play-common/pom.xml
+++ b/play-common/pom.xml
@@ -40,6 +40,10 @@
com.baomidou
mybatis-plus-boot-starter
+
+ com.github.yulichang
+ mybatis-plus-join-boot-starter
+
javax.persistence
javax.persistence-api
diff --git a/play-common/src/main/java/com/starry/common/filter/XssFilter.java b/play-common/src/main/java/com/starry/common/filter/XssFilter.java
index 8b03bac..3da90fc 100644
--- a/play-common/src/main/java/com/starry/common/filter/XssFilter.java
+++ b/play-common/src/main/java/com/starry/common/filter/XssFilter.java
@@ -1,5 +1,6 @@
package com.starry.common.filter;
+import cn.hutool.core.util.StrUtil;
import com.starry.common.utils.StringUtils;
import javax.servlet.*;
@@ -32,11 +33,11 @@ public class XssFilter implements Filter {
public void init(FilterConfig filterConfig) {
String tempExcludes = filterConfig.getInitParameter("excludes");
String tempEnabled = filterConfig.getInitParameter("enabled");
- if (StringUtils.isNotEmpty(tempExcludes)) {
+ if (StrUtil.isNotBlank(tempExcludes)) {
String[] url = tempExcludes.split(",");
excludes.addAll(Arrays.asList(url));
}
- if (StringUtils.isNotEmpty(tempEnabled)) {
+ if (StrUtil.isNotBlank(tempEnabled)) {
enabled = Boolean.parseBoolean(tempEnabled);
}
}
diff --git a/play-common/src/main/java/com/starry/common/result/ResultCodeEnum.java b/play-common/src/main/java/com/starry/common/result/ResultCodeEnum.java
index 10f1924..207ce37 100644
--- a/play-common/src/main/java/com/starry/common/result/ResultCodeEnum.java
+++ b/play-common/src/main/java/com/starry/common/result/ResultCodeEnum.java
@@ -10,7 +10,8 @@ public enum ResultCodeEnum implements IBaseEnum {
FAILED(500, "操作失败"),
VALIDATE_FAILED(404, "参数检验失败"),
UNAUTHORIZED(401, "无效的会话,或者会话已过期,请重新登录。"),
- FORBIDDEN(403, "没有相关权限");
+ FORBIDDEN(403, "没有相关权限"),
+ TENANT_NOT_FOUND(403, "租户不存在");
private final int code;
private final String message;
diff --git a/play-common/src/main/java/com/starry/common/utils/VerificationCodeUtils.java b/play-common/src/main/java/com/starry/common/utils/VerificationCodeUtils.java
index 9a54ba4..c6ac11d 100644
--- a/play-common/src/main/java/com/starry/common/utils/VerificationCodeUtils.java
+++ b/play-common/src/main/java/com/starry/common/utils/VerificationCodeUtils.java
@@ -1,7 +1,7 @@
package com.starry.common.utils;
/**
- * @author 杭州世平信息科技有限公司-xuhq
+ * @author admin
* @since 2024/4/9 13:53
**/
public class VerificationCodeUtils {
diff --git a/play-generator/src/main/java/com/starry/generator/utils/VelocityUtils.java b/play-generator/src/main/java/com/starry/generator/utils/VelocityUtils.java
index d500dbc..cbc4633 100644
--- a/play-generator/src/main/java/com/starry/generator/utils/VelocityUtils.java
+++ b/play-generator/src/main/java/com/starry/generator/utils/VelocityUtils.java
@@ -2,6 +2,7 @@ package com.starry.generator.utils;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.starry.common.utils.StringUtils;
@@ -48,7 +49,7 @@ public class VelocityUtils {
VelocityContext velocityContext = new VelocityContext();
velocityContext.put("tplCategory", genTableEntity.getTplCategory());
velocityContext.put("tableName", genTableEntity.getTableName());
- velocityContext.put("functionName", StringUtils.isNotEmpty(functionName) ? functionName : "【请填写功能名称】");
+ velocityContext.put("functionName", StrUtil.isNotBlank(functionName) ? functionName : "【请填写功能名称】");
velocityContext.put("ClassName", genTableEntity.getClassName());
// 首字母小写
velocityContext.put("className", StringUtils.uncapitalize(genTableEntity.getClassName()));
@@ -148,7 +149,7 @@ public class VelocityUtils {
*/
public static void addDicts(Set dicts, List columns) {
for (GenTableColumnEntity column : columns) {
- if (!column.isSuperColumn() && StringUtils.isNotEmpty(column.getDictType()) && StringUtils.equalsAny(column.getHtmlType(), new String[]{GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX})) {
+ if (!column.isSuperColumn() && StrUtil.isNotBlank(column.getDictType()) && StringUtils.equalsAny(column.getHtmlType(), new String[]{GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX})) {
dicts.add("'" + column.getDictType() + "'");
}
}
@@ -204,7 +205,7 @@ public class VelocityUtils {
* @return 上级菜单ID字段
*/
public static String getParentMenuId(JSONObject paramsObj) {
- if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.PARENT_MENU_ID) && StringUtils.isNotEmpty(paramsObj.getString(GenConstants.PARENT_MENU_ID))) {
+ if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.PARENT_MENU_ID) && StrUtil.isNotBlank(paramsObj.getString(GenConstants.PARENT_MENU_ID))) {
return paramsObj.getString(GenConstants.PARENT_MENU_ID);
}
return DEFAULT_PARENT_MENU_ID;
diff --git a/pom.xml b/pom.xml
index d110aa1..486e6f4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,6 +27,7 @@
1.8
3.5.3.2
+ 1.4.10
2.0.7
@@ -72,6 +73,12 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+ com.github.yulichang
+ mybatis-plus-join-boot-starter
+ ${mybatis-plus-join.version}
+
+
cn.hutool
@@ -214,6 +221,24 @@
2.7.9
+
+ ws.schild
+ jave-core
+ 3.5.0
+
+
+ ws.schild
+ jave-native-win64
+ 2.4.6
+
+
+
+
+ ws.schild
+ jave-native-linux64
+ 2.4.6
+
+