瀏覽代碼

资料库模块

huangguoce 6 月之前
父節點
當前提交
fa2f41c138
共有 17 個文件被更改,包括 836 次插入5 次删除
  1. 1 1
      jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/domain/User.java
  2. 14 4
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/controller/OssFileController.java
  3. 43 0
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/service/OSSClientService.java
  4. 12 0
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/service/dto/DownToOssDTO.java
  5. 117 0
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/workCollectAccessory/controller/WorkCollectAccessoryController.java
  6. 71 0
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/workCollectAccessory/domain/WorkCollectAccessory.java
  7. 37 0
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/workCollectAccessory/mapper/WorkCollectAccessoryMapper.java
  8. 99 0
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/workCollectAccessory/mapper/xml/WorkCollectAccessoryMapper.xml
  9. 340 0
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/workCollectAccessory/service/WorkCollectAccessoryService.java
  10. 25 0
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/workCollectAccessory/service/dto/DictValueDTO.java
  11. 34 0
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/workCollectAccessory/service/dto/WorkCollectAccessoryDTO.java
  12. 12 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/controller/DictController.java
  13. 6 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/DictValueMapper.java
  14. 10 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/xml/DictValueMapper.xml
  15. 1 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/service/DictTypeService.java
  16. 9 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/service/DictValueService.java
  17. 5 0
      jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/service/mapstruct/DictTypeWrapper.java

+ 1 - 1
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/sys/domain/User.java

@@ -1,5 +1,5 @@
 /**
- * Copyright &copy; 2021-2026 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ * right &copy; 2021-2026 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
  */
 package com.jeeplus.sys.domain;
 

+ 14 - 4
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/controller/OssFileController.java

@@ -12,10 +12,7 @@ import com.jeeplus.logging.annotation.ApiLog;
 import com.jeeplus.pubmodules.oss.domain.WorkAttachment;
 import com.jeeplus.pubmodules.oss.service.OSSClientService;
 import com.jeeplus.pubmodules.oss.service.OssService;
-import com.jeeplus.pubmodules.oss.service.dto.AttachmentDTO;
-import com.jeeplus.pubmodules.oss.service.dto.FileDetailDTO;
-import com.jeeplus.pubmodules.oss.service.dto.FileUrlDto;
-import com.jeeplus.pubmodules.oss.service.dto.WorkAttachmentDto;
+import com.jeeplus.pubmodules.oss.service.dto.*;
 import com.jeeplus.pubmodules.oss.utils.FileUtil;
 import com.jeeplus.pubmodules.serialNumTpl.service.SerialnumTplService;
 import com.jeeplus.sys.domain.WorkAttachmentInfo;
@@ -690,4 +687,17 @@ public class OssFileController {
         return data;
     }
 
+
+    /**
+     * 用户选择资料库文件重新上传
+     */
+    @ApiOperation("用户选择资料库文件重新上传")
+    @PostMapping("/downloadAndUploadToOSS")
+    public String downloadAndUploadToOSS(@RequestBody DownToOssDTO downToOssDTO){
+        String  filePath = ossClientService.downloadAndUploadToOSS(downToOssDTO.getUrl(),downToOssDTO.getFileName(),downToOssDTO.getDir());
+        return filePath;
+    }
+
+
+
 }

+ 43 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/service/OSSClientService.java

@@ -17,6 +17,7 @@ import org.springframework.web.multipart.MultipartFile;
 import org.springframework.mock.web.MockMultipartFile;
 
 import java.io.*;
+import java.net.HttpURLConnection;
 import java.net.URL;
 import java.util.Calendar;
 import java.util.Date;
@@ -46,6 +47,9 @@ public class OSSClientService {
     @Value("${config.accessory.aliyun.accessKeySecret}")
     private String accessKeySecret;
 
+    private static final String DIRECTORY = "/attachment-file";
+
+    private static final String ALIYUNURL = "http://oss.gangwaninfo.com";
     /**
      * 上传到OSS服务器  如果同名文件会覆盖服务器上的
      *
@@ -376,4 +380,43 @@ public class OSSClientService {
         String path = "/"+year+"/"+month+"/"+day;
         return path;
     }
+
+    // 文件下载和上传方法
+    public String downloadAndUploadToOSS(String fileUrl,String fileName,String dir) {
+        // 创建OSS客户端
+        OSSClient ossClient = new OSSClient(endpoint,accessKeyId,accessKeySecret);
+
+        InputStream inputStream = null;
+        try {
+            // Step 1: 下载文件
+            inputStream = downloadFile(fileUrl);
+            String realPath =DIRECTORY.replaceFirst("/","")+"/"+ dir +datePath()+"/"+ System.currentTimeMillis();
+            String ret = uploadFile2OSS(inputStream,realPath,fileName);
+            // Step 2: 上传到OSS
+            return "/"+realPath+fileName;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        } finally {
+            // 关闭资源
+            try {
+                if (inputStream != null) inputStream.close();
+            } catch (IOException ignored) {}
+            ossClient.shutdown();
+        }
+    }
+    public static InputStream downloadFile(String fileUrl) throws Exception {
+        URL url = new URL(fileUrl);
+        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+        connection.setRequestMethod("GET");
+        connection.setConnectTimeout(5000);
+        connection.setReadTimeout(5000);
+
+        if (connection.getResponseCode() == 200) {
+            return connection.getInputStream();
+        } else {
+            throw new RuntimeException("Failed to download file, response code: " + connection.getResponseCode());
+        }
+    }
+
 }

+ 12 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/service/dto/DownToOssDTO.java

@@ -0,0 +1,12 @@
+package com.jeeplus.pubmodules.oss.service.dto;
+
+import lombok.Data;
+
+@Data
+public class DownToOssDTO {
+
+    private String url;
+    private String dir;
+    private String fileName;
+
+}

+ 117 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/workCollectAccessory/controller/WorkCollectAccessoryController.java

@@ -0,0 +1,117 @@
+package com.jeeplus.pubmodules.workCollectAccessory.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.common.utils.ResponseUtil;
+import com.jeeplus.pubmodules.meetingRoom.domain.MeetingRoom;
+import com.jeeplus.pubmodules.meetingRoom.service.MeetingRoomService;
+import com.jeeplus.pubmodules.meetingRoom.service.dto.MeetingRoomDTO;
+import com.jeeplus.pubmodules.workCollectAccessory.domain.WorkCollectAccessory;
+import com.jeeplus.pubmodules.workCollectAccessory.service.WorkCollectAccessoryService;
+import com.jeeplus.pubmodules.workCollectAccessory.service.dto.WorkCollectAccessoryDTO;
+import com.jeeplus.sys.service.dto.UserDTO;
+import com.jeeplus.sys.utils.UserUtils;
+import com.sun.corba.se.spi.orbutil.threadpool.Work;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.ParseException;
+
+/**
+ * @Author hgc
+ * @Date 2024/12/16/16:20
+ * @ClassName WorkCollectAccessoryController
+ * @Description
+ */
+@Slf4j
+@Api(tags ="资料库管理")
+@RestController
+@RequestMapping(value = "/workCollectAccessory")
+public class WorkCollectAccessoryController {
+
+    @Autowired
+    private WorkCollectAccessoryService workCollectAccessoryService;
+
+    /**
+     * 附件列表
+     */
+    @ApiOperation(value = "附件列表")
+    @GetMapping(value = "/list")
+    public ResponseEntity<IPage<WorkCollectAccessory>> findPageList(WorkCollectAccessory workCollectAccessory, Page<WorkCollectAccessory> page) throws Exception {
+        IPage<WorkCollectAccessory> iPage= workCollectAccessoryService.findPageList(workCollectAccessory,page);
+        return ResponseEntity.ok(iPage);
+    }
+
+    /**
+     * 收藏附件
+     */
+    @ApiOperation(value = "收藏附件")
+    @PostMapping(value = "/collection")
+    public ResponseEntity collectionAttachment(@RequestBody WorkCollectAccessoryDTO workCollectAccessoryDTO) throws ParseException {
+        String attachmentId = workCollectAccessoryDTO.getAttachmentId();
+        UserDTO userDto = UserUtils.getCurrentUserDTO();
+        workCollectAccessoryService.collectionAttachment(userDto.getId(),attachmentId);
+        return ResponseEntity.ok("操作成功");
+    }
+
+    /**
+     * 共享附件
+     */
+    @ApiOperation(value = "共享附件")
+    @PostMapping(value = "/share")
+    public ResponseEntity shareAttachment(@RequestBody WorkCollectAccessoryDTO workCollectAccessoryDTO) throws ParseException {
+        String attachmentId = workCollectAccessoryDTO.getAttachmentId();
+        String shareType = workCollectAccessoryDTO.getShareType();
+        String componyId = workCollectAccessoryDTO.getCompanyId();
+        UserDTO userDto = UserUtils.getCurrentUserDTO();
+        workCollectAccessoryService.shareAttachment(userDto.getId(),attachmentId,shareType,componyId);
+        return ResponseEntity.ok("操作成功");
+    }
+
+
+    /**
+     * 上传资料库
+     */
+    @ApiOperation(value = "上传资料库")
+    @PostMapping(value = "/saveForm")
+    public ResponseEntity saveForm(@RequestBody WorkCollectAccessoryDTO workCollectAccessoryDTO) throws ParseException {
+        workCollectAccessoryService.saveForm(workCollectAccessoryDTO);
+        return ResponseEntity.ok("操作成功");
+    }
+
+
+    /**
+     * 更新资料库
+     */
+    @ApiOperation(value = "更新资料库")
+    @PostMapping(value = "/updateById")
+    public ResponseEntity updateById(@RequestBody WorkCollectAccessory workCollectAccessory) throws ParseException {
+        workCollectAccessoryService.updateById(workCollectAccessory);
+        return ResponseEntity.ok("操作成功");
+    }
+
+    /**
+     * 根据id查询
+     */
+    @ApiOperation(value = "根据id查询")
+    @GetMapping(value = "/queryById")
+    public ResponseEntity queryById( @RequestParam("id")String id) throws ParseException {
+        WorkCollectAccessory workCollectAccessory = workCollectAccessoryService.queryById(id);
+        return ResponseEntity.ok(workCollectAccessory);
+    }
+
+    /**
+     * 删除附件
+     */
+    @ApiOperation(value = "删除附件")
+    @PostMapping(value = "/del")
+    public ResponseEntity delAttachment(@RequestBody WorkCollectAccessoryDTO workCollectAccessoryDTO) throws ParseException {
+        workCollectAccessoryService.delAttachment(workCollectAccessoryDTO.getAttachmentId());
+        return ResponseEntity.ok("操作成功");
+    }
+}

+ 71 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/workCollectAccessory/domain/WorkCollectAccessory.java

@@ -0,0 +1,71 @@
+package com.jeeplus.pubmodules.workCollectAccessory.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.BaseEntity;
+import com.jeeplus.sys.domain.WorkAttachmentInfo;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("work_collect_accessory")
+public class WorkCollectAccessory extends BaseEntity {
+    /** 主键 */
+    private String id;
+
+
+    /** 备注信息 */
+    private String remarks;
+
+    /** 文件地址 */
+    private String url;
+
+    /** 文件名称 */
+    private String fileName;
+
+    /** 收藏类型(1:个人上传;2:部门共享;3:公司共享) */
+    private String type;
+
+    /** 部门id */
+    private String officeId;
+
+    /** 公司id */
+    private String companyId;
+
+    /** 是否收藏(1:收藏;0:未收藏) */
+    private String collectType;
+
+    /** 上传人 */
+    private String collectUserId;
+
+    /** 文件大小 */
+    private String fileSize;
+
+    /** 收藏分类 */
+    private String classification;
+
+    /** 文件描述 */
+    private String fileDescription;
+
+    /** 是否部门共享(0:否;1:是) */
+    private String officeShare;
+
+    /** 是否公司共享(0:否;1:是) */
+    private String companyShare;
+
+    @TableField(exist = false)
+    private String userName;
+
+    @TableField(exist = false)
+    private String collectUserName;
+
+    @TableField(exist = false)
+    private List<WorkAttachmentInfo> workAttachments;
+}

+ 37 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/workCollectAccessory/mapper/WorkCollectAccessoryMapper.java

@@ -0,0 +1,37 @@
+package com.jeeplus.pubmodules.workCollectAccessory.mapper;
+
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.pubmodules.meetingRoom.domain.MeetingRoom;
+import com.jeeplus.pubmodules.oss.domain.WorkAttachment;
+import com.jeeplus.pubmodules.workCollectAccessory.domain.WorkCollectAccessory;
+import com.jeeplus.pubmodules.workCollectAccessory.service.dto.DictValueDTO;
+import com.jeeplus.sys.domain.DictType;
+import com.jeeplus.sys.domain.DictValue;
+import com.jeeplus.sys.domain.WorkAttachmentInfo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import java.util.Date;
+import java.util.List;
+
+@Mapper
+public interface WorkCollectAccessoryMapper extends BaseMapper<WorkCollectAccessory> {
+    @InterceptorIgnore(tenantLine = "true")
+    IPage<WorkCollectAccessory> findPageList(Page<WorkCollectAccessory> page, @Param(Constants.WRAPPER) QueryWrapper<WorkCollectAccessory> workCollectAccessoryMapperQueryWrapper);
+
+
+    DictType getDictByName(@Param("dictName")String dictName);
+
+    void insertDictValue(DictValueDTO dictValue);
+
+    void deleteAttachment(@Param("id")String id);
+
+    List<WorkAttachmentInfo> listWorkAttachment(@Param("attachmentId")String id);
+
+    List<DictValue> getDictValueByName(@Param("dictName") String dictName);
+
+}

+ 99 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/workCollectAccessory/mapper/xml/WorkCollectAccessoryMapper.xml

@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.pubmodules.workCollectAccessory.mapper.WorkCollectAccessoryMapper">
+
+
+
+    <select id="findPageList" resultType="com.jeeplus.pubmodules.workCollectAccessory.domain.WorkCollectAccessory">
+            select
+                a.id,
+                a.url,
+                a.file_name,
+                a.type,
+                a.office_id,
+                a.company_id,
+                a.collect_type,
+                a.collect_user_id,
+                a.file_size,
+                a.classification,
+                a.file_description,
+                a.office_share,
+                a.company_share,
+                a.create_by_id,
+                a.create_time,
+                a.update_by_id,
+                a.update_time,
+                b.name as userName,
+                c.name as collectUserName
+            from work_collect_accessory a
+            left join sys_user b on a.create_by_id = b.id
+            left join sys_user c on a.collect_user_id = c.id
+                ${ew.customSqlSegment}
+            ORDER BY a.create_time DESC
+    </select>
+
+
+    <select id="getDictByName" resultType="com.jeeplus.sys.domain.DictType">
+        select
+            a.id,
+            a.type
+        from
+            sys_dict_type a
+        where
+            type = #{dictName}
+        and del_flag = 0
+    </select>
+
+
+    <select id="listWorkAttachment" resultType="com.jeeplus.sys.domain.WorkAttachmentInfo">
+        SELECT
+            id,
+            url,
+            attachment_name AS `name`,
+            create_by_id AS `by`,
+            attachment_flag AS `attachmentFlag`,
+            create_time
+        FROM
+            work_attachment
+        WHERE
+            del_flag = 0
+          AND attachment_id = #{id}
+    </select>
+
+
+
+    <insert id="insertDictValue" parameterType="com.jeeplus.pubmodules.workCollectAccessory.service.dto.DictValueDTO">
+        INSERT INTO sys_dict_value (id,dict_type_id,label,value,sort,create_by_id,create_time,update_by_id,update_time,del_flag,tenant_id)
+        VALUES (#{id},
+                #{dictTypeId},
+                #{label},
+                #{value},
+                #{sort},
+                #{createById},
+                #{createTime},
+                #{updateById},
+                #{updateTime},
+                #{delFlag},
+                #{tenantId})
+    </insert>
+
+    <delete id="deleteAttachment">
+        delete from work_attachment
+        <where>
+            attachment_id = #{id}
+        </where>
+    </delete>
+
+    <select id="getDictValueByName" resultType="com.jeeplus.sys.domain.DictValue">
+        SELECT v.label,
+               v.value,
+               v.sort
+        FROM `sys_dict_value` v
+        LEFT JOIN `sys_dict_type` t ON v.dict_type_id = t.id
+        WHERE t.type = #{dictName}
+        AND t.del_flag = 0
+        AND v.del_flag = 0
+    </select>
+</mapper>

+ 340 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/workCollectAccessory/service/WorkCollectAccessoryService.java

@@ -0,0 +1,340 @@
+package com.jeeplus.pubmodules.workCollectAccessory.service;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.TypeReference;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.common.TokenProvider;
+import com.jeeplus.core.query.QueryWrapperGenerator;
+import com.jeeplus.pubmodules.meetingRoom.domain.MeetingRoom;
+import com.jeeplus.pubmodules.oss.domain.WorkAttachment;
+import com.jeeplus.pubmodules.workCollectAccessory.domain.WorkCollectAccessory;
+import com.jeeplus.pubmodules.workCollectAccessory.mapper.WorkCollectAccessoryMapper;
+import com.jeeplus.pubmodules.workCollectAccessory.service.dto.DictValueDTO;
+import com.jeeplus.pubmodules.workCollectAccessory.service.dto.WorkCollectAccessoryDTO;
+import com.jeeplus.sys.domain.DictType;
+import com.jeeplus.sys.domain.DictValue;
+import com.jeeplus.sys.domain.WorkAttachmentInfo;
+import com.jeeplus.sys.feign.IDictApi;
+import com.jeeplus.sys.feign.IUserApi;
+import com.jeeplus.sys.feign.IWorkAttachmentApi;
+import com.jeeplus.sys.service.dto.UserDTO;
+import com.jeeplus.utils.StringUtils;
+import org.flowable.editor.language.json.converter.util.CollectionUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigInteger;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Author hgc
+ * @Date 2024/12/16/16:21
+ * @ClassName WorkCollectAccessoryService
+ * @Description
+ */
+@Service
+public class WorkCollectAccessoryService {
+    @Autowired
+    private WorkCollectAccessoryMapper workCollectAccessoryMapper;
+
+    /**
+     * 资料库列表
+     * @param workCollectAccessory
+     * @param page
+     * @return
+     */
+    public IPage<WorkCollectAccessory> findPageList(WorkCollectAccessory workCollectAccessory, Page<WorkCollectAccessory> page) throws Exception {
+        QueryWrapper<WorkCollectAccessory> workCollectAccessoryMapperQueryWrapper = QueryWrapperGenerator.buildQueryCondition(workCollectAccessory, WorkCollectAccessory.class);
+
+        // 确保 del_flag = 0 条件正确应用
+        workCollectAccessoryMapperQueryWrapper.eq("a.del_flag", 0);
+
+        // 附件名称
+        if (StringUtils.isNotBlank(workCollectAccessory.getFileName())) {
+            workCollectAccessoryMapperQueryWrapper.like("a.file_name", workCollectAccessory.getFileName());
+        }
+
+        // 上传人
+        if (StringUtils.isNotBlank(workCollectAccessory.getUserName())) {
+            workCollectAccessoryMapperQueryWrapper
+                    .like("b.name", workCollectAccessory.getUserName()); // 使用 b.name 作为条件
+        }
+
+        // 公司
+        if (StringUtils.isNotBlank(workCollectAccessory.getCompanyId())) {
+            workCollectAccessoryMapperQueryWrapper.eq("a.company_id", workCollectAccessory.getCompanyId());
+        }
+
+        // 部门
+        if (StringUtils.isNotBlank(workCollectAccessory.getOfficeId())) {
+            workCollectAccessoryMapperQueryWrapper.eq("a.office_id", workCollectAccessory.getOfficeId());
+        }
+
+        // 个人 - 只判断一次 createById,不要重复设置
+        if (StringUtils.isNotBlank(workCollectAccessory.getCreateById())) {
+            // 在这里明确使用括号来确保查询条件的优先级
+            workCollectAccessoryMapperQueryWrapper
+                    .and(wrapper -> wrapper.eq("a.create_by_id", workCollectAccessory.getCreateById())
+                            .or().eq("a.collect_user_id", workCollectAccessory.getCreateById()));
+        }
+
+        IPage<WorkCollectAccessory> iPage = workCollectAccessoryMapper.findPageList(page, workCollectAccessoryMapperQueryWrapper);
+
+        return iPage;
+    }
+
+    /**
+     * 收藏附件
+     * @return
+     */
+    public void collectionAttachment(String userId,String attachmentId )  {
+//        查询已存在的文件
+        WorkCollectAccessory attachment = workCollectAccessoryMapper.selectById(attachmentId);
+//
+        WorkCollectAccessory workCollectAccessory = new WorkCollectAccessory();
+        BeanUtils.copyProperties(attachment,workCollectAccessory);
+        workCollectAccessory.setId("");
+        workCollectAccessory.setCompanyId(null);
+        workCollectAccessory.setOfficeId(null);
+        workCollectAccessory.setCollectType("1");
+        workCollectAccessory.setCollectUserId(userId);
+        workCollectAccessoryMapper.insert(workCollectAccessory);
+    }
+
+    /**
+     * 共享附件
+     * @return
+     */
+    public void shareAttachment(String userId,String attachmentId,String shareType ,String companyId)  {
+        WorkCollectAccessory newAttachment = new WorkCollectAccessory();
+        newAttachment.setId(attachmentId);
+//        判断并设置共享状态
+        if(StringUtils.isNotEmpty(companyId)){
+            if("1".equals(shareType)){
+
+                newAttachment.setOfficeId(companyId);
+                newAttachment.setOfficeShare("1");
+            }else{
+                newAttachment.setCompanyId(companyId);
+                newAttachment.setCompanyShare("1");
+            }
+        }else{
+            if("1".equals(shareType)){
+                newAttachment.setOfficeId(companyId);
+                newAttachment.setOfficeShare("0");
+            }else{
+                newAttachment.setCompanyId(companyId);
+                newAttachment.setCompanyShare("0");
+            }
+        }
+
+        //更新当前用户的共享状态
+        workCollectAccessoryMapper.updateById(newAttachment);
+    }
+
+    /**
+     * 删除附件
+     * @return
+     */
+    public void delAttachment(String attachmentId )  {
+        workCollectAccessoryMapper.deleteById(attachmentId);
+    }
+
+
+    /**
+     * 上传附件
+     * @return
+     */
+    public void saveForm(WorkCollectAccessoryDTO workCollectAccessoryDTO)  {
+        UserDTO userDTO = SpringUtil.getBean(IUserApi.class).getByToken(TokenProvider.getCurrentToken());
+            String id = generateId();
+            List<WorkAttachmentInfo> workAttachments = workCollectAccessoryDTO.getWorkAttachments();
+            // 保存附件
+            if (workAttachments != null && !workAttachments.isEmpty()) {
+                saveFiles(workAttachments, userDTO, id);
+            }
+            WorkCollectAccessory workCollectAccessory = new WorkCollectAccessory();
+            WorkAttachmentInfo firstAttachment = workAttachments.get(0);
+            workCollectAccessory.setId(id);
+            workCollectAccessory.setFileDescription(workCollectAccessoryDTO.getFileDescription());
+            String classification = workCollectAccessoryDTO.getClassification();
+            if(StringUtils.isNotEmpty(classification)){
+                workCollectAccessory.setClassification(classification);
+                List<DictValue> dictList = getDictValueByName("classification");
+                boolean containsValue = false;
+                for (DictValue dictValue : dictList) {
+                    if (dictValue.getValue().equals(workCollectAccessory.getClassification())) {
+                        containsValue = true;
+                        break; // 一旦找到匹配值,退出循环
+                    }
+                }
+                if(!containsValue){
+                    DictType dictType = getDictByName("classification");
+                    DictValueDTO dictValue = new DictValueDTO();
+                    dictValue.setDictTypeId(dictType.getId());
+                    dictValue.setValue(classification);
+                    dictValue.setLabel(classification);
+                    dictValue.setSort(generateRandomString());
+                    dictValue.setId(generateId());
+                    dictValue.setCreateById(userDTO.getId());
+                    dictValue.setCreateTime(new Date());
+                    dictValue.setUpdateById(userDTO.getId());
+                    dictValue.setUpdateTime(new Date());
+                    dictValue.setDelFlag(0);
+                    dictValue.setTenantId("10000");
+                    workCollectAccessoryMapper.insertDictValue(dictValue);
+                }
+            }
+            workCollectAccessory.setUrl(firstAttachment.getUrl());
+            workCollectAccessory.setFileName(firstAttachment.getName());
+            workCollectAccessory.setType("1");
+            workCollectAccessory.setCollectType("0");
+            workCollectAccessory.setCollectUserId(userDTO.getId());
+            workCollectAccessory.setFileSize(firstAttachment.getSize());
+            workCollectAccessory.setOfficeShare("0");
+            workCollectAccessory.setCompanyShare("0");
+            workCollectAccessoryMapper.insert(workCollectAccessory);
+    }
+
+    /**
+     * 上传附件
+     * @return
+     */
+    public void updateById(WorkCollectAccessory workCollectAccessory)  {
+        UserDTO userDTO = SpringUtil.getBean(IUserApi.class).getByToken(TokenProvider.getCurrentToken());
+        String id = workCollectAccessory.getId();
+        if(StringUtils.isNotEmpty(id)){
+            workCollectAccessoryMapper.deleteAttachment(id);
+            List<WorkAttachmentInfo> workAttachments = workCollectAccessory.getWorkAttachments();
+            // 保存附件
+            if (workAttachments != null && !workAttachments.isEmpty()) {
+                saveFiles(workAttachments, userDTO, id);
+            }
+            WorkAttachmentInfo firstAttachment = workAttachments.get(0);
+            String classification = workCollectAccessory.getClassification();
+            if(StringUtils.isNotEmpty(classification)){
+                List<DictValue> dictList = getDictValueByName("classification");
+                boolean containsValue = false;
+                for (DictValue dictValue : dictList) {
+                    if (dictValue.getValue().equals(workCollectAccessory.getClassification())) {
+                        containsValue = true;
+                        break; // 一旦找到匹配值,退出循环
+                    }
+                }
+                if(!containsValue){
+                    DictType dictType = getDictByName("classification");
+                    DictValueDTO dictValue = new DictValueDTO();
+                    dictValue.setDictTypeId(dictType.getId());
+                    dictValue.setValue(classification);
+                    dictValue.setLabel(classification);
+                    dictValue.setSort(generateRandomString());
+                    dictValue.setId(generateId());
+                    dictValue.setCreateById(userDTO.getId());
+                    dictValue.setCreateTime(new Date());
+                    dictValue.setUpdateById(userDTO.getId());
+                    dictValue.setUpdateTime(new Date());
+                    dictValue.setDelFlag(0);
+                    dictValue.setTenantId("10000");
+                    workCollectAccessoryMapper.insertDictValue(dictValue);
+                }
+            }
+            workCollectAccessory.setUrl(firstAttachment.getUrl());
+            workCollectAccessory.setFileName(firstAttachment.getName());
+            workCollectAccessory.setFileSize(firstAttachment.getSize());
+
+            workCollectAccessoryMapper.updateById(workCollectAccessory);
+        }
+    }
+
+    /**
+     * 生成uuid
+     * @return
+     */
+    public static String generateId() {
+        UUID uuid = UUID.randomUUID();
+        BigInteger id = new BigInteger(uuid.toString().replace("-", ""), 16);
+        return id.toString();
+    }
+
+    /**
+     * 随机生成
+     * @return
+     */
+    public static String generateRandomString() {
+        Random random = new Random();
+        // 随机生成一个 99 到 1000 之间的整数
+        int randomNumber = 99 + random.nextInt(1000 - 99);
+        // 返回整数转为字符串
+        return String.valueOf(randomNumber);
+    }
+
+    /**
+     * 保存附件信息
+     * @param list 待保存的附件列表
+     * @param userDTO 当前登录用户
+     * @param id 关联id
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void saveFiles(List<WorkAttachmentInfo> list, UserDTO userDTO, String id) {
+        int j = 1;
+        for (WorkAttachmentInfo dto : list) {
+            WorkAttachmentInfo i = new WorkAttachmentInfo();
+            //包含了url、size、name
+            i.setId(UUID.randomUUID().toString().replace("-", ""));
+//            i.getCreateBy().setId(userDTO.getId());
+            i.setCreateTime(new Date());
+//            i.getUpdateBy().setId(userDTO.getId());
+            i.setUpdateTime(new Date());
+            i.setDelFlag(0);
+            i.setUrl(dto.getUrl());
+            //文件类型处理
+            List<String> strings = Arrays.asList(dto.getName().split("\\."));
+            if (CollectionUtils.isNotEmpty(strings)) {
+                i.setType(strings.get(1));
+            }
+            i.setAttachmentId(id);
+            i.setAttachmentName(dto.getName());
+            i.setAttachmentFlag("");
+            i.setFileSize(dto.getSize());
+            i.setSort(j);
+//            ossServiceMapper.insertWorkAttachment(i, userDTO);
+            Map<String,String> map = new HashMap<>();
+            String workAttachment = JSON.toJSONString((i));
+            String userDTOInfo = JSON.toJSONString((userDTO));
+            map.put("workAttachment",workAttachment);
+            map.put("userDTO",userDTOInfo);
+            SpringUtil.getBean ( IWorkAttachmentApi.class ).insertWorkAttachment(map);
+            j++;
+        }
+    }
+
+    /**
+     * 根据名称添加字典值
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public DictType getDictByName(String dictName) {
+      return  workCollectAccessoryMapper.getDictByName(dictName);
+    }
+    public List<DictValue> getDictValueByName(String dictName){
+        return workCollectAccessoryMapper.getDictValueByName(dictName);
+    }
+    /**
+     * 根据名称添加字典值
+     */
+    public WorkCollectAccessory queryById(String id) {
+        WorkCollectAccessory workCollectAccessory = workCollectAccessoryMapper.selectById(id);
+//        List<WorkAttachmentInfo> workAttachmentInfos = workCollectAccessoryMapper.listWorkAttachment(id);
+//        workCollectAccessory.setWorkAttachments(workAttachmentInfos);
+        return workCollectAccessory;
+    }
+
+
+}

+ 25 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/workCollectAccessory/service/dto/DictValueDTO.java

@@ -0,0 +1,25 @@
+package com.jeeplus.pubmodules.workCollectAccessory.service.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.jeeplus.core.domain.BaseEntity;
+import com.jeeplus.core.service.dto.BaseDTO;
+import com.jeeplus.sys.domain.WorkAttachmentInfo;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class DictValueDTO extends BaseEntity {
+    private String dictTypeId;
+
+    private String sort;
+
+    private String label;
+
+    private String value;
+
+}

+ 34 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/workCollectAccessory/service/dto/WorkCollectAccessoryDTO.java

@@ -0,0 +1,34 @@
+package com.jeeplus.pubmodules.workCollectAccessory.service.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.jeeplus.core.service.dto.BaseDTO;
+import com.jeeplus.sys.domain.WorkAttachmentInfo;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.sql.Time;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class WorkCollectAccessoryDTO extends BaseDTO {
+    private String userId;
+
+    private String attachmentId;
+
+    private String shareType;
+
+    private String companyId;
+
+    private String classification;
+
+    private String fileDescription;
+
+    @TableField(exist = false)
+    private List<WorkAttachmentInfo> workAttachments;
+}

+ 12 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/controller/DictController.java

@@ -192,5 +192,17 @@ public class DictController {
         return ResponseEntity.ok ( DictUtils.getDictMap ( ) );
     }
 
+    /**
+     * 根据名称获取字典值
+     *
+     * @param dictName
+     * @return
+     */
+    @ApiLog("根据名称获取字典值")
+    @GetMapping("queryDictListByName")
+    public ResponseEntity queryDictListByName(String dictName) {
+        List<DictValue> dictList = dictValueService.getByName(dictName);
+        return ResponseEntity.ok ( dictList );
+    }
 
 }

+ 6 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/DictValueMapper.java

@@ -5,6 +5,11 @@ package com.jeeplus.sys.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jeeplus.sys.domain.DictValue;
+import com.jeeplus.sys.service.dto.DictValueDTO;
+import org.apache.ibatis.annotations.Param;
+import org.mapstruct.Mapper;
+
+import java.util.List;
 
 /**
  * 数据字典MAPPER接口
@@ -13,5 +18,6 @@ import com.jeeplus.sys.domain.DictValue;
  * @version 2021-01-16
  */
 public interface DictValueMapper extends BaseMapper <DictValue> {
+    List<DictValue> getByName(@Param("dictName") String dictName);
 
 }

+ 10 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/mapper/xml/DictValueMapper.xml

@@ -3,4 +3,14 @@
 <mapper namespace="com.jeeplus.sys.mapper.DictValueMapper">
 
 
+    <select id="getByName" resultType="com.jeeplus.sys.domain.DictValue">
+        SELECT v.label,
+               v.value,
+               v.sort
+        FROM `sys_dict_value` v
+         LEFT JOIN `sys_dict_type` t ON v.dict_type_id = t.id
+        WHERE t.type = #{dictName}
+          AND t.del_flag = 0
+          AND v.del_flag = 0
+    </select>
 </mapper>

+ 1 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/service/DictTypeService.java

@@ -3,6 +3,7 @@
  */
 package com.jeeplus.sys.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.jeeplus.common.constant.CacheNames;

+ 9 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/service/DictValueService.java

@@ -3,12 +3,17 @@
  */
 package com.jeeplus.sys.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jeeplus.sys.domain.DictValue;
 import com.jeeplus.sys.mapper.DictValueMapper;
+import com.jeeplus.sys.service.dto.DictValueDTO;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
+
 /**
  * 数据字典Service
  *
@@ -19,5 +24,9 @@ import org.springframework.transaction.annotation.Transactional;
 @Transactional
 public class DictValueService extends ServiceImpl <DictValueMapper, DictValue> {
 
+    public List<DictValue> getByName(String dictName){
+        return this.baseMapper.getByName(dictName);
+    }
+
 }
 

+ 5 - 0
jeeplus-modules/jeeplus-system/src/main/java/com/jeeplus/sys/service/mapstruct/DictTypeWrapper.java

@@ -1,12 +1,17 @@
 package com.jeeplus.sys.service.mapstruct;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.jeeplus.core.mapstruct.EntityWrapper;
 import com.jeeplus.sys.domain.DictType;
 import com.jeeplus.sys.service.dto.DictTypeDTO;
+import com.jeeplus.sys.service.dto.DictValueDTO;
+import org.apache.ibatis.annotations.Param;
 import org.mapstruct.Mapper;
 import org.mapstruct.ReportingPolicy;
 import org.mapstruct.factory.Mappers;
 
+import java.util.List;
+
 @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE, uses = {})
 public interface DictTypeWrapper extends EntityWrapper <DictTypeDTO, DictType> {