Browse Source

Merge remote-tracking branch 'origin/master'

zouxuan 3 years ago
parent
commit
7bd33a8217
55 changed files with 1660 additions and 413 deletions
  1. 16 16
      audio-analysis/src/main/java/com/yonge/audio/AudioAnalysisServerApplication.java
  2. 1 1
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java
  3. 1 1
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/CmsFeignService.java
  4. 1 1
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/MallAdminFeignService.java
  5. 1 1
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/MallPortalFeignService.java
  6. 12 11
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/AuthServerApplication.java
  7. 39 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/config/RedisConfig.java
  8. 64 57
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsArticleController.java
  9. 49 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsAuthRecordController.java
  10. 12 9
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsConfigLabelController.java
  11. 18 13
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsArticleDao.java
  12. 21 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsAuthRecordDao.java
  13. 8 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsConfigLabelDao.java
  14. 71 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dto/search/BbsArticleSearch.java
  15. 85 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dto/search/BbsAuthRecordSearch.java
  16. 27 10
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dto/search/BbsConfigLabelSearch.java
  17. 24 12
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsArticle.java
  18. 109 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsAuthRecord.java
  19. 3 3
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsConfigLabel.java
  20. 4 3
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsReply.java
  21. 29 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/enums/ArticleEnum.java
  22. 26 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/enums/YesOrNoEnum.java
  23. 34 7
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsArticleService.java
  24. 25 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsAuthRecordService.java
  25. 8 1
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsConfigLabelService.java
  26. 118 7
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsArticleServiceImpl.java
  27. 49 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsAuthRecordServiceImpl.java
  28. 5 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsConfigLabelServiceImpl.java
  29. 8 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/valid/OtherGroup.java
  30. 166 0
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/vo/BbsAuthRecordVo.java
  31. 1 1
      cooleshow-bbs/src/main/resources/bootstrap-dev.yml
  32. 42 11
      cooleshow-bbs/src/main/resources/config/mybatis/BbsArticleMapper.xml
  33. 48 0
      cooleshow-bbs/src/main/resources/config/mybatis/BbsAuthRecordMapper.xml
  34. 28 20
      cooleshow-bbs/src/main/resources/config/mybatis/BbsConfigLabelMapper.xml
  35. 14 10
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/AppConstant.java
  36. 82 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/LauncherConstant.java
  37. 2 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/task/OrderTimeOutCancelTask.java
  38. 3 8
      cooleshow-task/pom.xml
  39. 12 10
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/TaskApplication.java
  40. 0 16
      cooleshow-task/src/main/resources/bootstrap-dev.properties
  41. 6 10
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/AdminApplication.java
  42. 3 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java
  43. 18 16
      cooleshow-user/user-biz/pom.xml
  44. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/PageUtil.java
  45. 0 129
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/SqlKeyword.java
  46. 4 7
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/StudentApplication.java
  47. 3 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/task/TaskController.java
  48. 4 6
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/TeacherApplication.java
  49. 3 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/task/TaskController.java
  50. 72 0
      toolset/toolset-base/src/main/java/com/yonge/toolset/base/BaseApplication.java
  51. 25 0
      toolset/toolset-base/src/main/java/com/yonge/toolset/base/constant/BaseAppConstant.java
  52. 53 0
      toolset/toolset-base/src/main/java/com/yonge/toolset/base/constant/NacosConstant.java
  53. 175 0
      toolset/toolset-base/src/main/java/com/yonge/toolset/base/util/INetUtil.java
  54. 27 0
      toolset/toolset-base/src/main/java/com/yonge/toolset/base/util/PropsUtil.java
  55. 0 16
      toolset/toolset-mybatis/src/main/resources/base-mybatis.yml

+ 16 - 16
audio-analysis/src/main/java/com/yonge/audio/AudioAnalysisServerApplication.java

@@ -3,6 +3,8 @@ package com.yonge.audio;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.yonge.cooleshow.common.constant.AppConstant;
+import com.yonge.toolset.base.BaseApplication;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -24,28 +26,26 @@ import com.yonge.audio.config.LocalFastJsonHttpMessageConverter;
 @EnableFeignClients("com.yonge.cooleshow")
 @MapperScan(basePackages = {"com.yonge.cooleshow.biz.dal.dao", "com.yonge.toolset.payment.core.dao"})
 @ComponentScan(basePackages = {
-		"com.yonge.netty",  "com.yonge.cooleshow.auth", "com.yonge.cooleshow.biz",
-		"com.yonge.cooleshow.common", "com.yonge.cooleshow.common.security",
-		"com.yonge.toolset.thirdparty", "com.yonge.toolset.payment"
+        "com.yonge.netty", "com.yonge.cooleshow", "com.yonge.toolset"
 })
 @Configuration
 @EnableSwagger2Doc
 public class AudioAnalysisServerApplication {
 
-	public static void main(String[] args) {
-		SpringApplication.run(AudioAnalysisServerApplication.class, args);
-	}
+    public static void main(String[] args) {
+        BaseApplication.run(AppConstant.APPLICATION_AUDIO_ANALYSIS, AudioAnalysisServerApplication.class, args);
+    }
+
+    @Bean
+    @LoadBalanced
+    public RestTemplate restTemplate() {
+        return new RestTemplate();
+    }
 
-	@Bean
-	@LoadBalanced
-	public RestTemplate restTemplate() {
-		return new RestTemplate();
-	}
-	
-	@Bean
-    public HttpMessageConverters fastJsonHttpMessageConverters(){
-		LocalFastJsonHttpMessageConverter converter = new LocalFastJsonHttpMessageConverter();
-        List<MediaType> fastMediaTypes =  new ArrayList<MediaType>();
+    @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 - 1
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java

@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.PostMapping;
  * @author liujunchi
  * @date 2022-05-06
  */
-@FeignClient(name = AppConstant.APPLICATION_ADMIN_SERVER, configuration = FeignConfiguration.class,
+@FeignClient(name = AppConstant.APPLICATION_ADMIN, configuration = FeignConfiguration.class,
              fallback = AdminFeignServiceFallback.class)
 public interface AdminFeignService {
     /***

+ 1 - 1
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/CmsFeignService.java

@@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.GetMapping;
  * @date 2022-04-29
  */
 
-@FeignClient(name = AppConstant.APPLICATION_CMS_SERVER, configuration = FeignConfiguration.class, fallback = CmsFeignServiceFallback.class)
+@FeignClient(name = AppConstant.APPLICATION_CMS, configuration = FeignConfiguration.class, fallback = CmsFeignServiceFallback.class)
 public interface CmsFeignService {
 
     /**

+ 1 - 1
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/MallAdminFeignService.java

@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import java.util.List;
 import java.util.Map;
 
-@FeignClient(name = AppConstant.APPLICATION_MALL_ADMIN_SERVER, configuration = FeignConfiguration.class,
+@FeignClient(name = AppConstant.APPLICATION_MALL_ADMIN, configuration = FeignConfiguration.class,
         fallback = MallAdminFeignServiceFallback.class)
 public interface MallAdminFeignService {
 

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

@@ -6,7 +6,7 @@ import com.yonge.toolset.feign.config.FeignConfiguration;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 
-@FeignClient(name = AppConstant.APPLICATION_MALL_PORTAL_SERVER, configuration = FeignConfiguration.class,
+@FeignClient(name = AppConstant.APPLICATION_MALL_PORTAL, configuration = FeignConfiguration.class,
         fallback = MallPortalFeignServiceFallback.class)
 public interface MallPortalFeignService {
 

+ 12 - 11
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/AuthServerApplication.java

@@ -1,7 +1,8 @@
 package com.yonge.cooleshow.auth;
 
+import com.yonge.cooleshow.common.constant.AppConstant;
+import com.yonge.toolset.base.BaseApplication;
 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.client.loadbalancer.LoadBalanced;
@@ -18,19 +19,19 @@ import com.spring4all.swagger.EnableSwagger2Doc;
 @EnableDiscoveryClient
 @EnableFeignClients
 @MapperScan("com.yonge.cooleshow.auth.dal.dao")
-@ComponentScan(basePackages={"com.yonge.cooleshow", "com.yonge.toolset.log","com.yonge.toolset.thirdparty"})
+@ComponentScan(basePackages = {"com.yonge.cooleshow", "com.yonge.toolset"})
 @Configuration
 @EnableSwagger2Doc
 @EnableAsync
 public class AuthServerApplication {
 
-	public static void main(String[] args) {
-		SpringApplication.run(AuthServerApplication.class, args);
-	}
-	
-	@Bean
-	@LoadBalanced
-	public RestTemplate restTemplate(){
-		return new RestTemplate();
-	}
+    public static void main(String[] args) {
+        BaseApplication.run(AppConstant.APPLICATION_AUTH, AuthServerApplication.class, args);
+    }
+
+    @Bean
+    @LoadBalanced
+    public RestTemplate restTemplate() {
+        return new RestTemplate();
+    }
 }

+ 39 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/config/RedisConfig.java

@@ -0,0 +1,39 @@
+package com.yonge.cooleshow.bbs.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisConfig {
+    @Bean
+    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
+        //为了开发方便一般直接使用 <String, Object>
+        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
+        template.setConnectionFactory(factory);
+        //Json序列化配置
+        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+        ObjectMapper om = new ObjectMapper();
+        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+        jackson2JsonRedisSerializer.setObjectMapper(om);
+        //String 的序列化
+        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
+        // key采用String的序列化方式
+        template.setKeySerializer(stringRedisSerializer);
+        // hash的key也采用String的序列化方式
+        template.setHashKeySerializer(stringRedisSerializer);
+        // value序列化方式采用jackson
+        template.setValueSerializer(jackson2JsonRedisSerializer);
+        // hash的value序列化方式采用jackson
+        template.setHashValueSerializer(jackson2JsonRedisSerializer);
+        template.afterPropertiesSet();
+        return template;
+    }
+}

+ 64 - 57
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsArticleController.java

@@ -1,86 +1,93 @@
 package com.yonge.cooleshow.bbs.controller;
 
 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.bbs.enums.ArticleEnum;
+import com.yonge.cooleshow.bbs.valid.AddGroup;
+import com.yonge.cooleshow.bbs.valid.OtherGroup;
+import com.yonge.cooleshow.bbs.valid.UpdateGroup;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
 import com.yonge.toolset.mybatis.support.PageUtil;
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
-
 import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
 import com.yonge.cooleshow.bbs.entity.BbsArticle;
 import com.yonge.cooleshow.bbs.service.BbsArticleService;
 
+import java.util.List;
+import java.util.Map;
+
 @RestController
 @RequestMapping("/bbsArticle")
 @Api(value = "文章", tags = "文章")
 public class BbsArticleController extends BaseController {
-
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
     @Autowired
     private BbsArticleService bbsArticleService;
 
-	/**
-     * 查询单条
-     */
-    @GetMapping("/detail/{id}")
-    @ApiOperation(value = "详情", notes = "传入id")
-    public HttpResponseResult<BbsArticleVo> detail(@PathVariable("id") Long id) {
-    	return succeed(bbsArticleService.detail(id));
-	}
-    
+    @PostMapping("/addArticle")
+    @ApiOperation(value = "详情-发布文章")
+    public HttpResponseResult addArticle(@Validated(AddGroup.class) @RequestBody BbsArticle bbsArticle) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        bbsArticle.setUserId(user.getId());
+        bbsArticleService.addArticle(bbsArticle);
+        return succeed();
+    }
+
+    @PostMapping("/updateArticle")
+    @ApiOperation(value = "详情-修改文章")
+    public HttpResponseResult updateArticle(@Validated(UpdateGroup.class) @RequestBody BbsArticle bbsArticle) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        bbsArticleService.updateArticle(bbsArticle, user.getId());
+        return succeed();
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "ids", dataType = "List", value = "文章id集合"),
+    })
+    @PostMapping("/deleteArticle")
+    @ApiOperation(value = "详情-删除文章")
+    public HttpResponseResult deleteArticle(@RequestBody Map<String, List<Long>> ids) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        bbsArticleService.deleteArticle(ids, user);
+        return succeed();
+    }
+
+    @PostMapping("/top")
+    @ApiOperation(value = "后台管理-置顶文章")
+    public HttpResponseResult articleTop(@Validated(OtherGroup.class) @RequestBody BbsArticle article) {
+        bbsArticleService.articleTop(article);
+        return succeed();
+    }
+
     /**
-     * 查询分页
+     * 
      */
-    @PostMapping("/page")
-    @ApiOperation(value = "查询分页", notes = "传入bbsArticleSearch")
-    public HttpResponseResult<PageInfo<BbsArticleVo>> page(@RequestBody BbsArticleSearch query) {
-		IPage<BbsArticleVo> pages = bbsArticleService.selectPage(PageUtil.getPage(query), query);
+    @PostMapping("/home")
+    @ApiOperation(value = "首页", notes = "传入bbsArticleSearch")
+    public HttpResponseResult<PageInfo<BbsArticleVo>> home(@RequestBody BbsArticleSearch query) {
+        query.setDelFlag(false);
+        query.setStatus(ArticleEnum.PASS);
+        IPage<BbsArticleVo> pages = bbsArticleService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(pages));
-	}
-    
-    /**
-	 * 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperation(value = "新增", notes = "传入bbsArticle")
-	public HttpResponseResult save(@Valid @RequestBody BbsArticle bbsArticle) {
-    	return status(bbsArticleService.save(bbsArticle));
-	}
-    
-    /**
-	 * 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperation(value = "修改", notes = "传入bbsArticle")
-	public HttpResponseResult update(@Valid @RequestBody BbsArticle bbsArticle) {
-        return status(bbsArticleService.updateById(bbsArticle));
-	}
-    
-    /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入bbsArticle")
-	public HttpResponseResult submit(@Valid @RequestBody BbsArticle bbsArticle) {
-        return status(bbsArticleService.saveOrUpdate(bbsArticle));
     }
-
- 	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-			return failed("参数不能为空");
-		}
-		return status(bbsArticleService.removeByIds(StringUtil.toLongList(ids)));
-	}
 }

+ 49 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsAuthRecordController.java

@@ -0,0 +1,49 @@
+package com.yonge.cooleshow.bbs.controller;
+
+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.bbs.dto.search.BbsAuthRecordSearch;
+import com.yonge.cooleshow.bbs.entity.BbsAuthRecord;
+import com.yonge.cooleshow.bbs.service.BbsAuthRecordService;
+import com.yonge.cooleshow.bbs.valid.UpdateGroup;
+import com.yonge.cooleshow.bbs.vo.BbsAuthRecordVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.mybatis.support.PageUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/bbsAuthRecord")
+@Api(value = "文章审核", tags = "文章审核")
+public class BbsAuthRecordController extends BaseController {
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private BbsAuthRecordService bbsAuthRecordService;
+
+    @PostMapping("/page")
+    @ApiOperation(value = "后台管理-审核-查询文章审核列表")
+    public HttpResponseResult<PageInfo<BbsAuthRecordVo>> page(@RequestBody BbsAuthRecordSearch query) {
+        IPage<BbsAuthRecordVo> pages = bbsAuthRecordService.selectPage(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(pages));
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "后台管理-审核-修改文章审核状态")
+    public HttpResponseResult<PageInfo<BbsAuthRecordVo>> updateAuditState(@Validated(UpdateGroup.class) @RequestBody BbsAuthRecord record) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        record.setVerifyUserId(user.getId());
+        bbsAuthRecordService.updateAuditState(record);
+        return succeed();
+    }
+}

+ 12 - 9
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/controller/BbsConfigLabelController.java

@@ -11,7 +11,6 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
 import com.yonge.toolset.mybatis.support.PageUtil;
 
-import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -35,7 +34,7 @@ public class BbsConfigLabelController extends BaseController {
     private BbsConfigLabelService bbsConfigLabelService;
 
     @ApiOperation(value = "查询全部")
-    @PostMapping("/selectAll")
+    @GetMapping("/selectAll")
     public HttpResponseResult<List<BbsConfigLabel>> selectAll(Integer delFlag) {
         return succeed(bbsConfigLabelService.selectAll(delFlag));
     }
@@ -55,7 +54,8 @@ public class BbsConfigLabelController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         bbsConfigLabel.setCreateBy(user.getId());
-        return status(bbsConfigLabelService.save(bbsConfigLabel));
+        bbsConfigLabelService.save(bbsConfigLabel);
+        return succeed();
     }
 
     @ApiOperation(value = "修改")
@@ -66,15 +66,18 @@ public class BbsConfigLabelController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         bbsConfigLabel.setUpdateBy(user.getId());
-        return status(bbsConfigLabelService.updateById(bbsConfigLabel));
+        bbsConfigLabelService.updateById(bbsConfigLabel);
+        return succeed();
     }
 
-    @ApiOperation(value = "逻辑删除", notes = "传入ids")
+    @ApiOperation(value = "逻辑删除")
     @PostMapping("/remove")
-    public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-            return failed("参数不能为空");
+    public HttpResponseResult remove(@Validated @RequestBody BbsConfigLabelSearch query) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return status(bbsConfigLabelService.removeByIds(StringUtil.toLongList(ids)));
+        bbsConfigLabelService.updateFlagByIds(query, user.getId());
+        return succeed();
     }
 }

+ 18 - 13
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsArticleDao.java

@@ -9,22 +9,27 @@ import com.yonge.cooleshow.bbs.entity.BbsArticle;
 import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
 
+public interface BbsArticleDao extends BaseMapper<BbsArticle> {
+    /**
+     * 发布文章
+     *
+     * @param bbsArticle
+     */
+    void addArticle(BbsArticle bbsArticle);
 
-public interface BbsArticleDao extends BaseMapper<BbsArticle>{
-	/**
-	 * 查询详情
-     * @author liweifan
-     * @date 2022-06-09 17:27:11
-     * @return: com.yonge.cooleshow.bbs.vo.BbsArticleVo
-	 */
-	BbsArticleVo detail(@Param("id") Long id);
+    /**
+     * 删除文章
+     *
+     * @param list
+     */
+    void deleteArticle(List<Long> list);
 
-	/**
-	 * 分页查询
+    /**
+     * 分页查询
+     *
      * @author liweifan
      * @date 2022-06-09 17:27:11
      * @return: com.yonge.cooleshow.bbs.vo.BbsArticleVo
-	 */
-	List<BbsArticleVo> selectPage(@Param("page") IPage page, @Param("param") BbsArticleSearch bbsArticle);
-	
+     */
+    List<BbsArticleVo> selectPage(@Param("page") IPage page, @Param("param") BbsArticleSearch bbsArticle);
 }

+ 21 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsAuthRecordDao.java

@@ -0,0 +1,21 @@
+package com.yonge.cooleshow.bbs.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.bbs.dto.search.BbsAuthRecordSearch;
+import com.yonge.cooleshow.bbs.entity.BbsAuthRecord;
+import com.yonge.cooleshow.bbs.vo.BbsAuthRecordVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface BbsAuthRecordDao extends BaseMapper<BbsAuthRecord> {
+    /**
+     * 查询文章审核列表
+     *
+     * @param page
+     * @param bbsArticle
+     * @return
+     */
+    List<BbsAuthRecordVo> selectPage(@Param("page") IPage page, @Param("param") BbsAuthRecordSearch bbsArticle);
+}

+ 8 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dao/BbsConfigLabelDao.java

@@ -35,4 +35,12 @@ public interface BbsConfigLabelDao extends BaseMapper<BbsConfigLabel> {
      * @return
      */
     List<BbsConfigLabel> selectAll(Integer delFlag);
+
+    /**
+     * 逻辑删除
+     *
+     * @param query
+     * @param userId
+     */
+    void updateFlagByIds(@Param("param") BbsConfigLabelSearch query, @Param("userId") Long userId);
 }

+ 71 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dto/search/BbsArticleSearch.java

@@ -1,7 +1,9 @@
 package com.yonge.cooleshow.bbs.dto.search;
 
+import com.yonge.cooleshow.bbs.enums.ArticleEnum;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 
 /**
  * @Author: liweifan
@@ -11,4 +13,73 @@ import io.swagger.annotations.ApiModel;
 public class BbsArticleSearch extends QueryInfo{
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty("标题搜索")
+	private String search;
+
+	@ApiModelProperty("标签id")
+	private Long  label;
+
+	@ApiModelProperty("排序方式 NEW:最新,HOT:最热")
+	private String  sort;
+
+	@ApiModelProperty(value = "用户id",hidden = true)
+	private Long userId;
+
+	@ApiModelProperty("草稿:DRAFT,审核中:DOING,通过:PASS,驳回:REJECT")
+	private ArticleEnum status;
+
+	@ApiModelProperty("0:正常 1:删除")
+	private Boolean delFlag;
+
+	@Override
+	public String getSearch() {
+		return search;
+	}
+
+	@Override
+	public void setSearch(String search) {
+		this.search = search;
+	}
+
+	public Long getLabel() {
+		return label;
+	}
+
+	public void setLabel(Long label) {
+		this.label = label;
+	}
+
+	@Override
+	public String getSort() {
+		return sort;
+	}
+
+	@Override
+	public void setSort(String sort) {
+		this.sort = sort;
+	}
+
+	public Long getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+
+	public ArticleEnum getStatus() {
+		return status;
+	}
+
+	public void setStatus(ArticleEnum status) {
+		this.status = status;
+	}
+
+	public Boolean getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(Boolean delFlag) {
+		this.delFlag = delFlag;
+	}
 }

+ 85 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dto/search/BbsAuthRecordSearch.java

@@ -0,0 +1,85 @@
+package com.yonge.cooleshow.bbs.dto.search;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.bbs.enums.ArticleEnum;
+import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@ApiModel
+public class BbsAuthRecordSearch extends QueryInfo {
+    @ApiModelProperty(value = "用户名/手机号/文章标题")
+    private String search;
+
+    @ApiModelProperty(value = "标签id")
+    private Long labelId;
+
+    @ApiModelProperty(value = "审核中:DOING,通过:PASS,驳回:REJECT")
+    private ArticleEnum auditState;
+
+    @ApiModelProperty("0:正常 1:删除")
+    private Boolean delFlag;
+
+    @ApiModelProperty(value = "开始时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty(value = "结束时间")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+
+    @Override
+    public String getSearch() {
+        return search;
+    }
+
+    @Override
+    public void setSearch(String search) {
+        this.search = search;
+    }
+
+    public Long getLabelId() {
+        return labelId;
+    }
+
+    public void setLabelId(Long labelId) {
+        this.labelId = labelId;
+    }
+
+    public ArticleEnum getAuditState() {
+        return auditState;
+    }
+
+    public void setAuditState(ArticleEnum auditState) {
+        this.auditState = auditState;
+    }
+
+    public Boolean getDelFlag() {
+        return delFlag;
+    }
+
+    public void setDelFlag(Boolean delFlag) {
+        this.delFlag = delFlag;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+}

+ 27 - 10
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/dto/search/BbsConfigLabelSearch.java

@@ -4,22 +4,39 @@ import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.List;
+
 /**
  * @Author: liweifan
  * @Data: 2022-06-09 17:27:11
  */
 @ApiModel(value = "BbsConfigLabelSearch对象", description = "论坛标签设置查询对象")
-public class BbsConfigLabelSearch extends QueryInfo{
-	private static final long serialVersionUID = 1L;
+public class BbsConfigLabelSearch extends QueryInfo {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("0:正常 1:删除")
+    private Integer delFlag;
+
+    @ApiModelProperty("标签id集合")
+    @NotNull(message = "ids不能为空")
+    @Size(min = 1, message = "ids不能为空")
+    private List<Integer> ids;
+
+    public List<Integer> getIds() {
+        return ids;
+    }
 
-	@ApiModelProperty("0:正常 1:删除")
-	private Integer delFlag;
+    public void setIds(List<Integer> ids) {
+        this.ids = ids;
+    }
 
-	public Integer getDelFlag() {
-		return delFlag;
-	}
+    public Integer getDelFlag() {
+        return delFlag;
+    }
 
-	public void setDelFlag(Integer delFlag) {
-		this.delFlag = delFlag;
-	}
+    public void setDelFlag(Integer delFlag) {
+        this.delFlag = delFlag;
+    }
 }

+ 24 - 12
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsArticle.java

@@ -4,6 +4,11 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.yonge.cooleshow.bbs.enums.ArticleEnum;
+import com.yonge.cooleshow.bbs.enums.YesOrNoEnum;
+import com.yonge.cooleshow.bbs.valid.AddGroup;
+import com.yonge.cooleshow.bbs.valid.OtherGroup;
+import com.yonge.cooleshow.bbs.valid.UpdateGroup;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -13,6 +18,9 @@ import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
 /**
  * 文章
  */
@@ -22,6 +30,7 @@ public class BbsArticle implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(value = "id_", type = IdType.AUTO)
+    @NotNull(groups = {UpdateGroup.class,OtherGroup.class}, message = "文章id不能为空")
     private Long id;
 
     @ApiModelProperty("发布者id")
@@ -30,14 +39,17 @@ public class BbsArticle implements Serializable {
 
     @ApiModelProperty("文章标题")
     @TableField(value = "title_")
+    @NotBlank(groups = {AddGroup.class}, message = "标题不能为空")
     private String title;
 
     @ApiModelProperty("文章内容")
     @TableField(value = "content_")
+    @NotBlank(groups = {AddGroup.class}, message = "内容不能为空")
     private String content;
 
     @ApiModelProperty("标签id")
     @TableField(value = "label_id_")
+    @NotNull(groups = {AddGroup.class}, message = "标签id不能为空")
     private Integer labelId;
 
     @ApiModelProperty("标签名称(冗余字段)")
@@ -62,15 +74,15 @@ public class BbsArticle implements Serializable {
 
     @ApiModelProperty("草稿:DRAFT,审核中:DOING,通过:PASS,驳回:REJECT")
     @TableField(value = "status_")
-    private String status;
+    private ArticleEnum status;
 
     @ApiModelProperty("是否置顶 0:未置顶 1:置顶")
     @TableField(value = "top_flag_")
-    private Integer topFlag;
+    private YesOrNoEnum topFlag;
 
     @ApiModelProperty("是否可评论 0:不可评论 1:可评论")
     @TableField(value = "reply_flag_")
-    private Integer replyFlag;
+    private YesOrNoEnum replyFlag;
 
     @ApiModelProperty("审核通过时间")
     @TableField(value = "examine_time_")
@@ -90,7 +102,7 @@ public class BbsArticle implements Serializable {
 
     @ApiModelProperty("0:正常 1:删除")
     @TableField(value = "del_flag_")
-    private Integer delFlag;
+    private Boolean delFlag;
 
     public Long getId() {
         return id;
@@ -172,27 +184,27 @@ public class BbsArticle implements Serializable {
         this.collectsCount = collectsCount;
     }
 
-    public String getStatus() {
+    public ArticleEnum getStatus() {
         return status;
     }
 
-    public void setStatus(String status) {
+    public void setStatus(ArticleEnum status) {
         this.status = status;
     }
 
-    public Integer getTopFlag() {
+    public YesOrNoEnum getTopFlag() {
         return topFlag;
     }
 
-    public void setTopFlag(Integer topFlag) {
+    public void setTopFlag(YesOrNoEnum topFlag) {
         this.topFlag = topFlag;
     }
 
-    public Integer getReplyFlag() {
+    public YesOrNoEnum getReplyFlag() {
         return replyFlag;
     }
 
-    public void setReplyFlag(Integer replyFlag) {
+    public void setReplyFlag(YesOrNoEnum replyFlag) {
         this.replyFlag = replyFlag;
     }
 
@@ -220,11 +232,11 @@ public class BbsArticle implements Serializable {
         this.updatedTime = updatedTime;
     }
 
-    public Integer getDelFlag() {
+    public Boolean getDelFlag() {
         return delFlag;
     }
 
-    public void setDelFlag(Integer delFlag) {
+    public void setDelFlag(Boolean delFlag) {
         this.delFlag = delFlag;
     }
 }

+ 109 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsAuthRecord.java

@@ -0,0 +1,109 @@
+package com.yonge.cooleshow.bbs.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.bbs.enums.ArticleEnum;
+import com.yonge.cooleshow.bbs.valid.UpdateGroup;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("bbs_auth_record")
+@ApiModel(value = "BbsAuthRecord对象", description = "文章审核表")
+public class BbsAuthRecord implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("文章id")
+    @TableField(value = "article_id_")
+    @NotNull(groups = {UpdateGroup.class}, message = "文章id不能为空")
+    private Long articleId;
+
+    @ApiModelProperty("审核者id")
+    @TableField(value = "verify_user_id_")
+    private Long verifyUserId;
+
+    @ApiModelProperty("审核中:DOING,通过:PASS,驳回:REJECT")
+    @TableField(value = "audit_state_")
+    @NotNull(groups = {UpdateGroup.class}, message = "审核状态不能为空")
+    private ArticleEnum auditState;
+
+    @ApiModelProperty("审核理由")
+    @TableField(value = "reason_")
+    @NotBlank(groups = {UpdateGroup.class}, message = "审核理由不能为空")
+    private String reason;
+
+    @TableField(value = "created_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @TableField(value = "updated_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getArticleId() {
+        return articleId;
+    }
+
+    public void setArticleId(Long articleId) {
+        this.articleId = articleId;
+    }
+
+    public Long getVerifyUserId() {
+        return verifyUserId;
+    }
+
+    public void setVerifyUserId(Long verifyUserId) {
+        this.verifyUserId = verifyUserId;
+    }
+
+    public ArticleEnum getAuditState() {
+        return auditState;
+    }
+
+    public void setAuditState(ArticleEnum auditState) {
+        this.auditState = auditState;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public Date getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(Date createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    public Date getUpdatedTime() {
+        return updatedTime;
+    }
+
+    public void setUpdatedTime(Date updatedTime) {
+        this.updatedTime = updatedTime;
+    }
+}

+ 3 - 3
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsConfigLabel.java

@@ -55,7 +55,7 @@ public class BbsConfigLabel implements Serializable {
 
     @ApiModelProperty("0:正常 1:删除")
     @TableField(value = "del_flag_")
-    private Integer delFlag;
+    private Boolean delFlag;
 
     public Long getId() {
         return id;
@@ -105,11 +105,11 @@ public class BbsConfigLabel implements Serializable {
         this.updatedTime = updatedTime;
     }
 
-    public Integer getDelFlag() {
+    public Boolean getDelFlag() {
         return delFlag;
     }
 
-    public void setDelFlag(Integer delFlag) {
+    public void setDelFlag(Boolean delFlag) {
         this.delFlag = delFlag;
     }
 }

+ 4 - 3
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/entity/BbsReply.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.yonge.cooleshow.bbs.enums.ArticleEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -42,7 +43,7 @@ public class BbsReply implements Serializable {
 
     @ApiModelProperty("审核中:DOING,通过:PASS,驳回:REJECT")
     @TableField(value = "status_")
-    private String status;
+    private ArticleEnum status;
 
     @ApiModelProperty("评论日期 ")
     @TableField(value = "created_time_")
@@ -95,11 +96,11 @@ public class BbsReply implements Serializable {
         this.content = content;
     }
 
-    public String getStatus() {
+    public ArticleEnum getStatus() {
         return status;
     }
 
-    public void setStatus(String status) {
+    public void setStatus(ArticleEnum status) {
         this.status = status;
     }
 

+ 29 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/enums/ArticleEnum.java

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.bbs.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+public enum ArticleEnum implements BaseEnum<String, ArticleEnum> {
+    DRAFT("草稿"),
+    DOING("审核中"),
+    PASS("通过"),
+    REJECT("驳回");
+
+    @EnumValue
+    private String code;
+
+    private String msg;
+
+    ArticleEnum(String msg) {
+        this.code = this.name();
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getMsg() {
+        return this.msg;
+    }
+}

+ 26 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/enums/YesOrNoEnum.java

@@ -0,0 +1,26 @@
+package com.yonge.cooleshow.bbs.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+public enum YesOrNoEnum implements BaseEnum<Integer, YesOrNoEnum> {
+    NO(0, "否"),
+    YES(1, "是");
+    @EnumValue
+    private Integer code;
+    private String msg;
+
+    YesOrNoEnum(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getMsg() {
+        return this.msg;
+    }
+
+    @Override
+    public Integer getCode() {
+        return this.code;
+    }
+}

+ 34 - 7
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsArticleService.java

@@ -2,28 +2,55 @@ package com.yonge.cooleshow.bbs.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
 import com.yonge.cooleshow.bbs.entity.BbsArticle;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * 文章 服务类
+ *
  * @author liweifan
  * @date 2022-06-09
  */
-public interface BbsArticleService extends IService<BbsArticle>  {
+public interface BbsArticleService extends IService<BbsArticle> {
+    /**
+     * 详情-发布文章
+     *
+     * @param bbsArticle
+     */
+    void addArticle(BbsArticle bbsArticle);
 
-	/**
-     * 查询详情
-     * @author liweifan
- 	 * @date 2022-06-09
+    /**
+     * 详情-修改文章
+     *
+     * @param bbsArticle
+     */
+    void updateArticle(BbsArticle bbsArticle, Long userId);
+
+    /**
+     * 详情-删除文章
+     *
+     * @param ids
+     * @param user
+     */
+    void deleteArticle(Map<String, List<Long>> ids, SysUser user);
+
+    /**
+     * 后台管理-置顶文章
+     *
+     * @param article
      */
-	BbsArticleVo detail(Long id);
+    void articleTop(BbsArticle article);
 
     /**
      * 分页查询
+     *
      * @author liweifan
- 	 * @date 2022-06-09
+     * @date 2022-06-09
      */
     IPage<BbsArticleVo> selectPage(IPage<BbsArticleVo> page, BbsArticleSearch query);
 }

+ 25 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsAuthRecordService.java

@@ -0,0 +1,25 @@
+package com.yonge.cooleshow.bbs.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.bbs.dto.search.BbsAuthRecordSearch;
+import com.yonge.cooleshow.bbs.entity.BbsAuthRecord;
+import com.yonge.cooleshow.bbs.vo.BbsAuthRecordVo;
+
+public interface BbsAuthRecordService extends IService<BbsAuthRecord> {
+    /**
+     * 后台管理-审核-查询文章审核列表
+     *
+     * @param page
+     * @param query
+     * @return
+     */
+    IPage<BbsAuthRecordVo> selectPage(IPage<BbsAuthRecordVo> page, BbsAuthRecordSearch query);
+
+    /**
+     * 后台管理-审核-修改文章审核状态
+     *
+     * @param record
+     */
+    void updateAuditState(BbsAuthRecord record);
+}

+ 8 - 1
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/BbsConfigLabelService.java

@@ -15,7 +15,6 @@ import java.util.List;
  * @date 2022-06-09
  */
 public interface BbsConfigLabelService extends IService<BbsConfigLabel> {
-
     /**
      * 查询详情
      *
@@ -39,4 +38,12 @@ public interface BbsConfigLabelService extends IService<BbsConfigLabel> {
      * @return
      */
     List<BbsConfigLabel> selectAll(Integer delFlag);
+
+    /**
+     * 逻辑删除
+     *
+     * @param query
+     * @param userId
+     */
+    void updateFlagByIds(BbsConfigLabelSearch query, Long userId);
 }

+ 118 - 7
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsArticleServiceImpl.java

@@ -1,7 +1,17 @@
 package com.yonge.cooleshow.bbs.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.bbs.dao.BbsAuthRecordDao;
+import com.yonge.cooleshow.bbs.entity.BbsAuthRecord;
+import com.yonge.cooleshow.bbs.enums.ArticleEnum;
+import com.yonge.cooleshow.bbs.enums.YesOrNoEnum;
+import com.yonge.toolset.base.exception.BizException;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -10,20 +20,121 @@ import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
 import com.yonge.cooleshow.bbs.dao.BbsArticleDao;
 import com.yonge.cooleshow.bbs.service.BbsArticleService;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class BbsArticleServiceImpl extends ServiceImpl<BbsArticleDao, BbsArticle> implements BbsArticleService {
     private final static Logger log = LoggerFactory.getLogger(BbsArticleServiceImpl.class);
 
-	@Override
-    public BbsArticleVo detail(Long id) {
-        return baseMapper.detail(id);
+    @Autowired
+    private BbsAuthRecordDao authRecordDao;
+
+    /**
+     * @Description: 详情-发布文章
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void addArticle(BbsArticle bbsArticle) {
+        //状态为null,默认审核中,否则为草稿
+        if (bbsArticle.getStatus() == null) {
+            bbsArticle.setStatus(ArticleEnum.DOING);
+            baseMapper.addArticle(bbsArticle);
+
+            //新增审核记录
+            BbsAuthRecord authRecord = new BbsAuthRecord();
+            authRecord.setVerifyUserId(bbsArticle.getUserId());
+            authRecord.setArticleId(bbsArticle.getId());
+            authRecord.setAuditState(ArticleEnum.DOING);
+            authRecordDao.insert(authRecord);
+        } else {
+            bbsArticle.setStatus(ArticleEnum.DRAFT);
+            baseMapper.addArticle(bbsArticle);
+        }
+    }
+
+    /**
+     * @Description: 详情-修改文章
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateArticle(BbsArticle bbsArticle, Long userId) {
+        BbsArticle article = baseMapper.selectById(bbsArticle.getId());
+        if (article == null) {
+            throw new BizException("文章不存在");
+        }
+        if (!userId.equals(article.getUserId())) {
+            throw new BizException("只能修改自己的文章");
+        }
+
+        bbsArticle.setStatus(ArticleEnum.DOING);
+        baseMapper.updateById(bbsArticle);
+
+        //删除原审核记录
+        authRecordDao.delete(Wrappers.<BbsAuthRecord>lambdaQuery()
+                .eq(BbsAuthRecord::getArticleId, bbsArticle.getId())
+                .eq(BbsAuthRecord::getAuditState, ArticleEnum.DOING));
+
+        //新增审核记录
+        BbsAuthRecord authRecord = new BbsAuthRecord();
+        authRecord.setVerifyUserId(bbsArticle.getUserId());
+        authRecord.setArticleId(bbsArticle.getId());
+        authRecord.setAuditState(ArticleEnum.DOING);
+        authRecordDao.insert(authRecord);
     }
-    
-     @Override
-    public IPage<BbsArticleVo> selectPage(IPage<BbsArticleVo> page, BbsArticleSearch query){
+
+    /**
+     * @Description: 详情-删除文章
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteArticle(Map<String, List<Long>> ids, SysUser user) {
+        List<Long> list = ids.get("ids");
+        if (CollectionUtils.isEmpty(list)) {
+            throw new BizException("文章id不能为空");
+        }
+
+        //当前用户为管理员
+        if (user.getUserType().contains(SysUserType.SYSTEM.getCode())) {
+            baseMapper.deleteArticle(list);
+        } else {
+            List<BbsArticle> articles = baseMapper.selectBatchIds(list);
+            List<Long> idList = articles.stream().map(BbsArticle::getUserId).distinct().collect(Collectors.toList());
+            if (idList.size() != 1 || !user.getId().equals(idList.get(0))) {
+                throw new BizException("无法删除他人文章");
+            }
+            baseMapper.deleteArticle(list);
+        }
+    }
+
+    /**
+     * @Description: 后台管理-置顶文章
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void articleTop(BbsArticle article) {
+        BbsArticle bbsArticle = baseMapper.selectById(article.getId());
+        YesOrNoEnum topFlag = bbsArticle.getTopFlag();
+        if (topFlag.getCode() == 0) {
+            article.setTopFlag(YesOrNoEnum.YES);//未置顶 -> 置顶
+        } else {
+            article.setTopFlag(YesOrNoEnum.NO);//置顶 -> 未置顶
+        }
+        baseMapper.updateById(article);
+    }
+
+    @Override
+    public IPage<BbsArticleVo> selectPage(IPage<BbsArticleVo> page, BbsArticleSearch query) {
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
 }

+ 49 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsAuthRecordServiceImpl.java

@@ -0,0 +1,49 @@
+package com.yonge.cooleshow.bbs.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.bbs.dao.BbsArticleDao;
+import com.yonge.cooleshow.bbs.dao.BbsAuthRecordDao;
+import com.yonge.cooleshow.bbs.dto.search.BbsAuthRecordSearch;
+import com.yonge.cooleshow.bbs.entity.BbsArticle;
+import com.yonge.cooleshow.bbs.entity.BbsAuthRecord;
+import com.yonge.cooleshow.bbs.service.BbsAuthRecordService;
+import com.yonge.cooleshow.bbs.vo.BbsAuthRecordVo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class BbsAuthRecordServiceImpl extends ServiceImpl<BbsAuthRecordDao, BbsAuthRecord> implements BbsAuthRecordService {
+    private final static Logger log = LoggerFactory.getLogger(BbsAuthRecordServiceImpl.class);
+
+    @Autowired
+    private BbsArticleDao bbsArticleDao;
+
+    /**
+     * @Description: 后台管理-审核-查询文章审核列表
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
+    @Override
+    public IPage<BbsAuthRecordVo> selectPage(IPage<BbsAuthRecordVo> page, BbsAuthRecordSearch query) {
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+
+    /**
+     * @Description: 后台管理-审核-修改文章审核状态
+     * @Author: cy
+     * @Date: 2022/6/11
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateAuditState(BbsAuthRecord record) {
+        bbsArticleDao.update(null, Wrappers.<BbsArticle>lambdaUpdate()
+                .eq(BbsArticle::getId, record.getArticleId())
+                .set(BbsArticle::getStatus, record.getAuditState()));
+        baseMapper.insert(record);
+    }
+}

+ 5 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsConfigLabelServiceImpl.java

@@ -31,4 +31,9 @@ public class BbsConfigLabelServiceImpl extends ServiceImpl<BbsConfigLabelDao, Bb
     public List<BbsConfigLabel> selectAll(Integer delFlag) {
         return baseMapper.selectAll(delFlag);
     }
+
+    @Override
+    public void updateFlagByIds(BbsConfigLabelSearch query, Long userId) {
+        baseMapper.updateFlagByIds(query, userId);
+    }
 }

+ 8 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/valid/OtherGroup.java

@@ -0,0 +1,8 @@
+package com.yonge.cooleshow.bbs.valid;
+
+/**
+ * @author: cy
+ * @date: 2022/3/31 09:54
+ */
+public interface OtherGroup {
+}

+ 166 - 0
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/vo/BbsAuthRecordVo.java

@@ -0,0 +1,166 @@
+package com.yonge.cooleshow.bbs.vo;
+
+import com.yonge.cooleshow.bbs.enums.ArticleEnum;
+import com.yonge.cooleshow.bbs.enums.YesOrNoEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@ApiModel
+public class BbsAuthRecordVo implements Serializable {
+    @ApiModelProperty("文章id")
+    private Long articleId;
+
+    @ApiModelProperty("文章标题")
+    private String title;
+
+    @ApiModelProperty("发布者id")
+    private Long userId;
+
+    @ApiModelProperty("发布者昵称")
+    private String userName;
+
+    @ApiModelProperty("发布者真实姓名")
+    private String realName;
+
+    @ApiModelProperty("发布者手机号")
+    private String phone;
+
+    @ApiModelProperty("标签id")
+    private Long labelId;
+
+    @ApiModelProperty("标签名")
+    private String labelName;
+
+    @ApiModelProperty("是否可评论 0:不可评论 1:可评论")
+    private YesOrNoEnum replyFlag;
+
+    @ApiModelProperty("文章发布时间")
+    private Date articleCreatedTime;
+
+    @ApiModelProperty("审核状态 审核中:DOING,通过:PASS,驳回:REJECT")
+    private ArticleEnum auditState;
+
+    @ApiModelProperty("审核理由")
+    private String reason;
+
+    @ApiModelProperty("审核时间")
+    private Date createdTime;
+
+    @ApiModelProperty("审核更新时间")
+    private Date updatedTime;
+
+    public Long getArticleId() {
+        return articleId;
+    }
+
+    public void setArticleId(Long articleId) {
+        this.articleId = articleId;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public Long getLabelId() {
+        return labelId;
+    }
+
+    public void setLabelId(Long labelId) {
+        this.labelId = labelId;
+    }
+
+    public String getLabelName() {
+        return labelName;
+    }
+
+    public void setLabelName(String labelName) {
+        this.labelName = labelName;
+    }
+
+    public YesOrNoEnum getReplyFlag() {
+        return replyFlag;
+    }
+
+    public void setReplyFlag(YesOrNoEnum replyFlag) {
+        this.replyFlag = replyFlag;
+    }
+
+    public Date getArticleCreatedTime() {
+        return articleCreatedTime;
+    }
+
+    public void setArticleCreatedTime(Date articleCreatedTime) {
+        this.articleCreatedTime = articleCreatedTime;
+    }
+
+    public ArticleEnum getAuditState() {
+        return auditState;
+    }
+
+    public void setAuditState(ArticleEnum auditState) {
+        this.auditState = auditState;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public Date getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(Date createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    public Date getUpdatedTime() {
+        return updatedTime;
+    }
+
+    public void setUpdatedTime(Date updatedTime) {
+        this.updatedTime = updatedTime;
+    }
+}

+ 1 - 1
cooleshow-bbs/src/main/resources/bootstrap-dev.yml

@@ -9,4 +9,4 @@ spring:
         file-extension: yaml
         refresh:
           enabled: true
-        enabled: true
+        enabled: true

+ 42 - 11
cooleshow-bbs/src/main/resources/config/mybatis/BbsArticleMapper.xml

@@ -19,8 +19,8 @@
 	        <result column="created_time_" property="createdTime" />
 	        <result column="updated_time_" property="updatedTime" />
 	        <result column="del_flag_" property="delFlag" />
-		</resultMap>  
-    
+		</resultMap>
+
     <!-- 表字段 -->
     <sql id="baseColumns">
          t.id_ as id
@@ -40,18 +40,49 @@
         , t.created_time_ as createdTime
         , t.updated_time_ as updatedTime
         , t.del_flag_ as delFlag
-        </sql> 
-    
-    <select id="detail" resultType="com.yonge.cooleshow.bbs.vo.BbsArticleVo">
-        SELECT
-            <include refid="baseColumns"/>
-        FROM bbs_article t
-        where t.id_ = #{id}
-    </select>
-    
+        </sql>
+
+    <insert id="addArticle" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+        INSERT INTO bbs_article
+        (user_id_,title_,content_,label_id_,label_name_,status_,reply_flag_)
+        VALUES(#{userId},#{title},#{content},#{labelId},#{labelName},#{status},#{replyFlag})
+    </insert>
+    <update id="deleteArticle" parameterType="java.util.List">
+        UPDATE bbs_article SET del_flag_=1 WHERE id_ IN
+        <foreach collection="list" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </update>
     <select id="selectPage" resultType="com.yonge.cooleshow.bbs.vo.BbsArticleVo">
 		SELECT         
         	<include refid="baseColumns" />
 		FROM bbs_article t
+        <where>
+            <if test="param.status != null and param.status != ''">
+                and #{param.status,jdbcType=VARCHAR} = t.status_
+            </if>
+            <if test="param.search != null and param.search != ''">
+                and t.title_ like  concat('%',#{param.search},'%')
+            </if>
+            <if test="param.label != null">
+                and t.label_id_ = #{param.label,jdbcType=BIGINT}
+            </if>
+            <if test="param.userId != null" >
+                and t.user_id_ = #{param.userId}
+            </if>
+            <if test="param.delFlag != null" >
+                and t.del_flag_ = #{param.delFlag}
+            </if>
+        </where>
+        order by
+            <if test="param.sort != null">
+                <choose>
+                    <when test="param.sort == 'HOT'">
+                        t.comments_count_ desc,
+                    </when>
+                </choose>
+            </if>
+
+        t.created_time_ desc
 	</select>
 </mapper>

+ 48 - 0
cooleshow-bbs/src/main/resources/config/mybatis/BbsAuthRecordMapper.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.yonge.cooleshow.bbs.dao.BbsAuthRecordDao">
+    <select id="selectPage" resultType="com.yonge.cooleshow.bbs.vo.BbsAuthRecordVo">
+        SELECT
+        a.id_ AS articleId,
+        a.title_ AS title,
+        a.user_id_ AS userId,
+        u.username_ AS userName,
+        u.real_name_ AS realName,
+        u.phone_ AS phone,
+        a.label_id_ AS labelId,
+        l.label_name_ AS labelName,
+        a.reply_flag_ AS replyFlag,
+        a.created_time_ AS articleCreatedTime,
+        r.audit_state_ AS auditState,
+        r.reason_ AS reason,
+        r.create_time_ AS createdTime,
+        r.update_time_ AS updatedTime
+        FROM bbs_article a
+        LEFT JOIN sys_user u ON a.user_id_ = u.id_
+        LEFT JOIN bbs_auth_record r ON a.id_=r.article_id_
+        LEFT JOIN bbs_config_label l ON a.label_id_ = l.id_
+        WHERE a.status_ IN ('DOING','PASS','REJECT')
+        <if test="null != param.search and '' != param.search">
+            AND (
+            u.username_ LIKE CONCAT('%', #{param.search}, '%') OR
+            u.phone_ LIKE CONCAT('%', #{param.search}, '%') OR
+            a.title_ LIKE CONCAT('%', #{param.search}, '%')
+            )
+        </if>
+        <if test="param.labelId !=null">
+            AND a.label_id_ = #{param.labelId}
+        </if>
+        <if test="param.auditState !=null">
+            AND r.audit_state_ = #{param.auditState}
+        </if>
+        <if test="param.delFlag !=null">
+            AND a.del_flag_ = #{param.delFlag}
+        </if>
+        <if test="param.startTime !=null">
+            <![CDATA[AND a.created_time_ >= #{param.startTime} ]]>
+        </if>
+        <if test="param.endTime !=null">
+            <![CDATA[AND a.created_time_ <= #{param.endTime} ]]>
+        </if>
+    </select>
+</mapper>

+ 28 - 20
cooleshow-bbs/src/main/resources/config/mybatis/BbsConfigLabelMapper.xml

@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.yonge.cooleshow.bbs.dao.BbsConfigLabelDao">
-	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.bbs.entity.BbsConfigLabel">
-            <result column="id_" property="id" />
-	        <result column="label_name_" property="labelName" />
-	        <result column="create_by_" property="createBy" />
-	        <result column="update_by_" property="updateBy" />
-	        <result column="created_time_" property="createdTime" />
-	        <result column="updated_time_" property="updatedTime" />
-	        <result column="del_flag_" property="delFlag" />
-		</resultMap>  
-    
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.bbs.entity.BbsConfigLabel">
+        <result column="id_" property="id"/>
+        <result column="label_name_" property="labelName"/>
+        <result column="create_by_" property="createBy"/>
+        <result column="update_by_" property="updateBy"/>
+        <result column="created_time_" property="createdTime"/>
+        <result column="updated_time_" property="updatedTime"/>
+        <result column="del_flag_" property="delFlag"/>
+    </resultMap>
+
     <!-- 表字段 -->
     <sql id="baseColumns">
          t.id_ as id
@@ -20,32 +20,40 @@
         , t.created_time_ as createdTime
         , t.updated_time_ as updatedTime
         , t.del_flag_ as delFlag
-        </sql> 
-    
+    </sql>
+
     <select id="detail" resultType="com.yonge.cooleshow.bbs.vo.BbsConfigLabelVo">
         SELECT
-            <include refid="baseColumns"/>
+        <include refid="baseColumns"/>
         FROM bbs_config_label t
         where t.id_ = #{id}
     </select>
     <select id="selectPage" resultType="com.yonge.cooleshow.bbs.vo.BbsConfigLabelVo">
-		SELECT         
-        	<include refid="baseColumns" />
-		FROM bbs_config_label t
+        SELECT
+        <include refid="baseColumns"/>
+        FROM bbs_config_label t
         <where>
             <if test="param.delFlag != null">
                 t.del_flag_ = #{param.delFlag}
             </if>
         </where>
-	</select>
+    </select>
     <select id="selectAll" resultType="com.yonge.cooleshow.bbs.entity.BbsConfigLabel">
         SELECT
-        <include refid="baseColumns" />
+        <include refid="baseColumns"/>
         FROM bbs_config_label t
         <where>
-            <if test="delFlag != null">
-                t.del_flag_ = #{delFlag}
+            <if test="_parameter != null">
+                AND t.del_flag_ = #{delFlag}
             </if>
         </where>
     </select>
+    <update id="updateFlagByIds">
+        UPDATE bbs_config_label
+        SET del_flag_ = 1
+        WHERE id_ IN
+        <foreach collection="param.ids" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </update>
 </mapper>

+ 14 - 10
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/AppConstant.java

@@ -8,42 +8,46 @@ public interface AppConstant {
     /**
      * 网关
      */
-    String APPLICATION_GATEWAY_WEB_SERVER = "gateway-web-server";
+    String APPLICATION_GATEWAY_WEB = "gateway-web";
     /**
      * 鉴权
      */
-    String APPLICATION_AUTH_SERVER = "auth-server";
+    String APPLICATION_AUTH = "auth";
     /**
      * 定时任务
      */
-    String APPLICATION_TASK_SERVER = "task-server";
+    String APPLICATION_TASK = "task";
     /**
      * 管理端
      */
-    String APPLICATION_ADMIN_SERVER = "admin-server";
+    String APPLICATION_ADMIN = "admin";
     /**
      * 老师端
      */
-    String APPLICATION_TEACHER_SERVER = "teacher-server";
+    String APPLICATION_TEACHER = "teacher";
     /**
      * 学生端
      */
-    String APPLICATION_STUDENT_SERVER = "student-server";
+    String APPLICATION_STUDENT = "student";
     /**
      * CMS
      */
-    String APPLICATION_CMS_SERVER= "cms-server";
+    String APPLICATION_CMS= "cms";
     /**
      * 商城管理端
      */
-    String APPLICATION_MALL_ADMIN_SERVER = "mall-admin-server";
+    String APPLICATION_MALL_ADMIN = "mall-admin";
     /**
      * 商城门户
      */
-    String APPLICATION_MALL_PORTAL_SERVER = "mall-portal-server";
+    String APPLICATION_MALL_PORTAL = "mall-portal";
     /**
      * WEBSOCKET
      */
-    String APPLICATION_WEBSOCKET_SERVER = "websocket-server";
+    String APPLICATION_WEBSOCKET = "websocket";
+    /**
+     * 音频分析
+     */
+    String APPLICATION_AUDIO_ANALYSIS = "audio-analysis";
 
 }

+ 82 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/LauncherConstant.java

@@ -0,0 +1,82 @@
+package com.yonge.cooleshow.common.constant;
+
+
+import com.yonge.toolset.base.constant.BaseAppConstant;
+
+/**
+ * 启动常量
+ *
+ */
+public interface LauncherConstant {
+	/**
+	 * nacos local 地址
+	 */
+	String NACOS_LOCAL_ADDR = "47.114.1.200:8848";
+	/**
+	 * nacos dev 地址
+	 */
+	String NACOS_DEV_ADDR = "47.114.1.200:8848";
+	/**
+	 * nacos test 地址
+	 */
+	String NACOS_TEST_ADDR = "";
+	/**
+	 * nacos prod 地址
+	 */
+	String NACOS_PROD_ADDR = "";
+
+	/**
+	 * nacos local 命名空间
+	 */
+	String NACOS_LOCAL_NAMESPACE = "a71fb65c-d5d9-42c3-bbde-3586d19178f0";
+
+	/**
+	 * nacos dev 命名空间
+	 */
+	String NACOS_DEV_NAMESPACE = "6f8374a9-598f-4889-bb17-476070ffb8de";
+	/**
+	 * nacos test 命名空间
+	 */
+	String NACOS_TEST_NAMESPACE = "";
+	/**
+	 * nacos prod 命名空间
+	 */
+	String NACOS_PROD_NAMESPACE = "";
+
+	/**
+	 * 动态获取nacos地址
+	 *
+	 * @param profile 环境变量
+	 * @return addr
+	 */
+	static String nacosAddr(String profile) {
+		switch (profile) {
+			case (BaseAppConstant.PROD_CODE):
+				return NACOS_PROD_ADDR;
+			case (BaseAppConstant.TEST_CODE):
+				return NACOS_TEST_ADDR;
+			case (BaseAppConstant.LOCAL_CODE):
+				return NACOS_LOCAL_ADDR;
+			default:
+				return NACOS_DEV_ADDR;
+		}
+	}
+	/**
+	 * 动态获取nacos命名空间
+	 *
+	 * @param profile 环境变量
+	 * @return addr
+	 */
+	static String nacosNamespace(String profile) {
+		switch (profile) {
+			case (BaseAppConstant.PROD_CODE):
+				return NACOS_PROD_NAMESPACE;
+			case (BaseAppConstant.TEST_CODE):
+				return NACOS_TEST_NAMESPACE;
+			case (BaseAppConstant.LOCAL_CODE):
+				return NACOS_LOCAL_NAMESPACE;
+			default:
+				return NACOS_DEV_NAMESPACE;
+		}
+	}
+}

+ 2 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/task/OrderTimeOutCancelTask.java

@@ -8,6 +8,7 @@ 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 springfox.documentation.annotations.ApiIgnore;
 
 /**
  * 取消超时订单并解锁库存的定时器
@@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.RestController;
  */
 @RestController
 @RequestMapping("/task")
+@ApiIgnore
 public class OrderTimeOutCancelTask {
     private Logger LOGGER =LoggerFactory.getLogger(OrderTimeOutCancelTask.class);
     @Autowired

+ 3 - 8
cooleshow-task/pom.xml

@@ -33,8 +33,6 @@
 			<artifactId>quartz</artifactId>
 		</dependency>
 
-
-
 		<dependency>
 			<groupId>com.alibaba</groupId>
 			<artifactId>druid-spring-boot-starter</artifactId>
@@ -46,12 +44,9 @@
 		</dependency>
 
 		<dependency>
-			<groupId>mysql</groupId>
-			<artifactId>mysql-connector-java</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.mybatis.spring.boot</groupId>
-			<artifactId>mybatis-spring-boot-starter</artifactId>
+			<groupId>com.yonge.toolset</groupId>
+			<artifactId>toolset-mybatis</artifactId>
+			<version>${project.toolset.version}</version>
 		</dependency>
 
 		<dependency>

+ 12 - 10
cooleshow-task/src/main/java/com/yonge/cooleshow/task/TaskApplication.java

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.task;
 
+import com.yonge.cooleshow.common.constant.AppConstant;
+import com.yonge.toolset.base.BaseApplication;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -18,19 +20,19 @@ import com.spring4all.swagger.EnableSwagger2Doc;
 @EnableDiscoveryClient
 @EnableFeignClients("com.yonge.cooleshow")
 @MapperScan("com.yonge.cooleshow.task.dal.dao")
-@ComponentScan(basePackages = { "com.yonge.cooleshow.task", "com.yonge.cooleshow.auth", "com.yonge.cooleshow.common", "com.yonge.cooleshow.common.security" })
+@ComponentScan(basePackages = {"com.yonge.cooleshow", "com.yonge.toolset"})
 @Configuration
 @EnableSwagger2Doc
 @EnableAsync
 public class TaskApplication {
 
-	public static void main(String[] args) {
-		SpringApplication.run(TaskApplication.class, args);
-	}
-	
-	@Bean
-	@LoadBalanced
-	public RestTemplate restTemplate(){
-		return new RestTemplate();
-	}
+    public static void main(String[] args) {
+        BaseApplication.run(AppConstant.APPLICATION_TASK, TaskApplication.class, args);
+    }
+
+    @Bean
+    @LoadBalanced
+    public RestTemplate restTemplate() {
+        return new RestTemplate();
+    }
 }

+ 0 - 16
cooleshow-task/src/main/resources/bootstrap-dev.properties

@@ -1,16 +0,0 @@
-#\u6307\u5b9a\u5f00\u53d1\u73af\u5883
-#spring.profiles.active=dev
-#\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=47.114.1.200:8848
-#\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=6f8374a9-598f-4889-bb17-476070ffb8de
-#\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
-spring.cloud.nacos.config.group=DEFAULT_GROUP
-#\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}
-spring.cloud.nacos.config.prefix=task
-#\u6307\u5b9a\u6587\u4ef6\u540e\u7f00
-spring.cloud.nacos.config.file-extension=yaml
-#\u662f\u5426\u52a8\u6001\u5237\u65b0
-spring.cloud.nacos.config.refresh.enabled=true
-#\u662f\u5426\u542f\u7528nacos\u914d\u7f6e\u4e2d\u5fc3
-spring.cloud.nacos.config.enabled=true

+ 6 - 10
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/AdminApplication.java

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.admin;
 
+import com.yonge.cooleshow.common.constant.AppConstant;
+import com.yonge.toolset.base.BaseApplication;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -14,17 +16,11 @@ import com.spring4all.swagger.EnableSwagger2Doc;
 @EnableDiscoveryClient
 @EnableFeignClients("com.yonge.cooleshow")
 @MapperScan(basePackages = {"com.yonge.cooleshow.biz.dal.dao", "com.yonge.toolset.payment.core.dao"})
-@ComponentScan(basePackages = {
-		"com.yonge.cooleshow.admin", "com.yonge.cooleshow.auth", "com.yonge.cooleshow.biz",
-		"com.yonge.cooleshow.common", "com.yonge.cooleshow.common.security",
-		"com.yonge.toolset.log", "com.yonge.toolset.thirdparty", "com.yonge.toolset.payment"
-})
+@ComponentScan(basePackages = {"com.yonge.cooleshow", "com.yonge.toolset"})
 @Configuration
 @EnableSwagger2Doc
 public class AdminApplication {
-
-	public static void main(String[] args) {
-        SpringApplication.run(AdminApplication.class, args);
-	}
-	
+    public static void main(String[] args) {
+        BaseApplication.run(AppConstant.APPLICATION_ADMIN, AdminApplication.class, args);
+    }
 }

+ 3 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java

@@ -3,11 +3,13 @@ package com.yonge.cooleshow.admin.task;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
 
 /**
  * @Author: liweifan
@@ -15,6 +17,7 @@ import org.springframework.web.bind.annotation.RestController;
  */
 @RestController
 @RequestMapping("/task")
+@ApiIgnore
 public class TaskController extends BaseController {
     @Autowired
     private UserOrderService userOrderService;

+ 18 - 16
cooleshow-user/user-biz/pom.xml

@@ -22,26 +22,10 @@
         <dependency>
             <groupId>com.yonge.cooleshow</groupId>
             <artifactId>cooleshow-common</artifactId>
-        </dependency>
-
-        <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>
@@ -81,6 +65,24 @@
 
         <dependency>
             <groupId>com.yonge.toolset</groupId>
+            <artifactId>thirdparty-component</artifactId>
+            <version>${project.toolset.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-mybatis</artifactId>
+            <version>${project.toolset.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-emoji</artifactId>
+            <version>${project.toolset.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
             <artifactId>toolset-payment</artifactId>
             <version>${project.toolset.version}</version>
         </dependency>

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/PageUtil.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
+import com.yonge.toolset.mybatis.support.SqlKeyword;
 import com.yonge.toolset.utils.string.StringUtil;
 import org.springframework.beans.BeanUtils;
 

+ 0 - 129
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/SqlKeyword.java

@@ -1,129 +0,0 @@
-package com.yonge.cooleshow.biz.dal.support;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.StringPool;
-import com.yonge.toolset.utils.date.DateUtil;
-import com.yonge.toolset.utils.obj.ObjectUtil;
-import com.yonge.toolset.utils.string.StringUtil;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
-
-import java.util.Map;
-
-/**
- * 定义常用的 sql关键字
- *
- * @author Chill
- */
-@Component
-public class SqlKeyword {
-	private final static String SQL_REGEX = "'|%|--|insert|delete|select|count|group|union|drop|truncate|alter|grant|execute|exec|xp_cmdshell|call|declare|sql";
-
-	private static final String EQUAL = "_equal";
-	private static final String NOT_EQUAL = "_notequal";
-	private static final String LIKE = "_like";
-	private static final String LIKE_LEFT = "_likeleft";
-	private static final String LIKE_RIGHT = "_likeright";
-	private static final String NOT_LIKE = "_notlike";
-	private static final String GE = "_ge";
-	private static final String LE = "_le";
-	private static final String GT = "_gt";
-	private static final String LT = "_lt";
-	private static final String DATE_GE = "_datege";
-	private static final String DATE_GT = "_dategt";
-	private static final String DATE_EQUAL = "_dateequal";
-	private static final String DATE_LT = "_datelt";
-	private static final String DATE_LE = "_datele";
-	private static final String IS_NULL = "_null";
-	private static final String NOT_NULL = "_notnull";
-	private static final String IGNORE = "_ignore";
-	//是否转驼峰
-	static public Boolean underline;
-
-	/**
-	 * 条件构造器
-	 *
-	 * @param query 查询字段
-	 * @param qw    查询包装类
-	 */
-	public static void buildCondition(Map<String, Object> query, QueryWrapper<?> qw) {
-		if (CollectionUtils.isEmpty(query)) {
-			return;
-		}
-		query.forEach((k, v) -> {
-			if (ObjectUtil.hasEmpty(k, v) || k.endsWith(IGNORE)) {
-				return;
-			}
-			if (k.endsWith(EQUAL)) {
-				qw.eq(getColumn(k, EQUAL), v);
-			} else if (k.endsWith(NOT_EQUAL)) {
-				qw.ne(getColumn(k, NOT_EQUAL), v);
-			} else if (k.endsWith(LIKE_LEFT)) {
-				qw.likeLeft(getColumn(k, LIKE_LEFT), v);
-			} else if (k.endsWith(LIKE_RIGHT)) {
-				qw.likeRight(getColumn(k, LIKE_RIGHT), v);
-			} else if (k.endsWith(NOT_LIKE)) {
-				qw.notLike(getColumn(k, NOT_LIKE), v);
-			} else if (k.endsWith(GE)) {
-				qw.ge(getColumn(k, GE), v);
-			} else if (k.endsWith(LE)) {
-				qw.le(getColumn(k, LE), v);
-			} else if (k.endsWith(GT)) {
-				qw.gt(getColumn(k, GT), v);
-			} else if (k.endsWith(LT)) {
-				qw.lt(getColumn(k, LT), v);
-			} else if (k.endsWith(DATE_GE)) {
-				qw.ge(getColumn(k, DATE_GE), DateUtil.parse(String.valueOf(v), DateUtil.EXPANDED_DATE_TIME_FORMAT));
-			} else if (k.endsWith(DATE_GT)) {
-				qw.gt(getColumn(k, DATE_GT), DateUtil.parse(String.valueOf(v), DateUtil.EXPANDED_DATE_TIME_FORMAT));
-			} else if (k.endsWith(DATE_EQUAL)) {
-				qw.eq(getColumn(k, DATE_EQUAL), DateUtil.parse(String.valueOf(v), DateUtil.EXPANDED_DATE_TIME_FORMAT));
-			} else if (k.endsWith(DATE_LE)) {
-				qw.le(getColumn(k, DATE_LE), DateUtil.parse(String.valueOf(v), DateUtil.EXPANDED_DATE_TIME_FORMAT));
-			} else if (k.endsWith(DATE_LT)) {
-				qw.lt(getColumn(k, DATE_LT), DateUtil.parse(String.valueOf(v), DateUtil.EXPANDED_DATE_TIME_FORMAT));
-			} else if (k.endsWith(IS_NULL)) {
-				qw.isNull(getColumn(k, IS_NULL));
-			} else if (k.endsWith(NOT_NULL)) {
-				qw.isNotNull(getColumn(k, NOT_NULL));
-			} else {
-				qw.like(getColumn(k, LIKE), v);
-			}
-		});
-	}
-
-	/**
-	 * 获取数据库字段
-	 *
-	 * @param column  字段名
-	 * @param keyword 关键字
-	 * @return
-	 */
-	private static String getColumn(String column, String keyword) {
-		if(underline){
-			return StringUtil.humpToUnderline(StringUtil.removeSuffix(column, keyword));
-		}else{
-			return StringUtil.removeSuffix(column, keyword);
-		}
-	}
-
-	/**
-	 * 把SQL关键字替换为空字符串
-	 *
-	 * @param param 关键字
-	 * @return string
-	 */
-	public static String filter(String param) {
-		if (param == null) {
-			return null;
-		}
-		return param.replaceAll("(?i)" + SQL_REGEX, StringPool.EMPTY);
-	}
-
-	@Value("${spring.datasource.table-underline}")
-	public void setUnderline(Boolean underline) {
-		SqlKeyword.underline = underline;
-	}
-
-}

+ 4 - 7
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/StudentApplication.java

@@ -1,6 +1,8 @@
 package com.yonge.cooleshow.student;
 
 import com.spring4all.swagger.EnableSwagger2Doc;
+import com.yonge.cooleshow.common.constant.AppConstant;
+import com.yonge.toolset.base.BaseApplication;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -17,16 +19,11 @@ import org.springframework.context.annotation.Configuration;
 @EnableDiscoveryClient
 @EnableFeignClients("com.yonge.cooleshow")
 @MapperScan(basePackages = {"com.yonge.cooleshow.biz.dal.dao", "com.yonge.toolset.payment.core.dao"})
-@ComponentScan(basePackages = {
-        "com.yonge.cooleshow.student", "com.yonge.cooleshow.auth", "com.yonge.cooleshow.biz",
-        "com.yonge.cooleshow.common", "com.yonge.cooleshow.common.security",
-        "com.yonge.toolset.log", "com.yonge.toolset.thirdparty", "com.yonge.toolset.payment"
-})
+@ComponentScan(basePackages = {"com.yonge.cooleshow", "com.yonge.toolset"})
 @Configuration
 @EnableSwagger2Doc
 public class StudentApplication {
     public static void main(String[] args) {
-        SpringApplication.run(StudentApplication.class, args);
+        BaseApplication.run(AppConstant.APPLICATION_STUDENT, StudentApplication.class, args);
     }
-
 }

+ 3 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/task/TaskController.java

@@ -4,10 +4,12 @@ import com.yonge.cooleshow.biz.dal.entity.StudentTotal;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
 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 springfox.documentation.annotations.ApiIgnore;
 
 import java.util.List;
 
@@ -17,6 +19,7 @@ import java.util.List;
  */
 @RestController
 @RequestMapping("/task")
+@ApiIgnore
 public class TaskController extends BaseController {
     @Autowired
     private StudentTotalService studentTotalService;

+ 4 - 6
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/TeacherApplication.java

@@ -1,6 +1,8 @@
 package com.yonge.cooleshow.teacher;
 
 import com.spring4all.swagger.EnableSwagger2Doc;
+import com.yonge.cooleshow.common.constant.AppConstant;
+import com.yonge.toolset.base.BaseApplication;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -17,16 +19,12 @@ import org.springframework.context.annotation.Configuration;
 @EnableDiscoveryClient
 @EnableFeignClients("com.yonge.cooleshow")
 @MapperScan(basePackages = {"com.yonge.cooleshow.biz.dal.dao", "com.yonge.toolset.payment.core.dao"})
-@ComponentScan(basePackages = {
-        "com.yonge.cooleshow.teacher", "com.yonge.cooleshow.auth", "com.yonge.cooleshow.biz",
-        "com.yonge.cooleshow.common", "com.yonge.cooleshow.common.security",
-        "com.yonge.toolset.log", "com.yonge.toolset.thirdparty", "com.yonge.toolset.payment"
-})
+@ComponentScan(basePackages = {"com.yonge.cooleshow","com.yonge.toolset"})
 @Configuration
 @EnableSwagger2Doc
 public class TeacherApplication {
     public static void main(String[] args) {
-        SpringApplication.run(TeacherApplication.class, args);
+        BaseApplication.run(AppConstant.APPLICATION_TEACHER, TeacherApplication.class, args);
     }
 
 }

+ 3 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/task/TaskController.java

@@ -6,10 +6,12 @@ import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
 import com.yonge.cooleshow.biz.dal.service.TeacherTotalService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
 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 springfox.documentation.annotations.ApiIgnore;
 
 import java.util.List;
 
@@ -19,6 +21,7 @@ import java.util.List;
  */
 @RestController
 @RequestMapping("/task")
+@ApiIgnore
 public class TaskController extends BaseController {
     @Autowired
     private TeacherTotalService teacherTotalService;

+ 72 - 0
toolset/toolset-base/src/main/java/com/yonge/toolset/base/BaseApplication.java

@@ -0,0 +1,72 @@
+package com.yonge.toolset.base;
+
+import com.yonge.toolset.base.constant.BaseAppConstant;
+import com.yonge.toolset.base.constant.NacosConstant;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.core.env.*;
+import org.springframework.util.Assert;
+import org.springframework.util.StringUtils;
+
+import java.util.*;
+import java.util.function.Function;
+
+/**
+ * 项目启动器
+ *
+ */
+public class BaseApplication {
+
+	public static ConfigurableApplicationContext run(String appName, Class source, String... args) {
+		SpringApplicationBuilder builder = createSpringApplicationBuilder(appName, source, args);
+		return builder.run(args);
+	}
+
+	public static SpringApplicationBuilder createSpringApplicationBuilder(String appName, Class source, String... args) {
+		Assert.hasText(appName, "[appName]服务名不能为空");
+		// 读取环境变量,使用spring boot的规则
+		ConfigurableEnvironment environment = new StandardEnvironment();
+		MutablePropertySources propertySources = environment.getPropertySources();
+		propertySources.addFirst(new SimpleCommandLinePropertySource(args));
+		propertySources.addLast(new MapPropertySource(StandardEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME, environment.getSystemProperties()));
+		propertySources.addLast(new SystemEnvironmentPropertySource(StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, environment.getSystemEnvironment()));
+		// 获取配置的环境变量
+		String[] activeProfiles = environment.getActiveProfiles();
+		// 判断环境:dev、test、prod
+		List<String> profiles = Arrays.asList(activeProfiles);
+		// 预设的环境
+		List<String> presetProfiles = new ArrayList<>(Arrays.asList(BaseAppConstant.DEV_CODE, BaseAppConstant.TEST_CODE, BaseAppConstant.PROD_CODE));
+		// 交集
+		presetProfiles.retainAll(profiles);
+		// 当前使用
+		List<String> activeProfileList = new ArrayList<>(profiles);
+		Function<Object[], String> joinFun = StringUtils::arrayToCommaDelimitedString;
+		SpringApplicationBuilder builder = new SpringApplicationBuilder(source);
+		String profile;
+		if (activeProfileList.isEmpty()) {
+			// 默认dev开发
+			profile = BaseAppConstant.DEV_CODE;
+			activeProfileList.add(profile);
+			builder.profiles(profile);
+		} else if (activeProfileList.size() == 1) {
+			profile = activeProfileList.get(0);
+		} else {
+			// 同时存在dev、test、prod环境时
+			throw new RuntimeException("同时存在环境变量:[" + StringUtils.arrayToCommaDelimitedString(activeProfiles) + "]");
+		}
+		String startJarPath = BaseApplication.class.getResource("/").getPath().split("!")[0];
+		String activePros = joinFun.apply(activeProfileList.toArray());
+		System.out.println(String.format("----启动中,读取到的环境变量:[%s],jar地址:[%s]----", activePros, startJarPath));
+		Properties props = System.getProperties();
+
+		props.setProperty("spring.application.name", appName);
+		props.setProperty("spring.profiles.active", profile);
+		props.setProperty("spring.main.allow-bean-definition-overriding", "true");
+		props.setProperty("spring.sleuth.sampler.percentage", "1.0");
+		props.setProperty("spring.cloud.nacos.config.shared-dataids", NacosConstant.sharedDataIds(profile));
+		props.setProperty("spring.cloud.nacos.config.file-extension", NacosConstant.NACOS_CONFIG_FORMAT);
+		return builder;
+	}
+
+
+}

+ 25 - 0
toolset/toolset-base/src/main/java/com/yonge/toolset/base/constant/BaseAppConstant.java

@@ -0,0 +1,25 @@
+package com.yonge.toolset.base.constant;
+
+/**
+ * 系统常量
+ *
+ * @author Chill
+ */
+public interface BaseAppConstant {
+	/**
+	 * 本地环境
+	 */
+	String LOCAL_CODE = "local";
+	/**
+	 * 开发环境
+	 */
+	String DEV_CODE = "dev";
+	/**
+	 * 生产环境
+	 */
+	String PROD_CODE = "prod";
+	/**
+	 * 测试环境
+	 */
+	String TEST_CODE = "test";
+}

+ 53 - 0
toolset/toolset-base/src/main/java/com/yonge/toolset/base/constant/NacosConstant.java

@@ -0,0 +1,53 @@
+package com.yonge.toolset.base.constant;
+
+/**
+ * Nacos常量.
+ *
+ * @author Chill
+ */
+public interface NacosConstant {
+
+	/**
+	 * nacos 配置前缀
+	 */
+	String NACOS_CONFIG_PREFIX = "base";
+
+	/**
+	 * nacos 配置文件类型
+	 */
+	String NACOS_CONFIG_FORMAT = "yaml";
+
+	/**
+	 * 构建服务对应的 dataId
+	 *
+	 * @param appName 服务名
+	 * @param profile 环境变量
+	 * @return dataId
+	 */
+	static String dataId(String appName, String profile) {
+		return dataId(appName, profile, NACOS_CONFIG_FORMAT);
+	}
+
+	/**
+	 * 构建服务对应的 dataId
+	 *
+	 * @param appName 服务名
+	 * @param profile 环境变量
+	 * @param format  文件类型
+	 * @return dataId
+	 */
+	static String dataId(String appName, String profile, String format) {
+		return appName + "-" + profile + "." + format;
+	}
+
+	/**
+	 * 服务默认加载的配置
+	 *
+	 * @param profile 环境变量
+	 * @return sharedDataIds
+	 */
+	static String sharedDataIds(String profile) {
+		return NACOS_CONFIG_PREFIX + "." + NACOS_CONFIG_FORMAT + "," + NACOS_CONFIG_PREFIX + "-" + profile + "." + NACOS_CONFIG_FORMAT;
+	}
+
+}

+ 175 - 0
toolset/toolset-base/src/main/java/com/yonge/toolset/base/util/INetUtil.java

@@ -0,0 +1,175 @@
+package com.yonge.toolset.base.util;
+
+import org.springframework.util.StringUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.ServerSocket;
+import java.net.UnknownHostException;
+import java.util.Enumeration;
+
+/**
+ * INet 相关工具
+ *
+ * @author L.cm
+ */
+public class INetUtil {
+	public static final String LOCAL_HOST = "127.0.0.1";
+
+	/**
+	 * 获取 服务器 hostname
+	 *
+	 * @return hostname
+	 */
+	public static String getHostName() {
+		String hostname;
+		try {
+			InetAddress address = InetAddress.getLocalHost();
+			// force a best effort reverse DNS lookup
+			hostname = address.getHostName();
+			if (StringUtils.isEmpty(hostname)) {
+				hostname = address.toString();
+			}
+		} catch (UnknownHostException ignore) {
+			hostname = LOCAL_HOST;
+		}
+		return hostname;
+	}
+
+	/**
+	 * 获取 服务器 HostIp
+	 *
+	 * @return HostIp
+	 */
+	public static String getHostIp() {
+		String hostAddress;
+		try {
+			InetAddress address = INetUtil.getLocalHostLANAddress();
+			// force a best effort reverse DNS lookup
+			hostAddress = address.getHostAddress();
+			if (StringUtils.isEmpty(hostAddress)) {
+				hostAddress = address.toString();
+			}
+		} catch (UnknownHostException ignore) {
+			hostAddress = LOCAL_HOST;
+		}
+		return hostAddress;
+	}
+
+	/**
+	 * https://stackoverflow.com/questions/9481865/getting-the-ip-address-of-the-current-machine-using-java
+	 *
+	 * <p>
+	 * Returns an <code>InetAddress</code> object encapsulating what is most likely the machine's LAN IP address.
+	 * <p/>
+	 * This method is intended for use as a replacement of JDK method <code>InetAddress.getLocalHost</code>, because
+	 * that method is ambiguous on Linux systems. Linux systems enumerate the loopback network interface the same
+	 * way as regular LAN network interfaces, but the JDK <code>InetAddress.getLocalHost</code> method does not
+	 * specify the algorithm used to select the address returned under such circumstances, and will often return the
+	 * loopback address, which is not valid for network communication. Details
+	 * <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4665037">here</a>.
+	 * <p/>
+	 * This method will scan all IP addresses on all network interfaces on the host machine to determine the IP address
+	 * most likely to be the machine's LAN address. If the machine has multiple IP addresses, this method will prefer
+	 * a site-local IP address (e.g. 192.168.x.x or 10.10.x.x, usually IPv4) if the machine has one (and will return the
+	 * first site-local address if the machine has more than one), but if the machine does not hold a site-local
+	 * address, this method will return simply the first non-loopback address found (IPv4 or IPv6).
+	 * <p/>
+	 * If this method cannot find a non-loopback address using this selection algorithm, it will fall back to
+	 * calling and returning the result of JDK method <code>InetAddress.getLocalHost</code>.
+	 * <p/>
+	 *
+	 * @throws UnknownHostException If the LAN address of the machine cannot be found.
+	 */
+	private static InetAddress getLocalHostLANAddress() throws UnknownHostException {
+		try {
+			InetAddress candidateAddress = null;
+			// Iterate all NICs (network interface cards)...
+			for (Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements(); ) {
+				NetworkInterface iface = (NetworkInterface) ifaces.nextElement();
+				// Iterate all IP addresses assigned to each card...
+				for (Enumeration inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); ) {
+					InetAddress inetAddr = (InetAddress) inetAddrs.nextElement();
+					if (!inetAddr.isLoopbackAddress()) {
+
+						if (inetAddr.isSiteLocalAddress()) {
+							// Found non-loopback site-local address. Return it immediately...
+							return inetAddr;
+						} else if (candidateAddress == null) {
+							// Found non-loopback address, but not necessarily site-local.
+							// Store it as a candidate to be returned if site-local address is not subsequently found...
+							candidateAddress = inetAddr;
+							// Note that we don't repeatedly assign non-loopback non-site-local addresses as candidates,
+							// only the first. For subsequent iterations, candidate will be non-null.
+						}
+					}
+				}
+			}
+			if (candidateAddress != null) {
+				// We did not find a site-local address, but we found some other non-loopback address.
+				// Server might have a non-site-local address assigned to its NIC (or it might be running
+				// IPv6 which deprecates the "site-local" concept).
+				// Return this non-loopback candidate address...
+				return candidateAddress;
+			}
+			// At this point, we did not find a non-loopback address.
+			// Fall back to returning whatever InetAddress.getLocalHost() returns...
+			InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
+			if (jdkSuppliedAddress == null) {
+				throw new UnknownHostException("The JDK InetAddress.getLocalHost() method unexpectedly returned null.");
+			}
+			return jdkSuppliedAddress;
+		} catch (Exception e) {
+			UnknownHostException unknownHostException = new UnknownHostException("Failed to determine LAN address: " + e);
+			unknownHostException.initCause(e);
+			throw unknownHostException;
+		}
+	}
+
+	/**
+	 * 尝试端口时候被占用
+	 *
+	 * @param port 端口号
+	 * @return 没有被占用:true,被占用:false
+	 */
+	public static boolean tryPort(int port) {
+		try (ServerSocket ignore = new ServerSocket(port)) {
+			return true;
+		} catch (Exception e) {
+			return false;
+		}
+	}
+
+
+	public static String getIpAddr(HttpServletRequest request) {
+		String ip = null;
+		try {
+			ip = request.getHeader("x-forwarded-for");
+			if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+				ip = request.getHeader("Proxy-Client-IP");
+			}
+			if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+				ip = request.getHeader("WL-Proxy-Client-IP");
+			}
+			if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+				ip = request.getHeader("HTTP_CLIENT_IP");
+			}
+			if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+				ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+			}
+			if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+				ip = request.getRemoteAddr();
+			}
+		} catch (Exception e) {
+			return null;
+		}
+		// 使用代理,则获取第一个IP地址
+		if (StringUtils.isEmpty(ip) && ip.length() > 15) {
+			if (ip.indexOf(",") > 0) {
+				ip = ip.substring(0, ip.indexOf(","));
+			}
+		}
+		return ip;
+	}
+}

+ 27 - 0
toolset/toolset-base/src/main/java/com/yonge/toolset/base/util/PropsUtil.java

@@ -0,0 +1,27 @@
+package com.yonge.toolset.base.util;
+
+import org.springframework.util.StringUtils;
+
+import java.util.Properties;
+
+/**
+ * 配置工具类
+ *
+ * @author Chill
+ */
+public class PropsUtil {
+
+	/**
+	 * 设置配置值,已存在则跳过
+	 *
+	 * @param props property
+	 * @param key   key
+	 * @param value value
+	 */
+	public static void setProperty(Properties props, String key, String value) {
+		if (StringUtils.isEmpty(props.getProperty(key))) {
+			props.setProperty(key, value);
+		}
+	}
+
+}

+ 0 - 16
toolset/toolset-mybatis/src/main/resources/base-mybatis.yml

@@ -1,16 +0,0 @@
-mybatis:
-  mapperLocations: classpath:config/mybatis/*.xml
-#mybatis-plus配置
-mybatis-plus:
-  configuration:
-    map-underscore-to-camel-case: true
-    auto-mapping-behavior: full
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-  type-enums-package: com.yonge.**.enums
-  global-config:
-    # 逻辑删除配置
-    db-config:
-      # 删除前
-      logic-not-delete-value: 1
-      # 删除后
-      logic-delete-value: 0