【优化】质量通知添加对附件的支持

This commit is contained in:
曹鹏飞 2026-04-21 11:42:05 +08:00
parent 6a540f9254
commit 26bbb7275f
11 changed files with 161 additions and 28 deletions

View File

@ -13,16 +13,17 @@ import com.nflg.wms.common.pojo.qo.ZipDownloadQO;
import com.nflg.wms.common.pojo.vo.FileUploadVO;
import com.nflg.wms.common.pojo.vo.FileVO;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.repository.entity.FileUploadRecord;
import com.nflg.wms.starter.BaseController;
import com.nflg.wms.starter.annotation.ApiMark;
import com.nflg.wms.starter.service.FileUploadService;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Qualifier;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@ -60,7 +61,17 @@ public class FileUpLoadController extends BaseController {
String fileName = file.getOriginalFilename();
String fileType = getFileType(fileName);
String url = fileUploadService.upload(buildFilePath(fileType), file);
return ApiResult.success(new FileUploadVO(0L, fileName, url));
FileUploadRecord record = new FileUploadRecord()
.setFileName(fileName)
.setFileType(fileType)
.setUrl(url)
.setFrom("admin")
.setSource((short) 0)
.setSourceId(0L)
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
fileControllerService.add(record);
return ApiResult.success(new FileUploadVO(record.getId(), fileName, url));
} catch (Exception ex) {
log.error("上传文件失败", ex);
throw new NflgException(STATE.BusinessError, "上传文件失败:" + ex.getMessage());

View File

@ -105,4 +105,8 @@ public class FileControllerService {
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(zipContent);
}
public void add(FileUploadRecord record) {
fileUploadRecordService.save(record);
}
}

View File

@ -5,19 +5,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nflg.wms.common.pojo.qo.QmsQualityNotificationAddQO;
import com.nflg.wms.common.pojo.qo.QmsQualityNotificationSearchQO;
import com.nflg.wms.common.pojo.qo.QmsQualityNotificationUpdateQO;
import com.nflg.wms.common.pojo.vo.FileVO;
import com.nflg.wms.common.pojo.vo.FileUploadVO;
import com.nflg.wms.common.pojo.vo.QmsQualityNotificationUserVO;
import com.nflg.wms.common.pojo.vo.QmsQualityNotificationVO;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.FileUploadRecord;
import com.nflg.wms.repository.entity.QmsQualityNotification;
import com.nflg.wms.repository.entity.QmsQualityNotificationUser;
import com.nflg.wms.repository.entity.User;
import com.nflg.wms.repository.service.IFileUploadRecordService;
import com.nflg.wms.repository.service.IQmsQualityNotificationService;
import com.nflg.wms.repository.service.IQmsQualityNotificationUserService;
import com.nflg.wms.repository.service.IUserService;
import com.nflg.wms.repository.entity.*;
import com.nflg.wms.repository.service.*;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
@ -49,6 +43,9 @@ public class QualityNotificationControllerService {
@Resource
private IFileUploadRecordService fileUploadRecordService;
@Resource
private IQmsQualityNotificationFileService qualityNotificationFileService;
/**
* 新增质量通知
*/
@ -79,6 +76,16 @@ public class QualityNotificationControllerService {
qualityNotificationService.save(entity);
if (CollectionUtil.isNotEmpty(request.getAttachments())) {
List<QmsQualityNotificationFile> attachments = request.getAttachments().stream()
.map(attachment -> new QmsQualityNotificationFile()
.setNotificationId(entity.getId())
.setFileId(attachment.getId())
)
.collect(Collectors.toList());
qualityNotificationFileService.saveBatch(attachments);
}
// 如果是手动选择用户保存用户关联
if (request.getTargetType() == 2 && CollectionUtil.isNotEmpty(request.getUserIds())) {
saveNotificationUsers(entity.getId(), request.getUserIds(), operator, operatorId, now);
@ -123,6 +130,19 @@ public class QualityNotificationControllerService {
if (request.getTargetType() == 2 && CollectionUtil.isNotEmpty(request.getUserIds())) {
saveNotificationUsers(request.getId(), request.getUserIds(), operator, operatorId, now);
}
if (CollectionUtil.isNotEmpty(request.getAttachments())) {
qualityNotificationFileService.lambdaUpdate()
.eq(QmsQualityNotificationFile::getNotificationId, request.getId())
.remove();
List<QmsQualityNotificationFile> attachments = request.getAttachments().stream()
.map(attachment -> new QmsQualityNotificationFile()
.setNotificationId(request.getId())
.setFileId(attachment.getId())
)
.collect(Collectors.toList());
qualityNotificationFileService.saveBatch(attachments);
}
}
/**
@ -140,6 +160,10 @@ public class QualityNotificationControllerService {
notificationUserService.lambdaUpdate()
.eq(QmsQualityNotificationUser::getNotificationId, id)
.remove();
qualityNotificationFileService.lambdaUpdate()
.eq(QmsQualityNotificationFile::getNotificationId, id)
.remove();
}
/**
@ -208,21 +232,21 @@ public class QualityNotificationControllerService {
}
// 查询附件列表
List<FileUploadRecord> files = fileUploadRecordService.lambdaQuery()
.eq(FileUploadRecord::getSourceId, id)
List<QmsQualityNotificationFile> attachments = qualityNotificationFileService.lambdaQuery()
.eq(QmsQualityNotificationFile::getNotificationId, id)
.list();
if (CollectionUtil.isNotEmpty(files)) {
List<FileVO> fileVOs = files.stream().map(f -> {
FileVO fileVO = new FileVO();
fileVO.setId(f.getId());
fileVO.setFileName(f.getFileName());
fileVO.setFileType(f.getFileType());
fileVO.setUrl(f.getUrl());
fileVO.setCreateBy(f.getCreateBy());
fileVO.setCreateTime(f.getCreateTime());
return fileVO;
}).collect(Collectors.toList());
vo.setAttachments(fileVOs);
if (CollectionUtil.isNotEmpty(attachments)) {
List<FileUploadRecord> files = fileUploadRecordService.lambdaQuery()
.in(FileUploadRecord::getId, attachments.stream().map(QmsQualityNotificationFile::getFileId).collect(Collectors.toList()))
.list();
vo.setAttachments(files.stream()
.map(file -> new FileUploadVO()
.setId(file.getId())
.setFileName(file.getFileName())
.setUrl(file.getUrl())
)
.collect(Collectors.toList())
);
}
return vo;

View File

@ -1,5 +1,7 @@
package com.nflg.wms.common.pojo.qo;
import com.nflg.wms.common.pojo.vo.FileUploadVO;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@ -39,4 +41,10 @@ public class QmsQualityNotificationAddQO {
* 通知内容HTML格式
*/
private String content;
/**
* 附件列表
*/
@Valid
private List<FileUploadVO> attachments;
}

View File

@ -1,5 +1,7 @@
package com.nflg.wms.common.pojo.qo;
import com.nflg.wms.common.pojo.vo.FileUploadVO;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@ -45,4 +47,10 @@ public class QmsQualityNotificationUpdateQO {
* 通知内容HTML格式
*/
private String content;
/**
* 附件列表
*/
@Valid
private List<FileUploadVO> attachments;
}

View File

@ -1,5 +1,7 @@
package com.nflg.wms.common.pojo.vo;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -14,6 +16,8 @@ public class FileUploadVO {
/**
* 文件id
*/
@NotNull
@Positive
private Long id;
/**

View File

@ -91,5 +91,5 @@ public class QmsQualityNotificationVO {
/**
* 附件列表
*/
private List<FileVO> attachments;
private List<FileUploadVO> attachments;
}

View File

@ -0,0 +1,37 @@
package com.nflg.wms.repository.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 质量通知附件表
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("qms_quality_notification_file")
public class QmsQualityNotificationFile implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 通知ID
*/
private Long notificationId;
/**
* 文件ID
*/
private Long fileId;
}

View File

@ -0,0 +1,11 @@
package com.nflg.wms.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nflg.wms.repository.entity.QmsQualityNotificationFile;
/**
* 质量通知附件 Mapper 接口
*/
public interface QmsQualityNotificationFileMapper extends BaseMapper<QmsQualityNotificationFile> {
}

View File

@ -0,0 +1,11 @@
package com.nflg.wms.repository.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.repository.entity.QmsQualityNotificationFile;
/**
* 质量通知附件 服务类
*/
public interface IQmsQualityNotificationFileService extends IService<QmsQualityNotificationFile> {
}

View File

@ -0,0 +1,15 @@
package com.nflg.wms.repository.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.wms.repository.entity.QmsQualityNotificationFile;
import com.nflg.wms.repository.mapper.QmsQualityNotificationFileMapper;
import com.nflg.wms.repository.service.IQmsQualityNotificationFileService;
import org.springframework.stereotype.Service;
/**
* 质量通知附件 服务实现类
*/
@Service
public class QmsQualityNotificationFileServiceImpl extends ServiceImpl<QmsQualityNotificationFileMapper, QmsQualityNotificationFile> implements IQmsQualityNotificationFileService {
}