Quellcode durchsuchen

Merge branch 'V0.0.1' of http://10.87.10.227:4000/jzyd_yyds/soc into V0.0.1

jiawuxian vor 2 Jahren
Ursprung
Commit
312090120d
36 geänderte Dateien mit 565 neuen und 243 gelöschten Zeilen
  1. 11 5
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteFileService.java
  2. 1 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteRoleService.java
  3. 6 1
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteFileFallbackFactory.java
  4. 20 1
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/function/RemoteCallHandlerExecutor.java
  5. 3 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/constant/ErrorMsgConstants.java
  6. 2 2
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/domain/CoreEduTrainingPlan.java
  7. 1 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/dto/CoreEduTrainingTaskEditDto.java
  8. 31 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/dto/SysLearningMaterialsFileListPageDto.java
  9. 61 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/dto/SysLearningMaterialsInsertDto.java
  10. 42 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/dto/SysLearningMaterialsUpdateDto.java
  11. 2 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingPlanDataVo.java
  12. 2 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingPlanDetailVo.java
  13. 8 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingPlanPageVo.java
  14. 8 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingTaskDetailVo.java
  15. 4 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingTaskPageVo.java
  16. 55 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/SysLearningMaterialsDetailVo.java
  17. 36 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/SysLearningMaterialsFileListVo.java
  18. 0 136
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/BeanHelper.java
  19. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/controller/CoreEduTrainingTaskController.java
  20. 14 6
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/controller/SysLearningMaterialsController.java
  21. 2 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/mapper/CoreEduTrainingTaskMapper.java
  22. 7 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/mapper/SysLearningMaterialsMapper.java
  23. 2 3
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ICoreEduTrainingPlanService.java
  24. 10 4
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ISysLearningMaterialsService.java
  25. 68 23
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java
  26. 53 20
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java
  27. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/SysKnowledgeServiceImpl.java
  28. 55 16
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/SysLearningMaterialsServiceImpl.java
  29. 2 1
      soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingPlanMapper.xml
  30. 10 3
      soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingTaskMapper.xml
  31. 23 1
      soc-modules/soc-modules-core/src/main/resources/mapper/edu/SysLearningMaterialsMapper.xml
  32. 9 3
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/controller/SysFileController.java
  33. 3 3
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/LocalSysFileServiceImpl.java
  34. 1 1
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysOrgService.java
  35. 9 8
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysDeptServiceImpl.java
  36. 2 1
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgServiceImpl.java

+ 11 - 5
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteFileService.java

@@ -41,12 +41,18 @@ public interface RemoteFileService {
     R<String> generateEduTrainingPdf(@RequestBody Map<String, Object> data);
 
     /**
-     * 生成教育培训登记簿
+     * 获取本地存储路径前缀
+     *
+     * @return 结果
+     */
+    @GetMapping(value = "/file/getLocalPathPrefix")
+    String getLocalPathPrefix();
+
+    /**
+     * 获取nginx静态目录前缀
      *
-     * @param data     文件信息
-     * @param cacheDir 缓存目录
      * @return 结果
      */
-    @GetMapping(value = "/file/getPathPrefix")
-    String getPathPrefix();
+    @GetMapping(value = "/file/getStaticPathPrefix")
+    String getStaticPathPrefix();
 }

+ 1 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteRoleService.java

@@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author :LuoWei

+ 6 - 1
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteFileFallbackFactory.java

@@ -37,7 +37,12 @@ public class RemoteFileFallbackFactory implements FallbackFactory<RemoteFileServ
             }
 
             @Override
-            public String getPathPrefix() {
+            public String getLocalPathPrefix() {
+                return null;
+            }
+
+            @Override
+            public String getStaticPathPrefix() {
                 return null;
             }
         };

+ 20 - 1
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/function/RemoteCallHandlerExecutor.java

@@ -1,7 +1,10 @@
 package com.xunmei.system.api.function;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.xunmei.common.core.constant.ErrorMsgConstants;
+import com.xunmei.common.core.domain.R;
 import com.xunmei.common.core.exception.SystemException;
+import com.xunmei.common.core.web.domain.AjaxResult;
 import lombok.extern.slf4j.Slf4j;
 
 /**
@@ -13,7 +16,23 @@ public class RemoteCallHandlerExecutor {
 
     public static <T> T executeRemoteCall(RemoteCallHandler<T> handler, String errorMessage) {
         try {
-            return handler.handle();
+            final T handle = handler.handle();
+            if (handle instanceof AjaxResult) {
+                final AjaxResult ajaxResult = (AjaxResult) handle;
+                if (!ajaxResult.isSuccess()) {
+                    throw new SystemException(ErrorMsgConstants.REMOTE_CALL_ERROR + errorMessage);
+                }
+            }
+            if (handle instanceof R) {
+                final R result = (R) handle;
+                if (!R.isSuccess(result)) {
+                    throw new SystemException(ErrorMsgConstants.REMOTE_CALL_ERROR + errorMessage);
+                }
+            }
+            if (ObjectUtil.isNull(handle)) {
+                throw new SystemException(ErrorMsgConstants.REMOTE_CALL_ERROR + errorMessage);
+            }
+            return handle;
         } catch (Exception e) {
             throw new SystemException(ErrorMsgConstants.REMOTE_CALL_ERROR + errorMessage);
         }

+ 3 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/constant/ErrorMsgConstants.java

@@ -9,4 +9,7 @@ public class ErrorMsgConstants {
     public static final String QUERY_DICT_DATA_ERROR = "获取字典信息失败!";
     public static final String GENERATE_PDF_ERROR = "生成PDF文件失败!";
     public static final String QUERY_FILE_PATH_ERROR = "获取文件路径失败!";
+    public static final String QUERY_ROLE_DATA_ERROR = "获取角色信息失败!";
+
+    public static final String QUERY_STATICS_SAVE_PATH_ERROR = "获取静态存储路径失败!";
 }

+ 2 - 2
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/domain/CoreEduTrainingPlan.java

@@ -95,7 +95,7 @@ public class CoreEduTrainingPlan extends BaseEntity {
     @ApiModelProperty(value = "是否是标准计划,0:否,1:是")
     private Integer standard;
 
-    @ApiModelProperty(value = "是否已下发", notes = "0:否,1:是")
+    @ApiModelProperty(value = "是否已下发或当前为被下发计划", notes = "0:否,1:是")
     @TableField("issue")
     private Integer issue;
 
@@ -105,7 +105,7 @@ public class CoreEduTrainingPlan extends BaseEntity {
 
     @ApiModelProperty(value = "附件")
     @TableField("file_list")
-    private List<String> fileList;
+    private String fileList;
 
     @TableLogic(value = "0", delval = "1")
     @TableField(value = "deleted")

+ 1 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/dto/CoreEduTrainingTaskEditDto.java

@@ -42,7 +42,7 @@ public class CoreEduTrainingTaskEditDto {
     private String note;
 
     @ApiModelProperty(value = "图片")
-    private List<String> imageList;
+    private String imageList;
 
     @ApiModelProperty(value = "提交类型", notes = "1:暂存,2:提交")
     private Integer submitType;

+ 31 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/dto/SysLearningMaterialsFileListPageDto.java

@@ -0,0 +1,31 @@
+package com.xunmei.common.core.domain.edu.dto;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.xunmei.common.core.web.domain.PageRequest;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * @author jingyuanchao
+ * @date 2023/9/3 15:40
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class SysLearningMaterialsFileListPageDto extends PageRequest {
+    @ApiModelProperty(value = "机构id")
+    private Long orgId;
+
+    @ApiModelProperty(value = "学习标题")
+    private String title;
+
+    @ApiModelProperty(value = "附件名称")
+    private String fileName;
+
+    @ApiModelProperty(value = "上级id集合",notes = "此字段无需传递,后台自行获取")
+    private List<Long> orgIdList;
+}

+ 61 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/dto/SysLearningMaterialsInsertDto.java

@@ -0,0 +1,61 @@
+package com.xunmei.common.core.domain.edu.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.xunmei.common.core.web.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.List;
+
+/**
+ * 学习资料对象 sys_learning_materials
+ *
+ * @author xunmei
+ * @date 2023-08-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "学习资料新增对象", description = "学习资料")
+public class SysLearningMaterialsInsertDto extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+    @JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
+    private Long id;
+    @ApiModelProperty(value = "资料标题")
+    private String title;
+
+    @ApiModelProperty(value = "资料内容")
+    private String content;
+
+    @JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
+    @ApiModelProperty(value = "资料类型(知识库标签)")
+    private Long knowledgeId;
+
+    @ApiModelProperty(value = "所属机构")
+    private Long orgId;
+
+    @ApiModelProperty(value = "机构名称")
+    private String orgName;
+
+    @ApiModelProperty(value = "机构path")
+    private String orgPath;
+
+    @ApiModelProperty(value = "是否公开,0:未公开,1:已公开")
+    private Integer isOpen;
+
+    @ApiModelProperty(value = "附件")
+    private List<String> fileList;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+}

+ 42 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/dto/SysLearningMaterialsUpdateDto.java

@@ -0,0 +1,42 @@
+package com.xunmei.common.core.domain.edu.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+/**
+ * @author jingyuanchao
+ * @date 2023/9/3 16:24
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "学习资料新增对象", description = "学习资料")
+public class SysLearningMaterialsUpdateDto {
+
+    @JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
+    private Long id;
+    @ApiModelProperty(value = "资料标题")
+    private String title;
+
+    @ApiModelProperty(value = "资料内容")
+    private String content;
+
+    @JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
+    @ApiModelProperty(value = "资料类型(知识库标签)")
+    private Long knowledgeId;
+
+    @ApiModelProperty(value = "所属机构")
+    private Long orgId;
+
+    @ApiModelProperty(value = "附件")
+    private List<String> fileList;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+}

+ 2 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingPlanDataVo.java

@@ -79,4 +79,6 @@ public class CoreEduTrainingPlanDataVo {
     @ApiModelProperty(value = "附件")
     private List<String> fileList;
 
+    @ApiModelProperty(value = "附件",notes = "此字段不可用,仅作为mapper查询时映射暂存")
+    private String file;
 }

+ 2 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingPlanDetailVo.java

@@ -56,5 +56,6 @@ public class CoreEduTrainingPlanDetailVo {
     @ApiModelProperty(value = "附件")
     private List<String> fileList;
 
-
+    @ApiModelProperty(value = "登记簿url")
+    private String pdfUrl;
 }

+ 8 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingPlanPageVo.java

@@ -1,10 +1,13 @@
 package com.xunmei.common.core.domain.edu.vo;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @author jingyuanchao
  * @date 2023/8/24 15:30
@@ -12,7 +15,7 @@ import lombok.Data;
 @Data
 public class CoreEduTrainingPlanPageVo {
     @ApiModelProperty(value = "序号")
-    private int no;
+    private Integer no;
 
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "id")
@@ -68,4 +71,8 @@ public class CoreEduTrainingPlanPageVo {
     private int createByTopOrg;
 
     private String planRoleNameList;
+    @JsonIgnore
+    private Boolean hasChildren;
+
+    private List<CoreEduTrainingPlanPageVo> children;
 }

+ 8 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingTaskDetailVo.java

@@ -1,6 +1,7 @@
 package com.xunmei.common.core.domain.edu.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingTaskToUser;
 import io.swagger.annotations.ApiModelProperty;
@@ -81,6 +82,8 @@ public class CoreEduTrainingTaskDetailVo {
     @ApiModelProperty(value = "图片")
     private String imageList;
 
+    @ApiModelProperty(value = "附件信息")
+    private List<String> fileList;
 
     @ApiModelProperty(value = "任务用户信息", notes = "1:参与人员,2:缺席人员")
     private List<CoreEduTrainingTaskToUser> taskUserList;
@@ -89,4 +92,9 @@ public class CoreEduTrainingTaskDetailVo {
     @ApiModelProperty(value = "登记簿地址")
     private String pdfUrl;
 
+
+    @JsonIgnore
+    @ApiModelProperty(value = "图片")
+    private String file;
+
 }

+ 4 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingTaskPageVo.java

@@ -2,10 +2,12 @@ package com.xunmei.common.core.domain.edu.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingTaskToRole;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 @Data
 public class CoreEduTrainingTaskPageVo {
@@ -72,6 +74,8 @@ public class CoreEduTrainingTaskPageVo {
 
     private String taskRoleNameList;
 
+    private List<CoreEduTrainingTaskToRole> taskRoleList;
+
     @ApiModelProperty(value = "pdf下载地址")
     private String pdfUrl;
 

+ 55 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/SysLearningMaterialsDetailVo.java

@@ -0,0 +1,55 @@
+package com.xunmei.common.core.domain.edu.vo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.xunmei.common.core.web.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+/**
+ * 学习资料对象 sys_learning_materials
+ *
+ * @author xunmei
+ * @date 2023-08-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "学习资料新增对象", description = "学习资料")
+    public class SysLearningMaterialsDetailVo extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+    @JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
+    private Long id;
+    @ApiModelProperty(value = "资料标题")
+    private String title;
+
+    @ApiModelProperty(value = "资料内容")
+    private String content;
+
+    @JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
+    @ApiModelProperty(value = "资料类型(知识库标签)")
+    private Long knowledgeId;
+
+    @ApiModelProperty(value = "所属机构")
+    private Long orgId;
+
+    @ApiModelProperty(value = "机构名称")
+    private String orgName;
+
+    @ApiModelProperty(value = "机构path")
+    private String orgPath;
+
+    @ApiModelProperty(value = "是否公开,0:未公开,1:已公开")
+    private Integer isOpen;
+
+    @ApiModelProperty(value = "附件")
+    private List<String> fileList;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+}

+ 36 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/SysLearningMaterialsFileListVo.java

@@ -0,0 +1,36 @@
+package com.xunmei.common.core.domain.edu.vo;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author jingyuanchao
+ * @date 2023/9/3 15:40
+ */
+@Data
+public class SysLearningMaterialsFileListVo {
+    @ApiModelProperty(value = "学习资料id")
+    @JsonSerialize(using = com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
+    private Long id;
+
+    @ApiModelProperty(value = "机构id")
+    private Long orgId;
+
+    @ApiModelProperty(value = "机构名称")
+    private String orgName;
+
+    @ApiModelProperty(value = "学习标题")
+    private String title;
+
+    @ApiModelProperty(value = "机构id")
+    private List<String> fileList;
+
+    @JsonIgnore
+    @ApiModelProperty(value = "文件")
+    private String file;
+
+}

+ 0 - 136
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/BeanHelper.java

@@ -1,136 +0,0 @@
-package com.xunmei.common.core.utils;
-
-import org.apache.commons.lang3.ArrayUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.PropertyAccessorFactory;
-
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Field;
-import java.math.BigDecimal;
-import java.util.*;
-
-/**
- * Tkk
- */
-public class BeanHelper {
-
-    /**
-     * 主要过滤 null 值
-     *
-     * @param target
-     * @param source
-     */
-    public static void copyProperties(Object target, Object source) {
-        BeanUtils.copyProperties(source, target, getNullPropertyNames(source));
-    }
-
-    /**
-     * 主要过滤 null 值
-     *
-     * @param oldValue
-     * @param newValue
-     */
-    public static void copyProperties(Object oldValue, Object newValue, String... exclude) {
-        BeanUtils.copyProperties(newValue, oldValue, getNullPropertyNames(newValue, exclude));
-    }
-
-    /**
-     * 忽略为null的数据
-     *
-     * @param source
-     * @return
-     */
-    public static String[] getNullPropertyNames(Object source, String... ignores) {
-        BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(source);
-        PropertyDescriptor[] pds = beanWrapper.getPropertyDescriptors();
-        List<String> ignoreList = new LinkedList<>();
-        for (PropertyDescriptor pd : pds) {
-            if (pd.getWriteMethod() == null) {
-                continue;
-            }
-            Object srcValue = beanWrapper.getPropertyValue(pd.getName());
-            if (srcValue == null) {
-                ignoreList.add(pd.getName());
-            }
-        }
-        String[] result = ignoreList.toArray(new String[ignoreList.size()]);
-        return ignores == null ? result : ArrayUtils.addAll(result, ignores);
-    }
-
-
-    public static void setNullPropertiesDefValue(Object obj) {
-        //获取实体类的所有属性,返回Field数组
-        // Field[] fields = obj.getClass().getDeclaredFields();
-        Field[] fields = getAllFields(obj.getClass());
-        //遍历所有属性
-        for (int j = 0; j < fields.length; j++) {
-            Field field = fields[j];
-            String type = field.getGenericType().toString();
-            field.setAccessible(true);
-            Object value = null;
-            try {
-                value = field.get(obj);
-                if (value != null && StringUtils.isNotBlank(value.toString())) {
-                    continue;
-                }
-                //如果type是类类型,则前面包含"class ",后面跟类名
-                switch (type) {
-                    case "class java.lang.String":
-                        field.set(obj, StringUtils.EMPTY);
-                        break;
-                    case "class java.math.BigDecimal":
-                        field.set(obj, BigDecimal.ZERO);
-                        break;
-                    case "class java.util.Date":
-                        field.set(obj, new Date());
-                        break;
-                    case "class java.lang.Integer":
-                        field.set(obj, 0);
-                        break;
-                    case "class java.lang.Character":
-                        field.set(obj, '0');
-                        break;
-                    case "class java.lang.Short":
-                        field.set(obj, Short.valueOf((short) 0));
-                        break;
-                    case "class java.lang.Byte":
-                        field.set(obj, Byte.valueOf((byte) 0));
-                        break;
-                    case "class java.lang.Double":
-                        field.set(obj, 0D);
-                        break;
-                    case "class java.lang.Float":
-                        field.set(obj, 0F);
-                        break;
-                    case "class java.lang.Long":
-                        field.set(obj, 0L);
-                        break;
-                    case "class java.lang.Boolean":
-                        field.set(obj, false);
-                        break;
-                    default:
-                        break;
-                }
-            } catch (IllegalAccessException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-    /**
-     * 获取本类及其父类的属性的方法
-     *
-     * @param clazz 当前类对象
-     * @return 字段数组
-     */
-    private static Field[] getAllFields(Class<?> clazz) {
-        List<Field> fieldList = new ArrayList<>();
-        while (clazz != null) {
-            fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
-            clazz = clazz.getSuperclass();
-        }
-        Field[] fields = new Field[fieldList.size()];
-        return fieldList.toArray(fields);
-    }
-}

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/controller/CoreEduTrainingTaskController.java

@@ -97,7 +97,7 @@ public class CoreEduTrainingTaskController extends BaseController {
         return success(coreEduTrainingTaskService.selectCoreEduTrainingTaskSign(request));
     }
 
-    @ApiOperation(value = "教育培训签名")
+    @ApiOperation(value = "生成教育培训登记簿")
     @GetMapping("build/{id}")
     public AjaxResult pdf(@PathVariable("id") Long id) {
         return coreEduTrainingTaskService.buildEduPdf(id);

+ 14 - 6
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/controller/SysLearningMaterialsController.java

@@ -1,7 +1,10 @@
 package com.xunmei.core.edu.controller;
 
 import com.xunmei.common.core.domain.edu.domain.SysLearningMaterials;
+import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsFileListPageDto;
+import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsInsertDto;
 import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsPageDto;
+import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsUpdateDto;
 import com.xunmei.core.edu.service.ISysLearningMaterialsService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -65,7 +68,7 @@ public class SysLearningMaterialsController extends BaseController {
     @RequiresPermissions("core:materials:add")
     @Log(title = "学习资料", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody SysLearningMaterials sysLearningMaterials) {
+    public AjaxResult add(@RequestBody SysLearningMaterialsInsertDto sysLearningMaterials) {
         return toAjax(sysLearningMaterialsService.insertSysLearningMaterials(sysLearningMaterials));
     }
 
@@ -76,7 +79,7 @@ public class SysLearningMaterialsController extends BaseController {
     @RequiresPermissions("core:materials:edit")
     @Log(title = "学习资料", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@RequestBody SysLearningMaterials sysLearningMaterials) {
+    public AjaxResult edit(@RequestBody SysLearningMaterialsUpdateDto sysLearningMaterials) {
         return toAjax(sysLearningMaterialsService.updateSysLearningMaterials(sysLearningMaterials));
     }
 
@@ -102,14 +105,19 @@ public class SysLearningMaterialsController extends BaseController {
         sysLearningMaterialsService.export(sysLearningMaterials,response);
     }
 
-    /**
-     * 修改学习资料,设置未公开/公开
-     */
-    @ApiOperation(value = "修改SysLearningMaterials")
+
+    @ApiOperation(value = "修改学习资料,设置未公开/公开")
     @RequiresPermissions("core:materials:edit")
     @Log(title = "学习资料", businessType = BusinessType.UPDATE)
     @GetMapping("/{id}/{isOpen}")
     public AjaxResult editOpen(@PathVariable Long id, @PathVariable Integer isOpen) {
         return toAjax(sysLearningMaterialsService.editOpen(id, isOpen));
     }
+
+    @ApiOperation(value = "获取学习资料及文件列表")
+    @PostMapping("/fileList")
+    public TableDataInfo filePageList(@RequestBody SysLearningMaterialsFileListPageDto request) {
+        return sysLearningMaterialsService.filePageList(request) ;
+    }
+
 }

+ 2 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/mapper/CoreEduTrainingTaskMapper.java

@@ -28,4 +28,6 @@ public interface CoreEduTrainingTaskMapper extends BaseMapper<CoreEduTrainingTas
     CoreEduTrainingTaskDetailVo selectEduTrainingTaskDetail(@Param("id") Long id);
 
     List<CoreEduTrainingTaskReportVo> selectReport(@Param("request") CoreEduTrainingTaskReportDto request);
+
+    Integer checkHasTask(@Param("planId") Long planId);
 }

+ 7 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/mapper/SysLearningMaterialsMapper.java

@@ -1,10 +1,15 @@
 package com.xunmei.core.edu.mapper;
 
 import java.util.List;
+
+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.core.mapper.BaseMapper;
 import com.xunmei.common.core.domain.edu.domain.SysLearningMaterials;
+import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsFileListPageDto;
 import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsPageDto;
+import com.xunmei.common.core.domain.edu.vo.SysLearningMaterialsFileListVo;
 import com.xunmei.common.core.domain.edu.vo.SysLearningMaterialsPageVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -64,4 +69,6 @@ public interface SysLearningMaterialsMapper extends BaseMapper<SysLearningMateri
     public int deleteSysLearningMaterialsByIds(Long[] ids);
 
     Page<SysLearningMaterialsPageVo> selectPageData(@Param("page") Page<SysLearningMaterialsPageVo> page, @Param("request") SysLearningMaterialsPageDto sysLearningMaterials);
+
+    IPage<SysLearningMaterialsFileListVo> selectFilePageList(Page<SysLearningMaterialsFileListVo> pageRequest, @Param("request") SysLearningMaterialsFileListPageDto request);
 }

+ 2 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ICoreEduTrainingPlanService.java

@@ -52,6 +52,8 @@ public interface ICoreEduTrainingPlanService extends IService<CoreEduTrainingPla
      */
     int updateCoreEduTrainingPlan(CoreEduTrainingPlanEditDto coreEduTrainingPlan);
 
+    CoreEduTrainingPlanDataVo getCoreEduTrainingPlanDataVo(Long id);
+
     /**
      * 批量删除教育培训计划
      *
@@ -87,7 +89,4 @@ public interface ICoreEduTrainingPlanService extends IService<CoreEduTrainingPla
      * @return Page
      */
     List<SysOrg> getExecuteOrg(CoreEduTrainingPlan plan);
-
-    CoreEduTrainingPlanDataVo getDetailPlanData(Long id);
-
 }

+ 10 - 4
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ISysLearningMaterialsService.java

@@ -1,10 +1,15 @@
 package com.xunmei.core.edu.service;
 
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
 import java.util.List;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsFileListPageDto;
+import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsInsertDto;
+import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsUpdateDto;
+import com.xunmei.common.core.domain.edu.vo.SysLearningMaterialsDetailVo;
+import com.xunmei.common.core.domain.edu.vo.SysLearningMaterialsFileListVo;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.core.domain.edu.domain.SysLearningMaterials;
 import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsPageDto;
@@ -24,7 +29,7 @@ public interface ISysLearningMaterialsService extends IService<SysLearningMateri
      * @param id 学习资料主键
      * @return 学习资料
      */
-    public SysLearningMaterials selectSysLearningMaterialsById(Long id);
+    public SysLearningMaterialsDetailVo selectSysLearningMaterialsById(Long id);
 
     /**
      * 查询学习资料列表
@@ -40,7 +45,7 @@ public interface ISysLearningMaterialsService extends IService<SysLearningMateri
      * @param sysLearningMaterials 学习资料
      * @return 结果
      */
-    public int insertSysLearningMaterials(SysLearningMaterials sysLearningMaterials);
+    public int insertSysLearningMaterials(SysLearningMaterialsInsertDto sysLearningMaterials);
 
     /**
      * 修改学习资料
@@ -48,7 +53,7 @@ public interface ISysLearningMaterialsService extends IService<SysLearningMateri
      * @param sysLearningMaterials 学习资料
      * @return 结果
      */
-    public int updateSysLearningMaterials(SysLearningMaterials sysLearningMaterials);
+    public int updateSysLearningMaterials(SysLearningMaterialsUpdateDto sysLearningMaterials);
 
     /**
      * 批量删除学习资料
@@ -78,4 +83,5 @@ public interface ISysLearningMaterialsService extends IService<SysLearningMateri
 
     void export(SysLearningMaterialsPageDto sysLearningMaterials, HttpServletResponse response) throws IOException;
 
+    TableDataInfo filePageList(SysLearningMaterialsFileListPageDto request);
 }

+ 68 - 23
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java

@@ -3,6 +3,8 @@ package com.xunmei.core.edu.service.impl;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
@@ -21,7 +23,9 @@ import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanDetailVo;
 import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanPageVo;
 import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanRoleVo;
 import com.xunmei.common.core.exception.SystemException;
+import com.xunmei.common.core.util.BeanHelper;
 import com.xunmei.common.core.utils.DateUtils;
+import com.xunmei.common.core.vo.IdNameVo;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.core.edu.mapper.CoreEduTrainingPlanMapper;
@@ -32,7 +36,9 @@ import com.xunmei.core.edu.service.ICoreEduTrainingPlanService;
 import com.xunmei.core.edu.service.ICoreEduTrainingPlanToExecOrgService;
 import com.xunmei.core.edu.service.ICoreEduTrainingPlanToRoleService;
 import com.xunmei.core.edu.service.ICoreEduTrainingTaskService;
+import com.xunmei.system.api.Eto.RoleConditionEto;
 import com.xunmei.system.api.RemoteOrgService;
+import com.xunmei.system.api.RemoteRoleService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
 import lombok.extern.slf4j.Slf4j;
@@ -43,10 +49,7 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -74,6 +77,8 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
     private CoreEduTrainingTaskMapper coreEduTrainingTaskMapper;
     @Autowired
     private RemoteOrgService orgService;
+    @Autowired
+    private RemoteRoleService remoteRoleService;
 
     @Override
     public TableDataInfo selectPage(CoreEduTrainingPlanPageDto request) {
@@ -86,17 +91,12 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         //获取数据
         Page<CoreEduTrainingPlanPageVo> page = coreEduTrainingPlanMapper.selectPageData(request.getPage(), request);
         SysOrg sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectTopOrg(SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
-        for (CoreEduTrainingPlanPageVo record : page.getRecords()) {
-            record.setNo(page.getRecords().indexOf(record) + 1);
-            if (ObjectUtil.equal(record.getCreateOrgId(), sysOrg.getId())) {
-                record.setCreateByTopOrg(1);
-            }
-            String roleNameList = coreEduTrainingPlanToRoleMapper.selectRoleNameByPlanId(record.getId()).stream().map(CoreEduTrainingPlanRoleVo::getRoleName).collect(Collectors.joining(","));
-            record.setPlanRoleNameList(roleNameList);
-
+        List<CoreEduTrainingPlanPageVo> records = page.getRecords();
+        for (CoreEduTrainingPlanPageVo record : records) {
+            dealData(record, records, sysOrg.getId());
         }
         //抓换为TableDataInfo适配前端
-        TableDataInfo tableDataInfo = new TableDataInfo();
+        TableDataInfo<CoreEduTrainingPlanPageVo> tableDataInfo = new TableDataInfo();
         tableDataInfo.setMsg("操作成功");
         tableDataInfo.setCode(200);
         tableDataInfo.setTotal(page.getTotal());
@@ -106,6 +106,32 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
 
     }
 
+    private void dealData(CoreEduTrainingPlanPageVo record, List<CoreEduTrainingPlanPageVo> records, Long orgId) {
+        record.setNo(records.indexOf(record) + 1);
+        if (ObjectUtil.equal(record.getCreateOrgId(), orgId)) {
+            record.setCreateByTopOrg(1);
+        }
+        String roleNameList = coreEduTrainingPlanToRoleMapper.selectRoleNameByPlanId(record.getId()).stream().map(CoreEduTrainingPlanRoleVo::getRoleName).collect(Collectors.joining(","));
+        record.setPlanRoleNameList(roleNameList);
+        List<CoreEduTrainingPlan> planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>().eq(CoreEduTrainingPlan::getParentId, record.getId()));
+        List<CoreEduTrainingPlanPageVo> children = BeanHelper.copyProperties(planList, CoreEduTrainingPlanPageVo.class);
+        final List<Long> collect = children.stream().map(CoreEduTrainingPlanPageVo::getUpdateBy).map(Long::valueOf).distinct().collect(Collectors.toList());
+        final List<IdNameVo> idNameVos = RemoteCallHandlerExecutor.executeRemoteCall(() -> remoteRoleService.getNames(new RoleConditionEto(collect)), ErrorMsgConstants.QUERY_ROLE_DATA_ERROR);
+
+        //将idNameVos使用steam转为map
+        final Map<Long, String> idNameMap = idNameVos.stream().collect(Collectors.toMap(IdNameVo::getId, IdNameVo::getName));
+        record.setChildren(children);
+        record.setHasChildren(ObjectUtil.isNotEmpty(children));
+        for (CoreEduTrainingPlanPageVo child : children) {
+            if (ObjectUtil.equal(child.getCreateOrgId(), orgId)) {
+                child.setCreateByTopOrg(1);
+            }
+            final String name = idNameMap.get(Long.valueOf(child.getUpdateBy()));
+            child.setUpdateBy(name);
+            child.setPlanRoleNameList(roleNameList);
+        }
+    }
+
 
     /**
      * 查询教育培训计划
@@ -118,6 +144,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         final CoreEduTrainingPlan plan = coreEduTrainingPlanMapper.selectById(id);
         CoreEduTrainingPlanDetailVo vo = new CoreEduTrainingPlanDetailVo();
         BeanUtils.copyProperties(plan, vo);
+        vo.setFileList(ObjectUtil.isNotEmpty(plan.getFileList()) ? JSON.parseArray(plan.getFileList(), String.class) : null);
         final List<CoreEduTrainingPlanToExecOrg> execOrgList = coreEduTrainingPlanToExecOrgMapper.selectByMap(MapUtil.of("plan_id", id));
         final List<Long> execOrgIdList = execOrgList.stream().map(CoreEduTrainingPlanToExecOrg::getOrgId).collect(Collectors.toList());
         vo.setPlanExecOrgIdList(ObjectUtil.isEmpty(execOrgIdList) ? null : execOrgIdList);
@@ -150,6 +177,9 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         if (ObjectUtil.isAllEmpty(request.getExecOrgType(), request.getPlanExecOrgIdList())) {
             throw new RuntimeException("培训机构类型和执行机构不能同时为空!");
         }
+        if (ObjectUtil.equal(request.getPlanCycle(), 0) && ObjectUtil.hasEmpty(request.getStartDate(), request.getEndDate())) {
+            throw new RuntimeException("当计划为无周期的时候,请填入开始时间和结束时间!");
+        }
         CoreEduTrainingPlan plan = new CoreEduTrainingPlan();
         BeanUtils.copyProperties(request, plan);
         plan.setId(IdWorker.getId());
@@ -167,6 +197,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         plan.setBelongOrgId(orgId);
         plan.setBelongOrgName(r.getName());
         plan.setBelongOrgPath(r.getPath());
+        plan.setFileList(ObjectUtil.isNotEmpty(request.getFileList()) ? JSON.toJSONString(request.getFileList()) : null);
         batchSavePlanToRole(request.getPlanRoleId(), plan.getId());
         batchSavePlanToExecOrg(request.getPlanExecOrgIdList(), plan.getId());
         //省联社或者办事处创建的计划才存在下发
@@ -178,7 +209,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
 
         //如果不是省联社或者办事处,并且是无周期或者立即生效
         if ((!checkOrgType(plan.getExecOrgType())) && (ObjectUtil.equal(0, plan.getPlanCycle()) || ObjectUtil.equal(0, plan.getBuildTaskNow()))) {
-            CoreEduTrainingPlanDataVo detailPlanData = coreEduTrainingPlanMapper.getDetailPlanData(plan.getId());
+            CoreEduTrainingPlanDataVo detailPlanData = this.getCoreEduTrainingPlanDataVo(plan.getId());
             coreEduTrainingTaskService.createTaskForNow(detailPlanData, plan.getStartDate(), plan.getEndDate());
         }
 
@@ -215,13 +246,33 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         }
         BeanUtils.copyProperties(request, plan);
         plan.setUpdateTime(DateUtils.getNowDate());
+        plan.setFileList(ObjectUtil.isNotEmpty(request.getFileList()) ? JSON.toJSONString(request.getFileList()) : null);
         plan.setUpdateBy(SecurityUtils.getLoginUser().getSysUser().getId().toString());
-
         coreEduTrainingPlanToRoleMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
         coreEduTrainingPlanToExecOrgMapper.deleteByMap(MapUtil.of("plan_id", plan.getId()));
         batchSavePlanToRole(request.getPlanRoleId(), plan.getId());
         batchSavePlanToExecOrg(request.getPlanExecOrgIdList(), plan.getId());
-        return coreEduTrainingPlanMapper.updateById(plan);
+        final int i = coreEduTrainingPlanMapper.updateById(plan);
+        if (ObjectUtil.equal(plan.getStandard(), 0) && ObjectUtil.equal(plan.getIssue(), 0)) {
+            //说明是行方自己创建的计划,修改后需要重新下发
+            Integer exit = coreEduTrainingTaskMapper.checkHasTask(request.getId());
+            Integer hasDone = coreEduTrainingTaskMapper.checkHasTaskIsDone(Collections.singletonList(request.getId()));
+            if (ObjectUtil.equal(exit, 1) && ObjectUtil.isNull(hasDone)) {
+                coreEduTrainingTaskMapper.deleteByMap(MapUtil.of("plan_id", request.getId()));
+                //说明有任务并且都没执行过,需要重新生成任务
+                final CoreEduTrainingPlanDataVo dataVo = getCoreEduTrainingPlanDataVo(request.getId());
+                coreEduTrainingTaskService.createTaskForNow(dataVo, plan.getStartDate(), plan.getEndDate());
+            }
+        }
+
+        return i;
+    }
+
+    @Override
+    public CoreEduTrainingPlanDataVo getCoreEduTrainingPlanDataVo(Long id) {
+        final CoreEduTrainingPlanDataVo dataVo = coreEduTrainingPlanMapper.getDetailPlanData(id);
+        dataVo.setFileList(ObjectUtil.isNotEmpty(dataVo.getFile()) ? JSON.parseArray(dataVo.getFile(), String.class) : null);
+        return dataVo;
     }
 
     public void batchSavePlanToRole(List<Long> roleIdList, Long planId) {
@@ -301,12 +352,10 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
         List<CoreEduTrainingPlanToExecOrg> execOrg = coreEduTrainingPlanToExecOrgMapper.selectList(eos);
         if (ObjectUtil.isNotEmpty(execOrg)) {
             final List<Long> list = execOrg.stream().map(CoreEduTrainingPlanToExecOrg::getOrgId).collect(Collectors.toList());
-            orgList = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectOrgByIdList(list, SecurityConstants.INNER), "未能查找到具体的培训机构,请联系管理员!");
+            orgList = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectOrgByIdList(list, SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
             return orgList;
         }
-        Assert.notNull(execOrgType, "未能查找到具体的培训机构,请联系管理员!");
         orgList = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectByOrgType(execOrgType, SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
-        Assert.notEmpty(orgList, "无法根据培训机构类型找到具体机构,请修改计划内容!");
         return orgList;
     }
 
@@ -369,8 +418,4 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
 
     }
 
-    @Override
-    public CoreEduTrainingPlanDataVo getDetailPlanData(Long id) {
-        return coreEduTrainingPlanMapper.getDetailPlanData(id);
-    }
 }

+ 53 - 20
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java

@@ -35,6 +35,7 @@ import com.xunmei.core.edu.mapper.CoreEduTrainingPlanMapper;
 import com.xunmei.core.edu.mapper.CoreEduTrainingTaskMapper;
 import com.xunmei.core.edu.mapper.CoreEduTrainingTaskToRoleMapper;
 import com.xunmei.core.edu.mapper.CoreEduTrainingTaskToUserMapper;
+import com.xunmei.core.edu.service.ICoreEduTrainingPlanService;
 import com.xunmei.core.edu.service.ICoreEduTrainingTaskService;
 import com.xunmei.core.edu.service.ICoreEduTrainingTaskToRoleService;
 import com.xunmei.core.edu.service.ICoreEduTrainingTaskToUserService;
@@ -85,6 +86,7 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     @Autowired
     private CoreEduTrainingPlanMapper coreEduTrainingPlanMapper;
 
+
     @Override
     public TableDataInfo<CoreEduTrainingTaskPageVo> selectPage(CoreEduTrainingTaskPageDto request) {
         //如果是web段的查询
@@ -113,27 +115,39 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
             List<CoreEduTrainingTaskToRole> roleList = taskToRoleMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingTaskToRole>()
                     .in(CoreEduTrainingTaskToRole::getEduTrainingTaskId, idList));
             Map<Long, List<CoreEduTrainingTaskToRole>> listMap = roleList.stream().collect(Collectors.groupingBy(CoreEduTrainingTaskToRole::getEduTrainingTaskId));
-            for (CoreEduTrainingTaskPageVo record : pageData.getRecords()) {
-                record.setNo(pageData.getRecords().indexOf(record) + 1);
-                record.setTypeText(EduTrainingType.getName(record.getType()));
-                record.setStatusText(EduTrainingDoStatus.getName(record.getStatus()));
-                List<CoreEduTrainingTaskToRole> coreEduTrainingTaskToRoles = listMap.get(record.getId());
-                if (ObjectUtil.isEmpty(coreEduTrainingTaskToRoles)) {
-                    continue;
-                }
-                record.setTaskRoleNameList(coreEduTrainingTaskToRoles.stream().map(CoreEduTrainingTaskToRole::getRoleName).collect(Collectors.joining(",")));
-
-                List<CoreEduTrainingTaskToUser> userList = taskToUserMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingTaskToUser>()
-                        .eq(CoreEduTrainingTaskToUser::getEduTrainingTaskId, record.getId()));
-                int signNums = (int) userList.stream().filter(user -> user.getSign() == 1).count();
-                record.setSignNums(signNums + "/" + userList.size());
+            final List<CoreEduTrainingTaskPageVo> records = pageData.getRecords();
+            final String staticPathPrefix = getStaticPathPrefix();
+            for (CoreEduTrainingTaskPageVo record : records) {
+                dealData(record, records, listMap, staticPathPrefix);
             }
         }
-
         //抓换为TableDataInfo适配前端
         return TableDataInfo.build(pageData);
     }
 
+    private String getStaticPathPrefix() {
+        return RemoteCallHandlerExecutor.executeRemoteCall(() -> fileService.getStaticPathPrefix(), ErrorMsgConstants.QUERY_STATICS_SAVE_PATH_ERROR);
+    }
+
+    private void dealData(CoreEduTrainingTaskPageVo record, List<CoreEduTrainingTaskPageVo> records, Map<Long, List<CoreEduTrainingTaskToRole>> listMap, String staticsPath) {
+        record.setNo(records.indexOf(record) + 1);
+        record.setTypeText(EduTrainingType.getName(record.getType()));
+        record.setStatusText(EduTrainingDoStatus.getName(record.getStatus()));
+        List<CoreEduTrainingTaskToRole> coreEduTrainingTaskToRoles = listMap.get(record.getId());
+        if (ObjectUtil.isEmpty(coreEduTrainingTaskToRoles)) {
+            return;
+        }
+        record.setTaskRoleList(coreEduTrainingTaskToRoles);
+        record.setTaskRoleNameList(coreEduTrainingTaskToRoles.stream().map(CoreEduTrainingTaskToRole::getRoleName).collect(Collectors.joining(",")));
+        List<CoreEduTrainingTaskToUser> userList = taskToUserMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingTaskToUser>()
+                .eq(CoreEduTrainingTaskToUser::getEduTrainingTaskId, record.getId()));
+        int signNums = (int) userList.stream().filter(user -> user.getSign() == 1).count();
+        record.setSignNums(signNums + "/" + userList.size());
+        if (ObjectUtil.isNotEmpty(record.getPdfUrl())) {
+            record.setPdfUrl(staticsPath + record.getPdfUrl());
+        }
+    }
+
     @Override
     public List<CoreEduTrainingTaskToUser> signUserList(Long taskId) {
         return taskToUserMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingTaskToUser>()
@@ -150,9 +164,15 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     public CoreEduTrainingTaskDetailVo selectCoreEduTrainingTaskById(Long id) {
         CoreEduTrainingTaskDetailVo detailVo = coreEduTrainingTaskMapper.selectEduTrainingTaskDetail(id);
         List<CoreEduTrainingTaskToUser> userList = taskToUserMapper.selectByMap(MapUtil.of("edu_training_task_id", id));
+        if (ObjectUtil.isNotEmpty(detailVo.getFile())) {
+            detailVo.setFileList(JSON.parseArray(detailVo.getFile(), String.class));
+        }
         if (ObjectUtil.isNotEmpty(userList)) {
             detailVo.setTaskUserList(userList);
         }
+        if (ObjectUtil.isNotEmpty(detailVo.getPdfUrl())) {
+            detailVo.setPdfUrl(getStaticPathPrefix() + detailVo.getPdfUrl());
+        }
         return detailVo;
     }
 
@@ -191,7 +211,8 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         taskToUserMapper.deleteByMap(MapUtil.of("edu_training_task_id", request.getId()));
         BeanUtils.copyProperties(request, coreEduTrainingTask);
         coreEduTrainingTask.setRecorderId(SecurityUtils.getUserId());
-        coreEduTrainingTask.setImageList(ObjectUtil.isNotEmpty(request.getImageList()) ? JSON.toJSONString(request.getImageList()) : null);
+        //主持人默认取网点负责人,具体还没落实,暂时处理成这样   TODO
+        coreEduTrainingTask.setHostId(SecurityUtils.getUserId());
         List<CoreEduTrainingTaskToUser> taskUserList = request.getTaskUserList();
         if (taskUserList != null && taskUserList.size() > 0) {
             for (CoreEduTrainingTaskToUser taskToUser : taskUserList) {
@@ -367,7 +388,15 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         }
         taskToUser.setSign(1);
         taskToUser.setSignImage(request.getSignImage());
-        return taskToUserMapper.updateSign(taskToUser);
+        final int sign = taskToUserMapper.updateSign(taskToUser);
+        final List<CoreEduTrainingTaskToUser> taskToUserList = taskToUserMapper.selectList(new LambdaUpdateWrapper<CoreEduTrainingTaskToUser>()
+                .eq(CoreEduTrainingTaskToUser::getEduTrainingTaskId, request.getId()));
+        //如果存在用户数据,筛选出参与人员中签名图片为空的数据,如果count等于0说明全部签名完成
+        final long count = taskToUserList.stream().filter(user -> ObjectUtil.equal(user.getType(), 1) && ObjectUtil.isEmpty(user.getSignImage())).count();
+        if (ObjectUtil.isNotEmpty(taskToUserList) && count < 1) {
+            buildEduPdf(request.getId());
+        }
+        return sign;
     }
 
     @Override
@@ -436,8 +465,8 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         if (ObjectUtil.isEmpty(taskUserList)) {
             data.put("image", new ArrayList<>());
         } else {
-            String prefixPath = RemoteCallHandlerExecutor.executeRemoteCall(() -> fileService.getPathPrefix(), ErrorMsgConstants.QUERY_FILE_PATH_ERROR);
-            List<String> collect = taskUserList.stream().filter(item -> item.getType() == 1).map(CoreEduTrainingTaskToUser::getSignImage).collect(Collectors.toList());
+            String prefixPath = RemoteCallHandlerExecutor.executeRemoteCall(() -> fileService.getLocalPathPrefix(), ErrorMsgConstants.QUERY_FILE_PATH_ERROR);
+            List<String> collect = taskUserList.stream().filter(item -> item.getType() == 1 && ObjectUtil.isNotEmpty(item.getSignImage())).map(CoreEduTrainingTaskToUser::getSignImage).collect(Collectors.toList());
             List<String> list = new ArrayList<>();
             for (String path : collect) {
                 list.add(prefixPath + path);
@@ -467,12 +496,14 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         if (null == cycle) {
             planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
                     .eq(CoreEduTrainingPlan::getStandard, 0)
+                    .eq(CoreEduTrainingPlan::getPlanStatus, 0)
                     .in(CoreEduTrainingPlan::getPlanCycle, cycleList)
                     .eq(CoreEduTrainingPlan::getDeleted, 0)
                     .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
         } else {
             planList = coreEduTrainingPlanMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlan>()
                     .eq(CoreEduTrainingPlan::getStandard, 0)
+                    .eq(CoreEduTrainingPlan::getPlanStatus, 0)
                     .eq(CoreEduTrainingPlan::getPlanCycle, cycle)
                     .eq(CoreEduTrainingPlan::getDeleted, 0)
                     .select(CoreEduTrainingPlan::getId, CoreEduTrainingPlan::getPlanCycle));
@@ -485,7 +516,9 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         //此list中Plan对象仅id与planCycle字段有值,
         for (CoreEduTrainingPlan plan : planList) {
             CompletableFuture.runAsync(() -> {
-                CoreEduTrainingPlanDataVo detailPlanData = coreEduTrainingPlanMapper.getDetailPlanData(plan.getId());
+                //此处因为planService会导致循环依赖
+                final CoreEduTrainingPlanDataVo detailPlanData = coreEduTrainingPlanMapper.getDetailPlanData(plan.getId());
+                detailPlanData.setFileList(ObjectUtil.isNotEmpty(detailPlanData.getFile()) ? JSON.parseArray(detailPlanData.getFile(), String.class) : null);
                 DateRange range = DateUtils.getStartAndEnd(finalDate, plan.getPlanCycle());
                 this.createTaskForNow(detailPlanData, range.getStartTime(), range.getEndTime());
             });

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/SysKnowledgeServiceImpl.java

@@ -48,7 +48,7 @@ public class SysKnowledgeServiceImpl extends ServiceImpl<SysKnowledgeMapper, Sys
         }
         //查询条件
         LambdaQueryWrapper<SysKnowledge> wrapper = new LambdaQueryWrapper<>(sysKnowledge);
-        wrapper.orderByAsc(SysKnowledge::getCreateTime);
+        wrapper.orderByDesc(SysKnowledge::getCreateTime);
         //模糊查询
         if (StringUtils.isNotNull(sysKnowledge.getName())) {
             wrapper.like(SysKnowledge::getName, sysKnowledge.getName());

+ 55 - 16
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/SysLearningMaterialsServiceImpl.java

@@ -4,13 +4,20 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.poi.excel.ExcelUtil;
 import cn.hutool.poi.excel.ExcelWriter;
 import com.alibaba.fastjson2.JSON;
+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.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.ErrorMsgConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.edu.domain.SysLearningMaterials;
+import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsFileListPageDto;
+import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsInsertDto;
 import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsPageDto;
+import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsUpdateDto;
+import com.xunmei.common.core.domain.edu.vo.SysLearningMaterialsDetailVo;
+import com.xunmei.common.core.domain.edu.vo.SysLearningMaterialsFileListVo;
 import com.xunmei.common.core.domain.edu.vo.SysLearningMaterialsPageVo;
 import com.xunmei.common.core.utils.DateHelper;
 import com.xunmei.common.core.utils.DateUtils;
@@ -21,6 +28,7 @@ import com.xunmei.core.edu.service.ISysLearningMaterialsService;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -29,6 +37,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.util.*;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 /**
@@ -53,7 +62,8 @@ public class SysLearningMaterialsServiceImpl extends ServiceImpl<SysLearningMate
         } else {
             page = new Page<>();
         }
-        dealParentOrgId(sysLearningMaterials);
+        final List<Long> list = dealParentOrgId(sysLearningMaterials.getOrgId());
+        sysLearningMaterials.setOrgIdList(list);
         sysLearningMaterials.setUserId(SecurityUtils.getUserId());
         //获取数据
         page = sysLearningMaterialsMapper.selectPageData(page, sysLearningMaterials);
@@ -69,16 +79,16 @@ public class SysLearningMaterialsServiceImpl extends ServiceImpl<SysLearningMate
         return tableDataInfo;
     }
 
-    private void dealParentOrgId(SysLearningMaterialsPageDto sysLearningMaterials) {
-        SysOrg sysOrg = remoteOrgService.selectSysOrgById(sysLearningMaterials.getOrgId(), SecurityConstants.INNER);
+    private List<Long> dealParentOrgId(Long orgId) {
+        SysOrg sysOrg = remoteOrgService.selectSysOrgById(orgId, SecurityConstants.INNER);
         if (sysOrg == null || ObjectUtil.isEmpty(sysOrg.getPath())) {
             throw new RuntimeException("机构不存在或机构信息缺失!");
         }
         String[] split = sysOrg.getPath().split("-");
         List<Long> list = new ArrayList<>();
         Stream.of(split).forEach(s -> list.add(Long.valueOf(s)));
-        list.remove(sysLearningMaterials.getOrgId());
-        sysLearningMaterials.setOrgIdList(list);
+        //list.remove(sysLearningMaterials.getOrgId());
+        return list;
     }
 
     public void extractStringFromUrl(SysLearningMaterialsPageVo record) {
@@ -86,10 +96,14 @@ public class SysLearningMaterialsServiceImpl extends ServiceImpl<SysLearningMate
             return;
         }
         String fileList = record.getFileList();
-        List<Map> maps = JSON.parseArray(fileList, Map.class);
-        String name = maps.get(0).get("name").toString();
+        List<String> list = JSON.parseArray(fileList, String.class);
+        List<String> arrayList = new ArrayList<>();
+        for (String fileStr : list) {
+            final Map map = JSON.parseObject(fileStr, Map.class);
+            arrayList.add(map.get("name").toString());
+        }
         // 获取最后一个斜杠后面的字符串
-        record.setFileList(name);
+        record.setFileList(String.join(",", arrayList));
     }
 
     /**
@@ -99,8 +113,12 @@ public class SysLearningMaterialsServiceImpl extends ServiceImpl<SysLearningMate
      * @return 学习资料
      */
     @Override
-    public SysLearningMaterials selectSysLearningMaterialsById(Long id) {
-        return sysLearningMaterialsMapper.selectById(id);
+    public SysLearningMaterialsDetailVo selectSysLearningMaterialsById(Long id) {
+        final SysLearningMaterials materials = sysLearningMaterialsMapper.selectById(id);
+        SysLearningMaterialsDetailVo vo = new SysLearningMaterialsDetailVo();
+        BeanUtils.copyProperties(materials, vo);
+        vo.setFileList(ObjectUtil.isNotEmpty(materials.getFileList()) ? JSON.parseArray(materials.getFileList(), String.class) : new ArrayList<>());
+        return vo;
     }
 
     /**
@@ -117,15 +135,18 @@ public class SysLearningMaterialsServiceImpl extends ServiceImpl<SysLearningMate
     /**
      * 新增学习资料
      *
-     * @param sysLearningMaterials 学习资料
+     * @param request 学习资料
      * @return 结果
      */
     @Override
-    public int insertSysLearningMaterials(SysLearningMaterials sysLearningMaterials) {
+    public int insertSysLearningMaterials(SysLearningMaterialsInsertDto request) {
+        SysLearningMaterials sysLearningMaterials = new SysLearningMaterials();
+        BeanUtils.copyProperties(request, sysLearningMaterials);
         sysLearningMaterials.setCreateBy(String.valueOf(SecurityUtils.getUserId()));
         sysLearningMaterials.setCreateTime(DateUtils.getNowDate());
         sysLearningMaterials.setUpdateBy(String.valueOf(SecurityUtils.getUserId()));
         sysLearningMaterials.setUpdateTime(DateUtils.getNowDate());
+        sysLearningMaterials.setFileList(ObjectUtil.isNotEmpty(request.getFileList()) ? JSON.toJSONString(request.getFileList()) : null);
         sysLearningMaterials.setIsOpen(0);
         SysOrg sysOrg = remoteOrgService.selectSysOrgById(sysLearningMaterials.getOrgId(), SecurityConstants.INNER);
         if (sysOrg != null) {
@@ -142,10 +163,13 @@ public class SysLearningMaterialsServiceImpl extends ServiceImpl<SysLearningMate
      * @return 结果
      */
     @Override
-    public int updateSysLearningMaterials(SysLearningMaterials sysLearningMaterials) {
-        sysLearningMaterials.setUpdateBy(String.valueOf(SecurityUtils.getUserId()));
-        sysLearningMaterials.setUpdateTime(DateUtils.getNowDate());
-        return sysLearningMaterialsMapper.updateById(sysLearningMaterials);
+    public int updateSysLearningMaterials(SysLearningMaterialsUpdateDto request) {
+        final SysLearningMaterials materials = getById(request.getId());
+        BeanUtils.copyProperties(request, materials);
+        materials.setFileList(ObjectUtil.isNotEmpty(request.getFileList()) ? JSON.toJSONString(request.getFileList()) : null);
+        materials.setUpdateBy(String.valueOf(SecurityUtils.getUserId()));
+        materials.setUpdateTime(DateUtils.getNowDate());
+        return sysLearningMaterialsMapper.updateById(materials);
     }
 
     /**
@@ -183,6 +207,21 @@ public class SysLearningMaterialsServiceImpl extends ServiceImpl<SysLearningMate
     }
 
     @Override
+    public TableDataInfo filePageList(SysLearningMaterialsFileListPageDto request) {
+        final List<Long> list = dealParentOrgId(request.getOrgId());
+        request.setOrgIdList(list);
+        final IPage<SysLearningMaterialsFileListVo> page = sysLearningMaterialsMapper.selectFilePageList(request.getPageRequest(), request);
+        final List<SysLearningMaterialsFileListVo> records = page.getRecords();
+        if (ObjectUtil.isEmpty(records)) {
+            return TableDataInfo.build(page);
+        }
+        for (SysLearningMaterialsFileListVo record : records) {
+            record.setFileList(ObjectUtil.isNotEmpty(record.getFile()) ? JSON.parseArray(record.getFile(), String.class) : new ArrayList<>());
+        }
+        return TableDataInfo.build(page);
+    }
+
+    @Override
     public void export(SysLearningMaterialsPageDto sysLearningMaterials, HttpServletResponse response) throws
             IOException {
         SysOrg sysOrg = RemoteCallHandlerExecutor.executeRemoteCall(() -> remoteOrgService.selectOrgById(sysLearningMaterials.getOrgId(), SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);

+ 2 - 1
soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingPlanMapper.xml

@@ -49,6 +49,7 @@
         <result property="standard" column="standard"/>
         <result property="issue" column="issue"/>
         <result property="parentId" column="parent_id"/>
+        <result property="file" column="file_list"/>
         <collection property="planRoleList" ofType="com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlanToRole"
                     select="com.xunmei.core.edu.mapper.CoreEduTrainingPlanToRoleMapper.selectListByPlanId" column="id">
             <result column="plan_id" property="planId"/>
@@ -403,7 +404,7 @@
             left join (select id from core_edu_training_plan p1 inner join core_edu_training_plan_to_role r1 on p1.id =
             r1.plan_id where r1.role_id = #{request.planRoleId} and p1.deleted=0) t on p.id = t.id and p.deleted=0
         </if>
-        where p.deleted = 0
+        where p.deleted = 0 and p.create_org_id=p.belong_org_id and p.plan_status = 0 and p.parent_id is null
 
         <if test="request.execOrgType!=null">
             and p.exec_org_type = #{request.execOrgType}

+ 10 - 3
soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingTaskMapper.xml

@@ -83,7 +83,7 @@
         <!--            </if>-->
         <!--        </where>-->
         select t.id, plan_id, t.org_id, t.org_name, title, type, status, host_id,u.name as hostName,
-        start_date, end_date, t.training_start_date_time,t.training_end_date_time
+        start_date, end_date, t.training_start_date_time,t.training_end_date_time, t.pdf_url as pdfUrl
         from core_edu_training_task t left join sys_user u on t.host_id=u.id
         <where>
             <choose>
@@ -126,10 +126,13 @@
                end_date,
                training_start_date_time,
                training_end_date_time,
+               image_list,
                t.host_id,
                t.recorder_id,
-               u.name  as hostName,
-               u2.name as recorderName
+               u.name      as hostName,
+               u2.name     as recorderName,
+               t.pdf_url   as pdfUrl,
+               t.file_list as file
         from core_edu_training_task t
                  left join sys_user u on u.id = t.host_id
                  left join sys_user u2 on u2.id = t.recorder_id
@@ -158,4 +161,8 @@
             </if>
         </where>
     </select>
+
+    <select id="checkHasTask" resultType="java.lang.Integer">
+        select 1 from core_edu_training_task where plan_id = #{planId} limit 1
+    </select>
 </mapper>

+ 23 - 1
soc-modules/soc-modules-core/src/main/resources/mapper/edu/SysLearningMaterialsMapper.xml

@@ -88,7 +88,7 @@
             and m.knowledge_id = #{request.knowledgeId}
         </if>
         <if test="request.title != null ">
-            and m.title = #{request.title}
+            and m.title  like concat('%', #{request.title}, '%')
         </if>
     </sql>
     <select id="selectPageData" resultType="com.xunmei.common.core.domain.edu.vo.SysLearningMaterialsPageVo">
@@ -293,4 +293,26 @@
             #{id}
         </foreach>
     </delete>
+
+    <select id="selectFilePageList" resultType="com.xunmei.common.core.domain.edu.vo.SysLearningMaterialsFileListVo">
+        select id,org_id as orgId,title as title,org_name as orgName,file_list as file
+
+        from sys_learning_materials m
+        where m.deleted = 0
+        and m.is_open = 1
+        and m.file_list is not null
+        <if test="request.title != null and request.title != '' ">
+            and m.title like concat('%', #{request.title}, '%')
+        </if>
+        <if test="request.fileName != null and request.fileName != '' ">
+            and m.file_list like concat('%', #{request.fileName}, '%')
+        </if>
+        <if test="request.orgIdList.size>0">
+            and m.org_id in
+            <foreach collection="request.orgIdList" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        order by m.org_id, m.create_time desc
+    </select>
 </mapper>

+ 9 - 3
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/controller/SysFileController.java

@@ -132,9 +132,15 @@ public class SysFileController {
     void getFileStream(@RequestParam String path, HttpServletResponse response) {
         sysFileService.getFileStream(path, response);
     }
-
-    @GetMapping(value = "/getPathPrefix")
-    String generateEduTrainingPdf() {
+    @ApiOperation(value = "获取本地存储路径前缀")
+    @GetMapping(value = "/getLocalPathPrefix")
+    String getLocalPathPrefix() {
         return this.localFilePath;
     }
+
+    @ApiOperation(value = "获取nginx静态目录前缀")
+    @GetMapping(value = "/getStaticPathPrefix")
+    String getStaticPathPrefix() {
+        return this.prefix;
+    }
 }

+ 3 - 3
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/LocalSysFileServiceImpl.java

@@ -54,8 +54,8 @@ public class LocalSysFileServiceImpl implements ISysFileService {
     @Autowired
     private HttpServletRequest request;
 
-    private static String getLocalFilePath(String localFilePath, String businessType, String fileName) {
-        final String path = localFilePath + File.separator + businessType + File.separator + DateUtil.format(new Date(), "yyyy" + File.separator + "MM" + File.separator + "dd" + File.separator);
+    private static String getLocalFilePath(String prefix, String businessType, String fileName) {
+        final String path = File.separator + businessType + File.separator + DateUtil.format(new Date(), "yyyy" + File.separator + "MM" + File.separator + "dd" + File.separator);
         File desc = new File(path + fileName);
         log.info("当前上传文件地址:{}", desc.getAbsolutePath());
         if (!desc.exists()) {
@@ -186,7 +186,7 @@ public class LocalSysFileServiceImpl implements ISysFileService {
         document.close();
         writer.close();
 
-        return this.getRelativePath(filePath);
+        return filePath;
     }
 
 }

+ 1 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysOrgService.java

@@ -97,7 +97,7 @@ public interface ISysOrgService extends IService<SysOrg> {
     /**
      * 缓存机构数据
       */
-    void loadingOrgCache();
+    List<SysOrg> loadingOrgCache();
 
     /**
      * 清楚机构缓存

+ 9 - 8
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysDeptServiceImpl.java

@@ -109,22 +109,23 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
      */
     @Override
     public List<SysOrg> selectDeptTreeList(SysOrg dept) {
-        Long s= System.currentTimeMillis();
+        Long s = System.currentTimeMillis();
         Long userId = SecurityUtils.getUserId();
         SysOrg sysOrg = orgMapper.selectSysOrgByUserId(userId);
         if (ObjectUtil.isNull(sysOrg)) {
             throw new ServiceException("当前用户没有部门信息");
         }
-        //List<SysOrg> cacheList = redisService.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
+        List<SysOrg> cacheList = null;
         Boolean isOk = RedisUtils.hasKey(CacheConstants.ORG_CACHE_LIST_KEY);
-        if(!isOk){
-            orgService.loadingOrgCache();
+        if (!isOk) {
+            cacheList = orgService.loadingOrgCache();
+        } else {
+            cacheList = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
         }
-        List<SysOrg> cacheList = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
         List<SysOrg> orgs = new ArrayList<>();
         for (SysOrg org : cacheList) {
             String path = org.getPath();
-            if(StringUtils.isNotEmpty(path) && path.startsWith(sysOrg.getPath())){
+            if (StringUtils.isNotEmpty(path) && path.startsWith(sysOrg.getPath())) {
                 orgs.add(org);
             }
         }
@@ -139,8 +140,8 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
         }
         /*List<SysOrg> depts = orgMapper.selectList(wrapper);*/
         final Map<Long, List<SysOrg>> collect = orgs.stream().collect(Collectors.groupingBy(SysOrg::getParentId));
-        List<SysOrg> r= handleTree(collect, parentId);
-        s=System.currentTimeMillis()-s;
+        List<SysOrg> r = handleTree(collect, parentId);
+        s = System.currentTimeMillis() - s;
         return r;
     }
 

+ 2 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgServiceImpl.java

@@ -243,13 +243,14 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
     }
 
     @Override
-    public void loadingOrgCache() {
+    public List<SysOrg> loadingOrgCache() {
         QueryWrapper<SysOrg> qw = new QueryWrapper<>();
         qw.lambda().ge(SysOrg::getDeleted, 0);
         List<SysOrg> list = baseMapper.selectList(qw);
         clearOrgCache();
         RedisUtils.setCacheList(CacheConstants.ORG_CACHE_LIST_KEY, list);
         //redisService.setCacheList(CacheConstants.ORG_CACHE_LIST_KEY, list);
+        return list;
     }
 
     @Override