瀏覽代碼

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

jiawuxian 2 年之前
父節點
當前提交
a93bb55ed0
共有 19 個文件被更改,包括 215 次插入93 次删除
  1. 38 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/vo/SysOrgVO.java
  2. 2 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/edu/vo/CoreEduTrainingTaskPageVo.java
  3. 19 18
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/controller/CoreEduTrainingPlanController.java
  4. 1 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/controller/CoreEduTrainingTaskController.java
  5. 3 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/mapper/CoreEduTrainingPlanMapper.java
  6. 3 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ICoreEduTrainingPlanService.java
  7. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ICoreEduTrainingTaskService.java
  8. 6 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java
  9. 42 20
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java
  10. 9 0
      soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingPlanMapper.xml
  11. 17 16
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/LocalSysFileServiceImpl.java
  12. 3 1
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/PdfUtil.java
  13. 17 0
      soc-modules/soc-modules-file/src/main/java/com/xunmei/file/vo/PdfFilePathVo.java
  14. 12 5
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysOrgMapper.java
  15. 3 1
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysDeptService.java
  16. 6 3
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysOrgService.java
  17. 14 17
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysDeptServiceImpl.java
  18. 5 7
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgServiceImpl.java
  19. 14 0
      soc-modules/soc-modules-system/src/main/resources/mapper/system/SysOrgMapper.xml

+ 38 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/vo/SysOrgVO.java

@@ -0,0 +1,38 @@
+package com.xunmei.system.api.vo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.xunmei.system.api.domain.SysOrg;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author :LuoWei
+ * @date : 2023/9/5
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class SysOrgVO {
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+    private String name;
+    private String path;
+    public Long parentId;
+    private List<SysOrgVO> children = new ArrayList<SysOrgVO>();
+
+    @Override
+    public String toString() {
+        return "SysOrgVO{" +
+                "id=" + id +
+                ", name='" + name + '\'' +
+                ", path='" + path + '\'' +
+                ", parentId=" + parentId +
+                ", children=" + children +
+                '}';
+    }
+}

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

@@ -3,6 +3,7 @@ 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 com.xunmei.common.core.domain.edu.domain.CoreEduTrainingTaskToUser;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -75,6 +76,7 @@ public class CoreEduTrainingTaskPageVo {
     private String taskRoleNameList;
 
     private List<CoreEduTrainingTaskToRole> taskRoleList;
+    private List<CoreEduTrainingTaskToUser> userList;
 
     @ApiModelProperty(value = "pdf下载地址")
     private String pdfUrl;

+ 19 - 18
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/controller/CoreEduTrainingPlanController.java

@@ -1,28 +1,23 @@
 package com.xunmei.core.edu.controller;
 
-import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlan;
+import com.xunmei.common.core.domain.IdName;
 import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingPlanEditDto;
 import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingPlanInsertDto;
 import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingPlanPageDto;
-import com.xunmei.core.edu.service.ICoreEduTrainingPlanService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.xunmei.common.core.web.controller.BaseController;
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.log.annotation.Log;
 import com.xunmei.common.log.enums.BusinessType;
 import com.xunmei.common.security.annotation.RequiresPermissions;
-import com.xunmei.common.core.web.controller.BaseController;
-import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.core.edu.service.ICoreEduTrainingPlanService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import com.xunmei.common.core.web.page.TableDataInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 教育培训计划Controller
@@ -101,9 +96,6 @@ public class CoreEduTrainingPlanController extends BaseController {
         return success(coreEduTrainingPlanService.listPlanRole(orgId));
     }
 
-    /**
-     * 计划下发
-     */
     @ApiOperation(value = "计划下发")
     @RequiresPermissions("core:plan:publish")
     @GetMapping("/publish/{planId}")
@@ -111,4 +103,13 @@ public class CoreEduTrainingPlanController extends BaseController {
         coreEduTrainingPlanService.publishPlan(planId);
         return AjaxResult.success();
     }
+
+
+    @ApiOperation(value = "计划下拉框")
+    @RequiresPermissions("core:plan:list")
+    @GetMapping("/planList/{orgId}")
+    public AjaxResult planList(@PathVariable("orgId") Long orgId) {
+        List<IdName<Long, String>> planList = coreEduTrainingPlanService.planList(orgId);
+        return AjaxResult.success(planList);
+    }
 }

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

@@ -91,10 +91,9 @@ public class CoreEduTrainingTaskController extends BaseController {
 
     @ApiOperation(value = "教育培训签名")
     @RequiresPermissions("core:eduTask:sign")
-    @Log(title = "教育任务签名", businessType = BusinessType.DELETE)
     @PostMapping("sign")
     public AjaxResult sign(@RequestBody @Validated CoreEduTrainingTaskSignDto request) {
-        return success(coreEduTrainingTaskService.selectCoreEduTrainingTaskSign(request));
+        return success(coreEduTrainingTaskService.sign(request));
     }
 
     @ApiOperation(value = "生成教育培训登记簿")

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/mapper/CoreEduTrainingPlanMapper.java

@@ -2,6 +2,7 @@ package com.xunmei.core.edu.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xunmei.common.core.domain.IdName;
 import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlan;
 import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingPlanPageDto;
 import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanDataVo;
@@ -71,4 +72,6 @@ public interface CoreEduTrainingPlanMapper extends BaseMapper<CoreEduTrainingPla
     List<CoreEduTrainingPlanRoleVo> selectPlanRole(@Param("orgId") Long orgId);
 
     CoreEduTrainingPlanDataVo getDetailPlanData(@Param("id") Long id);
+
+    List<IdName<Long, String>> planList(@Param("path") String path);
 }

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

@@ -1,6 +1,7 @@
 package com.xunmei.core.edu.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.IdName;
 import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlan;
 import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingPlanEditDto;
 import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingPlanInsertDto;
@@ -89,4 +90,6 @@ public interface ICoreEduTrainingPlanService extends IService<CoreEduTrainingPla
      * @return Page
      */
     List<SysOrg> getExecuteOrg(CoreEduTrainingPlan plan);
+
+    List<IdName<Long, String>> planList(Long orgId);
 }

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

@@ -86,7 +86,7 @@ public interface ICoreEduTrainingTaskService extends IService<CoreEduTrainingTas
 
     List<CoreEduTrainingTaskReportVo> selectCoreEduTrainingTaskReport(CoreEduTrainingTaskReportDto request);
 
-    Integer selectCoreEduTrainingTaskSign(CoreEduTrainingTaskSignDto request);
+    Integer sign(CoreEduTrainingTaskSignDto request);
 
     AjaxResult buildEduPdf(Long id);
 

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

@@ -3,7 +3,6 @@ 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;
@@ -12,6 +11,7 @@ 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.IdName;
 import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlan;
 import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlanToExecOrg;
 import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlanToRole;
@@ -47,7 +47,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.Assert;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -418,4 +417,9 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
 
     }
 
+    @Override
+    public List<IdName<Long, String>> planList(Long orgId) {
+        SysOrg org = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectOrgById(orgId, SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
+        return coreEduTrainingPlanMapper.planList(org.getPath());
+    }
 }

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

@@ -114,9 +114,8 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
                     .in(CoreEduTrainingTaskToRole::getEduTrainingTaskId, idList));
             Map<Long, List<CoreEduTrainingTaskToRole>> listMap = roleList.stream().collect(Collectors.groupingBy(CoreEduTrainingTaskToRole::getEduTrainingTaskId));
             final List<CoreEduTrainingTaskPageVo> records = pageData.getRecords();
-            final String staticPathPrefix = getStaticPathPrefix();
             for (CoreEduTrainingTaskPageVo record : records) {
-                dealData(record, records, listMap, staticPathPrefix);
+                dealData(record, records, listMap);
             }
         }
         //抓换为TableDataInfo适配前端
@@ -127,10 +126,11 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         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) {
+    private void dealData(CoreEduTrainingTaskPageVo record, List<CoreEduTrainingTaskPageVo> records, Map<Long, List<CoreEduTrainingTaskToRole>> listMap) {
         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;
@@ -139,11 +139,11 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         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());
-        }
+        int signNums = (int) userList.stream().filter(user -> user.getSign() == 1 && ObjectUtil.equal(user.getType(), 1)).count();
+        int totalNums = (int) userList.stream().filter(user -> ObjectUtil.equal(user.getType(), 1)).count();
+        record.setSignNums(signNums + "/" + totalNums);
+        record.setUserList(userList);
+
     }
 
     @Override
@@ -162,15 +162,13 @@ 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));
+        detailVo.setTypeText(EduTrainingType.getName(detailVo.getType()));
         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;
     }
 
@@ -213,10 +211,12 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         coreEduTrainingTask.setContent(request.getContent());
         coreEduTrainingTask.setNote(request.getNote());
         coreEduTrainingTask.setRecorderId(SecurityUtils.getUserId());
+        coreEduTrainingTask.setImageList(request.getImageList());
         //主持人默认取网点负责人,具体还没落实,暂时处理成这样   TODO
         coreEduTrainingTask.setHostId(SecurityUtils.getUserId());
         List<CoreEduTrainingTaskToUser> taskUserList = request.getTaskUserList();
         if (ObjectUtil.isNotEmpty(taskUserList)) {
+            checkTheSameUser(taskUserList);
             for (CoreEduTrainingTaskToUser taskToUser : taskUserList) {
                 taskToUser.setEduTrainingTaskId(request.getId());
                 taskToUser.setSign(0);
@@ -226,13 +226,6 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         if (ObjectUtil.equal(request.getSubmitType(), 2)) {
             coreEduTrainingTask.setStatus(EduTrainingDoStatus.WAIT_SIGN.getCode());
         }
-        //判断是否已全部完成签名,如果是将任务修改成已完成
-        Long unSignNums = taskToUserMapper.selectCount(new LambdaQueryWrapper<CoreEduTrainingTaskToUser>()
-                .eq(CoreEduTrainingTaskToUser::getEduTrainingTaskId, request.getId())
-                .eq(CoreEduTrainingTaskToUser::getSign, 0));
-        if (null == unSignNums || unSignNums == 0) {
-            coreEduTrainingTask.setStatus(EduTrainingDoStatus.DONE.getCode());
-        }
 
         coreEduTrainingTask.setUpdateBy(SecurityUtils.getLoginUser().getSysUser().getId().toString());
         coreEduTrainingTask.setUpdateTime(DateUtils.getNowDate());
@@ -240,6 +233,19 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
         return coreEduTrainingTaskMapper.updateById(coreEduTrainingTask);
     }
 
+    private void checkTheSameUser(List<CoreEduTrainingTaskToUser> taskUserList) {
+        Map<Integer, List<CoreEduTrainingTaskToUser>> listMap = taskUserList.stream().collect(Collectors.groupingBy(CoreEduTrainingTaskToUser::getType));
+        List<CoreEduTrainingTaskToUser> userList = listMap.get(1);
+        List<CoreEduTrainingTaskToUser> loseUserList = listMap.get(2);
+        if (ObjectUtil.isAllNotEmpty(userList, loseUserList)) {
+            List<Long> collect1 = userList.stream().map(CoreEduTrainingTaskToUser::getUserId).collect(Collectors.toList());
+            List<Long> collect2 = loseUserList.stream().map(CoreEduTrainingTaskToUser::getUserId).collect(Collectors.toList());
+            if (!Collections.disjoint(collect1, collect2)) {
+                throw new SystemException("参与用户与缺席用户存在相同用户!");
+            }
+        }
+    }
+
     /**
      * 批量删除教育任务
      *
@@ -379,7 +385,8 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
     }
 
     @Override
-    public Integer selectCoreEduTrainingTaskSign(CoreEduTrainingTaskSignDto request) {
+    public Integer sign(CoreEduTrainingTaskSignDto request) {
+        CoreEduTrainingTask eduTrainingTask = getById(request.getId());
         SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
         CoreEduTrainingTaskToUser taskToUser = taskToUserMapper.selectOne(new LambdaQueryWrapper<CoreEduTrainingTaskToUser>()
                 .eq(CoreEduTrainingTaskToUser::getEduTrainingTaskId, request.getId())
@@ -389,18 +396,33 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
             throw new SystemException("未获取到当前用户于该教育培训的详细信息");
         }
         taskToUser.setSign(1);
+        dealImageUrl(request.getSignImage());
         taskToUser.setSignImage(request.getSignImage());
         final int sign = taskToUserMapper.updateSign(taskToUser);
+        //判断是否已全部完成签名,如果是将任务修改成已完成
+        Long unSignNums = taskToUserMapper.selectCount(new LambdaQueryWrapper<CoreEduTrainingTaskToUser>()
+                .eq(CoreEduTrainingTaskToUser::getEduTrainingTaskId, request.getId())
+                .eq(CoreEduTrainingTaskToUser::getType, 1)
+                .eq(CoreEduTrainingTaskToUser::getSign, 0));
+        if (null == unSignNums || unSignNums == 0) {
+            eduTrainingTask.setStatus(EduTrainingDoStatus.DONE.getCode());
+            coreEduTrainingTaskMapper.updateById(eduTrainingTask);
+        }
         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();
+        final long count = taskToUserList.stream().filter(user -> ObjectUtil.equal(user.getType(), 1) && ObjectUtil.equal(user.getSign(), 0)).count();
         if (ObjectUtil.isNotEmpty(taskToUserList) && count < 1) {
             buildEduPdf(request.getId());
         }
         return sign;
     }
 
+    private void dealImageUrl(String signImage) {
+
+
+    }
+
     @Override
     public AjaxResult buildEduPdf(Long id) {
         CoreEduTrainingTaskDetailVo task = this.selectCoreEduTrainingTaskById(id);

+ 9 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/edu/CoreEduTrainingPlanMapper.xml

@@ -445,4 +445,13 @@
         where p.deleted = 0
           and p.id = #{id}
     </select>
+
+    <select id="planList" resultType="com.xunmei.common.core.domain.IdName">
+        select id as id, plan_name as name
+        from core_edu_training_plan p
+        where p.deleted = 0
+          and p.plan_status = 0
+          and p.standard = 0
+          and p.belong_org_path like concat(#{path}, '%')
+    </select>
 </mapper>

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

@@ -12,6 +12,7 @@ import com.xunmei.file.utils.FileDownUtils;
 import com.xunmei.file.utils.FileUploadUtils;
 import com.xunmei.file.utils.PdfUtil;
 import com.xunmei.file.vo.ItextPdfTableVo;
+import com.xunmei.file.vo.PdfFilePathVo;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -51,20 +52,22 @@ public class LocalSysFileServiceImpl implements ISysFileService {
     @Value("${file.path}")
     private String localFilePath;
 
+    @Value("${file.prefix}")
+    public String prefix;
+
     @Autowired
     private HttpServletRequest request;
 
-    private static String getLocalFilePath(String prefix, String businessType, String fileName) {
+    private static PdfFilePathVo getLocalFilePath(String localFilePath, 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()) {
-            if (!desc.getParentFile().exists()) {
-                log.info("创建文件夹:{}", desc.getParentFile());
-                desc.getParentFile().mkdirs();
-            }
+        final File file = new File(localFilePath + path);
+        if (!file.exists()) {
+            file.mkdirs();
         }
-        return desc.getPath();
+        PdfFilePathVo pathVo = new PdfFilePathVo();
+        pathVo.setAbsolutePath(localFilePath + path + fileName);
+        pathVo.setRelativePath(path + fileName);
+        return pathVo;
     }
 
     /**
@@ -171,22 +174,20 @@ public class LocalSysFileServiceImpl implements ISysFileService {
 
     @Override
     public String generateEduTrainingPdf(Map<String, Object> data) throws Exception {
-        String filePath = getLocalFilePath(this.localFilePath, "edu", data.get("fileName").toString());
-        final ItextPdfTableVo pdfTableVo = PdfUtil.createTable(filePath, 6, 10);
+        PdfFilePathVo pathVo = getLocalFilePath(localFilePath, "edu", data.get("fileName").toString());
+        log.info("生成教育培训登记簿,当前绝对地址为:{}", pathVo.getAbsolutePath());
+        final ItextPdfTableVo pdfTableVo = PdfUtil.createTable(pathVo.getAbsolutePath(), 6, 10);
         final Document document = pdfTableVo.getDocument();
         final PdfWriter writer = pdfTableVo.getWriter();
         final PdfPTable table = pdfTableVo.getTable();
         final BaseFont fs = pdfTableVo.getFs();
         final Font tableFont = pdfTableVo.getTableFont();
-
         PdfUtil.dealHeader(document, fs, "学 习 教 育 记 录", 24);
-
         PdfUtil.dealEduBody(document, table, tableFont, data);
-
         document.close();
         writer.close();
-
-        return filePath;
+        //此处返回  /statics/edu/xxx.pdf
+        return this.prefix + pathVo.getRelativePath();
     }
 
 }

+ 3 - 1
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/utils/PdfUtil.java

@@ -5,6 +5,7 @@ import cn.hutool.extra.spring.SpringUtil;
 import com.lowagie.text.*;
 import com.lowagie.text.pdf.*;
 import com.xunmei.file.vo.ItextPdfTableVo;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.ApplicationContext;
 import org.springframework.core.io.Resource;
 
@@ -15,7 +16,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-
+@Slf4j
 public class PdfUtil {
 
 
@@ -30,6 +31,7 @@ public class PdfUtil {
     public static ItextPdfTableVo createTable(String filename, int numColumns, int fontSize) throws Exception {
         Document document = new Document(PageSize.A4, 0, 0, 50, 0);//SUPPRESS
         FileOutputStream fos = new FileOutputStream(filename);
+        log.info("filename,{}",filename);
         final PdfWriter writer = PdfWriter.getInstance(document, fos);
         document.open();
         // 使用语言包字

+ 17 - 0
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/vo/PdfFilePathVo.java

@@ -0,0 +1,17 @@
+package com.xunmei.file.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author jingyuanchao
+ * @date 2023/9/5 12:55
+ */
+@Data
+public class PdfFilePathVo {
+
+    @ApiModelProperty(value = "绝对地址")
+    private String absolutePath;
+    @ApiModelProperty(value = "相对地址")
+    private String relativePath;
+}

+ 12 - 5
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysOrgMapper.java

@@ -3,6 +3,7 @@ package com.xunmei.system.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.xunmei.common.core.vo.IdNameVo;
 import com.xunmei.system.api.domain.SysOrg;
+import com.xunmei.system.api.vo.SysOrgVO;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.web.bind.annotation.PathVariable;
 
@@ -21,7 +22,7 @@ public interface SysOrgMapper extends BaseMapper<SysOrg> {
      * @param id 【请填写功能名称】主键
      * @return 【请填写功能名称】
      */
-     SysOrg selectSysOrgById(Long id);
+    SysOrg selectSysOrgById(Long id);
 
     /**
      * 查询【请填写功能名称】列表
@@ -29,7 +30,7 @@ public interface SysOrgMapper extends BaseMapper<SysOrg> {
      * @param sysOrg 【请填写功能名称】
      * @return 【请填写功能名称】集合
      */
-     List<SysOrg> selectSysOrgList(SysOrg sysOrg);
+    List<SysOrg> selectSysOrgList(SysOrg sysOrg);
 
     /**
      * 新增【请填写功能名称】
@@ -37,7 +38,8 @@ public interface SysOrgMapper extends BaseMapper<SysOrg> {
      * @param sysOrg 【请填写功能名称】
      * @return 结果
      */
-     int insertSysOrg(SysOrg sysOrg);
+    int insertSysOrg(SysOrg sysOrg);
+
     List<Long> selectCheckSubOrgIdList(@Param("orgId") Long orgId);
 
     /**
@@ -46,7 +48,7 @@ public interface SysOrgMapper extends BaseMapper<SysOrg> {
      * @param sysOrg 【请填写功能名称】
      * @return 结果
      */
-     int updateSysOrg(SysOrg sysOrg);
+    int updateSysOrg(SysOrg sysOrg);
 
     /**
      * 删除【请填写功能名称】
@@ -54,7 +56,7 @@ public interface SysOrgMapper extends BaseMapper<SysOrg> {
      * @param id 【请填写功能名称】主键
      * @return 结果
      */
-     int deleteSysOrgById(Long id);
+    int deleteSysOrgById(Long id);
 
     /**
      * 批量删除【请填写功能名称】
@@ -68,8 +70,13 @@ public interface SysOrgMapper extends BaseMapper<SysOrg> {
 
     SysOrg selectSysOrgByUserId(@Param("userId") Long userId);
 
+    SysOrgVO selectSysOrgVoByUserId(@Param("userId") Long userId);
+
+    List<SysOrgVO> selectSysOrgVOList();
+
     /**
      * 获取机构及父级机构的名称
+     *
      * @param ids
      * @return
      */

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

@@ -3,6 +3,7 @@ package com.xunmei.system.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.system.api.domain.SysDept;
 import com.xunmei.system.api.domain.SysOrg;
+import com.xunmei.system.api.vo.SysOrgVO;
 import com.xunmei.system.domain.vo.TreeSelect;
 
 import java.util.List;
@@ -28,10 +29,11 @@ public interface ISysDeptService extends IService<SysDept> {
      * @param dept 部门信息
      * @return 部门树信息集合
      */
-    List<SysOrg> selectDeptTreeList(SysOrg dept);
+    List<SysOrgVO> selectDeptTreeList(SysOrg dept);
 
     /**
      * 部门管理
+     *
      * @param dept
      * @return
      */

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

@@ -3,6 +3,7 @@ package com.xunmei.system.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.system.api.domain.SysOrg;
+import com.xunmei.system.api.vo.SysOrgVO;
 
 import java.util.List;
 
@@ -35,7 +36,7 @@ public interface ISysOrgService extends IService<SysOrg> {
      */
     List<SysOrg> selectSysOrgList(SysOrg sysOrg);
 
-    void  batchSaveOrUpdate(List<SysOrg> orgList);
+    void batchSaveOrUpdate(List<SysOrg> orgList);
 
     /**
      * 新增【机构管理】
@@ -96,8 +97,8 @@ public interface ISysOrgService extends IService<SysOrg> {
 
     /**
      * 缓存机构数据
-      */
-    List<SysOrg> loadingOrgCache();
+     */
+    List<SysOrgVO> loadingOrgCache();
 
     /**
      * 清楚机构缓存
@@ -106,6 +107,7 @@ public interface ISysOrgService extends IService<SysOrg> {
 
     /**
      * 保存或者更新机构
+     *
      * @param org
      * @return
      */
@@ -113,6 +115,7 @@ public interface ISysOrgService extends IService<SysOrg> {
 
     /**
      * 删除机构
+     *
      * @param orgId
      * @return
      */

+ 14 - 17
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysDeptServiceImpl.java

@@ -1,6 +1,7 @@
 package com.xunmei.system.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.nacos.common.utils.CollectionUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -18,6 +19,7 @@ import com.xunmei.system.api.domain.SysDept;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.SysRole;
 import com.xunmei.system.api.domain.SysUser;
+import com.xunmei.system.api.vo.SysOrgVO;
 import com.xunmei.system.domain.vo.TreeSelect;
 import com.xunmei.system.mapper.SysDeptMapper;
 import com.xunmei.system.mapper.SysOrgMapper;
@@ -81,12 +83,14 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
         return trees;
     }
 
-    public static List<SysOrg> handleTree(Map<Long, List<SysOrg>> map, Long parentId) {
-        final List<SysOrg> orgList = map.get(parentId);
+    public static List<SysOrgVO> handleTree(Map<Long, List<SysOrgVO>> map, Long parentId) {
+        final List<SysOrgVO> orgList = map.get(parentId);
         if (ObjectUtil.isNotEmpty(orgList)) {
             orgList.forEach(org -> {
-                final List<SysOrg> tree = handleTree(map, org.getId());
-                org.setChildren(tree);
+                final List<SysOrgVO> tree = handleTree(map, org.getId());
+                if (CollectionUtils.isNotEmpty(tree)) {
+                    org.setChildren(tree);
+                }
             });
         }
         return orgList;
@@ -108,40 +112,33 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
      * @return 部门树信息集合
      */
     @Override
-    public List<SysOrg> selectDeptTreeList(SysOrg dept) {
+    public List<SysOrgVO> selectDeptTreeList(SysOrg dept) {
         Long s = System.currentTimeMillis();
         Long userId = SecurityUtils.getUserId();
         SysOrg sysOrg = orgMapper.selectSysOrgByUserId(userId);
         if (ObjectUtil.isNull(sysOrg)) {
             throw new ServiceException("当前用户没有部门信息");
         }
-        List<SysOrg> cacheList = null;
+        List<SysOrgVO> cacheList = null;
         Boolean isOk = RedisUtils.hasKey(CacheConstants.ORG_CACHE_LIST_KEY);
         if (!isOk) {
             cacheList = orgService.loadingOrgCache();
         } else {
             cacheList = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
         }
-        List<SysOrg> orgs = new ArrayList<>();
-        for (SysOrg org : cacheList) {
+        List<SysOrgVO> orgs = new ArrayList<>();
+        for (SysOrgVO org : cacheList) {
             String path = org.getPath();
             if (StringUtils.isNotEmpty(path) && path.startsWith(sysOrg.getPath())) {
                 orgs.add(org);
             }
         }
-
-        /*final LambdaQueryWrapper<SysOrg> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(SysOrg::getDeleted, 0);
-        wrapper.isNotNull(SysOrg::getParentId);*/
         Long parentId = Constants.TOP_ORG_PARENT_ID;
         if (ObjectUtil.notEqual(Constants.TOP_ORG_PARENT_ID, sysOrg.getParentId())) {
             parentId = sysOrg.getParentId();
-            //wrapper.likeRight(SysOrg::getPath, sysOrg.getPath());
         }
-        /*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;
+        final Map<Long, List<SysOrgVO>> collect = orgs.stream().collect(Collectors.groupingBy(SysOrgVO::getParentId));
+        List<SysOrgVO> r = handleTree(collect, parentId);
         return r;
     }
 

+ 5 - 7
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgServiceImpl.java

@@ -15,6 +15,7 @@ import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.system.api.domain.SysOrg;
+import com.xunmei.system.api.vo.SysOrgVO;
 import com.xunmei.system.mapper.SysOrgMapper;
 import com.xunmei.system.mapper.SysUserMapper;
 import com.xunmei.system.service.ISysOrgService;
@@ -242,14 +243,11 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
     }
 
     @Override
-    public List<SysOrg> loadingOrgCache() {
-        QueryWrapper<SysOrg> qw = new QueryWrapper<>();
-        qw.lambda().ge(SysOrg::getDeleted, 0);
-        List<SysOrg> list = baseMapper.selectList(qw);
+    public List<SysOrgVO> loadingOrgCache() {
+        List<SysOrgVO> sysOrgVOS = baseMapper.selectSysOrgVOList();
         clearOrgCache();
-        RedisUtils.setCacheList(CacheConstants.ORG_CACHE_LIST_KEY, list);
-        //redisService.setCacheList(CacheConstants.ORG_CACHE_LIST_KEY, list);
-        return list;
+        RedisUtils.setCacheList(CacheConstants.ORG_CACHE_LIST_KEY, sysOrgVOS);
+        return sysOrgVOS;
     }
 
     @Override

+ 14 - 0
soc-modules/soc-modules-system/src/main/resources/mapper/system/SysOrgMapper.xml

@@ -588,4 +588,18 @@
         </foreach>
         and so.deleted=0
     </select>
+    <select id="selectSysOrgVoByUserId" resultType="com.xunmei.system.api.vo.SysOrgVO">
+        select so.id as id, so.name as name, so.path as path, so.parent_id as parentId
+        from sys_org so
+                 inner join sys_user suo on so.id = suo.org_id
+        where suo.id = #{userId}
+    </select>
+    <select id="selectSysOrgVOList" resultType="com.xunmei.system.api.vo.SysOrgVO">
+        SELECT id,
+               `name`,
+               path,
+               parent_id
+        FROM sys_org
+        WHERE deleted = 0
+    </select>
 </mapper>