Selaa lähdekoodia

feat: 期刊模块(从his_scrm移动过来)

caoliqin 16 tuntia sitten
vanhempi
commit
26275ffd96
34 muutettua tiedostoa jossa 2078 lisäystä ja 2 poistoa
  1. 99 0
      fs-admin/src/main/java/com/fs/store/controller/FsHomeArticleCategoryController.java
  2. 94 0
      fs-admin/src/main/java/com/fs/store/controller/FsHomeArticleController.java
  3. 93 0
      fs-admin/src/main/java/com/fs/store/controller/FsHomeArticleViewController.java
  4. 10 0
      fs-service-system/src/main/java/com/fs/store/domain/FsDoctorArticle.java
  5. 107 0
      fs-service-system/src/main/java/com/fs/store/domain/FsHomeArticle.java
  6. 54 0
      fs-service-system/src/main/java/com/fs/store/domain/FsHomeArticleCategory.java
  7. 62 0
      fs-service-system/src/main/java/com/fs/store/domain/FsHomeArticleView.java
  8. 1 1
      fs-service-system/src/main/java/com/fs/store/mapper/FsDoctorArticleMapper.java
  9. 72 0
      fs-service-system/src/main/java/com/fs/store/mapper/FsHomeArticleCategoryMapper.java
  10. 89 0
      fs-service-system/src/main/java/com/fs/store/mapper/FsHomeArticleMapper.java
  11. 73 0
      fs-service-system/src/main/java/com/fs/store/mapper/FsHomeArticleViewMapper.java
  12. 1 1
      fs-service-system/src/main/java/com/fs/store/mapper/FsStoreProductMapper.java
  13. 26 0
      fs-service-system/src/main/java/com/fs/store/param/HomeArticleListParam.java
  14. 23 0
      fs-service-system/src/main/java/com/fs/store/param/home/HomeArticleCategoryPageParam.java
  15. 26 0
      fs-service-system/src/main/java/com/fs/store/param/home/HomeArticlePageParam.java
  16. 23 0
      fs-service-system/src/main/java/com/fs/store/param/home/HomeArticleViewListParam.java
  17. 71 0
      fs-service-system/src/main/java/com/fs/store/service/IFsHomeArticleCategoryService.java
  18. 80 0
      fs-service-system/src/main/java/com/fs/store/service/IFsHomeArticleService.java
  19. 80 0
      fs-service-system/src/main/java/com/fs/store/service/IFsHomeArticleViewService.java
  20. 101 0
      fs-service-system/src/main/java/com/fs/store/service/impl/FsHomeArticleCategoryServiceImpl.java
  21. 120 0
      fs-service-system/src/main/java/com/fs/store/service/impl/FsHomeArticleServiceImpl.java
  22. 129 0
      fs-service-system/src/main/java/com/fs/store/service/impl/FsHomeArticleViewServiceImpl.java
  23. 4 0
      fs-service-system/src/main/java/com/fs/store/vo/FsDoctorArticleUVO.java
  24. 3 0
      fs-service-system/src/main/java/com/fs/store/vo/FsDoctorArticleVO.java
  25. 24 0
      fs-service-system/src/main/java/com/fs/store/vo/home/HomeArticleCategoryListVO.java
  26. 42 0
      fs-service-system/src/main/java/com/fs/store/vo/home/HomeArticleDetailsVO.java
  27. 39 0
      fs-service-system/src/main/java/com/fs/store/vo/home/HomeArticleListVO.java
  28. 20 0
      fs-service-system/src/main/java/com/fs/store/vo/home/HomeArticleViewsListVO.java
  29. 53 0
      fs-service-system/src/main/resources/db/upgrade/期刊表初始化.sql
  30. 3 0
      fs-service-system/src/main/resources/mapper/store/FsDoctorArticleMapper.xml
  31. 85 0
      fs-service-system/src/main/resources/mapper/store/FsHomeArticleCategoryMapper.xml
  32. 169 0
      fs-service-system/src/main/resources/mapper/store/FsHomeArticleMapper.xml
  33. 99 0
      fs-service-system/src/main/resources/mapper/store/FsHomeArticleViewMapper.xml
  34. 103 0
      fs-user-app/src/main/java/com/fs/app/controller/HomeArticleController.java

+ 99 - 0
fs-admin/src/main/java/com/fs/store/controller/FsHomeArticleCategoryController.java

@@ -0,0 +1,99 @@
+package com.fs.store.controller;
+
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.store.domain.FsHomeArticleCategory;
+import com.fs.store.service.IFsHomeArticleCategoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 期刊分类Controller
+ *
+ * @author fs
+ * @date 2025-05-21
+ */
+@RestController
+@RequestMapping("/store/homeCategory")
+public class FsHomeArticleCategoryController extends BaseController {
+    @Autowired
+    private IFsHomeArticleCategoryService fsHomeArticleCategoryService;
+
+    /**
+     * 查询期刊分类列表
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeCategory:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsHomeArticleCategory fsHomeArticleCategory) {
+        startPage();
+        List<FsHomeArticleCategory> list = fsHomeArticleCategoryService.selectFsHomeArticleCategoryList(fsHomeArticleCategory);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出期刊分类列表
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeCategory:export')")
+    @Log(title = "期刊分类", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsHomeArticleCategory fsHomeArticleCategory) {
+        List<FsHomeArticleCategory> list = fsHomeArticleCategoryService.selectFsHomeArticleCategoryList(fsHomeArticleCategory);
+        ExcelUtil<FsHomeArticleCategory> util = new ExcelUtil<FsHomeArticleCategory>(FsHomeArticleCategory.class);
+        return util.exportExcel(list, "homeCategory");
+    }
+
+    /**
+     * 获取期刊分类详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeCategory:query')")
+    @GetMapping(value = "/{categoryId}")
+    public AjaxResult getInfo(@PathVariable("categoryId") Long categoryId) {
+        return AjaxResult.success(fsHomeArticleCategoryService.selectFsHomeArticleCategoryById(categoryId));
+    }
+
+    /**
+     * 新增期刊分类
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeCategory:add')")
+    @Log(title = "期刊分类", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsHomeArticleCategory fsHomeArticleCategory) {
+        return toAjax(fsHomeArticleCategoryService.insertFsHomeArticleCategory(fsHomeArticleCategory));
+    }
+
+    /**
+     * 修改期刊分类
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeCategory:edit')")
+    @Log(title = "期刊分类", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsHomeArticleCategory fsHomeArticleCategory) {
+        return toAjax(fsHomeArticleCategoryService.updateFsHomeArticleCategory(fsHomeArticleCategory));
+    }
+
+    /**
+     * 删除期刊分类
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeCategory:remove')")
+    @Log(title = "期刊分类", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{categoryIds}")
+    public AjaxResult remove(@PathVariable Long[] categoryIds) {
+        return toAjax(fsHomeArticleCategoryService.deleteFsHomeArticleCategoryByIds(categoryIds));
+    }
+
+    @GetMapping("/allList")
+    public R getAllList(FsHomeArticleCategory fsHomeArticleCategory) {
+        fsHomeArticleCategory.setStatus(1);
+        List<FsHomeArticleCategory> list = fsHomeArticleCategoryService.selectFsHomeArticleCategoryList(fsHomeArticleCategory);
+        return R.ok().put("rows", list);
+    }
+
+}

+ 94 - 0
fs-admin/src/main/java/com/fs/store/controller/FsHomeArticleController.java

@@ -0,0 +1,94 @@
+package com.fs.store.controller;
+
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.store.domain.FsHomeArticle;
+import com.fs.store.service.IFsHomeArticleService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 期刊Controller
+ *
+ * @author fs
+ * @date 2025-05-21
+ */
+@RestController
+@RequestMapping("/store/homeArticle")
+public class FsHomeArticleController extends BaseController {
+    @Autowired
+    private IFsHomeArticleService fsHomeArticleService;
+
+    /**
+     * 查询期刊列表
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeArticle:list')")
+    @GetMapping("/list")
+    public R list(FsHomeArticle fsHomeArticle)
+    {
+        PageHelper.startPage(fsHomeArticle.getPageNum(), fsHomeArticle.getPageSize());
+        List<FsHomeArticle> list = fsHomeArticleService.selectFsHomeArticleList(fsHomeArticle);
+        PageInfo<FsHomeArticle> listPageInfo = new PageInfo<>(list);
+        return R.ok().put("rows", listPageInfo);
+    }
+
+    /**
+     * 导出期刊列表
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeArticle:export')")
+    @Log(title = "期刊", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsHomeArticle fsHomeArticle) {
+        List<FsHomeArticle> list = fsHomeArticleService.selectFsHomeArticleList(fsHomeArticle);
+        ExcelUtil<FsHomeArticle> util = new ExcelUtil<FsHomeArticle>(FsHomeArticle.class);
+        return util.exportExcel(list, "homArticle");
+    }
+
+    /**
+     * 获取期刊详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeArticle:query')")
+    @GetMapping(value = "/{articleId}")
+    public AjaxResult getInfo(@PathVariable("articleId") Long articleId) {
+        return AjaxResult.success(fsHomeArticleService.selectFsHomeArticleById(articleId));
+    }
+
+    /**
+     * 新增期刊
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeArticle:add')")
+    @Log(title = "期刊", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsHomeArticle fsHomeArticle) {
+        return toAjax(fsHomeArticleService.insertFsHomeArticle(fsHomeArticle));
+    }
+
+    /**
+     * 修改期刊
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeArticle:edit')")
+    @Log(title = "期刊", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsHomeArticle fsHomeArticle) {
+        return toAjax(fsHomeArticleService.updateFsHomeArticle(fsHomeArticle));
+    }
+
+    /**
+     * 删除期刊
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeArticle:remove')")
+    @Log(title = "期刊", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{articleIds}")
+    public AjaxResult remove(@PathVariable Long[] articleIds) {
+        return toAjax(fsHomeArticleService.deleteFsHomeArticleByIds(articleIds));
+    }
+}

+ 93 - 0
fs-admin/src/main/java/com/fs/store/controller/FsHomeArticleViewController.java

@@ -0,0 +1,93 @@
+package com.fs.store.controller;
+
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.store.domain.FsHomeArticleView;
+import com.fs.store.service.IFsHomeArticleViewService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 期刊阅读Controller
+ *
+ * @author fs
+ * @date 2025-05-21
+ */
+@RestController
+@RequestMapping("/store/homeView")
+public class FsHomeArticleViewController extends BaseController {
+    @Autowired
+    private IFsHomeArticleViewService fsHomeArticleViewService;
+
+    /**
+     * 查询期刊阅读列表
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeView:list')")
+    @GetMapping("/list")
+    public R list(FsHomeArticleView fsHomeArticleView) {
+        PageHelper.startPage(fsHomeArticleView.getPageNum(), fsHomeArticleView.getPageSize());
+        List<FsHomeArticleView> list = fsHomeArticleViewService.selectFsHomeArticleViewList(fsHomeArticleView);
+        PageInfo<FsHomeArticleView> listPageInfo = new PageInfo<>(list);
+        return R.ok().put("rows", listPageInfo);
+    }
+
+    /**
+     * 导出期刊阅读列表
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeView:export')")
+    @Log(title = "期刊阅读", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsHomeArticleView fsHomeArticleView) {
+        List<FsHomeArticleView> list = fsHomeArticleViewService.selectFsHomeArticleViewList(fsHomeArticleView);
+        ExcelUtil<FsHomeArticleView> util = new ExcelUtil<FsHomeArticleView>(FsHomeArticleView.class);
+        return util.exportExcel(list, "homeView");
+    }
+
+    /**
+     * 获取期刊阅读详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeView:query')")
+    @GetMapping(value = "/{viewId}")
+    public AjaxResult getInfo(@PathVariable("viewId") Long viewId) {
+        return AjaxResult.success(fsHomeArticleViewService.selectFsHomeArticleViewById(viewId));
+    }
+
+    /**
+     * 新增期刊阅读
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeView:add')")
+    @Log(title = "期刊阅读", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsHomeArticleView fsHomeArticleView) {
+        return toAjax(fsHomeArticleViewService.insertFsHomeArticleView(fsHomeArticleView));
+    }
+
+    /**
+     * 修改期刊阅读
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeView:edit')")
+    @Log(title = "期刊阅读", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsHomeArticleView fsHomeArticleView) {
+        return toAjax(fsHomeArticleViewService.updateFsHomeArticleView(fsHomeArticleView));
+    }
+
+    /**
+     * 删除期刊阅读
+     */
+    @PreAuthorize("@ss.hasPermi('store:homeView:remove')")
+    @Log(title = "期刊阅读", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{viewIds}")
+    public AjaxResult remove(@PathVariable Long[] viewIds) {
+        return toAjax(fsHomeArticleViewService.deleteFsHomeArticleViewByIds(viewIds));
+    }
+}

+ 10 - 0
fs-service-system/src/main/java/com/fs/store/domain/FsDoctorArticle.java

@@ -54,6 +54,9 @@ public class FsDoctorArticle extends BaseEntity
 
     private String avatar;
 
+    @Excel(name = "视频类型:1-横屏视频;2-竖屏视频")
+    private Integer videoType;
+
 
     public String getVideoUrl() {
         return videoUrl;
@@ -146,6 +149,13 @@ public class FsDoctorArticle extends BaseEntity
         this.avatar = avatar;
     }
 
+    public Integer getVideoType() {
+        return videoType;
+    }
+
+    public void setVideoType(Integer videoType) {
+        this.videoType = videoType;
+    }
 
     @Override
     public String toString() {

+ 107 - 0
fs-service-system/src/main/java/com/fs/store/domain/FsHomeArticle.java

@@ -0,0 +1,107 @@
+package com.fs.store.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import com.fs.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 期刊对象 fs_home_article
+ *
+ * @author fs
+ * @date 2025-05-22
+ */
+@Setter
+@Getter
+public class FsHomeArticle extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "页码,默认为1")
+    private Integer pageNum = 1;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "页大小,默认为10")
+    private Integer pageSize = 10;
+
+    /** ID */
+    private Long articleId;
+
+    /** 分类ID */
+    @Excel(name = "分类ID")
+    private Long categoryId;
+
+    /** 标题 */
+    @Excel(name = "标题")
+    private String title;
+
+    /** 封面图片 */
+    @Excel(name = "封面图片")
+    private String imageUrl;
+
+    /** 是否推荐 */
+    @Excel(name = "是否推荐")
+    private Integer isTui;
+
+    /** 视频地址 */
+    @Excel(name = "视频地址")
+    private String videoUrl;
+
+    /** 内容 */
+    @Excel(name = "内容")
+    private String content;
+
+    /** 浏览数 */
+    @Excel(name = "浏览数")
+    private Integer views;
+
+    /** 排序 */
+    @Excel(name = "排序")
+    private Integer sort;
+
+    /** 发布时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "发布时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField(strategy= FieldStrategy.IGNORED)
+    private Date publishTime;
+
+    /** 发布状态:1-已发布;2-草稿 */
+    @Excel(name = "发布状态:1-已发布;2-草稿")
+    private Integer publicStatus;
+
+    /** 描述 */
+    @Excel(name = "描述")
+    private String description;
+
+    @TableField(exist = false)
+    @Excel(name = "分类名称")
+    private String categoryName;
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+            .append("articleId", getArticleId())
+            .append("categoryId", getCategoryId())
+            .append("title", getTitle())
+            .append("imageUrl", getImageUrl())
+            .append("isTui", getIsTui())
+            .append("videoUrl", getVideoUrl())
+            .append("content", getContent())
+            .append("views", getViews())
+            .append("sort", getSort())
+            .append("createTime", getCreateTime())
+            .append("updateTime", getUpdateTime())
+            .append("publishTime", getPublishTime())
+            .append("publicStatus", getPublicStatus())
+            .toString();
+    }
+}

+ 54 - 0
fs-service-system/src/main/java/com/fs/store/domain/FsHomeArticleCategory.java

@@ -0,0 +1,54 @@
+package com.fs.store.domain;
+
+import com.fs.common.annotation.Excel;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 期刊分类对象 fs_home_article_category
+ *
+ * @author fs
+ * @date 2025-05-21
+ */
+@Setter
+@Getter
+public class FsHomeArticleCategory extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    private Long categoryId;
+
+    /** 分类名称 */
+    @Excel(name = "分类名称")
+    private String categoryName;
+
+    @Excel(name = "封面图片")
+    private String imageUrl;
+
+    /** 状态,1-正常, 0-禁用 */
+    @Excel(name = "状态,1-正常, 0-禁用")
+    private Integer status;
+
+    /** 是否删除,1-是,0-否 */
+    @Excel(name = "是否删除,1-是,0-否")
+    private Integer isDel;
+
+    /** 排序号 */
+    @Excel(name = "排序号")
+    private Integer sort;
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("categoryId", getCategoryId())
+            .append("categoryName", getCategoryName())
+            .append("status", getStatus())
+            .append("isDel", getIsDel())
+            .append("sort", getSort())
+            .toString();
+    }
+}

+ 62 - 0
fs-service-system/src/main/java/com/fs/store/domain/FsHomeArticleView.java

@@ -0,0 +1,62 @@
+package com.fs.store.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fs.common.annotation.Excel;
+import com.fs.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 期刊阅读对象 fs_home_article_view
+ *
+ * @author fs
+ * @date 2025-05-21
+ */
+@Setter
+@Getter
+public class FsHomeArticleView extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "页码,默认为1")
+    private Integer pageNum = 1;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "页大小,默认为10")
+    private Integer pageSize = 10;
+
+    /** ID */
+    private Long viewId;
+
+    /** 文章ID */
+    @Excel(name = "文章ID")
+    private Long articleId;
+
+    /** 用户ID */
+    @Excel(name = "用户ID")
+    private Long userId;
+
+    @TableField(exist = false)
+    private String title;
+
+    @TableField(exist = false)
+    private String nickname;
+
+    @TableField(exist = false)
+    private String phone;
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("viewId", getViewId())
+            .append("articleId", getArticleId())
+            .append("userId", getUserId())
+            .append("createTime", getCreateTime())
+            .toString();
+    }
+}

+ 1 - 1
fs-service-system/src/main/java/com/fs/store/mapper/FsDoctorArticleMapper.java

@@ -98,7 +98,7 @@ public interface FsDoctorArticleMapper
     @Update("update fs_doctor_article set views=views+1 where article_id=#{articleId}")
     int updateViews(Long articleId);
     @Select({"<script> " +
-            "select a.article_id,a.image_url,a.title,a.video_url,a.create_time,a.content,a.views,a.doctor_id  from fs_doctor_article a     " +
+            "select a.article_id,a.image_url,a.title,a.video_url,a.create_time,a.content,a.views,a.doctor_id,video_type  from fs_doctor_article a     " +
             "where a.article_id = #{articleId} " +
             "</script>"})
     FsDoctorArticleUVO selectFsDoctorArticleUVOByArticleId(Long articleId);

+ 72 - 0
fs-service-system/src/main/java/com/fs/store/mapper/FsHomeArticleCategoryMapper.java

@@ -0,0 +1,72 @@
+package com.fs.store.mapper;
+
+import com.fs.store.domain.FsHomeArticleCategory;
+import com.fs.store.param.home.HomeArticleCategoryPageParam;
+import com.fs.store.vo.home.HomeArticleCategoryListVO;
+
+import java.util.List;
+
+/**
+ * 期刊分类Mapper接口
+ *
+ * @author fs
+ * @date 2025-05-21
+ */
+public interface FsHomeArticleCategoryMapper
+{
+    /**
+     * 查询期刊分类
+     *
+     * @param categoryId 期刊分类ID
+     * @return 期刊分类
+     */
+    public FsHomeArticleCategory selectFsHomeArticleCategoryById(Long categoryId);
+
+    /**
+     * 查询期刊分类列表
+     *
+     * @param fsHomeArticleCategory 期刊分类
+     * @return 期刊分类集合
+     */
+    public List<FsHomeArticleCategory> selectFsHomeArticleCategoryList(FsHomeArticleCategory fsHomeArticleCategory);
+
+    /**
+     * 新增期刊分类
+     *
+     * @param fsHomeArticleCategory 期刊分类
+     * @return 结果
+     */
+    public int insertFsHomeArticleCategory(FsHomeArticleCategory fsHomeArticleCategory);
+
+    /**
+     * 修改期刊分类
+     *
+     * @param fsHomeArticleCategory 期刊分类
+     * @return 结果
+     */
+    public int updateFsHomeArticleCategory(FsHomeArticleCategory fsHomeArticleCategory);
+
+    /**
+     * 删除期刊分类
+     *
+     * @param categoryId 期刊分类ID
+     * @return 结果
+     */
+    public int deleteFsHomeArticleCategoryById(Long categoryId);
+
+    /**
+     * 批量删除期刊分类
+     *
+     * @param categoryIds 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteFsHomeArticleCategoryByIds(Long[] categoryIds);
+
+    /**
+     * 分页获取文章分类
+     * @param param 入参
+     * @return
+     */
+    List<HomeArticleCategoryListVO> selectHomeArticleCategoryPageList(HomeArticleCategoryPageParam param);
+
+}

+ 89 - 0
fs-service-system/src/main/java/com/fs/store/mapper/FsHomeArticleMapper.java

@@ -0,0 +1,89 @@
+package com.fs.store.mapper;
+
+import com.fs.store.domain.FsHomeArticle;
+import com.fs.store.param.home.HomeArticlePageParam;
+import com.fs.store.vo.home.HomeArticleDetailsVO;
+import com.fs.store.vo.home.HomeArticleListVO;
+import org.apache.ibatis.annotations.Update;
+
+import java.util.List;
+
+/**
+ * 期刊Mapper接口
+ *
+ * @author fs
+ * @date 2025-05-22
+ */
+public interface FsHomeArticleMapper
+{
+    /**
+     * 查询期刊
+     *
+     * @param articleId 期刊ID
+     * @return 期刊
+     */
+    public FsHomeArticle selectFsHomeArticleById(Long articleId);
+
+    /**
+     * 查询期刊列表
+     *
+     * @param fsHomeArticle 期刊
+     * @return 期刊集合
+     */
+    public List<FsHomeArticle> selectFsHomeArticleList(FsHomeArticle fsHomeArticle);
+
+    /**
+     * 新增期刊
+     *
+     * @param fsHomeArticle 期刊
+     * @return 结果
+     */
+    public int insertFsHomeArticle(FsHomeArticle fsHomeArticle);
+
+    /**
+     * 修改期刊
+     *
+     * @param fsHomeArticle 期刊
+     * @return 结果
+     */
+    public int updateFsHomeArticle(FsHomeArticle fsHomeArticle);
+
+    /**
+     * 删除期刊
+     *
+     * @param articleId 期刊ID
+     * @return 结果
+     */
+    public int deleteFsHomeArticleById(Long articleId);
+
+    /**
+     * 批量删除期刊
+     *
+     * @param articleIds 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteFsHomeArticleByIds(Long[] articleIds);
+
+    /**
+     * 分页列表文章
+     * @param fsHomeArticle 入参
+     * @return
+     */
+    List<HomeArticleListVO> selectHomeArticlePageList(HomeArticlePageParam fsHomeArticle);
+
+    /**
+     * 根据id获取文章详情
+     * @param articleId 文章id
+     * @return
+     */
+    HomeArticleDetailsVO getHomeArticleDetailsById(Long articleId);
+
+    /**
+     * 更新阅读数
+     * @param articleId 文章id
+     * @return
+     */
+    @Update("update fs_home_article set views = views + 1 where article_id = #{articleId}")
+    int updateArticleViews(Long articleId);
+
+}

+ 73 - 0
fs-service-system/src/main/java/com/fs/store/mapper/FsHomeArticleViewMapper.java

@@ -0,0 +1,73 @@
+package com.fs.store.mapper;
+
+import com.fs.store.domain.FsHomeArticleView;
+import com.fs.store.param.home.HomeArticleViewListParam;
+import com.fs.store.vo.home.HomeArticleViewsListVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 期刊阅读Mapper接口
+ *
+ * @author fs
+ * @date 2025-05-21
+ */
+public interface FsHomeArticleViewMapper
+{
+    /**
+     * 查询期刊阅读
+     *
+     * @param viewId 期刊阅读ID
+     * @return 期刊阅读
+     */
+    public FsHomeArticleView selectFsHomeArticleViewById(Long viewId);
+
+    /**
+     * 查询期刊阅读列表
+     *
+     * @param fsHomeArticleView 期刊阅读
+     * @return 期刊阅读集合
+     */
+    public List<FsHomeArticleView> selectFsHomeArticleViewList(FsHomeArticleView fsHomeArticleView);
+
+    /**
+     * 新增期刊阅读
+     *
+     * @param fsHomeArticleView 期刊阅读
+     * @return 结果
+     */
+    public int insertFsHomeArticleView(FsHomeArticleView fsHomeArticleView);
+
+    /**
+     * 修改期刊阅读
+     *
+     * @param fsHomeArticleView 期刊阅读
+     * @return 结果
+     */
+    public int updateFsHomeArticleView(FsHomeArticleView fsHomeArticleView);
+
+    /**
+     * 删除期刊阅读
+     *
+     * @param viewId 期刊阅读ID
+     * @return 结果
+     */
+    public int deleteFsHomeArticleViewById(Long viewId);
+
+    /**
+     * 批量删除期刊阅读
+     *
+     * @param viewIds 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteFsHomeArticleViewByIds(Long[] viewIds);
+
+    /**
+     * 查询文章的阅读人员列表
+     * @param param 入参
+     * @return
+     */
+    List<HomeArticleViewsListVO> selectHomeArticleViewsList(@Param("param") HomeArticleViewListParam param);
+
+}

+ 1 - 1
fs-service-system/src/main/java/com/fs/store/mapper/FsStoreProductMapper.java

@@ -122,7 +122,7 @@ public interface FsStoreProductMapper
             "select p.* from fs_store_product p  " +
             "where is_del=0 and is_show=1  " +
             "<if test = 'maps.productName != null and  maps.productName !=\"\"    '> " +
-            "and p.product_name like CONCAT('%',#{maps.productName},'%') " +
+            "and (p.product_name like CONCAT('%',#{maps.productName},'%')  or p.keyword like concat('%',#{maps.productName},'%') ) " +
             "</if>" +
             "<if test = 'maps.isDisplay != null and maps.isDisplay == 1   '> " +
             "and p.is_display =#{maps.isDisplay}  " +

+ 26 - 0
fs-service-system/src/main/java/com/fs/store/param/HomeArticleListParam.java

@@ -0,0 +1,26 @@
+package com.fs.store.param;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel
+public class HomeArticleListParam implements Serializable {
+
+    @ApiModelProperty(value = "页码,默认为1", required = true)
+    private Integer pageNum = 1;
+
+    @ApiModelProperty(value = "页大小,默认为10", required = true)
+    private Integer pageSize = 10;
+
+    @ApiModelProperty(value = "标题")
+    String title;
+
+    @ApiModelProperty(value = "用户昵称")
+    String nickname;
+
+}

+ 23 - 0
fs-service-system/src/main/java/com/fs/store/param/home/HomeArticleCategoryPageParam.java

@@ -0,0 +1,23 @@
+package com.fs.store.param.home;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel
+public class HomeArticleCategoryPageParam implements Serializable {
+
+    @ApiModelProperty(value = "页码,默认为1", required = true)
+    private Integer pageNum = 1;
+
+    @ApiModelProperty(value = "页大小,默认为10", required = true)
+    private Integer pageSize = 10;
+
+    @ApiModelProperty(value = "模糊搜索,通过分类标题来匹配")
+    private String keywords;
+
+}

+ 26 - 0
fs-service-system/src/main/java/com/fs/store/param/home/HomeArticlePageParam.java

@@ -0,0 +1,26 @@
+package com.fs.store.param.home;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel
+public class HomeArticlePageParam implements Serializable {
+
+    @ApiModelProperty(value = "页码,默认为1", required = true)
+    private Integer pageNum = 1;
+
+    @ApiModelProperty(value = "页大小,默认为10", required = true)
+    private Integer pageSize = 10;
+
+    @ApiModelProperty(value = "分类id")
+    private Long categoryId;
+
+    @ApiModelProperty(value = "模糊搜索,通过文章标题来匹配")
+    private String keywords;
+
+}

+ 23 - 0
fs-service-system/src/main/java/com/fs/store/param/home/HomeArticleViewListParam.java

@@ -0,0 +1,23 @@
+package com.fs.store.param.home;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel
+public class HomeArticleViewListParam implements Serializable {
+
+    @ApiModelProperty(value = "页码,默认为1", required = true)
+    private Integer pageNum = 1;
+
+    @ApiModelProperty(value = "页大小,默认为10", required = true)
+    private Integer pageSize = 10;
+
+    @ApiModelProperty(value = "文章id")
+    private Long articleId;
+
+}

+ 71 - 0
fs-service-system/src/main/java/com/fs/store/service/IFsHomeArticleCategoryService.java

@@ -0,0 +1,71 @@
+package com.fs.store.service;
+
+import com.fs.store.domain.FsHomeArticleCategory;
+import com.fs.store.param.home.HomeArticleCategoryPageParam;
+import com.fs.store.vo.home.HomeArticleCategoryListVO;
+
+import java.util.List;
+
+/**
+ * 期刊分类Service接口
+ *
+ * @author fs
+ * @date 2025-05-21
+ */
+public interface IFsHomeArticleCategoryService
+{
+    /**
+     * 查询期刊分类
+     *
+     * @param categoryId 期刊分类ID
+     * @return 期刊分类
+     */
+    public FsHomeArticleCategory selectFsHomeArticleCategoryById(Long categoryId);
+
+    /**
+     * 查询期刊分类列表
+     *
+     * @param fsHomeArticleCategory 期刊分类
+     * @return 期刊分类集合
+     */
+    public List<FsHomeArticleCategory> selectFsHomeArticleCategoryList(FsHomeArticleCategory fsHomeArticleCategory);
+
+    /**
+     * 新增期刊分类
+     *
+     * @param fsHomeArticleCategory 期刊分类
+     * @return 结果
+     */
+    public int insertFsHomeArticleCategory(FsHomeArticleCategory fsHomeArticleCategory);
+
+    /**
+     * 修改期刊分类
+     *
+     * @param fsHomeArticleCategory 期刊分类
+     * @return 结果
+     */
+    public int updateFsHomeArticleCategory(FsHomeArticleCategory fsHomeArticleCategory);
+
+    /**
+     * 批量删除期刊分类
+     *
+     * @param categoryIds 需要删除的期刊分类ID
+     * @return 结果
+     */
+    public int deleteFsHomeArticleCategoryByIds(Long[] categoryIds);
+
+    /**
+     * 删除期刊分类信息
+     *
+     * @param categoryId 期刊分类ID
+     * @return 结果
+     */
+    public int deleteFsHomeArticleCategoryById(Long categoryId);
+
+    /**
+     * 根据搜索条件获取分页的文章分类
+     * @param param 入参
+     * @return list
+     */
+    List<HomeArticleCategoryListVO> selectHomeArticleCategoryPageList(HomeArticleCategoryPageParam param);
+}

+ 80 - 0
fs-service-system/src/main/java/com/fs/store/service/IFsHomeArticleService.java

@@ -0,0 +1,80 @@
+package com.fs.store.service;
+
+import com.fs.store.domain.FsHomeArticle;
+import com.fs.store.param.home.HomeArticlePageParam;
+import com.fs.store.vo.home.HomeArticleDetailsVO;
+import com.fs.store.vo.home.HomeArticleListVO;
+
+import java.util.List;
+
+/**
+ * 期刊Service接口
+ *
+ * @author fs
+ * @date 2025-05-22
+ */
+public interface IFsHomeArticleService
+{
+    /**
+     * 查询期刊
+     *
+     * @param articleId 期刊ID
+     * @return 期刊
+     */
+    public FsHomeArticle selectFsHomeArticleById(Long articleId);
+
+    /**
+     * 查询期刊列表
+     *
+     * @param fsHomeArticle 期刊
+     * @return 期刊集合
+     */
+    public List<FsHomeArticle> selectFsHomeArticleList(FsHomeArticle fsHomeArticle);
+
+    /**
+     * 新增期刊
+     *
+     * @param fsHomeArticle 期刊
+     * @return 结果
+     */
+    public int insertFsHomeArticle(FsHomeArticle fsHomeArticle);
+
+    /**
+     * 修改期刊
+     *
+     * @param fsHomeArticle 期刊
+     * @return 结果
+     */
+    public int updateFsHomeArticle(FsHomeArticle fsHomeArticle);
+
+    /**
+     * 批量删除期刊
+     *
+     * @param articleIds 需要删除的期刊ID
+     * @return 结果
+     */
+    public int deleteFsHomeArticleByIds(Long[] articleIds);
+
+    /**
+     * 删除期刊信息
+     *
+     * @param articleId 期刊ID
+     * @return 结果
+     */
+    public int deleteFsHomeArticleById(Long articleId);
+
+    /**
+     * 根据分类id获取文章
+     * @param fsHomeArticle 入参
+     * @return list
+     */
+    List<HomeArticleListVO> selectHomeArticlePageList(HomeArticlePageParam fsHomeArticle);
+
+    /**
+     * 获取文章详情
+     * @param articleId 文章id
+     * @return
+     */
+    HomeArticleDetailsVO getHomeArticleDetailsById(Long articleId);
+
+}

+ 80 - 0
fs-service-system/src/main/java/com/fs/store/service/IFsHomeArticleViewService.java

@@ -0,0 +1,80 @@
+package com.fs.store.service;
+
+import com.fs.store.domain.FsHomeArticleView;
+import com.fs.store.param.home.HomeArticleViewListParam;
+import com.fs.store.vo.home.HomeArticleViewsListVO;
+
+import java.util.List;
+
+/**
+ * 期刊阅读Service接口
+ *
+ * @author fs
+ * @date 2025-05-21
+ */
+public interface IFsHomeArticleViewService
+{
+    /**
+     * 查询期刊阅读
+     *
+     * @param viewId 期刊阅读ID
+     * @return 期刊阅读
+     */
+    public FsHomeArticleView selectFsHomeArticleViewById(Long viewId);
+
+    /**
+     * 查询期刊阅读列表
+     *
+     * @param fsHomeArticleView 期刊阅读
+     * @return 期刊阅读集合
+     */
+    public List<FsHomeArticleView> selectFsHomeArticleViewList(FsHomeArticleView fsHomeArticleView);
+
+    /**
+     * 新增期刊阅读
+     *
+     * @param fsHomeArticleView 期刊阅读
+     * @return 结果
+     */
+    public int insertFsHomeArticleView(FsHomeArticleView fsHomeArticleView);
+
+    /**
+     * 修改期刊阅读
+     *
+     * @param fsHomeArticleView 期刊阅读
+     * @return 结果
+     */
+    public int updateFsHomeArticleView(FsHomeArticleView fsHomeArticleView);
+
+    /**
+     * 批量删除期刊阅读
+     *
+     * @param viewIds 需要删除的期刊阅读ID
+     * @return 结果
+     */
+    public int deleteFsHomeArticleViewByIds(Long[] viewIds);
+
+    /**
+     * 删除期刊阅读信息
+     *
+     * @param viewId 期刊阅读ID
+     * @return 结果
+     */
+    public int deleteFsHomeArticleViewById(Long viewId);
+
+    /**
+     * 新增阅读记录,更新阅读数
+     * @param articleId 文章id
+     * @param userId 用户id
+     * @return
+     */
+    int addArticleRecord(Long articleId, Long userId);
+
+    /**
+     * 查询文章的阅读人员列表
+     * @param param 入参
+     * @return
+     */
+    List<HomeArticleViewsListVO> selectHomeArticleViewsList(HomeArticleViewListParam param);
+
+}

+ 101 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsHomeArticleCategoryServiceImpl.java

@@ -0,0 +1,101 @@
+package com.fs.store.service.impl;
+
+import com.fs.store.domain.FsHomeArticleCategory;
+import com.fs.store.mapper.FsHomeArticleCategoryMapper;
+import com.fs.store.param.home.HomeArticleCategoryPageParam;
+import com.fs.store.service.IFsHomeArticleCategoryService;
+import com.fs.store.vo.home.HomeArticleCategoryListVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 期刊分类Service业务层处理
+ *
+ * @author fs
+ * @date 2025-05-21
+ */
+@Service
+public class FsHomeArticleCategoryServiceImpl implements IFsHomeArticleCategoryService
+{
+    @Autowired
+    private FsHomeArticleCategoryMapper fsHomeArticleCategoryMapper;
+
+    /**
+     * 查询期刊分类
+     *
+     * @param categoryId 期刊分类ID
+     * @return 期刊分类
+     */
+    @Override
+    public FsHomeArticleCategory selectFsHomeArticleCategoryById(Long categoryId)
+    {
+        return fsHomeArticleCategoryMapper.selectFsHomeArticleCategoryById(categoryId);
+    }
+
+    /**
+     * 查询期刊分类列表
+     *
+     * @param fsHomeArticleCategory 期刊分类
+     * @return 期刊分类
+     */
+    @Override
+    public List<FsHomeArticleCategory> selectFsHomeArticleCategoryList(FsHomeArticleCategory fsHomeArticleCategory)
+    {
+        return fsHomeArticleCategoryMapper.selectFsHomeArticleCategoryList(fsHomeArticleCategory);
+    }
+
+    /**
+     * 新增期刊分类
+     *
+     * @param fsHomeArticleCategory 期刊分类
+     * @return 结果
+     */
+    @Override
+    public int insertFsHomeArticleCategory(FsHomeArticleCategory fsHomeArticleCategory)
+    {
+        return fsHomeArticleCategoryMapper.insertFsHomeArticleCategory(fsHomeArticleCategory);
+    }
+
+    /**
+     * 修改期刊分类
+     *
+     * @param fsHomeArticleCategory 期刊分类
+     * @return 结果
+     */
+    @Override
+    public int updateFsHomeArticleCategory(FsHomeArticleCategory fsHomeArticleCategory)
+    {
+        return fsHomeArticleCategoryMapper.updateFsHomeArticleCategory(fsHomeArticleCategory);
+    }
+
+    /**
+     * 批量删除期刊分类
+     *
+     * @param categoryIds 需要删除的期刊分类ID
+     * @return 结果
+     */
+    @Override
+    public int deleteFsHomeArticleCategoryByIds(Long[] categoryIds)
+    {
+        return fsHomeArticleCategoryMapper.deleteFsHomeArticleCategoryByIds(categoryIds);
+    }
+
+    /**
+     * 删除期刊分类信息
+     *
+     * @param categoryId 期刊分类ID
+     * @return 结果
+     */
+    @Override
+    public int deleteFsHomeArticleCategoryById(Long categoryId)
+    {
+        return fsHomeArticleCategoryMapper.deleteFsHomeArticleCategoryById(categoryId);
+    }
+
+    @Override
+    public List<HomeArticleCategoryListVO> selectHomeArticleCategoryPageList(HomeArticleCategoryPageParam param) {
+        return fsHomeArticleCategoryMapper.selectHomeArticleCategoryPageList(param);
+    }
+}

+ 120 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsHomeArticleServiceImpl.java

@@ -0,0 +1,120 @@
+package com.fs.store.service.impl;
+
+import com.fs.common.utils.DateUtils;
+import com.fs.store.domain.FsHomeArticle;
+import com.fs.store.mapper.FsHomeArticleMapper;
+import com.fs.store.param.home.HomeArticlePageParam;
+import com.fs.store.service.IFsHomeArticleService;
+import com.fs.store.vo.home.HomeArticleDetailsVO;
+import com.fs.store.vo.home.HomeArticleListVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 期刊Service业务层处理
+ *
+ * @author fs
+ * @date 2025-05-22
+ */
+@Service
+public class FsHomeArticleServiceImpl implements IFsHomeArticleService
+{
+    @Autowired
+    private FsHomeArticleMapper fsHomeArticleMapper;
+
+    /**
+     * 查询期刊
+     *
+     * @param articleId 期刊ID
+     * @return 期刊
+     */
+    @Override
+    public FsHomeArticle selectFsHomeArticleById(Long articleId)
+    {
+        return fsHomeArticleMapper.selectFsHomeArticleById(articleId);
+    }
+
+    /**
+     * 查询期刊列表
+     *
+     * @param fsHomeArticle 期刊
+     * @return 期刊
+     */
+    @Override
+    public List<FsHomeArticle> selectFsHomeArticleList(FsHomeArticle fsHomeArticle)
+    {
+        return fsHomeArticleMapper.selectFsHomeArticleList(fsHomeArticle);
+    }
+
+    /**
+     * 新增期刊
+     *
+     * @param fsHomeArticle 期刊
+     * @return 结果
+     */
+    @Override
+    public int insertFsHomeArticle(FsHomeArticle fsHomeArticle)
+    {
+        fsHomeArticle.setCreateTime(DateUtils.getNowDate());
+        if(fsHomeArticle.getPublicStatus() == 1 ){
+            fsHomeArticle.setPublishTime(DateUtils.getNowDate());
+        } else {
+            fsHomeArticle.setPublishTime(null);
+        }
+        return fsHomeArticleMapper.insertFsHomeArticle(fsHomeArticle);
+    }
+
+    /**
+     * 修改期刊
+     *
+     * @param fsHomeArticle 期刊
+     * @return 结果
+     */
+    @Override
+    public int updateFsHomeArticle(FsHomeArticle fsHomeArticle)
+    {
+        fsHomeArticle.setUpdateTime(DateUtils.getNowDate());
+        if(fsHomeArticle.getPublicStatus() == 1 ){
+            fsHomeArticle.setPublishTime(DateUtils.getNowDate());
+        } else {
+            fsHomeArticle.setPublishTime(null);
+        }
+        return fsHomeArticleMapper.updateFsHomeArticle(fsHomeArticle);
+    }
+
+    /**
+     * 批量删除期刊
+     *
+     * @param articleIds 需要删除的期刊ID
+     * @return 结果
+     */
+    @Override
+    public int deleteFsHomeArticleByIds(Long[] articleIds)
+    {
+        return fsHomeArticleMapper.deleteFsHomeArticleByIds(articleIds);
+    }
+
+    /**
+     * 删除期刊信息
+     *
+     * @param articleId 期刊ID
+     * @return 结果
+     */
+    @Override
+    public int deleteFsHomeArticleById(Long articleId)
+    {
+        return fsHomeArticleMapper.deleteFsHomeArticleById(articleId);
+    }
+
+    @Override
+    public List<HomeArticleListVO> selectHomeArticlePageList(HomeArticlePageParam param) {
+        return fsHomeArticleMapper.selectHomeArticlePageList(param);
+    }
+
+    @Override
+    public HomeArticleDetailsVO getHomeArticleDetailsById(Long articleId) {
+        return fsHomeArticleMapper.getHomeArticleDetailsById(articleId);
+    }
+}

+ 129 - 0
fs-service-system/src/main/java/com/fs/store/service/impl/FsHomeArticleViewServiceImpl.java

@@ -0,0 +1,129 @@
+package com.fs.store.service.impl;
+
+import com.fs.common.utils.DateUtils;
+import com.fs.store.domain.FsHomeArticleView;
+import com.fs.store.mapper.FsHomeArticleMapper;
+import com.fs.store.mapper.FsHomeArticleViewMapper;
+import com.fs.store.param.home.HomeArticleViewListParam;
+import com.fs.store.service.IFsHomeArticleViewService;
+import com.fs.store.vo.home.HomeArticleViewsListVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 期刊阅读Service业务层处理
+ *
+ * @author fs
+ * @date 2025-05-21
+ */
+@Service
+public class FsHomeArticleViewServiceImpl implements IFsHomeArticleViewService
+{
+    @Autowired
+    private FsHomeArticleViewMapper fsHomeArticleViewMapper;
+
+    @Autowired
+    private FsHomeArticleMapper homeArticleMapper;
+
+    /**
+     * 查询期刊阅读
+     *
+     * @param viewId 期刊阅读ID
+     * @return 期刊阅读
+     */
+    @Override
+    public FsHomeArticleView selectFsHomeArticleViewById(Long viewId)
+    {
+        return fsHomeArticleViewMapper.selectFsHomeArticleViewById(viewId);
+    }
+
+    /**
+     * 查询期刊阅读列表
+     *
+     * @param fsHomeArticleView 期刊阅读
+     * @return 期刊阅读
+     */
+    @Override
+    public List<FsHomeArticleView> selectFsHomeArticleViewList(FsHomeArticleView fsHomeArticleView)
+    {
+        return fsHomeArticleViewMapper.selectFsHomeArticleViewList(fsHomeArticleView);
+    }
+
+    /**
+     * 新增期刊阅读
+     *
+     * @param fsHomeArticleView 期刊阅读
+     * @return 结果
+     */
+    @Override
+    public int insertFsHomeArticleView(FsHomeArticleView fsHomeArticleView)
+    {
+        fsHomeArticleView.setCreateTime(DateUtils.getNowDate());
+        return fsHomeArticleViewMapper.insertFsHomeArticleView(fsHomeArticleView);
+    }
+
+    /**
+     * 修改期刊阅读
+     *
+     * @param fsHomeArticleView 期刊阅读
+     * @return 结果
+     */
+    @Override
+    public int updateFsHomeArticleView(FsHomeArticleView fsHomeArticleView)
+    {
+        return fsHomeArticleViewMapper.updateFsHomeArticleView(fsHomeArticleView);
+    }
+
+    /**
+     * 批量删除期刊阅读
+     *
+     * @param viewIds 需要删除的期刊阅读ID
+     * @return 结果
+     */
+    @Override
+    public int deleteFsHomeArticleViewByIds(Long[] viewIds)
+    {
+        return fsHomeArticleViewMapper.deleteFsHomeArticleViewByIds(viewIds);
+    }
+
+    /**
+     * 删除期刊阅读信息
+     *
+     * @param viewId 期刊阅读ID
+     * @return 结果
+     */
+    @Override
+    public int deleteFsHomeArticleViewById(Long viewId)
+    {
+        return fsHomeArticleViewMapper.deleteFsHomeArticleViewById(viewId);
+    }
+
+    @Override
+    @Transactional
+    public int addArticleRecord(Long articleId, Long userId) {
+        // 新增阅读记录
+        FsHomeArticleView fsHomeArticleView = new FsHomeArticleView();
+        fsHomeArticleView.setArticleId(articleId);
+        fsHomeArticleView.setUserId(userId);
+        fsHomeArticleView.setCreateTime(new Date());
+        int i = fsHomeArticleViewMapper.insertFsHomeArticleView(fsHomeArticleView);
+
+        //更新阅读数
+        if(i > 0){
+            return homeArticleMapper.updateArticleViews(articleId);
+        } else {
+            return 0;
+        }
+
+    }
+
+    @Override
+    public List<HomeArticleViewsListVO> selectHomeArticleViewsList(HomeArticleViewListParam param) {
+        return fsHomeArticleViewMapper.selectHomeArticleViewsList(param);
+    }
+
+}

+ 4 - 0
fs-service-system/src/main/java/com/fs/store/vo/FsDoctorArticleUVO.java

@@ -1,6 +1,7 @@
 package com.fs.store.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -31,5 +32,8 @@ public class FsDoctorArticleUVO implements Serializable {
     private Date createTime;
     private String videoUrl;
 
+    @ApiModelProperty(value = "视频类型:1-横屏视频;2-竖屏视频")
+    private Integer videoType;
+
 
 }

+ 3 - 0
fs-service-system/src/main/java/com/fs/store/vo/FsDoctorArticleVO.java

@@ -52,4 +52,7 @@ public class FsDoctorArticleVO implements Serializable {
 
     private String videoUrl;
 
+    @Excel(name = "视频类型:1-横屏视频;2-竖屏视频")
+    private Integer videoType;
+
 }

+ 24 - 0
fs-service-system/src/main/java/com/fs/store/vo/home/HomeArticleCategoryListVO.java

@@ -0,0 +1,24 @@
+package com.fs.store.vo.home;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 期刊分类出参(小程序)
+ */
+@Data
+public class HomeArticleCategoryListVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "分类id")
+    private Long categoryId;
+
+    @ApiModelProperty(value = "分类名称")
+    private String categoryName;
+
+    @ApiModelProperty(value = "封面图片")
+    private String imageUrl;
+
+}

+ 42 - 0
fs-service-system/src/main/java/com/fs/store/vo/home/HomeArticleDetailsVO.java

@@ -0,0 +1,42 @@
+package com.fs.store.vo.home;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 期刊详情出参(小程序)
+ */
+@Data
+public class HomeArticleDetailsVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "文章id")
+    private Long articleId;
+
+    @ApiModelProperty(value = "标题")
+    private String title;
+
+    @ApiModelProperty(value = "封面图片")
+    private String imageUrl;
+
+    @ApiModelProperty(value = "视频地址")
+    private String videoUrl;
+
+    @ApiModelProperty(value = "内容")
+    private String content;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "发布时间")
+    private Date publishTime;
+
+    @ApiModelProperty(value = "描述")
+    private String description;
+
+    @ApiModelProperty(value = "观看人数")
+    private Integer views;
+
+}

+ 39 - 0
fs-service-system/src/main/java/com/fs/store/vo/home/HomeArticleListVO.java

@@ -0,0 +1,39 @@
+package com.fs.store.vo.home;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 期刊输出参数(小程序)
+ */
+@Data
+public class HomeArticleListVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "文章id")
+    private Long articleId;
+
+    @ApiModelProperty(value = "标题")
+    private String title;
+
+    @ApiModelProperty(value = "封面图片")
+    private String imageUrl;
+
+    @ApiModelProperty(value = "内容")
+    private String content;
+
+    @ApiModelProperty(value = "观看人数")
+    private Integer views;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "发布时间")
+    private Date publishTime;
+
+    @ApiModelProperty(value = "描述")
+    private String description;
+
+}

+ 20 - 0
fs-service-system/src/main/java/com/fs/store/vo/home/HomeArticleViewsListVO.java

@@ -0,0 +1,20 @@
+package com.fs.store.vo.home;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class HomeArticleViewsListVO implements Serializable {
+
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+
+    @ApiModelProperty(value = "用户昵称")
+    private String nickname;
+
+    @ApiModelProperty(value = "用户头像")
+    private String avatar;
+
+}

+ 53 - 0
fs-service-system/src/main/resources/db/upgrade/期刊表初始化.sql

@@ -0,0 +1,53 @@
+-- ----------------------------
+-- Table structure for fs_home_article
+-- ----------------------------
+DROP TABLE IF EXISTS `fs_home_article`;
+CREATE TABLE `fs_home_article`  (
+                                    `article_id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
+                                    `category_id` bigint NULL DEFAULT NULL COMMENT '分类ID',
+                                    `title` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '标题',
+                                    `image_url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '封面图片',
+                                    `is_tui` tinyint(1) NULL DEFAULT NULL COMMENT '是否推荐,1-是;0-否',
+                                    `video_url` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '视频地址',
+                                    `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '内容',
+                                    `views` int NULL DEFAULT 0 COMMENT '浏览数',
+                                    `sort` int NULL DEFAULT 0 COMMENT '排序',
+                                    `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+                                    `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+                                    `publish_time` datetime NULL DEFAULT NULL COMMENT '发布时间',
+                                    `public_status` tinyint(1) NULL DEFAULT NULL COMMENT '发布状态:1-已发布;2-草稿',
+                                    `description` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '描述',
+                                    PRIMARY KEY (`article_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '期刊表' ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Table structure for fs_home_article_category
+-- ----------------------------
+DROP TABLE IF EXISTS `fs_home_article_category`;
+CREATE TABLE `fs_home_article_category`  (
+                                             `category_id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
+                                             `category_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '分类名称',
+                                             `image_url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '封面图片',
+                                             `status` tinyint(1) NULL DEFAULT 1 COMMENT '状态,1-正常, 0-禁用',
+                                             `is_del` tinyint(1) NULL DEFAULT 0 COMMENT '是否删除,1-是,0-否',
+                                             `sort` int NULL DEFAULT 1 COMMENT '排序号',
+                                             `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+                                             `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+                                             PRIMARY KEY (`category_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 28 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '期刊分类表' ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Table structure for fs_home_article_view
+-- ----------------------------
+DROP TABLE IF EXISTS `fs_home_article_view`;
+CREATE TABLE `fs_home_article_view`  (
+                                         `view_id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
+                                         `article_id` bigint NULL DEFAULT NULL COMMENT '文章ID',
+                                         `user_id` bigint NULL DEFAULT NULL COMMENT '用户ID',
+                                         `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+                                         PRIMARY KEY (`view_id`) USING BTREE,
+                                         INDEX `article_id_index`(`article_id` ASC) USING BTREE,
+                                         INDEX `user_id_index`(`user_id` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2101 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '期刊阅读表' ROW_FORMAT = DYNAMIC;
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 3 - 0
fs-service-system/src/main/resources/mapper/store/FsDoctorArticleMapper.xml

@@ -50,6 +50,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">create_time,</if>
             <if test="updateTime != null">update_time,</if>
             <if test="videoUrl  != null">video_url,</if>
+            <if test="videoType  != null">video_type,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="imageUrl != null">#{imageUrl},</if>
@@ -61,6 +62,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">#{createTime},</if>
             <if test="updateTime != null">#{updateTime},</if>
             <if test="videoUrl != null">#{videoUrl},</if>
+            <if test="videoType  != null">#{videoType},</if>
          </trim>
     </insert>
 
@@ -77,6 +79,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="videoUrl != null">video_url = #{videoUrl},</if>
+            <if test="videoType  != null">video_type = #{videoType},</if>
         </trim>
         where article_id = #{articleId}
     </update>

+ 85 - 0
fs-service-system/src/main/resources/mapper/store/FsHomeArticleCategoryMapper.xml

@@ -0,0 +1,85 @@
+<?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.fs.store.mapper.FsHomeArticleCategoryMapper">
+
+    <resultMap type="FsHomeArticleCategory" id="FsHomeArticleCategoryResult">
+        <result property="categoryId"    column="category_id"    />
+        <result property="categoryName"    column="category_name"    />
+        <result property="status"    column="status"    />
+        <result property="isDel"    column="is_del"    />
+        <result property="sort"    column="sort"    />
+    </resultMap>
+
+    <sql id="selectFsHomeArticleCategoryVo">
+        select category_id, category_name, status, is_del, sort, image_url from fs_home_article_category
+    </sql>
+
+    <select id="selectFsHomeArticleCategoryList" parameterType="FsHomeArticleCategory" resultMap="FsHomeArticleCategoryResult">
+        <include refid="selectFsHomeArticleCategoryVo"/>
+        <where>
+            and is_del = 0
+            <if test="categoryName != null  and categoryName != ''"> and category_name like concat('%', #{categoryName}, '%')</if>
+            <if test="status != null "> and status = #{status}</if>
+            <if test="sort != null "> and sort = #{sort}</if>
+        </where>
+        order by sort
+    </select>
+
+    <select id="selectFsHomeArticleCategoryById" parameterType="Long" resultMap="FsHomeArticleCategoryResult">
+        <include refid="selectFsHomeArticleCategoryVo"/>
+        where category_id = #{categoryId}
+    </select>
+
+    <insert id="insertFsHomeArticleCategory" parameterType="FsHomeArticleCategory" useGeneratedKeys="true" keyProperty="categoryId">
+        insert into fs_home_article_category
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="categoryName != null and categoryName != ''">category_name,</if>
+            <if test="imageUrl != null">image_url,</if>
+            <if test="status != null">status,</if>
+            <if test="isDel != null">is_del,</if>
+            <if test="sort != null">sort,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="categoryName != null and categoryName != ''">#{categoryName},</if>
+            <if test="imageUrl != null">#{imageUrl},</if>
+            <if test="status != null">#{status},</if>
+            <if test="isDel != null">#{isDel},</if>
+            <if test="sort != null">#{sort},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFsHomeArticleCategory" parameterType="FsHomeArticleCategory">
+        update fs_home_article_category
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="categoryName != null and categoryName != ''">category_name = #{categoryName},</if>
+            <if test="imageUrl != null">image_url = #{imageUrl},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="isDel != null">is_del = #{isDel},</if>
+            <if test="sort != null">sort = #{sort},</if>
+        </trim>
+        where category_id = #{categoryId}
+    </update>
+
+    <delete id="deleteFsHomeArticleCategoryById" parameterType="Long">
+        delete from fs_home_article_category where category_id = #{categoryId}
+    </delete>
+
+    <delete id="deleteFsHomeArticleCategoryByIds" parameterType="String">
+        delete from fs_home_article_category where category_id in
+        <foreach item="categoryId" collection="array" open="(" separator="," close=")">
+            #{categoryId}
+        </foreach>
+    </delete>
+
+    <select id="selectHomeArticleCategoryPageList" resultType="HomeArticleCategoryListVO">
+        select category_id, category_name, status,image_url from fs_home_article_category
+        <where>
+            is_del = 0 and status = 1
+            <if test="keywords != null  and keywords != ''"> and category_name like concat('%', #{keywords}, '%')</if>
+        </where>
+        order by sort asc
+    </select>
+
+</mapper>

+ 169 - 0
fs-service-system/src/main/resources/mapper/store/FsHomeArticleMapper.xml

@@ -0,0 +1,169 @@
+<?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.fs.store.mapper.FsHomeArticleMapper">
+
+    <resultMap type="FsHomeArticle" id="FsHomeArticleResult">
+        <result property="articleId"    column="article_id"    />
+        <result property="categoryId"    column="category_id"    />
+        <result property="title"    column="title"    />
+        <result property="imageUrl"    column="image_url"    />
+        <result property="isTui"    column="is_tui"    />
+        <result property="videoUrl"    column="video_url"    />
+        <result property="content"    column="content"    />
+        <result property="views"    column="views"    />
+        <result property="sort"    column="sort"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="publishTime"    column="publish_time"    />
+        <result property="publicStatus"    column="public_status"    />
+        <result property="description"    column="description"    />
+    </resultMap>
+
+    <sql id="selectFsHomeArticleVo">
+        select article_id, category_id, title, image_url, is_tui, video_url, content, views, sort, create_time, update_time, publish_time, public_status, description from fs_home_article
+    </sql>
+
+    <select id="selectFsHomeArticleList" resultType="FsHomeArticle">
+        SELECT
+        a.article_id,
+        a.category_id,
+        ac.category_name,
+        a.title,
+        a.image_url,
+        a.is_tui,
+        a.video_url,
+        a.content,
+        a.views,
+        a.sort,
+        a.create_time,
+        a.update_time,
+        a.publish_time,
+        a.public_status,
+        a.description
+        FROM
+        fs_home_article a
+        left join fs_home_article_category ac on ac.category_id = a.category_id
+        <where>
+            <if test="categoryId != null "> and a.category_id = #{categoryId}</if>
+            <if test="title != null  and title != ''"> and a.title like concat('%', #{title}, '%')</if>
+            <if test="imageUrl != null  and imageUrl != ''"> and a.image_url = #{imageUrl}</if>
+            <if test="isTui != null "> and a.is_tui = #{isTui}</if>
+            <if test="videoUrl != null  and videoUrl != ''"> and a.video_url = #{videoUrl}</if>
+            <if test="content != null  and content != ''"> and a.content = #{content}</if>
+            <if test="views != null "> and a.views = #{views}</if>
+            <if test="sort != null "> and a.sort = #{sort}</if>
+            <if test="publishTime != null "> and a.publish_time = #{publishTime}</if>
+            <if test="publicStatus != null "> and a.public_status = #{publicStatus}</if>
+        </where>
+        order by a.create_time desc
+    </select>
+
+    <select id="selectFsHomeArticleById" parameterType="Long" resultMap="FsHomeArticleResult">
+        <include refid="selectFsHomeArticleVo"/>
+        where article_id = #{articleId}
+    </select>
+
+    <insert id="insertFsHomeArticle" parameterType="FsHomeArticle" useGeneratedKeys="true" keyProperty="articleId">
+        insert into fs_home_article
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="categoryId != null">category_id,</if>
+            <if test="title != null">title,</if>
+            <if test="imageUrl != null">image_url,</if>
+            <if test="isTui != null">is_tui,</if>
+            <if test="videoUrl != null">video_url,</if>
+            <if test="content != null">content,</if>
+            <if test="views != null">views,</if>
+            <if test="sort != null">sort,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="publishTime != null">publish_time,</if>
+            <if test="publicStatus != null">public_status,</if>
+            <if test="description != null">description,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="categoryId != null">#{categoryId},</if>
+            <if test="title != null">#{title},</if>
+            <if test="imageUrl != null">#{imageUrl},</if>
+            <if test="isTui != null">#{isTui},</if>
+            <if test="videoUrl != null">#{videoUrl},</if>
+            <if test="content != null">#{content},</if>
+            <if test="views != null">#{views},</if>
+            <if test="sort != null">#{sort},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="publishTime != null">#{publishTime},</if>
+            <if test="publicStatus != null">#{publicStatus},</if>
+            <if test="description != null">#{description},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFsHomeArticle" parameterType="FsHomeArticle">
+        update fs_home_article
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="categoryId != null">category_id = #{categoryId},</if>
+            <if test="title != null">title = #{title},</if>
+            <if test="imageUrl != null">image_url = #{imageUrl},</if>
+            <if test="isTui != null">is_tui = #{isTui},</if>
+            <if test="videoUrl != null">video_url = #{videoUrl},</if>
+            <if test="content != null">content = #{content},</if>
+            <if test="views != null">views = #{views},</if>
+            <if test="sort != null">sort = #{sort},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="publishTime != null">publish_time = #{publishTime},</if>
+            <if test="publicStatus != null">public_status = #{publicStatus},</if>
+            <if test="description != null">description = #{description},</if>
+        </trim>
+        where article_id = #{articleId}
+    </update>
+
+    <delete id="deleteFsHomeArticleById" parameterType="Long">
+        delete from fs_home_article where article_id = #{articleId}
+    </delete>
+
+    <delete id="deleteFsHomeArticleByIds" parameterType="String">
+        delete from fs_home_article where article_id in
+        <foreach item="articleId" collection="array" open="(" separator="," close=")">
+            #{articleId}
+        </foreach>
+    </delete>
+
+    <select id="selectHomeArticlePageList" resultType="HomeArticleListVO">
+        SELECT
+        article_id,
+        title,
+        content,
+        image_url,
+        views,
+        publish_time,
+        public_status,
+        description
+        FROM
+        fs_home_article
+        <where>
+            public_status = 1
+            <if test="categoryId != null "> and category_id = #{categoryId}</if>
+            <if test="keywords != null  and keywords != ''"> and title like concat('%', #{keywords}, '%')</if>
+        </where>
+        order by sort asc
+    </select>
+
+    <select id="getHomeArticleDetailsById" resultType="HomeArticleDetailsVO">
+        SELECT
+            article_id,
+            title,
+            image_url,
+            video_url,
+            content,
+            publish_time,
+            description,
+            views
+        FROM
+            fs_home_article
+        WHERE
+            article_id = #{articleId}
+    </select>
+
+</mapper>

+ 99 - 0
fs-service-system/src/main/resources/mapper/store/FsHomeArticleViewMapper.xml

@@ -0,0 +1,99 @@
+<?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.fs.store.mapper.FsHomeArticleViewMapper">
+
+    <resultMap type="FsHomeArticleView" id="FsHomeArticleViewResult">
+        <result property="viewId"    column="view_id"    />
+        <result property="articleId"    column="article_id"    />
+        <result property="userId"    column="user_id"    />
+        <result property="createTime"    column="create_time"    />
+    </resultMap>
+
+    <sql id="selectFsHomeArticleViewVo">
+        select view_id, article_id, user_id, create_time from fs_home_article_view
+    </sql>
+
+    <select id="selectFsHomeArticleViewList" resultType="FsHomeArticleView">
+        SELECT
+        ha.article_id,
+        ha.title,
+        u.user_id,
+        u.avatar,
+        u.phone,
+        u.nickname,
+        v.create_time
+        FROM
+        fs_home_article_view v
+        LEFT JOIN fs_user u ON u.user_id = v.user_id
+        LEFT JOIN fs_home_article ha ON ha.article_id = v.article_id
+        <where>
+            <if test="title != null">
+                AND ha.title like concat('%', #{title}, '%')
+            </if>
+            <if test="phone != null">
+                AND u.phone like concat('%', #{phone}, '%')
+            </if>
+        </where>
+        ORDER BY v.create_time
+    </select>
+
+    <select id="selectFsHomeArticleViewById" parameterType="Long" resultMap="FsHomeArticleViewResult">
+        <include refid="selectFsHomeArticleViewVo"/>
+        where view_id = #{viewId}
+    </select>
+
+    <insert id="insertFsHomeArticleView" parameterType="FsHomeArticleView" useGeneratedKeys="true" keyProperty="viewId">
+        insert into fs_home_article_view
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="articleId != null">article_id,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="createTime != null">create_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="articleId != null">#{articleId},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="createTime != null">#{createTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFsHomeArticleView" parameterType="FsHomeArticleView">
+        update fs_home_article_view
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="articleId != null">article_id = #{articleId},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+        </trim>
+        where view_id = #{viewId}
+    </update>
+
+    <delete id="deleteFsHomeArticleViewById" parameterType="Long">
+        delete from fs_home_article_view where view_id = #{viewId}
+    </delete>
+
+    <delete id="deleteFsHomeArticleViewByIds" parameterType="String">
+        delete from fs_home_article_view where view_id in
+        <foreach item="viewId" collection="array" open="(" separator="," close=")">
+            #{viewId}
+        </foreach>
+    </delete>
+
+    <select id="selectHomeArticleViewsList" resultType="HomeArticleViewsListVO">
+        SELECT
+        u.user_id,
+        u.avatar,
+        u.nickname
+        FROM
+        fs_home_article_view v
+        LEFT JOIN fs_user u ON u.user_id = v.user_id
+        <where>
+            <if test="param.articleId != null">
+                AND v.article_id = #{param.articleId}
+            </if>
+        </where>
+        ORDER BY
+        v.view_id DESC
+    </select>
+
+</mapper>

+ 103 - 0
fs-user-app/src/main/java/com/fs/app/controller/HomeArticleController.java

@@ -0,0 +1,103 @@
+package com.fs.app.controller;
+
+
+import com.fs.app.annotation.Login;
+import com.fs.common.core.domain.R;
+import com.fs.store.param.home.HomeArticleCategoryPageParam;
+import com.fs.store.param.home.HomeArticlePageParam;
+import com.fs.store.param.home.HomeArticleViewListParam;
+import com.fs.store.service.IFsHomeArticleCategoryService;
+import com.fs.store.service.IFsHomeArticleService;
+import com.fs.store.service.IFsHomeArticleViewService;
+import com.fs.store.vo.home.HomeArticleCategoryListVO;
+import com.fs.store.vo.home.HomeArticleDetailsVO;
+import com.fs.store.vo.home.HomeArticleListVO;
+import com.fs.store.vo.home.HomeArticleViewsListVO;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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 java.util.List;
+
+
+@Api("倍力之家相关接口")
+@RestController
+@RequestMapping(value = "/app/home/article")
+public class HomeArticleController extends AppBaseController {
+
+    @Autowired
+    private IFsHomeArticleCategoryService homeCategoryService;
+
+    @Autowired
+    private IFsHomeArticleService homeArticleService;
+
+    @Autowired
+    private IFsHomeArticleViewService homeArticleViewService;
+
+    @Login
+    @ApiOperation("分页获取文章分类")
+    @GetMapping("/getCategory")
+    public R getCategory(HomeArticleCategoryPageParam param) {
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+        List<HomeArticleCategoryListVO> list = homeCategoryService.selectHomeArticleCategoryPageList(param);
+        PageInfo<HomeArticleCategoryListVO> listPageInfo = new PageInfo<>(list);
+        return R.ok().put("data", listPageInfo);
+    }
+
+    @Login
+    @ApiOperation("分页获取文章列表")
+    @GetMapping("/get")
+    public R getArticle(HomeArticlePageParam param) {
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+        List<HomeArticleListVO> list = homeArticleService.selectHomeArticlePageList(param);
+        PageInfo<HomeArticleListVO> listPageInfo = new PageInfo<>(list);
+        return R.ok().put("data", listPageInfo);
+    }
+
+    @Login
+    @ApiOperation("获取文章详情")
+    @GetMapping("/details")
+    public R getArticleDetails(@RequestParam Long articleId) {
+        // 合并 1、获取详情
+        HomeArticleDetailsVO details = homeArticleService.getHomeArticleDetailsById(articleId);
+
+        // 合并 2、更新记录
+        long userId = Long.parseLong(getUserId());
+        int i = homeArticleViewService.addArticleRecord(articleId, userId);
+        if(i > 0){
+            return R.ok().put("data", details);
+        } else {
+            return R.error("获取详情失败");
+        }
+
+    }
+
+//    @Login
+//    @ApiOperation("记录文章阅读记录,更新阅读数")
+//    @PostMapping("/addRecord")
+//    public R addArticleRecord(@RequestParam Long articleId) {
+//        long userId = Long.parseLong(getUserId());
+//        int i = homeArticleViewService.addArticleRecord(articleId, userId);
+//        if (i > 0) {
+//            return R.ok();
+//        } else {
+//            return R.error();
+//        }
+//    }
+
+    @ApiOperation("获取阅读人员列表")
+    @GetMapping("/getViewsList")
+    public R getArticleViewList(HomeArticleViewListParam param) {
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+        List<HomeArticleViewsListVO> list = homeArticleViewService.selectHomeArticleViewsList(param);
+        PageInfo<HomeArticleViewsListVO> listPageInfo = new PageInfo<>(list);
+        return R.ok().put("data", listPageInfo);
+    }
+
+}