wuweihao vor 3 Jahren
Ursprung
Commit
15535d037b
35 geänderte Dateien mit 1170 neuen und 282 gelöschten Zeilen
  1. 35 42
      gis_cms/src/main/java/com/gis/cms/controller/GoodsController.java
  2. 2 2
      gis_cms/src/main/java/com/gis/cms/controller/LeaderController.java
  3. 67 0
      gis_cms/src/main/java/com/gis/cms/controller/ModuleController.java
  4. 76 0
      gis_cms/src/main/java/com/gis/cms/controller/NewsController.java
  5. 4 36
      gis_cms/src/main/java/com/gis/cms/controller/WebController.java
  6. 6 0
      gis_cms/src/main/java/com/gis/cms/entity/dto/GoodsDto.java
  7. 34 0
      gis_cms/src/main/java/com/gis/cms/entity/dto/GoodsPageDateDto.java
  8. 4 0
      gis_cms/src/main/java/com/gis/cms/entity/dto/LeaderDto.java
  9. 21 0
      gis_cms/src/main/java/com/gis/cms/entity/dto/LeaderPageDto.java
  10. 44 0
      gis_cms/src/main/java/com/gis/cms/entity/dto/ModuleDto.java
  11. 49 0
      gis_cms/src/main/java/com/gis/cms/entity/dto/NewsDto.java
  12. 23 0
      gis_cms/src/main/java/com/gis/cms/entity/dto/NewsPageDataDto.java
  13. 3 0
      gis_cms/src/main/java/com/gis/cms/entity/po/GoodsEntity.java
  14. 1 0
      gis_cms/src/main/java/com/gis/cms/entity/po/LeaderEntity.java
  15. 44 0
      gis_cms/src/main/java/com/gis/cms/entity/po/ModuleEntity.java
  16. 53 0
      gis_cms/src/main/java/com/gis/cms/entity/po/NewsEntity.java
  17. 9 5
      gis_cms/src/main/java/com/gis/cms/mapper/GoodsMapper.java
  18. 5 6
      gis_cms/src/main/java/com/gis/cms/mapper/LeaderMapper.java
  19. 18 0
      gis_cms/src/main/java/com/gis/cms/mapper/ModuleMapper.java
  20. 21 0
      gis_cms/src/main/java/com/gis/cms/mapper/NewsMapper.java
  21. 0 2
      gis_cms/src/main/java/com/gis/cms/mapper/VideoMapper.java
  22. 3 1
      gis_cms/src/main/java/com/gis/cms/mapper/provider/BaseProvider.java
  23. 0 56
      gis_cms/src/main/java/com/gis/cms/mapper/provider/GoodsProvider.java
  24. 0 48
      gis_cms/src/main/java/com/gis/cms/mapper/provider/LeaderProvider.java
  25. 11 5
      gis_cms/src/main/java/com/gis/cms/service/GoodsService.java
  26. 2 2
      gis_cms/src/main/java/com/gis/cms/service/LeaderService.java
  27. 29 0
      gis_cms/src/main/java/com/gis/cms/service/ModuleService.java
  28. 42 0
      gis_cms/src/main/java/com/gis/cms/service/NewsService.java
  29. 150 15
      gis_cms/src/main/java/com/gis/cms/service/impl/GoodsServiceImpl.java
  30. 8 5
      gis_cms/src/main/java/com/gis/cms/service/impl/LeaderServiceImpl.java
  31. 96 0
      gis_cms/src/main/java/com/gis/cms/service/impl/ModuleServiceImpl.java
  32. 159 0
      gis_cms/src/main/java/com/gis/cms/service/impl/NewsServiceImpl.java
  33. 72 0
      gis_common/src/main/java/com/gis/common/config/FastJson2JsonRedisSerializer.java
  34. 0 57
      gis_common/src/main/java/com/gis/common/config/MyRedisConfig.java
  35. 79 0
      gis_common/src/main/java/com/gis/common/config/RedisConfig.java

+ 35 - 42
gis_cms/src/main/java/com/gis/cms/controller/GoodsController.java

@@ -1,5 +1,6 @@
 package com.gis.cms.controller;
 
+import com.gis.cms.entity.dto.GoodsPageDateDto;
 import com.gis.cms.entity.dto.GoodsPageDto;
 import com.gis.cms.entity.dto.SortPageDto;
 import com.gis.cms.entity.dto.GoodsDto;
@@ -28,78 +29,70 @@ import javax.validation.Valid;
 public class GoodsController {
 
     @Autowired
-    private GoodsService entityService;
+    GoodsService entityService;
 
     @Autowired
     FileService fileService;
 
 
-    @ApiOperation(value = "列表")
+    @ApiOperation("列表")
     @PostMapping("list")
-    public Result list(@Valid @RequestBody GoodsPageDto param) {
+    public Result<GoodsEntity> list(@RequestBody GoodsPageDateDto param) {
         return entityService.search(param);
     }
 
-
-    @WebControllerLog(description = "宣传片管理-新增/编辑", addDb = true)
-    @ApiOperation(value = "新增/编辑")
+    @WebControllerLog(description = "精品典藏-新增/修改", addDb = true)
+    @ApiOperation(value = "新增/修改", notes = "type=img, 才使用fileIds")
     @PostMapping("save")
     public Result save(@Valid @RequestBody GoodsDto param) {
         return entityService.saveEntity(param);
     }
 
+    @WebControllerLog(description = "精品典藏-删除", addDb = true)
+    @ApiOperation("删除")
+    @GetMapping("remove/{id}")
+    public Result remove(@PathVariable Long id) {
+        entityService.removeById(id);
+        return Result.success();
+
+    }
 
-    @ApiOperation("详情")
+    @ApiOperation("场景详情")
     @GetMapping("detail/{id}")
     public Result<GoodsEntity> detail(@PathVariable Long id) {
         return entityService.detail(id);
     }
 
-    @ApiOperation(value = "是否显示", notes = "display: 1:显示, 0:不显示")
-    @GetMapping(value = "display/{id}/{display}")
-    public Result<GoodsEntity> display(@PathVariable Integer display, @PathVariable Long id) {
-        entityService.setDisplay(id, display);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "排序", notes = "sort: 序号")
-    @GetMapping(value = "sort/{id}/{sort}")
-    public Result<GoodsEntity> sort(@PathVariable Integer sort, @PathVariable Long id) {
-        entityService.setSort(id, sort);
-        return Result.success();
+    @WebControllerLog(description = "精品典藏-上传")
+    @ApiOperation(value = "上传", notes = "类型, model:模型, video:视频, thumb:缩略图; 视频、模型使用原名存储(中文转拼音),相同名称会覆盖")
+    @PostMapping("upload/{type}")
+    public Result upload(MultipartFile file, @PathVariable String type) {
+        return entityService.upload(file, type);
     }
 
-    @ApiOperation(value = "图片上传")
-    @PostMapping("upload")
-    public Result upload(MultipartFile file) {
-        return entityService.upload(file);
+    @WebControllerLog(description = "精品典藏-上传图片")
+    @ApiOperation(value = "上传图片", notes = "图片类型使用,重命名文件")
+    @PostMapping("uploadImg")
+    public Result uploadImg(MultipartFile file, String code) {
+        return entityService.uploadImg(file, code);
     }
 
-    @ApiOperation(value = "视频上传")
-    @PostMapping("video/upload")
-    public Result videoUpload(MultipartFile file) {
-        String type = "video";
-        return entityService.videoUpload(file, type);
-    }
+    @WebControllerLog(description = "精品典藏-删除图片", addDb = true)
+    @ApiOperation(value = "删除图片")
+    @GetMapping("remove/file/{fileId}")
+    public Result removeFile(@PathVariable Long fileId) {
+        return entityService.removeFile(fileId);
 
 
-    @ApiOperation("删除")
-    @GetMapping("remove/{id}")
-    public Result remove(@PathVariable Long id) {
-        return Result.success(entityService.removeById(id));
     }
 
-    @ApiOperation("删除图片")
-    @GetMapping("imgRemove/{id}")
-    public Result imgRemove(@PathVariable Long id) {
-        return Result.success(fileService.removeById(id));
+    @ApiOperation(value = "是否显示", notes = "display, 0:不显示, 1:显示")
+    @GetMapping("display/{id}/{display}")
+    public Result updateDisplay(@PathVariable Long id, @PathVariable Integer display) {
+        return entityService.display(id, display);
     }
 
-//    @ApiOperation("设置封面")
-//    @GetMapping("imgIndex/{id}/{fileId}")
-//    public Result imgIndex(@PathVariable Long fileId, @PathVariable Long id) {
-//        return entityService.imgIndex(fileId, id);
-//    }
+
 
 
 

+ 2 - 2
gis_cms/src/main/java/com/gis/cms/controller/LeaderController.java

@@ -1,7 +1,7 @@
 package com.gis.cms.controller;
 
 import com.gis.cms.entity.dto.LeaderDto;
-import com.gis.cms.entity.dto.SortPageDto;
+import com.gis.cms.entity.dto.LeaderPageDto;
 import com.gis.cms.entity.po.LeaderEntity;
 import com.gis.cms.service.LeaderService;
 import com.gis.common.base.aop.WebControllerLog;
@@ -30,7 +30,7 @@ public class LeaderController {
 
     @ApiOperation(value = "列表")
     @PostMapping("/list")
-    public Result list(@RequestBody SortPageDto param) {
+    public Result list(@Valid @RequestBody LeaderPageDto param) {
         return entityService.search(param);
     }
 

+ 67 - 0
gis_cms/src/main/java/com/gis/cms/controller/ModuleController.java

@@ -0,0 +1,67 @@
+package com.gis.cms.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.gis.cms.entity.dto.ModuleDto;
+import com.gis.cms.entity.po.ModuleEntity;
+import com.gis.cms.service.ModuleService;
+import com.gis.common.base.aop.WebControllerLog;
+import com.gis.common.util.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * Created by owen on 2021/6/24 0008 9:54
+ */
+@Slf4j
+@Api(tags = "二级模块管理")
+@RestController
+@RequestMapping("cms/module")
+public class ModuleController {
+
+    @Autowired
+    ModuleService entityService;
+
+
+
+    @ApiOperation(value = "v0.3-列表", notes = "goods:精品典藏, news:教育基地")
+    @PostMapping("list/{module}")
+    public Result<ModuleEntity> search(@PathVariable String module) {
+        // 排序:默认模块>自定义模块还创建时间正序;
+        LambdaQueryWrapper<ModuleEntity> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ModuleEntity::getModule, module);
+        wrapper.orderByDesc(ModuleEntity::getIsDefault);
+        wrapper.orderByDesc(ModuleEntity::getCreateTime);
+        return Result.success(entityService.list(wrapper));
+    }
+
+
+    @WebControllerLog(description = "模块管理-删除", addDb = true)
+    @ApiOperation("删除")
+    @GetMapping("remove/{id}")
+    public Result remove(@PathVariable Long id) {
+        return entityService.remove(id);
+    }
+
+    @ApiOperation("场景详情")
+    @GetMapping("detail/{id}")
+    public Result<ModuleEntity> detail(@PathVariable Long id) {
+        return entityService.detail(id);
+    }
+
+    @WebControllerLog(description = "v0.3-模块管理-新增/编辑", addDb = true)
+    @ApiOperation(value = "新增/修改", notes = "display, 0:不显示, 1:显示;" +
+            "goods, 模型类型: model:模型, img:图片, video:视频;" +
+            "news,模型类型: share:知识分享, info:知识阅历")
+    @PostMapping("save")
+    public Result saveEntity(@Valid @RequestBody ModuleDto param) {
+        return entityService.saveEntity(param);
+    }
+
+
+
+}

+ 76 - 0
gis_cms/src/main/java/com/gis/cms/controller/NewsController.java

@@ -0,0 +1,76 @@
+package com.gis.cms.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gis.cms.entity.dto.NewsDto;
+import com.gis.cms.entity.dto.NewsPageDataDto;
+import com.gis.cms.entity.po.NewsEntity;
+import com.gis.cms.service.NewsService;
+import com.gis.common.base.aop.WebControllerLog;
+import com.gis.common.util.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+
+/**
+ * Created by owen on 2021/6/24 0008 9:54
+ */
+@Slf4j
+@Api(tags = "学习园地管理")
+@RestController
+@RequestMapping("cms/news")
+public class NewsController {
+
+    @Autowired
+    NewsService entityService;
+
+
+
+    @ApiOperation("列表")
+    @PostMapping("list")
+    public Result<IPage<NewsEntity>>  search(@Valid @RequestBody NewsPageDataDto param) {
+        return entityService.search(param);
+    }
+
+    @WebControllerLog(description = "知识管理-新增/修改", addDb = true)
+    @ApiOperation("新增/修改")
+    @PostMapping("save")
+    public Result save(@Valid @RequestBody NewsDto param) {
+        return entityService.saveEntity(param);
+    }
+
+
+    @WebControllerLog(description = "知识管理-删除", addDb = true)
+    @ApiOperation("删除")
+    @GetMapping("remove/{id}")
+    public Result remove(@PathVariable Long id) {
+        return entityService.remove(id);
+    }
+
+    @ApiOperation("场景详情")
+    @GetMapping("detail/{id}")
+    public Result<NewsEntity> detail(@PathVariable Long id) {
+        return entityService.detail(id);
+    }
+
+
+    @ApiOperation(value = "是否显示", notes = "display, 0:不显示, 1:显示")
+    @GetMapping("display/{id}/{display}")
+    public Result updateDisplay(@PathVariable Long id, @PathVariable Integer display) {
+        return entityService.updateDisplay(id, display);
+    }
+
+
+
+
+    @WebControllerLog(description = "知识管理-富文本上传")
+    @ApiOperation(value = "富文本上传", notes = "类型, file:文件, video:视频, img:图片; 视频、文件使用原名存储(中文转拼音),相同名称会覆盖")
+    @PostMapping("upload/{type}")
+    public Result upload(MultipartFile file, @PathVariable String type) {
+        return entityService.upload(file, type);
+    }
+}

+ 4 - 36
gis_cms/src/main/java/com/gis/cms/controller/WebController.java

@@ -5,6 +5,7 @@ import com.gis.cms.entity.po.GoodsEntity;
 import com.gis.cms.entity.po.VideoEntity;
 import com.gis.cms.service.*;
 import com.gis.common.base.aop.WebControllerLog;
+import com.gis.common.base.entity.dto.PageDto;
 import com.gis.common.util.Result;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -63,9 +64,8 @@ public class WebController {
 
     @ApiOperation(value = "文物列表")
     @PostMapping("goodList")
-    public Result goodList(@Valid @RequestBody GoodsPageDto param) {
+    public Result goodList(@Valid @RequestBody GoodsPageDateDto param) {
         param.setDisplay(1);
-        param.setSortType(1);
         return goodsService.search(param);
     }
 
@@ -81,44 +81,12 @@ public class WebController {
         return goodsService.detail(id);
     }
 
-//    @ApiOperation(value = "学院宣传片列表")
-//    @PostMapping("videoList")
-//    public Result videoList(@RequestBody SortPageDto param) {
-//        param.setDisplay(1);
-//        param.setSortType(1);
-//        return videoService.search(param);
-//    }
-
-
-//    @ApiOperation(value = "美丽校园列表")
-//    @PostMapping("imgList")
-//    public Result imgList(@RequestBody SortPageDto param) {
-//        param.setDisplay(1);
-//        param.setSortType(1);
-//        return imgService.search(param);
-//    }
-
-//    @ApiOperation(value = "军歌列表")
-//    @PostMapping("musicList")
-//    public Result musicList(@RequestBody SortPageDto param) {
-//        param.setDisplay(1);
-//        param.setSortType(1);
-//        return musicService.search(param);
-//    }
-
-//    @ApiOperation(value = "学生列表")
-//    @PostMapping("studentList")
-//    public Result studentList(@RequestBody SortPageDto param) {
-//        param.setDisplay(1);
-//        param.setSortType(1);
-//        return studentService.search(param);
-//    }
+
 
     @ApiOperation(value = "荣誉列表")
     @PostMapping("leaderList")
-    public Result leaderList(@RequestBody SortPageDto param) {
+    public Result leaderList(@RequestBody LeaderPageDto param) {
         param.setDisplay(1);
-        param.setSortType(1);
         return leaderService.search(param);
     }
 

+ 6 - 0
gis_cms/src/main/java/com/gis/cms/entity/dto/GoodsDto.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 
 /**
  * Created by owen on 2021/12/8 0008 14:34
@@ -42,4 +43,9 @@ public class GoodsDto {
     @ApiModelProperty(value = "前端用(封面信息)")
     private Long indexId;
 
+
+    @NotNull(message = "模块id不能为空")
+    @ApiModelProperty(value = "模块id", required = true)
+    private Long moduleId;
+
 }

+ 34 - 0
gis_cms/src/main/java/com/gis/cms/entity/dto/GoodsPageDateDto.java

@@ -0,0 +1,34 @@
+package com.gis.cms.entity.dto;
+
+import com.gis.common.base.entity.dto.PageDateDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * Created by owen on 2020/5/9 0009 12:20
+ */
+@Data
+public class GoodsPageDateDto extends PageDateDto {
+
+//    @ApiModelProperty(value = "状态")
+//    private Integer status;
+
+    @NotNull(message = "模块id不能为空")
+    @ApiModelProperty(value = "模块id", required = true)
+    private Long moduleId;
+
+//    @NotBlank(message = "排序类型不能为空")
+//    @ApiModelProperty(value = "排序类型, time:时间, vote:投票, like:点赞", required = true)
+//    private String sortType;
+
+    @ApiModelProperty(value = "(后端)显示:0:不显示,1:显示", notes = "后端使用")
+    private Integer display;
+
+
+
+
+
+}

+ 4 - 0
gis_cms/src/main/java/com/gis/cms/entity/dto/LeaderDto.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 
 /**
  * Created by owen on 2021/12/8 0008 14:34
@@ -42,4 +43,7 @@ public class LeaderDto  {
     private String description;
 
 
+
+
+
 }

+ 21 - 0
gis_cms/src/main/java/com/gis/cms/entity/dto/LeaderPageDto.java

@@ -0,0 +1,21 @@
+package com.gis.cms.entity.dto;
+
+import com.gis.common.base.entity.dto.PageDateDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * Created by owen on 2021/12/8 0008 14:34
+ */
+@Data
+public class LeaderPageDto extends PageDateDto {
+
+
+
+    @ApiModelProperty(value = "显示:0:不显示,1:显示", notes = "后端使用")
+    private Integer display;
+
+}

+ 44 - 0
gis_cms/src/main/java/com/gis/cms/entity/dto/ModuleDto.java

@@ -0,0 +1,44 @@
+package com.gis.cms.entity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.persistence.Table;
+import javax.validation.constraints.NotBlank;
+
+/**
+ * Created by owen on 2022/2/8 0010 17:39
+ * 精品典藏模块管理
+ */
+@Data
+public class ModuleDto {
+
+    private Long id;
+
+    @NotBlank(message = "名称不能为空")
+    @ApiModelProperty(value = "名称", required = true)
+    private String name;
+
+    @NotBlank(message = "类型不能为空")
+    @ApiModelProperty(value = "类型, model:模型, img:图片, video:视频", required = true)
+    private String type;
+
+
+//    @ApiModelProperty(value = "投票功能,0:关, 1:开")
+//    private Integer isVote;
+//
+//    @ApiModelProperty(value = "投票数量,默认为1")
+//    private Integer voteCount;
+//
+//    @ApiModelProperty(value = "点赞功能,0:关, 1:开")
+//    private Integer isLike;
+
+    @NotBlank(message = "模块类型不能为空")
+    @ApiModelProperty(value = "模块类型, goods:精品典藏, news:教育基地", required = true)
+    private String module;
+
+
+
+
+
+}

+ 49 - 0
gis_cms/src/main/java/com/gis/cms/entity/dto/NewsDto.java

@@ -0,0 +1,49 @@
+package com.gis.cms.entity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * Created by owen on 2021//24 0010 17:39
+ * 新闻资讯表
+ */
+@Data
+public class NewsDto implements Serializable {
+
+    private static final long serialVersionUID = 3722563135931985330L;
+
+    @ApiModelProperty(value = "id, 修改时必须传,新增忽略")
+    private Long id;
+
+    @NotBlank(message = "名称不能为空")
+    @ApiModelProperty(value = "名称", required = true)
+    private String name;
+
+    @NotBlank(message = "类型不能为空")
+    @ApiModelProperty(value = "类型, share:共享, info:阅览", required = true)
+    private String type;
+
+    @NotNull(message = "是否显示不能为空")
+    @ApiModelProperty(value = "是否显示,1:显示, 0:不显示, 默认显示", required = true)
+    private Integer display;
+
+    @NotBlank(message = "简介不能为空")
+    @ApiModelProperty(value = "简介", required = true)
+    private String description;
+
+    @ApiModelProperty(value = "内容")
+    private String content;
+
+    @ApiModelProperty(value = "链接")
+    private String shareUrl;
+
+    @NotNull(message = "模块id不能为空")
+    @ApiModelProperty(value = "模块id", required = true)
+    private Long moduleId;
+
+
+}

+ 23 - 0
gis_cms/src/main/java/com/gis/cms/entity/dto/NewsPageDataDto.java

@@ -0,0 +1,23 @@
+package com.gis.cms.entity.dto;
+
+import com.gis.common.base.entity.dto.PageDateDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+
+/**
+ * Created by owen on 2021/6/23 0023 17:53
+ */
+@Data
+public class NewsPageDataDto extends PageDateDto {
+
+
+    @NotNull(message = "模块id不能为空")
+    @ApiModelProperty(value = "模块id", required = true)
+    private Long moduleId;
+
+    @ApiModelProperty(value = "(后端)是否显示,1:显示, 0:不显示, 默认显示")
+    private Integer display;
+}

+ 3 - 0
gis_cms/src/main/java/com/gis/cms/entity/po/GoodsEntity.java

@@ -49,5 +49,8 @@ public class GoodsEntity extends BaseEntity {
     @ApiModelProperty(value = "前端用(封面信息)")
     private Long indexId;
 
+    @ApiModelProperty(value = "模块id")
+    private Long moduleId;
+
 
 }

+ 1 - 0
gis_cms/src/main/java/com/gis/cms/entity/po/LeaderEntity.java

@@ -61,4 +61,5 @@ public class LeaderEntity extends BaseEntity implements Serializable {
 
 
 
+
 }

+ 44 - 0
gis_cms/src/main/java/com/gis/cms/entity/po/ModuleEntity.java

@@ -0,0 +1,44 @@
+package com.gis.cms.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.gis.common.base.entity.po.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * Created by owen on 2022/2/8 0010 17:39
+ * 精品典藏模块管理
+ */
+@Data
+@TableName(value = "tb_module")
+public class ModuleEntity extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 7751041761372618223L;
+    @ApiModelProperty(value = "名称" )
+    private String name;
+
+    @ApiModelProperty(value = "类型, model:模型, img:图片, video:视频")
+    private String type;
+
+//    @ApiModelProperty(value = "投票功能,0:关, 1:开")
+//    private Integer isVote;
+//
+//    @ApiModelProperty(value = "投票数量,默认为1")
+//    private Integer voteCount;
+//
+//    @ApiModelProperty(value = "点赞功能,0:关, 1:开")
+//    private Integer isLike;
+
+    @ApiModelProperty(value = "预设, 0:否, 1:是" )
+    private Integer isDefault;
+
+    @ApiModelProperty(value = "模块类型, goods:精品典藏, leader:荣誉")
+    private String module;
+
+
+
+
+}

+ 53 - 0
gis_cms/src/main/java/com/gis/cms/entity/po/NewsEntity.java

@@ -0,0 +1,53 @@
+package com.gis.cms.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.gis.common.base.entity.po.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * Created by owen on 2021/4/20 0010 17:39
+ * 教育基地
+ */
+@Data
+@TableName(value = "tb_news")
+public class NewsEntity extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 6762104274638442519L;
+    @ApiModelProperty(value = "名称" )
+    private String name;
+
+    @ApiModelProperty(value = "内容")
+    private String content;
+
+    @ApiModelProperty(value = "用户名")
+    private String userName;
+
+    @ApiModelProperty(value = "类型, share:共享, info:阅览")
+    private String type;
+
+    @ApiModelProperty(value = "阅读量")
+    private Integer visit;
+
+    @ApiModelProperty(value = "是否显示,1:显示, 0:不显示, 默认显示")
+    private Integer display;
+
+    @ApiModelProperty(value = "简介")
+    private String description;
+
+    @ApiModelProperty(value = "状态,0:草稿中, 1:待审核, 2:审核不通过, 3:审核通过")
+    private Integer status;
+
+    @ApiModelProperty(value = "链接, type:share才有值")
+    private String shareUrl;
+
+    @ApiModelProperty(value = "模块id")
+    private Long moduleId;
+
+
+
+
+}

+ 9 - 5
gis_cms/src/main/java/com/gis/cms/mapper/GoodsMapper.java

@@ -3,10 +3,8 @@ package com.gis.cms.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.gis.cms.entity.dto.GoodsPageDto;
-import com.gis.cms.entity.dto.SortPageDto;
 import com.gis.cms.entity.po.GoodsEntity;
-import com.gis.cms.mapper.provider.GoodsProvider;
+import com.gis.cms.mapper.provider.BaseProvider;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.SelectProvider;
 import org.apache.ibatis.annotations.Update;
@@ -17,8 +15,8 @@ import org.springframework.stereotype.Component;
 public interface GoodsMapper extends BaseMapper<GoodsEntity> {
 
 
-    @SelectProvider(type = GoodsProvider.class, method = "search")
-    IPage<GoodsEntity> search(GoodsPageDto param, IPage<GoodsEntity> page);
+//    @SelectProvider(type = GoodsProvider.class, method = "search")
+//    IPage<GoodsEntity> search(GoodsPageDateDto param, IPage<GoodsEntity> page);
 
     @Update("update tb_goods set display = #{display} , update_time = NOW() where is_delete=0 and id = #{id} ")
     void setDisplay(Long id, Integer display);
@@ -31,4 +29,10 @@ public interface GoodsMapper extends BaseMapper<GoodsEntity> {
 
     @Update("update tb_goods set visit = visit+1 , update_time = NOW() where is_delete=0 and id = #{id} ")
     void setVisit(Long id);
+
+    @SelectProvider(type = BaseProvider.class, method = "selectSql")
+    IPage<GoodsEntity> pageSearchSql(String sql, IPage<GoodsEntity> page);
+
+    @Update("update tb_goods set is_delete = 1 , update_time = NOW() where is_delete = 0  and module_id = #{modelId}")
+    void delByModelId(Long modelId);
 }

+ 5 - 6
gis_cms/src/main/java/com/gis/cms/mapper/LeaderMapper.java

@@ -2,12 +2,8 @@ package com.gis.cms.mapper;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.gis.cms.entity.dto.SortPageDto;
 import com.gis.cms.entity.po.LeaderEntity;
-import com.gis.cms.mapper.provider.LeaderProvider;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.SelectProvider;
 import org.apache.ibatis.annotations.Update;
 import org.springframework.stereotype.Component;
 
@@ -16,8 +12,8 @@ import org.springframework.stereotype.Component;
 public interface LeaderMapper extends BaseMapper<LeaderEntity> {
 
 
-    @SelectProvider(type = LeaderProvider.class, method = "search")
-    IPage<LeaderEntity> search(SortPageDto param, IPage<LeaderEntity> page);
+//    @SelectProvider(type = LeaderProvider.class, method = "search")
+//    IPage<LeaderEntity> search(SortPageDto param, IPage<LeaderEntity> page);
 
     @Update("update tb_leader set display = #{display} , update_time = NOW() where is_delete=0 and id = #{id} ")
     void setDisplay(Long id, Integer display);
@@ -27,4 +23,7 @@ public interface LeaderMapper extends BaseMapper<LeaderEntity> {
 
     @Update("update tb_leader set visit = visit+1 , update_time = NOW() where is_delete=0 and id = #{id} ")
     void setVisit(Long id);
+
+//    @SelectProvider(type = BaseProvider.class, method = "selectSql")
+//    IPage<GoodsEntity> pageSearchSql(String sql, IPage<GoodsEntity> page);
 }

+ 18 - 0
gis_cms/src/main/java/com/gis/cms/mapper/ModuleMapper.java

@@ -0,0 +1,18 @@
+package com.gis.cms.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gis.cms.entity.po.ModuleEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Component;
+
+
+@Component
+@Mapper
+public interface ModuleMapper extends BaseMapper<ModuleEntity> {
+
+
+
+
+
+}

+ 21 - 0
gis_cms/src/main/java/com/gis/cms/mapper/NewsMapper.java

@@ -0,0 +1,21 @@
+package com.gis.cms.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gis.cms.entity.po.ModuleEntity;
+import com.gis.cms.entity.po.NewsEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Update;
+import org.springframework.stereotype.Component;
+
+
+@Component
+@Mapper
+public interface NewsMapper extends BaseMapper<NewsEntity> {
+
+    @Update("update tb_news set visit = visit + 1 , update_time = NOW() where is_delete = 0  and id = #{id}")
+    void addVisit(Long id);
+
+
+
+}

+ 0 - 2
gis_cms/src/main/java/com/gis/cms/mapper/VideoMapper.java

@@ -4,9 +4,7 @@ package com.gis.cms.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.gis.cms.entity.dto.SortPageDto;
-import com.gis.cms.entity.po.LeaderEntity;
 import com.gis.cms.entity.po.VideoEntity;
-import com.gis.cms.mapper.provider.LeaderProvider;
 import com.gis.cms.mapper.provider.VideoProvider;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.SelectProvider;

+ 3 - 1
gis_cms/src/main/java/com/gis/cms/mapper/provider/BaseProvider.java

@@ -1,14 +1,16 @@
 package com.gis.cms.mapper.provider;
 
 
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * Created by owen on 2022/2/9.
  */
+@Slf4j
 public class BaseProvider {
 
     public String selectSql(String sql){
-
+      log.info("sql: {}", sql);
         return sql;
     }
 

+ 0 - 56
gis_cms/src/main/java/com/gis/cms/mapper/provider/GoodsProvider.java

@@ -1,56 +0,0 @@
-package com.gis.cms.mapper.provider;
-
-import com.gis.cms.entity.dto.GoodsPageDto;
-import com.gis.cms.entity.dto.SortPageDto;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-
-import javax.validation.constraints.NotBlank;
-
-/**
- * Created by owen on 2021/12/28 0028 12:17
- */
-@Slf4j
-public class GoodsProvider {
-
-    public String search(GoodsPageDto param) {
-        StringBuffer sql = new StringBuffer(
-                "select a.* ,b.real_name as creatorName from tb_goods a left join sys_user b on b.id=a.creator_id where a.is_delete=0 ");
-
-        Integer display = param.getDisplay();
-        if (display != null){
-            sql.append( " and a.display=").append(display);
-        }
-
-        String type = param.getType();
-        if (StringUtils.isNotBlank(type)){
-            sql.append(" and a.type='").append(type).append("'");
-        }
-
-        if (StringUtils.isNotBlank(param.getStartTime()) && StringUtils.isNotBlank(param.getEndTime())) {
-
-            sql.append(" and a.create_time >= ").append("'").append(param.getStartTime()).append("'");
-            sql.append(" and a.create_time <= ").append("'").append(param.getEndTime()).append("'");
-        }
-
-        String searchKey = param.getSearchKey();
-        if (!StringUtils.isAllBlank(searchKey)) {
-            searchKey = StringUtils.trim(searchKey);
-            sql.append(" and (");
-            sql.append( "a.name like '%").append(searchKey).append("%'");
-            sql.append(")");
-        }
-
-        Integer sortType = param.getSortType();
-        if (sortType == 0){
-            sql.append(" order by a.create_time desc");
-        } else if (sortType == 1){
-            sql.append(" order by a.sort desc");
-        } else {
-            sql.append(" order by a.sort, a.create_time desc");
-        }
-
-        log.info("sql: {}", sql.toString());
-        return sql.toString();
-    }
-}

+ 0 - 48
gis_cms/src/main/java/com/gis/cms/mapper/provider/LeaderProvider.java

@@ -1,48 +0,0 @@
-package com.gis.cms.mapper.provider;
-
-import com.gis.cms.entity.dto.SortPageDto;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-
-/**
- * Created by owen on 2021/12/28 0028 12:17
- */
-@Slf4j
-public class LeaderProvider {
-
-    public String search(SortPageDto param) {
-        StringBuffer sql = new StringBuffer(
-                "select a.* ,b.real_name as creatorName from tb_leader a left join sys_user b on b.id=a.creator_id where a.is_delete=0 ");
-
-        Integer display = param.getDisplay();
-        if (display != null){
-            sql.append( " and a.display=").append(display);
-        }
-
-        if (StringUtils.isNotBlank(param.getStartTime()) && StringUtils.isNotBlank(param.getEndTime())) {
-
-            sql.append(" and a.create_time >= ").append("'").append(param.getStartTime()).append("'");
-            sql.append(" and a.create_time <= ").append("'").append(param.getEndTime()).append("'");
-        }
-
-        String searchKey = param.getSearchKey();
-        if (!StringUtils.isAllBlank(searchKey)) {
-            searchKey = StringUtils.trim(searchKey);
-            sql.append(" and (");
-            sql.append( "a.name like '%").append(searchKey).append("%'");
-            sql.append(")");
-        }
-
-        Integer sortType = param.getSortType();
-        if (sortType == 0){
-            sql.append(" order by a.create_time desc");
-        } else if (sortType == 1){
-            sql.append(" order by a.sort desc");
-        } else {
-            sql.append(" order by a.sort, a.create_time desc");
-        }
-
-        log.info("sql: {}", sql.toString());
-        return sql.toString();
-    }
-}

+ 11 - 5
gis_cms/src/main/java/com/gis/cms/service/GoodsService.java

@@ -2,6 +2,7 @@ package com.gis.cms.service;
 
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.gis.cms.entity.dto.GoodsPageDateDto;
 import com.gis.cms.entity.dto.GoodsPageDto;
 import com.gis.cms.entity.dto.GoodsDto;
 import com.gis.cms.entity.po.GoodsEntity;
@@ -16,11 +17,10 @@ public interface GoodsService extends IService<GoodsEntity> {
 
     Result saveEntity(GoodsDto param);
 
-    Result upload(MultipartFile file);
+    Result upload(MultipartFile file, String type);
 
-    Result videoUpload(MultipartFile file, String type);
 
-    Result search(GoodsPageDto param);
+    Result search(GoodsPageDateDto param);
 
     void setDisplay(Long id, Integer display);
 
@@ -28,7 +28,13 @@ public interface GoodsService extends IService<GoodsEntity> {
 
     Result<GoodsEntity> detail(Long id);
 
-    Result imgIndex(Long fileId, Long id);
-
     void setVisit(Long id);
+
+    Result uploadImg(MultipartFile file, String code);
+
+    Result removeFile(Long fileId);
+
+    Result display(Long id, Integer display);
+
+    void delByModelId(Long id);
 }

+ 2 - 2
gis_cms/src/main/java/com/gis/cms/service/LeaderService.java

@@ -3,7 +3,7 @@ package com.gis.cms.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.gis.cms.entity.dto.LeaderDto;
-import com.gis.cms.entity.dto.SortPageDto;
+import com.gis.cms.entity.dto.LeaderPageDto;
 import com.gis.cms.entity.po.LeaderEntity;
 import com.gis.common.util.Result;
 import org.springframework.web.multipart.MultipartFile;
@@ -20,7 +20,7 @@ public interface LeaderService extends IService<LeaderEntity> {
 
     Result richUpload(MultipartFile file, String type);
 
-    Result search(SortPageDto param);
+    Result search(LeaderPageDto param);
 
     void setDisplay(Long id, Integer display);
 

+ 29 - 0
gis_cms/src/main/java/com/gis/cms/service/ModuleService.java

@@ -0,0 +1,29 @@
+package com.gis.cms.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gis.cms.entity.dto.ModuleDto;
+import com.gis.cms.entity.po.ModuleEntity;
+import com.gis.common.util.Result;
+
+
+/**
+ * Created by owen on 2020/3/11 0011 16:14
+ */
+public interface ModuleService extends IService<ModuleEntity> {
+
+
+
+    Result saveEntity(ModuleDto param);
+
+    Result detail(Long id);
+
+    Result remove(Long id);
+
+
+
+
+
+
+
+}

+ 42 - 0
gis_cms/src/main/java/com/gis/cms/service/NewsService.java

@@ -0,0 +1,42 @@
+package com.gis.cms.service;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gis.cms.entity.dto.ModuleDto;
+import com.gis.cms.entity.dto.NewsDto;
+import com.gis.cms.entity.dto.NewsPageDataDto;
+import com.gis.cms.entity.po.ModuleEntity;
+import com.gis.cms.entity.po.NewsEntity;
+import com.gis.common.util.Result;
+import org.springframework.web.multipart.MultipartFile;
+
+
+/**
+ * Created by owen on 2020/3/11 0011 16:14
+ */
+public interface NewsService extends IService<NewsEntity> {
+
+
+
+
+
+    Result saveEntity(NewsDto param);
+
+    Result remove(Long id);
+
+    Result<NewsEntity> detail(Long id);
+
+    Result<IPage<NewsEntity>> search(NewsPageDataDto param);
+
+    Result updateDisplay(Long id, Integer display);
+
+    void addVisit(Long id);
+
+    Result upload(MultipartFile file, String type);
+
+
+
+
+
+}

+ 150 - 15
gis_cms/src/main/java/com/gis/cms/service/impl/GoodsServiceImpl.java

@@ -1,8 +1,11 @@
 package com.gis.cms.service.impl;
 
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gis.cms.entity.dto.GoodsPageDateDto;
 import com.gis.cms.entity.dto.GoodsPageDto;
 import com.gis.cms.entity.dto.GoodsDto;
 import com.gis.cms.entity.po.FileEntity;
@@ -11,8 +14,10 @@ import com.gis.cms.mapper.GoodsMapper;
 import com.gis.cms.service.FileService;
 import com.gis.cms.service.GoodsService;
 import com.gis.common.base.service.impl.IBaseService;
+import com.gis.common.constant.TypeCode;
 import com.gis.common.util.BaseUtil;
 import com.gis.common.util.FileUtils;
+import com.gis.common.util.RegexUtil;
 import com.gis.common.util.Result;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -21,6 +26,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.time.LocalDateTime;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -44,12 +51,86 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, GoodsEntity> impl
 
 
 
+//    @Override
+//    public Result search(GoodsPageDateDto param) {
+//        BaseUtil.startPage(param);
+//        IPage<GoodsEntity> page = new Page<>(param.getPageNum() , param.getPageSize());
+//
+//        StringBuffer sql = new StringBuffer();
+//        // 使用了子查询
+//        sql.append("select a.*, b.countLike as countLike, b.countVote as countVote from tb_goods a left join " +
+//                "(SELECT id,goods_id, count(case when type='vote' then 1 end) countVote, " +
+//                "count(case when type='like' then 1 end) countLike " +
+//                "from tb_goods_vote WHERE is_delete=0 GROUP BY goods_id) b " +
+//                "on a.id=b.goods_id where a.is_delete=0");
+//        Integer display = param.getDisplay();
+//        if (display != null){
+//            sql.append(" and a.display=").append(display);
+//        }
+//
+//        Long goodsModuleId = param.getModuleId();
+//        if (goodsModuleId != null){
+//            sql.append(" and a.module_id=").append(goodsModuleId);
+//        }
+//
+//        Integer status = param.getStatus();
+//        if (status != null){
+//            sql.append(" and a.status=").append(status);
+//        }
+//
+//        if (StringUtils.isNotBlank(param.getStartTime()) && StringUtils.isNotBlank(param.getEndTime())) {
+//
+//            sql.append(" and a.create_time >= ").append("'").append(param.getStartTime()).append("'");
+//            sql.append(" and a.create_time <= ").append("'").append(param.getEndTime()).append("'");
+//        }
+//
+//
+//        String searchKey = param.getSearchKey();
+//        if (StringUtils.isNotBlank(searchKey)){
+//            searchKey = RegexUtil.sqlReplaceSpecialStr(searchKey);
+//            sql.append(" and a.name like '%").append(searchKey).append("%'");
+//        }
+//
+//        String sortType = param.getSortType();
+//        if (StringUtils.isNotBlank(sortType)){
+//
+//            if ("vote".equals(sortType)){
+//                sql.append(" order by b.countVote desc");
+//            } else if ("like".equals(sortType)){
+//                sql.append(" order by b.countLike desc");
+//            } else {
+//                sql.append(" order by a.create_time desc");
+//            }
+//        } else {
+//            sql.append(" order by a.create_time desc");
+//
+//        }
+//
+//
+//        IPage<GoodsEntity> result = getBaseMapper().pageSearchSql(sql.toString(), page);
+//        return Result.success(result);
+//    }
+
     @Override
-    public Result search(GoodsPageDto param) {
+    public Result search(GoodsPageDateDto param) {
         BaseUtil.startPage(param);
         IPage<GoodsEntity> page = new Page<>(param.getPageNum() , param.getPageSize());
-        IPage<GoodsEntity> result = getBaseMapper().search(param, page);
-        return Result.success(result);
+
+        BaseUtil.startPage(param);
+        LambdaQueryWrapper<GoodsEntity> wrapper = new LambdaQueryWrapper<>();
+        Integer display = param.getDisplay();
+        wrapper.eq(GoodsEntity::getModuleId, param.getModuleId());
+        wrapper.eq(display!=null, GoodsEntity::getDisplay, display);
+        String startTime = param.getStartTime();
+        String endTime = param.getEndTime();
+        if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime) ) {
+            wrapper.between(GoodsEntity::getCreateTime, startTime, endTime);
+        }
+        String searchKey = param.getSearchKey();
+        wrapper.like(StringUtils.isNotBlank(searchKey), GoodsEntity::getName, searchKey);
+        wrapper.orderByDesc(GoodsEntity::getCreateTime);
+
+        return Result.success(this.page(page, wrapper));
     }
 
     @Override
@@ -77,16 +158,62 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, GoodsEntity> impl
         return Result.success(result);
     }
 
+
+
+    @Override
+    public void setVisit(Long id) {
+        getBaseMapper().setVisit(id);
+    }
+
+    @Override
+    public Result uploadImg(MultipartFile file, String code) {
+        if ("null".equals(code) || StringUtils.isBlank(code)) {
+            code = DateUtil.format(LocalDateTime.now(), "yyyyMMdd_HHmmssSSS");
+        }
+
+        Map<String, Object> result = fileService.upload(file, "/goods/" + code );
+        FileEntity entity = new FileEntity();
+        entity.setModule("goods");
+        entity.setName(result.get("fileName").toString());
+
+
+        entity.setFilePath(result.get("filePath").toString());
+        fileService.save(entity);
+        result.put("id", entity.getId());
+        result.put("code", code);
+        return Result.success(result);
+    }
+
     @Override
-    public Result imgIndex(Long fileId, Long id) {
-        fileService.indexDisable(id, "goods");
-        fileService.indexEnabled(fileId);
+    public Result removeFile(Long fileId) {
+        FileEntity entity = fileService.getById(fileId);
+        if (entity == null){
+            return Result.success();
+        }
+
+        entity.setIsDelete(1);
+        entity.setIsIndex(0);
+        entity.setUpdateTime(LocalDateTime.now());
+        fileService.updateById(entity);
         return Result.success();
     }
 
     @Override
-    public void setVisit(Long id) {
-        getBaseMapper().setVisit(id);
+    public Result display(Long id, Integer display) {
+        GoodsEntity entity = this.getById(id);
+        if (entity == null) {
+            log.error("对象id不存在 : {}", id);
+            return Result.failure("对象id不存在");
+        }
+
+        entity.setDisplay(display);
+        this.updateById(entity);
+        return Result.success(entity);
+    }
+
+    @Override
+    public void delByModelId(Long goodsModelId) {
+        baseMapper.delByModelId(goodsModelId);
     }
 
 
@@ -163,8 +290,21 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, GoodsEntity> impl
     }
 
     @Override
-    public Result upload(MultipartFile file) {
-        Map<String, Object> map = fileUtils.uploadMap(file, "/goods/thumb", false);
+    public Result upload(MultipartFile file, String type) {
+
+        // 判断后缀名,需要包含这以下四个
+        String [] typeCheck = {"video","model","thumb","audio","pdf"};
+        if (!Arrays.asList(typeCheck).contains(type)) {
+            return Result.failure("非法类型");
+        }
+
+        // 视频、模型使用原名存储(中文转拼音)
+        boolean flag = false;
+        if ("video".equals(type) || "model".equals(type) || "audio".equals(type)) {
+            flag = true;
+        }
+
+        Map<String, Object> map = fileUtils.uploadMap(file, "/goods/" + type, flag);
         FileEntity entity = new FileEntity();
         entity.setModule("goods");
         entity.setName(map.get("fileName").toString());
@@ -173,11 +313,6 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, GoodsEntity> impl
         return Result.success(entity);
     }
 
-    @Override
-    public Result videoUpload(MultipartFile file, String type) {
-        Map<String, Object> map = fileUtils.uploadMap(file, "/goods/"+type, false);
-        return Result.success(map);
-    }
 
 
 }

+ 8 - 5
gis_cms/src/main/java/com/gis/cms/service/impl/LeaderServiceImpl.java

@@ -1,15 +1,15 @@
 package com.gis.cms.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gis.cms.entity.dto.LeaderDto;
-import com.gis.cms.entity.dto.SortPageDto;
+import com.gis.cms.entity.dto.LeaderPageDto;
 import com.gis.cms.entity.po.LeaderEntity;
 import com.gis.cms.mapper.LeaderMapper;
 import com.gis.cms.service.LeaderService;
 import com.gis.common.base.service.impl.IBaseService;
-import com.gis.common.constant.MsgCode;
 import com.gis.common.util.BaseUtil;
 import com.gis.common.util.FileUtils;
 import com.gis.common.util.Result;
@@ -40,11 +40,14 @@ public class LeaderServiceImpl extends ServiceImpl<LeaderMapper, LeaderEntity> i
 
 
     @Override
-    public Result search(SortPageDto param) {
+    public Result search(LeaderPageDto param) {
         BaseUtil.startPage(param);
+
+        LambdaQueryWrapper<LeaderEntity> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(param.getDisplay()!=null, LeaderEntity::getDisplay, param.getDisplay());
+        wrapper.orderByDesc(LeaderEntity::getCreateTime);
         IPage<LeaderEntity> page = new Page<>(param.getPageNum() , param.getPageSize());
-        IPage<LeaderEntity> result = getBaseMapper().search(param, page);
-        return Result.success(result);
+        return Result.success(this.page(page, wrapper));
     }
 
     @Override

+ 96 - 0
gis_cms/src/main/java/com/gis/cms/service/impl/ModuleServiceImpl.java

@@ -0,0 +1,96 @@
+package com.gis.cms.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gis.cms.entity.dto.ModuleDto;
+import com.gis.cms.entity.po.ModuleEntity;
+import com.gis.cms.mapper.ModuleMapper;
+import com.gis.cms.service.GoodsService;
+import com.gis.cms.service.ModuleService;
+import com.gis.common.constant.MsgCode;
+import com.gis.common.util.Result;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+
+/**
+ * Created by owen on 2020/3/11 0011 16:16
+ */
+@Slf4j
+@Service
+public class ModuleServiceImpl extends ServiceImpl<ModuleMapper, ModuleEntity> implements ModuleService {
+
+
+
+    @Autowired
+    GoodsService goodsService;
+
+
+    @Override
+    public Result saveEntity(ModuleDto param) {
+        Long id = param.getId();
+        ModuleEntity entity = null;
+        if (id == null) {
+            entity = new ModuleEntity();
+            BeanUtils.copyProperties(param, entity);
+            this.save(entity);
+        } else {
+            entity = this.getById(id);
+            if (entity == null) {
+                return Result.failure("对象不存在: " + id);
+            }
+            BeanUtils.copyProperties(param, entity);
+            entity.setUpdateTime(LocalDateTime.now());
+            this.updateById(entity);
+        }
+
+
+        return Result.success(entity);
+    }
+
+
+    @Override
+    public Result remove(Long id) {
+        ModuleEntity entity = this.getById(id);
+        if (entity == null) {
+            return Result.success();
+        }
+
+        if (entity.getIsDefault() == 1){
+            return Result.failure("预设模块不允许删除");
+        }
+
+        entity.setIsDelete(1);
+        entity.setUpdateTime(LocalDateTime.now());
+        this.updateById(entity);
+
+        // 删除该模块下数据
+        goodsService.delByModelId(id);
+        log.info("该模块关联数据已删除 : {}", id);
+
+        return Result.success();
+    }
+
+
+
+
+    @Override
+    public Result detail(Long id) {
+        ModuleEntity entity = this.getById(id);
+        if (entity == null) {
+            return Result.failure(MsgCode.e3001,"对象不存在,id: " + id);
+        }
+        return Result.success(entity);
+    }
+
+
+
+
+
+
+
+
+}

+ 159 - 0
gis_cms/src/main/java/com/gis/cms/service/impl/NewsServiceImpl.java

@@ -0,0 +1,159 @@
+package com.gis.cms.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gis.cms.entity.dto.NewsDto;
+import com.gis.cms.entity.dto.NewsPageDataDto;
+import com.gis.cms.entity.po.NewsEntity;
+import com.gis.cms.mapper.NewsMapper;
+import com.gis.cms.service.FileService;
+import com.gis.cms.service.NewsService;
+import com.gis.common.base.service.impl.IBaseService;
+import com.gis.common.constant.ConfigConstant;
+import com.gis.common.util.BaseUtil;
+import com.gis.common.util.FileUtils;
+import com.gis.common.util.Result;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.time.LocalDateTime;
+import java.util.Arrays;
+import java.util.Map;
+
+
+/**
+ * Created by owen on 2020/3/11 0011 16:16
+ */
+@Slf4j
+@Service
+public class NewsServiceImpl extends ServiceImpl<NewsMapper, NewsEntity> implements NewsService {
+
+
+    @Autowired
+    FileService fileService;
+
+    @Autowired
+    FileUtils fileUtils;
+
+    @Autowired
+    ConfigConstant configConstant;
+
+    @Autowired
+    IBaseService iBaseService;
+
+
+    @Override
+    public Result<IPage<NewsEntity>> search(NewsPageDataDto param) {
+        BaseUtil.startPage(param);
+        LambdaQueryWrapper<NewsEntity> wrapper = new LambdaQueryWrapper<>();
+        Integer display = param.getDisplay();
+        wrapper.eq(NewsEntity::getModuleId, param.getModuleId());
+        wrapper.eq(display!=null, NewsEntity::getDisplay, display);
+        String startTime = param.getStartTime();
+        String endTime = param.getEndTime();
+        if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime) ) {
+            wrapper.between(NewsEntity::getCreateTime, startTime, endTime);
+        }
+        String searchKey = param.getSearchKey();
+        wrapper.like(StringUtils.isNotBlank(searchKey), NewsEntity::getName, searchKey);
+        wrapper.orderByDesc(NewsEntity::getCreateTime);
+
+        IPage<NewsEntity> page = new Page<>(param.getPageNum() , param.getPageSize());
+        return Result.success(this.page(page, wrapper));
+
+    }
+
+
+
+
+
+    @Override
+    public Result updateDisplay(Long id, Integer display) {
+        NewsEntity entity = this.getById(id);
+        if (entity == null) {
+            log.error("对象id不存在 : {}", id);
+            return Result.failure("对象id不存在");
+        }
+
+        entity.setDisplay(display);
+        this.updateById(entity);
+        return Result.success(entity);
+    }
+
+    @Override
+    public void addVisit(Long id) {
+        baseMapper.addVisit(id);
+    }
+
+    @Override
+    public Result upload(MultipartFile file, String type) {
+
+        // 判断后缀名,需要包含这以下四个
+        String [] typeCheck = {"video","file","img"};
+        if (!Arrays.asList(typeCheck).contains(type)) {
+            return Result.failure("非法类型");
+        }
+
+        boolean flag = false;
+        // 视频、模型使用原名存储(中文转拼音)
+        if ("video".equals(type) || "file".equals(type)) {
+            flag = true;
+        }
+        Map<String, Object> result = fileUtils.uploadMap(file, "/news/" + type, flag);
+        return Result.success(result);
+    }
+
+
+    @Override
+    public Result saveEntity(NewsDto param) {
+        Long id = param.getId();
+        NewsEntity entity = null;
+        if (id == null) {
+            entity = new NewsEntity();
+            BeanUtils.copyProperties(param, entity);
+            this.save(entity);
+        } else {
+            entity = this.getById(id);
+            if (entity == null) {
+                return Result.failure("对象不存在: " + id);
+            }
+            BeanUtils.copyProperties(param, entity);
+            entity.setUpdateTime(LocalDateTime.now());
+            this.updateById(entity);
+        }
+
+        return Result.success(entity);
+    }
+
+    @Override
+    public Result remove(Long id) {
+        NewsEntity entity = this.getById(id);
+        if (entity == null) {
+            return Result.success();
+        }
+        // db数据软删除, 物理数据真删除
+        entity.setIsDelete(1);
+        entity.setUpdateTime(LocalDateTime.now());
+        this.updateById(entity);
+        return  Result.success();
+    }
+
+    @Override
+    public Result<NewsEntity> detail(Long id) {
+        NewsEntity entity = this.getById(id);
+        if (entity == null) {
+            return Result.failure("对象不存在");
+        }
+        return  Result.success(entity);
+    }
+
+
+
+
+}

+ 72 - 0
gis_common/src/main/java/com/gis/common/config/FastJson2JsonRedisSerializer.java

@@ -0,0 +1,72 @@
+package com.gis.common.config;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.parser.ParserConfig;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.SerializationException;
+import org.springframework.util.Assert;
+
+import java.nio.charset.Charset;
+
+/**
+ * Redis使用FastJson序列化
+ * 
+ * @author fdkk
+ */
+public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
+{
+    @SuppressWarnings("unused")
+    private ObjectMapper objectMapper = new ObjectMapper();
+
+    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
+
+    private Class<T> clazz;
+
+    static
+    {
+        ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
+    }
+
+    public FastJson2JsonRedisSerializer(Class<T> clazz)
+    {
+        super();
+        this.clazz = clazz;
+    }
+
+    @Override
+    public byte[] serialize(T t) throws SerializationException
+    {
+        if (t == null)
+        {
+            return new byte[0];
+        }
+        return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
+    }
+
+    @Override
+    public T deserialize(byte[] bytes) throws SerializationException
+    {
+        if (bytes == null || bytes.length <= 0)
+        {
+            return null;
+        }
+        String str = new String(bytes, DEFAULT_CHARSET);
+
+        return JSON.parseObject(str, clazz);
+    }
+
+    public void setObjectMapper(ObjectMapper objectMapper)
+    {
+        Assert.notNull(objectMapper, "'objectMapper' must not be null");
+        this.objectMapper = objectMapper;
+    }
+
+    protected JavaType getJavaType(Class<?> clazz)
+    {
+        return TypeFactory.defaultInstance().constructType(clazz);
+    }
+}

+ 0 - 57
gis_common/src/main/java/com/gis/common/config/MyRedisConfig.java

@@ -1,57 +0,0 @@
-package com.gis.common.config;
-
-import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
-import com.fasterxml.jackson.annotation.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
-
-import java.net.UnknownHostException;
-
-/**
- * Created by owen on 2021/7/16 0016 17:21
- *
- * redis 全局序列化
- * redis管理界面可以看到参数
- * 对象序列化有字段泛型字段值不丢失
- */
-
-@Configuration
-public class MyRedisConfig {
-
-
-
-        @Bean
-        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
-            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
-            redisTemplate.setConnectionFactory(connectionFactory);
-
-            // 使用Jackson2JsonRedisSerialize替换默认序列化
-            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
-
-            ObjectMapper objectMapper = new ObjectMapper();
-            objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
-            objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
-
-            jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
-
-            // 设置key和value的序列化规则
-            redisTemplate.setKeySerializer(new StringRedisSerializer());
-//            redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
-            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
-            redisTemplate.setHashValueSerializer(new StringRedisSerializer());
-            redisTemplate.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));
-
-            redisTemplate.afterPropertiesSet();
-
-            return redisTemplate;
-
-        }
-
-
-}

+ 79 - 0
gis_common/src/main/java/com/gis/common/config/RedisConfig.java

@@ -0,0 +1,79 @@
+package com.gis.common.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
+import org.springframework.cache.annotation.CachingConfigurerSupport;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.script.DefaultRedisScript;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+/**
+ * redis配置
+ * 
+ * @author fdkk
+ */
+@Configuration
+@EnableCaching
+public class RedisConfig extends CachingConfigurerSupport
+{
+    @Bean
+    @SuppressWarnings(value = { "unchecked", "rawtypes" })
+    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
+    {
+        RedisTemplate<Object, Object> template = new RedisTemplate<>();
+        template.setConnectionFactory(connectionFactory);
+
+        FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
+
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
+        serializer.setObjectMapper(mapper);
+
+        // 使用StringRedisSerializer来序列化和反序列化redis的key值
+        template.setKeySerializer(new StringRedisSerializer());
+        template.setValueSerializer(serializer);
+
+        // Hash的key也采用StringRedisSerializer的序列化方式
+        template.setHashKeySerializer(new StringRedisSerializer());
+        template.setHashValueSerializer(serializer);
+
+        template.afterPropertiesSet();
+        return template;
+    }
+
+    @Bean
+    public DefaultRedisScript<Long> limitScript()
+    {
+        DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
+        redisScript.setScriptText(limitScriptText());
+        redisScript.setResultType(Long.class);
+        return redisScript;
+    }
+
+    /**
+     * 限流脚本
+     */
+    private String limitScriptText()
+    {
+        return "local key = KEYS[1]\n" +
+                "local count = tonumber(ARGV[1])\n" +
+                "local time = tonumber(ARGV[2])\n" +
+                "local current = redis.call('get', key);\n" +
+                "if current and tonumber(current) > count then\n" +
+                "    return tonumber(current);\n" +
+                "end\n" +
+                "current = redis.call('incr', key)\n" +
+                "if tonumber(current) == 1 then\n" +
+                "    redis.call('expire', key, time)\n" +
+                "end\n" +
+                "return tonumber(current);";
+    }
+}