package com.ruoyi.inspect.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.config.MinioConfig;
import com.ruoyi.common.core.domain.MinioResult;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.common.utils.LimsDateUtil;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.file.MinioUtils;
import com.ruoyi.inspect.dto.InspectionPurchasedDto;
import com.ruoyi.inspect.mapper.InspectionPurchasedMapper;
import com.ruoyi.inspect.pojo.InspectionPurchased;
import com.ruoyi.inspect.service.InspectionPurchasedService;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
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.time.LocalDateTime;
/**
*
* 外购件检验 服务实现类
*
*
* @author ld
* @since 2025-03-25 11:22:56
*/
@Service
@RequiredArgsConstructor
@Setter
public class InspectionPurchasedServiceImpl extends ServiceImpl implements InspectionPurchasedService {
private final InspectionPurchasedMapper inspectionPurchasedMapper;
private final MinioUtils minioUtils;
private final NumberGenerator numberGenerator;
@Autowired
private MinioConfig minioConfig;
@Override
public int addOrUpdateInspection(InspectionPurchasedDto inspectionPurchasedDto) {
if (inspectionPurchasedDto.getId() == null) {
inspectionPurchasedDto.setInspectionStatus(String.valueOf(0));
//委托编号规则是JCZX/SP+W+年月+序号
String no = numberGenerator.generateNumberWithPrefix(3,
"JCZX/SP-" + "W" + LimsDateUtil.resetDate(LocalDateTime.now()),
InspectionPurchased::getEntrustmentNo);
inspectionPurchasedDto.setEntrustmentNo(no);
return inspectionPurchasedMapper.insert(inspectionPurchasedDto);
} else {
return inspectionPurchasedMapper.updateById(inspectionPurchasedDto);
}
}
@Override
public int delInspection(Integer id) {
return inspectionPurchasedMapper.deleteById(id);
}
@Override
public IPage selectInspectionPurchased(Page page, InspectionPurchasedDto inspectionPurchasedDto) {
return inspectionPurchasedMapper.selectPage(page, QueryWrappers.queryWrappers(inspectionPurchasedDto));
}
@Override
public int updateInspection(MultipartFile file, Integer id, String inspectionItems, String result) throws Exception {
InspectionPurchased inspectionPurchased = inspectionPurchasedMapper.selectById(id);
inspectionPurchased.setInspectionStatus(String.valueOf(2));
inspectionPurchased.setInspectionItems(inspectionItems);
inspectionPurchased.setResult(result);
// 检查文件是否存在
if (file != null && !ObjectUtils.isEmpty(file)) {
if (ObjectUtils.isNotEmpty(inspectionPurchased.getFileUrl())) {
if (inspectionPurchased != null && inspectionPurchased.getFileUrl() != null) {
// 检查 MinIO 中文件是否存在
if (minioUtils.objectExists(minioConfig.getBucketName(), inspectionPurchased.getFileUrl())) {
// 先删除 MinIO 中的对象
minioUtils.removeObjectsResult(minioConfig.getBucketName(), inspectionPurchased.getFileUrl());
}
}
}
try {
String contentType = file.getContentType();
String category = contentType != null && contentType.startsWith("image/") ? "images" : "docs";
MinioResult upload = minioUtils.upload(minioConfig.getBucketName(), file, true);
// 记录存储路径
inspectionPurchased.setFileUrl(upload.getBucketFileName());
inspectionPurchased.setFilePreviewUrl(upload.getPreviewExpiry());
inspectionPurchased.setType(category.equals("images") ? 1 : 2);
inspectionPurchased.setFileName(upload.getOriginalName());
} catch (Exception e) {
throw new Exception("系统异常: ", e);
}
}
return inspectionPurchasedMapper.updateById(inspectionPurchased);
}
}