//package com.zfire.mall.manager.print;
//
//
//import cn.hutool.core.date.DateUtil;
//import cn.hutool.core.lang.UUID;
//import com.spire.doc.Document;
//import com.spire.doc.FileFormat;
//
//import com.zfire.mall.manager.bean.admin.AdminUserCom;
//import com.zfire.mall.manager.bean.invoice.InvoiceApplicationOrderBody;
//import com.zfire.mall.manager.bean.ship.ShipDocumentDetail;
//import com.zfire.mall.manager.constant.Constant;
//import com.zfire.mall.manager.exception.RemoteServiceException;
//import com.zfire.mall.manager.logic.common.CommonLogic;
//import com.zfire.mall.manager.logic.ship.ShipLogic;
//import com.zfire.mall.manager.utils.oss.OSSUtil;
//import freemarker.template.Configuration;
//import freemarker.template.Template;
//
//import org.apache.commons.lang3.StringUtils;
//import org.junit.Test;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.io.*;
//import java.text.DateFormat;
//import java.util.*;
//
//@Service
//public class PdfUtil {
//
//    @Autowired
//    OSSUtil ossUtil;
//
//
//    @Autowired
//    ShipLogic shipLogic;
//
//    @Autowired
//    CommonLogic commonLogic;
//
//    final String uploadPath = "/app/print_template/";
//
//
//    public String fillTemplateInvoice(List<String> ids) {
//
//        return this.printData("/app/print_template/print_new.xml",ids);
//    }
//
//
//
//    /**
//     * 利用模板生成pdf
//     */
//    public String fillTemplate(List<String> ids) {
//
//        String xmlPath = "/app/print_template/print_new.xml";
//
//        String fileName = new Date().getTime()+UUID.randomUUID().toString();
//        //word生成名字
//        String targetName= new Date().getTime()+UUID.randomUUID().toString()+".doc";
//
//        String wordPath = uploadPath + targetName;
//        String pdfPath = uploadPath + fileName +".pdf";
//        //获得xml文件夹路径
//        String templatePath = xmlPath.substring(0,xmlPath.lastIndexOf("/"));
//        //获得xml名字
//        String templateName = xmlPath.substring(xmlPath.lastIndexOf("/") + 1, xmlPath.length());
//        try {
//            Configuration configuration = new Configuration();
//            configuration.setDefaultEncoding("UTF-8");
//            //判断生成位置是否存在,不存在则创建
//            File file = new File(uploadPath);
//            if (!file.exists()) {
//                file.mkdirs();
//            }
//            // 加载模板数据（从文件路径中获取文件，其他方式）
//            configuration.setDirectoryForTemplateLoading(new File(templatePath));
//            Template template = configuration.getTemplate(templateName);
//            File outFile = new File(uploadPath + File.separator + targetName);
//            FileOutputStream fileOutputStream = new FileOutputStream(outFile);
//            //将模板和数据模型合并生成文件
//            Writer out = new BufferedWriter(new OutputStreamWriter(fileOutputStream, "UTF-8"));
//
//            //制造假数据，结合前端我打算用map接收
//            String printTime = "2022-08-30";
//            String customerNumber = "110110";
//            String customerName = "李佳辉23";
//            String stockName = "万豪仓";
//            String remark = getValue("备注",25);
//            String refundPerson = getValue("李四",21);
//            String linkPhone = getValue("13333333333",25);
//            String car = getValue("特斯拉",25);
//            String createBy = getValue("真的很好",25);
//            String takeBy = getValue("你好啊",25);
//
//            Map<String,Object> map =new HashMap<>();
//            map.put("billTitle","韶关弘格贸易有限公司销售退货单");
//            map.put("customerNumber",customerNumber);
//            map.put("customerName",customerName);
//            map.put("printDate",printTime);
//            map.put("stockName",stockName);
//            map.put("remark",remark);
//            map.put("refundPerson",refundPerson);
//            map.put("linkPhone",linkPhone);
//            map.put("car",car);
//            map.put("createBy",createBy);
//            map.put("takeBy",takeBy);
//
//            List<Map<String,Object>> items = new ArrayList<>();
//            for(int i=0;i<5;i++){
//                Map<String,Object> bean = new HashMap<>();
//                bean.put("col1","11010101");
//                bean.put("col2","123");
//                bean.put("col3","2022-08-30");
//                bean.put("col4","123");
//                bean.put("col5","你好啊"+i);
//                bean.put("col6","嗯嗯嗯嗯嗯嗯嗯嗯嗯");
//                bean.put("col7","1");
//                bean.put("col8","123");
//                bean.put("col9","试试");
//                items.add(bean);
//            }
//
//            int length = 5 - items.size();
//            for(int i = 0;i<length;i++){
//                Map<String,Object> bean = new HashMap<>();
//                bean.put("col1","");
//                bean.put("col2","");
//                bean.put("col3","");
//                bean.put("col4","");
//                bean.put("col5","");
//                bean.put("col6","");
//                bean.put("col7","");
//                bean.put("col8","");
//                bean.put("col9","");
//                items.add(bean);
//            }
//            map.put("items",items);
//            //生成文件
//            template.process(map, out);
//            //关闭资源
//            out.flush();
//            out.close();
//            fileOutputStream.close();
//
//            this.toPdf(wordPath,pdfPath);
//
//            long time = new Date().getTime();
//            String filePath = Constant.Ali.OSS_TYPE_PIC  + time + ".pdf";
//            ossUtil.uploadFile(filePath,new File(pdfPath));
//
//            return ossUtil.getUrlWw(filePath);
//
//        } catch (Exception e) {
//            throw new RemoteServiceException("生成打印模板失败");
//        }finally {
//            if(StringUtils.isNotEmpty(wordPath)){
//                new File(wordPath).delete();
//            }
//            if(StringUtils.isNotEmpty(pdfPath)){
//                new File(pdfPath).delete();
//            }
//        }
//    }
//
//
//
//    public String printData(String xmlPath,List<String> ids){
//        //String xmlPath = "/app/print_template/print_new.xml";
//        final Integer page = 5;
//        String fileName = new Date().getTime() + UUID.randomUUID().toString();
//        //word生成名字
//        String targetName= new Date().getTime() + UUID.randomUUID().toString()+".doc";
//
//        String wordPath = uploadPath + targetName;
//        String pdfPath = uploadPath + fileName +".pdf";
//        //获得xml文件夹路径
//        String templatePath = xmlPath.substring(0,xmlPath.lastIndexOf("/"));
//        //获得xml名字
//        String templateName = xmlPath.substring(xmlPath.lastIndexOf("/") + 1, xmlPath.length());
//        try {
//            Configuration configuration = new Configuration();
//            configuration.setDefaultEncoding("UTF-8");
//            //判断生成位置是否存在,不存在则创建
//            File file = new File(uploadPath);
//            if (!file.exists()) {
//                file.mkdirs();
//            }
//            // 加载模板数据（从文件路径中获取文件，其他方式）
//            configuration.setDirectoryForTemplateLoading(new File(templatePath));
//            Template template = configuration.getTemplate(templateName);
//            File outFile = new File(uploadPath + File.separator + targetName);
//            FileOutputStream fileOutputStream = new FileOutputStream(outFile);
//            //将模板和数据模型合并生成文件
//            Writer out = new BufferedWriter(new OutputStreamWriter(fileOutputStream, "UTF-8"));
//
//            AdminUserCom adminUser = commonLogic.getAdminUser();
//            List<Map<String,Object>> arrays = new ArrayList<>();
//            for (String id : ids) {
//
//                ShipDocumentDetail shipDocumentDetail = shipLogic.detail(id);
//                int num = shipDocumentDetail.getInvoicePickBeans().size() / page;
//                //需要打的张数
//                int printNums = shipDocumentDetail.getInvoicePickBeans().size() % page == 0 ? num : num + 1;
//                for (int i = 0; i < printNums; i++) {
//                    Map<String, Object> map = new HashMap<>();
//                    //制造假数据，结合前端我打算用map接收
//                    String printTime = DateUtil.formatDate(new Date());
//                    String customerNumber = getValue(shipDocumentDetail.getCustomerNumber(),25);
//                    String customerName = shipDocumentDetail.getCustomerName();
//                    String stockName = shipDocumentDetail.getCorrespondName();
//                    String remark = getValue(shipDocumentDetail.getRemark(), 25);
//                    String refundPerson = getValue("", 21);
//                    String linkPhone = getValue("", 25);
//                    String car = getValue("", 25);
//                    String createBy = getValue(adminUser.getNickName(), 25);
//                    String takeBy = getValue("", 25);
//
//                    if (shipDocumentDetail.getType().equals(2)) {
//                        map.put("billTitle", "韶关弘格贸易有限公司销售退货单");
//                    } else {
//                        map.put("billTitle", "韶关弘格贸易有限公司销售发货单");
//                    }
//                    map.put("customerNumber", customerNumber);
//                    map.put("customerName", customerName);
//                    map.put("printDate", printTime);
//                    map.put("stockName", stockName);
//                    map.put("remark", remark);
//                    map.put("refundPerson", refundPerson);
//                    map.put("linkPhone", linkPhone);
//                    map.put("car", car);
//                    map.put("createBy", createBy);
//                    map.put("takeBy", takeBy);
//
//                    List<Map<String, Object>> items = new ArrayList<>();
//                    for (int x = 0;x < page ; x ++) {
//                        if(shipDocumentDetail.getInvoicePickBeans().size() < (x + (i * page))){
//                            continue;
//                        }
//                        InvoiceApplicationOrderBody invoicePickBean = shipDocumentDetail.getInvoicePickBeans().get(x+(i*page));
//
//                        Map<String, Object> bean = new HashMap<>();
//                        bean.put("col1", invoicePickBean.getSalesOrderId());
//                        bean.put("col2", shipDocumentDetail.getId());
//                        bean.put("col3", DateUtil.formatDate(new Date()));
//                        bean.put("col4", StringUtils.isEmpty(shipDocumentDetail.getEnginOrderType()) ? invoicePickBean.getMainOrderId() : shipDocumentDetail.getEnginOrderNo());
//                        bean.put("col5", invoicePickBean.getMaterialName());
//                        bean.put("col6", invoicePickBean.getSpecification());
//                        bean.put("col7", invoicePickBean.getRefundableQty());
//                        bean.put("col8", invoicePickBean.getHeaderRemark());
//                        bean.put("col9", invoicePickBean.getPjxh1Text());
//                        items.add(bean);
//                    }
//
//                    int length = page - items.size();
//                    for (int j = 0; j < length; j++) {
//                        Map<String, Object> bean = new HashMap<>();
//                        bean.put("col1", "");
//                        bean.put("col2", "");
//                        bean.put("col3", "");
//                        bean.put("col4", "");
//                        bean.put("col5", "");
//                        bean.put("col6", "");
//                        bean.put("col7", "");
//                        bean.put("col8", "");
//                        bean.put("col9", "");
//                        items.add(bean);
//                    }
//
//                    map.put("items", items);
//                    arrays.add(map);
//                }
//            }
//            Map<String, Object> map = new HashMap<>();
//            map.put("datas", arrays);
//            //生成文件
//            template.process(map, out);
//
//            //关闭资源
//            out.flush();
//            out.close();
//            fileOutputStream.close();
//
//            this.toPdf(wordPath,pdfPath);
//
//            long time = new Date().getTime();
//            String filePath = Constant.Ali.OSS_TYPE_PIC  + time + ".pdf";
//            ossUtil.uploadFile(filePath,new File(pdfPath));
//
//            return ossUtil.getUrlWw(filePath);
//
//        } catch (Exception e) {
//            throw new RemoteServiceException("生成打印模板失败");
//        }finally {
//            if(StringUtils.isNotEmpty(wordPath)){
//                new File(wordPath).delete();
//            }
//            if(StringUtils.isNotEmpty(pdfPath)){
//                new File(pdfPath).delete();
//            }
//        }
//    }
//
//
//
//    private String getValue(String value,int length2){
//        int length = value.length();
//        if(length < length2){
//            for(int i=0;i < length2 - length;i++){
//                value += " ";
//            }
//        }
//        return value;
//    }
//
//    public static void toPdf(String source,String target){
//        //加载Word测试文档
//        Document doc = new Document();
//        doc.loadFromFile(source);
////保存为PDF格式的文件
//        doc.saveToFile(target, FileFormat.PDF);
//        doc.close();
//    }
//
//}
