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 <= 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