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(); } } 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; } 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; } 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; } 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); } 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 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); } } 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; } 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 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 表id è¿å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)); } } 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(); } } 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); } 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; } }