Browse Source

Merge remote-tracking branch 'origin/master'

weifanli 3 years ago
parent
commit
ba80383349
38 changed files with 587 additions and 486 deletions
  1. 2 2
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/MallSecurityConfig.java
  2. 97 97
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsResourceController.java
  3. 1 1
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/UmsAdminServiceImpl.java
  4. 3 5
      cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/UmsMemberMapper.xml
  5. 6 1
      cooleshow-mall/mall-portal/pom.xml
  6. 5 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/MallPortalApplication.java
  7. 0 29
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/config/MallSecurityConfig.java
  8. 35 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/config/ResourceServerConfig.java
  9. 55 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/config/WebMvcConfig.java
  10. 1 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/HomeController.java
  11. 0 94
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/UmsMemberController.java
  12. 41 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/interceptor/MDCInterceptor.java
  13. 31 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/interceptor/OperationLogInterceptor.java
  14. 0 9
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/UmsMemberCacheService.java
  15. 0 26
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/UmsMemberService.java
  16. 2 2
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/HomeServiceImpl.java
  17. 0 15
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/UmsMemberCacheServiceImpl.java
  18. 32 106
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/UmsMemberServiceImpl.java
  19. 1 1
      cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/annotation/CacheException.java
  20. 2 2
      cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/aspect/RedisCacheAspect.java
  21. 1 1
      cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/component/DynamicAccessDecisionManager.java
  22. 2 2
      cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/component/DynamicSecurityFilter.java
  23. 1 1
      cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/component/DynamicSecurityMetadataSource.java
  24. 1 1
      cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/component/DynamicSecurityService.java
  25. 2 2
      cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/component/JwtAuthenticationTokenFilter.java
  26. 1 1
      cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/component/RestAuthenticationEntryPoint.java
  27. 1 1
      cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/component/RestfulAccessDeniedHandler.java
  28. 1 1
      cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/config/IgnoreUrlsConfig.java
  29. 3 3
      cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/config/SecurityConfig.java
  30. 1 1
      cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/util/JwtTokenUtil.java
  31. 1 1
      cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/util/SpringUtil.java
  32. 9 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  33. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/MusicTagSaveDto.java
  34. 9 21
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseCalendarEntity.java
  35. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  36. 193 47
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  37. 18 4
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  38. 14 3
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseScheduleController.java

+ 2 - 2
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/config/MallSecurityConfig.java

@@ -1,8 +1,8 @@
 package com.yonge.cooleshow.admin.config;
 
 import com.yonge.cooleshow.mbg.model.UmsResource;
-import com.macro.mall.security.component.DynamicSecurityService;
-import com.macro.mall.security.config.SecurityConfig;
+import com.yonge.cooleshow.mall.security.component.DynamicSecurityService;
+import com.yonge.cooleshow.mall.security.config.SecurityConfig;
 import com.yonge.cooleshow.admin.service.UmsAdminService;
 import com.yonge.cooleshow.admin.service.UmsResourceService;
 import org.springframework.beans.factory.annotation.Autowired;

+ 97 - 97
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/UmsResourceController.java

@@ -1,97 +1,97 @@
-// package com.yonge.cooleshow.admin.controller;
-//
-// import com.yonge.cooleshow.mall.common.api.CommonPage;
-// import com.yonge.cooleshow.mall.common.api.CommonResult;
-// import com.yonge.cooleshow.mbg.model.UmsResource;
-// import com.macro.mall.security.component.DynamicSecurityMetadataSource;
-// import com.yonge.cooleshow.admin.service.UmsResourceService;
-// import io.swagger.annotations.Api;
-// import io.swagger.annotations.ApiOperation;
-// import org.springframework.beans.factory.annotation.Autowired;
-// import org.springframework.stereotype.Controller;
-// import org.springframework.web.bind.annotation.*;
-//
-// import java.util.List;
-//
-// /**
-//  * 后台资源管理Controller
-//  * Created by macro on 2020/2/4.
-//  */
-// @Controller
-// @Api(tags = "UmsResourceController", description = "后台资源管理")
-// @RequestMapping("/resource")
-// public class UmsResourceController {
-//
-//     @Autowired
-//     private UmsResourceService resourceService;
-//     @Autowired
-//     private DynamicSecurityMetadataSource dynamicSecurityMetadataSource;
-//
-//     @ApiOperation("添加后台资源")
-//     @RequestMapping(value = "/create", method = RequestMethod.POST)
-//     @ResponseBody
-//     public CommonResult create(@RequestBody UmsResource umsResource) {
-//         int count = resourceService.create(umsResource);
-//         dynamicSecurityMetadataSource.clearDataSource();
-//         if (count > 0) {
-//             return CommonResult.success(count);
-//         } else {
-//             return CommonResult.failed();
-//         }
-//     }
-//
-//     @ApiOperation("修改后台资源")
-//     @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
-//     @ResponseBody
-//     public CommonResult update(@PathVariable Long id,
-//                                @RequestBody UmsResource umsResource) {
-//         int count = resourceService.update(id, umsResource);
-//         dynamicSecurityMetadataSource.clearDataSource();
-//         if (count > 0) {
-//             return CommonResult.success(count);
-//         } else {
-//             return CommonResult.failed();
-//         }
-//     }
-//
-//     @ApiOperation("根据ID获取资源详情")
-//     @RequestMapping(value = "/{id}", method = RequestMethod.GET)
-//     @ResponseBody
-//     public CommonResult<UmsResource> getItem(@PathVariable Long id) {
-//         UmsResource umsResource = resourceService.getItem(id);
-//         return CommonResult.success(umsResource);
-//     }
-//
-//     @ApiOperation("根据ID删除后台资源")
-//     @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
-//     @ResponseBody
-//     public CommonResult delete(@PathVariable Long id) {
-//         int count = resourceService.delete(id);
-//         dynamicSecurityMetadataSource.clearDataSource();
-//         if (count > 0) {
-//             return CommonResult.success(count);
-//         } else {
-//             return CommonResult.failed();
-//         }
-//     }
-//
-//     @ApiOperation("分页模糊查询后台资源")
-//     @RequestMapping(value = "/list", method = RequestMethod.GET)
-//     @ResponseBody
-//     public CommonResult<CommonPage<UmsResource>> list(@RequestParam(required = false) Long categoryId,
-//                                                       @RequestParam(required = false) String nameKeyword,
-//                                                       @RequestParam(required = false) String urlKeyword,
-//                                                       @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
-//                                                       @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
-//         List<UmsResource> resourceList = resourceService.list(categoryId,nameKeyword, urlKeyword, pageSize, pageNum);
-//         return CommonResult.success(CommonPage.restPage(resourceList));
-//     }
-//
-//     @ApiOperation("查询所有后台资源")
-//     @RequestMapping(value = "/listAll", method = RequestMethod.GET)
-//     @ResponseBody
-//     public CommonResult<List<UmsResource>> listAll() {
-//         List<UmsResource> resourceList = resourceService.listAll();
-//         return CommonResult.success(resourceList);
-//     }
-// }
+package com.yonge.cooleshow.admin.controller;
+
+import com.yonge.cooleshow.mall.common.api.CommonPage;
+import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.UmsResource;
+import com.yonge.cooleshow.mall.security.component.DynamicSecurityMetadataSource;
+import com.yonge.cooleshow.admin.service.UmsResourceService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 后台资源管理Controller
+ * Created by macro on 2020/2/4.
+ */
+@Controller
+@Api(tags = "UmsResourceController", description = "后台资源管理")
+@RequestMapping("/resource")
+public class UmsResourceController {
+
+    @Autowired
+    private UmsResourceService resourceService;
+    @Autowired
+    private DynamicSecurityMetadataSource dynamicSecurityMetadataSource;
+
+    @ApiOperation("添加后台资源")
+    @RequestMapping(value = "/create", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult create(@RequestBody UmsResource umsResource) {
+        int count = resourceService.create(umsResource);
+        dynamicSecurityMetadataSource.clearDataSource();
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("修改后台资源")
+    @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult update(@PathVariable Long id,
+                               @RequestBody UmsResource umsResource) {
+        int count = resourceService.update(id, umsResource);
+        dynamicSecurityMetadataSource.clearDataSource();
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("根据ID获取资源详情")
+    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<UmsResource> getItem(@PathVariable Long id) {
+        UmsResource umsResource = resourceService.getItem(id);
+        return CommonResult.success(umsResource);
+    }
+
+    @ApiOperation("根据ID删除后台资源")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult delete(@PathVariable Long id) {
+        int count = resourceService.delete(id);
+        dynamicSecurityMetadataSource.clearDataSource();
+        if (count > 0) {
+            return CommonResult.success(count);
+        } else {
+            return CommonResult.failed();
+        }
+    }
+
+    @ApiOperation("分页模糊查询后台资源")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<UmsResource>> list(@RequestParam(required = false) Long categoryId,
+                                                      @RequestParam(required = false) String nameKeyword,
+                                                      @RequestParam(required = false) String urlKeyword,
+                                                      @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
+                                                      @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
+        List<UmsResource> resourceList = resourceService.list(categoryId,nameKeyword, urlKeyword, pageSize, pageNum);
+        return CommonResult.success(CommonPage.restPage(resourceList));
+    }
+
+    @ApiOperation("查询所有后台资源")
+    @RequestMapping(value = "/listAll", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<UmsResource>> listAll() {
+        List<UmsResource> resourceList = resourceService.listAll();
+        return CommonResult.success(resourceList);
+    }
+}

+ 1 - 1
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/UmsAdminServiceImpl.java

@@ -13,7 +13,7 @@ import com.yonge.cooleshow.mbg.mapper.UmsAdminLoginLogMapper;
 import com.yonge.cooleshow.mbg.mapper.UmsAdminMapper;
 import com.yonge.cooleshow.mbg.mapper.UmsAdminRoleRelationMapper;
 import com.yonge.cooleshow.mbg.model.*;
-import com.macro.mall.security.util.JwtTokenUtil;
+import com.yonge.cooleshow.mall.security.util.JwtTokenUtil;
 import com.yonge.cooleshow.admin.service.UmsAdminCacheService;
 import com.yonge.cooleshow.admin.service.UmsAdminService;
 import org.slf4j.Logger;

+ 3 - 5
cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/UmsMemberMapper.xml

@@ -116,16 +116,14 @@
     </if>
   </delete>
   <insert id="insert" parameterType="com.yonge.cooleshow.mbg.model.UmsMember">
-    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
-      SELECT LAST_INSERT_ID()
-    </selectKey>
-    insert into ums_member (member_level_id, username, password, 
+
+    insert into ums_member (id,member_level_id, username, password,
       nickname, phone, status, 
       create_time, icon, gender, 
       birthday, city, job, personalized_signature, 
       source_type, integration, growth, 
       luckey_count, history_integration)
-    values (#{memberLevelId,jdbcType=BIGINT}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 
+    values (#{id,jdbcType=BIGINT},#{memberLevelId,jdbcType=BIGINT}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},
       #{nickname,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, 
       #{createTime,jdbcType=TIMESTAMP}, #{icon,jdbcType=VARCHAR}, #{gender,jdbcType=INTEGER}, 
       #{birthday,jdbcType=DATE}, #{city,jdbcType=VARCHAR}, #{job,jdbcType=VARCHAR}, #{personalizedSignature,jdbcType=VARCHAR}, 

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

@@ -36,8 +36,13 @@
             <artifactId>mall-common</artifactId>
         </dependency>
         <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>audit-log</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>com.yonge.cooleshow</groupId>
-            <artifactId>mall-security</artifactId>
+            <artifactId>auth-api</artifactId>
         </dependency>
 <!--        <dependency>-->
 <!--            <groupId>com.yonge.cooleshow</groupId>-->

+ 5 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/MallPortalApplication.java

@@ -4,12 +4,16 @@ import com.spring4all.swagger.EnableSwagger2Doc;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.annotation.ComponentScan;
 
 @SpringBootApplication
 @MapperScan({"com.yonge.cooleshow.mbg.mapper", "com.yonge.cooleshow.portal.dao"})
-@ComponentScan(basePackages = {"com.yonge.cooleshow.portal","com.yonge.cooleshow.mbg", "com.yonge.cooleshow.mall.common", "com.yonge.cooleshow.common","com.macro.mall.security"})
+@ComponentScan(basePackages = {"com.yonge.cooleshow.portal","com.yonge.cooleshow.mbg", "com.yonge.cooleshow.mall.common", "com.yonge.cooleshow.common","com.yonge.toolset"})
 @EnableSwagger2Doc
+@EnableDiscoveryClient
+@EnableFeignClients("com.yonge.cooleshow")
 public class MallPortalApplication {
 
     public static void main(String[] args) {

+ 0 - 29
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/config/MallSecurityConfig.java

@@ -1,29 +0,0 @@
-package com.yonge.cooleshow.portal.config;
-
-import com.yonge.cooleshow.portal.service.UmsMemberService;
-import com.macro.mall.security.config.SecurityConfig;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
-import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
-import org.springframework.security.core.userdetails.UserDetailsService;
-
-/**
- * mall-security模块相关配置
- * Created by macro on 2019/11/5.
- */
-@Configuration
-@EnableWebSecurity
-@EnableGlobalMethodSecurity(prePostEnabled = true)
-public class MallSecurityConfig extends SecurityConfig {
-
-    @Autowired
-    private UmsMemberService memberService;
-
-    @Bean
-    public UserDetailsService userDetailsService() {
-        //获取登录用户信息
-        return username -> memberService.loadUserByUsername(username);
-    }
-}

+ 35 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/config/ResourceServerConfig.java

@@ -0,0 +1,35 @@
+package com.yonge.cooleshow.portal.config;
+
+import com.yonge.cooleshow.common.security.BaseAccessDeniedHandler;
+import com.yonge.cooleshow.common.security.BaseAuthenticationEntryPoint;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
+
+@Configuration
+@EnableResourceServer
+@EnableGlobalMethodSecurity(prePostEnabled = true)
+public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
+
+    @Autowired
+    private BaseAccessDeniedHandler baseAccessDeniedHandler;
+
+    @Autowired
+    private BaseAuthenticationEntryPoint baseAuthenticationEntryPoint;
+
+    @Override
+    public void configure(HttpSecurity http) throws Exception {
+        http.csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()
+                .authorizeRequests().antMatchers("/wechat/*","/v2/api-docs", "/code/*").permitAll().anyRequest().permitAll().and().httpBasic();
+    }
+
+    @Override
+    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
+        resources.authenticationEntryPoint(baseAuthenticationEntryPoint).accessDeniedHandler(baseAccessDeniedHandler);
+    }
+
+}

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

@@ -0,0 +1,55 @@
+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;
+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.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Configuration
+public class WebMvcConfig implements WebMvcConfigurer {
+
+	@Autowired
+	private MDCInterceptor mdcInterceptor;
+
+	/**
+	 * 枚举类的转换器 addConverterFactory
+	 */
+	@Override
+	public void addFormatters(FormatterRegistry registry) {
+		registry.addConverterFactory(new EnumConverterFactory());
+	}
+
+	@Override
+	public void addInterceptors(InterceptorRegistry registry) {
+		// addPathPatterns 用于添加拦截规则, 这里假设拦截 /url 后面的全部链接
+		List<String> includePathPatterns = new ArrayList<String>();
+		includePathPatterns.add("/**");
+
+		// excludePathPatterns 用户排除拦截
+		List<String> excludePathPatterns = new ArrayList<String>();
+		excludePathPatterns.add("/login");
+
+		registry.addInterceptor(mdcInterceptor).addPathPatterns(includePathPatterns).excludePathPatterns(excludePathPatterns);
+
+//		registry.addInterceptor(operationLogInterceptor).addPathPatterns("/**").excludePathPatterns("/login");
+	}
+
+	@Bean
+	public HttpMessageConverters fastJsonHttpMessageConverters() {
+		LocalFastJsonHttpMessageConverter converter = new LocalFastJsonHttpMessageConverter();
+		List<MediaType> fastMediaTypes = new ArrayList<MediaType>();
+		fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
+		converter.setSupportedMediaTypes(fastMediaTypes);
+		return new HttpMessageConverters(converter);
+	}
+}

+ 1 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/HomeController.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.portal.controller;
 
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.mall.common.api.CommonResult;
 import com.yonge.cooleshow.mbg.model.CmsSubject;
 import com.yonge.cooleshow.mbg.model.PmsProduct;

+ 0 - 94
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/UmsMemberController.java

@@ -1,22 +1,7 @@
 package com.yonge.cooleshow.portal.controller;
 
-import com.yonge.cooleshow.mall.common.api.CommonResult;
-import com.yonge.cooleshow.mbg.model.UmsMember;
-import com.yonge.cooleshow.portal.service.UmsMemberService;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.servlet.http.HttpServletRequest;
-import java.security.Principal;
-import java.util.HashMap;
-import java.util.Map;
 
 /**
  * 会员登录注册管理Controller
@@ -26,83 +11,4 @@ import java.util.Map;
 @Api(tags = "UmsMemberController", description = "会员登录注册管理")
 @RequestMapping("/sso")
 public class UmsMemberController {
-
-    @Value("${jwt.tokenHeader}")
-    private String tokenHeader;
-    @Value("${jwt.tokenHead}")
-    private String tokenHead;
-
-    @Autowired
-    private UmsMemberService memberService;
-
-    @ApiOperation("会员注册")
-    @RequestMapping(value = "/register", method = RequestMethod.POST)
-    @ResponseBody
-    public CommonResult register(@RequestParam String username,
-                                 @RequestParam String password,
-                                 @RequestParam String telephone,
-                                 @RequestParam String authCode) {
-        memberService.register(username, password, telephone, authCode);
-        return CommonResult.success(null,"注册成功");
-    }
-
-    @ApiOperation("会员登录")
-    @RequestMapping(value = "/login", method = RequestMethod.POST)
-    @ResponseBody
-    public CommonResult login(@RequestParam String username,
-                              @RequestParam String password) {
-        String token = memberService.login(username, password);
-        if (token == null) {
-            return CommonResult.validateFailed("用户名或密码错误");
-        }
-        Map<String, String> tokenMap = new HashMap<>();
-        tokenMap.put("token", token);
-        tokenMap.put("tokenHead", tokenHead);
-        return CommonResult.success(tokenMap);
-    }
-
-    @ApiOperation("获取会员信息")
-    @RequestMapping(value = "/info", method = RequestMethod.GET)
-    @ResponseBody
-    public CommonResult info(Principal principal) {
-        if(principal==null){
-            return CommonResult.unauthorized(null);
-        }
-        UmsMember member = memberService.getCurrentMember();
-        return CommonResult.success(member);
-    }
-
-    @ApiOperation("获取验证码")
-    @RequestMapping(value = "/getAuthCode", method = RequestMethod.GET)
-    @ResponseBody
-    public CommonResult getAuthCode(@RequestParam String telephone) {
-        String authCode = memberService.generateAuthCode(telephone);
-        return CommonResult.success(authCode,"获取验证码成功");
-    }
-
-    @ApiOperation("会员修改密码")
-    @RequestMapping(value = "/updatePassword", method = RequestMethod.POST)
-    @ResponseBody
-    public CommonResult updatePassword(@RequestParam String telephone,
-                                 @RequestParam String password,
-                                 @RequestParam String authCode) {
-        memberService.updatePassword(telephone,password,authCode);
-        return CommonResult.success(null,"密码修改成功");
-    }
-
-
-    @ApiOperation(value = "刷新token")
-    @RequestMapping(value = "/refreshToken", method = RequestMethod.GET)
-    @ResponseBody
-    public CommonResult refreshToken(HttpServletRequest request) {
-        String token = request.getHeader(tokenHeader);
-        String refreshToken = memberService.refreshToken(token);
-        if (refreshToken == null) {
-            return CommonResult.failed("token已经过期!");
-        }
-        Map<String, String> tokenMap = new HashMap<>();
-        tokenMap.put("token", refreshToken);
-        tokenMap.put("tokenHead", tokenHead);
-        return CommonResult.success(tokenMap);
-    }
 }

+ 41 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/interceptor/MDCInterceptor.java

@@ -0,0 +1,41 @@
+package com.yonge.cooleshow.portal.interceptor;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.toolset.utils.web.WebUtil;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Component
+public class MDCInterceptor extends HandlerInterceptorAdapter {
+
+	private static final String IP = "ip";
+
+	private static final String USERNAME = "username";
+	
+	@Autowired
+	@Lazy
+	private SysUserFeignService sysUserFeignService;
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser != null && sysUser.getId() != null) {
+			// 存储userId以及IP
+			MDC.put(USERNAME, sysUser.getUsername() + "@" + sysUser.getId());
+		}
+		MDC.put(IP, WebUtil.getRemoteIp(request));
+
+		return true;
+	}
+
+	@Override
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+	}
+}

+ 31 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/interceptor/OperationLogInterceptor.java

@@ -0,0 +1,31 @@
+package com.yonge.cooleshow.portal.interceptor;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.toolset.log.interceptor.AuditLogInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Component
+public class OperationLogInterceptor extends AuditLogInterceptor {
+
+	@Autowired
+	@Lazy
+	private SysUserFeignService sysUserFeignService;
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser != null && sysUser.getId() != null) {
+			setUsername(sysUser.getRealName(),sysUser.getId());
+		}
+		return true;
+	}
+
+}

+ 0 - 9
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/UmsMemberCacheService.java

@@ -22,13 +22,4 @@ public interface UmsMemberCacheService {
      */
     void setMember(UmsMember member);
 
-    /**
-     * 设置验证码
-     */
-    void setAuthCode(String telephone, String authCode);
-
-    /**
-     * 获取验证码
-     */
-    String getAuthCode(String telephone);
 }

+ 0 - 26
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/UmsMemberService.java

@@ -19,22 +19,6 @@ public interface UmsMemberService {
      */
     UmsMember getById(Long id);
 
-    /**
-     * 用户注册
-     */
-    @Transactional
-    void register(String username, String password, String telephone, String authCode);
-
-    /**
-     * 生成验证码
-     */
-    String generateAuthCode(String telephone);
-
-    /**
-     * 修改密码
-     */
-    @Transactional
-    void updatePassword(String telephone, String password, String authCode);
 
     /**
      * 获取当前登录会员
@@ -51,14 +35,4 @@ public interface UmsMemberService {
      * 获取用户信息
      */
     UserDetails loadUserByUsername(String username);
-
-    /**
-     * 登录后获取token
-     */
-    String login(String username, String password);
-
-    /**
-     * 刷新token
-     */
-    String refreshToken(String token);
 }

+ 2 - 2
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/HomeServiceImpl.java

@@ -85,7 +85,7 @@ public class HomeServiceImpl implements HomeService {
     }
 
     private  List<PmsProductAttributeCategory>  getHomeProductAttributeCategory() {
-        PageHelper.startPage(0, 4);
+        PageHelper.startPage(1, 4);
         PmsProductAttributeCategoryExample example = new PmsProductAttributeCategoryExample();
         example.setOrderByClause("id desc");
         List<PmsProductAttributeCategory> pmsProductCategories = productAttributeCategoryMapper.selectByExample(example);
@@ -97,7 +97,7 @@ public class HomeServiceImpl implements HomeService {
 
 
     private List<ProductCategorySmallVo> getHomeProductCategoryList() {
-        PageHelper.startPage(0, 4);
+        PageHelper.startPage(1, 4);
         PmsProductCategoryExample example = new PmsProductCategoryExample();
         example.setOrderByClause("sort desc");
         example.createCriteria().andParentIdEqualTo(0L)

+ 0 - 15
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/UmsMemberCacheServiceImpl.java

@@ -4,7 +4,6 @@ import com.yonge.cooleshow.mall.common.service.RedisService;
 import com.yonge.cooleshow.mbg.mapper.UmsMemberMapper;
 import com.yonge.cooleshow.mbg.model.UmsMember;
 import com.yonge.cooleshow.portal.service.UmsMemberCacheService;
-import com.macro.mall.security.annotation.CacheException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -50,18 +49,4 @@ public class UmsMemberCacheServiceImpl implements UmsMemberCacheService {
         String key = REDIS_DATABASE + ":" + REDIS_KEY_MEMBER + ":" + member.getUsername();
         redisService.set(key, member, REDIS_EXPIRE);
     }
-
-    @CacheException
-    @Override
-    public void setAuthCode(String telephone, String authCode) {
-        String key = REDIS_DATABASE + ":" + REDIS_KEY_AUTH_CODE + ":" + telephone;
-        redisService.set(key,authCode,REDIS_EXPIRE_AUTH_CODE);
-    }
-
-    @CacheException
-    @Override
-    public String getAuthCode(String telephone) {
-        String key = REDIS_DATABASE + ":" + REDIS_KEY_AUTH_CODE + ":" + telephone;
-        return (String) redisService.get(key);
-    }
 }

+ 32 - 106
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/UmsMemberServiceImpl.java

@@ -1,5 +1,8 @@
 package com.yonge.cooleshow.portal.service.impl;
 
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.common.exception.BizException;
 import com.yonge.cooleshow.mall.common.exception.Asserts;
 import com.yonge.cooleshow.mbg.mapper.UmsMemberLevelMapper;
 import com.yonge.cooleshow.mbg.mapper.UmsMemberMapper;
@@ -10,7 +13,6 @@ import com.yonge.cooleshow.mbg.model.UmsMemberLevelExample;
 import com.yonge.cooleshow.portal.domain.MemberDetails;
 import com.yonge.cooleshow.portal.service.UmsMemberCacheService;
 import com.yonge.cooleshow.portal.service.UmsMemberService;
-import com.macro.mall.security.util.JwtTokenUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,20 +41,15 @@ import java.util.Random;
 @Service
 public class UmsMemberServiceImpl implements UmsMemberService {
     private static final Logger LOGGER = LoggerFactory.getLogger(UmsMemberServiceImpl.class);
-    @Autowired
-    private PasswordEncoder passwordEncoder;
-    @Autowired
-    private JwtTokenUtil jwtTokenUtil;
+
     @Autowired
     private UmsMemberMapper memberMapper;
     @Autowired
     private UmsMemberLevelMapper memberLevelMapper;
     @Autowired
     private UmsMemberCacheService memberCacheService;
-    @Value("${redis.key.authCode}")
-    private String REDIS_KEY_PREFIX_AUTH_CODE;
-    @Value("${redis.expire.authCode}")
-    private Long AUTH_CODE_EXPIRE_SECONDS;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
 
     @Override
     public UmsMember getByUsername(String username) {
@@ -75,72 +72,34 @@ public class UmsMemberServiceImpl implements UmsMemberService {
     }
 
     @Override
-    public void register(String username, String password, String telephone, String authCode) {
-        //验证验证码
-        if(!verifyAuthCode(authCode,telephone)){
-            Asserts.fail("验证码错误");
-        }
-        //查询是否已有该用户
-        UmsMemberExample example = new UmsMemberExample();
-        example.createCriteria().andUsernameEqualTo(username);
-        example.or(example.createCriteria().andPhoneEqualTo(telephone));
-        List<UmsMember> umsMembers = memberMapper.selectByExample(example);
-        if (!CollectionUtils.isEmpty(umsMembers)) {
-            Asserts.fail("该用户已经存在");
-        }
-        //没有该用户进行添加操作
-        UmsMember umsMember = new UmsMember();
-        umsMember.setUsername(username);
-        umsMember.setPhone(telephone);
-        umsMember.setPassword(passwordEncoder.encode(password));
-        umsMember.setCreateTime(new Date());
-        umsMember.setStatus(1);
-        //获取默认会员等级并设置
-        UmsMemberLevelExample levelExample = new UmsMemberLevelExample();
-        levelExample.createCriteria().andDefaultStatusEqualTo(1);
-        List<UmsMemberLevel> memberLevelList = memberLevelMapper.selectByExample(levelExample);
-        if (!CollectionUtils.isEmpty(memberLevelList)) {
-            umsMember.setMemberLevelId(memberLevelList.get(0).getId());
-        }
-        memberMapper.insert(umsMember);
-        umsMember.setPassword(null);
-    }
-
-    @Override
-    public String generateAuthCode(String telephone) {
-        StringBuilder sb = new StringBuilder();
-        Random random = new Random();
-        for(int i=0;i<6;i++){
-            sb.append(random.nextInt(10));
-        }
-        memberCacheService.setAuthCode(telephone,sb.toString());
-        return sb.toString();
-    }
-
-    @Override
-    public void updatePassword(String telephone, String password, String authCode) {
-        UmsMemberExample example = new UmsMemberExample();
-        example.createCriteria().andPhoneEqualTo(telephone);
-        List<UmsMember> memberList = memberMapper.selectByExample(example);
-        if(CollectionUtils.isEmpty(memberList)){
-            Asserts.fail("该账号不存在");
+    public UmsMember getCurrentMember() {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || sysUser.getId() == null) {
+            throw new BizException("用户信息获取失败");
         }
-        //验证验证码
-        if(!verifyAuthCode(authCode,telephone)){
-            Asserts.fail("验证码错误");
+        UmsMember umsMember = getById(sysUser.getId());
+        // 商城库用户不存在-> 创建
+        if (umsMember == null || umsMember.getId() == null) {
+            umsMember = new UmsMember();
+            umsMember.setId(sysUser.getId());
+            umsMember.setCreateTime(sysUser.getCreateTime());
+            umsMember.setUsername(sysUser.getUsername());
+            umsMember.setPassword(sysUser.getPassword());
+            umsMember.setPhone(sysUser.getPhone());
+            umsMember.setStatus(sysUser.getLockFlag());
+            umsMember.setIcon(sysUser.getAvatar());
+            umsMember.setGender(sysUser.getGender());
+            umsMember.setBirthday(sysUser.getBirthdate());
+            //获取默认会员等级并设置
+            UmsMemberLevelExample levelExample = new UmsMemberLevelExample();
+            levelExample.createCriteria().andDefaultStatusEqualTo(1);
+            List<UmsMemberLevel> memberLevelList = memberLevelMapper.selectByExample(levelExample);
+            if (!CollectionUtils.isEmpty(memberLevelList)) {
+                umsMember.setMemberLevelId(memberLevelList.get(0).getId());
+            }
+            memberMapper.insert(umsMember);
         }
-        UmsMember umsMember = memberList.get(0);
-        umsMember.setPassword(passwordEncoder.encode(password));
-        memberMapper.updateByPrimaryKeySelective(umsMember);
-        memberCacheService.delMember(umsMember.getId());
-    }
-
-    @Override
-    public UmsMember getCurrentMember() {
-        SecurityContext ctx = SecurityContextHolder.getContext();
-        Authentication auth = ctx.getAuthentication();
-        MemberDetails memberDetails = (MemberDetails) auth.getPrincipal();
-        return memberDetails.getUmsMember();
+        return umsMember;
     }
 
     @Override
@@ -160,37 +119,4 @@ public class UmsMemberServiceImpl implements UmsMemberService {
         }
         throw new UsernameNotFoundException("用户名或密码错误");
     }
-
-    @Override
-    public String login(String username, String password) {
-        String token = null;
-        //密码需要客户端加密后传递
-        try {
-            UserDetails userDetails = loadUserByUsername(username);
-            if(!passwordEncoder.matches(password,userDetails.getPassword())){
-                throw new BadCredentialsException("密码不正确");
-            }
-            UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
-            SecurityContextHolder.getContext().setAuthentication(authentication);
-            token = jwtTokenUtil.generateToken(userDetails);
-        } catch (AuthenticationException e) {
-            LOGGER.warn("登录异常:{}", e.getMessage());
-        }
-        return token;
-    }
-
-    @Override
-    public String refreshToken(String token) {
-        return jwtTokenUtil.refreshHeadToken(token);
-    }
-
-    //对输入的验证码进行校验
-    private boolean verifyAuthCode(String authCode, String telephone){
-        if(StringUtils.isEmpty(authCode)){
-            return false;
-        }
-        String realAuthCode = memberCacheService.getAuthCode(telephone);
-        return authCode.equals(realAuthCode);
-    }
-
 }

+ 1 - 1
cooleshow-mall/mall-security/src/main/java/com/macro/mall/security/annotation/CacheException.java → cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/annotation/CacheException.java

@@ -1,4 +1,4 @@
-package com.macro.mall.security.annotation;
+package com.yonge.cooleshow.mall.security.annotation;
 
 import java.lang.annotation.*;
 

+ 2 - 2
cooleshow-mall/mall-security/src/main/java/com/macro/mall/security/aspect/RedisCacheAspect.java → cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/aspect/RedisCacheAspect.java

@@ -1,6 +1,6 @@
-package com.macro.mall.security.aspect;
+package com.yonge.cooleshow.mall.security.aspect;
 
-import com.macro.mall.security.annotation.CacheException;
+import com.yonge.cooleshow.mall.security.annotation.CacheException;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.Signature;
 import org.aspectj.lang.annotation.Around;

+ 1 - 1
cooleshow-mall/mall-security/src/main/java/com/macro/mall/security/component/DynamicAccessDecisionManager.java → cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/component/DynamicAccessDecisionManager.java

@@ -1,4 +1,4 @@
-package com.macro.mall.security.component;
+package com.yonge.cooleshow.mall.security.component;
 
 import cn.hutool.core.collection.CollUtil;
 import org.springframework.security.access.AccessDecisionManager;

+ 2 - 2
cooleshow-mall/mall-security/src/main/java/com/macro/mall/security/component/DynamicSecurityFilter.java → cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/component/DynamicSecurityFilter.java

@@ -1,6 +1,6 @@
-package com.macro.mall.security.component;
+package com.yonge.cooleshow.mall.security.component;
 
-import com.macro.mall.security.config.IgnoreUrlsConfig;
+import com.yonge.cooleshow.mall.security.config.IgnoreUrlsConfig;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpMethod;
 import org.springframework.security.access.SecurityMetadataSource;

+ 1 - 1
cooleshow-mall/mall-security/src/main/java/com/macro/mall/security/component/DynamicSecurityMetadataSource.java → cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/component/DynamicSecurityMetadataSource.java

@@ -1,4 +1,4 @@
-package com.macro.mall.security.component;
+package com.yonge.cooleshow.mall.security.component;
 
 import cn.hutool.core.util.URLUtil;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
cooleshow-mall/mall-security/src/main/java/com/macro/mall/security/component/DynamicSecurityService.java → cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/component/DynamicSecurityService.java

@@ -1,4 +1,4 @@
-package com.macro.mall.security.component;
+package com.yonge.cooleshow.mall.security.component;
 
 import org.springframework.security.access.ConfigAttribute;
 

+ 2 - 2
cooleshow-mall/mall-security/src/main/java/com/macro/mall/security/component/JwtAuthenticationTokenFilter.java → cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/component/JwtAuthenticationTokenFilter.java

@@ -1,6 +1,6 @@
-package com.macro.mall.security.component;
+package com.yonge.cooleshow.mall.security.component;
 
-import com.macro.mall.security.util.JwtTokenUtil;
+import com.yonge.cooleshow.mall.security.util.JwtTokenUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
cooleshow-mall/mall-security/src/main/java/com/macro/mall/security/component/RestAuthenticationEntryPoint.java → cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/component/RestAuthenticationEntryPoint.java

@@ -1,4 +1,4 @@
-package com.macro.mall.security.component;
+package com.yonge.cooleshow.mall.security.component;
 
 import cn.hutool.json.JSONUtil;
 import com.yonge.cooleshow.mall.common.api.CommonResult;

+ 1 - 1
cooleshow-mall/mall-security/src/main/java/com/macro/mall/security/component/RestfulAccessDeniedHandler.java → cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/component/RestfulAccessDeniedHandler.java

@@ -1,4 +1,4 @@
-package com.macro.mall.security.component;
+package com.yonge.cooleshow.mall.security.component;
 
 import cn.hutool.json.JSONUtil;
 import com.yonge.cooleshow.mall.common.api.CommonResult;

+ 1 - 1
cooleshow-mall/mall-security/src/main/java/com/macro/mall/security/config/IgnoreUrlsConfig.java → cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/config/IgnoreUrlsConfig.java

@@ -1,4 +1,4 @@
-package com.macro.mall.security.config;
+package com.yonge.cooleshow.mall.security.config;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 

+ 3 - 3
cooleshow-mall/mall-security/src/main/java/com/macro/mall/security/config/SecurityConfig.java → cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/config/SecurityConfig.java

@@ -1,7 +1,7 @@
-package com.macro.mall.security.config;
+package com.yonge.cooleshow.mall.security.config;
 
-import com.macro.mall.security.component.*;
-import com.macro.mall.security.util.JwtTokenUtil;
+import com.yonge.cooleshow.mall.security.component.*;
+import com.yonge.cooleshow.mall.security.util.JwtTokenUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.context.annotation.Bean;

+ 1 - 1
cooleshow-mall/mall-security/src/main/java/com/macro/mall/security/util/JwtTokenUtil.java → cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/util/JwtTokenUtil.java

@@ -1,4 +1,4 @@
-package com.macro.mall.security.util;
+package com.yonge.cooleshow.mall.security.util;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;

+ 1 - 1
cooleshow-mall/mall-security/src/main/java/com/macro/mall/security/util/SpringUtil.java → cooleshow-mall/mall-security/src/main/java/com/yonge/cooleshow/mall/security/util/SpringUtil.java

@@ -1,4 +1,4 @@
-package com.macro.mall.security.util;
+package com.yonge.cooleshow.mall.security.util;
 
 import org.springframework.beans.BeansException;
 import org.springframework.context.ApplicationContext;

+ 9 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java

@@ -42,12 +42,16 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
     List<StudentTotalVo> queryStudentTotal();
 
     /**
-     * 根据学生id查询大于当前时间并未开始的课程
-     *
-     * @param studentId 学生id
-     * @param classDate 年月日
+     * 根据学生id查询课程
+     * @param param 传入参数
+     *              <p> - studentId 学生id
+     *              <p> - status 课程状态 NOT_START未开始 ING进行中 COMPLETE已完成
+     *              <p> - classDate  年月日
+     *              <p> - startClassDate 开始时间-年月日
+     *              <p> - endClassDate 结束时间-年月日
+     *              <p> - greaterDate 上课时间大于该时间-年月日时分秒
      */
-    List<CourseSchedule> queryStudentCourse(@Param("studentId") Long studentId, @Param("classDate") String classDate);
+    List<CourseSchedule> queryStudentCourse(@Param("param") Map<String, Object> param);
 
     /**
      * 查询老师直播课程

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/MusicTagSaveDto.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.dto;
 import io.swagger.annotations.ApiModelProperty;
 
 import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import javax.validation.groups.Default;
 
 /**
@@ -18,6 +19,7 @@ public class MusicTagSaveDto {
 
 
     @ApiModelProperty("标签id ")
+    @NotNull(groups = Update.class,message = "标签ID不能为空")
     private Long id;
 
     @ApiModelProperty("父级标签id ")

+ 9 - 21
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseCalendarEntity.java

@@ -19,16 +19,15 @@ public class CourseCalendarEntity implements Serializable {
     @ApiModelProperty(value = "是否是节假日  0:不是 1是")
     private Integer holiday;
 
+    @ApiModelProperty(value = "是否跳过节假日  0:不跳过 1跳过")
+    private Integer skipHoliday;
+
     @ApiModelProperty(value = "当日课程是否排满  0:未满 1满")
     private Integer fullCourse;
 
     @ApiModelProperty(value = "当日课程时间-满课或跳过节假日的无数据")
     private List<CourseTimeEntity> courseTime;
 
-    public static CourseCalendarEntity build() {
-        return new CourseCalendarEntity();
-    }
-
     public String getDate() {
         return date;
     }
@@ -37,11 +36,6 @@ public class CourseCalendarEntity implements Serializable {
         this.date = date;
     }
 
-    public CourseCalendarEntity date(String date) {
-        this.date = date;
-        return this;
-    }
-
     public Integer getHoliday() {
         return holiday;
     }
@@ -50,10 +44,6 @@ public class CourseCalendarEntity implements Serializable {
         this.holiday = holiday;
     }
 
-    public CourseCalendarEntity holiday(Integer holiday) {
-        this.holiday = holiday;
-        return this;
-    }
 
     public Integer getFullCourse() {
         return fullCourse;
@@ -63,11 +53,6 @@ public class CourseCalendarEntity implements Serializable {
         this.fullCourse = fullCourse;
     }
 
-    public CourseCalendarEntity fullCourse(Integer fullCourse) {
-        this.fullCourse = fullCourse;
-        return this;
-    }
-
     public List<CourseTimeEntity> getCourseTime() {
         return courseTime;
     }
@@ -76,8 +61,11 @@ public class CourseCalendarEntity implements Serializable {
         this.courseTime = courseTime;
     }
 
-    public CourseCalendarEntity courseTime(List<CourseTimeEntity> courseTime) {
-        this.courseTime = courseTime;
-        return this;
+    public Integer getSkipHoliday() {
+        return skipHoliday;
+    }
+
+    public void setSkipHoliday(Integer skipHoliday) {
+        this.skipHoliday = skipHoliday;
     }
 }

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java

@@ -120,6 +120,19 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
      */
     List<CourseCalendarEntity> createLiveCourseCalendar(Map<String, Object> param);
 
+    /**
+     * 生成陪练课日历-用于学生购买指定老师陪练课
+     *
+     * @param param 传入参数
+     *              <p> - teacherId 老师id
+     *              <p> - studentId 学生id
+     *              <p> - year 年
+     *              <p> - month 月
+     *              <p> - day 日
+     * @return 返回传入时间当月每日的剩余时间段
+     */
+    List<CourseCalendarEntity> createPracticeCourseCalender(Map<String, Object> param);
+
     IPage<MyCourseVo> myCourse(IPage<MyCourseVo> page, MyCourseSearch search);
 }
 

+ 193 - 47
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -1,26 +1,25 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
-import com.yonge.cooleshow.biz.dal.vo.MyCourseVo;
-import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleDao;
-import com.yonge.cooleshow.biz.dal.entity.CourseCalendarEntity;
-import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
-import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
-import com.yonge.cooleshow.biz.dal.entity.HolidaysFestivals;
+import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
+import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
 import com.yonge.cooleshow.biz.dal.service.HolidaysFestivalsService;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
+import com.yonge.cooleshow.biz.dal.service.TeacherFreeTimeService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
+import com.yonge.cooleshow.biz.dal.vo.MyCourseVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherLiveCourseInfoVo;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.exception.BizException;
 import com.yonge.cooleshow.common.page.PageInfo;
 import com.yonge.toolset.utils.date.DateUtil;
@@ -37,6 +36,7 @@ import javax.validation.Valid;
 import java.time.LocalDate;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
+import java.util.function.BiConsumer;
 import java.util.function.Function;
 
 /**
@@ -57,6 +57,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     private HolidaysFestivalsService holidaysFestivalsService;
     @Autowired
     private SysConfigService sysConfigService;
+    @Autowired
+    private TeacherFreeTimeService teacherFreeTimeService;
 
     @Override
     public CourseScheduleDao getDao() {
@@ -108,7 +110,12 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         //获取日期-目前上课没有跨天情况
         String ymd = DateUtil.format(startTime, DateUtil.DEFAULT_PATTERN);
         //查询大于当前时间并未开始的课程
-        List<CourseSchedule> list = baseMapper.queryStudentCourse(studentId, ymd);
+        Map<String, Object> param = new HashMap<>();
+        param.put("studentId", studentId);
+        param.put("greaterDate", new Date());
+        param.put("classDate", ymd);
+        param.put("status", CourseScheduleEnum.NOT_START.getCode());
+        List<CourseSchedule> list = baseMapper.queryStudentCourse(param);
         return checkCourseTime(list, CourseSchedule::getStartTime, CourseSchedule::getEndTime, startTime, endTime);
     }
 
@@ -155,8 +162,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * @param endTime      新增课程结束时间
      * @return true 有交集 false 没有交集
      */
-    public <T> boolean checkCourseTime(List<T> list, Function<T, Date> startTimeFun, Function<T, Date> endTimeFun,
-                                       Date startTime, Date endTime) {
+    public <T> boolean checkCourseTime(List<T> list, Function<T, Date> startTimeFun, Function<T, Date> endTimeFun, Date startTime, Date endTime) {
         WrapperUtil.checkObj(startTime, "开始时间不能为空!");
         WrapperUtil.checkObj(endTime, "结束时间不能为空!");
         // 如果没有课程,直接返回false
@@ -241,12 +247,25 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         LocalDate lastDay = firstDay.with(TemporalAdjusters.lastDayOfMonth());
         //获取老师的课程  key:日期-年月日 value:课程时间-开始时间,结束时间
         Map<String, List<CourseTimeEntity>> nowCourseMap = getTeacherCourseTime(teacherId, firstDay.toString(), lastDay.toString());
-        //储存节假日数据,避免重复查询
-        Map<Integer, List<String>> holidayMap = new HashMap<>();
         //生成日历数据
         List<CourseCalendarEntity> courseCalendarEntities = generateCourseData(firstDay, lastDay, singleCourseMinutes);
+        //对比课程数据,筛选出空余的课程时间
+        opsCourseCalendarData(nowCourseMap, courseCalendarEntities, 0);
+        return courseCalendarEntities;
+    }
+
+    /**
+     * 对比课程数据,筛选出空余的课程时间
+     *
+     * @param nowCourseMap           现有课程
+     * @param courseCalendarEntities 课程时间日历
+     * @param skipHoliday            是否跳过节假日  0:不跳过 1跳过
+     */
+    private void opsCourseCalendarData(Map<String, List<CourseTimeEntity>> nowCourseMap, List<CourseCalendarEntity> courseCalendarEntities, Integer skipHoliday) {
+        //储存节假日数据,避免重复查询
+        Map<Integer, List<String>> holidayMap = new HashMap<>();
         courseCalendarEntities.forEach(calendarEntity -> {
-            //获取课程数据,并剔除交集时间段数据,
+            //获取课程数据,并剔除交集时间段数据
             List<CourseTimeEntity> nowCourse = nowCourseMap.get(calendarEntity.getDate());
             if (CollectionUtils.isEmpty(nowCourse)) {
                 //当日没课
@@ -280,9 +299,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                     });
             //是否是节假日  0:不是 1是
             calendarEntity.setHoliday(holiday.contains(calendarEntity.getDate()) ? 1 : 0);
+            calendarEntity.setSkipHoliday(skipHoliday);//直播课日历只展示节假日 不跳过节假日
         });
-
-        return courseCalendarEntities;
     }
 
     /**
@@ -300,23 +318,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 .ge(CourseSchedule::getClassDate, startDate)
                 .le(CourseSchedule::getClassDate, endDate)
         );
-        //老师课程 key:日期-年月日  value:课程
-        Map<String, List<CourseTimeEntity>> nowCourse = new HashMap<>();
-        if (CollectionUtils.isNotEmpty(courseList)) {
-            WrapperUtil.groupList(courseList, CourseSchedule::getClassDate)
-                    .forEach((k, v) -> {
-                                List<CourseTimeEntity> value = new ArrayList<>();
-                                v.forEach(course -> {
-                                    CourseTimeEntity courseTimeEntity = new CourseTimeEntity();
-                                    courseTimeEntity.setStartTime(course.getStartTime());
-                                    courseTimeEntity.setEndTime(course.getEndTime());
-                                    value.add(courseTimeEntity);
-                                });
-                                nowCourse.put(DateUtil.dateToString(k), value);
-                            }
-                    );
-        }
-        return nowCourse;
+        return getCourseListMap(courseList);
     }
 
     /**
@@ -348,14 +350,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             List<CourseTimeEntity> times = new ArrayList<>();
             //获取当前日期
             entity.setDate(firstDay.toString());
-            int finalAddDay = addDay;
-            dayTime.forEach(time -> {
-                CourseTimeEntity courseTimeEntity = new CourseTimeEntity();
-                courseTimeEntity.setStartTime(DateUtil.addDays(time.getStartTime(), finalAddDay));
-                courseTimeEntity.setEndTime(DateUtil.addDays(time.getEndTime(), finalAddDay));
-                times.add(courseTimeEntity);
-            });
-            entity.courseTime(times);
+            //将每日上课时间时间添加到日历中
+            opsCourseDayTime(addDay, entity, times, dayTime);
             list.add(entity);
             firstDay = firstDay.plusDays(1L);
             addDay++;
@@ -411,18 +407,168 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * 生成陪练课日历
+     * 生成陪练课日历-用于学生购买指定老师陪练课
+     *
+     * @param param 传入参数
+     *              <p> - teacherId 老师id
+     *              <p> - studentId 学生id
+     *              <p> - year 年
+     *              <p> - month 月
+     *              <p> - day 日
+     * @return 返回传入时间当月每日的剩余时间段
      */
-    public void generatePracticeCourseCalender() {
-        //todo 注意:如果是陪练课的日历需要查询老师设置的陪练课时间有哪些,不能直接根据时间段来
-        //获取周 int value = calendarDay.getDayOfWeek().getValue();
+    public List<CourseCalendarEntity> createPracticeCourseCalender(Map<String, Object> param) {
+        //校验数据
+        Long teacherId = WrapperUtil.toLong(param, "teacherId", "老师id不能为空!");
+        Long studentId = WrapperUtil.toLong(param, "teacherId", "学生id不能为空!");
+        Integer year = WrapperUtil.toInt(param, "year", "日历的时间年份不能为空!");
+        Integer month = WrapperUtil.toInt(param, "month", "日历的时间月份不能为空!");
+        Integer day = WrapperUtil.toInt(param, "month", "日历的时间日期不能为空!");
+
+        //传入的日期+1天开始
+        LocalDate firstDay = LocalDate.of(year, month, day).plusDays(1L);
+        //根据firstDay计算出该月的最后一天
+        LocalDate lastDay = firstDay.with(TemporalAdjusters.lastDayOfMonth());
+        //查询老师陪练课设置
+        TeacherFreeTime teacherTime = teacherFreeTimeService.getOne(Wrappers.<TeacherFreeTime>lambdaQuery()
+                .eq(TeacherFreeTime::getDefaultFlag, true)
+                .eq(TeacherFreeTime::getTeacherId, teacherId)
+        );
+        Optional.ofNullable(teacherTime).orElseThrow(() -> new BizException("未查询到老师陪练课设置!"));
+        //根据老师设置的陪练课时间生成当月日历
+        List<CourseCalendarEntity> courseCalendarEntities = generatePracticeCalendar(teacherTime, firstDay, lastDay);
+        //查询老师及当前学生的课时
+        Map<String, List<CourseTimeEntity>> nowCourseMap = getAllPracticeCourseTime(teacherId, studentId, firstDay.toString(), lastDay.toString());
+        //和生成的日历对比,筛选出空余的课程时间
+        opsCourseCalendarData(nowCourseMap, courseCalendarEntities, teacherTime.getSkipHolidayFlag() ? 1 : 0);
+        return courseCalendarEntities;
     }
 
-    private SysUser getSysUser() {
-        return Optional.ofNullable(sysUserFeignService.queryUserInfo())
-                .orElseThrow(() -> new BizException("用户不存在"));
+    /**
+     * 生成老师陪练课日历
+     * <p>陪练课的日历需要查询老师设置的陪练课时间,根据设置的时间来生成日历
+     */
+    private List<CourseCalendarEntity> generatePracticeCalendar(TeacherFreeTime teacherTime, LocalDate firstDay, LocalDate lastDay) {
+        //将老师设置的陪练课时间结构化   key::数字周几 1~7  value:具体的时间 开始时间-结束时间
+        Map<Integer, List<CourseTimeEntity>> teacherPracticeTime = getTeacherPracticeTime(teacherTime);
+        //每日日期数据
+        List<CourseCalendarEntity> list = new ArrayList<>();
+        //添加的天数
+        int addDay = 0;
+        //获取每日日期数据
+        while (firstDay.isBefore(lastDay) || firstDay.isEqual(lastDay)) {
+            CourseCalendarEntity entity = new CourseCalendarEntity();
+            List<CourseTimeEntity> times = new ArrayList<>();
+            //获取当前日期
+            entity.setDate(firstDay.toString());
+            //获取当前日期周几
+            int weekNum = firstDay.getDayOfWeek().getValue();
+            List<CourseTimeEntity> timeEntities = teacherPracticeTime.get(weekNum);
+            if (CollectionUtils.isNotEmpty(timeEntities)) {
+                //将每日上课时间时间添加到日历中
+                opsCourseDayTime(addDay, entity, times, timeEntities);
+            }
+            list.add(entity);
+            firstDay = firstDay.plusDays(1L);
+            addDay++;
+        }
+        return list;
     }
 
+    /**
+     * 将每日上课时间时间添加到日历中
+     *
+     * @param addDay       添加的天数
+     * @param entity       实体数据
+     * @param times        课程数据集合
+     * @param timeEntities 每日上课时间集合
+     */
+    private void opsCourseDayTime(int addDay, CourseCalendarEntity entity, List<CourseTimeEntity> times, List<CourseTimeEntity> timeEntities) {
+        timeEntities.forEach(time -> {
+            CourseTimeEntity courseTimeEntity = new CourseTimeEntity();
+            courseTimeEntity.setStartTime(DateUtil.addDays(time.getStartTime(), addDay));
+            courseTimeEntity.setEndTime(DateUtil.addDays(time.getEndTime(), addDay));
+            times.add(courseTimeEntity);
+        });
+        entity.setCourseTime(times);
+    }
+
+    /**
+     * 将老师设置的陪练课时间结构化
+     *
+     * @return key::数字周几 1~7  value:具体的时间 开始时间-结束时间
+     */
+    private Map<Integer, List<CourseTimeEntity>> getTeacherPracticeTime(TeacherFreeTime teacherTime) {
+        Map<Integer, List<CourseTimeEntity>> teacherPracticeTime = new HashMap<>();
+        //将老师设置的陪练课时间放入map中
+        BiConsumer<String, Integer> timeCon = (timeStr, weekNum) -> {
+            if (StringUtils.isBlank(timeStr)) {
+                return;
+            }
+            List<CourseTimeEntity> timeEntityList = new ArrayList<>(JSONObject.parseArray(timeStr, CourseTimeEntity.class));
+            teacherPracticeTime.put(weekNum, timeEntityList);
+        };
+        timeCon.accept(teacherTime.getMonday(), 1);
+        timeCon.accept(teacherTime.getTuesday(), 2);
+        timeCon.accept(teacherTime.getWednesday(), 3);
+        timeCon.accept(teacherTime.getThursday(), 4);
+        timeCon.accept(teacherTime.getFriday(), 5);
+        timeCon.accept(teacherTime.getSaturday(), 6);
+        timeCon.accept(teacherTime.getSunday(), 7);
+        return teacherPracticeTime;
+    }
+
+    /**
+     * 查询老师及当前学生的课时
+     *
+     * @param teacherId 老师id
+     * @param studentId 学员id
+     */
+    private Map<String, List<CourseTimeEntity>> getAllPracticeCourseTime(Long teacherId, Long studentId, String startDate, String endDate) {
+        //查询该老师指定时间段的课程
+        List<CourseSchedule> courseList = this.list(Wrappers.<CourseSchedule>lambdaQuery()
+                .eq(CourseSchedule::getTeacherId, teacherId)
+                .ge(CourseSchedule::getClassDate, startDate)
+                .le(CourseSchedule::getClassDate, endDate)
+        );
+        if (CollectionUtils.isEmpty(courseList)) {
+            courseList = new ArrayList<>();
+        }
+        //查询学生的课程
+        Map<String, Object> param = new HashMap<>();
+        param.put("studentId", studentId);
+        param.put("startClassDate", startDate);
+        param.put("endClassDate", endDate);
+        List<CourseSchedule> studentCourse = baseMapper.queryStudentCourse(param);
+        //将数据合并
+        if (CollectionUtils.isNotEmpty(studentCourse)) {
+            courseList.addAll(studentCourse);
+        }
+        return getCourseListMap(courseList);
+    }
+
+    private Map<String, List<CourseTimeEntity>> getCourseListMap(List<CourseSchedule> courseList) {
+        //key:课程日期-年月日  value:课程
+        Map<String, List<CourseTimeEntity>> nowCourse = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(courseList)) {
+            WrapperUtil.groupList(courseList, CourseSchedule::getClassDate)
+                    .forEach((k, v) -> {
+                        List<CourseTimeEntity> value = new ArrayList<>();
+                        v.forEach(course -> {
+                            CourseTimeEntity courseTimeEntity = new CourseTimeEntity();
+                            courseTimeEntity.setStartTime(course.getStartTime());
+                            courseTimeEntity.setEndTime(course.getEndTime());
+                            value.add(courseTimeEntity);
+                        });
+                        nowCourse.put(DateUtil.dateToString(k), value);
+                    });
+        }
+        return nowCourse;
+    }
+
+    private SysUser getSysUser() {
+        return Optional.ofNullable(sysUserFeignService.queryUserInfo()).orElseThrow(() -> new BizException("用户不存在"));
+    }
 
     /**
      * @Description: 老师端-首页-我的课程-陪练课

+ 18 - 4
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -91,10 +91,24 @@
                b.updated_time_
         from course_schedule_student_payment as a
                  left join course_schedule as b on a.course_id_ = b.id_
-        where b.start_time_ > now()
-          and b.class_date_ = #{classDate}
-          and b.status_ = 'NOT_START'
-          and a.user_id_ = #{studentId}
+        <where>
+            a.user_id_ = #{param.studentId}
+            <if test="param.greaterDate != null">
+                AND <![CDATA[ b.start_time_ > #{param.greaterDate} ]]>
+            </if>
+            <if test="param.startClassDate != null">
+                AND <![CDATA[ b.class_date_  >= #{param.startClassDate} ]]>
+            </if>
+            <if test="param.endClassDate != null">
+                AND <![CDATA[ b.class_date_  <= #{param.endClassDate} ]]>
+            </if>
+            <if test="param.classDate != null">
+                AND b.class_date_ = #{param.classDate}
+            </if>
+            <if test="param.status != null">
+                AND b.status_ = #{param.status}
+            </if>
+        </where>
         order by b.start_time_ desc
     </select>
 

+ 14 - 3
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/CourseScheduleController.java

@@ -5,13 +5,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
-import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonGroupSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseCalendarEntity;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.MyCourseVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherLiveCourseInfoVo;
-import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
@@ -70,10 +68,23 @@ public class CourseScheduleController extends BaseController {
     })
     @ApiOperation("直播课创建时的日历数据")
     @PostMapping("/createLiveCourseCalendar")
-    public HttpResponseResult<List<CourseCalendarEntity>> createLiveCourseCalendar(Map<String, Object> param) {
+    public HttpResponseResult<List<CourseCalendarEntity>> createLiveCourseCalendar(@RequestBody Map<String, Object> param) {
         return succeed(courseScheduleService.createLiveCourseCalendar(param));
     }
 
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "teacherId", dataType = "Long", value = "老师id"),
+            @ApiImplicitParam(name = "studentId", dataType = "Long", value = "学生id"),
+            @ApiImplicitParam(name = "year", dataType = "Integer", value = "年"),
+            @ApiImplicitParam(name = "month", dataType = "Integer", value = "月"),
+            @ApiImplicitParam(name = "day", dataType = "Integer", value = "日"),
+    })
+    @ApiOperation("陪练课日历-用于学生购买指定老师陪练课")
+    @PostMapping("/createPracticeCourseCalendar")
+    public HttpResponseResult<List<CourseCalendarEntity>> generatePracticeCourseCalender(@RequestBody Map<String, Object> param) {
+        return succeed(courseScheduleService.createPracticeCourseCalender(param));
+    }
+
     @ApiOperation("老师端-首页-我的课程-陪练课")
     @PostMapping("/myCourse")
     public HttpResponseResult<PageInfo<MyCourseVo>> myCourse(@RequestBody MyCourseSearch search) {