Browse Source

【发票红冲状态查询、红票获取和PDF下载】

wuyx 2 years ago
parent
commit
d074a14f1f

+ 10 - 8
src/main/java/com/uas/eis/dto/FindOrderRelationInvoiceDTO.java

@@ -4,9 +4,8 @@ import com.uas.eis.utils.NumberUtil;
 import com.uas.eis.utils.StringUtil;
 import lombok.Data;
 
-import java.util.HashMap;
+import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 @Data
 public class FindOrderRelationInvoiceDTO extends QSqlDTO{
@@ -49,13 +48,14 @@ public class FindOrderRelationInvoiceDTO extends QSqlDTO{
     private List<OrderDetailCallBackVOSDTO> orderDetailCallBackVOS;//发票来源的订单明细list
     private List<RelateRedInvoiceDTO> relateRedInvoiceList;//发票来源的订单明细list
 
-    public String toMergeSql(int ioid,int detno){
+    public List<String> toMergeSql(int ioid,int detno){
+        List<String> sqls = new ArrayList<>();
         String sql = "merge into (" +
                 "    select ei_id,ei_indate,ei_updatedate,ei_detno,ei_ioid,ei_iocode,ei_biid,ei_bicode " +
                 "        ,ei_refno,ei_sid,ei_orderno,ei_createtime,ei_invoicetype,ei_invoiceline,ei_specificfactor,ei_invoicestate,ei_exceptionmessage,ei_invoicecode,ei_invoicenumber " +
                 "        ,ei_allelectronicinvoicenumber,ei_oldinvoicecode,ei_oldinvoicenumber,ei_oldallelectronicinvoicenu,ei_invoicetime,ei_invalidtime,ei_rushredstate,ei_pdfurl,ei_ofdurl " +
                 "        ,ei_imageurl,ei_calcexcludingtaxamount,ei_calctaxamount,ei_caleorderamount,ei_sellertaxno,ei_sellername,ei_taxno,ei_buyername,ei_remark,ei_clerker " +
-                "        ,ei_payee,ei_checker,ei_bfield1,ei_bfield2,ei_bfield3 " +
+                "        ,ei_payee,ei_checker,ei_bfield1,ei_bfield2,ei_bfield3,ei_pdfattach " +
                 "    from elecinvoice where ei_ioid = " +ioid+
                 " ) a USING ( " +
                 "    select io_id,io_code,io_biid,io_bicode, "+detno+" eiDetno " +
@@ -88,6 +88,7 @@ public class FindOrderRelationInvoiceDTO extends QSqlDTO{
                 "    ,eiallelectronicinvoicenumber,eioldinvoicecode,eioldinvoicenumber,eioldallelectronicinvoicenu,eiinvoicetime,eiinvalidtime,eirushredstate,eipdfurl,eiofdurl " +
                 "    ,eiimageurl,eicalcexcludingtaxamount,eicalctaxamount,eicaleorderamount,eisellertaxno,eisellername,eitaxno,eibuyername,eiremark,eiclerker " +
                 "    ,eipayee,eichecker,eibfield1,eibfield2,eibfield3)";
+        sqls.add(sql);
         if(relateRedInvoiceList !=null && relateRedInvoiceList.size()>0){//红冲数据更新
             StringBuffer orderNos = new StringBuffer(); //红票开票单号 //  EI_redORDERNO
             StringBuffer sids = new StringBuffer(); //红票流水号 EI_redSID
@@ -103,17 +104,18 @@ public class FindOrderRelationInvoiceDTO extends QSqlDTO{
                 taxAmount = NumberUtil.add(taxAmount,rroDto.getTaxAmount());
             }
             if(orderNos.length()>0){
-                sql.equals("update elecinvoice set " +
+                sql = "update elecinvoice set " +
                         "ei_redorderno='"+orderNos.substring(0,orderNos.length()-1)+"', " +
                         "EI_redSID='"+sids.substring(0,sids.length()-1)+"', " +
                         "ei_relativerefno='"+refnoS.substring(0,refnoS.length()-1)+"', " +
                         "EI_TAXEXCLUDEDAMOUNT='"+excludingTaxAmount+"', " +
                         "EI_TAXAMOUNT='"+taxAmount+"' " +
-                        "ei_redpdfurl=nulll,ei_respdfattach=null " +//抓取后重新抓取附件
-                        "where ei_ioid = "+ioid+" and ei_sid = "+stringField(getSid()));
+                        ",ei_redpdfurl=null,ei_redpdfattach=null " +//抓取后重新抓取附件
+                        "where ei_ioid = "+ioid+" and ei_refno = "+getRefno();
+                sqls.add(sql);
             }
         }
-        return sql;
+        return sqls;
     }
     private String getRefno(){
         //ei_refno = (case when ei_invoiceLine in ('bs','pc','es','ec') then ei_allElectronicInvoiceNumber else ei_invoiceNumber end)

+ 2 - 13
src/main/java/com/uas/eis/dto/QueryInvoiceResultDTO.java

@@ -80,24 +80,13 @@ public class QueryInvoiceResultDTO extends QSqlDTO {
     private String bField2;//描述:业务方自定义字段2 示例值:
     private String bField3;//描述:业务方自定义字段3 示例值:
     private String naturalPersonFlag;//描述:购买方自然人标志:0-否,1-是(数电普票(电子)时才有可能返回,为1时,版式文件上在购方名称最后面会额外显示 (个人) ) 示例值:
-    public String toUpdateSql(){
+    public String updatePdfUrlSql(){//更新 红票PDFURL附件
         String sql = "";
         if(StringUtil.hasText(serialNo)){
-            sql= "update ElecInvoice " +
-                    "set EI_REFNO = "+getRefno()+" " +
-                    ", EI_REDSID = "+stringField(serialNo)+// serialNos 流水号 -- EI_REDSID -- invoiceSerialNum
-                    ", EI_REDORDERNO = "+stringField(orderNo)+// orderNos 开票单号 --- EI_REDORDERNO -- ORDERNO
-                    ", EI_REDPDFURL = "+stringField(pdfUrl)+
-                    ", EI_RELATIVEREFNO = "+stringField(getRefno())+
-                    ", EI_TAXEXCLUDEDAMOUNT = "+numberField(exTaxAmount)+
-                    ", EI_TAXAMOUNT = "+numberField(taxAmount)+
-                    " where EI_REFNO = "+getBlueRefno();
+            sql= "update ElecInvoice set EI_REDPDFURL = "+stringField(pdfUrl)+ " where EI_REFNO = "+getBlueRefno();
         }
         return sql;
     }
-    private String getRefno(){
-        return stringField(StringUtil.nvl(getAllElectronicInvoiceNumber(),getInvoiceNo()));
-    }
     private String getBlueRefno(){
         return stringField(StringUtil.nvl(oldEleInvoiceNumber,oldInvoiceNo));
     }

+ 1 - 1
src/main/java/com/uas/eis/dto/QueryInvoiceResultResp.java

@@ -7,5 +7,5 @@ import java.util.List;
 
 @Data
 public class QueryInvoiceResultResp extends BaseNuoNuoQResp {
-    private List<QueryInvoiceResultDTO> list;
+    private List<QueryInvoiceResultDTO> result;
 }

+ 2 - 0
src/main/java/com/uas/eis/service/ERPService.java

@@ -3,6 +3,7 @@ package com.uas.eis.service;
 
 import com.uas.eis.sdk.entity.ApiResult;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -19,4 +20,5 @@ public interface ERPService {
     Map<String, Object> getElecInvoices(Map<String,Object> m);
     Map<String, Object> rushRed(String master, int id);
     Map<String, Object> queryInvoiceRedConfirm(Map<String,Object> m);
+    Map<String,Object> queryRedPdfUrl(List<String> serialNosAll, Map<String,Object> m);
 }

+ 28 - 35
src/main/java/com/uas/eis/service/Impl/ERPServiceImpl.java

@@ -343,14 +343,23 @@ public class ERPServiceImpl implements ERPService {
                 commonService.logFRecord("订单关联发票对接","("+errCode+")"+errMsg,ioid);
             }
         }catch (Exception e){
+            e.printStackTrace();
             errMsg = "发票获取异常";
             if(StringUtil.hasText(e.getMessage())){
                 errMsg = e.getMessage();
             }else if(e.getCause()!=null&&StringUtil.hasText(e.getCause().getMessage())){
                 errMsg = e.getCause().getMessage();
             }
+            logger.info("ElecI-DownLoad-master: {} ,id {} message {}",SpObserver.getSp(),ioid,errMsg);
             commonService.logFRecord("订单关联发票对接",errMsg.replaceAll("'","''"),ioid);
         }
+        //获取红字发票PDF地址
+        List<String> serialNosAll = baseDao.queryForList("select ei_redsid from ElecInvoice " +
+                "where ei_ioid = "+ioid+" and EI_RELATIVEREFNO is not null and ei_redpdfurl is null and nvl(EI_BILLSTATUS,' ') in (' ','01','04')",String.class);
+        if (!CollectionUtil.isEmpty(serialNosAll)){
+            queryRedPdfUrl(serialNosAll,m);
+        }
+//        queryRedPdfUrl()
         if(StringUtil.hasText(errMsg)&&!"调用成功".equals(errMsg)){
             res.put("success", false);
             res.put("errCode", errCode);
@@ -365,7 +374,7 @@ public class ERPServiceImpl implements ERPService {
         boolean syncToBillOut = baseDao.isDBSetting("BillOut","syncToBillOut");
         for (int i = 0; i < data.size(); i++) {
             FindOrderRelationInvoiceDTO friDto = data.get(i);
-            sqls.add(friDto.toMergeSql(ioid,(i+1)));
+            sqls.addAll(friDto.toMergeSql(ioid,(i+1)));
         }
         sqls.add("update invoiceOrder set io_refno = (select (min(ei_refno)||(case when max(ei_refno) <> min(ei_refno) then '-'||max(ei_refno) else '' end)) from ELECINVOICE where ei_ioid = io_id and EI_INVOICETYPE= 1 and nvl(ei_rushredstate,0) <> 1)" +
                 "where io_id = "+ioid);
@@ -373,6 +382,8 @@ public class ERPServiceImpl implements ERPService {
         if(syncToBillOut){
             sqls.add("update BillOut set bi_refno = (select max(io_refno) from invoiceOrder where io_id = "+ioid+" and io_biid = bi_id) where bi_id in (select io_biid from invoiceOrder where io_id = "+ioid+" and io_refno is not null)");
         }
+//        System.out.println("sqls:");
+//        System.out.println(sqls.toString());
         return sqls;
     }
 
@@ -478,10 +489,10 @@ public class ERPServiceImpl implements ERPService {
         SqlRowList bluePiao = baseDao.queryForRowSet("select ei_id,ei_redapplyid,ei_billStatus,ei_billNo,ei_billUuid,ei_taxExcludedAmount,ei_taxAmount,ei_redReason " +
                 "from elecinvoice " +
                 "where ei_ioid = '"+ioid+"' "+(eiid>0?"and ei_id = "+eiid:"")
-                +" and EI_INVOICETYPE = '1' and ei_redapplyid is not null and EI_RELATIVEREFNO is null and nvl(ei_billStatus,' ') in (' ','02','03') " +
+                +" and EI_INVOICETYPE = '1' and ei_redapplyid is not null and EI_RELATIVEREFNO is null and nvl(ei_billStatus,' ') in (' ','01','02','03') " +
                 "order by ei_Detno");
         if(bluePiao.hasNext()){
-            Map<Integer,List<String>> serialNoLists = new HashMap<>();
+            boolean isRushRedBill = false;
             while (bluePiao.next()){
                 String redApplyId =bluePiao.getGeneralString("ei_redapplyid");
                 eiid = bluePiao.getGeneralInt("ei_id");
@@ -492,8 +503,6 @@ public class ERPServiceImpl implements ERPService {
                 String rCode = "-999";
                 String describe = "";
                 String logCode = "发票红字确认状态查询";
-                List<String> serialNos = new ArrayList<>();
-                boolean isRushRedBill = false;
                 try {
                     QueryInvoiceRedConfirmResp qircResp = nuoNuoSDKService.queryInvoiceRedConfirm(qircReq,m);
                     rCode = qircResp.getCode();
@@ -520,13 +529,9 @@ public class ERPServiceImpl implements ERPService {
                             if("1".equals(qircfDTO.getOpenStatus())){ //已开具红字发票标记: 1:已开具 0:未开具 //orderNo 20230731182154174492
                                 isRushRedBill = true;
                                 // serialNos 流水号 -- EI_SID -- invoiceSerialNum ; orderNos 开票单号 --- EI_ORDERNO -- ORDERNO
-//                                serialNos.add(qircfDTO.getInvoiceSerialNum());
                             }
                         }
                         baseDao.execute(sqls);
-                        if(serialNos.size()>0){
-                            serialNoLists.put(eiid,serialNos);
-                        }
                         describe = "";
                     }else{
                         if(describe.length() > 3980){
@@ -550,11 +555,14 @@ public class ERPServiceImpl implements ERPService {
                     errmsg.append(describe);
                 }
             }
-//            if(isRushRedBill){
-//                map = getElecInvoices(m);
-//            }
-            if(serialNoLists.size()>0){
-                queryInvoiceResultByserialNos(serialNoLists,m);
+            if(isRushRedBill){
+                Map<String,Object> elM = new HashMap<>();
+                elM.put("appKey",m.get("appKey"));
+                elM.put("appSecret",m.get("appSecret"));
+                elM.put("token",m.get("token"));
+                elM.put("taxnum",m.get("taxnum"));
+                elM.put("io_id",ioid);
+                getElecInvoices(elM);
             }
         }
         if(errmsg.length()>0){
@@ -565,25 +573,13 @@ public class ERPServiceImpl implements ERPService {
         }
         return res;
     }
-    private Map<String,Object> queryRedPdfUrl(){
-        Map<String,Object> res = new HashMap<>();
-        List<String> serialNos = baseDao.queryForList("",String.class);
-
-        return res;
-    }
     //根据红票流水号 获取红票号及其他信息
-    private Map<String,Object> queryInvoiceResultByserialNos(Map<Integer,List<String>> serialNoLists,Map<String,Object> m){
+    public Map<String,Object> queryRedPdfUrl(List<String> serialNosAll,Map<String,Object> m){
         Map<String,Object> res = new HashMap<>();
         String describe = "";
-        int eiid = 0;
         try {
+            logger.info("ElecI-queryRedPdfUrl:master {} ,serialNosAll {}",SpObserver.getSp(),serialNosAll.toString());
             List<String> rSql = new ArrayList<String>();
-            Set<Integer> eiSet = serialNoLists.keySet();
-            List<String> serialNosAll = new ArrayList<>();
-            for (int eiid_ : eiSet) {
-                eiid = eiid_;
-                serialNosAll.addAll(serialNoLists.get(eiid));
-            }
             if(serialNosAll.size()>0){
                 Stream.iterate(0, n -> n + 1)
                         .limit((int) Math.ceil((double) serialNosAll.size() / 50)).forEach(page -> {
@@ -592,10 +588,10 @@ public class ERPServiceImpl implements ERPService {
                     qirReq.setIsOfferInvoiceDetail("0");
                     qirReq.setSerialNos(serialNos);
                     QueryInvoiceResultResp qirResp = nuoNuoSDKService.queryInvoiceResult(qirReq,m);
-                    List<QueryInvoiceResultDTO> list = qirResp.getList();
+                    List<QueryInvoiceResultDTO> list = qirResp.getResult();
                     if(!CollectionUtil.isEmpty(list)){
                         for (int i = 0; i < list.size(); i++) {
-                            String sql = list.get(i).toUpdateSql();
+                            String sql = list.get(i).updatePdfUrlSql();
                             if(!"".equals(sql)){
                                 rSql.add(sql);
                             }
@@ -603,10 +599,7 @@ public class ERPServiceImpl implements ERPService {
                     }
                 });
             }
-            String sqls = "update ELECINVOICE set ei_rushredstate = (case when abs(nvl(ei_taxexcludedamount,0)) = 0 then 0 when abs(nvl(ei_taxexcludedamount,0)) < abs(nvl(ei_calcexcludingtaxamount,0)) then 2 else 1 end) " +
-                    " where ei_id in ("+eiSet.toString()+")";
-            rSql.add(sqls);
-            System.out.println("rSql:"+rSql.toString());
+//            System.out.println("rSql:"+rSql.toString());
             baseDao.execute(rSql);
         }catch (Exception e){
             e.printStackTrace();
@@ -616,7 +609,7 @@ public class ERPServiceImpl implements ERPService {
             }else if(e.getCause()!=null&&StringUtil.hasText(e.getCause().getMessage())){
                 describe = e.getCause().getMessage();
             }
-            commonService.logFRecord("查询红票详情",describe.replaceAll("'","''"),eiid);
+            commonService.logFRecord("查询红票详情",describe.replaceAll("'","''"),0);
         }
         return res;
     }

+ 2 - 2
src/main/java/com/uas/eis/service/Impl/NuoNuoSDKServiceImpl.java

@@ -41,7 +41,7 @@ public class NuoNuoSDKServiceImpl implements NuoNuoSDKService {
         logger.info("ElecI-queryInvoiceRedConfirm:master {} content {}", SpObserver.getSp(),content);
         String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
         String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
-        System.out.println(result);
+//        System.out.println(result);
         QueryInvoiceRedConfirmResp resp = JSON.parseObject(result, new TypeReference<QueryInvoiceRedConfirmResp>() {});
         return resp;
     }
@@ -59,7 +59,7 @@ public class NuoNuoSDKServiceImpl implements NuoNuoSDKService {
         logger.info("ElecI-queryInvoiceResult:master {} content {}",SpObserver.getSp(),content);
         String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
         String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
-        System.out.println(result);
+//        System.out.println(result);
         QueryInvoiceResultResp resp = JSON.parseObject(result, new TypeReference<QueryInvoiceResultResp>() {});
         return resp;
     }

+ 81 - 19
src/main/java/com/uas/eis/task/ElecInvoiceTask.java

@@ -94,7 +94,11 @@ public class ElecInvoiceTask {
                 logger.info("ElecI-DownLoad: master: {} Begin ",master);
                 SpObserver.putSp(master);
                 SqlRowList ioList = baseDao.queryForRowSet("select io_id,io_code from(select io_id,io_code from "+master+".invoiceOrder " +
-                        " where io_status = '已审核' and nvl(IO_DOCKSTATUS,' ') = '对接成功' and (IO_INVOICESTATUS = 6 or (IO_INVOICESTATUS = 2 and io_refno is null)) order by io_id desc) where rownum <= 100");
+                        " where io_status = '已审核' " +
+                        "   and nvl(IO_DOCKSTATUS,' ') = '对接成功' " +
+                        "   and (IO_INVOICESTATUS = 6 or (IO_INVOICESTATUS = 2 and io_refno is null)) " +
+                        //有红票的也要获取
+                        "order by io_id desc) where rownum <= 100");
                 logger.info("ElecI-DownLoad: master: {} size: {} ",master,ioList.getResultList().size());
                 while (ioList.next()){
                     m.put("io_id",ioList.getGeneralInt("io_id"));
@@ -120,8 +124,7 @@ public class ElecInvoiceTask {
                 logger.info("ElecI-AttachSave: master: {} Begin ",master);
                 SpObserver.putSp(master);
                 SqlRowList ioList = baseDao.queryForRowSet("select * from (select ei_id,ei_pdfurl,ei_refno,ei_ioid from ELECINVOICE " +
-                        "where ei_pdfurl is not null and ei_pdfattach is null " +
-//                        "and ei_id = 11" +
+                        "where (ei_pdfurl is not null and ei_pdfattach is null) " +
                         " order by ei_id ) where rownum <= 100 ");//一次最多500
                 logger.info("ElecI-AttachSave: master: {} size: {} ",master,ioList.getResultList().size());
                 List<Integer> ioids = new ArrayList<>();
@@ -172,7 +175,7 @@ public class ElecInvoiceTask {
                     }
                 }
                 if(ioids.size()>0){
-                    baseDao.execute("update invoiceOrder set io_attach = REPLACE(to_char((select wm_concat(ei_pdfattach) from ELECINVOICE where io_id = ei_ioid)),',','') where io_id in ("+StringUtils.join(ioids.toArray(), ",")+")");
+                    baseDao.execute("update invoiceOrder set io_attach = REPLACE(to_char((select wm_concat(ei_pdfattach) from ELECINVOICE where io_id = ei_ioid and nvl(ei_rushredstate,0) <> 1)),',','') where io_id in ("+StringUtils.join(ioids.toArray(), ",")+")");
                 }
                 logger.info("ElecI-AttachSave: master: {} End ",master);
             }
@@ -216,7 +219,7 @@ public class ElecInvoiceTask {
                         "select io_id,io_Code " +
                         "from Invoiceorder where exists (Select 1 from ElecInvoice " +
                         //有红字确认单 但是没有获取到发票号的
-                        "   where ei_ioid = io_id and nvl(EI_INVOICETYPE,'1') = '1' and ei_redapplyid is not null and EI_RELATIVEREFNO is null and nvl(EI_BILLSTATUS,' ') in (' ','01','02','03') " +
+                        "   where ei_ioid = io_id and nvl(EI_INVOICETYPE,'1') = '1' and ei_redapplyid is not null and EI_RELATIVEREFNO is null and nvl(EI_BILLSTATUS,' ') in (' ','02','03') " +
                         " and io_code = 'SZ23070006' " +
                         ")) where rownum <= 100");
                 logger.info("ElecI-DownLoad: master: {} size: {} ",master,ioList.getResultList().size());
@@ -261,23 +264,82 @@ public class ElecInvoiceTask {
                 m.put("taxnum",taxnum);
                 logger.info("ElecI-redPdfUrlUpdate: master: {} Begin ",master);
                 SpObserver.putSp(master);
-                SqlRowList ioList = baseDao.queryForRowSet("select * from ( " +
-                        "select ei_id " +
-                        "from Invoiceorder where exists (Select 1 from ElecInvoice " +
-                        //有红字确认单 但是没有获取到发票号的
-                        "   where ei_ioid = io_id and nvl(EI_INVOICETYPE,'1') = '1' and ei_redapplyid is not null and EI_RELATIVEREFNO is null and nvl(EI_BILLSTATUS,' ') in (' ','01','02','03') " +
-                        " and io_code = 'SZ23070006' " +
-                        ")) where rownum <= 100");
-                logger.info("ElecI-DownLoad: master: {} size: {} ",master,ioList.getResultList().size());
-                while (ioList.next()){
-                    m.put("io_id",ioList.getGeneralInt("io_id"));
-                    m.put("io_code",ioList.getGeneralString("io_code"));
-                    m.put("ei_id",0);
-                    erpService.queryInvoiceRedConfirm(m);
+                List<String> serialNosAll = baseDao.queryForList("select ei_redsid from ElecInvoice where EI_RELATIVEREFNO is not null and ei_redpdfurl is null and nvl(EI_BILLSTATUS,' ') in ('01','04')",String.class);
+                if (serialNosAll == null){
+                    logger.info("ElecI-redPdfUrlUpdate: master: {} size: {} ",master,0);
+                }else {
+                    logger.info("ElecI-redPdfUrlUpdate: master: {} size: {} ",master,serialNosAll.size());
+                    erpService.queryRedPdfUrl(serialNosAll,m);
                 }
-                logger.info("ElecI-redPdfUrlUpdate: master: {} End ",master);
             }
             logger.info("ElecI-redPdfUrlUpdate End");
         }
     }
+
+    @Scheduled(cron = "0 0/2 * * * ?")
+    //红字PDF文件转存 一次转存
+    public void elecInvoiceRedAttachSave(){
+        List<Object[]> obsList=baseDao.getFieldsDatasByCondition("YITOA_DATACENTER.dock_invoice_config",new String[]{"appKey","appSecret","token","taxnum","username"},"1=1");
+        if(!CollectionUtil.isEmpty(obsList)){
+            logger.info("ElecI-AttachSave Begin");
+            for (Object[] obs: obsList) {
+                if(obs == null){
+                    continue;
+                }
+                String master = obs[4].toString();
+                logger.info("ElecI-AttachSave: master: {} Begin ",master);
+                SpObserver.putSp(master);
+                SqlRowList ioList = baseDao.queryForRowSet("select * from (select ei_id,ei_redpdfurl,ei_relativerefno,ei_ioid from ELECINVOICE " +
+                        "where ei_redpdfurl is not null and ei_redpdfattach is null " +
+                        " order by ei_id ) where rownum <= 100 ");//一次最多500
+                logger.info("ElecI-AttachSave: master: {} size: {} ",master,ioList.getResultList().size());
+                List<Integer> ioids = new ArrayList<>();
+                while (ioList.next()){
+                    //下载地址
+                    String fileUrl = ioList.getGeneralString("ei_redpdfurl"); // "https://inv.jss.com.cn/fp2/2zpnwyKkdvu9dWzE8BhmSnER0Iux3xQRMLidDJhiIE2PziVXY4lL3k83OsK0K06YctW5cf1FFHxraffj-bf16A.pdf";
+                    // 定义要保存的文件的路径
+                    String fileName = ioList.getGeneralString("ei_relativerefno")+".pdf";//发票号码
+                    String fileBasePath = "C:\\invoice\\"+fileName;//发票号码
+                    fileBasePath = "/usr/local/uas/invoice/"+fileName;//发票号码
+                    try {
+                        // 创建URL对象
+                        URL url = new URL(fileUrl);
+                        // 打开连接
+                        URLConnection conn = url.openConnection();
+                        // 获取输入流
+                        InputStream in = conn.getInputStream();
+                        // 创建输出流
+                        FileOutputStream out = new FileOutputStream(fileBasePath);
+                        // 创建缓冲区
+                        byte[] buffer = new byte[104857600];
+                        // 读取并写入数据
+                        int len;
+                        while ((len = in.read(buffer)) != -1) {
+                            out.write(buffer, 0, len);
+                        }
+                        long size = out.getChannel().size();
+                        // 关闭流
+                        in.close();
+                        out.close();
+//                        System.out.println("size:"+size);
+                        //存文件 filepath
+                        int id = commonService.saveFilePath(fileBasePath, (int) size, fileName, "管理员");
+                        baseDao.execute("update ELECINVOICE set ei_redpdfattach ='"+id+";' where ei_id = "+ioList.getGeneralInt("ei_id"));
+                        System.out.println("下载成功");
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        String errMsg = "文件转存异常";
+                        if(StringUtil.hasText(e.getMessage())){
+                            errMsg = e.getMessage();
+                        }else if(e.getCause()!=null&&StringUtil.hasText(e.getCause().getMessage())){
+                            errMsg = e.getCause().getMessage();
+                        }
+                        commonService.logFRecord("订单关联发票对接",errMsg.replaceAll("'","''"),ioList.getGeneralInt("ei_id"));
+                    }
+                }
+                logger.info("ElecI-AttachSave: master: {} End ",master);
+            }
+            logger.info("ElecI-AttachSave End");
+        }
+    }
 }

+ 4 - 0
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -240,4 +240,8 @@ public class UasEisApplicationTests {
 	public void TestelecInvoiceRedConfirmStateUpdate(){
 		elecInvoiceTask.elecInvoiceRedConfirmStateUpdate();
 	}
+	@Test
+	public void TestElecInvoiceRedAttachSave(){
+		elecInvoiceTask.elecInvoiceRedAttachSave();
+	}
 }