瀏覽代碼

作者:张哲
时间:2023/01/17
类型:开发(里程碑2)
描述:知识地图开发

ZizgZh 2 年之前
父節點
當前提交
692ef94dd0
共有 27 個文件被更改,包括 941 次插入12 次删除
  1. 0 1
      src/main/java/com/redxun/JpaasKnowledgeApp.java
  2. 16 1
      src/main/java/com/redxun/config/Swagger2Config.java
  3. 12 0
      src/main/java/com/redxun/knowledge/controller/CommonController.java
  4. 24 0
      src/main/java/com/redxun/knowledge/entity/vo/DicVo.java
  5. 79 4
      src/main/java/com/redxun/knowledge/map/controller/MapController.java
  6. 39 0
      src/main/java/com/redxun/knowledge/map/entity/dto/MapContentDto.java
  7. 44 1
      src/main/java/com/redxun/knowledge/map/entity/dto/MapDto.java
  8. 37 0
      src/main/java/com/redxun/knowledge/map/entity/dto/MapRouteDto.java
  9. 16 0
      src/main/java/com/redxun/knowledge/map/entity/enums/MapContentType.java
  10. 37 0
      src/main/java/com/redxun/knowledge/map/entity/handle/MyMetaObjectHandler.java
  11. 63 0
      src/main/java/com/redxun/knowledge/map/entity/vo/KnowledgeVo.java
  12. 45 0
      src/main/java/com/redxun/knowledge/map/entity/vo/MapContentVo.java
  13. 53 0
      src/main/java/com/redxun/knowledge/map/entity/vo/MapGroupPurviewUserVo.java
  14. 33 0
      src/main/java/com/redxun/knowledge/map/entity/vo/MapRouteVo.java
  15. 70 0
      src/main/java/com/redxun/knowledge/map/entity/vo/MapVo.java
  16. 6 0
      src/main/java/com/redxun/knowledge/map/mapper/MapGroupPurviewUserMapper.java
  17. 7 0
      src/main/java/com/redxun/knowledge/map/mapper/MapMapper.java
  18. 28 0
      src/main/java/com/redxun/knowledge/map/service/MapGroupPurviewUserServiceImpl.java
  19. 235 4
      src/main/java/com/redxun/knowledge/map/service/MapServiceImpl.java
  20. 3 0
      src/main/java/com/redxun/knowledge/mapper/CommonMapper.java
  21. 6 0
      src/main/java/com/redxun/knowledge/service/CommonServiceImpl.java
  22. 3 1
      src/main/java/com/redxun/knowledge/service/KnowledgeCategoryServiceImpl.java
  23. 7 0
      src/main/resources/mapper/knowledge/CommonMapper.xml
  24. 10 0
      src/main/resources/mapper/knowledge/map/MapContentMapper.xml
  25. 18 0
      src/main/resources/mapper/knowledge/map/MapGroupPurviewUserMapper.xml
  26. 40 0
      src/main/resources/mapper/knowledge/map/MapMapper.xml
  27. 10 0
      src/main/resources/mapper/knowledge/map/MapRouteMapper.xml

+ 0 - 1
src/main/java/com/redxun/JpaasKnowledgeApp.java

@@ -25,7 +25,6 @@ import org.springframework.scheduling.annotation.EnableAsync;
 @EnableDiscoveryClient
 @SpringBootApplication(scanBasePackages = {"com.redxun"})
 @EnableBinding({ LogOutput.class,ErrLogOutput.class, MsgOutput.class})
-@EnableAsync
 public class JpaasKnowledgeApp {
 
     public static void main(String[]args) {

+ 16 - 1
src/main/java/com/redxun/config/Swagger2Config.java

@@ -32,7 +32,7 @@ public class Swagger2Config {
     public Docket knowledgeApiConfig(){
 
         return new Docket(DocumentationType.SWAGGER_2)
-                .groupName("知识管理系统")
+                .groupName("知识管理系统(里程碑1)")
                 .apiInfo(knowledgeApiInfo())
                 .select()
                 //只显示admin路径下的页面
@@ -43,6 +43,21 @@ public class Swagger2Config {
 
     }
 
+    @Bean
+    public Docket knowledgeTwoApiConfig(){
+
+        return new Docket(DocumentationType.SWAGGER_2)
+                .groupName("知识管理系统(里程碑2)")
+                .apiInfo(knowledgeApiInfo())
+                .select()
+                //只显示admin路径下的页面
+                .paths(Predicates.and(PathSelectors.regex("/api-knowledge/map/.*")))
+                .build()
+                .securityContexts(Arrays.asList(securityContexts()))
+                .securitySchemes(unifiedAuth());
+
+    }
+
     @Bean
     public Docket searchApiConfig(){
         return new Docket(DocumentationType.SWAGGER_2)

+ 12 - 0
src/main/java/com/redxun/knowledge/controller/CommonController.java

@@ -4,6 +4,7 @@ import com.redxun.common.annotation.ClassDefine;
 import com.redxun.common.base.db.BaseService;
 import com.redxun.common.base.entity.JsonResult;
 import com.redxun.knowledge.entity.dao.CommonEntity;
+import com.redxun.knowledge.entity.vo.DicVo;
 import com.redxun.knowledge.entity.vo.PositionSequenceVo;
 import com.redxun.knowledge.service.CommonServiceImpl;
 import com.redxun.web.controller.BaseController;
@@ -12,6 +13,7 @@ import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 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 javax.annotation.Resource;
@@ -59,4 +61,14 @@ public class CommonController extends BaseController<CommonEntity> {
         jsonResult.setData(positionGrades);
         return jsonResult;
     }
+
+    @ApiOperation(value = "通过字典别名获取字典信息")
+    @GetMapping("dic")
+    public JsonResult queryDic(@RequestParam(value = "alias",defaultValue = "KNOWLEDGE_MAP") String alias) {
+        JsonResult jsonResult = JsonResult.getSuccessResult("");
+        List<DicVo> dicVoList = systemService.queryDic(alias);
+        jsonResult.setData(dicVoList);
+        return jsonResult;
+    }
+
 }

+ 24 - 0
src/main/java/com/redxun/knowledge/entity/vo/DicVo.java

@@ -0,0 +1,24 @@
+package com.redxun.knowledge.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 文件名: DicVo
+ * 作者: Zizg
+ * 时间: 2023/1/13
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Data
+public class DicVo implements Serializable {
+
+    // 字典名
+    private String name;
+
+    //字典值
+    private String value;
+}

+ 79 - 4
src/main/java/com/redxun/knowledge/map/controller/MapController.java

@@ -2,10 +2,16 @@
 package com.redxun.knowledge.map.controller;
 
 import com.redxun.common.annotation.ClassDefine;
+import com.redxun.common.annotation.MethodDefine;
+import com.redxun.common.annotation.ParamDefine;
 import com.redxun.common.base.db.BaseService;
-
+import com.redxun.common.base.entity.JsonResult;
+import com.redxun.common.constant.HttpMethodConstants;
 import com.redxun.knowledge.map.entity.dao.Map;
+import com.redxun.knowledge.map.entity.dto.MapDto;
+import com.redxun.knowledge.map.entity.vo.MapVo;
 import com.redxun.knowledge.map.service.MapServiceImpl;
+import com.redxun.log.annotation.AuditLog;
 import com.redxun.web.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -13,14 +19,14 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 
 @Slf4j
 @RestController
-@RequestMapping("/api-knowledge/knowledge/map")
+@RequestMapping("/api-knowledge/map")
 @Api(tags = "业务--知识地图表")
-@ClassDefine(title = "业务--知识地图表", alias = "MapController", path = "/api-knowledge/knowledge/map",
+@ClassDefine(title = "业务--知识地图表", alias = "MapController", path = "/api-knowledge/map",
         packages = "knowledge", packageName = "子系统名称")
 public class MapController extends BaseController<Map> {
 
@@ -38,5 +44,74 @@ public class MapController extends BaseController<Map> {
         return "业务--知识地图表";
     }
 
+    @ApiOperation(value = "新增地图")
+    @PostMapping("create")
+    @AuditLog(
+            operation = "保存数据"
+    )
+    @MethodDefine(
+            title = "保存数据",
+            path = "create",
+            method = HttpMethodConstants.POST,
+            params = {@ParamDefine(
+                    title = "实体数据JSON",
+                    varName = "mapDto"
+            )}
+    )
+    public JsonResult create(@RequestBody MapDto mapDto){
+        JsonResult jsonResult = JsonResult.getSuccessResult("");
+        String pkId = mapService.create(mapDto);
+        return jsonResult.setData(pkId);
+    }
+
+    @ApiOperation("获取知识地图详情")
+    @GetMapping("data")
+    public JsonResult data(@RequestParam("pkId") String pkId){
+        JsonResult jsonResult = JsonResult.getSuccessResult("");
+        MapVo mapVo = mapService.data(pkId);
+        return jsonResult.setData(mapVo);
+    }
+
+    @ApiOperation(value = "编辑地图")
+    @PostMapping("edit")
+    @AuditLog(
+            operation = "保存数据"
+    )
+    @MethodDefine(
+            title = "保存数据",
+            path = "edit",
+            method = HttpMethodConstants.POST,
+            params = {@ParamDefine(
+                    title = "实体数据JSON",
+                    varName = "mapDto"
+            )}
+    )
+    public JsonResult edit(@RequestBody MapDto mapDto){
+        JsonResult jsonResult = JsonResult.getSuccessResult("");
+        String pkId = mapService.create(mapDto);
+        return jsonResult.setData(pkId);
+    }
+
+    @ApiOperation("根据地图类型字典值获取知识地图列表")
+    @GetMapping("listOfType")
+    public JsonResult listOfType(@RequestParam("type") Integer type){
+        JsonResult jsonResult = JsonResult.getSuccessResult("");
+        List<HashMap<String, Object>> result = mapService.listOfType(type);
+        return jsonResult.setData(result);
+    }
+
+    @ApiOperation("根据知识地图ID获取知识地图配置的学习路径列表")
+    @GetMapping("routes")
+    public JsonResult routes(@RequestParam("mapId") String mapId){
+        JsonResult jsonResult = JsonResult.getSuccessResult("");
+        List<HashMap<String, Object>> result = mapService.routes(mapId);
+        if (!result.isEmpty()){
+            return jsonResult.setData(result);
+        }else {
+            return jsonResult.setData("您没有访问权限");
+        }
+
+    }
+
 }
 

+ 39 - 0
src/main/java/com/redxun/knowledge/map/entity/dto/MapContentDto.java

@@ -0,0 +1,39 @@
+package com.redxun.knowledge.map.entity.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 文件名: MapContentDto
+ * 作者: Zizg
+ * 时间: 2023/1/13
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Data
+@ApiModel("学习内容")
+public class MapContentDto implements Serializable {
+
+    @ApiModelProperty("学习内容类型;1-外部系统 2-维基知识")
+    private Integer type;
+
+    @ApiModelProperty("知识Id")
+    private String knowledgeId;
+
+    @ApiModelProperty("系统名称(外部系统)")
+    private String outerSystemName;
+
+    @ApiModelProperty("内容名称(外部系统)")
+    private String outerContentName;
+
+    @ApiModelProperty("访问地址(外部系统)")
+    private String outerAccessUrl;
+
+    @ApiModelProperty("排序")
+    private Integer sort;
+}

+ 44 - 1
src/main/java/com/redxun/knowledge/map/entity/dto/MapDto.java

@@ -1,5 +1,16 @@
 package com.redxun.knowledge.map.entity.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.redxun.common.base.entity.BaseExtEntity;
+import com.redxun.knowledge.map.entity.dao.MapRoute;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.checkerframework.checker.units.qual.A;
+
+import java.io.Serializable;
+import java.util.List;
+
 /**
  * 文件名: MapDto
  * 作者: Zizg
@@ -9,5 +20,37 @@ package com.redxun.knowledge.map.entity.dto;
  * 修改时间:
  * 修改内容:
  */
-public class MapDto {
+@Data
+@ApiModel("知识地图")
+public class MapDto implements Serializable {
+
+    //地图主键Id(编辑时候传入)
+    @ApiModelProperty("地图主键Id(编辑时候传入)")
+    private String pkId;
+
+    //地图类型;对应知识地图类型字典(KNOWLEDGE_MAP)
+    @ApiModelProperty("地图类型;对应知识地图类型字典")
+    private Integer type;
+
+    //地图名称
+    @ApiModelProperty("地图名称")
+    private String name;
+
+    //组织ID
+    @ApiModelProperty("组织Id(多个组织Id逗号分隔(1,2...))")
+    private String groupId;
+
+    //组织概要(-分隔的各级组织名称)
+    @ApiModelProperty("组织概要(-分隔的各级组织名称,多个用/分隔)")
+    private String groupSummary;
+
+    //隶属于组织人员阅读权限;可选项:1-全部员工可见  2-部分员工可见
+    @ApiModelProperty("隶属于组织人员阅读权限;可选项:1-全部员工可见  2-部分员工可见")
+    private Integer groupPurview;
+
+    @ApiModelProperty("可阅读者userId数组")
+    private List<String> purviewUsers;
+
+    @ApiModelProperty("学习路径")
+    private List<MapRouteDto> routes;
 }

+ 37 - 0
src/main/java/com/redxun/knowledge/map/entity/dto/MapRouteDto.java

@@ -0,0 +1,37 @@
+package com.redxun.knowledge.map.entity.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.redxun.common.base.entity.BaseExtEntity;
+import com.redxun.knowledge.map.entity.dao.MapContent;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 文件名: MapRouteDto
+ * 作者: Zizg
+ * 时间: 2023/1/13
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Data
+@ApiModel("学习路径")
+public class MapRouteDto implements Serializable {
+
+    //名称
+    @ApiModelProperty("学习路径名称")
+    private String name;
+
+    //排序
+    @ApiModelProperty("排序")
+    private Integer sort;
+
+    @ApiModelProperty("学习内容")
+    private List<MapContentDto> contents;
+
+}

+ 16 - 0
src/main/java/com/redxun/knowledge/map/entity/enums/MapContentType.java

@@ -0,0 +1,16 @@
+package com.redxun.knowledge.map.entity.enums;
+
+import lombok.Data;
+
+/**
+ * 文件名: MapContentType
+ * 作者: Zizg
+ * 时间: 2023/1/16
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+public enum MapContentType {
+
+}

+ 37 - 0
src/main/java/com/redxun/knowledge/map/entity/handle/MyMetaObjectHandler.java

@@ -0,0 +1,37 @@
+package com.redxun.knowledge.map.entity.handle;
+
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import com.redxun.knowledge.common.UserService;
+import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * 文件名: MyMetaObjectHandler
+ * 作者: Zizg
+ * 时间: 2022/11/1
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Component
+public class MyMetaObjectHandler implements MetaObjectHandler {
+
+    @Autowired
+    private UserService userService;
+
+    @Override
+    public void insertFill(MetaObject metaObject) {
+        this.setFieldValByName("createBy",userService.queryLoginUser(),metaObject);
+        this.setFieldValByName("updateBy",userService.queryLoginUser(),metaObject);
+        this.setFieldValByName("isDel",0,metaObject);
+    }
+
+    @Override
+    public void updateFill(MetaObject metaObject) {
+        this.setFieldValByName("updateBy",userService.queryLoginUser(),metaObject);
+    }
+}

+ 63 - 0
src/main/java/com/redxun/knowledge/map/entity/vo/KnowledgeVo.java

@@ -0,0 +1,63 @@
+package com.redxun.knowledge.map.entity.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.redxun.knowledge.entity.vo.KnowledgeCategoryAdminVo;
+import lombok.Data;
+import org.apache.ibatis.type.JdbcType;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 文件名: KnowledgeVo
+ * 作者: Zizg
+ * 时间: 2023/1/16
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Data
+public class KnowledgeVo implements Serializable {
+
+    //知识分类
+    private KnowledgeCategoryAdminVo knowledgeCategoryAdminVo;
+
+    //知识名称
+    private String titles;
+
+    //知识简介
+    private String summary;
+
+    //作者
+    private String author;
+
+    //作者头像Id
+    private String authorHead;
+
+    //创建时间
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    @JSONField(
+            format = "yyyy-MM-dd HH:mm:ss"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss",
+            timezone = "GMT+8"
+    )
+    private Date createTime;
+
+    //浏览数量
+    private Integer views;
+
+    //附件类型
+    private String attachmentType;
+
+
+
+}

+ 45 - 0
src/main/java/com/redxun/knowledge/map/entity/vo/MapContentVo.java

@@ -0,0 +1,45 @@
+package com.redxun.knowledge.map.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 文件名: MapContentVo
+ * 作者: Zizg
+ * 时间: 2023/1/16
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Data
+public class MapContentVo implements Serializable {
+
+    //主键
+    private String pkId;
+
+    //学习内容类型;1-外部系统 2-维基知识
+    private Integer type;
+
+    //状态;取值:0-未学习  1-已学习
+    private Integer state;
+
+    //知识Id
+    private String knowledgeId;
+
+    //系统名称(外部系统)
+    private String outerSystemName;
+
+    //内容名称(外部系统)
+    private String outerContentName;
+
+    //访问地址(外部系统)
+    private String outerAccessUrl;
+
+    //排序
+    private Integer sort;
+
+    //如果存在知识,返回知识信息
+    private KnowledgeVo knowledgeVo;
+}

+ 53 - 0
src/main/java/com/redxun/knowledge/map/entity/vo/MapGroupPurviewUserVo.java

@@ -0,0 +1,53 @@
+package com.redxun.knowledge.map.entity.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 文件名: MapGroupPurviewUserVo
+ * 作者: Zizg
+ * 时间: 2023/1/13
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Data
+public class MapGroupPurviewUserVo implements Serializable {
+
+    //可阅读者Id
+    private String pkId;
+
+    //员工Id
+    private String userId;
+
+    //工号
+    private String userNo;
+
+    //所属组织
+    private String groupSummary;
+
+    //职位
+    private String positionGrade;
+
+    //员工姓名
+    private String fullName;
+
+    //添加时间
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    @JSONField(
+            format = "yyyy-MM-dd HH:mm:ss"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss",
+            timezone = "GMT+8"
+    )
+    private Date createTime;
+}

+ 33 - 0
src/main/java/com/redxun/knowledge/map/entity/vo/MapRouteVo.java

@@ -0,0 +1,33 @@
+package com.redxun.knowledge.map.entity.vo;
+
+import com.redxun.knowledge.map.entity.dto.MapContentDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 文件名: MapRouteVo
+ * 作者: Zizg
+ * 时间: 2023/1/16
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Data
+public class MapRouteVo implements Serializable {
+
+    //主键
+    private String pkId;
+
+    //名称
+    private String name;
+
+    //排序
+    private Integer sort;
+
+    //学习内容集合
+    private List<MapContentVo> contents;
+}

+ 70 - 0
src/main/java/com/redxun/knowledge/map/entity/vo/MapVo.java

@@ -0,0 +1,70 @@
+package com.redxun.knowledge.map.entity.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.redxun.knowledge.map.entity.dao.MapRoute;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.ibatis.type.JdbcType;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 文件名: MapVo
+ * 作者: Zizg
+ * 时间: 2023/1/13
+ * 描述:
+ * 修改人:
+ * 修改时间:
+ * 修改内容:
+ */
+@Data
+public class MapVo implements Serializable {
+
+    //主键
+    private String pkId;
+
+    //地图类型;对应知识地图类型字典(KNOWLEDGE_MAP)
+    private String typeName;
+
+    //地图名称
+    private String name;
+
+    //组织概要(组织概要(-分隔的各级组织名称,多个用/分隔))
+    private String groupSummary;
+
+    //操作人
+    private String operator;
+
+    //操作时间
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    @JSONField(
+            format = "yyyy-MM-dd HH:mm:ss"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss",
+            timezone = "GMT+8"
+    )
+    private Date updateTime;
+
+    //隶属于组织人员阅读权限;可选项:1-全部员工可见  2-部分员工可见
+    private Integer groupPurview;
+
+    //组织ID
+    private String groupId;
+
+    //学习路径集合
+    private List<MapRouteVo> routes;
+
+
+
+}

+ 6 - 0
src/main/java/com/redxun/knowledge/map/mapper/MapGroupPurviewUserMapper.java

@@ -1,9 +1,14 @@
 package com.redxun.knowledge.map.mapper;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.redxun.common.base.db.BaseDao;
+import com.redxun.knowledge.entity.dao.Banner;
 import com.redxun.knowledge.map.entity.dao.MapGroupPurviewUser;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
 
 /**
 * 业务--知识地图组织可阅读者表数据库访问层
@@ -11,4 +16,5 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface MapGroupPurviewUserMapper extends BaseDao<MapGroupPurviewUser> {
 
+    IPage findAllMapGroupPurviewUser(IPage<Banner> page, @Param("params") java.util.Map<String, Object> params, @Param("order") java.util.Map<String, Object> order);
 }

+ 7 - 0
src/main/java/com/redxun/knowledge/map/mapper/MapMapper.java

@@ -1,9 +1,13 @@
 package com.redxun.knowledge.map.mapper;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.redxun.common.base.db.BaseDao;
+import com.redxun.knowledge.entity.dao.Banner;
 import com.redxun.knowledge.map.entity.dao.Map;
+import com.redxun.knowledge.map.entity.vo.MapVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
 * 业务--知识地图表数据库访问层
@@ -11,4 +15,7 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface MapMapper extends BaseDao<Map> {
 
+    IPage findAllMap(IPage<Banner> page, @Param("params") java.util.Map<String, Object> params, @Param("order") java.util.Map<String, Object> order);
+
+    MapVo selectData(String pkId);
 }

+ 28 - 0
src/main/java/com/redxun/knowledge/map/service/MapGroupPurviewUserServiceImpl.java

@@ -2,11 +2,18 @@
 package com.redxun.knowledge.map.service;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.redxun.common.base.db.BaseDao;
 import com.redxun.common.base.db.BaseService;
+import com.redxun.common.base.db.PageHelper;
+import com.redxun.common.base.search.QueryFilter;
 import com.redxun.common.service.impl.SuperServiceImpl;
+import com.redxun.knowledge.common.UserService;
+import com.redxun.knowledge.entity.vo.DicVo;
 import com.redxun.knowledge.map.entity.dao.MapGroupPurviewUser;
+import com.redxun.knowledge.map.entity.vo.MapVo;
 import com.redxun.knowledge.map.mapper.MapGroupPurviewUserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import java.util.ArrayList;
 import java.util.List;
@@ -21,9 +28,30 @@ public class MapGroupPurviewUserServiceImpl extends SuperServiceImpl<MapGroupPur
     @Resource
     private MapGroupPurviewUserMapper mapGroupPurviewUserMapper;
 
+    @Autowired
+    private UserService userService;
+
     @Override
     public BaseDao<MapGroupPurviewUser> getRepository() {
         return mapGroupPurviewUserMapper;
     }
 
+    /**
+     * 分页查询可阅读员工列表
+     * @param queryFilter
+     * @return
+     */
+    public IPage query(QueryFilter queryFilter) {
+        java.util.Map<String, Object> params = PageHelper.constructParams(queryFilter);
+        IPage page = mapGroupPurviewUserMapper.findAllMapGroupPurviewUser(queryFilter.getPage(), queryFilter.getParams(), params);
+        List<MapGroupPurviewUser> records = page.getRecords();
+        records.forEach(e -> {
+            String userId = e.getUserId();
+            //userService.
+        });
+        return page;
+
+
+    }
+
 }

+ 235 - 4
src/main/java/com/redxun/knowledge/map/service/MapServiceImpl.java

@@ -2,28 +2,259 @@
 package com.redxun.knowledge.map.service;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.redxun.common.base.db.BaseDao;
 import com.redxun.common.base.db.BaseService;
+import com.redxun.common.base.db.PageHelper;
+import com.redxun.common.base.search.QueryFilter;
 import com.redxun.common.service.impl.SuperServiceImpl;
+import com.redxun.common.tool.IdGenerator;
+import com.redxun.knowledge.common.UserService;
+import com.redxun.knowledge.entity.dao.Knowledge;
+import com.redxun.knowledge.entity.vo.DicVo;
 import com.redxun.knowledge.map.entity.dao.Map;
+import com.redxun.knowledge.map.entity.dao.MapContent;
+import com.redxun.knowledge.map.entity.dao.MapGroupPurviewUser;
+import com.redxun.knowledge.map.entity.dao.MapRoute;
+import com.redxun.knowledge.map.entity.dto.MapContentDto;
+import com.redxun.knowledge.map.entity.dto.MapDto;
+import com.redxun.knowledge.map.entity.dto.MapRouteDto;
+import com.redxun.knowledge.map.entity.vo.KnowledgeVo;
+import com.redxun.knowledge.map.entity.vo.MapContentVo;
+import com.redxun.knowledge.map.entity.vo.MapRouteVo;
+import com.redxun.knowledge.map.entity.vo.MapVo;
+import com.redxun.knowledge.map.mapper.MapContentMapper;
+import com.redxun.knowledge.map.mapper.MapGroupPurviewUserMapper;
 import com.redxun.knowledge.map.mapper.MapMapper;
+import com.redxun.knowledge.map.mapper.MapRouteMapper;
+import com.redxun.knowledge.service.CommonServiceImpl;
+import com.redxun.knowledge.service.KnowledgeServiceImpl;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import java.util.ArrayList;
-import java.util.List;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
 import javax.annotation.Resource;
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
-* [业务--知识地图表]业务服务类
-*/
+ * [业务--知识地图表]业务服务类
+ */
 @Service
 public class MapServiceImpl extends SuperServiceImpl<MapMapper, Map> implements BaseService<Map> {
 
     @Resource
     private MapMapper mapMapper;
 
+    @Autowired
+    private MapRouteMapper mapRouteMapper;
+
+    @Autowired
+    private MapContentMapper mapContentMapper;
+
+    @Autowired
+    private MapGroupPurviewUserMapper mapGroupPurviewUserMapper;
+
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private CommonServiceImpl commonService;
+
+    @Autowired
+    private KnowledgeServiceImpl knowledgeService;
+
     @Override
     public BaseDao<Map> getRepository() {
         return mapMapper;
     }
 
+    /**
+     * 添加地图
+     * @param mapDto
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public String create(MapDto mapDto) {
+        // 向地图表中添加数据
+        Map map = new Map();
+        BeanUtils.copyProperties(mapDto, map);
+        if (mapDto.getPkId() == null){
+            map.setPkId(IdGenerator.getIdStr());
+        }
+        map.setUpdateBy(userService.queryLoginUser());
+        mapMapper.insert(map);
+        Map mapById = mapMapper.selectById(map.getPkId());
+        //向可阅读者表中添加数据
+        List<String> purviewUsers = mapDto.getPurviewUsers();
+        purviewUsers.forEach(purviewUser -> {
+            MapGroupPurviewUser mapGroupPurviewUser = new MapGroupPurviewUser();
+            mapGroupPurviewUser.setPkId(IdGenerator.getIdStr());
+            mapGroupPurviewUser.setMapId(mapById.getPkId());
+            mapGroupPurviewUser.setUserId(purviewUser);
+            mapGroupPurviewUser.setUpdateBy(userService.queryLoginUser());
+            mapGroupPurviewUserMapper.insert(mapGroupPurviewUser);
+        });
+        // 向学习路径表中添加数据
+        if (!CollectionUtils.isEmpty(mapDto.getRoutes())) {
+            List<MapRouteDto> routes = mapDto.getRoutes();
+            routes.forEach(route -> {
+                MapRoute mapRoute = new MapRoute();
+                BeanUtils.copyProperties(route, mapRoute);
+                mapRoute.setPkId(IdGenerator.getIdStr());
+                mapRoute.setMapId(mapById.getPkId());
+                mapRoute.setUpdateBy(userService.queryLoginUser());
+                mapRouteMapper.insert(mapRoute);
+                MapRoute mapRouteById = mapRouteMapper.selectById(mapRoute.getPkId());
+                // 向学习内容表中添加数据
+                if (!CollectionUtils.isEmpty(route.getContents())) {
+                    List<MapContentDto> contents = route.getContents();
+                    contents.forEach(content -> {
+                        MapContent mapContent = new MapContent();
+                        BeanUtils.copyProperties(content, mapContent);
+                        mapContent.setPkId(IdGenerator.getIdStr());
+                        mapContent.setMapId(mapRouteById.getMapId());
+                        mapContent.setRouteId(mapRouteById.getPkId());
+                        mapContent.setUpdateBy(userService.queryLoginUser());
+                        mapContentMapper.insert(mapContent);
+                    });
+                }
+            });
+
+        }
+        return mapById.getPkId();
+    }
+
+    /**
+     * 分页查询地图列表
+     * @param queryFilter
+     * @return
+     */
+    public IPage query(QueryFilter queryFilter) {
+        java.util.Map<String, Object> params = PageHelper.constructParams(queryFilter);
+        IPage page = mapMapper.findAllMap(queryFilter.getPage(), queryFilter.getParams(), params);
+        List<DicVo> dicVoList = commonService.queryDic("KNOWLEDGE_MAP");
+        List<MapVo> records = page.getRecords();
+        records.forEach(e -> {
+            String typeName = e.getTypeName();
+            dicVoList.forEach(dicVo -> {
+                if (dicVo.getValue().equals(typeName)){
+                    e.setTypeName(dicVo.getName());
+                }
+            });
+        });
+        return page;
+
+
+    }
+
+    public MapVo data(String pkId) {
+        MapVo mapVo = new MapVo();
+        Map map = mapMapper.selectById(pkId);
+        BeanUtils.copyProperties(map,mapVo);
+        List<DicVo> dicVoList = commonService.queryDic("KNOWLEDGE_MAP");
+        dicVoList.forEach(dicVo -> {
+            if (map.getType().toString().equals(dicVo.getValue())){
+                mapVo.setTypeName(dicVo.getName());
+            }
+        });
+        List<MapRoute> mapRouteList = mapRouteMapper.selectList(new LambdaQueryWrapper<MapRoute>().eq(MapRoute::getMapId, mapVo.getPkId()).orderByAsc(MapRoute::getSort));
+        if (!CollectionUtils.isEmpty(mapRouteList)){
+            List<MapRouteVo> mapRouteVoList = mapRouteList.stream().map(mapRoute -> {
+                MapRouteVo mapRouteVo = new MapRouteVo();
+                BeanUtils.copyProperties(mapRoute, mapRouteVo);
+                return mapRouteVo;
+            }).collect(Collectors.toList());
+            mapVo.setRoutes(mapRouteVoList);
+            mapRouteVoList.forEach(mapRouteVo -> {
+                List<MapContent> mapContentList = mapContentMapper.selectList(new LambdaQueryWrapper<MapContent>().
+                        eq(MapContent::getRouteId, mapRouteVo.getPkId()).orderByAsc(MapContent::getSort));
+                if (!CollectionUtils.isEmpty(mapContentList)){
+                    List<MapContentVo> mapContentVoList = mapContentList.stream().map(mapContent -> {
+                        MapContentVo mapContentVo = new MapContentVo();
+                        BeanUtils.copyProperties(mapContent, mapContentVo);
+                        if (mapContent.getKnowledgeId() != null){
+                            KnowledgeVo knowledgeVo = new KnowledgeVo();
+                            Knowledge knowledge = knowledgeService.get(mapContent.getKnowledgeId());
+                            BeanUtils.copyProperties(knowledge,knowledgeVo);
+                            String photo = (String) userService.querySexAndPhoto(knowledge.getCreateBy()).get("photo");
+                            knowledgeVo.setAuthorHead(photo);
+                            knowledgeVo.setAttachmentType(knowledge.getAttachmentName());
+                            mapContentVo.setKnowledgeVo(knowledgeVo);
+                        }
+                        return mapContentVo;
+                    }).collect(Collectors.toList());
+                    mapRouteVo.setContents(mapContentVoList);
+                }
+            });
+        }
+        return mapVo;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(Collection<Serializable> entities) {
+        //删除学习内容表中数据
+        mapContentMapper.deleteBatchIds(entities);
+        //删除学习路径表中数据
+        mapRouteMapper.deleteBatchIds(entities);
+        //删除可查看员工表中数据
+        mapGroupPurviewUserMapper.deleteBatchIds(entities);
+        //删除地图表中数据
+        this.getRepository().deleteBatchIds(entities);
+    }
+
+    public List<HashMap<String, Object>> listOfType(Integer type) {
+        List<Map> mapList = mapMapper.selectList(new LambdaQueryWrapper<Map>().eq(Map::getType, type));
+        List<HashMap<String, Object>> result = mapList.stream().map(map -> {
+            HashMap<String, Object> hashMap = new HashMap<>();
+            //当前登录用户的部门Id
+            String deptId = userService.queryLoginUserDeptId();
+            //权限判断
+            String[] groupIds = map.getGroupId().split(",");
+            //是否包含当前用户的部门Id,如果包含 判断该用户是否可见
+            if (Arrays.asList(groupIds).contains(deptId)){
+                // 阅读权限为1,部门下全体员工可见
+                if (map.getGroupPurview() == 1){
+                    hashMap.put("pkId", map.getPkId());
+                    hashMap.put("name", map.getName());
+                } else if (map.getGroupPurview() == 2){
+                    QueryWrapper<MapGroupPurviewUser> queryWrapper = new QueryWrapper<>();
+                    queryWrapper.eq("MAP_ID",map.getPkId());
+                    queryWrapper.eq("USER_ID",userService.queryLoginUser());
+                    // 查询结果>0,说明该员工可见
+                    Integer count = mapGroupPurviewUserMapper.selectCount(queryWrapper);
+                    if (count > 0){
+                        hashMap.put("pkId", map.getPkId());
+                        hashMap.put("name", map.getName());
+                    }
+                } else {
+                    return null;
+                }
+            } else {
+                return null;
+            }
+            return hashMap;
+        }).collect(Collectors.toList());
+        return result;
+    }
+
+    public List<HashMap<String, Object>> routes(String mapId) {
+        List<MapRoute> mapRouteList = mapRouteMapper.selectList(new LambdaQueryWrapper<MapRoute>().eq(MapRoute::getMapId, mapId));
+        List<HashMap<String, Object>> result = mapRouteList.stream().map(mapRoute -> {
+            HashMap<String, Object> hashMap = new HashMap<>();
+            hashMap.put("pkId", mapRoute.getPkId());
+            hashMap.put("name", mapRoute.getName());
+            return hashMap;
+        }).collect(Collectors.toList());
+        return result;
+    }
 }

+ 3 - 0
src/main/java/com/redxun/knowledge/mapper/CommonMapper.java

@@ -2,6 +2,7 @@ package com.redxun.knowledge.mapper;
 
 import com.redxun.common.base.db.BaseDao;
 import com.redxun.knowledge.entity.dao.CommonEntity;
+import com.redxun.knowledge.entity.vo.DicVo;
 import com.redxun.knowledge.entity.vo.PositionSequenceVo;
 import org.apache.ibatis.annotations.Mapper;
 
@@ -15,4 +16,6 @@ public interface CommonMapper extends BaseDao<CommonEntity> {
     List<String> queryPositionGrade();
 
     List<PositionSequenceVo> queryPositionSequence();
+
+    List<DicVo> queryDic(String alias);
 }

+ 6 - 0
src/main/java/com/redxun/knowledge/service/CommonServiceImpl.java

@@ -7,6 +7,7 @@ import com.redxun.common.service.impl.SuperServiceImpl;
 import com.redxun.datasource.DataSourceContextHolder;
 import com.redxun.feign.sys.SystemClient;
 import com.redxun.knowledge.entity.dao.CommonEntity;
+import com.redxun.knowledge.entity.vo.DicVo;
 import com.redxun.knowledge.entity.vo.PositionSequenceVo;
 import com.redxun.knowledge.mapper.CommonMapper;
 import lombok.extern.slf4j.Slf4j;
@@ -57,4 +58,9 @@ public class CommonServiceImpl extends SuperServiceImpl<CommonMapper, CommonEnti
         DataSourceContextHolder.clearDataSource();
         return result;
     }
+
+    public List<DicVo> queryDic(String alias) {
+        List<DicVo> result = commonMapper.queryDic(alias);
+        return result;
+    }
 }

+ 3 - 1
src/main/java/com/redxun/knowledge/service/KnowledgeCategoryServiceImpl.java

@@ -81,7 +81,9 @@ public class KnowledgeCategoryServiceImpl extends SuperServiceImpl<KnowledgeCate
         KnowledgeCategory knowledgeCategory = knowledgeCategoryMapper.selectById(categoryId);
         KnowledgeCategoryAdminVo knowledgeCategoryAdminVo = new KnowledgeCategoryAdminVo();
         knowledgeCategoryAdminVo.setLevel(1);
-        BeanUtils.copyProperties(knowledgeCategory,knowledgeCategoryAdminVo);
+        if (knowledgeCategory != null){
+            BeanUtils.copyProperties(knowledgeCategory,knowledgeCategoryAdminVo);
+        }
         List<KnowledgeCategoryAdminVo> childrens = findChildrens(knowledgeCategoryAdminVo);
         knowledgeCategoryAdminVo.setChildren(childrens);
         return knowledgeCategoryAdminVo;

+ 7 - 0
src/main/resources/mapper/knowledge/CommonMapper.xml

@@ -13,6 +13,13 @@
         FROM SYS_POSITION
         ORDER BY SEQUENCE_CODE_
     </select>
+
+    <select id="queryDic" resultType="com.redxun.knowledge.entity.vo.DicVo">
+        select
+            DIC_ID_,NAME_ as name,VALUE_ as value FROM LEARNING_SYSTEM_DEV.SYS_DIC
+        WHERE TREE_ID_ =
+              (select TREE_ID_ from LEARNING_SYSTEM_DEV.SYS_TREE where ALIAS_ = #{alias})
+    </select>
 </mapper>
 
 

+ 10 - 0
src/main/resources/mapper/knowledge/map/MapContentMapper.xml

@@ -46,6 +46,16 @@
         </if>
     </select>
 
+    <delete id="deleteBatchIds">
+        update KM_MAP_CONTENT
+        set IS_DEL = 1
+        WHERE
+        MAP_ID in
+        <foreach collection="coll" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </delete>
+
 </mapper>
 
 

+ 18 - 0
src/main/resources/mapper/knowledge/map/MapGroupPurviewUserMapper.xml

@@ -39,6 +39,24 @@
         </if>
     </select>
 
+    <select id="findAllMapGroupPurviewUser" resultType="com.redxun.knowledge.map.entity.dao.MapGroupPurviewUser">
+        SELECT
+        <include refid="COLUMNS" />
+        FROM KM_MAP_GROUP_PURVIEW_USER
+        where IS_DEL = 0
+        ORDER BY UPDATE_TIME_ DESC
+    </select>
+
+    <delete id="deleteBatchIds">
+        update KM_MAP_GROUP_PURVIEW_USER
+        set IS_DEL = 1
+        WHERE
+        MAP_ID in
+        <foreach collection="coll" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </delete>
+
 </mapper>
 
 

+ 40 - 0
src/main/resources/mapper/knowledge/map/MapMapper.xml

@@ -41,6 +41,46 @@
         </if>
     </select>
 
+    <select id="findAllMap" resultType="com.redxun.knowledge.map.entity.vo.MapVo">
+        SELECT
+        map.PK_ID,map.TYPE as typeName,map.NAME,map.GROUP_ID,map.GROUP_SUMMARY,map.GROUP_PURVIEW,map.IS_DEL,map.COMPANY_ID_,
+        map.CREATE_DEP_ID_,map.TENANT_ID_,map.CREATE_BY_,map.CREATE_TIME_,map.UPDATE_BY_,map.UPDATE_TIME_,
+        users.FULLNAME_ as operator
+        FROM KM_MAP map JOIN LEARNING_USER_DEV.OS_USER users ON map.UPDATE_BY_ = users.USER_ID_
+        <where>
+            <if test="@rx.Ognl@isNotEmpty(params.name)">
+                map.NAME LIKE '%' || #{params.name} || '%'
+            </if>
+            <if test="@rx.Ognl@isNotEmpty(params.groupId)">
+                and map.GROUP_ID = #{params.groupId}
+            </if>
+            <if test="@rx.Ognl@isNotEmpty(params.type)">
+                and map.TYPE = #{params.type}
+            </if>
+            <if test="@rx.Ognl@isNotEmpty(params.operator)">
+                and users.FULLNAME_ LIKE '%' || #{params.operator} || '%'
+            </if>
+            <if test="@rx.Ognl@isNotEmpty(params.operateTimeStart)">
+                and TO_CHAR(map.UPDATE_TIME_,'yyyy-mm-dd') &gt;= #{params.operateTimeStart}
+            </if>
+            <if test="@rx.Ognl@isNotEmpty(params.operateTimeEnd)">
+                and TO_CHAR(map.UPDATE_TIME_,'yyyy-mm-dd') &lt;= #{params.operateTimeEnd}
+            </if>
+            and map.IS_DEL = 0
+        </where>
+        ORDER BY map.UPDATE_TIME_ DESC
+    </select>
+
+    <delete id="deleteBatchIds">
+        update KM_MAP
+        set IS_DEL = 1
+        WHERE
+        PK_ID in
+        <foreach collection="coll" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </delete>
+
 </mapper>
 
 

+ 10 - 0
src/main/resources/mapper/knowledge/map/MapRouteMapper.xml

@@ -40,6 +40,16 @@
         </if>
     </select>
 
+    <delete id="deleteBatchIds">
+        update KM_MAP_ROUTE
+        set IS_DEL = 1
+        WHERE
+        MAP_ID in
+        <foreach collection="coll" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </delete>
+
 </mapper>