廖井涛
2025-12-01 21eed4f6a8065bb59d0aaf7481dfe145dba74f2a
north-glass-erp/src/main/java/com/example/erp/service/sd/OrderFileService.java
@@ -2,6 +2,7 @@
import com.aspose.cad.Image;
import com.aspose.cad.ImageOptionsBase;
import com.aspose.cad.License;
import com.aspose.cad.imageoptions.CadRasterizationOptions;
import com.aspose.cad.imageoptions.PngOptions;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -17,6 +18,7 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.stream.Collectors;
@@ -31,7 +33,7 @@
        result = orderDetails.stream()
                .collect(Collectors.collectingAndThen(
                        Collectors.toMap(
                                map -> map.get("order_id") + "_" + map.get("order_number"),
                                map -> map.get("order_id"),
                                map -> map,
                                (existing, replacement) -> existing // 保留第一个出现的
                        ),
@@ -40,13 +42,12 @@
        //循环获取图片
        List<OrderFile> orderFiles = new ArrayList<>();
        for (Map<String,Object> obj : result) {
            OrderFile orderFile = orderFileMapper.selectOne(new QueryWrapper<OrderFile>()
            List<OrderFile> orderFile = orderFileMapper.selectList(new QueryWrapper<OrderFile>()
                    .select("order_id, order_number, image_base64")
                    .eq("order_id", obj.get("order_id"))
                    .eq("order_number", obj.get("order_number"))
            );
            if (orderFile != null){
                orderFiles.add(orderFile);
                orderFiles.addAll(orderFile);
            }
        }
       return orderFiles;
@@ -54,48 +55,71 @@
    public Object updateOrderFileByOrderNumber(MultipartFile file,String orderId,String orderNumber) throws IOException {
        // 调用Image类的Load方法来加载输入的DWG文件。
        Image image = Image.load(file.getInputStream());
        // 创建CadRasterizationOptions实例以启用CAD栅格化选项。
        CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
        // 设置宽度
        rasterizationOptions.setPageWidth(1000);
        // 设置高度
        rasterizationOptions.setPageHeight(1000);
        // 调用这个setEmbedBackground方法来设置背景色是否不等于输出格式的默认背景色
        rasterizationOptions.setEmbedBackground(true);
        // 为生成的图像创建一个PngOptions的实例,并将其分配给ImageOptionsBase类的实例。
        ImageOptionsBase options = new PngOptions();
        // 调用 setVectorRasterizationOptions 方法来定义光栅化选项
        options.setVectorRasterizationOptions(rasterizationOptions);
        try (InputStream is = License.class.getResourceAsStream("/lisence.xml")) {
            License license = new License();
            license.setLicense(is);
        // 保存到字节流
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        image.save(outputStream, options);
        byte[] imageBytes = outputStream.toByteArray();
        String base64 = "data:image/png;base64," + Base64.getEncoder().encodeToString(imageBytes);
        OrderFile orderFile = new OrderFile();
        orderFile.setImageBase64(base64);
        orderFile.setFileName(file.getName());
        orderFile.setOrderId(orderId);
        orderFile.setOrderNumber(orderNumber);
        orderFile.setFileData(Arrays.toString(file.getBytes()));
        OrderFile orderFileExist = orderFileMapper
                .selectOne(new LambdaQueryWrapper<OrderFile>()
            // 调用Image类的Load方法来加载输入的DWG文件。
            Image image = Image.load(file.getInputStream());
            // 创建CadRasterizationOptions实例以启用CAD栅格化选项。
            CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
            // 设置宽度
            rasterizationOptions.setPageWidth(1000);
            // 设置高度
            rasterizationOptions.setPageHeight(700);
            // 调用这个setEmbedBackground方法来设置背景色是否不等于输出格式的默认背景色
            //rasterizationOptions.setEmbedBackground(true);
            // 为生成的图像创建一个PngOptions的实例,并将其分配给ImageOptionsBase类的实例。
            ImageOptionsBase options = new PngOptions();
            // 调用 setVectorRasterizationOptions 方法来定义光栅化选项
            options.setVectorRasterizationOptions(rasterizationOptions);
            // 保存到字节流
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            image.save(outputStream, options);
            byte[] imageBytes = outputStream.toByteArray();
            String base64 = "data:image/png;base64," + Base64.getEncoder().encodeToString(imageBytes);
            OrderFile orderFile = new OrderFile();
            orderFile.setImageBase64(base64);
            orderFile.setFileName(file.getName());
            orderFile.setOrderId(orderId);
            orderFile.setOrderNumber(orderNumber);
            orderFile.setFileData(Arrays.toString(file.getBytes()));
            OrderFile orderFileExist = orderFileMapper
                    .selectOne(new LambdaQueryWrapper<OrderFile>()
                            .eq(OrderFile::getOrderId, orderId)
                            .eq(OrderFile::getOrderNumber, orderNumber)
                    );
            if (orderFileExist == null) {
                orderFileMapper.insert(orderFile);
            }else {
                orderFileMapper.update(orderFile,new LambdaUpdateWrapper<OrderFile>()
                        .eq(OrderFile::getOrderId, orderId)
                        .eq(OrderFile::getOrderNumber, orderNumber)
                );
        if (orderFileExist == null) {
            orderFileMapper.insert(orderFile);
        }else {
            orderFileMapper.update(orderFile,new LambdaUpdateWrapper<OrderFile>()
                    .eq(OrderFile::getOrderId, orderId)
                    .eq(OrderFile::getOrderNumber, orderNumber)
            );
            }
            return orderFile;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    public Object getOrderNumberFile(String orderId, String orderNumber) {
        return orderFileMapper.selectOne(new QueryWrapper<OrderFile>()
                    .eq("order_id", orderId)
                    .eq("order_number", orderNumber)
                );
    }
        return base64;
    public Boolean deleteOrderNumberFile(String orderId, String orderNumber) {
        return orderFileMapper.delete(new QueryWrapper<OrderFile>()
                    .eq("order_id", orderId)
                    .eq("order_number", orderNumber)
                ) > 0;
    }
}