package com.zteits.pay.job; import org.apache.commons.collections4.CollectionUtils; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; import com.zteits.clouds.api.apibase.constants.InvoiceStateEnum; import com.zteits.pay.biz.invoice.handler.hx.InvoiceOpenHandlerNuonuo; import com.zteits.pay.biz.invoice.handler.hx.param.NuonuoInvoiceResponse; import com.zteits.pay.biz.invoice.handler.hx.param.NuonuoInvoiceResponse.NuonuoInvoiceResult; import com.zteits.pay.biz.invoice.handler.hx.param.NuonuoResultCodeEnum; import com.zteits.pay.dao.TdCCustInvoiceHisDao; import com.zteits.pay.domain.TdCCustInvoiceHis; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; /** * 诺诺发票状态查询定时任务 * 查询invoice_code不为空且invoice_url为空的发票记录,调用诺诺接口获取最新状态并更新数据库 * * @author wangbiao * @date 2026-08-10 */ @Component public class InvoiceNuonuoQueryJob { private static final Logger logger = LoggerFactory.getLogger(InvoiceNuonuoQueryJob.class); @Autowired private InvoiceOpenHandlerNuonuo invoiceOpenHandlerNuonuo; @Autowired private TdCCustInvoiceHisDao custInvoiceHisDao; @XxlJob(value = "InvoiceNuonuoQueryJob") public ReturnT execute(String... params) throws Exception { this.logger("---begin 诺诺发票状态查询定时任务---"); List pendingList = custInvoiceHisDao.selectNuonuoPendingInvoiceList(); if (CollectionUtils.isEmpty(pendingList)) { this.logger("---本次没有需要查询的诺诺发票记录---"); return ReturnT.SUCCESS; } this.logger("本次查询到待同步诺诺发票记录条数=" + pendingList.size()); int successCount = 0; int failCount = 0; for (TdCCustInvoiceHis record : pendingList) { try { this.logger("查询诺诺发票详情,invoiceCode=" + record.getInvoiceCode()); NuonuoInvoiceResponse response = invoiceOpenHandlerNuonuo.queryInvoiceDetail(record.getInvoiceCode()); if (response == null || !NuonuoResultCodeEnum.E0000.getCode().equals(response.getCode())) { String errorMsg = response != null ? response.getDescribe() : "响应为空"; this.logger("诺诺查询发票详情失败,invoiceCode=" + record.getInvoiceCode() + ",原因:" + errorMsg); failCount++; continue; } List resultList = response.getResult(); if (CollectionUtils.isEmpty(resultList)) { this.logger("诺诺查询发票详情返回结果为空,invoiceCode=" + record.getInvoiceCode()); failCount++; continue; } NuonuoInvoiceResult result = resultList.get(0); TdCCustInvoiceHis updateRecord = new TdCCustInvoiceHis(); updateRecord.setId(record.getId()); updateRecord.setModfiyDate(new Date()); if (result.getInvoiceNo() != null) { updateRecord.setInvoiceNumber(result.getInvoiceNo()); } if (result.getInvoiceDate() != null) { updateRecord.setInvoiceDate(result.getInvoiceDate()); } if (result.getPdfUrl() != null) { updateRecord.setInvoiceUrl(result.getPdfUrl()); } if (result.getStatusMsg() != null) { updateRecord.setMsg(result.getStatusMsg()); } else if (result.getFailCause() != null) { updateRecord.setMsg(result.getFailCause()); } if ("2".equals(result.getStatus())) { if (result.getPdfUrl() != null && !result.getPdfUrl().isEmpty()) { updateRecord.setInvoiceState(String.valueOf(InvoiceStateEnum.ALREADY_DOWNLOAD.getValue())); } else { updateRecord.setInvoiceState(String.valueOf(InvoiceStateEnum.ALREADY_OPEN_INVOICE.getValue())); } } custInvoiceHisDao.updateInvioceById(updateRecord); this.logger("诺诺发票状态更新成功,invoiceCode=" + record.getInvoiceCode() + ",status=" + result.getStatus() + ",invoiceNo=" + result.getInvoiceNo() + ",pdfUrl=" + result.getPdfUrl()); successCount++; } catch (Exception e) { this.logger("诺诺发票查询异常,invoiceCode=" + record.getInvoiceCode() + ",异常:" + e.getMessage()); logger.error("诺诺发票查询异常", e); failCount++; } } this.logger("---end 诺诺发票状态查询定时任务,成功=" + successCount + ",失败=" + failCount + "---"); return ReturnT.SUCCESS; } private void logger(String msg) { XxlJobHelper.log(msg); logger.info(msg); } }