package com.malk.qiwang.Service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.malk.qiwang.Service.QiWangService;
import com.malk.qiwang.Service.TXYInvoice;
import com.malk.qiwang.entity.CompanyTitle;
import com.malk.qiwang.entity.InvoiceLibrary;
import com.malk.qiwang.mapper.CompanyTitleMapper;
import com.malk.qiwang.mapper.InvoiceLibraryMapper;
import com.malk.qiwang.Service.IInvoiceLibraryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.malk.qiwang.model.McInvoiceDto;
import com.malk.server.common.FilePath;
import com.malk.server.common.McException;
import com.malk.server.common.McR;
import com.malk.server.dingtalk.DDR_New;
import com.malk.service.aliwork.YDClient;
import com.malk.service.dingtalk.DDClient;
import com.malk.service.dingtalk.DDClient_Contacts;
import com.malk.service.dingtalk.DDClient_Workflow;
import com.malk.utils.*;
import com.spire.pdf.PdfCompressionLevel;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.exporting.PdfImageInfo;
import com.spire.pdf.graphics.PdfBitmap;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import net.coobird.thumbnailator.Thumbnails;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hpsf.Decimal;
import org.apache.poi.util.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.client.RestTemplate;
import java.io.*;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
*
* 发票库表 服务实现类
*
*
* @author LQY
* @since 2026-04-27
*/
@Service
@Slf4j
public class InvoiceLibraryServiceImpl extends ServiceImpl implements IInvoiceLibraryService {
@Autowired
private QiWangService qiWangService;
@Autowired
private DDClient ddClient;
@Autowired
private YDClient ydClient;
@Autowired
private TXYInvoice txyInvoice;
@Value("${dingtalk.operator}")
private String operator;
@Value("${dingtalk.downloadPath}")
private String downloadPath;
@Autowired
private FilePath filePath;
@Autowired
private DDClient_Workflow ddClientWorkflow;
@Autowired
private InvoiceLibraryMapper baseMapper;
@Autowired
private CompanyTitleMapper companyTitleMapper;
@Autowired
private DDClient_Contacts ddClient_contacts;
private static final String url = "http://47.103.203.2:9092/qiwang/";
// private static final String url = "http://24120b4f.r39.cpolar.top/qiwang/";
@Override
public McR invoiceLibrary(Map map) {
log.info("接收到的参数: {}", map);
try {
String processInstanceId = UtilMap.getString(map, "processInstanceId");
if (StringUtils.isBlank(processInstanceId)) {
log.error("processInstanceId为空");
return McR.error("400", "审批实例ID不能为空");
}
// 获取审批实例信息
String accessToken = ddClient.getAccessToken();
Map processInstance = ddClientWorkflow.getProcessInstanceId(accessToken, processInstanceId);
if (processInstance == null) {
log.error("获取审批实例失败: {}", processInstanceId);
return McR.error("500", "获取审批实例信息失败");
}
String userId = (String) processInstance.get("originatorUserId");
log.info("审批人ID: {}", userId);
List