Compare commits

...

3 Commits

Author SHA1 Message Date
dongxiaoke 8c8c822ddb Merge remote-tracking branch 'origin/beta-prop-all' into beta-prop-all 1 year ago
dongxiaoke 80edfe303e feature: Webservice查验处理 1 year ago
dongxiaoke 478ad31d9d feature: Webservice查验处理 1 year ago
  1. 41
      jianshui-admin/src/main/java/com/jianshui/api/controller/http/income/v1/InvoiceCheckController.java
  2. 26
      jianshui-common/src/main/java/com/jianshui/common/utils/encrypt/JianshuiInvoiceDecryptUtil.java
  3. 5
      jianshui-framework/src/main/java/com/jianshui/framework/config/SecurityConfig.java
  4. 45
      jianshui-income/src/main/java/com/jianshui/income/enums/InvoiceTypeCheck.java
  5. 3
      jianshui-income/src/main/java/com/jianshui/income/service/ICheckInvoice.java
  6. 519
      jianshui-income/src/main/java/com/jianshui/income/service/impl/EleCheckInvoiceImpl.java
  7. BIN
      jianshui-ui/dist20240708.zip

@ -1,10 +1,13 @@
package com.jianshui.api.controller.http.income.v1;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.jianshui.common.core.domain.AjaxResult;
import com.jianshui.common.core.domain.entity.Companyservice;
import com.jianshui.common.enums.ErrorCode;
import com.jianshui.common.utils.StringUtils;
import com.jianshui.income.domain.vo.render.ResponseCheckVO;
import com.jianshui.income.factory.IIncomeRequestFactory;
import com.jianshui.income.factory.IIncomeResponseFactory;
import com.jianshui.income.factory.ICheckServiceFactory;
@ -20,6 +23,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -159,4 +163,41 @@ public class InvoiceCheckController {
return incomeResponseService.response(result, companyservice, "check_multilreqult");
}
@ApiOperation("单个发票查验接口")
@PostMapping(value = "/income/v1/checkNew",consumes = "text/xml;charset=UTF-8", produces = "text/xml;charset=UTF-8")
public Object singleWebService(@RequestBody String xmlData) throws Exception {
ICheckInvoice incomeService = incomeServiceFactory.getService("elephant_income");
String result = incomeService.getInvoice(xmlData);
System.out.println(xmlData);
/*String a = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" +
" <soap:Body>\n" +
" <ns2:getInvoiceResponse xmlns:ns2=\"com.htxx.service\">\n" +
" <return><![CDATA[<?xml version=\"1.0\" encoding=\"GBK\"?><Data><Result><Code>1</Code><Message>查验成功</Message></Result><Fp><Fpdm><![CDATA[037001700107]]]]>><![CDATA[</Fpdm><Fphm><![CDATA[99424340]]]]>><![CDATA[</Fphm><Kprq><![CDATA[2019-05-23]]]]>><![CDATA[</Kprq><Gfmc><![CDATA[个人]]]]>><![CDATA[</Gfmc><Gfsh><![CDATA[]]]]>><![CDATA[</Gfsh><Gfdzdh><![CDATA[]]]]>><![CDATA[</Gfdzdh><Gfyhzh><![CDATA[]]]]>><![CDATA[</Gfyhzh><Xfmc><![CDATA[高新开发区舜华惠嘉餐厅]]]]>><![CDATA[</Xfmc><Xfsh><![CDATA[92370100MA3EKX4426]]]]>><![CDATA[</Xfsh><Xfdzdh><![CDATA[]]]]>><![CDATA[</Xfdzdh><Xfyhzh><![CDATA[]]]]>><![CDATA[</Xfyhzh><Bz><![CDATA[]]]]>><![CDATA[</Bz><Jqbm><![CDATA[661720186729]]]]>><![CDATA[</Jqbm><Fplx><![CDATA[11]]]]>><![CDATA[</Fplx><JYM><![CDATA[54992400011841781948]]]]>><![CDATA[</JYM><ZFBZ><![CDATA[N]]]]>><![CDATA[</ZFBZ><HCBZ><![CDATA[N]]]]>><![CDATA[</HCBZ><Sph><Xh>1</Xh><Spmc><![CDATA[*餐饮服务*餐费]]]]>><![CDATA[</Spmc><Ggxh><![CDATA[]]]]>><![CDATA[</Ggxh><Jldw><![CDATA[]]]]>><![CDATA[</Jldw><Sl><![CDATA[]]]]>><![CDATA[</Sl><Dj><![CDATA[]]]]>><![CDATA[</Dj><Je><![CDATA[52.43]]]]>><![CDATA[</Je><Se><![CDATA[1.57]]]]>><![CDATA[</Se><Slv><![CDATA[3.0%]]]]>><![CDATA[</Slv><Taxcode><![CDATA[3070401000000000000]]]]>><![CDATA[</Taxcode></Sph><Je><![CDATA[52.43]]]]>><![CDATA[</Je><Se><![CDATA[1.57]]]]>><![CDATA[</Se><Jshj><![CDATA[54.00]]]]>><![CDATA[</Jshj></Fp></Data>]]></return>\n" +
" </ns2:getInvoiceResponse>\n" +
" </soap:Body>\n" +
"</soap:Envelope>";*/
result = result.replaceAll("<responseCheckVO>","<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" +
" <soap:Body>\n" +
" <ns2:getInvoiceResponse xmlns:ns2=\"com.htxx.service\">\n" +
" <return><![CDATA[");
result = result.replaceAll("UTF-8","GBK");
result = result.replaceAll("</responseCheckVO>","]]></return>\n" +
" </ns2:getInvoiceResponse>\n" +
" </soap:Body>\n" +
"</soap:Envelope>");
return result.replaceAll("&lt;","<").replaceAll("&gt;",">");
}
}

@ -526,29 +526,9 @@ public class JianshuiInvoiceDecryptUtil {
// String str = "{\"identity\":\"B8FB14CA1C6D7C93D9154E2262FF0F9DD796B180A2A7690A\",\"order\":{\"orderno\":\"No.20160308151221\",\"saletaxnum\":\"110101MXB6CK9Q6\",\"saleaddress\":\"万塘路30号\",\"salephone\":\"0571-1234567\",\"saleaccount\":\"工商银行6222222222222\",\"clerk\":\"sa\",\"payee\":\"sa\",\"checker\":\"sa\",\"invoicedate\":\"2016-03-08 15:12:21\",\"ordertotal\":\"8.00\",\"kptype\":\"1\",\"taxtotal\":\"1.16\",\"bhtaxtotal\":\"6.84\",\"address\":\"浙江杭州 0571-123456789\",\"phone\":\"0571-123456789\",\"taxnum\":\"339900000000004\",\"buyername\":\"浙江爱信诺航天信息有限公司\",\"account\":\"工商-123456789浙江爱信诺航天信息有限公司\",\"message\":\"浙江爱信诺航天信息有限公司\",\"fpdm\":\"\",\"fphm\":\"\",\"detail\":[{\"goodsname\":\"1\",\"spec\":\"1\",\"unit\":\"1\",\"hsbz\":\"1\",\"num\":\"1\",\"price\":\"4\",\"taxrate\":\"0.17\"},{\"goodsname\":\"2\",\"spec\":\"2\",\"unit\":\"2\",\"hsbz\":\"1\",\"num\":\"1\",\"price\":\"4\",\"taxrate\":\"0.17\"}]}}";
// String str = "53316a496c4a524c58424e74567fa67fbca2984d30f04309cf9887a8c1f9de11287b4c8a41b5640888243d0f9de16e335281925cf48eb07d28b241228bb27af3bb9bb21328b9967f5219cb9c7ff3f818f0dbfbb8c6246eeda7909b8057a305b9fa4c95b8c98bf67300300b6e2e3c7acbb353289bb0496125698cf5719dcbbd2f81b6627e25b040c883866f290ee75d7931bf00c0f8fd6b89ffaab386f22114275687fe618458da978b8bc3bc302fdaa3bb8c06199a877bd5fdb1c628d0c18ad1b7e9038ad88ff3f37f9c212c31a994696d910e9ee403db58c9f557ac051c4bd7b441f5ba6e53eec828191545a3cd1f82a0a9bab46cc42c271ee7d6043f35d32ee9ec9014a015333f9f0cbc2cf0db816d44424606ea4370364cccd303c369efef51870a2bfe7c80d680f3ff9a40619e2bf94e3407a5315cd3ca7086489481c4004cf8ab90ed29e1c942b275ad956ef045efa5d6950036091f02d2165a7a1953e00bbe2d0e276ba5b7b9e47f106d8addfcef2d1e7bed39ab6b1a25de650f068596dbefd6cf9be4c7e3b50cadc0d49e370b3d6d9268ee73b3d5b1fcbf253f2785743484e9fd213582b7866d58672afb8603ec0f1a730b98469355d98c05205a7b497fb91e67b85af1fb2e5c388655819af08f5bea958704eb637f00073439aa968ea345f6befce238e65cb4d753483c94f58898991d0e096508350c56589ac2abe4b6e9f901cf414992d2a1f38887d885e0cecea164794ebdbd6dde7102a70a4ff1174b8791e824699b740cdf9d8c217f667ca209bcc7a927495036ed21ce280dfc2c1eb1a740d4021a5378cf11d1ac105a4b5107ee5831b831b2f30adf79527603578cd9d875fb0d5a974ec57354ef2a8e82ec23b0172a4d56f8d50898096c6bc6e6f5ebf49f1109f756be881457b206db1905b88d8922fc78507705dec5706e6d18d31b413e55541f4b394ea6f2a906e902dfea104efe30c0f909e25cba571be6703da5f589fe488bdb810cd9ed426f3a73476128a8393e9b40c96ec430a66412be6f613c63a9e94091f87a7daa6043b1be37fa6e7cc0520352cae8aaa7cbd26dce78f2a9419d39bf1f109249d64d5f34454dab0f3c9b1466192104790a9371794c6ea73838ec6197a87c87f328bc0921cc8e0d060b1d757fee0d59df84b1116519935c16d7b89655c78eb782c08fdcc04d60c8b7df32852a90cf72a10aace001fd0d56b2036a2f614fa695c506e96859c4227e09f4ec3f05cdaabd41127063b150b825a1905b1c26bf17cac02cefaefeb4265a531de3ccc1507609717418d34628542a6a95d49e1126d590b921c360ae18896d715bb5f9770e962966e6059693d8e7cdfed5dc1452b709ee5dfc96f9e679a40ec6e937792aa9f8c9268e31ebf21788352eb98cb658707b844f859c21aa2b62d2ff247f1b2e81b49e2028bc759bf2df4e54c151650ad0147c7e9e23d0d7364db0fa0810a404412c07f13389310200b114917c42a4ab7542170d5176b927972910b359b2fdb9809ae087f3edccab738f01ea5df1a7a2e05964363194ebdcd5dcb5d36b20621f4bb0837f8c9938aa6c8250e5430b0485c7aac982b83dc91c691d0d98fe110a7a0b31b324469887659b87ea4116f5039b4419816ff6a3dfc28431fd0c00360ac9bc1536ed11f1d9fde938fd057a5b9e4a4a87af81d72399b4475d431b7c65f1ce1626e696a45a7186b01e26b1c3710df3efd098af0e396c5c117294e81a6ea1874a396736207d9c92a7db2a92c2adc5061498d11a167915a34536d38f29c2a7e5574fbf1e2d8e3cc1c621305fdf97e0b64cfbbc94b76aa66b20a82b189894b5b3e369bdb639a55ab40f7afed7840eb836bc9a54ffdd228476b1085855e883975526826d2efbbb1aadf7c10f1441e28d7d515846";
// String str = "543071746f37496638525641668e5246a6a424c1bd74a49fab978c707fd3b1aa3112a3134dbe42fb0108eccf0a4025cf3b173b77f6a32d0992f053062b56a60854e644add6a9da006690a43edeaf6e16ea8ee48a6eb23a6cc2da19bc8dcae068061fc6a292aa170770c050b370bcf7df2b5092b2212855ed15f0d4fe6159b0be9536ffcb32c2ec50bcbc899994b0be2d78a55b6a996d1e14384301e5676b9e2aac878eded4d7f2e19096b27662f4881123032ff8a80e096db65db55329400a1fdcd0aa8798be857020e93ca310a285169500d7ee51f527d85c4ace198717fb0831978f266fba0fc92191b6298f441cc7d6c17b178483a250444afd98f3255e032b482b6dbfe19b89067cda1d5b9be23e7b305b74cc9df481cbddc22119c84f7d59ed9286e91fd5c4187c81b9858e06354ccb384f64269c42b4f36c03ede6a2a9b350fa1bd57a61d353fa25a2e1f34bd896587824a10493fe19df3b41d22e0e2c298c4c0e827595763d4c7d93787b2e32baf6d571d0676a8178059bbeebe7dd00b76c31da713c750f00cf48034df6c958e830fada5fc57fcc728111ac3dc8fb28b3c134eb3aa1b7247085bd6eaca3461002a710209992079502a52869a0e7ad0f632de6ee118f05f9de9caffaa17467c88c3cdaea47f0a5da3925502d1cef3b67a0d0fbdc7752c975cf28ad1c92c93c21d6e3fc2d92e565f2f23131328c10a92e1843e9155b7cb01a5c7ec79dc6ab77644056bbae76696f6babad6725dcf181130733aaf4eeec7cca4ce060e2fef448a4ee2b8b970546f919538738ed0140bb507b66f7599aa2437245ac772756f0e4d6fe9a917932612082667bf07c908646148c7ca0c3d8bdd4ff0717f1226d4e321dbe4cb584dfca0669f8f00dd53d04b4e3d4114e390fecd49e3e4733f493f6097de40254b7bc0fe29ed603cb041563ac75380d8a90fd090f10407c5b4f158ef7f0690698f54ab3162aa44df33577a295c87cda736cf55cca6e9ef8b8230577b69b864557cb38de63fcfc6129d1224a002c2677460b05a6bb7b2fd9170ae6837838b843ea26eac966300f4f07a5caf88d92bc252a495fd73df59ba37d961b43d3845e1a40deeccaa82fd0456cd2db89201951bc737455f78e5dd15024acf411bf5df82db7e74b0f7f8dbe9787fa3cae7de1a993bca5ea37ccd8eba5783cfe43d2d2075780243685d8499d1a66dcc846d617a44f0d1968e456c6a4f4701a3ee77d26a3bcc030f162798214849af65e4a38bffa769354181c623238eb8f885ada17551c840d844d785b1c138664dcdb584bee88d372fb863ad3bb064ffe03c6e503c7216bb5d2a8c8bc50b3c0fd8e331972093447390496904393fc397c6dc147f4a177dd76c9ff0ba43cb8039a1d14f6ed1b165cca33a92d71af5ed26a484962aa6cbe8f906f8370adf7127c5b8a2b4d98099605c0a26735475c080fc3cbfe23a6902ea912ef813c74a915b1bb3ed116a65ccd7aa0943a5b2867b6b03eed0f30d4060dcebc791a4c46ab3e64ca583192b053a6d7aa99cf9c395a3ba155477b5e788dc28f6f431772faf192334602d084bdb908a21841ac1402649cc9c12440603f5488de41a2a9bd2e3da4ed153fa41740e94f92966c853957499f6125b88769abb0dc8e0123d852baac0ef1300f5c07ad9854c38861f8d17d9f98545f32ef4c397571d91996bb6f56bd3071df71915186ca65607e12c1241e647593cd16f637e5cb19eac64080f6917a4ce82aaa66bccd140d9df8d79f6e44d00a81d457e81f284ceddec827f1e589963fddf7c4636f033590076d8759c03e39370efd8c6740529785e594f7594f2f8bf9a5d5a4862eb9ca13ffcd2449f890359ebbca702d44dd28b4f392714788b3bc8321dcb55d9a7dc46718c84ae40711c2d8b52ca99f5d89b6d20888e9a5cf62a0c295aa566b0617ff8bf6c9e4a634ae62f4fa3cd3935315e9cc98aa98af0c895a7b0778cc703d176ca0a24abff161e193d8ac8cbe5fe469104992c7b2217834ddf77e59df32d2ce9e0f99bb6bfa89a680fad18882a3210466789356087a0f3ce9351d1aaaf667a67166a9049de4290f506f6f1bf0c5dd37b69eff7f7e8935408da8ff41c09d07f7345b23fc5f615021651f81c16f143f7e85b3c5b16f0a967964659754ec180d96a37c0854443f2d1bcbd55ea63a33b7981479588a27f033c4da5bc6900be68cc98e5c7e44b1f56b2bbe4ad527de711d3ce6c43addf740036fcb289120e89309b6c64b997f969c6937d26f6bb8245dd3c8c3af183aa12497a909372c977845d3eefafdb5523188834401903d1626cf3d5499f06af7658de591ca88";
String str = "ySwm3tdYPVs2E/lIZq3nJ0VqB6dtgkebY4voEBXqX9sMXR0NQ5WZNDo3J8LCWQxQeUDQVNpY2TSY\n" +
"mWOPWOfVIm42JmQPI0eOO+45CUL116pOYI7/iJ8jfn64lQIXNgD4R4l8I/SWdz8Krcgwoij9Tt95\n" +
"qjYFNcC8RxkUud1htUdjbhO08lTYWxWggP+PlwV/OvWdVCSqcYxHamo2DZr7LxTZWVEDvwUs1XMk\n" +
"EZdjFxW31bIbR4C8yp23Np8pVUIwPIbevtBRELM3eoXKQ9qxeiEPYCiroYQLCb46M9RUyKZ/1oxt\n" +
"PjFQYimgbMqhrFsTsHD9bLRXmAidRzbQxI2rOAHMajTw6bPEfq25Eb8t9vYSdglh8xlAxzfljn5m\n" +
"GZ8mM3GnP4zdweRoTIgQoDsE2GsoX9IAKSOt+cZBW24UEBdIIlqdRINnJjx3IDcfo/brCgKCF5Fa\n" +
"HcUYvq1SzNEjDQRrWRQX5NWidSj09Da+XSMg9gLd9ywzWdkGM/dW/dn+vge0rEjdWvhLzZNoqqwv\n" +
"SPZU0ir20OSfA9VL8cdAxX+X0qvnsi8Em475qDkyEeBQgWgIqmsoXEQc7ffijbLoCn0J+LdqxNwF\n" +
"S4pn+Hi384WP2j/Ux5ppFb0bxAc7AxZ4b1FXbAkffBrj52QSNYhcQ0gy3rPsxtgqqe4PSCQnPqHb\n" +
"IJfChgi8zZyCD+t9Ac8A57IYoMtf76lQX3zVIimqw8oyOJY0wvBBJBJVEvncK17wJlk4Hqdz4LY1\n" +
"X+HWk5mSOxv8SA9T7Fe4HHaIGoc3VxCF1eNbKIh6JxVXE4Fh+Zq/DN5sNh8OoucxZf/URe3zzBhp\n" +
"oB3vjcsUDydfbFI/4ZfmMUxMp7EQM8/zNG8a+UEtmdf47aAL674DzRrf19sj3ywbG8ZJR7pXhGSV\n" +
"PjirVxHA2mj9ceylYc3dFP64STE6uvgaiKppG7m3n1IbBFpJUpEQuMu9hb7TDNFRCQOpASHI2NiP\n" +
"KlQ9M00gjQW9cbeWTIGnGoRkG66sEwZag0i0UV57Yd1H/QZKD+t5zLwlwV/nr67eVI1ML8PqHTF6\n" +
"EH12X6CtwajtnEI4AEm4z0TD3fJ+M38OEGUhtOazr0NnTeVagVObmjAWK7OgwfG7NVXutdjmJjr1\n" +
"UCJT65mZNcZ7WC73Cf1Gj4GJ+MK2YNXR9LZp5iH+2it+d+QHlJi7CrNv+sAniWYBEKeFqISsH9cq\n" +
"/APKWyRTRnUZqnfxQgkNXknESOP59IElMGk/Wv5utMsigidfji6VX8kWS92W3mjXCyJgiKnHKjqR\n" +
"oB7sNmBFTijKAQQWzGkxQJvsSnTjZLUvuez0SEONbthDiWSNEluFEaMCABZiA/329Z0Zg4Yp/nUS\n" +
"Ft8SQH60T6YljvHignCbQtGyj7oqjMX28mqYN3M53TjADeov/LT2WzDOGYr7Z1WNSXxwmgW52C/t\n" +
"1p/C9LpsYLyFzEmLWrRd0g/8QmOm95wFdMtzraMDw8BibY4zp/ICdok6q2vgeofZ5d84o3by23ne\n" +
"mtFrBQ+uZ8VlqIKvlm6HtSCiYNUjTcTAu0LnATeQXvGWNkZKpeDHtQxd5NQnhLZcTRuZk/iQd5uF\n" +
"ok/pZaeDQLTMRUoCXqs7biipRpND5a5YOzLA+rN+9EW+TjOyE3GM73kLjw==";
str=decrypt(str,"RzVdCHPvtOPvub5T0xbs6A==");
// String str = "LifVh2BkgTOsVG5PKvxdg11JvJMmZwIb46fuDbMTJexZ1D6DbJQqEvw0OGxwOQGMOwUHNS15yB9unCNiCI7qf6ccSkIQGWHvysrTaz4R2yZ+WGo9HzXeqYUGya/1bUp9zgF5cNQY0tJ7LVbMNJWYG9OvLn7PvLtV8Oas/OR9AGpKgKXLpzFQqmu9d89bltxRRs";
String str = "+z1ernhDQtMrB6dZD1uKDqFXZkcmtfwX9B1E7HGmPDQgc4FpKpfVlPzltS4SIiXXXFjx9UGHHmzH\\nPWDzrYhG0gQpcWNzoQAr7Ycpd682IBDe9mQVFVrR5i41m3V7tMqFA1/SF2RMtU3ez8MBPU0wYW3h\\nMuxmCYwr1tjcjireoGIv7erYRtPbJ1/s/GSoFyicmRfrs9oFsJo=";
str=decrypt(str,"4H36m03LjyeQSg974yoO8Q==");
System.out.println(str);
// str=decrypt(str);
// System.out.println(str);

@ -135,7 +135,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
"/invoice/QueryFastRedInvoiceResult",
"/invoice/issueFastRedInvoice",
"/invoice/fastRedInvoice",
"/invoice/queryInvoiceList"
"/invoice/queryInvoiceList",
"/invoice/fastRedInvoice",
"/webservice/income/v1/checkNew/**",
"/income/v1/checkNew/**"
)
.permitAll() // 所有原有发票
.antMatchers(

@ -0,0 +1,45 @@
package com.jianshui.income.enums;
public enum InvoiceTypeCheck {
SHU_DIAN_ZHUAN_PIAO("1", "数电专票"),
ZHUAN_PIAO("01", "专票"),
SHU_DIAN_PU_PIAO("2", "数电普票"),
JI_DONG_CHE_PIAO("03", "机动车票"),
ZHENG_ZHI_SHUI_PU_TONG_FA_PIAO("04", "增值税普通发票"),
DIAN_ZI_ZHUAN_YONG_FA_PIAO("08", "电子专用发票"),
DIAN_ZI_PU_PIAO("10", "电子普票"),
JUAN_PIAO("11", "卷票"),
TONG_XING_FEI_FA_PIAO("14", "通行费发票"),
ER_SHOU_CHE_PIAO("15", "二手车票"),
QUAN_DIAN_ZHUAN_PIAO("21", "全电专票"),
QUAN_DIAN_PU_PIAO("22", "全电普票");
private String code;
private String displayName;
private InvoiceTypeCheck(String code, String displayName) {
this.code = code;
this.displayName = displayName;
}
public String getCode() {
return code;
}
public String getDisplayName() {
return displayName;
}
public static InvoiceTypeCheck fromCode(String code) {
for (InvoiceTypeCheck type : InvoiceTypeCheck.values()) {
if (type.getCode().equals(code)) {
return type;
}
}
throw new IllegalArgumentException("Invalid InvoiceTypeCheck code: " + code);
}
}

@ -36,4 +36,7 @@ public interface ICheckInvoice {
* @return
*/
public AjaxResult checkInvoiceMultilResult(Companyservice companyservice, JSONObject data);
public String getInvoice(String xmlData) throws Exception;
}

@ -1,29 +1,48 @@
package com.jianshui.income.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.XmlUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jianshui.common.core.domain.AjaxResult;
import com.jianshui.common.core.domain.entity.Companyservice;
import com.jianshui.common.utils.Base64Util;
import com.jianshui.common.utils.ElephantCommonUtils;
import com.jianshui.common.utils.InvoiceUtils;
import com.jianshui.common.utils.StringUtils;
import com.jianshui.common.exception.jianshui.JianshuiServiceException;
import com.jianshui.common.utils.*;
import com.jianshui.income.constant.elephant.ElephantConstants;
import com.jianshui.income.domain.entity.*;
import com.jianshui.income.domain.vo.render.*;
import com.jianshui.income.enums.InvoiceTypeCheck;
import com.jianshui.income.factory.ICheckServiceFactory;
import com.jianshui.income.mapper.*;
import com.jianshui.income.service.ICheckInvoice;
import com.jianshui.income.utils.elephant.ElephantUtils;
import com.jianshui.queue.utils.RedisQueueUtil;
import com.jianshui.system.domain.CompanyserviceProp;
import com.jianshui.system.service.ICompanyservicePropService;
import com.jianshui.system.service.ICompanyserviceService;
import com.jianshui.system.service.IServiceManageService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.StringReader;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@ -56,6 +75,19 @@ public class EleCheckInvoiceImpl implements ICheckInvoice {
private InvoiceCheckUsedCarMapper invoiceCheckUsedCarMapper;
@Autowired
private ICheckServiceFactory incomeServiceFactory;
@Autowired
private IServiceManageService serviceManageService;
@Autowired
private ICompanyserviceService companyserviceService;
@Autowired
private ICompanyservicePropService companyservicePropService;
/**
* @return
* @Title 单个发票校验
@ -1103,4 +1135,481 @@ public class EleCheckInvoiceImpl implements ICheckInvoice {
}
public String getInvoice(String xmlData) throws Exception {
log.info("webservice请求报文:xmlData:{}", xmlData);
String cdataContent = "";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析XML字符串
Document doc = builder.parse(new InputSource(new StringReader(xmlData)));
// 获取<arg0>元素
NodeList arg0Nodes = doc.getElementsByTagName("arg0");
Node arg0Node = arg0Nodes.item(0);
cdataContent = arg0Node.getTextContent();
doc = builder.parse(new InputSource(new StringReader(cdataContent)));
String TaxCode = transformationParam(doc, "TaxCode");
String Password = transformationParam(doc, "Password");
String InvCode = transformationParam(doc, "InvCode");
String InvNo = transformationParam(doc, "InvNo");
String InvTime = transformationParam(doc, "InvTime");
String InvOther = transformationParam(doc,"InvOther");
DocumentBuilder resultBuilder = XmlUtil.createDocumentBuilder();
Document result = resultBuilder.newDocument();
String Kpje = "";
String Jym = "";
if (StringUtils.isEmpty(InvOther)) {
return buildResult(result, "1", "不含税金额/校验码不能为空", null);
}
// 获得value
if (StringUtils.isEmpty(TaxCode)) {
return buildResult(result, "1", "税号不能为空", null);
}
// 根据税号获得companyService
Companyservice companyservice = companyserviceService.selectCompanyserviceByTaxcode(TaxCode);
if (companyservice == null) {
return buildResult(result, "1", "税号不存在", null);
}
if (StringUtils.isEmpty(Password)) {
return buildResult(result, "036", "查验交互密码为空,不能进行查验", null);
}
// 全电发票没有发票代码
if (StringUtils.isEmpty(InvNo)) {
return buildResult(result, "1", "发票号码不能为空", null);
}
if (StringUtils.isEmpty(InvTime)) {
return buildResult(result, "1", "开票日期不能为空", null);
}
boolean isMatch = ReUtil.isMatch("^\\d{4}-\\d{2}-\\d{2}$", InvTime);
if (!isMatch) {
return buildResult(result, "1", "开票日期格式错误 yyyy-MM-dd", null);
}
// 如果Jym这个参数为空,我就去判断InvOther是否为6位且不带小数点,如果确实如此,那就直接将InvOther作为校验码传给大象
// 2023.03.09 如果InvOtherNode是6位且不到小数点,那么就直接将InvOtherNode作为校验码传给大象
if (StringUtils.isNotEmpty(InvOther)) {
// 判断InvOther是否为6位且不带小数点
if (InvOther.length() == 6 && !InvOther.contains(".")) {
Jym = InvOther;
}else{
Kpje = InvOther;
}
}
String Fpzl = "";
// 如果发票号码位数为20位,则fpzl为21,否则为01,中举在2022-12-06 20:08给巩权林说的解决方案,是大象那边提的,可以用来适配远得
if (InvNo.length() == 20) {
Fpzl = "21";
} else {
Fpzl = "01";
}
CompanyserviceProp keyProp = companyservicePropService.selectPropByKey(companyservice.getCompanyid(), "webservice_password");
if (keyProp == null || !StringUtils.equals(keyProp.getValue(), Password)) {
return buildResult(result, "035", "交互密码错误,请确认密码是否输入正确!", null);
}
// 调用发票查询接口
String serviceKey = "";
try {
serviceKey = serviceManageService.getCompanyServiceSupplier("income", companyservice.getCompanyid());
} catch (Exception e) {
e.printStackTrace();
return buildResult(result, "1", "发票查询失败", null);
}
if (StringUtils.isEmpty(serviceKey)) {
log.error("【发票查询失败】companyid:{},serviceKey为空", companyservice.getCompanyid());
return buildResult(result, "1", "发票查询失败", null);
}
ICheckInvoice incomeService = incomeServiceFactory.getService(serviceKey);
if (incomeService == null) {
log.error("【发票查询失败】companyid:{},serviceKey:{},incomeService为空", companyservice.getCompanyid(), serviceKey);
return buildResult(result, "1", "发票查询失败", null);
}
// 调用发票查询接口
JSONObject request = new JSONObject();
request.put("fpzl", Fpzl);
request.put("fpje", Kpje);
request.put("fpdm", InvCode);
Date kprqDate = null;
try {
kprqDate = DateUtils.parseDate(InvTime, "yyyy-MM-dd");
} catch (ParseException e) {
log.error("【发票查询失败】companyid:{},serviceKey:{},kprqDate解析失败", companyservice.getCompanyid(), serviceKey);
}
String kprq = InvTime;
if (kprqDate != null) {
kprq = DateUtils.parseDateToStr("yyyyMMdd", kprqDate);
}
request.put("kprq", kprq);
request.put("fphm", InvNo);
request.put("jym", Jym);
AjaxResult invoiceResult = incomeService.checkInvoiceSingle(companyservice, request);
log.info("【发票查询结果】companyid:{},serviceKey:{},param:{},invoiceResult:{}", companyservice.getCompanyid(), serviceKey, request, JSONObject.toJSONString(invoiceResult));
if (invoiceResult.isError()) {
if ("超过该张票当天查验次数".equals(invoiceResult.getMsg())) {
return buildResult(result, "002", "超过该张发票当日查验次数(请于次日再次查验)!", null);
} else if ("查验异常".equals(invoiceResult.getMsg())) {
return buildResult(result, "084", "开票金额或校验码不合法!", null);
} else if ("请求不合法".equals(invoiceResult.getMsg())) {
return buildResult(result, "005", "请求不合法!", null);
} else if ("发票不存在".equals(invoiceResult.getMsg())) {
return buildResult(result, "009", "查无此票!", null);
} else {
return buildResult(result, StrUtil.padPre(String.valueOf(invoiceResult.getCode()), 3, '0'), invoiceResult.getMsg(), null);
}
}
if (invoiceResult.isSuccess()) {
JSONObject resp = invoiceResult.getJsonData();
Integer robUser = resp.getInteger("robUserMoney");
if (robUser != null && robUser >= 1) {
serviceManageService.companyConsume("income", companyservice.getCompanyid());
}
}
// 如果开票成功
JSONObject invoiceJsonResult = invoiceResult.getJsonData();
JSONObject resultContent = invoiceJsonResult.getJSONObject("resultContent");
InvoiceCheck invoiceCheck = new InvoiceCheck();
invoiceCheck = EleCheckInvoiceImpl.handelCheckResult(invoiceCheck, resultContent);
GetInvoiceVO getInvoiceVO = new GetInvoiceVO();
// 远得日期格式化
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
String newKprq = "";
try {
Date parseKprq = simpleDateFormat.parse(invoiceCheck.getKprq());
simpleDateFormat.applyPattern("yyyy-MM-dd");
newKprq = simpleDateFormat.format(parseKprq);
} catch (ParseException e) {
new JianshuiServiceException("日期转换错误");
}
// 远得结果集
String zfbz = invoiceCheck.getZfbz();
if (StringUtils.equals(zfbz, "Y")) {
getInvoiceVO.setZfbz("Y");
getInvoiceVO.setHcbz("N");
}
if (StringUtils.equals(zfbz, "H")) {
getInvoiceVO.setZfbz("N");
getInvoiceVO.setHcbz("Y");
}
if (StringUtils.equals(zfbz, "N")) {
getInvoiceVO.setZfbz("N");
getInvoiceVO.setHcbz("N");
}
// 远得返回信息封装
LinkedHashMap<String, String> getInvoiceMap = new LinkedHashMap();
getInvoiceMap.put("fpdm", "<![CDATA[" + invoiceCheck.getFpdm() + "]]]]>><![CDATA[");
getInvoiceMap.put("fphm", "<![CDATA[" + invoiceCheck.getFphm() + "]]]]>><![CDATA[");
getInvoiceMap.put("kprq", "<![CDATA[" + newKprq + "]]]]>><![CDATA[");
// 远得返回信息封装
if (!InvoiceTypeCheck.ER_SHOU_CHE_PIAO.getCode().equals(invoiceCheck.getFpzl()) &&
!InvoiceTypeCheck.JI_DONG_CHE_PIAO.getCode().equals(invoiceCheck.getFpzl())) {
getInvoiceMap.put("gfmc", "<![CDATA[" + invoiceCheck.getGmfmc() + "]]]]>><![CDATA[");
getInvoiceMap.put("gfsh", "<![CDATA[" + invoiceCheck.getGmfsbh() + "]]]]>><![CDATA[");
getInvoiceMap.put("gfdzdh", "<![CDATA[" + invoiceCheck.getGmfdzdh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Gfyhzh", "<![CDATA[" + invoiceCheck.getGmfyhzh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Xfmc","<![CDATA[" + invoiceCheck.getXhfmc() + "]]]]>><![CDATA[");
getInvoiceMap.put("Xfsh", "<![CDATA[" + invoiceCheck.getXhfsbh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Xfdzdh", "<![CDATA[" + invoiceCheck.getXhfdzdh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Xfyhzh", "<![CDATA[" + invoiceCheck.getXhfyhzh() + "]]]]>><![CDATA[");
}
// 远得类型返回信息封装
if (InvoiceTypeCheck.ER_SHOU_CHE_PIAO.getCode().equals(invoiceCheck.getFpzl())) {
// 二手车相关结果
getInvoiceMap.put("gfmc", "<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getMfdwgr() + "]]]]>><![CDATA[");
getInvoiceMap.put("gfsh", "<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getMfdwdmsfzh() + "]]]]>><![CDATA[");
String gfdzdh = invoiceCheck.getInvoiceCheckUsedCar().getMfdwgrdz() + " " +
invoiceCheck.getInvoiceCheckUsedCar().getMfdh();
getInvoiceMap.put("gfdzdh", "<![CDATA[" + gfdzdh + "]]]]>><![CDATA[");
getInvoiceMap.put("Gfyhzh", "<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getKhyhjzh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Xfmc", "<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getSmfdwgr() + "]]]]>><![CDATA[");
getInvoiceMap.put("Xfsh", "<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getSmfdwdmsfzh() + "]]]]>><![CDATA[");
String xfdzdh = invoiceCheck.getInvoiceCheckUsedCar().getSmfdwgrzz() + " " +
invoiceCheck.getInvoiceCheckCar().getSmfdh();
getInvoiceMap.put("Xfdzdh", "<![CDATA[" + xfdzdh + "]]]]>><![CDATA[");
getInvoiceMap.put("Xfyhzh", "<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getKhyhjzh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Jqbm","<![CDATA[" + invoiceCheck.getJqbh() + "]]]]>><![CDATA[");
getInvoiceMap.put("cpzh","<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getCpzh() + "]]]]>><![CDATA[");
getInvoiceMap.put("djzh","<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getDjzh() + "]]]]>><![CDATA[");
getInvoiceMap.put("cllx", "<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getCllx() + "]]]]>><![CDATA[");
getInvoiceMap.put("Cjh", "<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getClsbh() + "]]]]>><![CDATA[");
getInvoiceMap.put("cpxh", "<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getCpxh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Zrdclglsmc", "<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getZrdcgsmc() + "]]]]>><![CDATA[");
getInvoiceMap.put("Cjhj", "<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getCjhj() + "]]]]>><![CDATA[");
getInvoiceMap.put("escsc", "<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getEscsc() + "]]]]>><![CDATA[");
getInvoiceMap.put("Nsrsbh","<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getEscscsbh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Escscdz", "<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getEscscdz() + "]]]]>><![CDATA[");
getInvoiceMap.put("Khyh", "<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getEscsckhyhzh() + "]]]]>><![CDATA[");
getInvoiceMap.put("escscdh", "<![CDATA[" + invoiceCheck.getInvoiceCheckUsedCar().getEscscdh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Fplx", "<![CDATA[" + invoiceCheck.getFpzl() + "]]]]>><![CDATA[");
getInvoiceMap.put("ZFBZ", "<![CDATA[" + invoiceCheck.getZfbz() + "]]]]>><![CDATA[");
getInvoiceMap.put("bz", "<![CDATA[" + invoiceCheck.getBz() + "]]]]>><![CDATA[");
} else if (InvoiceTypeCheck.JI_DONG_CHE_PIAO.getCode().equals(invoiceCheck.getFpzl())) {
// 机动车相关结果
getInvoiceMap.put("gfmc", "<![CDATA[" + invoiceCheck.getGmfmc() + "]]]]>><![CDATA[");
getInvoiceMap.put("gfsh", "<![CDATA[" + invoiceCheck.getGmfsbh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Jqbm", "<![CDATA[" + invoiceCheck.getJqbh() + "]]]]>><![CDATA[");
getInvoiceMap.put("cllx", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getCllx() + "]]]]>><![CDATA[");
getInvoiceMap.put("cpxh", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getCpxh() + "]]]]>><![CDATA[");
getInvoiceMap.put("cd", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getCd() + "]]]]>><![CDATA[");
getInvoiceMap.put("Hgzh", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getHgzs() + "]]]]>><![CDATA[");
getInvoiceMap.put("Sjdh", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getSjdh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Fdjhm", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getFdjhm() + "]]]]>><![CDATA[");
getInvoiceMap.put("Clsbdh", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getClsbh() + "]]]]>><![CDATA[");
if (invoiceCheck.getInvoiceCheckCar().getJszmsh() == null) {
getInvoiceMap.put("Jkzmsh", "<![CDATA[" + "" + "]]]]>><![CDATA[");
} else {
getInvoiceMap.put("Jkzmsh", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getJszmsh() + "]]]]>><![CDATA[");
}
getInvoiceMap.put("Xfmc", "<![CDATA[" + invoiceCheck.getXhfmc() + "]]]]>><![CDATA[");
getInvoiceMap.put("Xfsh", "<![CDATA[" + invoiceCheck.getXhfsbh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Dz", "<![CDATA[" + invoiceCheck.getGmfdzdh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Dh", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getSmfdh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Khyh", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getKhyh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Zh", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getKhzh() + "]]]]>><![CDATA[");
getInvoiceMap.put("zgswjg", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getZgswjgdm() + "]]]]>><![CDATA[");
getInvoiceMap.put("zgswjgmc", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getZgswjgmc() + "]]]]>><![CDATA[");
getInvoiceMap.put("Wspzhm", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getWspzhm() + "]]]]>><![CDATA[");
getInvoiceMap.put("Dw", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getDw() + "]]]]>><![CDATA[");
getInvoiceMap.put("xcrs", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getXcrs() + "]]]]>><![CDATA[");
;
getInvoiceMap.put("Fplx", "<![CDATA[" + invoiceCheck.getFpzl() + "]]]]>><![CDATA[");
getInvoiceMap.put("ZFBZ", "<![CDATA[" + invoiceCheck.getZfbz() + "]]]]>><![CDATA[");
getInvoiceMap.put("sl", "<![CDATA[" + invoiceCheck.getInvoiceCheckCar().getSl() + "]]]]>><![CDATA[");
} else if (InvoiceTypeCheck.ZHUAN_PIAO.getCode().equals(invoiceCheck.getFpzl()) ||
InvoiceTypeCheck.ZHENG_ZHI_SHUI_PU_TONG_FA_PIAO.getCode().equals(invoiceCheck.getFpzl()) ||
InvoiceTypeCheck.DIAN_ZI_ZHUAN_YONG_FA_PIAO.getCode().equals(invoiceCheck.getFpzl()) ||
InvoiceTypeCheck.QUAN_DIAN_ZHUAN_PIAO.getCode().equals(invoiceCheck.getFpzl()) ||
InvoiceTypeCheck.QUAN_DIAN_PU_PIAO.getCode().equals(invoiceCheck.getFpzl())) {
// 专票 增值税普通发票 电子专用发票结果
getInvoiceMap.put("bz", "<![CDATA[" + invoiceCheck.getBz() + "]]]]>><![CDATA[");
getInvoiceMap.put("Jqbm", "<![CDATA[" + invoiceCheck.getJqbh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Fplx", "<![CDATA[" + invoiceCheck.getFpzl() + "]]]]>><![CDATA[");
getInvoiceMap.put("jym", "<![CDATA[" + invoiceCheck.getJym() + "]]]]>><![CDATA[");
getInvoiceMap.put("HCBZ", "<![CDATA[" + getInvoiceVO.getHcbz() + "]]]]>><![CDATA[");
getInvoiceMap.put("ZFBZ", "<![CDATA[" + getInvoiceVO.getZfbz() + "]]]]>><![CDATA[");
} else if (InvoiceTypeCheck.TONG_XING_FEI_FA_PIAO.getCode().equals(invoiceCheck.getFpzl()) ||
InvoiceTypeCheck.JUAN_PIAO.getCode().equals(invoiceCheck.getFpzl()) ||
InvoiceTypeCheck.DIAN_ZI_PU_PIAO.getCode().equals(invoiceCheck.getFpzl())) {
getInvoiceMap.put("bz", "<![CDATA[" + invoiceCheck.getBz() + "]]]]>><![CDATA[");
getInvoiceMap.put("Jqbm", "<![CDATA[" + invoiceCheck.getJqbh() + "]]]]>><![CDATA[");
getInvoiceMap.put("Fplx", "<![CDATA[" + invoiceCheck.getFpzl() + "]]]]>><![CDATA[");
getInvoiceMap.put("jym", "<![CDATA[" + invoiceCheck.getJym() + "]]]]>><![CDATA[");
getInvoiceMap.put("ZFBZ", "<![CDATA[" + getInvoiceVO.getZfbz() + "]]]]>><![CDATA[");
getInvoiceMap.put("HCBZ", "<![CDATA[" + getInvoiceVO.getHcbz() + "]]]]>><![CDATA[");
}
Set<Map.Entry<String, String>> entries = getInvoiceMap.entrySet();
for (Map.Entry<String, String> entry : entries) {
String value = entry.getValue();
if ("".equals(value)) {
entry.setValue("00");
}
}
Element getInvoiceDoc = json2Element(result, "Fp", getInvoiceMap);
// 详情获取
List<InvoiceCheckDetail> details = invoiceCheck.getInvoiceCheckDetail();
LinkedHashMap<String, String> getInvoiceSphVOMap = new LinkedHashMap<>();
if (CollectionUtil.isNotEmpty(details)) {
int count = 1;
for (InvoiceCheckDetail detail : details) {
GetInvoiceSphVO getInvoiceSphVO = new GetInvoiceSphVO();
getInvoiceSphVO.setId(getInvoiceSphVO.getId() + count);
// 远得详情封装
if (!InvoiceTypeCheck.JI_DONG_CHE_PIAO.getCode().equals(invoiceCheck.getFpzl()) &&
!InvoiceTypeCheck.ER_SHOU_CHE_PIAO.getCode().equals(invoiceCheck.getFpzl())) {
getInvoiceSphVOMap.put("xh", "<![CDATA[" + String.valueOf(getInvoiceSphVO.getId()) + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Spmc","<![CDATA[" + detail.getHwmc() + "]]]]>><![CDATA[");
}
// 远得详情封装
if (InvoiceTypeCheck.JUAN_PIAO.getCode().equals(invoiceCheck.getFpzl()) ||
InvoiceTypeCheck.DIAN_ZI_PU_PIAO.getCode().equals(invoiceCheck.getFpzl()) ||
InvoiceTypeCheck.ZHENG_ZHI_SHUI_PU_TONG_FA_PIAO.getCode().equals(invoiceCheck.getFpzl())) {
// 卷票 电普 增值税普通发票 电子专用发票详情
getInvoiceSphVOMap.put("Ggxh", "<![CDATA[" + detail.getGgxh() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Jldw", "<![CDATA[" + detail.getJldw() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Sl", "<![CDATA[" + detail.getSpsl() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Dj", "<![CDATA[" + detail.getBhsdj() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Je", "<![CDATA[" + detail.getJe() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Se", "<![CDATA[" + detail.getSe() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Slv", "<![CDATA[" + detail.getSl() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Taxcode", "<![CDATA[" + detail.getSsflbm() + "]]]]>><![CDATA[");
} else if (InvoiceTypeCheck.QUAN_DIAN_ZHUAN_PIAO.getCode().equals(invoiceCheck.getFpzl()) ||
InvoiceTypeCheck.QUAN_DIAN_PU_PIAO.getCode().equals(invoiceCheck.getFpzl()) ||
InvoiceTypeCheck.ZHUAN_PIAO.getCode().equals(invoiceCheck.getFpzl()) ||
InvoiceTypeCheck.DIAN_ZI_ZHUAN_YONG_FA_PIAO.getCode().equals(invoiceCheck.getFpzl())) {
// 全电专票 全电普票 专票详情
getInvoiceSphVOMap.put("Ggxh", "<![CDATA[" + detail.getGgxh() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Jldw", "<![CDATA[" + detail.getJldw() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Sl", "<![CDATA[" + detail.getSpsl() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Dj", "<![CDATA[" + detail.getBhsdj() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Je","<![CDATA[" + detail.getJe() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Slv", "<![CDATA[" + detail.getSl() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Se", "<![CDATA[" + detail.getSe() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Taxcode", "<![CDATA[" + detail.getSsflbm() + "]]]]>><![CDATA[");
} else if (InvoiceTypeCheck.TONG_XING_FEI_FA_PIAO.getCode().equals(invoiceCheck.getFpzl())) {
// 通行发票
getInvoiceSphVOMap.put("cph", "<![CDATA[" + detail.getCph() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("cllx", "<![CDATA[" + detail.getLx() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("txrqq", "<![CDATA[" + detail.getTxrqq() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("txrqz","<![CDATA[" + detail.getTxrqz() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Je", "<![CDATA[" + detail.getJe() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Se","<![CDATA[" + detail.getSe() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Slv", "<![CDATA[" + detail.getSl() + "]]]]>><![CDATA[");
getInvoiceSphVOMap.put("Taxcode", "<![CDATA[" + detail.getSsflbm() + "]]]]>><![CDATA[");
}
if (!InvoiceTypeCheck.JI_DONG_CHE_PIAO.getCode().equals(invoiceCheck.getFpzl()) &&
!InvoiceTypeCheck.ER_SHOU_CHE_PIAO.getCode().equals(invoiceCheck.getFpzl())) {
Set<Map.Entry<String, String>> entries1 = getInvoiceSphVOMap.entrySet();
for (Map.Entry<String, String> stringStringEntry : entries1) {
String value = stringStringEntry.getValue();
if ("".equals(value)) {
stringStringEntry.setValue("00");
}
}
Element sphElement = json2Element(result, "Sph", getInvoiceSphVOMap);
getInvoiceDoc.appendChild(sphElement);
count++;
}
}
}
// 尾部标签添加
if (!InvoiceTypeCheck.ER_SHOU_CHE_PIAO.getCode().equals(invoiceCheck.getFpzl())) {
// je标签添加
LinkedHashMap<String, String> jeLinkedHashMap = new LinkedHashMap<>();
jeLinkedHashMap.put("je", StringUtils.isEmpty(invoiceCheck.getFpje()) ? "00" : invoiceCheck.getFpje());
Element je = jsonElement(result, "je", jeLinkedHashMap);
getInvoiceDoc.appendChild(je);
// se标签添加
LinkedHashMap<String, String> seLinkedHashMap = new LinkedHashMap<>();
seLinkedHashMap.put("se", StringUtils.isEmpty(invoiceCheck.getFpse()) ? "00" : invoiceCheck.getFpse());
Element se = jsonElement(result, "se", seLinkedHashMap);
getInvoiceDoc.appendChild(se);
// jshj标签添加
LinkedHashMap<String, String> jshjLinkedHashMap = new LinkedHashMap<>();
jshjLinkedHashMap.put("jshj", StringUtils.isEmpty(invoiceCheck.getJshj()) ? "00" : invoiceCheck.getJshj());
Element jshj = jsonElement(result, "jshj", jshjLinkedHashMap);
getInvoiceDoc.appendChild(jshj);
}
return buildResult(result, "1", "查验成功", getInvoiceDoc);
}
private String transformationParam(Document doc, String param) {
log.info("webservice查验:开始转换参数:取参Param={}", param);
NodeList paramNodes = doc.getElementsByTagName(param);
if (paramNodes == null || paramNodes.item(0) == null) {
return "";
}
String content = paramNodes.item(0).getTextContent() != null ? paramNodes.item(0).getTextContent() : "";
log.info("webservice查验:结束转换参数:取参Param值={}", content);
return content;
}
public String buildResult(Document result, String code, String message, Element fp) {
Element Data = result.createElement("Data");
Element Result = result.createElement("Result");
Element Code = result.createElement("Code");
Code.setTextContent(code); // 1:查验成功 其余失败
Element Message = result.createElement("Message");
Message.setTextContent(message);
Result.appendChild(Code);
Result.appendChild(Message);
if (fp == null) {
fp = result.createElement("Fp");
}
Data.appendChild(Result);
Data.appendChild(fp);
// 创建 XML 字符串
StringBuilder xmlStringBuilder = new StringBuilder();
xmlStringBuilder.append("<responseCheckVO>");
xmlStringBuilder.append(XmlUtil.toStr(Data));
xmlStringBuilder.append("</responseCheckVO>");
return xmlStringBuilder.toString();
}
/*private String buildResult(Document result, String code, String message, Element fp) {
Element Data = result.createElement("Data");
Element Result = result.createElement("Result");
Element Code = result.createElement("Code");
Code.setTextContent(code); //1:查验成功 其余失败
Element Message = result.createElement("Message");
Message.setTextContent(message);
Result.appendChild(Code);
Result.appendChild(Message);
if (fp == null) {
fp = result.createElement("Fp");
}
Data.appendChild(Result);
Data.appendChild(fp);
ResponseCheckVO resp = new ResponseCheckVO();
ResponseCheckDataVO vo = new ResponseCheckDataVO();
ResponseCheckResultVO responseCheckResultVO = new ResponseCheckResultVO();
responseCheckResultVO.setCode(Code.getTextContent());
responseCheckResultVO.setMessage(Message.getTextContent());
Object myFp = fp;
vo.setResult(responseCheckResultVO);
vo.setFp(myFp);
resp.setDATA(vo);
return resp;
}*/
private Element json2Element(Document result, String elementName, Map<String, String> jsonObject) {
Element parent = result.createElement(elementName);
jsonObject.keySet().forEach(key -> {
String value = jsonObject.get(key);
// 转为全小写
String firstKey = key.substring(0, 1);
String upperKey = firstKey.toUpperCase();
String endKey = key.substring(1, key.length());
key = upperKey + endKey.toLowerCase();
Element element = result.createElement(key);
element.setTextContent(value);
parent.appendChild(element);
});
return parent;
}
// 尾部标签添加
private Element jsonElement(Document result, String key, Map<String, String> map) {
String value = map.get(key);
// 转为全小写
String firstKey = key.substring(0, 1);
String upperKey = firstKey.toUpperCase();
String endKey = key.substring(1, key.length());
key = upperKey + endKey.toLowerCase();
Element element = result.createElement(key);
element.setTextContent("<![CDATA[" + value + "]]]]>><![CDATA[");
return element;
}
}

Binary file not shown.
Loading…
Cancel
Save