ソースを参照

Merge branch 'master' into mall_pay

liujunchi 3 年 前
コミット
09ae58c734
100 ファイル変更1723 行追加418 行削除
  1. 5 3
      cooleshow-auth/auth-api/pom.xml
  2. 1 1
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/AuthTaskFeignService.java
  3. 1 1
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/SysUserFeignService.java
  4. 1 1
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/enums/CertificateTypeEnum.java
  5. 1 2
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/enums/SysUserType.java
  6. 2 2
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/enums/UserLockFlag.java
  7. 1 1
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/enums/YesOrNoEnum.java
  8. 8 2
      cooleshow-auth/auth-server/pom.xml
  9. 13 14
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/LocalFastJsonHttpMessageConverter.java
  10. 9 11
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/ParameterCheckServletRequestWrapper.java
  11. 0 1
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/WebMvcConfig.java
  12. 51 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/filters/EmojiEncodingFilter.java
  13. 2 2
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/enums/UserGenderEnum.java
  14. 2 2
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/enums/UserStatus.java
  15. 80 70
      cooleshow-cms/pom.xml
  16. 73 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/config/LocalFastJsonHttpMessageConverter.java
  17. 86 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/config/ParameterCheckServletRequestWrapper.java
  18. 0 1
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/config/WebMvcConfig.java
  19. 51 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/config/filters/EmojiEncodingFilter.java
  20. 35 2
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/HelpCenterContentController.java
  21. 25 2
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/dao/HelpCenterContentDao.java
  22. 22 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/HelpCenterContent.java
  23. 1 1
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/NewsStatusEnum.java
  24. 17 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/HelpCenterContentService.java
  25. 3 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/HelpCenterCatalogServiceImpl.java
  26. 33 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/HelpCenterContentServiceImpl.java
  27. 4 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/SysNewsInformationServiceImpl.java
  28. 59 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/task/NoticeReleaseTask.java
  29. 63 4
      cooleshow-cms/src/main/resources/config/mybatis/HelpCenterContentMapper.xml
  30. 6 15
      cooleshow-common/pom.xml
  31. 1 2
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/config/EnumConverter.java
  32. 1 2
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/config/EnumConverterFactory.java
  33. 0 128
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/config/RequestAttributeHystrixConcurrencyStrategy.java
  34. 1 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/controller/BaseController.java
  35. 1 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/entity/HttpResponseResult.java
  36. 3 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/AccessSource.java
  37. 0 14
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/BaseEnum.java
  38. 3 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/PlatformEnum.java
  39. 1 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/UserGenderEnum.java
  40. 1 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/exception/BizException.java
  41. 6 2
      cooleshow-mall/mall-admin/pom.xml
  42. 73 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/LocalFastJsonHttpMessageConverter.java
  43. 86 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/ParameterCheckServletRequestWrapper.java
  44. 0 3
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/WebMvcConfig.java
  45. 51 0
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/filters/EmojiEncodingFilter.java
  46. 1 1
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/enums/OrderStatusEnum.java
  47. 1 1
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/adapay/PaymentSdk.java
  48. 10 1
      cooleshow-mall/mall-portal/pom.xml
  49. 73 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/config/LocalFastJsonHttpMessageConverter.java
  50. 86 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/config/ParameterCheckServletRequestWrapper.java
  51. 0 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/config/WebMvcConfig.java
  52. 6 13
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/config/filters/EmojiEncodingFilter.java
  53. 6 0
      cooleshow-task/pom.xml
  54. 60 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/config/LocalFastJsonHttpMessageConverter.java
  55. 84 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/config/ParameterCheckServletRequestWrapper.java
  56. 0 1
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/config/WebMvcConfig.java
  57. 25 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/feign/CmsFeignService.java
  58. 1 2
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/feign/MallPortalFeignService.java
  59. 1 1
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/feign/StudentFeignService.java
  60. 1 1
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/feign/TeacherFeignService.java
  61. 17 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/feign/fallback/CmsFeignServiceFallback.java
  62. 23 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/NoticeReleaseTask.java
  63. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/config/WebMvcConfig.java
  64. 12 0
      cooleshow-user/user-biz/pom.xml
  65. 73 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/config/LocalFastJsonHttpMessageConverter.java
  66. 86 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/config/ParameterCheckServletRequestWrapper.java
  67. 51 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/config/filters/EmojiEncodingFilter.java
  68. 2 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java
  69. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysMessageDao.java
  70. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherAuthEntryRecordDao.java
  71. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonPurchaseRecordDao.java
  72. 97 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/SysMessageQueryInfo.java
  73. 12 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseGroup.java
  74. 1 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroup.java
  75. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroupMember.java
  76. 4 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java
  77. 4 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysMessage.java
  78. 1 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysUserContracts.java
  79. 39 51
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonPurchaseRecord.java
  80. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AccountBizTypeEnum.java
  81. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AudioTypeEnum.java
  82. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AuditEnum.java
  83. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AuditStatusEnum.java
  84. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AuthStatusEnum.java
  85. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CacheNameEnum.java
  86. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ChargeTypeEnum.java
  87. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ClientEnum.java
  88. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CourseGroupEnum.java
  89. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CourseScheduleEnum.java
  90. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/FrozenTypeEnum.java
  91. 1 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/GenderEnum.java
  92. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/GoodTypeEnum.java
  93. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/InOrOutEnum.java
  94. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/JobNatureEnum.java
  95. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageSendMode.java
  96. 34 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  97. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OrderStatusEnum.java
  98. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OrderTypeEnum.java
  99. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/PayChannelEnum.java
  100. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/PeriodEnum.java

+ 5 - 3
cooleshow-auth/auth-api/pom.xml

@@ -12,10 +12,11 @@
 	<artifactId>auth-api</artifactId>
 	<version>1.0</version>
 	<name>auth-api</name>
-	<url>http://maven.apache.org</url>
+
 	<properties>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 	</properties>
+
 	<dependencies>
 		<dependency>
 			<groupId>com.spring4all</groupId>
@@ -23,8 +24,9 @@
 		</dependency>
 
 		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-starter-openfeign</artifactId>
+			<groupId>com.yonge.toolset</groupId>
+			<artifactId>toolset-feign</artifactId>
+			<version>1.0</version>
 		</dependency>
 
 		<dependency>

+ 1 - 1
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/AuthTaskFeignService.java

@@ -1,10 +1,10 @@
 package com.yonge.cooleshow.auth.api.client;
 
+import com.yonge.toolset.feign.config.FeignConfiguration;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 
 import com.yonge.cooleshow.auth.api.client.fallback.AuthTaskFeignServiceFallback;
-import com.yonge.cooleshow.common.config.FeignConfiguration;
 
 @FeignClient(contextId = "authTaskFeignService", name = "auth-server", configuration = { FeignConfiguration.class }, fallback = AuthTaskFeignServiceFallback.class)
 public interface AuthTaskFeignService {

+ 1 - 1
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/client/SysUserFeignService.java

@@ -4,8 +4,8 @@ import com.yonge.cooleshow.auth.api.client.fallback.SysUserFeignServiceFallback;
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.dto.SysUserQueryInfo;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.common.config.FeignConfiguration;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.feign.config.FeignConfiguration;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.cloud.openfeign.FeignClient;

+ 1 - 1
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/enums/CertificateTypeEnum.java

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.auth.api.enums;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * @Author Joburgess

+ 1 - 2
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/enums/SysUserType.java

@@ -1,9 +1,8 @@
 package com.yonge.cooleshow.auth.api.enums;
 
+import com.yonge.toolset.base.enums.BaseEnum;
 import org.apache.commons.lang3.StringUtils;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
-
 public enum SysUserType implements BaseEnum<String, SysUserType> {
 
 	STUDENT("学生"), TEACHER("指导老师"), SYSTEM("系统內置");

+ 2 - 2
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/enums/UserLockFlag.java

@@ -1,8 +1,8 @@
 package com.yonge.cooleshow.auth.api.enums;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
-/** 
+/**
  * 会员状态枚举类
  */
 public enum UserLockFlag implements BaseEnum<Integer, UserLockFlag> {

+ 1 - 1
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/enums/YesOrNoEnum.java

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.auth.api.enums;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 public enum YesOrNoEnum implements BaseEnum<Integer, YesOrNoEnum> {
     NO(0,"否"),

+ 8 - 2
cooleshow-auth/auth-server/pom.xml

@@ -80,8 +80,8 @@
         </dependency>
 
         <dependency>
-			<groupId>com.yonge.toolset</groupId>
-			<artifactId>thirdparty-component</artifactId>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>thirdparty-component</artifactId>
         </dependency>
 
         <dependency>
@@ -90,6 +90,12 @@
             <version>3.2.17</version>
             <scope>compile</scope>
         </dependency>
+
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-emoji</artifactId>
+            <version>1.0</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 13 - 14
cooleshow-common/src/main/java/com/yonge/cooleshow/common/config/LocalFastJsonHttpMessageConverter.java → cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/LocalFastJsonHttpMessageConverter.java

@@ -1,16 +1,4 @@
-package com.yonge.cooleshow.common.config;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.lang.reflect.Type;
-import java.math.BigDecimal;
-import java.util.Date;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.http.HttpInputMessage;
-import org.springframework.http.HttpOutputMessage;
-import org.springframework.http.converter.HttpMessageNotReadableException;
-import org.springframework.http.converter.HttpMessageNotWritableException;
+package com.yonge.cooleshow.auth.config;
 
 import com.alibaba.fastjson.serializer.JSONSerializer;
 import com.alibaba.fastjson.serializer.ObjectSerializer;
@@ -18,8 +6,19 @@ import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
 import com.alibaba.fastjson.serializer.ValueFilter;
 import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
 import com.vdurmont.emoji.EmojiParser;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 import com.yonge.toolset.utils.json.JsonUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.http.HttpInputMessage;
+import org.springframework.http.HttpOutputMessage;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.http.converter.HttpMessageNotWritableException;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.reflect.Type;
+import java.math.BigDecimal;
+import java.util.Date;
 
 public class LocalFastJsonHttpMessageConverter extends FastJsonHttpMessageConverter {
 

+ 9 - 11
cooleshow-common/src/main/java/com/yonge/cooleshow/common/config/ParameterCheckServletRequestWrapper.java → cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/ParameterCheckServletRequestWrapper.java

@@ -1,20 +1,18 @@
-package com.yonge.cooleshow.common.config;
+package com.yonge.cooleshow.auth.config;
 
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.nio.charset.Charset;
+import com.vdurmont.emoji.EmojiParser;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.StreamUtils;
 
 import javax.servlet.ReadListener;
 import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequestWrapper;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.util.StreamUtils;
-
-import com.vdurmont.emoji.EmojiParser;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
 
 public class ParameterCheckServletRequestWrapper extends HttpServletRequestWrapper {
 

+ 0 - 1
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/WebMvcConfig.java

@@ -14,7 +14,6 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 import com.yonge.cooleshow.auth.interceptor.OperationLogInterceptor;
 import com.yonge.cooleshow.common.config.EnumConverterFactory;
-import com.yonge.cooleshow.common.config.LocalFastJsonHttpMessageConverter;
 
 @Configuration
 public class WebMvcConfig implements WebMvcConfigurer {

+ 51 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/config/filters/EmojiEncodingFilter.java

@@ -0,0 +1,51 @@
+package com.yonge.cooleshow.auth.config.filters;
+
+import com.vdurmont.emoji.EmojiParser;
+import com.yonge.cooleshow.auth.config.ParameterCheckServletRequestWrapper;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+public class EmojiEncodingFilter implements Filter {
+
+	@Override
+	public void init(FilterConfig filterConfig) throws ServletException {
+		Filter.super.init(filterConfig);
+	}
+
+	@Override
+	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+		request = new ParameterCheckServletRequestWrapper((HttpServletRequest) request) {
+
+			@Override
+			public String getParameter(String name) {
+				// 参数名
+				String value = super.getParameter(name);
+				if (StringUtils.isNotBlank(value)) {
+					// 返回值之前 先进行 Emoji 转化
+					return EmojiParser.removeAllEmojis(value);
+				}
+				return value;
+			}
+
+			@Override
+			public String[] getParameterValues(String name) {
+				// 参数值
+				// 返回值之前 先进行 Emoji 转化
+				String[] values = super.getParameterValues(name);
+				if (values != null) {
+					for (int i = 0; i < values.length; i++) {
+						values[i] = EmojiParser.removeAllEmojis(values[i]);
+					}
+				}
+				return values;
+			}
+
+		};
+		
+		chain.doFilter(request, response);
+	}
+
+}

+ 2 - 2
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/enums/UserGenderEnum.java

@@ -1,8 +1,8 @@
 package com.yonge.cooleshow.auth.dal.enums;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
-/** 
+/**
  * 会员性别枚举
  */
 public enum UserGenderEnum implements BaseEnum<Integer, UserGenderEnum> {

+ 2 - 2
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/enums/UserStatus.java

@@ -1,8 +1,8 @@
 package com.yonge.cooleshow.auth.dal.enums;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
-/** 
+/**
  * 会员状态枚举类
  */
 public enum UserStatus implements BaseEnum<Integer, UserStatus> {

+ 80 - 70
cooleshow-cms/pom.xml

@@ -1,85 +1,95 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
 
-	<parent>
-		<groupId>com.yonge.cooleshow</groupId>
-		<artifactId>cooleshow</artifactId>
-		<version>1.0</version>
-	</parent>
+    <parent>
+        <groupId>com.yonge.cooleshow</groupId>
+        <artifactId>cooleshow</artifactId>
+        <version>1.0</version>
+    </parent>
 
-	<groupId>com.yonge.cooleshow</groupId>
-	<artifactId>cooleshow-cms</artifactId>
-	<version>1.0</version>
-	<packaging>jar</packaging>
+    <groupId>com.yonge.cooleshow</groupId>
+    <artifactId>cooleshow-cms</artifactId>
+    <version>1.0</version>
+    <packaging>jar</packaging>
 
-	<name>cooleshow-cms</name>
-	<url>http://maven.apache.org</url>
+    <name>cooleshow-cms</name>
+    <url>http://maven.apache.org</url>
 
-	<properties>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-	</properties>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
 
-	<dependencies>
+    <dependencies>
 
-		<dependency>
-			<groupId>com.alibaba.cloud</groupId>
-			<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>com.alibaba.cloud</groupId>
-			<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
 
-		<!-- swagger-spring-boot -->
-		<dependency>
-			<groupId>com.spring4all</groupId>
-			<artifactId>swagger-spring-boot-starter</artifactId>
-		</dependency>
+        <!-- swagger-spring-boot -->
+        <dependency>
+            <groupId>com.spring4all</groupId>
+            <artifactId>swagger-spring-boot-starter</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>com.github.xiaoymin</groupId>
-			<artifactId>swagger-bootstrap-ui</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>swagger-bootstrap-ui</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>com.alibaba</groupId>
-			<artifactId>druid-spring-boot-starter</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>mysql</groupId>
-			<artifactId>mysql-connector-java</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>com.yonge.cooleshow</groupId>
-			<artifactId>auth-api</artifactId>
-		</dependency>
+        <dependency>
+            <groupId>com.yonge.cooleshow</groupId>
+            <artifactId>auth-api</artifactId>
+        </dependency>
 
-		<dependency>
-			<groupId>com.yonge.toolset</groupId>
-			<artifactId>audit-log</artifactId>
-			<exclusions>
-				<exclusion>
-					<artifactId>freemarker</artifactId>
-					<groupId>org.freemarker</groupId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>com.yonge.toolset</groupId>
-			<artifactId>utils</artifactId>
-		</dependency>
-	</dependencies>
-	
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-maven-plugin</artifactId>
-			</plugin>
-		</plugins>
-	</build>
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>audit-log</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>freemarker</artifactId>
+                    <groupId>org.freemarker</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>utils</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-emoji</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-feign</artifactId>
+            <version>1.0</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
 </project>

+ 73 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/config/LocalFastJsonHttpMessageConverter.java

@@ -0,0 +1,73 @@
+package com.yonge.cooleshow.cms.config;
+
+import com.alibaba.fastjson.serializer.JSONSerializer;
+import com.alibaba.fastjson.serializer.ObjectSerializer;
+import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
+import com.alibaba.fastjson.serializer.ValueFilter;
+import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
+import com.vdurmont.emoji.EmojiParser;
+import com.yonge.toolset.base.enums.BaseEnum;
+import com.yonge.toolset.utils.json.JsonUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.http.HttpInputMessage;
+import org.springframework.http.HttpOutputMessage;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.http.converter.HttpMessageNotWritableException;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.reflect.Type;
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class LocalFastJsonHttpMessageConverter extends FastJsonHttpMessageConverter {
+
+	private static final String FORMAT = "yyyy-MM-dd HH:mm:ss";
+
+	@Override
+	protected Object readInternal(Class<? extends Object> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
+		return super.readInternal(clazz, inputMessage);
+	}
+
+	@Override
+	protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
+
+		OutputStream out = outputMessage.getBody();
+		JsonUtil.getConfig().put(Date.class, new SimpleDateFormatSerializer(FORMAT));
+		//JsonUtil.getConfig().put(String.class, new EmojiSerializer());
+		String text = JsonUtil.toJSONString(obj, EnumFilter.instance, getFeatures());
+		byte[] bytes = text.getBytes(getCharset());
+		out.write(bytes);
+	}
+}
+
+class EmojiSerializer implements ObjectSerializer{
+
+	@Override
+	public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
+		serializer.write(EmojiParser.parseToUnicode(object.toString()));
+	}
+	
+}
+
+class EnumFilter implements ValueFilter {
+
+	public static EnumFilter instance = new EnumFilter();
+
+	public EnumFilter() {
+	}
+
+	@Override
+	public Object process(Object object, String name, Object value) {
+		if (value == null || StringUtils.isBlank(value.toString())) {
+			return value;
+		}
+		if (value instanceof BigDecimal || value instanceof Double || value instanceof Float) {
+			return new BigDecimal(value.toString());
+		}
+		if (BaseEnum.class.isAssignableFrom(value.getClass())) {
+			return ((BaseEnum<?, ?>) value).getCode();
+		}
+		return value;
+	}
+}

+ 86 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/config/ParameterCheckServletRequestWrapper.java

@@ -0,0 +1,86 @@
+package com.yonge.cooleshow.cms.config;
+
+import com.vdurmont.emoji.EmojiParser;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.StreamUtils;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+
+public class ParameterCheckServletRequestWrapper extends HttpServletRequestWrapper {
+
+	private byte[] requestBody;
+	private Charset charSet;
+
+	public ParameterCheckServletRequestWrapper(HttpServletRequest request) throws IOException {
+		super(request);
+
+		String requestBodyStr = getRequestPostStr(request);
+		if (StringUtils.isNotBlank(requestBodyStr)) {
+			requestBodyStr = EmojiParser.removeAllEmojis(requestBodyStr);
+			requestBody = requestBodyStr.getBytes(charSet);
+		} else {
+			requestBody = new byte[0];
+		}
+	}
+
+	public String getRequestPostStr(HttpServletRequest request) throws IOException {
+		String charSetStr = request.getCharacterEncoding();
+		if (charSetStr == null) {
+			charSetStr = "UTF-8";
+		}
+		charSet = Charset.forName(charSetStr);
+
+		return StreamUtils.copyToString(request.getInputStream(), charSet);
+	}
+
+	/**
+	 * 重写 getInputStream()
+	 */
+	@Override
+	public ServletInputStream getInputStream() {
+		if (requestBody == null) {
+			requestBody = new byte[0];
+		}
+
+		final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(requestBody);
+
+		return new ServletInputStream() {
+			@Override
+			public boolean isFinished() {
+				return false;
+			}
+
+			@Override
+			public boolean isReady() {
+				return false;
+			}
+
+			@Override
+			public void setReadListener(ReadListener readListener) {
+
+			}
+
+			@Override
+			public int read() {
+				return byteArrayInputStream.read();
+			}
+		};
+	}
+
+	/**
+	 * 重写 getReader()
+	 */
+	@Override
+	public BufferedReader getReader() {
+		return new BufferedReader(new InputStreamReader(getInputStream()));
+	}
+
+}

+ 0 - 1
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/config/WebMvcConfig.java

@@ -14,7 +14,6 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 import com.yonge.cooleshow.cms.interceptor.OperationLogInterceptor;
 import com.yonge.cooleshow.common.config.EnumConverterFactory;
-import com.yonge.cooleshow.common.config.LocalFastJsonHttpMessageConverter;
 
 @Configuration
 public class WebMvcConfig implements WebMvcConfigurer {

+ 51 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/config/filters/EmojiEncodingFilter.java

@@ -0,0 +1,51 @@
+package com.yonge.cooleshow.cms.config.filters;
+
+import com.vdurmont.emoji.EmojiParser;
+import com.yonge.cooleshow.cms.config.ParameterCheckServletRequestWrapper;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+public class EmojiEncodingFilter implements Filter {
+
+	@Override
+	public void init(FilterConfig filterConfig) throws ServletException {
+		Filter.super.init(filterConfig);
+	}
+
+	@Override
+	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+		request = new ParameterCheckServletRequestWrapper((HttpServletRequest) request) {
+
+			@Override
+			public String getParameter(String name) {
+				// 参数名
+				String value = super.getParameter(name);
+				if (StringUtils.isNotBlank(value)) {
+					// 返回值之前 先进行 Emoji 转化
+					return EmojiParser.removeAllEmojis(value);
+				}
+				return value;
+			}
+
+			@Override
+			public String[] getParameterValues(String name) {
+				// 参数值
+				// 返回值之前 先进行 Emoji 转化
+				String[] values = super.getParameterValues(name);
+				if (values != null) {
+					for (int i = 0; i < values.length; i++) {
+						values[i] = EmojiParser.removeAllEmojis(values[i]);
+					}
+				}
+				return values;
+			}
+
+		};
+		
+		chain.doFilter(request, response);
+	}
+
+}

+ 35 - 2
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/HelpCenterContentController.java

@@ -57,16 +57,27 @@ public class HelpCenterContentController extends BaseController {
 		if (helpContent == null) {
 			return failed("参数输入有误");
 		}
+		if (helpContent.getCatalogId() == 2 &&helpContent.getReleaseTime() == null) {
+			return failed("发布时间不能为空");
+		}
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser == null || sysUser.getId() == null) {
 			return failed("用户信息获取失败");
 		}
+		helpContent.setReleaseStatus(0);
 		if (helpContent.getId() != null && helpContent.getId() > 0) {
 
 			HelpCenterContent helpCenterContent = helpCenterContentService.get(helpContent.getId());
 			if (helpCenterContent == null) {
 				return failed("未找到相关信息");
 			}
+
+			if (helpCenterContent.getCatalogId() ==2) {
+				if (helpCenterContent.getReleaseStatus() == 1) {
+					return failed("公告已发布不能修改");
+				}
+			}
+
 			if (helpCenterContent.getStatus() == 1) {
 				return failed("启用状态下,不能修改");
 			}
@@ -77,10 +88,10 @@ public class HelpCenterContentController extends BaseController {
 			return helpCenterContentService.update(helpContent) > 0 ? succeed() : failed("修改失败");
 		} else {
 			if (StringUtils.isBlank(helpContent.getContent())) {
-				return failed("帮助内容不能为空");
+				return failed("内容不能为空");
 			}
 			if (StringUtils.isBlank(helpContent.getTitle())) {
-				return failed("帮助中心标题不能为空");
+				return failed("标题不能为空");
 			}
 			if (helpContent.getCatalogId() < 0) {
 				return failed("请设置分类");
@@ -104,6 +115,11 @@ public class HelpCenterContentController extends BaseController {
 		if (helpCenterContent == null) {
 			return failed("未找到相关信息");
 		}
+		if (helpCenterContent.getCatalogId() ==2) {
+			if (helpCenterContent.getReleaseStatus() == 1) {
+				return failed("公告已发布不能修改");
+			}
+		}
 		if (helpCenterContent.getStatus() == 1) {
 			return failed("启用状态下,不能删除");
 		}
@@ -120,6 +136,23 @@ public class HelpCenterContentController extends BaseController {
 		if (helpCenterContent == null) {
 			return failed("未找到相关信息");
 		}
+		if (helpCenterContent.getCatalogId() == 2) {
+			return failed("公告不可禁用");
+		}
 		return succeed(helpCenterContentService.status(id));
 	}
+
+
+	@ApiOperation("发布公告")
+	@PostMapping(value = "release/{id}")
+	@ApiImplicitParam(name = "id", value = "编号", required = true, dataType = "Integer", paramType = "path")
+	public Object releaseNotice(@PathVariable("id") Long id) {
+		if (id == null || id <= 0)
+			return failed("ID解析失败");
+		HelpCenterContent helpCenterContent = helpCenterContentService.get(id);
+		if (helpCenterContent == null) {
+			return failed("未找到相关信息");
+		}
+		return succeed(helpCenterContentService.noticeRelease(helpCenterContent));
+	}
 }

+ 25 - 2
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/dao/HelpCenterContentDao.java

@@ -1,15 +1,38 @@
 package com.yonge.cooleshow.cms.dal.dao;
 
+import java.util.List;
 import java.util.Map;
 
 import com.yonge.cooleshow.cms.dal.entity.HelpCenterContent;
 import com.yonge.toolset.mybatis.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
 
 public interface HelpCenterContentDao extends BaseDAO<Long, HelpCenterContent> {
 
-	public int updateContentByCatalog(Map<String, Object> map);
+    public int updateContentByCatalog(Map<String, Object> map);
 
-	public int deleteContentByCatalog(Long catalogId);
+    public int deleteContentByCatalog(Long catalogId);
 
     void status(Long id);
+
+    /**
+     * 发送公告到老师
+     *
+     * @param helpCenterContent
+     */
+    void noticeReleaseToTeacher(@Param("param") HelpCenterContent helpCenterContent);
+
+    /**
+     * 发送公告到学生
+     *
+     * @param helpCenterContent
+     */
+    void noticeReleaseToStudent(@Param("param") HelpCenterContent helpCenterContent);
+
+    /**
+     * 查询将要发布的公告 (0 ~ 当前时间 + 5 min 的未发布的公告) 循环发布
+     *
+     * @return
+     */
+    List<HelpCenterContent> selectNeedReleaseNotice();
 }

+ 22 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/HelpCenterContent.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.util.Date;
 
 public class HelpCenterContent {
 
@@ -18,6 +19,12 @@ public class HelpCenterContent {
 	@NotBlank(message = "正文不能为空")
 	private String content = "";
 
+	@ApiModelProperty("发布时间")
+	private Date releaseTime;
+
+	@ApiModelProperty("发布状态 0:未发布 1:已发布")
+	private Integer releaseStatus;
+
 	@ApiModelProperty(value = "父分类ID,1:帮助中心,2:公告管理",required = true)
 	@NotNull(message = "分类不能为空 ")
 	private Long catalogId;
@@ -158,4 +165,19 @@ public class HelpCenterContent {
 		return buf.toString();
 	}
 
+	public Date getReleaseTime() {
+		return releaseTime;
+	}
+
+	public void setReleaseTime(Date releaseTime) {
+		this.releaseTime = releaseTime;
+	}
+
+	public Integer getReleaseStatus() {
+		return releaseStatus;
+	}
+
+	public void setReleaseStatus(Integer releaseStatus) {
+		this.releaseStatus = releaseStatus;
+	}
 }

+ 1 - 1
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/NewsStatusEnum.java

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.cms.dal.entity;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 public enum NewsStatusEnum implements BaseEnum<Integer, NewsStatusEnum> {
 

+ 17 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/HelpCenterContentService.java

@@ -3,6 +3,8 @@ package com.yonge.cooleshow.cms.service;
 import com.yonge.cooleshow.cms.dal.entity.HelpCenterContent;
 import com.yonge.toolset.mybatis.service.BaseService;
 
+import java.util.List;
+
 public interface HelpCenterContentService extends BaseService<Long,HelpCenterContent> {
 	
 	public boolean updateContentByCatalog(Long catalogId,Integer status);
@@ -10,4 +12,19 @@ public interface HelpCenterContentService extends BaseService<Long,HelpCenterCon
 	public boolean deleteContentByCatalog(Long catalogId);
 
     boolean status(Long id);
+
+    /**
+     * 发布公告
+     *
+     * @param helpCenterContent
+     * @return
+     */
+    boolean noticeRelease(HelpCenterContent helpCenterContent);
+
+    /**
+     * 查询将要发布的公告 (0 ~ 当前时间 + 5 min 的未发布的公告) 循环发布
+     *
+     * @return
+     */
+    List<HelpCenterContent> getNeedReleaseNotice();
 }

+ 3 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/HelpCenterCatalogServiceImpl.java

@@ -11,6 +11,7 @@ import com.yonge.cooleshow.cms.dal.entity.HelpCenterCatalog;
 import com.yonge.cooleshow.cms.service.HelpCenterCatalogService;
 import com.yonge.cooleshow.cms.service.HelpCenterContentService;
 import com.yonge.toolset.mybatis.dal.BaseDAO;
+import org.springframework.transaction.annotation.Transactional;
 
 @Service
 public class HelpCenterCatalogServiceImpl extends BaseServiceImpl<Long, HelpCenterCatalog> implements HelpCenterCatalogService {
@@ -39,11 +40,13 @@ public class HelpCenterCatalogServiceImpl extends BaseServiceImpl<Long, HelpCent
 		return dataList;
 	}
 
+	@Transactional
 	public boolean updateCatalog(HelpCenterCatalog catalog) {
 		return helpCenterCatalogDao.update(catalog) > 0 && helpCenterContentService.updateContentByCatalog(catalog.getId(), catalog.getStatus());
 	}
 
 	@Override
+	@Transactional
 	public boolean deleteCatalog(Long id) {
 		return helpCenterCatalogDao.delete(id) > 0 && helpCenterContentService.deleteContentByCatalog(id);
 	}

+ 33 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/HelpCenterContentServiceImpl.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.cms.service.impl;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import com.yonge.toolset.mybatis.service.impl.BaseServiceImpl;
@@ -11,6 +12,7 @@ import com.yonge.cooleshow.cms.dal.dao.HelpCenterContentDao;
 import com.yonge.cooleshow.cms.dal.entity.HelpCenterContent;
 import com.yonge.cooleshow.cms.service.HelpCenterContentService;
 import com.yonge.toolset.mybatis.dal.BaseDAO;
+import org.springframework.transaction.annotation.Transactional;
 
 @Service
 public class HelpCenterContentServiceImpl extends BaseServiceImpl<Long, HelpCenterContent> implements HelpCenterContentService {
@@ -24,6 +26,7 @@ public class HelpCenterContentServiceImpl extends BaseServiceImpl<Long, HelpCent
 	}
 
 	@Override
+	@Transactional
 	public boolean updateContentByCatalog(Long catalogId, Integer status) {
 		Map<String, Object> map = new HashMap<String, Object>();
 		map.put("catalogId", catalogId);
@@ -33,16 +36,46 @@ public class HelpCenterContentServiceImpl extends BaseServiceImpl<Long, HelpCent
 	}
 
 	@Override
+	@Transactional
 	public boolean deleteContentByCatalog(Long catalogId) {
 		contentCenterDao.deleteContentByCatalog(catalogId);
 		return true;
 	}
 
     @Override
+	@Transactional
     public boolean status(Long id) {
 
 		contentCenterDao.status(id);
 		return true;
     }
 
+    @Override
+	@Transactional
+    public boolean noticeRelease(HelpCenterContent helpCenterContent) {
+        if (helpCenterContent.getCatalogId() == 1 || helpCenterContent.getReleaseStatus() == 1) {
+			return false;
+		}
+
+		HelpCenterContent centerContent = contentCenterDao.get(helpCenterContent.getId());
+		if (centerContent.getReleaseTime().compareTo(helpCenterContent.getReleaseTime()) > 0) {
+			return false;
+		}
+
+		// 发送老师端
+		if ("TEACHER".equals(helpCenterContent.getCatalogType())) {
+			contentCenterDao.noticeReleaseToTeacher(helpCenterContent);
+		} else if ("STUDENT".equals(helpCenterContent.getCatalogType())) {
+			// 发送学生端
+			contentCenterDao.noticeReleaseToStudent(helpCenterContent);
+		}
+		helpCenterContent.setReleaseStatus(1);
+		return contentCenterDao.update(helpCenterContent)>0;
+    }
+
+	@Override
+	public List<HelpCenterContent> getNeedReleaseNotice() {
+		return contentCenterDao.selectNeedReleaseNotice();
+	}
+
 }

+ 4 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/SysNewsInformationServiceImpl.java

@@ -14,6 +14,7 @@ import com.yonge.toolset.mybatis.service.impl.BaseServiceImpl;
 import com.yonge.toolset.utils.collection.MapUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 
@@ -34,6 +35,7 @@ public class SysNewsInformationServiceImpl extends BaseServiceImpl<Long, SysNews
 	}
 
 	@Override
+	@Transactional
 	public boolean deleteWithLogical(Long id) {
 		sysNewsInformationDao.deleteWithLogical(id);
 		return true;
@@ -134,6 +136,7 @@ public class SysNewsInformationServiceImpl extends BaseServiceImpl<Long, SysNews
 	}
 
 	@Override
+	@Transactional
 	public boolean autoUpdateStatus() {
 		List<SysNewsInformation> list = sysNewsInformationDao.queryNeedUpdateStatusList();
 		if(list != null && list.size() > 0){
@@ -171,6 +174,7 @@ public class SysNewsInformationServiceImpl extends BaseServiceImpl<Long, SysNews
     }
 
     @Override
+	@Transactional
     public boolean updateStatus(Long id) {
 		sysNewsInformationDao.updateStatus(id);
 

+ 59 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/task/NoticeReleaseTask.java

@@ -0,0 +1,59 @@
+package com.yonge.cooleshow.cms.task;
+
+import com.yonge.cooleshow.cms.dal.entity.HelpCenterContent;
+import com.yonge.cooleshow.cms.service.HelpCenterContentService;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.models.auth.In;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.Instant;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Description 公告发布轮询
+ *
+ * @author liujunchi
+ * @date 2022-04-29
+ */
+@RestController
+@RequestMapping("/task")
+public class NoticeReleaseTask {
+    private Logger LOGGER = LoggerFactory.getLogger(NoticeReleaseTask.class);
+    @Autowired
+    private HelpCenterContentService helpCenterContentService;
+
+    /**
+     * 公告发布轮询
+     */
+    @GetMapping("/noticeRelease")
+    public HttpResponseResult noticeRelease(){
+        // 查询将要发布的公告 (0 ~ 当前时间 + 5 min 的未发布的公告) 循环发布
+        List<HelpCenterContent> helpCenterContents = helpCenterContentService.getNeedReleaseNotice();
+        for (HelpCenterContent helpCenterContent : helpCenterContents) {
+            if (helpCenterContent.getReleaseTime().compareTo(new Date()) <= 0) {
+                helpCenterContentService.noticeRelease(helpCenterContent);
+            } else {
+                // 休眠到时间后,发送消息
+                new Thread(()->{
+                    long time = helpCenterContent.getReleaseTime().toInstant().getEpochSecond()
+                            - Instant.now().getEpochSecond();
+                    try {
+                        Thread.sleep(time * 1000);
+                        helpCenterContentService.noticeRelease(helpCenterContent);
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                        LOGGER.warn(e.getMessage());
+                    }
+                }).start();
+            }
+        }
+        return HttpResponseResult.succeed();
+    }
+
+}

+ 63 - 4
cooleshow-cms/src/main/resources/config/mybatis/HelpCenterContentMapper.xml

@@ -6,6 +6,8 @@
 		<result column="title_" property="title" jdbcType="VARCHAR" />
 		<result column="create_on_" property="createOn" jdbcType="TIMESTAMP" />
 		<result column="modify_on_" property="modifyOn" jdbcType="TIMESTAMP" />
+		<result column="release_time_" property="releaseTime" jdbcType="INTEGER" />
+		<result column="release_status_" property="releaseStatus" jdbcType="INTEGER" />
 		<result column="status_" property="status" jdbcType="INTEGER" />
 		<result column="order_" property="order" jdbcType="INTEGER" />
 		<result column="catalog_id_" property="catalogId" jdbcType="BIGINT" />
@@ -38,12 +40,12 @@
 	</sql>
 	
 	<sql id="Base_Column_List">
-		id_, title_, catalog_id_, create_on_, modify_on_,status_,order_
+		id_, title_, catalog_id_, create_on_, modify_on_,status_,order_,release_time_,release_status_
 	</sql>
 
 	<sql id="Base_Column_List_union">
 		content.id_, content.title_, content.catalog_id_,
-		content.create_on_,
+		content.create_on_,content.release_time_,content.release_status_,
 		content.modify_on_,content.status_,content.content_,content.order_,
 		catalog.id_,
 		catalog.name_, catalog.parent_id_,content.catalog_type_,content.create_by_,content.update_by_
@@ -93,13 +95,13 @@
 	<insert id="insert" parameterType="com.yonge.cooleshow.cms.dal.entity.HelpCenterContent">
 		insert into help_center_content
 		(id_, title_, catalog_id_,
-		create_on_, modify_on_, content_,status_,order_,update_by_,create_by_,catalog_type_
+		create_on_, modify_on_, content_,status_,order_,update_by_,create_by_,catalog_type_,release_time_,release_status_
 		)
 		values
 		(#{id,jdbcType=INTEGER}, #{title,jdbcType=VARCHAR},
 		#{catalogId,jdbcType=INTEGER},
 		#{createOn,jdbcType=TIMESTAMP},
-		#{modifyOn,jdbcType=TIMESTAMP}, #{content,jdbcType=LONGVARCHAR},#{status,jdbcType=INTEGER},#{order,jdbcType=INTEGER},#{createBy},#{updateBy},#{catalogType}
+		#{modifyOn,jdbcType=TIMESTAMP}, #{content,jdbcType=LONGVARCHAR},#{status,jdbcType=INTEGER},#{order,jdbcType=INTEGER},#{createBy},#{updateBy},#{catalogType},#{releaseTime},#{releaseStatus}
 		)
 	</insert>
 
@@ -133,6 +135,12 @@
 			<if test="createBy != null">
 				create_by_ = #{createBy},
 			</if>
+			<if test="releaseStatus != null">
+				release_status_ = #{releaseStatus},
+			</if>
+			<if test="releaseTime != null">
+				release_time_ = #{releaseTime},
+			</if>
 			<if test="catalogType != null and catalogType != ''">
 				catalog_type_ = #{catalogType}
 			</if>
@@ -152,6 +160,8 @@
 		content_ =
 		#{content,jdbcType=LONGVARCHAR},
 		status_= #{status,jdbcType=INTEGER},
+		release_status_= #{releaseStatus,jdbcType=INTEGER},
+		release_time_= #{releaseTime,jdbcType=INTEGER},
 		order_= #{order,jdbcType=INTEGER}
 		where id_ = #{id,jdbcType=INTEGER}
 	</update>
@@ -167,6 +177,8 @@
 		#{modifyOn,jdbcType=TIMESTAMP},
 		status_ = #{status,jdbcType=INTEGER},
 		order_ = #{order,jdbcType=INTEGER},
+		release_time_ = #{releaseTime,jdbcType=INTEGER},
+		release_status_ = #{releaseStatus,jdbcType=INTEGER}
 		where id_ = #{id,jdbcType=INTEGER}
 	</update>
 	
@@ -178,4 +190,51 @@
 		update help_center_content set status_=if(status_ =0,1,0) where id_=#{catalogId}
 
 	</update>
+
+	<insert id="noticeReleaseToTeacher">
+		insert into sys_message
+			(
+		user_id_,type_, title_, content_,status_, receiver_, send_time_,  create_on_, modify_on_,  group_, client_id_
+			)
+		SELECT
+			t.user_id_,
+			3,
+			#{param.title},
+			#{param.content},
+			2,
+			su.phone_,
+			#{param.releaseTime},
+			now(),now(),'NOTICE','TEACHER'
+		from teacher t
+		left join sys_user su on su.id_ = t.user_id_
+	</insert>
+
+	<insert id="noticeReleaseToStudent">
+		insert into sys_message
+		(
+		user_id_,type_, title_, content_,status_, receiver_, send_time_,  create_on_, modify_on_,  group_, client_id_
+		)
+		SELECT
+		t.user_id_,
+		3,
+		#{param.title},
+		#{param.content},
+		2,
+		su.phone_,
+		#{param.releaseTime},
+		now(),now(),'NOTICE','STUDENT'
+		from student t
+		left join sys_user su on su.id_ = t.user_id_
+	</insert>
+
+	<select id="selectNeedReleaseNotice" resultMap="HelpCenterContent">
+		select
+		<include refid="Base_Column_List_union" />
+		from help_center_content content
+		left join help_center_catalog catalog on
+		content.catalog_id_=catalog.id_
+		where content.status_ = 0
+		and content.release_time_ &lt;= date_add(now(),interval 5 MINUTE)
+		and content.catalog_id_ = 2
+	</select>
 </mapper>

+ 6 - 15
cooleshow-common/pom.xml

@@ -14,19 +14,21 @@
 	<packaging>jar</packaging>
 
 	<name>cooleshow-common</name>
-	<url>http://maven.apache.org</url>
 
 	<properties>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 	</properties>
 
 	<dependencies>
-
 		<dependency>
 			<groupId>com.yonge.toolset</groupId>
-			<artifactId>thirdparty-component</artifactId>
+			<artifactId>toolset-base</artifactId>
+			<version>1.0</version>
+		</dependency>
+		<dependency>
+			<groupId>com.yonge.toolset</groupId>
+			<artifactId>utils</artifactId>
 		</dependency>
-
 		<!-- Redis缓存整合开始 -->
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
@@ -43,20 +45,9 @@
 			<artifactId>jedis</artifactId>
 		</dependency>
 		<!-- Redis缓存整合结束 -->
-
 		<dependency>
 			<groupId>org.springframework.cloud</groupId>
 			<artifactId>spring-cloud-starter-oauth2</artifactId>
 		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-starter-openfeign</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>com.vdurmont</groupId>
-			<artifactId>emoji-java</artifactId>
-		</dependency>
 	</dependencies>
 </project>

+ 1 - 2
cooleshow-common/src/main/java/com/yonge/cooleshow/common/config/EnumConverter.java

@@ -1,9 +1,8 @@
 package com.yonge.cooleshow.common.config;
 
+import com.yonge.toolset.base.enums.BaseEnum;
 import org.springframework.core.convert.converter.Converter;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
-
 public class EnumConverter<T extends BaseEnum<?, ?>> implements Converter<String, T> {
 
 	private Class<T> enumType;

+ 1 - 2
cooleshow-common/src/main/java/com/yonge/cooleshow/common/config/EnumConverterFactory.java

@@ -1,7 +1,6 @@
 package com.yonge.cooleshow.common.config;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
-
+import com.yonge.toolset.base.enums.BaseEnum;
 import org.springframework.core.convert.converter.Converter;
 import org.springframework.core.convert.converter.ConverterFactory;
 import org.springframework.stereotype.Component;

+ 0 - 128
cooleshow-common/src/main/java/com/yonge/cooleshow/common/config/RequestAttributeHystrixConcurrencyStrategy.java

@@ -1,128 +0,0 @@
-package com.yonge.cooleshow.common.config;
-
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-import org.springframework.web.context.request.RequestAttributes;
-import org.springframework.web.context.request.RequestContextHolder;
-
-import com.netflix.hystrix.HystrixThreadPoolKey;
-import com.netflix.hystrix.HystrixThreadPoolProperties;
-import com.netflix.hystrix.strategy.HystrixPlugins;
-import com.netflix.hystrix.strategy.concurrency.HystrixConcurrencyStrategy;
-import com.netflix.hystrix.strategy.concurrency.HystrixRequestVariable;
-import com.netflix.hystrix.strategy.concurrency.HystrixRequestVariableLifecycle;
-import com.netflix.hystrix.strategy.eventnotifier.HystrixEventNotifier;
-import com.netflix.hystrix.strategy.executionhook.HystrixCommandExecutionHook;
-import com.netflix.hystrix.strategy.metrics.HystrixMetricsPublisher;
-import com.netflix.hystrix.strategy.properties.HystrixPropertiesStrategy;
-import com.netflix.hystrix.strategy.properties.HystrixProperty;
-
-//@Component
-public class RequestAttributeHystrixConcurrencyStrategy extends HystrixConcurrencyStrategy {
-	private static final Logger log = LoggerFactory.getLogger(RequestAttributeHystrixConcurrencyStrategy.class);
-
-	private HystrixConcurrencyStrategy delegate;
-
-	public RequestAttributeHystrixConcurrencyStrategy() {
-		try {
-			this.delegate = HystrixPlugins.getInstance().getConcurrencyStrategy();
-			if (this.delegate instanceof RequestAttributeHystrixConcurrencyStrategy) {
-				// Welcome to singleton hell...
-				return;
-			}
-			HystrixCommandExecutionHook commandExecutionHook = HystrixPlugins
-					.getInstance().getCommandExecutionHook();
-			HystrixEventNotifier eventNotifier = HystrixPlugins.getInstance()
-					.getEventNotifier();
-			HystrixMetricsPublisher metricsPublisher = HystrixPlugins.getInstance()
-					.getMetricsPublisher();
-			HystrixPropertiesStrategy propertiesStrategy = HystrixPlugins.getInstance()
-					.getPropertiesStrategy();
-			this.logCurrentStateOfHystrixPlugins(eventNotifier, metricsPublisher,
-					propertiesStrategy);
-			HystrixPlugins.reset();
-			HystrixPlugins.getInstance().registerConcurrencyStrategy(this);
-			HystrixPlugins.getInstance()
-					.registerCommandExecutionHook(commandExecutionHook);
-			HystrixPlugins.getInstance().registerEventNotifier(eventNotifier);
-			HystrixPlugins.getInstance().registerMetricsPublisher(metricsPublisher);
-			HystrixPlugins.getInstance().registerPropertiesStrategy(propertiesStrategy);
-		}
-		catch (Exception e) {
-			log.error("Failed to register Sleuth Hystrix Concurrency Strategy", e);
-		}
-	}
-
-	private void logCurrentStateOfHystrixPlugins(HystrixEventNotifier eventNotifier,
-			HystrixMetricsPublisher metricsPublisher,
-			HystrixPropertiesStrategy propertiesStrategy) {
-		if (log.isDebugEnabled()) {
-			log.debug("Current Hystrix plugins configuration is ["
-					+ "concurrencyStrategy [" + this.delegate + "]," + "eventNotifier ["
-					+ eventNotifier + "]," + "metricPublisher [" + metricsPublisher + "],"
-					+ "propertiesStrategy [" + propertiesStrategy + "]," + "]");
-			log.debug("Registering Sleuth Hystrix Concurrency Strategy.");
-		}
-	}
-
-	@Override
-	public <T> Callable<T> wrapCallable(Callable<T> callable) {
-		RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
-		return new WrappedCallable<>(callable, requestAttributes);
-	}
-
-	@Override
-	public ThreadPoolExecutor getThreadPool(HystrixThreadPoolKey threadPoolKey,
-			HystrixProperty<Integer> corePoolSize,
-			HystrixProperty<Integer> maximumPoolSize,
-			HystrixProperty<Integer> keepAliveTime, TimeUnit unit,
-			BlockingQueue<Runnable> workQueue) {
-		return this.delegate.getThreadPool(threadPoolKey, corePoolSize, maximumPoolSize,
-				keepAliveTime, unit, workQueue);
-	}
-
-	@Override
-	public ThreadPoolExecutor getThreadPool(HystrixThreadPoolKey threadPoolKey,
-			HystrixThreadPoolProperties threadPoolProperties) {
-		return this.delegate.getThreadPool(threadPoolKey, threadPoolProperties);
-	}
-
-	@Override
-	public BlockingQueue<Runnable> getBlockingQueue(int maxQueueSize) {
-		return this.delegate.getBlockingQueue(maxQueueSize);
-	}
-
-	@Override
-	public <T> HystrixRequestVariable<T> getRequestVariable(
-			HystrixRequestVariableLifecycle<T> rv) {
-		return this.delegate.getRequestVariable(rv);
-	}
-
-	static class WrappedCallable<T> implements Callable<T> {
-
-		private final Callable<T> target;
-		private final RequestAttributes requestAttributes;
-
-		public WrappedCallable(Callable<T> target, RequestAttributes requestAttributes) {
-			this.target = target;
-			this.requestAttributes = requestAttributes;
-		}
-
-		@Override
-		public T call() throws Exception {
-			try {
-				RequestContextHolder.setRequestAttributes(requestAttributes);
-				return target.call();
-			}
-			finally {
-				RequestContextHolder.resetRequestAttributes();
-			}
-		}
-	}
-}

+ 1 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/controller/BaseController.java

@@ -27,7 +27,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.exception.BizException;
-import com.yonge.toolset.thirdparty.exception.ThirdpartyException;
+import com.yonge.toolset.base.exception.ThirdpartyException;
 import com.yonge.toolset.utils.http.HttpUtil;
 
 @ControllerAdvice

+ 1 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/entity/HttpResponseResult.java

@@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.yonge.cooleshow.common.exception.BizException;
-import com.yonge.toolset.thirdparty.exception.ThirdpartyException;
+import com.yonge.toolset.base.exception.ThirdpartyException;
 import com.yonge.toolset.utils.http.HttpUtil;
 import com.yonge.toolset.utils.json.JsonUtil;
 import org.apache.commons.codec.binary.Base64;

+ 3 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/AccessSource.java

@@ -1,6 +1,8 @@
 package com.yonge.cooleshow.common.enums;
 
-/** 
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
  * @author sunzl 
  * 2015年8月25日 下午4:19:00 
  * 会员状态枚举类

+ 0 - 14
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/BaseEnum.java

@@ -1,14 +0,0 @@
-package com.yonge.cooleshow.common.enums;
-
-/**
- * 枚举类基础类
- */
-public interface BaseEnum<T, E extends Enum<E>> {
-
-	/**
-	 * 获取枚举类的code值
-	 * @return
-	 */
-	public T getCode();
-
-}

+ 3 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/PlatformEnum.java

@@ -1,12 +1,14 @@
 package com.yonge.cooleshow.common.enums;
 
+import com.yonge.toolset.base.enums.BaseEnum;
+
 /**
  * Description
  *
  * @author liujunchi
  * @date 2022-04-24
  */
-public enum PlatformEnum implements BaseEnum<String,PlatformEnum>{
+public enum PlatformEnum implements BaseEnum<String,PlatformEnum> {
 
     STUDENT("STUDENT","STUDENT"),
     TEACHER("TEACHER","TEACHER");

+ 1 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/UserGenderEnum.java

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.common.enums;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * @author sunzl 

+ 1 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/exception/BizException.java

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.common.exception;
 
-import com.yonge.toolset.utils.string.MessageFormatter;
+import com.yonge.toolset.base.string.MessageFormatter;
 
 public class BizException extends RuntimeException {
 

+ 6 - 2
cooleshow-mall/mall-admin/pom.xml

@@ -60,12 +60,16 @@
             <scope>compile</scope>
         </dependency>
 
-
-
         <dependency>
             <groupId>com.yonge.cooleshow</groupId>
             <artifactId>mall-pay</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-emoji</artifactId>
+            <version>1.0</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 73 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/LocalFastJsonHttpMessageConverter.java

@@ -0,0 +1,73 @@
+package com.yonge.cooleshow.admin.config;
+
+import com.alibaba.fastjson.serializer.JSONSerializer;
+import com.alibaba.fastjson.serializer.ObjectSerializer;
+import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
+import com.alibaba.fastjson.serializer.ValueFilter;
+import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
+import com.vdurmont.emoji.EmojiParser;
+import com.yonge.toolset.base.enums.BaseEnum;
+import com.yonge.toolset.utils.json.JsonUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.http.HttpInputMessage;
+import org.springframework.http.HttpOutputMessage;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.http.converter.HttpMessageNotWritableException;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.reflect.Type;
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class LocalFastJsonHttpMessageConverter extends FastJsonHttpMessageConverter {
+
+	private static final String FORMAT = "yyyy-MM-dd HH:mm:ss";
+
+	@Override
+	protected Object readInternal(Class<? extends Object> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
+		return super.readInternal(clazz, inputMessage);
+	}
+
+	@Override
+	protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
+
+		OutputStream out = outputMessage.getBody();
+		JsonUtil.getConfig().put(Date.class, new SimpleDateFormatSerializer(FORMAT));
+		//JsonUtil.getConfig().put(String.class, new EmojiSerializer());
+		String text = JsonUtil.toJSONString(obj, EnumFilter.instance, getFeatures());
+		byte[] bytes = text.getBytes(getCharset());
+		out.write(bytes);
+	}
+}
+
+class EmojiSerializer implements ObjectSerializer{
+
+	@Override
+	public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
+		serializer.write(EmojiParser.parseToUnicode(object.toString()));
+	}
+	
+}
+
+class EnumFilter implements ValueFilter {
+
+	public static EnumFilter instance = new EnumFilter();
+
+	public EnumFilter() {
+	}
+
+	@Override
+	public Object process(Object object, String name, Object value) {
+		if (value == null || StringUtils.isBlank(value.toString())) {
+			return value;
+		}
+		if (value instanceof BigDecimal || value instanceof Double || value instanceof Float) {
+			return new BigDecimal(value.toString());
+		}
+		if (BaseEnum.class.isAssignableFrom(value.getClass())) {
+			return ((BaseEnum<?, ?>) value).getCode();
+		}
+		return value;
+	}
+}

+ 86 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/ParameterCheckServletRequestWrapper.java

@@ -0,0 +1,86 @@
+package com.yonge.cooleshow.admin.config;
+
+import com.vdurmont.emoji.EmojiParser;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.StreamUtils;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+
+public class ParameterCheckServletRequestWrapper extends HttpServletRequestWrapper {
+
+	private byte[] requestBody;
+	private Charset charSet;
+
+	public ParameterCheckServletRequestWrapper(HttpServletRequest request) throws IOException {
+		super(request);
+
+		String requestBodyStr = getRequestPostStr(request);
+		if (StringUtils.isNotBlank(requestBodyStr)) {
+			requestBodyStr = EmojiParser.removeAllEmojis(requestBodyStr);
+			requestBody = requestBodyStr.getBytes(charSet);
+		} else {
+			requestBody = new byte[0];
+		}
+	}
+
+	public String getRequestPostStr(HttpServletRequest request) throws IOException {
+		String charSetStr = request.getCharacterEncoding();
+		if (charSetStr == null) {
+			charSetStr = "UTF-8";
+		}
+		charSet = Charset.forName(charSetStr);
+
+		return StreamUtils.copyToString(request.getInputStream(), charSet);
+	}
+
+	/**
+	 * 重写 getInputStream()
+	 */
+	@Override
+	public ServletInputStream getInputStream() {
+		if (requestBody == null) {
+			requestBody = new byte[0];
+		}
+
+		final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(requestBody);
+
+		return new ServletInputStream() {
+			@Override
+			public boolean isFinished() {
+				return false;
+			}
+
+			@Override
+			public boolean isReady() {
+				return false;
+			}
+
+			@Override
+			public void setReadListener(ReadListener readListener) {
+
+			}
+
+			@Override
+			public int read() {
+				return byteArrayInputStream.read();
+			}
+		};
+	}
+
+	/**
+	 * 重写 getReader()
+	 */
+	@Override
+	public BufferedReader getReader() {
+		return new BufferedReader(new InputStreamReader(getInputStream()));
+	}
+
+}

+ 0 - 3
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/WebMvcConfig.java

@@ -1,14 +1,11 @@
 package com.yonge.cooleshow.admin.config;
 
 import com.yonge.cooleshow.common.config.EnumConverterFactory;
-import com.yonge.cooleshow.common.config.LocalFastJsonHttpMessageConverter;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.format.FormatterRegistry;
 import org.springframework.http.MediaType;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 

+ 51 - 0
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/filters/EmojiEncodingFilter.java

@@ -0,0 +1,51 @@
+package com.yonge.cooleshow.admin.config.filters;
+
+import com.vdurmont.emoji.EmojiParser;
+import com.yonge.cooleshow.admin.config.ParameterCheckServletRequestWrapper;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+public class EmojiEncodingFilter implements Filter {
+
+	@Override
+	public void init(FilterConfig filterConfig) throws ServletException {
+		Filter.super.init(filterConfig);
+	}
+
+	@Override
+	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+		request = new ParameterCheckServletRequestWrapper((HttpServletRequest) request) {
+
+			@Override
+			public String getParameter(String name) {
+				// 参数名
+				String value = super.getParameter(name);
+				if (StringUtils.isNotBlank(value)) {
+					// 返回值之前 先进行 Emoji 转化
+					return EmojiParser.removeAllEmojis(value);
+				}
+				return value;
+			}
+
+			@Override
+			public String[] getParameterValues(String name) {
+				// 参数值
+				// 返回值之前 先进行 Emoji 转化
+				String[] values = super.getParameterValues(name);
+				if (values != null) {
+					for (int i = 0; i < values.length; i++) {
+						values[i] = EmojiParser.removeAllEmojis(values[i]);
+					}
+				}
+				return values;
+			}
+
+		};
+		
+		chain.doFilter(request, response);
+	}
+
+}

+ 1 - 1
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/enums/OrderStatusEnum.java

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.enums;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * 订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭

+ 1 - 1
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/adapay/PaymentSdk.java

@@ -11,7 +11,7 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.config.HuifuConfiguration;
 import com.yonge.cooleshow.sdk.adapay.dto.PaymentReq;
 import com.yonge.cooleshow.sdk.adapay.dto.RefundReq;
-import com.yonge.toolset.thirdparty.exception.ThirdpartyException;
+import com.yonge.toolset.base.exception.ThirdpartyException;
 import com.yonge.toolset.utils.collection.MapUtil;
 import com.yonge.toolset.utils.http.HttpUtil;
 import com.yonge.toolset.utils.string.StringUtil;

+ 10 - 1
cooleshow-mall/mall-portal/pom.xml

@@ -69,7 +69,16 @@
             <version>20.0</version>
             <scope>compile</scope>
         </dependency>
-
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-emoji</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-feign</artifactId>
+            <version>1.0</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 73 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/config/LocalFastJsonHttpMessageConverter.java

@@ -0,0 +1,73 @@
+package com.yonge.cooleshow.portal.config;
+
+import com.alibaba.fastjson.serializer.JSONSerializer;
+import com.alibaba.fastjson.serializer.ObjectSerializer;
+import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
+import com.alibaba.fastjson.serializer.ValueFilter;
+import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
+import com.vdurmont.emoji.EmojiParser;
+import com.yonge.toolset.base.enums.BaseEnum;
+import com.yonge.toolset.utils.json.JsonUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.http.HttpInputMessage;
+import org.springframework.http.HttpOutputMessage;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.http.converter.HttpMessageNotWritableException;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.reflect.Type;
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class LocalFastJsonHttpMessageConverter extends FastJsonHttpMessageConverter {
+
+	private static final String FORMAT = "yyyy-MM-dd HH:mm:ss";
+
+	@Override
+	protected Object readInternal(Class<? extends Object> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
+		return super.readInternal(clazz, inputMessage);
+	}
+
+	@Override
+	protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
+
+		OutputStream out = outputMessage.getBody();
+		JsonUtil.getConfig().put(Date.class, new SimpleDateFormatSerializer(FORMAT));
+		//JsonUtil.getConfig().put(String.class, new EmojiSerializer());
+		String text = JsonUtil.toJSONString(obj, EnumFilter.instance, getFeatures());
+		byte[] bytes = text.getBytes(getCharset());
+		out.write(bytes);
+	}
+}
+
+class EmojiSerializer implements ObjectSerializer{
+
+	@Override
+	public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
+		serializer.write(EmojiParser.parseToUnicode(object.toString()));
+	}
+	
+}
+
+class EnumFilter implements ValueFilter {
+
+	public static EnumFilter instance = new EnumFilter();
+
+	public EnumFilter() {
+	}
+
+	@Override
+	public Object process(Object object, String name, Object value) {
+		if (value == null || StringUtils.isBlank(value.toString())) {
+			return value;
+		}
+		if (value instanceof BigDecimal || value instanceof Double || value instanceof Float) {
+			return new BigDecimal(value.toString());
+		}
+		if (BaseEnum.class.isAssignableFrom(value.getClass())) {
+			return ((BaseEnum<?, ?>) value).getCode();
+		}
+		return value;
+	}
+}

+ 86 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/config/ParameterCheckServletRequestWrapper.java

@@ -0,0 +1,86 @@
+package com.yonge.cooleshow.portal.config;
+
+import com.vdurmont.emoji.EmojiParser;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.StreamUtils;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+
+public class ParameterCheckServletRequestWrapper extends HttpServletRequestWrapper {
+
+	private byte[] requestBody;
+	private Charset charSet;
+
+	public ParameterCheckServletRequestWrapper(HttpServletRequest request) throws IOException {
+		super(request);
+
+		String requestBodyStr = getRequestPostStr(request);
+		if (StringUtils.isNotBlank(requestBodyStr)) {
+			requestBodyStr = EmojiParser.removeAllEmojis(requestBodyStr);
+			requestBody = requestBodyStr.getBytes(charSet);
+		} else {
+			requestBody = new byte[0];
+		}
+	}
+
+	public String getRequestPostStr(HttpServletRequest request) throws IOException {
+		String charSetStr = request.getCharacterEncoding();
+		if (charSetStr == null) {
+			charSetStr = "UTF-8";
+		}
+		charSet = Charset.forName(charSetStr);
+
+		return StreamUtils.copyToString(request.getInputStream(), charSet);
+	}
+
+	/**
+	 * 重写 getInputStream()
+	 */
+	@Override
+	public ServletInputStream getInputStream() {
+		if (requestBody == null) {
+			requestBody = new byte[0];
+		}
+
+		final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(requestBody);
+
+		return new ServletInputStream() {
+			@Override
+			public boolean isFinished() {
+				return false;
+			}
+
+			@Override
+			public boolean isReady() {
+				return false;
+			}
+
+			@Override
+			public void setReadListener(ReadListener readListener) {
+
+			}
+
+			@Override
+			public int read() {
+				return byteArrayInputStream.read();
+			}
+		};
+	}
+
+	/**
+	 * 重写 getReader()
+	 */
+	@Override
+	public BufferedReader getReader() {
+		return new BufferedReader(new InputStreamReader(getInputStream()));
+	}
+
+}

+ 0 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/config/WebMvcConfig.java

@@ -1,7 +1,6 @@
 package com.yonge.cooleshow.portal.config;
 
 import com.yonge.cooleshow.common.config.EnumConverterFactory;
-import com.yonge.cooleshow.common.config.LocalFastJsonHttpMessageConverter;
 import com.yonge.cooleshow.portal.interceptor.MDCInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.http.HttpMessageConverters;

+ 6 - 13
cooleshow-common/src/main/java/com/yonge/cooleshow/common/filters/EmojiEncodingFilter.java → cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/config/filters/EmojiEncodingFilter.java

@@ -1,19 +1,12 @@
-package com.yonge.cooleshow.common.filters;
-
-import java.io.IOException;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
+package com.yonge.cooleshow.portal.config.filters;
 
+import com.vdurmont.emoji.EmojiParser;
+import com.yonge.cooleshow.portal.config.ParameterCheckServletRequestWrapper;
 import org.apache.commons.lang3.StringUtils;
 
-import com.vdurmont.emoji.EmojiParser;
-import com.yonge.cooleshow.common.config.ParameterCheckServletRequestWrapper;
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
 
 public class EmojiEncodingFilter implements Filter {
 

+ 6 - 0
cooleshow-task/pom.xml

@@ -57,6 +57,12 @@
 			<groupId>com.yonge.cooleshow</groupId>
 			<artifactId>auth-api</artifactId>
 		</dependency>
+
+		<dependency>
+			<groupId>com.yonge.toolset</groupId>
+			<artifactId>toolset-feign</artifactId>
+			<version>1.0</version>
+		</dependency>
 	</dependencies>
 
 	<build>

+ 60 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/config/LocalFastJsonHttpMessageConverter.java

@@ -0,0 +1,60 @@
+package com.yonge.cooleshow.task.config;
+
+import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
+import com.alibaba.fastjson.serializer.ValueFilter;
+import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
+import com.yonge.toolset.base.enums.BaseEnum;
+import com.yonge.toolset.utils.json.JsonUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.http.HttpInputMessage;
+import org.springframework.http.HttpOutputMessage;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.http.converter.HttpMessageNotWritableException;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class LocalFastJsonHttpMessageConverter extends FastJsonHttpMessageConverter {
+
+	private static final String FORMAT = "yyyy-MM-dd HH:mm:ss";
+
+	@Override
+	protected Object readInternal(Class<? extends Object> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
+		return super.readInternal(clazz, inputMessage);
+	}
+
+	@Override
+	protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
+
+		OutputStream out = outputMessage.getBody();
+		JsonUtil.getConfig().put(Date.class, new SimpleDateFormatSerializer(FORMAT));
+		//JsonUtil.getConfig().put(String.class, new EmojiSerializer());
+		String text = JsonUtil.toJSONString(obj, EnumFilter.instance, getFeatures());
+		byte[] bytes = text.getBytes(getCharset());
+		out.write(bytes);
+	}
+}
+
+class EnumFilter implements ValueFilter {
+
+	public static EnumFilter instance = new EnumFilter();
+
+	public EnumFilter() {
+	}
+
+	@Override
+	public Object process(Object object, String name, Object value) {
+		if (value == null || StringUtils.isBlank(value.toString())) {
+			return value;
+		}
+		if (value instanceof BigDecimal || value instanceof Double || value instanceof Float) {
+			return new BigDecimal(value.toString());
+		}
+		if (BaseEnum.class.isAssignableFrom(value.getClass())) {
+			return ((BaseEnum<?, ?>) value).getCode();
+		}
+		return value;
+	}
+}

+ 84 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/config/ParameterCheckServletRequestWrapper.java

@@ -0,0 +1,84 @@
+package com.yonge.cooleshow.task.config;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.StreamUtils;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+
+public class ParameterCheckServletRequestWrapper extends HttpServletRequestWrapper {
+
+	private byte[] requestBody;
+	private Charset charSet;
+
+	public ParameterCheckServletRequestWrapper(HttpServletRequest request) throws IOException {
+		super(request);
+
+		String requestBodyStr = getRequestPostStr(request);
+		if (StringUtils.isNotBlank(requestBodyStr)) {
+			requestBody = requestBodyStr.getBytes(charSet);
+		} else {
+			requestBody = new byte[0];
+		}
+	}
+
+	public String getRequestPostStr(HttpServletRequest request) throws IOException {
+		String charSetStr = request.getCharacterEncoding();
+		if (charSetStr == null) {
+			charSetStr = "UTF-8";
+		}
+		charSet = Charset.forName(charSetStr);
+
+		return StreamUtils.copyToString(request.getInputStream(), charSet);
+	}
+
+	/**
+	 * 重写 getInputStream()
+	 */
+	@Override
+	public ServletInputStream getInputStream() {
+		if (requestBody == null) {
+			requestBody = new byte[0];
+		}
+
+		final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(requestBody);
+
+		return new ServletInputStream() {
+			@Override
+			public boolean isFinished() {
+				return false;
+			}
+
+			@Override
+			public boolean isReady() {
+				return false;
+			}
+
+			@Override
+			public void setReadListener(ReadListener readListener) {
+
+			}
+
+			@Override
+			public int read() {
+				return byteArrayInputStream.read();
+			}
+		};
+	}
+
+	/**
+	 * 重写 getReader()
+	 */
+	@Override
+	public BufferedReader getReader() {
+		return new BufferedReader(new InputStreamReader(getInputStream()));
+	}
+
+}

+ 0 - 1
cooleshow-task/src/main/java/com/yonge/cooleshow/task/config/WebMvcConfig.java

@@ -11,7 +11,6 @@ import org.springframework.http.MediaType;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 import com.yonge.cooleshow.common.config.EnumConverterFactory;
-import com.yonge.cooleshow.common.config.LocalFastJsonHttpMessageConverter;
 
 @Configuration
 public class WebMvcConfig implements WebMvcConfigurer {

+ 25 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/feign/CmsFeignService.java

@@ -0,0 +1,25 @@
+package com.yonge.cooleshow.task.feign;
+
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.task.feign.fallback.CmsFeignServiceFallback;
+import com.yonge.toolset.feign.config.FeignConfiguration;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-04-29
+ */
+
+@FeignClient(name = "cms-server", configuration = FeignConfiguration.class, fallback = CmsFeignServiceFallback.class)
+public interface CmsFeignService {
+
+    /**
+     * 公告发布轮询
+     */
+    @GetMapping("/task/noticeRelease")
+    HttpResponseResult noticeRelease();
+
+}

+ 1 - 2
cooleshow-task/src/main/java/com/yonge/cooleshow/task/feign/MallPortalFeignService.java

@@ -1,8 +1,7 @@
 package com.yonge.cooleshow.task.feign;
 
-import com.yonge.cooleshow.common.config.FeignConfiguration;
 import com.yonge.cooleshow.task.feign.fallback.MallPortalFeignServiceFallback;
-import com.yonge.cooleshow.task.feign.fallback.StudentFeignServiceFallback;
+import com.yonge.toolset.feign.config.FeignConfiguration;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 

+ 1 - 1
cooleshow-task/src/main/java/com/yonge/cooleshow/task/feign/StudentFeignService.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.task.feign;
 
-import com.yonge.cooleshow.common.config.FeignConfiguration;
 import com.yonge.cooleshow.task.feign.fallback.StudentFeignServiceFallback;
+import com.yonge.toolset.feign.config.FeignConfiguration;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 

+ 1 - 1
cooleshow-task/src/main/java/com/yonge/cooleshow/task/feign/TeacherFeignService.java

@@ -1,8 +1,8 @@
 package com.yonge.cooleshow.task.feign;
 
-import com.yonge.cooleshow.common.config.FeignConfiguration;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.task.feign.fallback.TeacherFeignServiceFallback;
+import com.yonge.toolset.feign.config.FeignConfiguration;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 

+ 17 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/feign/fallback/CmsFeignServiceFallback.java

@@ -0,0 +1,17 @@
+package com.yonge.cooleshow.task.feign.fallback;
+
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.task.feign.CmsFeignService;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-04-29
+ */
+public class CmsFeignServiceFallback implements CmsFeignService {
+    @Override
+    public HttpResponseResult noticeRelease() {
+        return null;
+    }
+}

+ 23 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/NoticeReleaseTask.java

@@ -0,0 +1,23 @@
+package com.yonge.cooleshow.task.jobs;
+
+import com.yonge.cooleshow.task.core.BaseTask;
+import com.yonge.cooleshow.task.core.TaskException;
+import com.yonge.cooleshow.task.feign.CmsFeignService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-04-29
+ */
+public class NoticeReleaseTask  extends BaseTask {
+
+    @Autowired
+    private CmsFeignService cmsFeignService;
+
+    @Override
+    public void execute() throws TaskException {
+        cmsFeignService.noticeRelease();
+    }
+}

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/config/WebMvcConfig.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.admin.config;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.yonge.cooleshow.biz.dal.config.LocalFastJsonHttpMessageConverter;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
 import org.springframework.context.annotation.Bean;
@@ -14,7 +15,6 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 import com.yonge.cooleshow.admin.interceptor.OperationLogInterceptor;
 import com.yonge.cooleshow.common.config.EnumConverterFactory;
-import com.yonge.cooleshow.common.config.LocalFastJsonHttpMessageConverter;
 
 @Configuration
 public class WebMvcConfig implements WebMvcConfigurer {

+ 12 - 0
cooleshow-user/user-biz/pom.xml

@@ -26,11 +26,22 @@
 
         <dependency>
             <groupId>com.yonge.toolset</groupId>
+            <artifactId>thirdparty-component</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
             <artifactId>toolset-mybatis</artifactId>
             <version>${project.version}</version>
         </dependency>
 
         <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-emoji</artifactId>
+            <version>1.0</version>
+        </dependency>
+
+        <dependency>
             <groupId>com.spring4all</groupId>
             <artifactId>swagger-spring-boot-starter</artifactId>
         </dependency>
@@ -67,6 +78,7 @@
             <artifactId>auth-api</artifactId>
             <version>${project.version}</version>
         </dependency>
+
         <dependency>
             <groupId>com.huifu.adapay</groupId>
             <artifactId>adapay-java-sdk</artifactId>

+ 73 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/config/LocalFastJsonHttpMessageConverter.java

@@ -0,0 +1,73 @@
+package com.yonge.cooleshow.biz.dal.config;
+
+import com.alibaba.fastjson.serializer.JSONSerializer;
+import com.alibaba.fastjson.serializer.ObjectSerializer;
+import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
+import com.alibaba.fastjson.serializer.ValueFilter;
+import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
+import com.vdurmont.emoji.EmojiParser;
+import com.yonge.toolset.base.enums.BaseEnum;
+import com.yonge.toolset.utils.json.JsonUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.http.HttpInputMessage;
+import org.springframework.http.HttpOutputMessage;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.http.converter.HttpMessageNotWritableException;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.reflect.Type;
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class LocalFastJsonHttpMessageConverter extends FastJsonHttpMessageConverter {
+
+	private static final String FORMAT = "yyyy-MM-dd HH:mm:ss";
+
+	@Override
+	protected Object readInternal(Class<? extends Object> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
+		return super.readInternal(clazz, inputMessage);
+	}
+
+	@Override
+	protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
+
+		OutputStream out = outputMessage.getBody();
+		JsonUtil.getConfig().put(Date.class, new SimpleDateFormatSerializer(FORMAT));
+		//JsonUtil.getConfig().put(String.class, new EmojiSerializer());
+		String text = JsonUtil.toJSONString(obj, EnumFilter.instance, getFeatures());
+		byte[] bytes = text.getBytes(getCharset());
+		out.write(bytes);
+	}
+}
+
+class EmojiSerializer implements ObjectSerializer{
+
+	@Override
+	public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
+		serializer.write(EmojiParser.parseToUnicode(object.toString()));
+	}
+	
+}
+
+class EnumFilter implements ValueFilter {
+
+	public static EnumFilter instance = new EnumFilter();
+
+	public EnumFilter() {
+	}
+
+	@Override
+	public Object process(Object object, String name, Object value) {
+		if (value == null || StringUtils.isBlank(value.toString())) {
+			return value;
+		}
+		if (value instanceof BigDecimal || value instanceof Double || value instanceof Float) {
+			return new BigDecimal(value.toString());
+		}
+		if (BaseEnum.class.isAssignableFrom(value.getClass())) {
+			return ((BaseEnum<?, ?>) value).getCode();
+		}
+		return value;
+	}
+}

+ 86 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/config/ParameterCheckServletRequestWrapper.java

@@ -0,0 +1,86 @@
+package com.yonge.cooleshow.biz.dal.config;
+
+import com.vdurmont.emoji.EmojiParser;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.StreamUtils;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+
+public class ParameterCheckServletRequestWrapper extends HttpServletRequestWrapper {
+
+	private byte[] requestBody;
+	private Charset charSet;
+
+	public ParameterCheckServletRequestWrapper(HttpServletRequest request) throws IOException {
+		super(request);
+
+		String requestBodyStr = getRequestPostStr(request);
+		if (StringUtils.isNotBlank(requestBodyStr)) {
+			requestBodyStr = EmojiParser.removeAllEmojis(requestBodyStr);
+			requestBody = requestBodyStr.getBytes(charSet);
+		} else {
+			requestBody = new byte[0];
+		}
+	}
+
+	public String getRequestPostStr(HttpServletRequest request) throws IOException {
+		String charSetStr = request.getCharacterEncoding();
+		if (charSetStr == null) {
+			charSetStr = "UTF-8";
+		}
+		charSet = Charset.forName(charSetStr);
+
+		return StreamUtils.copyToString(request.getInputStream(), charSet);
+	}
+
+	/**
+	 * 重写 getInputStream()
+	 */
+	@Override
+	public ServletInputStream getInputStream() {
+		if (requestBody == null) {
+			requestBody = new byte[0];
+		}
+
+		final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(requestBody);
+
+		return new ServletInputStream() {
+			@Override
+			public boolean isFinished() {
+				return false;
+			}
+
+			@Override
+			public boolean isReady() {
+				return false;
+			}
+
+			@Override
+			public void setReadListener(ReadListener readListener) {
+
+			}
+
+			@Override
+			public int read() {
+				return byteArrayInputStream.read();
+			}
+		};
+	}
+
+	/**
+	 * 重写 getReader()
+	 */
+	@Override
+	public BufferedReader getReader() {
+		return new BufferedReader(new InputStreamReader(getInputStream()));
+	}
+
+}

+ 51 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/config/filters/EmojiEncodingFilter.java

@@ -0,0 +1,51 @@
+package com.yonge.cooleshow.biz.dal.config.filters;
+
+import com.vdurmont.emoji.EmojiParser;
+import com.yonge.cooleshow.biz.dal.config.ParameterCheckServletRequestWrapper;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+public class EmojiEncodingFilter implements Filter {
+
+	@Override
+	public void init(FilterConfig filterConfig) throws ServletException {
+		Filter.super.init(filterConfig);
+	}
+
+	@Override
+	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+		request = new ParameterCheckServletRequestWrapper((HttpServletRequest) request) {
+
+			@Override
+			public String getParameter(String name) {
+				// 参数名
+				String value = super.getParameter(name);
+				if (StringUtils.isNotBlank(value)) {
+					// 返回值之前 先进行 Emoji 转化
+					return EmojiParser.removeAllEmojis(value);
+				}
+				return value;
+			}
+
+			@Override
+			public String[] getParameterValues(String name) {
+				// 参数值
+				// 返回值之前 先进行 Emoji 转化
+				String[] values = super.getParameterValues(name);
+				if (values != null) {
+					for (int i = 0; i < values.length; i++) {
+						values[i] = EmojiParser.removeAllEmojis(values[i]);
+					}
+				}
+				return values;
+			}
+
+		};
+		
+		chain.doFilter(request, response);
+	}
+
+}

+ 2 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java

@@ -7,10 +7,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentCourseSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
-import com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupPlanVo;
-import com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupStudentCourseVo;
-import com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupStudentVo;
-import com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupVo;
+import com.yonge.cooleshow.biz.dal.vo.*;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -29,7 +26,7 @@ public interface CourseGroupDao extends BaseMapper<CourseGroup> {
     /**
      * 分页查询课程组信息
      */
-    <T> IPage<T> queryTeacherCourseGroup(Page<T> page, @Param("param") Map<String, Object> param);
+    IPage<CourseGroupVo> queryTeacherCourseGroup(Page<CourseGroupVo> page, @Param("param") Map<String, Object> param);
 
     /**
      * 平台方 老师详情直播课列表

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysMessageDao.java

@@ -41,7 +41,7 @@ public interface SysMessageDao extends BaseDAO<Long, SysMessage> {
 	 * @param userId
 	 * @return
 	 */
-	public List<Mapper> queryCountOfUnread(@Param("type") MessageSendMode type, @Param("userId") Long userId, @Param("jpushType") String jpushType, @Param("tenantId") Integer tenantId);
+	public List<Mapper> queryCountOfUnread(@Param("type") MessageSendMode type, @Param("userId") Long userId, @Param("jpushType") String jpushType);
 
 	/**
 	 * 修改用户所有消息阅读状态

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherAuthEntryRecordDao.java

@@ -33,4 +33,5 @@ public interface TeacherAuthEntryRecordDao extends BaseMapper<TeacherAuthEntryRe
 	 * @return: com.yonge.cooleshow.biz.dal.entity.TeacherAuthEntryRecord
 	 */
 	TeacherAuthEntryRecordVo getLastRecordByUserId(@Param("userId") Long userId);
+
 }

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonPurchaseRecordDao.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.dao;
 
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonPurchaseRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -19,5 +20,5 @@ public interface VideoLessonPurchaseRecordDao extends BaseMapper<VideoLessonPurc
     Long selectTeacherByDetail(Long videoId);
 
     //修改订单状态
-    void updateStatus(String orderNo);
+    void updateStatus(@Param("orderNo") String orderNo,@Param("status") String status);
 }

+ 97 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/SysMessageQueryInfo.java

@@ -0,0 +1,97 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.yonge.toolset.mybatis.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+public class SysMessageQueryInfo extends QueryInfo {
+
+	/** 状态,0,待发送;1,发送中;2,发送完成 */
+	@ApiModelProperty(value = "状态,0,待发送;1,发送中;2,发送完成 ",required = false)
+	private Integer status;
+
+	@ApiModelProperty(value = "接收人编号",required = false)
+	private String receiver;
+
+	@ApiModelProperty(value = "发送人编号",required = false)
+	private Long userId;
+
+	@ApiModelProperty(value = "标题",required = false)
+	private String title;
+
+	@ApiModelProperty(value = "消息类型;1,表示短信;2,表示邮件; 3,app推送消息",required = false)
+	private Integer type;
+
+	@ApiModelProperty("消息组 SYSTEM:系统消息  COURSE:课程信息 NOTICE:公告")
+	private String group;
+
+	@ApiModelProperty("客户端STUDENT,TEACHER,SYSTEM")
+	private String clientId;
+
+	@ApiModelProperty("0:未读,1:已读")
+	private Integer readStatus;
+
+	public String getClientId() {
+		return clientId;
+	}
+
+	public void setClientId(String clientId) {
+		this.clientId = clientId;
+	}
+
+	public Integer getStatus() {
+		return status;
+	}
+
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+
+	public String getReceiver() {
+		return receiver;
+	}
+
+	public void setReceiver(String receiver) {
+		this.receiver = receiver;
+	}
+
+	public Long getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
+	public String getGroup() {
+		return group;
+	}
+
+	public void setGroup(String group) {
+		this.group = group;
+	}
+
+	public Integer getReadStatus() {
+		return readStatus;
+	}
+
+	public void setReadStatus(Integer readStatus) {
+		this.readStatus = readStatus;
+	}
+
+}

+ 12 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseGroup.java

@@ -83,6 +83,10 @@ public class CourseGroup implements Serializable {
     @ApiModelProperty(value = "预计上课人数")
     private Integer preStudentNum;
 
+    @TableField("im_group_id_")
+    @ApiModelProperty(value = "直播课成课后生成的im群id")
+    private String imGroupId;
+
     @TableField("course_start_time_")
     @ApiModelProperty(value = "课程开始时间")
     private Date courseStartTime;
@@ -103,7 +107,6 @@ public class CourseGroup implements Serializable {
     @ApiModelProperty(value = "更新时间")
     private Date updatedTime;
 
-
     public Long getId() {
         return id;
     }
@@ -224,6 +227,14 @@ public class CourseGroup implements Serializable {
         this.preStudentNum = preStudentNum;
     }
 
+    public String getImGroupId() {
+        return imGroupId;
+    }
+
+    public void setImGroupId(String imGroupId) {
+        this.imGroupId = imGroupId;
+    }
+
     public Date getCourseStartTime() {
         return courseStartTime;
     }

+ 1 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroup.java

@@ -1,15 +1,13 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
 
-import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
 

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroupMember.java

@@ -4,7 +4,7 @@ package com.yonge.cooleshow.biz.dal.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -67,7 +67,7 @@ public class ImGroupMember implements Serializable {
         this.roleType = roleType;
     }
 
-    public enum ImGroupMemberRoleType implements BaseEnum<String, ImGroupMember.ImGroupMemberRoleType> {
+    public enum ImGroupMemberRoleType implements BaseEnum<String, ImGroupMemberRoleType> {
         TEACHER("老师"),
         STUDENT("学生");
 

+ 4 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java

@@ -42,10 +42,10 @@ public class MusicSheet implements Serializable {
 	@ApiModelProperty(value = "曲目来源类型 TEACHER 老师 PLATFORM 平台")
 	private SourceTypeEnum sourceType;
 
-    @NotBlank(message = "作曲人不能为空!")
-    @Size(max = 32, message = "作曲人长度不能超过32位!")
+    @NotBlank(message = "音乐人不能为空!")
+    @Size(max = 32, message = "音乐人长度不能超过32位!")
     @TableField("composer_")
-    @ApiModelProperty(value = "作曲人")
+    @ApiModelProperty(value = "音乐人")
     private String composer;  //作曲人
 
     @TableField("music_subject_")
@@ -67,7 +67,7 @@ public class MusicSheet implements Serializable {
     private String musicTag;  //曲谱标签(多个标签用逗号分隔)
 
     @TableField("play_speed_")
-	@NotNull(message = "默认播放速度不能为空!")
+	// @NotNull(message = "默认播放速度不能为空!")
     @ApiModelProperty(value = "默认播放速度")
     private Integer playSpeed;  //默认播放速度
 

+ 4 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysMessage.java

@@ -25,11 +25,11 @@ public class SysMessage extends BaseEntity {
 	private String content;
 	
 	/** 消息类型;1,表示短信;2,表示邮件; 3,app推送消息 */
-	@ApiModelProperty(value = "消息类型",required = false)
+	@ApiModelProperty(value = "消息类型;1,表示短信;2,表示邮件; 3,app推送消息",required = false)
 	private MessageSendMode type;
 	
 	/** 状态,-1,发送失败;0,待发送;1,发送中;2,发送完成 */
-	@ApiModelProperty(value = "状态",required = false)
+	@ApiModelProperty(value = "状态,-1,发送失败;0,待发送;1,发送中;2,发送完成",required = false)
 	private SendStatusEnum status;
 	
 	/** 接收人(多个人用逗号分隔) */
@@ -55,14 +55,14 @@ public class SysMessage extends BaseEntity {
 	private Long userId;
 	
 	/** 备注 */
-	@ApiModelProperty(value = "备注",required = false)
+	@ApiModelProperty(value = "备注/url (为空就没有连接,不为空就有连接)",required = false)
 	private String memo;
 	
 	/** 是否已读 */
 	@ApiModelProperty(value = "是否已读",required = false)
 	private Integer readStatus;
 	
-	@ApiModelProperty(value = "消息组",required = false)
+	@ApiModelProperty(value = "消息组 SYSTEM:系统消息  COURSE:课程信息 NOTICE:公告",required = false)
 	private String group;
 
 	@ApiModelProperty(value = "极光推送客户端标识",required = false)

+ 1 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysUserContracts.java

@@ -1,9 +1,8 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
+import com.yonge.toolset.base.enums.BaseEnum;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
-
 /**
  * 对应数据库表(sys_user_contracts):
  */

+ 39 - 51
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonPurchaseRecord.java

@@ -6,9 +6,9 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * 视频课购买记录表
@@ -52,90 +52,78 @@ public class VideoLessonPurchaseRecord extends BaseEntity {
     private String orderNo;
 
     @TableField("order_status_")
-    @ApiModelProperty(value = "订单状态(1:已完成;0:取消/支付中)")
-    private Integer orderStatus;
+    @ApiModelProperty(value = "订单状态(WAIT_PAY待支付,PAYING支付中,PAID已付款,CLOSE已关闭,FAIL支付失败)")
+    private String orderStatus;
 
-	public BigDecimal getOriginalPrice() {
-		return originalPrice;
+	public Long getId() {
+		return id;
 	}
 
-	public void setOriginalPrice(BigDecimal originalPrice) {
-		this.originalPrice = originalPrice;
+	public void setId(Long id) {
+		this.id = id;
 	}
 
-	public BigDecimal getExpectPrice() {
-		return expectPrice;
-	}
-
-	public void setExpectPrice(BigDecimal expectPrice) {
-		this.expectPrice = expectPrice;
+	public Long getVideoLessonGroupId() {
+		return videoLessonGroupId;
 	}
 
-	public VideoLessonPurchaseRecord setId(Long id) {
-	    this.id = id;
-	    return this;
+	public void setVideoLessonGroupId(Long videoLessonGroupId) {
+		this.videoLessonGroupId = videoLessonGroupId;
 	}
 
-	public Long getId() {
-	    return this.id;
+	public Long getStudentId() {
+		return studentId;
 	}
 
-	public VideoLessonPurchaseRecord setVideoLessonGroupId(Long videoLessonGroupId) {
-	    this.videoLessonGroupId = videoLessonGroupId;
-	    return this;
+	public void setStudentId(Long studentId) {
+		this.studentId = studentId;
 	}
 
-	public Long getVideoLessonGroupId() {
-	    return this.videoLessonGroupId;
+	public Date getPurchaseTime() {
+		return purchaseTime;
 	}
 
-	public VideoLessonPurchaseRecord setStudentId(Long studentId) {
-	    this.studentId = studentId;
-	    return this;
+	public void setPurchaseTime(Date purchaseTime) {
+		this.purchaseTime = purchaseTime;
 	}
 
-	public Long getStudentId() {
-	    return this.studentId;
+	public BigDecimal getOriginalPrice() {
+		return originalPrice;
 	}
 
-	public VideoLessonPurchaseRecord setPurchaseTime(java.util.Date purchaseTime) {
-	    this.purchaseTime = purchaseTime;
-	    return this;
+	public void setOriginalPrice(BigDecimal originalPrice) {
+		this.originalPrice = originalPrice;
 	}
 
-	public java.util.Date getPurchaseTime() {
-	    return this.purchaseTime;
+	public BigDecimal getExpectPrice() {
+		return expectPrice;
 	}
 
-	public VideoLessonPurchaseRecord setPayMoney(java.math.BigDecimal payMoney) {
-	    this.payMoney = payMoney;
-	    return this;
+	public void setExpectPrice(BigDecimal expectPrice) {
+		this.expectPrice = expectPrice;
 	}
 
-	public java.math.BigDecimal getPayMoney() {
-	    return this.payMoney;
+	public BigDecimal getPayMoney() {
+		return payMoney;
 	}
 
-	public VideoLessonPurchaseRecord setOrderNo(String orderNo) {
-	    this.orderNo = orderNo;
-	    return this;
+	public void setPayMoney(BigDecimal payMoney) {
+		this.payMoney = payMoney;
 	}
 
 	public String getOrderNo() {
-	    return this.orderNo;
+		return orderNo;
 	}
 
-	public VideoLessonPurchaseRecord setOrderStatus(Integer orderStatus) {
-	    this.orderStatus = orderStatus;
-	    return this;
+	public void setOrderNo(String orderNo) {
+		this.orderNo = orderNo;
 	}
 
-	public Integer getOrderStatus() {
-	    return this.orderStatus;
+	public String getOrderStatus() {
+		return orderStatus;
 	}
 
-    @Override
-    public String toString() {
-        return ToStringBuilder.reflectionToString(this);
-    }
+	public void setOrderStatus(String orderStatus) {
+		this.orderStatus = orderStatus;
+	}
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AccountBizTypeEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * 账户流水枚举

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AudioTypeEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * Description 曲目音频类型 1:mp3,2:midi,3:mp3_metronome

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AuditEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * Description 审核状态(0:待审核;1:通过;2:未通过)

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AuditStatusEnum.java

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 public enum AuditStatusEnum implements BaseEnum<String,AuditStatusEnum> {
     AUDITING("审核中"), REJECT("审核拒绝"), OPEN("审核通过");

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AuthStatusEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * 认证审核状态

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CacheNameEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.yonge.cooleshow.common.constant.CommonConstants;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 import org.apache.commons.lang3.StringUtils;
 
 import java.time.Duration;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ChargeTypeEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * Description 收费类型(FREE:免费;VIP:会员;CHARGE:单曲收费)

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ClientEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * Description

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CourseGroupEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 public enum CourseGroupEnum implements BaseEnum<String,CourseGroupEnum> {
     ING("ING", "进行中"),//课程已开始进行中

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CourseScheduleEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 import java.util.Arrays;
 import java.util.List;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/FrozenTypeEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * 账户变更冻结类型

+ 1 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/GenderEnum.java

@@ -1,11 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /***
  * 性别

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/GoodTypeEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * 商品类型

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/InOrOutEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * 收入支出枚举

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/JobNatureEnum.java

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 //工作性质(兼职、全职)
 public enum JobNatureEnum implements BaseEnum<String,JobNatureEnum> {

+ 3 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageSendMode.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  状态,1,表示短信;2,表示邮件; 3,app推送消息
@@ -8,6 +9,7 @@ import com.yonge.cooleshow.common.enums.BaseEnum;
 public enum MessageSendMode implements BaseEnum<Integer, MessageSendMode> {
 	SMS(1, "短信"), EMAIL(2, "邮件"), PUSH(3, "app推送消息"), SEO(4, "站内推送消息");
 
+	@EnumValue
 	private Integer code;
 
 	private String msg;

+ 34 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java

@@ -1,6 +1,9 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
-import com.yonge.cooleshow.common.enums.BaseEnum;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
 
 public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     SMS_VERIFY_CODE_LOGIN("SMS_VERIFY_CODE_LOGIN", "验证码登录"),
@@ -12,6 +15,34 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     TEACHER_DECORATE_HOMEWORK("TEACHER_DECORATE_HOMEWORK","老师布置作业"),
     TEACHER_REVIEW_HOMEWORK("TEACHER_REVIEW_HOMEWORK","老师点评作业"),
     STUDENT_SUBMIT_HOMEWORK("STUDENT_SUBMIT_HOMEWORK","学生提交作业"),
+
+    TEACHER_AUTH_PASS("TEACHER_AUTH_PASS","老师认证通过"),
+    TEACHER_AUTH_FAIL("TEACHER_AUTH_FAIL","老师认证失败"),
+    MUSICIAN_AUTH_PASS("MUSICIAN_AUTH_PASS","音乐人认证通过"),
+    MUSICIAN_AUTH_FAIL("MUSICIAN_AUTH_FAIL","音乐人认证失败"),
+    STUDENT_BUY_PRACTICE("STUDENT_BUY_PRACTICE","学员购买陪练课"),
+    STUDENT_BUY_LIVE("STUDENT_BUY_LIVE","学员购买直播课"),
+    STUDENT_BUY_VIDEO("STUDENT_BUY_VIDEO","学员购买视频课"),
+    LIVE_COMPLETION_SUCCESS("LIVE_COMPLETION_SUCCESS","直播课成课"),
+    LIVE_COMPLETION_FAIL("LIVE_COMPLETION_FAIL","直播课成课失败"),
+    TOMORROW_COURSE_REMINDER("TOMORROW_COURSE_REMINDER","明日课程提醒(每晚9点)"),
+    PRACTICE_REMINDER("PRACTICE_REMINDER","陪练课提醒(陪练课开始前20分钟)"),
+    LIVE_REMINDER("LIVE_REMINDER","直播课提醒(直播课开始前20分钟)"),
+    COURSE_SETTLEMENT("COURSE_SETTLEMENT","课酬结算(每晚9点)"),
+    NOT_EVALUATE_STUDENT_PRACTICE("NOT_EVALUATE_STUDENT_PRACTICE","当日陪练课未评价/布置作业(每晚9点30,已评价/已布置不发)"),
+    STUDENT_EVALUATE_TEACHER_PRACTICE("STUDENT_EVALUATE_TEACHER_PRACTICE","学员对老师评价"),
+    WITHDRAWAL_SUCCESS("WITHDRAWAL_SUCCESS","提现成功"),
+    STUDENT_JOIN_FANSGROUP("STUDENT_JOIN_FANSGROUP","学员申请加入粉丝群"),
+    VIP_BUY_SUCCESS("VIP_BUY_SUCCESS","会员购买成功"),
+    VIP_EXPIRE_THIRTY_DAY("VIP_EXPIRE_THIRTY_DAY","会员到期前30天"),
+    VIP_EXPIRE("VIP_EXPIRE","会员到期"),
+    PRACTICE_BUY("PRACTICE_BUY","陪练课购买"),
+    LIVE_BUY("LIVE_BUY","直播课购买"),
+    VIDEO_BUY("VIDEO_BUY","视频课购买"),
+    PRACTICE_REMIND("PRACTICE_REMIND","陪练课提醒(陪练课开始前20分钟)"),
+    LIVE_REMIND("LIVE_REMIND","直播课提醒(直播课开始前20分钟)"),
+    NOT_EVALUATE_TEACHER_PRACTICE("NOT_EVALUATE_TEACHER_PRACTICE","当日陪练课未对老师评价(每晚9点,已评价不发)"),
+    FANSGROUP_APPLY_SUCCESS("FANSGROUP_APPLY_SUCCESS","粉丝群申请通过")
     ;
 
     MessageTypeEnum(String code, String msg) {
@@ -19,6 +50,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
         this.msg = msg;
     }
 
+    @EnumValue
     private String code;
 
     private String msg;
@@ -35,7 +67,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
         this.msg = msg;
     }
 
-    @Override
+
     public String getCode() {
         return code;
     }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OrderStatusEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * 订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OrderTypeEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * 订单类型

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/PayChannelEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * 支付渠道

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/PeriodEnum.java

@@ -1,7 +1,7 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.cooleshow.common.enums.BaseEnum;
+import com.yonge.toolset.base.enums.BaseEnum;
 
 /**
  * 周期

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません