@ -1,10 +1,13 @@
package com.jianshui.invoice.service.impl.api ;
import cn.hutool.core.bean.BeanUtil ;
import cn.hutool.core.codec.Base64 ;
import cn.hutool.core.convert.Convert ;
import cn.hutool.core.io.FileUtil ;
import cn.hutool.core.util.ObjectUtil ;
import cn.hutool.core.util.RandomUtil ;
import cn.hutool.core.util.StrUtil ;
import cn.hutool.core.util.XmlUtil ;
import cn.hutool.http.HttpUtil ;
import cn.hutool.json.JSON ;
import cn.hutool.json.JSONUtil ;
@ -30,6 +33,7 @@ import com.jianshui.invoice.domain.dto.api.aisino.console.vehicle.TaxEquipmentIn
import com.jianshui.invoice.domain.dto.api.aisino.console.vehicle.VehicleInvoiceExpBo ;
import com.jianshui.invoice.domain.ele.EleNewMessage ;
import com.jianshui.invoice.domain.vo.api.aisino.console.AisinoConsoleInvoiceAddVO ;
import com.jianshui.invoice.domain.vo.api.aisino.console.DownloadJdcVO ;
import com.jianshui.invoice.mapper.* ;
import com.jianshui.invoice.service.IInvoiceApiService ;
import com.jianshui.invoice.utils.BillInfoUtils ;
@ -45,6 +49,8 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.stereotype.Component ;
import org.springframework.util.CollectionUtils ;
import org.w3c.dom.Node ;
import org.w3c.dom.NodeList ;
import javax.servlet.http.HttpServletRequest ;
@ -266,10 +272,13 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
try {
// 控制台文档给的不对,反了
String jdcbz = aisinoConsoleInvoiceAddDTO . getJDCBZ ( ) ! = null ? aisinoConsoleInvoiceAddDTO . getJDCBZ ( ) : "" ;
log . info ( "机动车标志:{}" , jdcbz ) ;
if ( "1" . equals ( jdcbz ) ) {
aisinoConsoleInvoiceAddDTO . setJDCBZ ( "2" ) ;
} else if ( "2" . equals ( jdcbz ) ) {
aisinoConsoleInvoiceAddDTO . setJDCBZ ( "1" ) ;
} else {
aisinoConsoleInvoiceAddDTO . setJDCBZ ( "2" ) ;
}
//hutool的beancopy别名会与JSONUTIl冲突
@ -355,12 +364,14 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
queryInvoiceBack . setSystemOrderno ( billInfo . getSystemOrderno ( ) ) ;
List < InvoiceBack > invoiceBackList = invoiceBackMapper . selectInvoiceBackList ( queryInvoiceBack ) ;
if ( CollectionUtils . isEmpty ( invoiceBackList ) ) {
queryInvoiceBack . setId ( IdUtils . randomUUID ( ) ) ;
queryInvoiceBack . setIdentity ( companyservice . getIdentity ( ) ) ;
queryInvoiceBack . setBackUrl ( callBackUrl ) ;
queryInvoiceBack . setStatus ( "0" ) ;
queryInvoiceBack . setCreateTime ( new Date ( ) ) ;
queryInvoiceBack . setSystemOrderno ( billInfo . getSystemOrderno ( ) ) ;
queryInvoiceBack . setBackMsg ( "" ) ;
invoiceBackMapper . insertInvoiceBack ( queryInvoiceBack ) ;
} else {
queryInvoiceBack = invoiceBackList . get ( 0 ) ;
}
@ -370,7 +381,13 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
AsyncManager . me ( ) . execute ( new TimerTask ( ) {
@Override
public void run ( ) {
callBackAisino ( finalQueryInvoiceBack , callBackUrl , invoice . getId ( ) ) ;
try {
Long c = Long . valueOf ( RandomUtil . randomInt ( 3 , 5 ) ) ;
Thread . sleep ( c * 1000 ) ;
callBackAisino ( finalQueryInvoiceBack , callBackUrl , invoice . getId ( ) ) ;
} catch ( InterruptedException e ) {
}
}
} ) ;
@ -393,6 +410,8 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
* /
private void callBackAisino ( InvoiceBack invoiceBack , String callBackUrl , Long id ) {
// TODO: 2023/10/27 回调处理
if ( id = = null ) {
log . info ( "【控制台】发票回调,id为空" ) ;
return ;
@ -412,12 +431,12 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
cn . hutool . json . JSONObject jsonObject = JSONUtil . parseObj ( result ) ;
if ( jsonObject ! = null ) {
String status = jsonObject . get ( "status " ) ! = null ? jsonObject . get ( "status " ) . toString ( ) : "" ;
String message = jsonObject . get ( "m essage" ) ! = null ? jsonObject . get ( "m essage" ) . toString ( ) : "" ;
String status = jsonObject . get ( "Result " ) ! = null ? jsonObject . get ( "Result " ) . toString ( ) : "" ;
String message = jsonObject . get ( "M essage" ) ! = null ? jsonObject . get ( "M essage" ) . toString ( ) : "" ;
if ( "0000" . equals ( status ) ) {
invoiceBack . setStatus ( "1" ) ;
invoiceBack . setBackMsg ( "发票信息未查询到" ) ;
invoiceBack . setBackMsg ( message ) ;
invoiceBackMapper . updateInvoiceBack ( invoiceBack ) ;
} else if ( "9999" . equals ( status ) ) {
invoiceBack . setStatus ( "3" ) ;
@ -796,7 +815,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
//发起请求
AjaxResult ajaxResult = null ;
try {
ajaxResult = AisinoConsoleUtil . sendRequestXML ( AisinoConsoleConstants . RED_UPLOAD , "129 " , param , companyservice ) ;
ajaxResult = AisinoConsoleUtil . sendRequestXML ( AisinoConsoleConstants . RED_UPLOAD , "0200 " , param , companyservice ) ;
} catch ( Exception e ) {
log . error ( "【销项发票】【总部控制台接口】【发票作废】发票请求异常,请求报文{},销方信息{}" , "" , JSONObject . toJSONString ( companyservice ) ) ;
e . printStackTrace ( ) ;
@ -846,60 +865,35 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
throw new JianshuiServiceException ( "金税盘编号未配置,请联系管理员!" ) ;
}
String goldenTaxDiskNo = companyserviceDetailList . get ( 0 ) . getGoldenTaxDiskNo ( ) ;
String fjh = companyserviceDetailList . get ( 0 ) . getFjh ( ) ;
// 组装报文
AisinoConsoleInvoiceRedDownloadDTO downloadDTO = BeanUtil . copyProperties ( downloadRedInfoDTO , AisinoConsoleInvoiceRedDownloadDTO . class ) ;
AisinoConsoleInvoiceRedDownloadDTO downloadDTO = BeanUtil . copyProperties ( downloadRedInfoDTO , AisinoConsoleInvoiceRedDownloadDTO . class ) ;
downloadDTO . setYQZT ( "N" ) ;
downloadDTO . setXXBFW ( "0" ) ;
downloadDTO . setPAGENO ( "1" ) ;
downloadDTO . setPAGESIZE ( "1000" ) ;
downloadDTO . setNSRSBH ( companyservice . getSellertax ( ) ) ;
downloadDTO . setSBBH ( goldenTaxDiskNo ) ;
downloadDTO . setKPJH ( fjh ) ;
downloadDTO . setXXBBH ( downloadRedInfoDTO . getBillInfoNo ( ) ) ;
downloadDTO . setTKRQ_Q ( downloadRedInfoDTO . getBillTimeBegin ( ) ) ;
downloadDTO . setTKRQ_Z ( downloadRedInfoDTO . getBillTimeEnd ( ) ) ;
String param = JSONUtil . toXmlStr ( JSONUtil . parse ( downloadDTO ) ) ;
param = "<?xml version=\"1.0\" encoding=\"GBK\"?>\n" +
"<FPXT>\n " +
"<INPUT>\n " +
param = "" +
"<FPXT>" +
"<INPUT>" +
"" + param + "</INPUT>" +
"</FPXT>" ;
/ * param = "<?xml version=\"1.0\" encoding=\"GBK\"?>\n" +
"<FPXT>\n" +
"<INPUT>\n" +
"<!--企业税号-->\n" +
" <NSRSBH>370103999999060</NSRSBH>\n" +
" <!--设备编号(必传)-->\n" +
" <SBBH>661027630342</SBBH>\n" +
" <!--开票机号(非必传)-->\n" +
" <KPJH>0</KPJH>\n" +
" <!--逾期状态:N非逾期;Y逾期(固定传N,没有逾期)-->\n" +
" <YQZT>N</YQZT>\n" +
" <!--填开日期(信息表申请日期)起,可空-->\n" +
" <TKRQ_Q>2019-04-01</TKRQ_Q>\n" +
" <!--填开日期(信息表申请日期)止,可空-->\n" +
" <TKRQ_Z>2019-05-01</TKRQ_Z>\n" +
" <!--购方税号,可空-->\n" +
" <GFSH></GFSH>\n" +
" <!--销方税号,可空-->\n" +
" <XFSH></XFSH>\n" +
" <!--信息表编号,查询条件,为空的时候信息表编号不作为查询条件-->\n" +
" <XXBBH></XXBBH>\n" +
" <!--信息表下载范围:0全部;1本企业申请;2其它企业申请(必填,只能0、1、2,不可以其他值)-->\n" +
" <XXBFW>0</XXBFW>\n" +
" <!--页号,从1开始,必传,否则会报错-->\n" +
" <PAGENO>1</PAGENO>\n" +
" <!--每页记录数,如果为空,则查询全部,且PAGENO值必须为1-->\n" +
" <PAGESIZE>1000</PAGESIZE></INPUT>\n" +
"</FPXT>" ; * /
//发起请求
AjaxResult ajaxResult = null ;
try {
ajaxResult = AisinoConsoleUtil . sendRequestXML ( AisinoConsoleConstants . RED_DOWLOAD , "0201" , param , companyservice ) ;
} catch ( Exception e ) {
log . error ( "【销项发票】【总部控制台接口】【发票作废 】发票请求异常,请求报文{},销方信息{}" , "" , JSONObject . toJSONString ( companyservice ) ) ;
log . error ( "【销项发票】【总部控制台接口】【红字申请表下载】发票请求异常,请求报文{},销方信息{}" , "" , JSONObject . toJSONString ( companyservice ) ) ;
e . printStackTrace ( ) ;
throw new JianshuiServiceException ( "系统异常!" ) ;
}
@ -913,16 +907,47 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
String retcode = resultJSON . get ( "retcode" ) ! = null ? resultJSON . get ( "retcode" ) . toString ( ) : "" ;
String retmsg = resultJSON . get ( "retmsg" ) ! = null ? resultJSON . get ( "retmsg" ) . toString ( ) : "" ;
if ( ! StringUtils . equals ( "0000" , retcode ) ) {
// 返回结果处理
if ( ! StringUtils . equals ( "0" , retcode ) ) {
return new HXResponse ( retmsg ) ;
}
// TODO: 2023/10/28 返回结果待解析。
/ * if ( sss . indexOf ( "<DATA>" ) ! = - 1 & & sss . indexOf ( "</DATA>" ) ! = - 1 ) {
System . out . println ( "存在" ) ;
String data = sss . substring ( sss . indexOf ( "<DATA>" ) + 6 , sss . indexOf ( "</DATA>" ) ) ;
System . out . println ( data ) ;
if ( StrUtil . isNotEmpty ( data ) ) {
Map < String , Object > map = new HashMap < > ( ) ;
data = Base64 . decodeStr ( data , "GB2312" ) ;
if ( data . indexOf ( "<DATA>" ) ! = - 1 & & data . indexOf ( "</DATA>" ) ! = - 1 ) {
String dataChild = data . substring ( data . indexOf ( "<DATA>" ) + 6 , data . indexOf ( "</DATA>" ) ) ;
return null ;
cn . hutool . json . JSONObject dataChildJson = JSONUtil . parseObj ( dataChild ) ;
String RedInvReqBill = dataChildJson . get ( "RedInvReqBill" ) . toString ( ) ;
cn . hutool . json . JSONArray jsonArray = JSONUtil . parseArray ( RedInvReqBill ) ;
List < DownloadJdcVO > downloadJdcVOList = BeanUtil . copyToList ( jsonArray , DownloadJdcVO . class ) ;
System . out . println ( jsonArray ) ;
}
System . out . println ( map ) ;
}
} * /
return new HXResponse ( "9999" , retmsg ) ;
} else {
return new HXResponse ( "9999" , retmsg ) ;
}
}
/ * *
* 作废结果查询
* /