From d1c296f59ea0ac750763ccaaa6c2132ce9166085 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期四, 28 八月 2025 14:04:17 +0800
Subject: [PATCH] :fire: 销售出路 新增应收        合同管理 附件        添加文件上传

---
 main-business/src/main/java/com/ruoyi/business/entity/ReceiptPayment.java                  |    3 
 ruoyi-common/src/main/java/com/ruoyi/basic/service/StorageBlobService.java                 |    4 +
 ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java        |   38 ++++++++-
 main-business/src/main/java/com/ruoyi/business/entity/StaffOnJob.java                      |    5 +
 ruoyi-common/src/main/java/com/ruoyi/basic/entity/dto/SimpleStorageDto.java                |   22 +++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java            |   26 +++++-
 main-business/src/main/java/com/ruoyi/business/service/impl/ReceiptPaymentServiceImpl.java |   33 ++++++++
 main-business/src/main/java/com/ruoyi/business/service/impl/StaffOnJobServiceImpl.java     |   20 +++++
 main-business/src/main/java/com/ruoyi/business/controller/StaffOnJobController.java        |   10 ++
 main-business/src/main/java/com/ruoyi/business/dto/ReceiptPaymentDto.java                  |    8 ++
 main-business/src/main/java/com/ruoyi/business/vo/SaveStaffOnJobVo.java                    |   23 +++++
 main-business/src/main/resources/mapper/StaffOnJobMapper.xml                               |    1 
 main-business/src/main/java/com/ruoyi/business/service/IStaffOnJobService.java             |    3 
 13 files changed, 185 insertions(+), 11 deletions(-)

diff --git a/main-business/src/main/java/com/ruoyi/business/controller/StaffOnJobController.java b/main-business/src/main/java/com/ruoyi/business/controller/StaffOnJobController.java
index a5a6347..00e76f1 100644
--- a/main-business/src/main/java/com/ruoyi/business/controller/StaffOnJobController.java
+++ b/main-business/src/main/java/com/ruoyi/business/controller/StaffOnJobController.java
@@ -4,9 +4,13 @@
 
 import com.ruoyi.business.entity.StaffOnJob;
 import com.ruoyi.business.service.IStaffOnJobService;
+import com.ruoyi.business.vo.SaveStaffOnJobVo;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.R;
 import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletResponse;
+import lombok.Getter;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -74,5 +78,11 @@
         staffOnJobService.staffOnJobExport(response, staffOnJob);
     }
 
+    @PostMapping("/save")
+    public R save(@RequestBody SaveStaffOnJobVo vo){
+        staffOnJobService.saveStaffOnJob(vo);
+        return R.ok();
+    }
+
 
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/dto/ReceiptPaymentDto.java b/main-business/src/main/java/com/ruoyi/business/dto/ReceiptPaymentDto.java
index f211c0c..e79431d 100644
--- a/main-business/src/main/java/com/ruoyi/business/dto/ReceiptPaymentDto.java
+++ b/main-business/src/main/java/com/ruoyi/business/dto/ReceiptPaymentDto.java
@@ -1,9 +1,12 @@
 package com.ruoyi.business.dto;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.basic.entity.dto.SimpleStorageDto;
 import com.ruoyi.business.entity.ReceiptPayment;
 import com.ruoyi.common.annotation.Excel;
 import lombok.Data;
+
+import java.util.List;
 
 @Data
 public class ReceiptPaymentDto extends ReceiptPayment {
@@ -19,4 +22,9 @@
     @Excel(isExport = false)
     private String receiptPaymentDateEnd;
 
+
+    /**
+     * 闄勪欢淇℃伅
+     */
+    private List<SimpleStorageDto> attachFileList;
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/entity/ReceiptPayment.java b/main-business/src/main/java/com/ruoyi/business/entity/ReceiptPayment.java
index 4fcddae..92c503c 100644
--- a/main-business/src/main/java/com/ruoyi/business/entity/ReceiptPayment.java
+++ b/main-business/src/main/java/com/ruoyi/business/entity/ReceiptPayment.java
@@ -61,4 +61,7 @@
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
 
+    @TableField("attach_upload")
+    private String attachUpload;
+
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/entity/StaffOnJob.java b/main-business/src/main/java/com/ruoyi/business/entity/StaffOnJob.java
index ff472a9..738ffcb 100644
--- a/main-business/src/main/java/com/ruoyi/business/entity/StaffOnJob.java
+++ b/main-business/src/main/java/com/ruoyi/business/entity/StaffOnJob.java
@@ -144,5 +144,10 @@
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
 
+    /**
+     * 闄勪欢淇℃伅
+     */
+    @TableField("attach_upload")
+    private String attachUpload;
 
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/service/IStaffOnJobService.java b/main-business/src/main/java/com/ruoyi/business/service/IStaffOnJobService.java
index 12f9dbc..fe838ce 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/IStaffOnJobService.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/IStaffOnJobService.java
@@ -6,6 +6,7 @@
 
 import com.ruoyi.business.entity.StaffJoinLeaveRecord;
 import com.ruoyi.business.entity.StaffOnJob;
+import com.ruoyi.business.vo.SaveStaffOnJobVo;
 import jakarta.servlet.http.HttpServletResponse;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -24,4 +25,6 @@
     List<StaffJoinLeaveRecord> staffOnJobList();
 
     Boolean importData(MultipartFile file);
+
+    void saveStaffOnJob(SaveStaffOnJobVo vo);
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/ReceiptPaymentServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/ReceiptPaymentServiceImpl.java
index 6fd62c3..30f1d49 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/ReceiptPaymentServiceImpl.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/ReceiptPaymentServiceImpl.java
@@ -4,16 +4,22 @@
 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.ruoyi.basic.entity.dto.SimpleStorageDto;
+import com.ruoyi.basic.service.StorageBlobService;
 import com.ruoyi.business.dto.ReceiptPaymentDto;
 import com.ruoyi.business.dto.SalesRecordDto;
+import com.ruoyi.business.entity.DuePayable;
 import com.ruoyi.business.entity.ReceiptPayment;
 import com.ruoyi.business.entity.SalesRecord;
 import com.ruoyi.business.mapper.ReceiptPaymentMapper;
 import com.ruoyi.business.mapper.SalesRecordMapper;
 import com.ruoyi.business.service.ReceiptPaymentService;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 
+import jakarta.annotation.Resource;
+import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -24,6 +30,7 @@
 import java.time.YearMonth;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Service
 public class ReceiptPaymentServiceImpl extends ServiceImpl<ReceiptPaymentMapper, ReceiptPayment> implements ReceiptPaymentService {
@@ -32,6 +39,10 @@
     private ReceiptPaymentMapper receiptPaymentMapper;
     @Autowired
     private SalesRecordMapper salesRecordMapper;
+
+    @Resource
+    private StorageBlobService storageBlobService;
+
 
     /**
      * 鍥炴鐧昏鏂板
@@ -76,7 +87,27 @@
 
     @Override
     public IPage<ReceiptPaymentDto> receiptPaymentHistoryListPage(Page page, ReceiptPaymentDto receiptPaymentDto) {
-        return receiptPaymentMapper.bindInvoiceNoRegPage(page, receiptPaymentDto);
+
+        IPage<ReceiptPaymentDto> receiptPaymentDtoIPage = receiptPaymentMapper.bindInvoiceNoRegPage(page, receiptPaymentDto);
+
+        List<ReceiptPaymentDto> dtoList = receiptPaymentDtoIPage.getRecords();
+        Map<Long, List<Long>> attachMap = dtoList.stream().collect(Collectors.toMap(
+                (ReceiptPaymentDto receiptPaymentDto1) -> receiptPaymentDto1.getId().longValue(),
+                it -> {
+                    if (StringUtils.isNotBlank(it.getAttachUpload())) {
+                        return Arrays.stream(it.getAttachUpload().split(","))
+                                .map(Long::parseLong)
+                                .collect(Collectors.toList());
+                    } else {
+                        return List.of();
+                    }
+                }
+        ));
+        Map<Long, List<SimpleStorageDto>> conver = storageBlobService.conver(attachMap);
+        dtoList.forEach(it->{
+            it.setAttachFileList(conver.get(it.getId().longValue()));
+        });
+        return receiptPaymentDtoIPage;
     }
 
     @Override
diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/StaffOnJobServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/StaffOnJobServiceImpl.java
index 9a0b4cd..1fb68a8 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/StaffOnJobServiceImpl.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/StaffOnJobServiceImpl.java
@@ -10,6 +10,9 @@
 import com.ruoyi.business.mapper.StaffJoinLeaveRecordMapper;
 import com.ruoyi.business.mapper.StaffOnJobMapper;
 import com.ruoyi.business.service.IStaffOnJobService;
+import com.ruoyi.business.vo.SaveStaffOnJobVo;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 
 import jakarta.servlet.http.HttpServletResponse;
@@ -17,7 +20,9 @@
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.Collection;
 import java.util.List;
+import java.util.Objects;
 
 @AllArgsConstructor
 @Service
@@ -31,6 +36,9 @@
     //鍦ㄨ亴鍛樺伐鍙拌处鍒嗛〉鏌ヨ
     @Override
     public IPage<StaffOnJob> staffOnJobListPage(Page page, StaffOnJob staffOnJob) {
+
+
+
         return staffOnJobMapper.staffOnJobListPage(page,staffOnJob);
     }
 
@@ -67,5 +75,17 @@
         }
     }
 
+    @Override
+    public void saveStaffOnJob(SaveStaffOnJobVo vo) {
+        StaffOnJob staffOnJob = new StaffOnJob();
+        BeanUtils.copyProperties(vo, staffOnJob);
+        if (Objects.isNull(staffOnJob.getId())){
+            // todo 鏆傛椂鏈湁鏂板瑕佹眰
+            throw new ServiceException("鍚庡彴鏆傛湭纭畾寮�鍙�");
+        }
+
+        staffOnJobMapper.insertOrUpdate(staffOnJob);
+    }
+
 
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/vo/SaveStaffOnJobVo.java b/main-business/src/main/java/com/ruoyi/business/vo/SaveStaffOnJobVo.java
new file mode 100644
index 0000000..999ed63
--- /dev/null
+++ b/main-business/src/main/java/com/ruoyi/business/vo/SaveStaffOnJobVo.java
@@ -0,0 +1,23 @@
+package com.ruoyi.business.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author buhuazhen
+ * @date 2025/8/28
+ * @email 3038525872@qq.com
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SaveStaffOnJobVo implements Serializable {
+
+    private Long id;
+
+    private String attachUpload;
+
+}
diff --git a/main-business/src/main/resources/mapper/StaffOnJobMapper.xml b/main-business/src/main/resources/mapper/StaffOnJobMapper.xml
index 0f6b71b..3aabb60 100644
--- a/main-business/src/main/resources/mapper/StaffOnJobMapper.xml
+++ b/main-business/src/main/resources/mapper/StaffOnJobMapper.xml
@@ -18,6 +18,7 @@
         <if test="staffOnJob.entryDateEnd != null and staffOnJob.entryDateEnd != '' ">
             AND contract_expire_time &lt;= to_date(#{staffOnJob.entryDateEnd},'YYYY-MM-DD')
         </if>
+        order by create_time desc
     </select>
     <select id="staffOnJobList" resultType="com.ruoyi.business.entity.StaffOnJob">
         SELECT
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
index bf81449..76a1b44 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
@@ -1,5 +1,6 @@
 package com.ruoyi.web.controller.common;
 
+import com.google.common.collect.Iterables;
 import com.ruoyi.basic.service.StorageBlobService;
 import com.ruoyi.common.config.RuoYiConfig;
 import com.ruoyi.common.constant.Constants;
@@ -11,17 +12,17 @@
 import com.ruoyi.framework.config.ServerConfig;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
+import lombok.Getter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -42,6 +43,10 @@
 
     @Autowired
     private StorageBlobService  storageBlobService;
+
+    @Getter
+    @Value("${minio.default-bucket}")
+    private String defaultBucket;
 
     /**
      * 閫氱敤涓嬭浇璇锋眰
@@ -175,4 +180,17 @@
             log.error("涓嬭浇鏂囦欢澶辫触", e);
         }
     }
+
+    /**
+     * 鏍规嵁 storage_blob 琛╥d 杩斿洖minio鏂囦欢鍒楄〃
+     * @param ids
+     */
+    @PostMapping("/findFileListByIds")
+    public R findFileListByIds(@RequestBody List<Long> ids){
+        if (Iterables.isEmpty(ids)){
+            return R.ok();
+        }
+        return R.ok(storageBlobService.findStorageByIds(ids,defaultBucket));
+    }
+
 }
diff --git a/ruoyi-common/src/main/java/com/ruoyi/basic/entity/dto/SimpleStorageDto.java b/ruoyi-common/src/main/java/com/ruoyi/basic/entity/dto/SimpleStorageDto.java
index 248686d..9b37f1e 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/basic/entity/dto/SimpleStorageDto.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/basic/entity/dto/SimpleStorageDto.java
@@ -21,16 +21,36 @@
 
     private String contentType;
 
+    /**
+     * 鐢ㄤ簬涓嬭浇
+     */
     private String url;
 
-    private String downloadUrl;
+    /**
+     * 棰勮
+     */
+    private String previewUrl;
 
     private Date createTime;
 
+    // 閰嶅悎鍓嶇娣诲姞鏈変竴浜涘瓧娈�
+    private Long uid;
+
+    private String name;
+
+    private String status = "success";
     public SimpleStorageDto(Long id, String contentType, String originalFilename, Date createTime) {
         this.id = id;
         this.contentType = contentType;
         this.originalFilename = originalFilename;
         this.createTime = createTime;
     }
+
+    public Long getUid() {
+        return getId();
+    }
+
+    public String getName() {
+        return getOriginalFilename();
+    }
 }
diff --git a/ruoyi-common/src/main/java/com/ruoyi/basic/service/StorageBlobService.java b/ruoyi-common/src/main/java/com/ruoyi/basic/service/StorageBlobService.java
index 18e51c3..731428f 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/basic/service/StorageBlobService.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/basic/service/StorageBlobService.java
@@ -8,6 +8,7 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -35,4 +36,7 @@
     public int deleteStorageBlobs(StorageAttachment attachment);
 
     List<SimpleStorageDto> findStorageByIds(List<Long> ids,String bucketName);
+
+    Map<Long,List<SimpleStorageDto>> conver(Map<Long, List<Long>> attachMap);
+
 }
diff --git a/ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java b/ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java
index 1939119..c42d317 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Iterables;
 import com.ruoyi.basic.entity.StorageAttachment;
 import com.ruoyi.basic.entity.StorageBlob;
 import com.ruoyi.basic.entity.dto.SimpleStorageDto;
@@ -16,15 +17,16 @@
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.file.MinioUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
+import jakarta.annotation.Resource;
+import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.io.FilenameUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -46,6 +48,10 @@
 
     @Autowired
     private MinioUtils minioUtils;
+
+    @Getter
+    @Value("${minio.default-bucket}")
+    private String defaultBucket;
 
     @Override
     public List<StorageBlobDTO> updateStorageBlobs(List<MultipartFile> files, String bucketName, Long type) {
@@ -167,9 +173,31 @@
         }
         return storageBlobMapper.selectByIds(ids).parallelStream().map(it -> {
             SimpleStorageDto dto = new SimpleStorageDto(it.getId(), it.getContentType(), it.getOriginalFilename(), it.getCreateTime());
-            dto.setDownloadUrl(minioUtils.getDownloadUrls(it.getBucketFilename(), bucketName, it.getOriginalFilename(), true));
-            dto.setUrl(minioUtils.getPreviewUrl(it.getBucketFilename(), bucketName, true));
+            dto.setUrl(minioUtils.getDownloadUrls(it.getBucketFilename(), bucketName, it.getOriginalFilename(), true));
+            dto.setPreviewUrl(minioUtils.getPreviewUrl(it.getBucketFilename(), bucketName, true));
             return dto;
         }).toList();
     }
+
+    @Override
+    public Map<Long, List<SimpleStorageDto>> conver(Map<Long, List<Long>> attachMap) {
+        if (attachMap == null || attachMap.isEmpty()) {
+            return Map.of();
+        }
+        List<Long> storageBlobIds = attachMap.values().stream().flatMap(Collection::stream).toList();
+
+        if(Iterables.isEmpty(storageBlobIds)){
+            return Map.of();
+        }
+
+        Map<Long,SimpleStorageDto> storageMap = this.findStorageByIds(storageBlobIds, defaultBucket).stream().collect(Collectors.toMap(SimpleStorageDto::getId,it->it));;
+
+
+        Map<Long, List<SimpleStorageDto>> finalMap = new HashMap<>();
+        attachMap.forEach((k,v)->{
+            finalMap.put(k, v.stream().map(storageMap::get).toList());
+        });
+
+        return finalMap;
+    }
 }

--
Gitblit v1.9.3