MOKASZ\lw12420 vor 1 Jahr
Ursprung
Commit
bb2b3c5de4
27 geänderte Dateien mit 1630 neuen und 11 gelöschten Zeilen
  1. 9 9
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/applet/AppletOutController.java
  2. 181 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/ArticleInController.java
  3. 162 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/ArticleOutController.java
  4. 33 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/request/ArticleReq.java
  5. 65 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/request/ArticleSave.java
  6. 24 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/request/ArticleState.java
  7. 39 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/request/ArticleUpdate.java
  8. 26 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/request/ClassificationReq.java
  9. 29 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/request/LabelManagementReq.java
  10. 34 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/request/LabelReq.java
  11. 15 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/res/AppidDomainRes.java
  12. 70 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/res/ArticleOutRes.java
  13. 48 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/res/ArticleRes.java
  14. 16 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/res/ArticleUnlockStateRes.java
  15. 28 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/res/LabelManagementRes.java
  16. 10 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/article/AppidDomain.java
  17. 33 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/article/Article.java
  18. 13 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/article/ArticleUnlockState.java
  19. 21 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/article/Classification.java
  20. 23 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/article/LabelManagement.java
  21. 12 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/article/UserInfo.java
  22. 28 1
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/applet/AppletService.java
  23. 3 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/applet/AppletServiceInterface.java
  24. 639 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/article/ArticleSercieImp.java
  25. 62 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/article/ArticleServiceInterface.java
  26. 6 0
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/SourceMaterialImpl.java
  27. 1 1
      launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/data/sql/Where.java

+ 9 - 9
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/applet/AppletOutController.java

@@ -56,14 +56,14 @@ public class AppletOutController {
         return   appletServiceInterface.getUniqueState(unique,id);
         return   appletServiceInterface.getUniqueState(unique,id);
     }
     }
 
 
-    /**
-     * 验证已解锁ID
-     * @param request
-     * @return {@link Mono}<{@link RStatus}<{@link DataRes}>>
-     */
-    @PostMapping("byListIdReturnUnlockId")
-    public Mono<RStatus<ByListIdReturnUnlockId>>  byListIdReturnUnlockId(@RequestBody ByListIdReturnUnlockId request  ){
-        return   appletServiceInterface.byListIdReturnUnlockId(request);
-    }
+//    /**
+//     * 验证已解锁ID
+//     * @param request
+//     * @return {@link Mono}<{@link RStatus}<{@link DataRes}>>
+//     */
+//    @PostMapping("byListIdReturnUnlockId")
+//    public Mono<RStatus<ByListIdReturnUnlockId>>  byListIdReturnUnlockId(@RequestBody ByListIdReturnUnlockId request  ){
+//        return   appletServiceInterface.byListIdReturnUnlockId(request);
+//    }
 
 
 }
 }

+ 181 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/ArticleInController.java

@@ -0,0 +1,181 @@
+package com.webflux.launchadmin.mysql.controller.article;
+
+import com.webflux.launchadmin.mysql.controller.article.request.*;
+import com.webflux.launchadmin.mysql.controller.article.res.ArticleRes;
+import com.webflux.launchadmin.mysql.controller.article.res.LabelManagementRes;
+import com.webflux.launchadmin.mysql.entity.applet.AppletIds;
+import com.webflux.launchadmin.mysql.entity.article.Article;
+import com.webflux.launchadmin.mysql.entity.article.Classification;
+import com.webflux.launchadmin.mysql.entity.article.LabelManagement;
+import com.webflux.launchadmin.mysql.service.article.ArticleServiceInterface;
+import com.webflux.launchcommon.returnObj.Paged;
+import com.webflux.launchcommon.returnObj.RStatus;
+import io.r2dbc.spi.Parameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import reactor.core.publisher.Mono;
+
+/**
+ * 文章-内部(后台管理)
+ * @author lw12420
+ * @date 2024/09/10
+ */
+@RestController
+@RequestMapping("in/article")
+public class ArticleInController {
+    @Autowired
+    private ArticleServiceInterface articleServiceInterface;
+
+    /**
+     * 分类列表查询
+     * @return
+     */
+    @GetMapping("getClassificationList")
+    public Mono<RStatus<Paged<Classification>>> getClassificationList(){
+        return articleServiceInterface.getClassificationList();
+    }
+
+    /**
+     * 分类添加
+     * @param save
+     * @return {@link Mono}<{@link RStatus}<{@link Boolean}>>
+     */
+    @PostMapping("addClassification")
+    public Mono<RStatus<Boolean>> addClassification(@RequestBody ClassificationReq save) {
+        return articleServiceInterface.addClassification(save);
+    }
+    /**
+     * 分类修改
+     * @param save
+     * @return {@link Mono}<{@link RStatus}<{@link Boolean}>>
+     */
+    @PostMapping("updateClassification")
+    public Mono<RStatus<Boolean>> updateClassification(@RequestBody ClassificationReq save) {
+        return articleServiceInterface.updateClassification(save);
+    }
+    /**
+     * 分类移除
+     * @param id
+     * @return {@link Mono}<{@link RStatus}<{@link Boolean}>>
+     */
+    @DeleteMapping("deleteClassification/{id}")
+    public Mono<RStatus<Boolean>> deleteClassification(@PathVariable("id") Long id) {
+        return articleServiceInterface.deleteClassification(id);
+    }
+    /**
+     * 分类通过id获取
+     * @param id
+     * @return {@link Mono}<{@link RStatus}<{@link Boolean}>>
+     */
+    @GetMapping("getClassification/{id}")
+    public Mono<RStatus<Classification>> getClassification(@PathVariable("id") Long id) {
+        return articleServiceInterface.getClassification(id);
+    }
+    /**
+     * 标签列表查询
+     *
+     * @param name 名称
+     * @param page
+     * @param size
+     * @return {@link Mono}<{@link RStatus}<{@link Paged}<{@link LabelManagementRes}>>>
+     */
+    @GetMapping("getLableList")
+    public Mono<RStatus<Paged<LabelManagementRes>>> getLableList(@RequestParam("name") String name,
+                                                                 @RequestParam("page") Integer page,
+                                                                 @RequestParam("size")Integer size){
+        return articleServiceInterface.getLableList(name,page,size);
+    }
+    /**
+     * 标签添加
+     * @param save
+     * @return {@link Mono}<{@link RStatus}<{@link Boolean}>>
+     */
+    @PostMapping("addLable")
+    public Mono<RStatus<Boolean>> addLable(@RequestBody LabelReq save) {
+        return articleServiceInterface.addLable(save);
+    }
+
+    /**
+     * 标签修改
+     * @param save
+     * @return {@link Mono}<{@link RStatus}<{@link Boolean}>>
+     */
+    @PostMapping("updateLable")
+    public Mono<RStatus<Boolean>> updateLable(@RequestBody LabelReq save) {
+        return articleServiceInterface.updateLable(save);
+    }
+    /**
+     * 标签移除
+     * @param id
+     * @return {@link Mono}<{@link RStatus}<{@link Boolean}>>
+     */
+    @DeleteMapping("deleteLable/{id}")
+    public Mono<RStatus<Boolean>> deleteLable(@PathVariable("id") Long id) {
+        return articleServiceInterface.deleteLable(id);
+    }
+    /**
+     * 标签通过id查询
+     * @param id
+     * @return {@link Mono}<{@link RStatus}<{@link Boolean}>>
+     */
+    @GetMapping("getLable/{id}")
+    public Mono<RStatus<LabelManagement>> getLable(@PathVariable("id") Long id) {
+        return articleServiceInterface.getLable(id);
+    }
+
+    /**
+     * 文章列表查询
+     *
+     * @return {@link Mono}<{@link RStatus}<{@link Paged}<{@link LabelManagementRes}>>>
+     */
+    @PostMapping("getArticleList")
+    public Mono<RStatus<Paged<ArticleRes>>> getArticleList(@RequestBody ArticleReq articleReq){
+        return articleServiceInterface.getArticleList(articleReq);
+    }
+    /**
+     * 文章移除
+     * @param id
+     * @return {@link Mono}<{@link RStatus}<{@link Boolean}>>
+     */
+    @DeleteMapping("deleteArticle/{id}")
+    public Mono<RStatus<Boolean>> deleteArticle(@PathVariable("id") Long id) {
+        return articleServiceInterface.deleteArticle(id);
+    }
+    /**
+     * 文章通过id查询
+     * @param id
+     * @return {@link Mono}<{@link RStatus}<{@link Boolean}>>
+     */
+    @GetMapping("getArticle/{id}")
+    public Mono<RStatus<LabelManagement>> getArticle(@PathVariable("id") Long id) {
+        return articleServiceInterface.getArticle(id);
+    }
+    /**
+     * 文章修改
+     * @param save
+     * @return {@link Mono}<{@link RStatus}<{@link Boolean}>>
+     */
+    @PostMapping("articleUpdate")
+    public Mono<RStatus<Boolean>> articleUpdate(@RequestBody ArticleUpdate save) {
+        return articleServiceInterface.articleUpdate(save);
+    }
+    /**
+     * 文章新增
+     * @param save
+     * @return {@link Mono}<{@link RStatus}<{@link Boolean}>>
+     */
+    @PostMapping("articleAdd")
+    public Mono<RStatus<Boolean>> articleAdd(@RequestBody ArticleSave save) {
+        return articleServiceInterface.articleAdd(save);
+    }
+    /**
+     * 文章修改 发好友 发朋友 广告
+     * @param save
+     * @return {@link Mono}<{@link RStatus}<{@link Boolean}>>
+     */
+    @PostMapping("articleUpdateSend")
+    public Mono<RStatus<Boolean>> articleUpdateSend(@RequestBody ArticleState save) {
+        return articleServiceInterface.articleUpdateSend(save);
+    }
+
+}

+ 162 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/ArticleOutController.java

@@ -0,0 +1,162 @@
+package com.webflux.launchadmin.mysql.controller.article;
+
+import com.webflux.launchadmin.mysql.controller.applet.res.AppletH5Data;
+import com.webflux.launchadmin.mysql.controller.applet.res.DataRes;
+import com.webflux.launchadmin.mysql.controller.article.res.AppidDomainRes;
+import com.webflux.launchadmin.mysql.controller.article.res.ArticleOutRes;
+import com.webflux.launchadmin.mysql.controller.article.res.ArticleUnlockStateRes;
+import com.webflux.launchadmin.mysql.controller.article.res.LabelManagementRes;
+import com.webflux.launchadmin.mysql.entity.article.Classification;
+import com.webflux.launchadmin.mysql.service.applet.AppletServiceInterface;
+import com.webflux.launchadmin.mysql.service.article.ArticleServiceInterface;
+import com.webflux.launchcommon.returnObj.Paged;
+import com.webflux.launchcommon.returnObj.RStatus;
+import jakarta.validation.constraints.NotNull;
+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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import reactor.core.publisher.Mono;
+
+import java.util.List;
+
+/**
+ * 文章-对外
+ * @author lw12420
+ * @date 2024/09/11
+ */
+@RestController
+@RequestMapping("out/article")
+public class ArticleOutController {
+    @Autowired
+    private ArticleServiceInterface articleServiceInterface;
+    @Autowired
+    private AppletServiceInterface appletServiceInterface;
+//    /**
+//     * 分类列表查询
+//     * @return
+//     */
+//    @GetMapping("getClassificationList")
+//    public Mono<RStatus<Paged<Classification>>> getClassificationList(){
+//        return articleServiceInterface.getClassificationList();
+//    }
+//
+//    /**
+//     * 通过分类ID查询标签列表
+//     *
+//     * @param classificationId 分类ID 值为0时查询所有标签
+//     * @param page
+//     * @param size
+//     * @return {@link Mono}<{@link RStatus}<{@link Paged}<{@link LabelManagementRes}>>>
+//     */
+//    @GetMapping("getLableList")
+//    public Mono<RStatus<Paged<LabelManagementRes>>> getLableList(@RequestParam("classificationId") Long classificationId,
+//                                                                 @RequestParam("page") Integer page,
+//                                                                 @RequestParam("size")Integer size){
+//        return articleServiceInterface.getOutLableList(classificationId,page,size);
+//    }
+//    /**
+//     * 通过标签名称查询标签信息
+//     *
+//     * @param name
+//     *
+//     * @return {@link Mono}<{@link RStatus}<{@link Paged}<{@link LabelManagementRes}>>>
+//     */
+//    @GetMapping("byNamegetLable")
+//    public Mono<RStatus<List<LabelManagementRes>>> byNamegetLable(@RequestParam("name") String name
+//                                                                ){
+//        return articleServiceInterface.byNamegetLable(name);
+//    }
+//    /**
+//     * 通过标签Id查询文章列表
+//     *
+//     * @param labelId id
+//     * @param page
+//     * @param size
+//     * @return {@link Mono}<{@link RStatus}<{@link Paged}<{@link LabelManagementRes}>>>
+//     */
+//    @GetMapping("byLableIdGetArticle")
+//    public Mono<RStatus<Paged<ArticleOutRes>>> byLableNameGetArticle(@NotNull @RequestParam("labelId") Long labelId,
+//                                                                     @RequestParam("page") Integer page,
+//                                                                     @RequestParam("size")Integer size){
+//        return articleServiceInterface.byLableGetArticle(labelId,page,size);
+//    }
+//
+//    /**
+//     * 通过标签name查询文章列表
+//     * @param name
+//     * @param page
+//     * @param size
+//     * @return {@link Mono}<{@link RStatus}<{@link Paged}<{@link ArticleOutRes}>>>
+//     */
+//    @GetMapping("byLableNameGetArticle")
+//    public Mono<RStatus<Paged<ArticleOutRes>>> byLableNameGetArticle(@NotNull @RequestParam("name") String name,
+//                                                                     @RequestParam("page") Integer page,
+//                                                                     @RequestParam("size")Integer size){
+//        return articleServiceInterface.byLableNameGetArticle(name,page,size);
+//    }
+//    /**
+//     * 获取用户是否已经解锁文章
+//     *
+//     * @param userId 用户id
+//     * @param articleId 文章id 值0时返回所有已解锁文章
+//     * @return {@link Mono}<{@link RStatus}<{@link Paged}<{@link ArticleOutRes}>>>
+//     */
+//    @GetMapping("byUserIdGetUnlockState")
+//    public Mono<RStatus<List<ArticleUnlockStateRes>>> byUserIdGetUnlockState(@NotNull @RequestParam("userId") String userId,
+//                                                                             @NotNull @RequestParam("articleId") Long articleId){
+//        return articleServiceInterface.byUserIdGetUnlockState(userId,articleId);
+//    }
+//
+//    /**
+//     * 随机获取域名和小程序appid
+//     *
+//     * @return {@link Mono}<{@link RStatus}<{@link List}<{@link AppidDomainRes}>>>
+//     */
+//    @GetMapping("getdomain")
+//    public Mono<RStatus<AppidDomainRes>> getdomain(){
+//        return articleServiceInterface.getdomain();
+//    }
+//
+//    /**
+//     * 根据文章id获取内容(可以根据列表id集合进行下一页)
+//     * @param articleId
+//     * @return {@link Mono}<{@link RStatus}<{@link ArticleOutRes}>>
+//     */
+//    @GetMapping("byArticleIdGet")
+//    public Mono<RStatus<ArticleOutRes>> byArticleIdGet(@NotNull @RequestParam("articleId") Long articleId){
+//        return articleServiceInterface.byArticleIdGet(articleId);
+//    }
+//
+//    /**
+//     * 随机下一页
+//     * @return {@link Mono}<{@link RStatus}<{@link ArticleOutRes}>>
+//     */
+//    @GetMapping("randomNextPage")
+//    public Mono<RStatus<ArticleOutRes>> randomNextPage(){
+//        return articleServiceInterface.randomNextPage();
+//    }
+//
+//    /**
+//     * 通过 userId 和文章 id 获取观看视频状态
+//     * @param userId unique
+//     * @param id 相册id
+//     * @return {@link Mono}<{@link RStatus}<{@link DataRes}>>
+//     */
+//    @GetMapping("byUserIdGetArticleState")
+//    public Mono<RStatus<DataRes>>  byUserIdGetArticleState(@RequestParam("userId") String userId,@RequestParam("id") Long id  ){
+//        return   appletServiceInterface.getUniqueStateArticle(userId,id);
+//    }
+//
+//    /**
+//     * 获取打开广告地址
+//     * @param userId 同一用户使用一条scheme链接
+//     * @return {@link Mono}<{@link RStatus}<{@link AppletH5Data}>>
+//     */
+//    @GetMapping("getOpenLink")
+//    public Mono<RStatus<AppletH5Data>> getOpenLink(@RequestParam("userId") String userId){
+//        return  appletServiceInterface.getOpenLink(userId);
+//    }
+
+}

+ 33 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/request/ArticleReq.java

@@ -0,0 +1,33 @@
+package com.webflux.launchadmin.mysql.controller.article.request;
+
+import lombok.Data;
+
+@Data
+public class ArticleReq {
+
+    /**
+     * 标题
+     */
+    String title;
+    /**
+     * 日期 开始时间_结束时间 格式:(yyyy-MM-dd)
+     */
+    String dateTimeStr;
+    /**
+     * 作者
+     */
+    String author;
+    /**
+     * 分类id
+     */
+    Long classificationId;
+    /**
+     * 标签id
+     */
+    Long labelId;
+
+    Integer page;
+    Integer size;
+
+
+}

+ 65 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/request/ArticleSave.java

@@ -0,0 +1,65 @@
+package com.webflux.launchadmin.mysql.controller.article.request;
+
+import lombok.Data;
+
+@Data
+public class ArticleSave {
+    Long id;
+    /**
+     * 标题
+     */
+    String title;
+    /**
+     * 日期
+     */
+    String dateTimeStr;
+    /**
+     * 作者
+     */
+    String author;
+    /**
+     * 标签
+     */
+    String labels;
+    /**
+     * 内容
+     */
+    String htmlContent;
+
+    /**
+     * 封面
+     */
+    String frontCover;
+    /**
+     * /类型:图文/相册/视频
+     */
+    String type;
+
+    /**
+     * 音频链接
+     */
+    String audioLink;
+    /**
+     * 音频name
+     */
+    String audioName;
+    /**
+     * 视频链接
+     */
+    String videoLink;
+    /**
+     * 发朋友
+     */
+    Integer sendFriends;
+    /**
+     * 发朋友圈
+     */
+    Integer sendFriendsCircle;
+    /**
+     * 发广告
+     */
+    Integer ad;
+
+
+
+}

+ 24 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/request/ArticleState.java

@@ -0,0 +1,24 @@
+package com.webflux.launchadmin.mysql.controller.article.request;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Data
+public class ArticleState {
+
+    @NotNull
+    Long id;
+    /**
+     *发好友 1:T  0:F
+     */
+    Integer sendFriends;
+    /**
+     *发好友圈 1:T  0:F
+     */
+    Integer sendFriendsCircle;
+    /**
+     *广告 1:T  0:F
+     */
+    Integer ad;
+
+}

+ 39 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/request/ArticleUpdate.java

@@ -0,0 +1,39 @@
+package com.webflux.launchadmin.mysql.controller.article.request;
+
+import lombok.Data;
+
+@Data
+public class ArticleUpdate {
+    Long id;
+    /**
+     * 标题
+     */
+    String title;
+    /**
+     * 日期
+     */
+    String dateTimeStr;
+    /**
+     * 作者
+     */
+    String author;
+    /**
+     * 标签
+     */
+    String labels;
+    /**
+     * 内容
+     */
+    String htmlContent;
+
+    /**
+     * 封面
+     */
+    String frontCover;
+    /**
+     * /类型:图文/相册/视频
+     */
+    String type;
+
+
+}

+ 26 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/request/ClassificationReq.java

@@ -0,0 +1,26 @@
+package com.webflux.launchadmin.mysql.controller.article.request;
+
+
+import lombok.Data;
+
+
+@Data
+public class ClassificationReq {
+    /**
+     * 选填 修改必填
+     */
+    private Long id;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 排序
+     */
+    private Integer stIx;
+    /**
+     * 1:文字; 2:文+图
+     */
+    private String showType;
+
+}

+ 29 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/request/LabelManagementReq.java

@@ -0,0 +1,29 @@
+package com.webflux.launchadmin.mysql.controller.article.request;
+
+import lombok.Data;
+
+@Data
+public class LabelManagementReq {
+
+     private Long id;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 排序
+     */
+    private Integer stIx;
+    /**
+     * 封面
+     */
+    private String url;
+    /**
+     * 分类id
+     */
+    private Long classificationId;
+    /**
+     * 置顶 1:是 0否
+     */
+    private Integer isTop;
+}

+ 34 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/request/LabelReq.java

@@ -0,0 +1,34 @@
+package com.webflux.launchadmin.mysql.controller.article.request;
+
+import lombok.Data;
+
+@Data
+public class LabelReq {
+
+    private Long id;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     *排序
+     */
+    private Integer stIx;
+    /**
+     *封面
+     */
+    private String url;
+    /**
+     * 分类id
+     */
+    private Long classificationId;
+
+    /**
+     * 分类名称
+     */
+    String classificationName;
+    /**
+     *置顶
+     */
+    private Integer isTop;
+}

+ 15 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/res/AppidDomainRes.java

@@ -0,0 +1,15 @@
+package com.webflux.launchadmin.mysql.controller.article.res;
+
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.relational.core.mapping.Table;
+
+import java.io.Serializable;
+
+@Data
+public class AppidDomainRes implements Serializable {
+
+    String domain;
+    String appid;
+
+}

+ 70 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/res/ArticleOutRes.java

@@ -0,0 +1,70 @@
+package com.webflux.launchadmin.mysql.controller.article.res;
+
+import lombok.Data;
+
+@Data
+public class ArticleOutRes {
+    Long id;
+    /**
+     * 标题
+     */
+    String title;
+    /**
+     * 日期
+     */
+    String dateTimeStr;
+    /**
+     * 作者
+     */
+    String author;
+
+    /**
+     * 分类名称
+     */
+    String classificationName;
+    /**
+     * 标签
+     */
+    String labels;
+    /**
+     *发好友 1:T  0:F
+     */
+    Integer sendFriends;
+    /**
+     *发好友圈 1:T  0:F
+     */
+    Integer sendFriendsCircle;
+    /**
+     *广告 1:T  0:F
+     */
+    Integer ad;
+
+    /**
+     * 封面
+     */
+    String frontCover;
+
+    /**
+     * 音频链接
+     */
+    String audioLink;
+    /**
+     *音频名
+     */
+    String audioName;
+    /**
+     *视频链接
+     */
+    String videoLink;
+    /**
+     *内容
+     */
+    String htmlContent;
+    /**
+     *类型 :图文/相册/视频
+     */
+    String type;
+
+
+}
+  

+ 48 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/res/ArticleRes.java

@@ -0,0 +1,48 @@
+package com.webflux.launchadmin.mysql.controller.article.res;
+
+import lombok.Data;
+
+@Data
+public class ArticleRes {
+    Long id;
+    /**
+     * 标题
+     */
+    String title;
+    /**
+     * 日期
+     */
+    String dateTimeStr;
+    /**
+     * 作者
+     */
+    String author;
+
+    /**
+     * 分类名称
+     */
+    String classificationName;
+    /**
+     * 标签
+     */
+    String labels;
+    /**
+     *发好友 1:T  0:F
+     */
+    Integer sendFriends;
+    /**
+     *发好友圈 1:T  0:F
+     */
+    Integer sendFriendsCircle;
+    /**
+     *广告 1:T  0:F
+     */
+    Integer ad;
+
+    /**
+     * 封面
+     */
+    String frontCover;
+
+
+}

+ 16 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/res/ArticleUnlockStateRes.java

@@ -0,0 +1,16 @@
+package com.webflux.launchadmin.mysql.controller.article.res;
+
+import lombok.Data;
+
+@Data
+public class ArticleUnlockStateRes {
+    /**
+     * 文章id
+     */
+     private Long articleId;
+    /**
+     * 解锁状态
+     */
+    private Integer unlockState =1;
+}
+  

+ 28 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/controller/article/res/LabelManagementRes.java

@@ -0,0 +1,28 @@
+package com.webflux.launchadmin.mysql.controller.article.res;
+
+import lombok.Data;
+
+@Data
+public class LabelManagementRes {
+    private Long id;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 排序
+     */
+    private Integer stIx;
+    /**
+     * 封面
+     */
+    private String url;
+    /**
+     * 分类Name
+     */
+    private String classificationName;
+    /**
+     * 置顶 1:是 0否
+     */
+    private Integer isTop;
+}

+ 10 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/article/AppidDomain.java

@@ -0,0 +1,10 @@
+package com.webflux.launchadmin.mysql.entity.article;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.relational.core.mapping.Table;
+
+import java.io.Serializable;
+
+@Table("appid_domain")
+public record AppidDomain(@Id Long id,String domain,String appid,String secret) implements Serializable {
+}

+ 33 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/article/Article.java

@@ -0,0 +1,33 @@
+package com.webflux.launchadmin.mysql.entity.article;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.relational.core.mapping.Table;
+
+import java.time.ZonedDateTime;
+
+@Table("article")
+public record Article(@Id Long id,
+                      String obtainId,
+                      String title,
+                      String dateTimeStr,
+                      String author,
+                      String labels,
+                      String audioLink,
+                      String audioName,
+                      String videoLink,
+                      String htmlContent,
+                      String createUser,
+                      String createId,
+                      @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") ZonedDateTime createdAt,
+                      @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") ZonedDateTime updatedAt,
+                      @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") ZonedDateTime deletedAt,
+                      Integer sendFriends,
+                      Integer sendFriendsCircle,
+                      Integer ad,
+                      String frontCover,
+                      String type //类型:图文/相册/视频
+
+) {
+}
+

+ 13 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/article/ArticleUnlockState.java

@@ -0,0 +1,13 @@
+package com.webflux.launchadmin.mysql.entity.article;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.relational.core.mapping.Table;
+
+import java.io.Serializable;
+import java.time.ZonedDateTime;
+
+@Table("article_unlock_state")
+public record ArticleUnlockState(@Id Long id,Long userInfoId,Long articleId,Integer state, @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") ZonedDateTime createdAt)
+        implements Serializable {
+}

+ 21 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/article/Classification.java

@@ -0,0 +1,21 @@
+package com.webflux.launchadmin.mysql.entity.article;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.relational.core.mapping.Table;
+
+import java.time.ZonedDateTime;
+
+/**
+ * 分类
+ */
+@Table("classification")
+public record Classification(@Id Long id,
+                             String name,
+                             Integer stIx,
+                             String showType,//	1:文字; 2:文+图
+                             String createUser,
+                             String createId,
+                             @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") ZonedDateTime createdAt,
+                             @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") ZonedDateTime updatedAt) {
+}

+ 23 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/article/LabelManagement.java

@@ -0,0 +1,23 @@
+package com.webflux.launchadmin.mysql.entity.article;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.relational.core.mapping.Table;
+
+import java.io.Serializable;
+import java.time.ZonedDateTime;
+
+@Table("label_management")
+public record LabelManagement(@Id Long id,
+                              String name,
+                              Integer stIx,
+                              String url,
+                              Long classificationId,
+                              String classificationName,
+                              Integer isTop,
+                              String createUser,
+                              String createId,
+                              @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") ZonedDateTime createdAt,
+                              @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") ZonedDateTime updatedAt
+                              ) implements Serializable {
+}

+ 12 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/entity/article/UserInfo.java

@@ -0,0 +1,12 @@
+package com.webflux.launchadmin.mysql.entity.article;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.relational.core.mapping.Table;
+
+import java.io.Serializable;
+import java.time.ZonedDateTime;
+
+@Table("user_info")
+public record UserInfo (@Id Long id, String userId, @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") ZonedDateTime createdAt) implements Serializable{
+}

+ 28 - 1
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/applet/AppletService.java

@@ -9,6 +9,8 @@ import com.webflux.launchadmin.mysql.controller.applet.req.ByListIdReturnUnlockI
 import com.webflux.launchadmin.mysql.controller.applet.res.AppletH5Data;
 import com.webflux.launchadmin.mysql.controller.applet.res.AppletH5Data;
 import com.webflux.launchadmin.mysql.controller.applet.res.DataRes;
 import com.webflux.launchadmin.mysql.controller.applet.res.DataRes;
 import com.webflux.launchadmin.mysql.entity.applet.AppletIds;
 import com.webflux.launchadmin.mysql.entity.applet.AppletIds;
+import com.webflux.launchadmin.mysql.entity.article.ArticleUnlockState;
+import com.webflux.launchadmin.mysql.entity.article.UserInfo;
 import com.webflux.launchadmin.mysql.entity.planNew.PlanNewCommon;
 import com.webflux.launchadmin.mysql.entity.planNew.PlanNewCommon;
 import com.webflux.launchadmin.mysql.service.sourceMaterial.SourceMaterialInterface;
 import com.webflux.launchadmin.mysql.service.sourceMaterial.SourceMaterialInterface;
 import com.webflux.launchcommon.returnObj.Paged;
 import com.webflux.launchcommon.returnObj.Paged;
@@ -260,6 +262,7 @@ public class AppletService implements AppletServiceInterface {
         });
         });
     }
     }
 
 
+
     @Override
     @Override
     public Mono<RStatus<DataRes>> getUniqueState(String unique, Long id) {
     public Mono<RStatus<DataRes>> getUniqueState(String unique, Long id) {
         Mono<DataRes> dataResMono = reactiveRedisTemplates.opsForValue().get(unique +"-"+ id).switchIfEmpty(Mono.just("2")).flatMap(f -> {
         Mono<DataRes> dataResMono = reactiveRedisTemplates.opsForValue().get(unique +"-"+ id).switchIfEmpty(Mono.just("2")).flatMap(f -> {
@@ -279,6 +282,31 @@ public class AppletService implements AppletServiceInterface {
     }
     }
 
 
     @Override
     @Override
+    public Mono<RStatus<DataRes>> getUniqueStateArticle(String unique, Long id) {
+        Mono<DataRes> dataResMono = reactiveRedisTemplates.opsForValue().get(unique +"-"+ id).switchIfEmpty(Mono.just("2")).flatMap(f -> {
+            DataRes dataRes = new DataRes();
+            if (Objects.nonNull(f) && "1".equals(f)) {
+                dataRes.setState(1);
+                r2dbcEntityTemplate.selectOne(Query.query(Criteria.where("user_id").is(unique)), UserInfo.class)
+                        .switchIfEmpty(r2dbcEntityTemplate.insert(new UserInfo(null,unique,ZonedDateTime.now())))
+                        .onErrorResume(throwable -> Mono.error(new BaseException("查询用户信息失败")))
+                        .flatMap(userInfo -> r2dbcEntityTemplate.selectOne(Query
+                                  .query(Criteria.where("user_info_id")
+                                          .is(userInfo.id()).and("article_id").is(id)),ArticleUnlockState.class)
+                                  .switchIfEmpty(r2dbcEntityTemplate.insert(new ArticleUnlockState(null,userInfo.id(),id,1,ZonedDateTime.now())))
+                                  .onErrorResume(throwable -> Mono.error(new BaseException("查询或保存用户解锁文章状态失败")))).subscribe();
+                //需要持久化
+            } else if (Objects.nonNull(f) && "2".equals(f)) {
+                dataRes.setState(2);
+            }else {
+                dataRes.setState(0);
+            }
+            return Mono.just(dataRes);
+        });
+        return RStatus.success(dataResMono);
+    }
+
+    @Override
     public Mono<RStatus<ByListIdReturnUnlockId>> byListIdReturnUnlockId(ByListIdReturnUnlockId request) {
     public Mono<RStatus<ByListIdReturnUnlockId>> byListIdReturnUnlockId(ByListIdReturnUnlockId request) {
         List<Long> ids = request.getIds();
         List<Long> ids = request.getIds();
         String unique = request.getUnique();
         String unique = request.getUnique();
@@ -300,5 +328,4 @@ public class AppletService implements AppletServiceInterface {
         return RStatus.success(byListIdReturnUnlockIdMono);
         return RStatus.success(byListIdReturnUnlockIdMono);
     }
     }
 
 
-
 }
 }

+ 3 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/applet/AppletServiceInterface.java

@@ -33,6 +33,9 @@ public interface AppletServiceInterface {
 
 
     Mono<RStatus<DataRes>> getUniqueState(String unique, Long id);
     Mono<RStatus<DataRes>> getUniqueState(String unique, Long id);
 
 
+
+    Mono<RStatus<DataRes>> getUniqueStateArticle(String unique, Long id);
+
     Mono<RStatus<ByListIdReturnUnlockId>> byListIdReturnUnlockId(ByListIdReturnUnlockId request);
     Mono<RStatus<ByListIdReturnUnlockId>> byListIdReturnUnlockId(ByListIdReturnUnlockId request);
 
 
 }
 }

+ 639 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/article/ArticleSercieImp.java

@@ -0,0 +1,639 @@
+package com.webflux.launchadmin.mysql.service.article;
+
+
+import cn.hutool.core.util.RandomUtil;
+import com.webflux.launchadmin.config.BaseContextHandler;
+import com.webflux.launchadmin.global.BaseException;
+import com.webflux.launchadmin.mysql.controller.article.request.*;
+import com.webflux.launchadmin.mysql.controller.article.res.*;
+import com.webflux.launchadmin.mysql.entity.article.*;
+import com.webflux.launchadmin.mysql.service.sourceMaterial.SourceMaterialInterface;
+import com.webflux.launchadmin.mysql.service.sourceMaterial.data.sql.Where;
+import com.webflux.launchcommon.returnObj.Paged;
+import com.webflux.launchcommon.returnObj.RStatus;
+import com.webflux.launchcommon.utils.R;
+import jakarta.annotation.Resource;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
+import org.springframework.data.relational.core.query.Criteria;
+import org.springframework.data.relational.core.query.Query;
+import org.springframework.data.relational.core.query.Update;
+import org.springframework.stereotype.Service;
+import reactor.core.publisher.Mono;
+
+import java.time.ZonedDateTime;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+
+@Service
+public class ArticleSercieImp implements ArticleServiceInterface {
+    @Autowired
+    private SourceMaterialInterface sourceMaterialInterface;
+    @Resource
+    private R2dbcEntityTemplate template;
+
+    @Override
+    public Mono<RStatus<Paged<Classification>>> getClassificationList() {
+        return sourceMaterialInterface.page(List.of(), Classification.class, 1000, 1);
+    }
+
+    @Override
+    public Mono<RStatus<Boolean>> addClassification(ClassificationReq save) {
+        String userId = BaseContextHandler.getUserId();
+        String userName = BaseContextHandler.getUserName();
+        Classification classification = new Classification(null, save.getName(), save.getStIx(), save.getShowType(), userName, userId, ZonedDateTime.now(), null);
+        Mono<Boolean> mono = template.insert(classification)
+                .onErrorResume(throwable -> Mono.error(new BaseException("保存失败:" + throwable.getMessage())))
+                .flatMap(classification1 -> Mono.just(true));
+        return RStatus.success(mono);
+    }
+
+    @Override
+    public Mono<RStatus<Boolean>> updateClassification(ClassificationReq save) {
+        Mono<Boolean> mono1 = template.selectOne(Query.query(Criteria.where("id").is(save.getId())), Classification.class)
+                .switchIfEmpty(Mono.error(new BaseException("id查询为空")))
+                .onErrorResume(throwable -> Mono.error(new BaseException("查询异常:" + throwable.getMessage())))
+                .flatMap(classification -> {
+                    Classification classificationnew =
+                            new Classification(save.getId(), save.getName(), save.getStIx(), save.getShowType(),
+                                    classification.name(), classification.createId(), classification.createdAt(), ZonedDateTime.now());
+                    return template.update(classificationnew)
+                            .onErrorResume(throwable -> Mono.error(new BaseException("保存失败:" + throwable.getMessage())))
+                            .flatMap(classification1 -> Mono.just(true));
+                });
+        return RStatus.success(mono1);
+    }
+
+    @Override
+    public Mono<RStatus<Boolean>> deleteClassification(Long id) {
+        Mono<Boolean> id1 = template.delete(Query.query(Criteria.where("id").is(id)), Classification.class)
+                .onErrorResume(throwable -> Mono.error(new BaseException("移除失败:" + throwable.getMessage())))
+                .flatMap(aLong -> Mono.just(true));
+        return RStatus.success(id1);
+    }
+    @Override
+    public Mono<RStatus<Classification>> getClassification(Long id) {
+        Mono<Classification> id1 = template.selectOne(Query.query(Criteria.where("id").is(id)), Classification.class)
+                .onErrorResume(throwable -> Mono.error(new BaseException("查询失败:" + throwable.getMessage())));
+        return RStatus.success(id1);
+    }
+
+    @Override
+    public Mono<RStatus<LabelManagement>> getLable(Long id) {
+        Mono<LabelManagement> id1 = template.selectOne(Query.query(Criteria.where("id").is(id)), LabelManagement.class)
+                .onErrorResume(throwable -> Mono.error(new BaseException("查询失败:" + throwable.getMessage())));
+        return RStatus.success(id1);
+    }
+
+    @Override
+    public Mono<RStatus<Boolean>> deleteArticle(Long id) {
+        Update deleted_at = Update.update("deleted_at", ZonedDateTime.now());
+        Mono<Boolean> id1 = template.update(Query.query(Criteria.where("id").is(id)),deleted_at, Article.class)
+                .onErrorResume(throwable -> Mono.error(new BaseException("移除失败:" + throwable.getMessage())))
+                .flatMap(aLong -> Mono.just(true));
+        return RStatus.success(id1);
+    }
+
+    @Override
+    public Mono<RStatus<LabelManagement>> getArticle(Long id) {
+        Mono<LabelManagement> id1 = template.selectOne(Query.query(Criteria.where("id").is(id)), LabelManagement.class)
+                .onErrorResume(throwable -> Mono.error(new BaseException("查询失败:" + throwable.getMessage())));
+        return RStatus.success(id1);
+    }
+
+    @Override
+    public Mono<RStatus<Paged<LabelManagementRes>>> getLableList(String name,Integer page,Integer size) {
+        ArrayList<Where> wheres = new ArrayList<>();
+        if (!"".equals(name.trim())) {
+            Where where = new Where();
+            where.setValue(name);
+            where.setKey("name");
+            where.setWhereType(2);
+        }
+        return  sourceMaterialInterface.pageAndFunctionRtE(wheres, LabelManagement.class,size,page,labelManagements -> {
+            Mono<List<Classification>> listMono = Mono.just(List.of());
+            if (!labelManagements.isEmpty()) {
+                List<Long> collect = labelManagements.stream().map(LabelManagement::classificationId).collect(Collectors.toList());
+                if (!collect.isEmpty()) {
+                    listMono = template.select(Query.query(Criteria.where("id").in(collect)).columns("id","name"), Classification.class).collectList();
+                }
+            }
+            return Mono.zip(Mono.just(labelManagements), listMono).flatMap(objects -> {
+                List<LabelManagement> t1 = objects.getT1();
+                List<Classification> t2 = objects.getT2();
+                List<LabelManagementRes> labelManagementRes1 = new ArrayList<>();
+                t1.stream().<Consumer<Classification>>map(labelManagement -> classification -> {
+                    Long aLong = labelManagement.classificationId();
+                    Long id = classification.id();
+                    if (id.equals(aLong)) {
+                        LabelManagementRes labelManagementRes = new LabelManagementRes();
+                        labelManagementRes.setId(labelManagement.id());
+                        labelManagementRes.setClassificationName(classification.name());
+                        labelManagementRes.setIsTop(labelManagement.isTop());
+                        labelManagementRes.setName(labelManagement.name());
+                        labelManagementRes.setUrl(labelManagement.url());
+                        labelManagementRes.setStIx(labelManagement.stIx());
+                        labelManagementRes1.add(labelManagementRes);
+                    }
+                }).forEach(t2::forEach);
+                List<LabelManagementRes> collect = labelManagementRes1.stream().sorted(Comparator.comparing(LabelManagementRes::getStIx)).collect(Collectors.toList());
+                return Mono.just(collect);
+            });
+        });
+    }
+
+    @Override
+    public Mono<RStatus<Boolean>> addLable(LabelReq save) {
+        String userId = BaseContextHandler.getUserId();
+        String userName = BaseContextHandler.getUserName();
+        LabelManagement labelManagement = new LabelManagement(null, save.getName(),
+                save.getStIx(), save.getUrl(), save.getClassificationId(),save.getClassificationName(),
+                save.getIsTop(), userName, userId, ZonedDateTime.now(), null);
+        Mono<Boolean> mono = template.insert(labelManagement)
+                .onErrorResume(throwable -> Mono.error(new BaseException("保存失败:" + throwable.getMessage()))).flatMap(labelManagement1 -> Mono.just(true));
+        return RStatus.success(mono);
+    }
+
+    @Override
+    public Mono<RStatus<Boolean>> updateLable(LabelReq save) {
+        Mono<Boolean> mono1 = template.selectOne(Query.query(Criteria.where("id").is(save.getId())), LabelManagement.class)
+                .switchIfEmpty(Mono.error(new BaseException("id查询为空")))
+                .onErrorResume(throwable -> Mono.error(new BaseException("查询异常:" + throwable.getMessage())))
+                .flatMap(labelManagement -> {
+                    LabelManagement labelManagement1 = new LabelManagement(save.getId(), save.getName(),
+                            save.getStIx(), save.getUrl(), save.getClassificationId(),save.getClassificationName(),
+                            save.getIsTop(), labelManagement.createUser(), labelManagement.createId(), labelManagement.createdAt(), ZonedDateTime.now());
+                    return template.update(labelManagement1)
+                            .onErrorResume(throwable -> Mono.error(new BaseException("保存失败:" + throwable.getMessage())))
+                            .flatMap(classification1 -> Mono.just(true));
+                });
+        return RStatus.success(mono1);
+    }
+
+    @Override
+    public Mono<RStatus<Boolean>> deleteLable(Long id) {
+        Mono<Boolean> id1 = template.delete(Query.query(Criteria.where("id").is(id)), LabelManagement.class)
+                .onErrorResume(throwable -> Mono.error(new BaseException("移除失败:" + throwable.getMessage())))
+                .flatMap(aLong -> Mono.just(true));
+        return RStatus.success(id1);
+    }
+
+    @Override
+    public Mono<RStatus<Paged<ArticleRes>>> getArticleList(ArticleReq articleReq) {
+        StringBuilder startSql = new StringBuilder();
+        startSql.append("SELECT id,front_cover,title,date_time_str,author,labels,send_friends,send_friends_circle,ad FROM article WHERE deleted_at IS  NULL ");
+        StringBuilder startSqlCount= new StringBuilder(" SELECT id FROM article WHERE deleted_at IS  NULL ");
+        StringBuilder stringBuilder =new StringBuilder();
+        Criteria empty =Criteria.empty();
+        if(Objects.nonNull(articleReq.getClassificationId())){
+            Long classificationId = articleReq.getClassificationId();
+             empty = empty.and("classification_id").is(classificationId);
+        }
+        if(Objects.nonNull(articleReq.getLabelId())){
+            Long labelId = articleReq.getLabelId();
+            empty = empty.and("id").is(labelId);
+        }
+        Mono<List<LabelManagement>> listMono;
+        if (!empty.isEmpty()) {
+           listMono = template.select(Query.query(empty), LabelManagement.class).collectList()
+                    .onErrorResume(throwable -> Mono.error(new BaseException("查询标签异常::" + throwable.getMessage())));
+        }else {
+            listMono= Mono.just(List.of());
+        }
+        if(Objects.nonNull(articleReq.getTitle()) && !"".equals(articleReq.getTitle().trim())){
+            stringBuilder.append(" AND  title like ");
+            stringBuilder.append("%").append(articleReq.getTitle()).append("%");
+        }
+        if(Objects.nonNull(articleReq.getAuthor()) && !"".equals(articleReq.getAuthor().trim())){
+            stringBuilder.append(" AND  author like ");
+            stringBuilder.append("%").append(articleReq.getAuthor()).append("%");
+        }
+        if(Objects.nonNull(articleReq.getDateTimeStr()) && !"".equals(articleReq.getDateTimeStr().trim())){
+            String dateTimeStr = articleReq.getDateTimeStr();
+            String[] s = dateTimeStr.split("_");
+            if (s.length > 1) {
+                stringBuilder.append(" AND  date_time_str > ");
+                stringBuilder.append(s[0]);
+                stringBuilder.append(" AND  date_time_str < ");
+                stringBuilder.append(s[1]);
+            }
+        }
+        Mono<Paged<ArticleRes>> pagedMono = listMono.flatMap(labelManagements -> {
+            if (!labelManagements.isEmpty()) {
+                labelManagements.stream().map(LabelManagement::name).forEach(labelManagement -> {
+                    stringBuilder.append(" OR  labels like ");
+                    stringBuilder.append("%").append(labelManagement).append("%");
+                });
+            }
+            StringBuilder stringBuilderPage = new StringBuilder();
+            stringBuilderPage.append(" LIMIT ");
+            stringBuilderPage.append(articleReq.getSize());
+            stringBuilderPage.append(" OFFSET ");
+            stringBuilderPage.append((articleReq.getPage() - 1) * articleReq.getSize());
+            Mono<List<Long>> listMono2 = template.getDatabaseClient().sql(startSqlCount.toString() + stringBuilder).map((row, rowMetadata) -> 1L).all().collectList();
+            return listMono2.flatMap(list -> {
+                Mono<List<ArticleRes>> listMono1 = template.getDatabaseClient().sql(startSql.toString()+stringBuilder+stringBuilderPage).map((row, rowMetadata) -> {
+                    ArticleRes articleRes = new ArticleRes();
+                    articleRes.setId(row.get("id", Long.class));
+                    articleRes.setTitle(row.get("title", String.class));
+                    articleRes.setDateTimeStr(row.get("date_time_str", String.class));
+                    articleRes.setAuthor(row.get("author", String.class));
+                    articleRes.setLabels(row.get("labels", String.class));
+                    articleRes.setSendFriends(row.get("send_friends", Integer.class));
+                    articleRes.setSendFriendsCircle(row.get("send_friends_circle", Integer.class));
+                    articleRes.setAd(row.get("ad", Integer.class));
+                    articleRes.setFrontCover(row.get("front_cover", String.class));
+                    labelManagements.stream()
+                            .filter(labelManagement -> Objects.nonNull(articleRes.getLabels())
+                                    && articleRes.getLabels().contains(labelManagement.name())).map(LabelManagement::classificationName).findFirst()
+                            .ifPresent(articleRes::setClassificationName);
+                    return articleRes;
+                }).all().collectList();
+                return Mono.zip(Mono.just(list.size()), listMono1).flatMap(objects -> {
+                    Paged<ArticleRes> articleResPaged =
+                            new Paged<>(Long.valueOf(objects.getT1()),
+                                    objects.getT2(), articleReq.getPage(), articleReq.getSize());
+                    return Mono.just(articleResPaged);
+                });
+            });
+        });
+        return RStatus.successList(pagedMono);
+    }
+    @Override
+    public Mono<RStatus<Boolean>> articleUpdate(ArticleUpdate save) {
+        Mono<Boolean> mono1 = template.selectOne(Query.query(Criteria.where("id").is(save.getId())), Article.class)
+                .switchIfEmpty(Mono.error(new BaseException("id查询为空")))
+                .onErrorResume(throwable -> Mono.error(new BaseException("查询异常:" + throwable.getMessage())))
+                .flatMap(articleOld -> {
+                    Article article = new Article(save.getId(),
+                            articleOld.obtainId(),
+                            save.getTitle(),
+                            save.getDateTimeStr(),
+                            save.getAuthor(),
+                            save.getLabels(),
+                            articleOld.audioLink(),
+                            articleOld.audioName(),
+                            articleOld.videoLink(),
+                            articleOld.htmlContent(),
+                            articleOld.createUser(),
+                            articleOld.createId(),
+                            articleOld.createdAt(),
+                            ZonedDateTime.now(),
+                            articleOld.deletedAt(),
+                            articleOld.sendFriends(),
+                            articleOld.sendFriendsCircle(),
+                            articleOld.ad(),
+                            save.getFrontCover(),
+                            save.getType());
+                    return template.update(article)
+                            .onErrorResume(throwable -> Mono.error(new BaseException("保存失败:" + throwable.getMessage())))
+                            .flatMap(classification1 -> Mono.just(true));
+                });
+        return RStatus.success(mono1);
+    }
+
+    @Override
+    public Mono<RStatus<Boolean>> articleUpdateSend(ArticleState save) {
+        Update updated_at = Update.update("updated_at", ZonedDateTime.now());
+        if (Objects.nonNull(save.getAd())) {
+            updated_at=updated_at.set("ad",save.getAd());
+        }
+        if (Objects.nonNull(save.getSendFriends())) {
+            updated_at=updated_at.set("send_friends",save.getSendFriends());
+        }
+        if (Objects.nonNull(save.getSendFriendsCircle())) {
+            updated_at=updated_at.set("send_friends_circle",save.getSendFriendsCircle());
+        }
+        Mono<Boolean> id = template.update(Query.query(Criteria.where("id").is(save.getId())), updated_at, Article.class)
+                .onErrorResume(throwable -> Mono.error(new BaseException("修改失败:" + throwable.getMessage()))).flatMap(aLong -> Mono.just(true));
+        return RStatus.success(id);
+    }
+
+    @Override
+    public Mono<RStatus<Boolean>> articleAdd(ArticleSave save) {
+        String userId = BaseContextHandler.getUserId();
+        String userName = BaseContextHandler.getUserName();
+        Article article = new Article(null,
+                null,
+                save.getTitle(),
+                save.getDateTimeStr(),
+                save.getAuthor(),
+                save.getLabels(),
+                save.getAudioLink(),
+                save.getAudioName(),
+                save.getVideoLink(),
+                save.getHtmlContent(),
+                userName,
+                userId,
+                ZonedDateTime.now(),
+                null,
+                null,
+                save.getSendFriends(),
+                save.getSendFriendsCircle(),
+                save.getAd(),
+                save.getFrontCover(),
+                save.getType());
+        Mono<Boolean> mono = template.insert(article)
+                .onErrorResume(throwable -> Mono.error(new BaseException("保存失败" + throwable.getMessage()))).flatMap(f -> Mono.just(true));
+        return RStatus.success(mono);
+    }
+
+    @Override
+    public Mono<RStatus<Paged<LabelManagementRes>>> getOutLableList(Long classificationId, Integer page, Integer size) {
+        ArrayList<Where> wheres = new ArrayList<>();
+        if (Objects.nonNull(classificationId) && 0!=classificationId) {
+            Where where = new Where();
+            where.setValue(classificationId);
+            where.setKey("classification_id");
+            where.setWhereType(1);
+        }
+        return  sourceMaterialInterface.pageAndFunctionRtE(wheres, LabelManagement.class,size,page,labelManagements -> {
+            Mono<List<Classification>> listMono = Mono.just(List.of());
+            if (!labelManagements.isEmpty()) {
+                List<Long> collect = labelManagements.stream().map(LabelManagement::classificationId).collect(Collectors.toList());
+                if (!collect.isEmpty()) {
+                    listMono = template.select(Query.query(Criteria.where("id").in(collect)).columns("id","name"), Classification.class).collectList();
+                }
+            }
+            return Mono.zip(Mono.just(labelManagements), listMono).flatMap(objects -> {
+                List<LabelManagement> t1 = objects.getT1();
+                List<Classification> t2 = objects.getT2();
+                List<LabelManagementRes> labelManagementRes1 = new ArrayList<>();
+                t1.stream().<Consumer<Classification>>map(labelManagement -> classification -> {
+                    Long aLong = labelManagement.classificationId();
+                    Long id = classification.id();
+                    if (id.equals(aLong)) {
+                        LabelManagementRes labelManagementRes = new LabelManagementRes();
+                        labelManagementRes.setId(labelManagement.id());
+                        labelManagementRes.setClassificationName(classification.name());
+                        labelManagementRes.setIsTop(labelManagement.isTop());
+                        labelManagementRes.setName(labelManagement.name());
+                        labelManagementRes.setUrl(labelManagement.url());
+                        labelManagementRes.setStIx(labelManagement.stIx());
+                        labelManagementRes1.add(labelManagementRes);
+                    }
+                }).forEach(t2::forEach);
+                List<LabelManagementRes> collect = labelManagementRes1.stream().sorted(Comparator.comparing(LabelManagementRes::getStIx)).collect(Collectors.toList());
+                return Mono.just(collect);
+            });
+        });
+    }
+
+    @Override
+    public Mono<RStatus<Paged<ArticleOutRes>>> byLableGetArticle(Long labelId, Integer page, Integer size) {
+        StringBuilder startSql = new StringBuilder();
+        startSql.append("SELECT id,front_cover,title FROM article WHERE deleted_at IS  NULL ");
+        StringBuilder startSqlCount= new StringBuilder(" SELECT id FROM article WHERE deleted_at IS  NULL ");
+        StringBuilder stringBuilder =new StringBuilder();
+        Criteria empty =Criteria.empty();
+
+        if(Objects.nonNull(labelId)){
+            empty = empty.and("id").is(labelId);
+        }
+        Mono<List<LabelManagement>> listMono;
+        if (!empty.isEmpty()) {
+            listMono = template.select(Query.query(empty), LabelManagement.class).collectList()
+                    .onErrorResume(throwable -> Mono.error(new BaseException("查询标签异常::" + throwable.getMessage())));
+        }else {
+            listMono= Mono.just(List.of());
+        }
+        Mono<Paged<ArticleOutRes>> pagedMono = listMono.flatMap(labelManagements -> {
+            if (!labelManagements.isEmpty()) {
+                labelManagements.stream().map(LabelManagement::name).forEach(labelManagement -> {
+                    stringBuilder.append(" OR  labels like ");
+                    stringBuilder.append("%").append(labelManagement).append("%");
+                });
+            }else {
+                Paged<ArticleOutRes> articleResPaged = new Paged<>(0,List.of(), page, size);
+                return Mono.just(articleResPaged);
+            }
+            StringBuilder stringBuilderPage = new StringBuilder();
+            stringBuilderPage.append(" LIMIT ");
+            stringBuilderPage.append(size);
+            stringBuilderPage.append(" OFFSET ");
+            stringBuilderPage.append((page - 1) * size);
+            Mono<List<Long>> listMono2 = template.getDatabaseClient().sql(startSqlCount.toString() + stringBuilder).map((row, rowMetadata) -> 1L).all().collectList();
+            return listMono2.flatMap(list -> {
+                Mono<List<ArticleOutRes>> listMono1 = template.getDatabaseClient().sql(startSql.toString()+stringBuilder+stringBuilderPage).map((row, rowMetadata) -> {
+                    ArticleOutRes articleRes = new ArticleOutRes();
+                    articleRes.setId(row.get("id", Long.class));
+                    articleRes.setTitle(row.get("title", String.class));
+//                    articleRes.setDateTimeStr(row.get("date_time_str", String.class));
+//                    articleRes.setAuthor(row.get("author", String.class));
+//                    articleRes.setLabels(row.get("labels", String.class));
+//                    articleRes.setSendFriends(row.get("send_friends", Integer.class));
+//                    articleRes.setSendFriendsCircle(row.get("send_friends_circle", Integer.class));
+//                    articleRes.setAd(row.get("ad", Integer.class));
+                    articleRes.setFrontCover(row.get("front_cover", String.class));
+//                    articleRes.setAudioLink(row.get("audio_link", String.class));
+//                    articleRes.setAudioName(row.get("audio_name", String.class));
+//                    articleRes.setVideoLink(row.get("video_link", String.class));
+//                    articleRes.setHtmlContent(row.get("html_content", String.class));
+//                    articleRes.setType(row.get("type", String.class));
+//                    labelManagements.stream()
+//                            .filter(labelManagement -> Objects.nonNull(articleRes.getLabels())
+//                                    && articleRes.getLabels().contains(labelManagement.name())).map(LabelManagement::classificationName).findFirst()
+//                            .ifPresent(articleRes::setClassificationName);
+                    return articleRes;
+                }).all().collectList();
+                return Mono.zip(Mono.just(list.size()), listMono1).flatMap(objects -> {
+                    List<ArticleOutRes> collect = objects.getT2().stream().sorted(Comparator.comparing(ArticleOutRes::getDateTimeStr)).collect(Collectors.toList());
+                    Paged<ArticleOutRes> articleResPaged =
+                            new Paged<>(Long.valueOf(objects.getT1()),collect
+                                   , page, size);
+                    return Mono.just(articleResPaged);
+                });
+            });
+        });
+        return RStatus.successList(pagedMono);
+    }
+
+    @Override
+    public Mono<RStatus<List<LabelManagementRes>>> byNamegetLable(String name) {
+        Mono<List<LabelManagementRes>> listMono = template.select(Query.query(Criteria.where("name").is(name)), LabelManagement.class)
+                .switchIfEmpty(Mono.error(new BaseException("查询内容不存在")))
+                .flatMap(labelManagement -> {
+                    LabelManagementRes labelManagementRes = new LabelManagementRes();
+                    labelManagementRes.setName(labelManagement.name());
+                    labelManagementRes.setUrl(labelManagement.url());
+                    labelManagementRes.setId(labelManagement.id());
+                    labelManagementRes.setIsTop(labelManagement.isTop());
+                    labelManagementRes.setStIx(labelManagement.stIx());
+                    return Mono.just(labelManagementRes);
+                }).collectList().flatMap(labelManagementRes -> {
+                    List<LabelManagementRes> collect = labelManagementRes.stream().sorted(Comparator.comparing(LabelManagementRes::getStIx)).collect(Collectors.toList());
+                    return Mono.just(collect);
+                });
+        return RStatus.success(listMono);
+    }
+
+    @Override
+    public Mono<RStatus<List<ArticleUnlockStateRes>>> byUserIdGetUnlockState(String userId, Long articleId) {
+        Mono<List<ArticleUnlockStateRes>> listMono = template.selectOne(Query.query(Criteria.where("user_id").is(userId)), UserInfo.class)
+                .switchIfEmpty(template.insert(new UserInfo(null, userId, ZonedDateTime.now())))
+                .onErrorResume(throwable -> Mono.error(new BaseException("查询用户信息失败")))
+                .flatMap(userInfo -> {
+                            Criteria user_info_id = Criteria.where("user_info_id").is(userInfo.id());
+                            if (articleId != 0) {
+                                user_info_id = user_info_id.and("article_id").is(articleId);
+                            }
+                            return template.select(Query
+                                    .query(user_info_id), ArticleUnlockState.class)
+                                    .collectList()
+                                    .switchIfEmpty(Mono.just(List.of()))
+                                    .onErrorResume(throwable -> Mono.error(new BaseException("查询或保存用户解锁文章状态失败")))
+                                    .flatMap(articleUnlockStates -> {
+                                        List<ArticleUnlockStateRes> collect = articleUnlockStates.stream().map(articleUnlockState -> {
+                                            ArticleUnlockStateRes articleUnlockStateRes = new ArticleUnlockStateRes();
+                                            articleUnlockStateRes.setArticleId(articleUnlockState.articleId());
+                                            return articleUnlockStateRes;
+                                        }).collect(Collectors.toList());
+                                        return Mono.just(collect);
+                                    });
+                        }
+                );
+        return RStatus.success(listMono);
+    }
+
+    @Override
+    public Mono<RStatus<AppidDomainRes>> getdomain() {
+        Mono<AppidDomainRes> appidDomainResMono = template.select(AppidDomain.class).all().collectList().flatMap(appidDomains -> {
+            int i = RandomUtil.randomInt(0, appidDomains.size());
+            AppidDomain appidDomain = appidDomains.get(i);
+            AppidDomainRes appidDomainRes = new AppidDomainRes();
+            appidDomainRes.setAppid(appidDomain.appid());
+            appidDomainRes.setDomain(appidDomain.domain());
+            return Mono.just(appidDomainRes);
+        });
+        return RStatus.success(appidDomainResMono);
+    }
+
+    @Override
+    public Mono<RStatus<ArticleOutRes>> byArticleIdGet(Long articleId) {
+        Mono<ArticleOutRes> articleOutResMono = template.selectOne(Query.query(Criteria.where("id").is(articleId)), Article.class)
+                .switchIfEmpty(Mono.error(new BaseException("查询内容为空")))
+                .flatMap(article -> {
+                    ArticleOutRes articleRes = new ArticleOutRes();
+                    articleRes.setId(article.id());
+                    articleRes.setTitle(article.title());
+                    articleRes.setDateTimeStr(article.dateTimeStr());
+                    articleRes.setAuthor(article.author());
+                    articleRes.setLabels(article.labels());
+                    articleRes.setSendFriends(article.sendFriends());
+                    articleRes.setSendFriendsCircle(article.sendFriendsCircle());
+                    articleRes.setAd(article.ad());
+                    articleRes.setFrontCover(article.frontCover());
+                    articleRes.setAudioLink(article.audioLink());
+                    articleRes.setAudioName(article.audioName());
+                    articleRes.setVideoLink(article.videoLink());
+                    articleRes.setHtmlContent(article.htmlContent());
+                    articleRes.setType(article.type());
+                    return Mono.just(articleRes);
+                });
+        return RStatus.success(articleOutResMono);
+    }
+
+    @Override
+    public Mono<RStatus<ArticleOutRes>> randomNextPage() {
+        Mono<ArticleOutRes> articleMono = template.select(Query.query(Criteria.empty()).columns("id"), Article.class).collectList()
+                .flatMap(articles -> {
+                    int i = RandomUtil.randomInt(0, articles.size());
+                    Article article = articles.get(i);
+                    Mono<Article> id = template.selectOne(Query.query(Criteria.where("id").is(article.id())), Article.class);
+                    return id;
+                }).flatMap(article -> {
+                    ArticleOutRes articleRes = new ArticleOutRes();
+                    articleRes.setId(article.id());
+                    articleRes.setTitle(article.title());
+                    articleRes.setDateTimeStr(article.dateTimeStr());
+                    articleRes.setAuthor(article.author());
+                    articleRes.setLabels(article.labels());
+                    articleRes.setSendFriends(article.sendFriends());
+                    articleRes.setSendFriendsCircle(article.sendFriendsCircle());
+                    articleRes.setAd(article.ad());
+                    articleRes.setFrontCover(article.frontCover());
+                    articleRes.setAudioLink(article.audioLink());
+                    articleRes.setAudioName(article.audioName());
+                    articleRes.setVideoLink(article.videoLink());
+                    articleRes.setHtmlContent(article.htmlContent());
+                    articleRes.setType(article.type());
+                    return Mono.just(articleRes);
+                });
+        return RStatus.success(articleMono);
+    }
+
+    @Override
+    public Mono<RStatus<Paged<ArticleOutRes>>> byLableNameGetArticle(String name, Integer page, Integer size) {
+        StringBuilder startSql = new StringBuilder();
+        startSql.append("SELECT id,front_cover,title FROM article WHERE deleted_at IS  NULL ");
+        StringBuilder startSqlCount= new StringBuilder(" SELECT id FROM article WHERE deleted_at IS  NULL ");
+        StringBuilder stringBuilder =new StringBuilder();
+        Criteria empty =Criteria.empty();
+        if(Objects.nonNull(name)){
+            empty = empty.and("name").is(name);
+        }
+        Mono<List<LabelManagement>> listMono;
+        if (!empty.isEmpty()) {
+            listMono = template.select(Query.query(empty), LabelManagement.class).collectList()
+                    .onErrorResume(throwable -> Mono.error(new BaseException("查询标签异常::" + throwable.getMessage())));
+        }else {
+            listMono= Mono.just(List.of());
+        }
+        Mono<Paged<ArticleOutRes>> pagedMono = listMono.flatMap(labelManagements -> {
+            if (!labelManagements.isEmpty()) {
+                labelManagements.stream().map(LabelManagement::name).forEach(labelManagement -> {
+                    stringBuilder.append(" OR  labels like ");
+                    stringBuilder.append("%").append(labelManagement).append("%");
+                });
+            }else {
+                Paged<ArticleOutRes> articleResPaged =
+                        new Paged<>(0,List.of()
+                                , page, size);
+                return Mono.just(articleResPaged);
+            }
+            StringBuilder stringBuilderPage = new StringBuilder();
+            stringBuilderPage.append(" LIMIT ");
+            stringBuilderPage.append(size);
+            stringBuilderPage.append(" OFFSET ");
+            stringBuilderPage.append((page - 1) * size);
+            Mono<List<Long>> listMono2 = template.getDatabaseClient().sql(startSqlCount.toString() + stringBuilder).map((row, rowMetadata) -> 1L).all().collectList();
+            return listMono2.flatMap(list -> {
+                Mono<List<ArticleOutRes>> listMono1 = template.getDatabaseClient().sql(startSql.toString()+stringBuilder+stringBuilderPage).map((row, rowMetadata) -> {
+                    ArticleOutRes articleRes = new ArticleOutRes();
+                    articleRes.setId(row.get("id", Long.class));
+                    articleRes.setTitle(row.get("title", String.class));
+//                    articleRes.setDateTimeStr(row.get("date_time_str", String.class));
+//                    articleRes.setAuthor(row.get("author", String.class));
+//                    articleRes.setLabels(row.get("labels", String.class));
+//                    articleRes.setSendFriends(row.get("send_friends", Integer.class));
+//                    articleRes.setSendFriendsCircle(row.get("send_friends_circle", Integer.class));
+//                    articleRes.setAd(row.get("ad", Integer.class));
+                    articleRes.setFrontCover(row.get("front_cover", String.class));
+//                    articleRes.setAudioLink(row.get("audio_link", String.class));
+//                    articleRes.setAudioName(row.get("audio_name", String.class));
+//                    articleRes.setVideoLink(row.get("video_link", String.class));
+//                    articleRes.setHtmlContent(row.get("html_content", String.class));
+//                    articleRes.setType(row.get("type", String.class));
+//                    labelManagements.stream()
+//                            .filter(labelManagement -> Objects.nonNull(articleRes.getLabels())
+//                                    && articleRes.getLabels().contains(labelManagement.name())).map(LabelManagement::classificationName).findFirst()
+//                            .ifPresent(articleRes::setClassificationName);
+                    return articleRes;
+                }).all().collectList();
+                return Mono.zip(Mono.just(list.size()), listMono1).flatMap(objects -> {
+                    List<ArticleOutRes> collect = objects.getT2().stream().sorted(Comparator.comparing(ArticleOutRes::getDateTimeStr)).collect(Collectors.toList());
+                    Paged<ArticleOutRes> articleResPaged =
+                            new Paged<>(Long.valueOf(objects.getT1()),collect
+                                    , page, size);
+                    return Mono.just(articleResPaged);
+                });
+            });
+        });
+        return RStatus.successList(pagedMono);
+    }
+
+}

+ 62 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/article/ArticleServiceInterface.java

@@ -0,0 +1,62 @@
+package com.webflux.launchadmin.mysql.service.article;
+
+import com.webflux.launchadmin.mysql.controller.article.request.*;
+import com.webflux.launchadmin.mysql.controller.article.res.*;
+import com.webflux.launchadmin.mysql.entity.article.Article;
+import com.webflux.launchadmin.mysql.entity.article.Classification;
+import com.webflux.launchadmin.mysql.entity.article.LabelManagement;
+import com.webflux.launchcommon.returnObj.Paged;
+import com.webflux.launchcommon.returnObj.RStatus;
+import reactor.core.publisher.Mono;
+
+import java.util.List;
+
+public interface ArticleServiceInterface {
+    Mono<RStatus<Paged<Classification>>> getClassificationList();
+
+    Mono<RStatus<Boolean>> addClassification(ClassificationReq save);
+
+    Mono<RStatus<Boolean>> updateClassification(ClassificationReq save);
+
+    Mono<RStatus<Boolean>> deleteClassification(Long id);
+
+    Mono<RStatus<Paged<LabelManagementRes>>> getLableList(String name,Integer page,Integer size);
+
+    Mono<RStatus<Boolean>> addLable(LabelReq save);
+
+    Mono<RStatus<Boolean>> updateLable(LabelReq save);
+
+    Mono<RStatus<Boolean>> deleteLable(Long id);
+
+    Mono<RStatus<Paged<ArticleRes>>> getArticleList(ArticleReq articleReq);
+
+    Mono<RStatus<Classification>> getClassification(Long id);
+
+    Mono<RStatus<LabelManagement>> getLable(Long id);
+
+    Mono<RStatus<Boolean>> deleteArticle(Long id);
+
+    Mono<RStatus<LabelManagement>> getArticle(Long id);
+
+    Mono<RStatus<Boolean>> articleUpdate(ArticleUpdate save);
+
+    Mono<RStatus<Boolean>> articleUpdateSend(ArticleState save);
+
+    Mono<RStatus<Boolean>> articleAdd(ArticleSave save);
+
+    Mono<RStatus<Paged<LabelManagementRes>>> getOutLableList(Long classificationId, Integer page, Integer size);
+
+    Mono<RStatus<Paged<ArticleOutRes>>> byLableGetArticle(Long name, Integer page, Integer size);
+
+    Mono<RStatus<List<LabelManagementRes>>> byNamegetLable(String name);
+
+    Mono<RStatus<List<ArticleUnlockStateRes>>> byUserIdGetUnlockState(String userId, Long articleId);
+
+    Mono<RStatus<AppidDomainRes>> getdomain();
+
+    Mono<RStatus<ArticleOutRes>> byArticleIdGet(Long articleId);
+
+    Mono<RStatus<ArticleOutRes>> randomNextPage();
+
+    Mono<RStatus<Paged<ArticleOutRes>>> byLableNameGetArticle(String name, Integer page, Integer size);
+}

+ 6 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/SourceMaterialImpl.java

@@ -78,6 +78,12 @@ public class SourceMaterialImpl implements SourceMaterialInterface{
                 if(entry.getWhereType()==3){
                 if(entry.getWhereType()==3){
                     criteria=criteria.and(key).in(value);
                     criteria=criteria.and(key).in(value);
                 }
                 }
+                if(entry.getWhereType()==4){
+                    criteria=criteria.and(key).greaterThan(value);
+                }
+                if(entry.getWhereType()==5){
+                    criteria=criteria.and(key).lessThan(value);
+                }
             }
             }
         }
         }
         Query query = Query.query(criteria);
         Query query = Query.query(criteria);

+ 1 - 1
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/sourceMaterial/data/sql/Where.java

@@ -7,7 +7,7 @@ public class Where {
     private String key;
     private String key;
     private Object value;
     private Object value;
     /**
     /**
-     * 1:eq 2:like 3:in
+     * 1:eq 2:like 3:in 4:> 5:<
      */
      */
     private Integer whereType;
     private Integer whereType;
 }
 }