PayBillToolUtil.java 69 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569
  1. package fi.cas.opplugin;
  2. import kd.bos.dataentity.entity.DynamicObject;
  3. import kd.bos.dataentity.entity.DynamicObjectCollection;
  4. import kd.bos.entity.EntityMetadataCache;
  5. import kd.bos.logging.Log;
  6. import kd.bos.logging.LogFactory;
  7. import kd.bos.orm.query.QFilter;
  8. import kd.bos.servicehelper.BusinessDataServiceHelper;
  9. import java.io.*;
  10. import java.math.RoundingMode;
  11. import java.net.Socket;
  12. import java.util.Calendar;
  13. import java.util.Date;
  14. import java.util.HashMap;
  15. import java.util.Map;
  16. import kd.bos.servicehelper.operation.OperationServiceHelper;
  17. import kd.bos.servicehelper.operation.SaveServiceHelper;
  18. import org.w3c.dom.Document;
  19. import org.w3c.dom.Element;
  20. import org.json.JSONObject;
  21. import org.json.XML;
  22. import javax.xml.parsers.DocumentBuilder;
  23. import javax.xml.parsers.DocumentBuilderFactory;
  24. import javax.xml.transform.OutputKeys;
  25. import javax.xml.transform.Transformer;
  26. import javax.xml.transform.TransformerFactory;
  27. import javax.xml.transform.dom.DOMSource;
  28. import javax.xml.transform.stream.StreamResult;
  29. public class PayBillToolUtil {
  30. public static final String ENTITY_NAME = "cas_paybill";
  31. public static final String AGENT_ENTITY_NAME = "cas_agentpaybill";
  32. protected static final Log log = LogFactory.getLog(PayBillToolUtil.class);
  33. public static final String CHANNELCODE_PILIANG="JF";
  34. public static String queryPaymentRequest(DynamicObject payBillEntity) {
  35. try {
  36. DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  37. DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
  38. Document doc = dBuilder.newDocument();
  39. Element rootElement = doc.createElement("Message");
  40. doc.appendChild(rootElement);
  41. Element body = doc.createElement("Body");
  42. rootElement.appendChild(body);
  43. createElement(doc, body, "transcode", "BTSQO001");
  44. createElement(doc, body, "ochannelcode", "JF");//发起渠道
  45. createElement(doc, body, "ochanneldate", payBillEntity.getString("nckd_fqqdrq"));//发起渠道日期
  46. String channelserno = payBillEntity.get("billno")+"-"+payBillEntity.getInt("nckd_bbh");
  47. createElement(doc, body, "ochannelserno", channelserno);//发起渠道流水
  48. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  49. Transformer transformer = transformerFactory.newTransformer();
  50. // 指定编码格式为GBK
  51. transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
  52. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  53. DOMSource source = new DOMSource(doc);
  54. StringWriter writer = new StringWriter();
  55. StreamResult result = new StreamResult(writer);
  56. transformer.transform(source, result);
  57. return writer.toString();
  58. } catch (Exception e) {
  59. e.printStackTrace();
  60. return null;
  61. }
  62. }
  63. /**
  64. * 代发单执行失败,关闭支付
  65. * @param agentpayBillEntity
  66. * @return
  67. */
  68. public static String createSingleAgentPaymentRequest_4(DynamicObject agentpayBillEntity) {
  69. try {
  70. DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  71. DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
  72. Document doc = dBuilder.newDocument();
  73. Element rootElement = doc.createElement("Message");
  74. doc.appendChild(rootElement);
  75. agentPaymentXMLHead(agentpayBillEntity,doc,rootElement,"ACHRDATF");
  76. Element body = doc.createElement("BodyInfo");
  77. rootElement.appendChild(body);
  78. agentPaymentXMLBody_Msg(agentpayBillEntity,doc,body);
  79. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  80. Transformer transformer = transformerFactory.newTransformer();
  81. // 指定编码格式为GBK
  82. transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
  83. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  84. DOMSource source = new DOMSource(doc);
  85. StringWriter writer = new StringWriter();
  86. StreamResult result = new StreamResult(writer);
  87. transformer.transform(source, result);
  88. return writer.toString();
  89. } catch (Exception e) {
  90. e.printStackTrace();
  91. return null;
  92. }
  93. }
  94. /**
  95. * 代发单执行成功,关闭支付
  96. * @param agentpayBillEntity
  97. * @return
  98. */
  99. public static String createSingleAgentPaymentRequest_3(DynamicObject agentpayBillEntity) {
  100. try {
  101. DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  102. DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
  103. Document doc = dBuilder.newDocument();
  104. Element rootElement = doc.createElement("Message");
  105. doc.appendChild(rootElement);
  106. agentPaymentXMLHead(agentpayBillEntity,doc,rootElement,"ACHRDATE");
  107. Element body = doc.createElement("BodyInfo");
  108. rootElement.appendChild(body);
  109. agentPaymentXMLBody_Msg(agentpayBillEntity,doc,body);
  110. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  111. Transformer transformer = transformerFactory.newTransformer();
  112. // 指定编码格式为GBK
  113. transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
  114. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  115. DOMSource source = new DOMSource(doc);
  116. StringWriter writer = new StringWriter();
  117. StreamResult result = new StreamResult(writer);
  118. transformer.transform(source, result);
  119. return writer.toString();
  120. } catch (Exception e) {
  121. e.printStackTrace();
  122. return null;
  123. }
  124. }
  125. /**
  126. * 代发单表头支付信息查询
  127. * @param agentpayBillEntity
  128. * @return
  129. */
  130. public static String createSingleAgentPaymentRequest_5(DynamicObject agentpayBillEntity) {
  131. try {
  132. DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  133. DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
  134. Document doc = dBuilder.newDocument();
  135. Element rootElement = doc.createElement("Message");
  136. doc.appendChild(rootElement);
  137. agentPaymentXMLHead(agentpayBillEntity,doc,rootElement,"ACHRMSGQ");
  138. Element body = doc.createElement("BodyInfo");
  139. rootElement.appendChild(body);
  140. agentPaymentXMLBody_Msg(agentpayBillEntity,doc,body);
  141. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  142. Transformer transformer = transformerFactory.newTransformer();
  143. // 指定编码格式为GBK
  144. transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
  145. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  146. DOMSource source = new DOMSource(doc);
  147. StringWriter writer = new StringWriter();
  148. StreamResult result = new StreamResult(writer);
  149. transformer.transform(source, result);
  150. return writer.toString();
  151. } catch (Exception e) {
  152. e.printStackTrace();
  153. return null;
  154. }
  155. }
  156. /**
  157. * 代发单明细支付信息查询
  158. * @param agentpayBillEntity
  159. * @return
  160. */
  161. public static String createSingleAgentPaymentRequest_6(DynamicObject agentpayBillEntity,String filename) {
  162. try {
  163. DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  164. DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
  165. Document doc = dBuilder.newDocument();
  166. Element rootElement = doc.createElement("Message");
  167. doc.appendChild(rootElement);
  168. agentPaymentXMLHead(agentpayBillEntity,doc,rootElement,"ACHRDTLQ");
  169. Element body = doc.createElement("BodyInfo");
  170. rootElement.appendChild(body);
  171. agentPaymentXMLBody_EntryQuery(agentpayBillEntity,filename,doc,body);
  172. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  173. Transformer transformer = transformerFactory.newTransformer();
  174. // 指定编码格式为GBK
  175. transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
  176. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  177. DOMSource source = new DOMSource(doc);
  178. StringWriter writer = new StringWriter();
  179. StreamResult result = new StreamResult(writer);
  180. transformer.transform(source, result);
  181. return writer.toString();
  182. } catch (Exception e) {
  183. e.printStackTrace();
  184. return null;
  185. }
  186. }
  187. /**
  188. * 代发单重发
  189. * @param agentpayBillEntity
  190. * @return
  191. */
  192. public static String createSingleAgentPaymentRequest_7(DynamicObject agentpayBillEntity) {
  193. try {
  194. DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  195. DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
  196. Document doc = dBuilder.newDocument();
  197. Element rootElement = doc.createElement("Message");
  198. doc.appendChild(rootElement);
  199. agentPaymentXMLHead(agentpayBillEntity,doc,rootElement,"ACHRDATR");
  200. Element body = doc.createElement("BodyInfo");
  201. rootElement.appendChild(body);
  202. agentPaymentXMLBody_Msg(agentpayBillEntity,doc,body);
  203. agentPaymentXMLBody_Entry(agentpayBillEntity,doc,body);
  204. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  205. Transformer transformer = transformerFactory.newTransformer();
  206. // 指定编码格式为GBK
  207. transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
  208. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  209. DOMSource source = new DOMSource(doc);
  210. StringWriter writer = new StringWriter();
  211. StreamResult result = new StreamResult(writer);
  212. transformer.transform(source, result);
  213. return writer.toString();
  214. } catch (Exception e) {
  215. e.printStackTrace();
  216. return null;
  217. }
  218. }
  219. /**
  220. * 代发单发起支付
  221. * @param agentpayBillEntity
  222. * @return
  223. */
  224. public static String createSingleAgentPaymentRequest_2(DynamicObject agentpayBillEntity) {
  225. try {
  226. DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  227. DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
  228. Document doc = dBuilder.newDocument();
  229. Element rootElement = doc.createElement("Message");
  230. doc.appendChild(rootElement);
  231. agentPaymentXMLHead(agentpayBillEntity,doc,rootElement,"ACHRDATD");
  232. Element body = doc.createElement("BodyInfo");
  233. rootElement.appendChild(body);
  234. agentPaymentXMLBody_Msg(agentpayBillEntity,doc,body);
  235. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  236. Transformer transformer = transformerFactory.newTransformer();
  237. // 指定编码格式为GBK
  238. transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
  239. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  240. DOMSource source = new DOMSource(doc);
  241. StringWriter writer = new StringWriter();
  242. StreamResult result = new StreamResult(writer);
  243. transformer.transform(source, result);
  244. return writer.toString();
  245. } catch (Exception e) {
  246. e.printStackTrace();
  247. return null;
  248. }
  249. }
  250. /**
  251. * 代发单付款请求拼接
  252. * @param agentpayBillEntity
  253. * @return
  254. */
  255. public static String createSingleAgentPaymentRequest_1(DynamicObject agentpayBillEntity) {
  256. try {
  257. DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  258. DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
  259. Document doc = dBuilder.newDocument();
  260. Element rootElement = doc.createElement("Message");
  261. doc.appendChild(rootElement);
  262. agentPaymentXMLHead(agentpayBillEntity,doc,rootElement,"ACHRDATI");
  263. Element body = doc.createElement("BodyInfo");
  264. rootElement.appendChild(body);
  265. agentPaymentXMLBody_Msg(agentpayBillEntity,doc,body);
  266. agentPaymentXMLBody_Entry(agentpayBillEntity,doc,body);
  267. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  268. Transformer transformer = transformerFactory.newTransformer();
  269. // 指定编码格式为GBK
  270. transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
  271. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  272. DOMSource source = new DOMSource(doc);
  273. StringWriter writer = new StringWriter();
  274. StreamResult result = new StreamResult(writer);
  275. transformer.transform(source, result);
  276. return writer.toString();
  277. } catch (Exception e) {
  278. e.printStackTrace();
  279. return null;
  280. }
  281. }
  282. public static void agentPaymentXMLHead(DynamicObject agentpayBillEntity,Document doc,Element rootElement,String transcode) {
  283. Element head = doc.createElement("HeadInfo");
  284. rootElement.appendChild(head);
  285. createElement(doc, head, "transcode", transcode);
  286. createElement(doc, head, "channelcode", CHANNELCODE_PILIANG);//发起渠道
  287. Calendar currentdate = Calendar.getInstance();
  288. String datacur = TypeUtils.date2String(currentdate.getTime(),"yyyyMMdd");
  289. String datacur_Hms = TypeUtils.date2String(currentdate.getTime(),"HHmmss");
  290. createElement(doc, head, "channeldate", datacur);//发起渠道日期
  291. String channelserno = datacur+"-"+datacur_Hms+agentpayBillEntity.getString("billNo");
  292. createElement(doc, head, "channelserno", channelserno.substring(0,20));//发起渠道流水
  293. createElement(doc, head, "channeltime", datacur_Hms);
  294. createElement(doc, head, "brno", "");//交易发起机构,可为空,默认100800
  295. createElement(doc, head, "tellerno", "");
  296. createElement(doc, head, "terminalno", "");
  297. createElement(doc, head, "reserve", "");
  298. }
  299. public static void agentPaymentXMLBody_Msg(DynamicObject agentpayBillEntity,Document doc,Element body) {
  300. DynamicObject payeracctbankEntity = BusinessDataServiceHelper.loadSingleFromCache(agentpayBillEntity.getDynamicObject("payeracctbank").getPkValue(), "am_accountbank");
  301. String payeracc = payeracctbankEntity.getString("bankaccountnumber");
  302. String payername = payeracctbankEntity.getString("acctname");
  303. String jgh = payeracctbankEntity.getString("nckd_jgh");
  304. if("".equals(jgh)){
  305. jgh = "791100";
  306. }
  307. String filename=agentpayBillEntity.getString("nckd_filename");
  308. if("".equals(filename)){
  309. filename = agentpayBillEntity.getString("billNo");
  310. }
  311. filename=jgh+filename;//机构号
  312. createElement(doc, body, "FileName",filename );//文件名称
  313. createElement(doc, body, "FileType","01" );//文件类型
  314. //付款账号
  315. createElement(doc, body, "OutRichNbr", payeracc);//出款户口号
  316. createElement(doc, body, "HrSignNbr", agentpayBillEntity.getString("billno"));//人力流水号
  317. createElement(doc, body, "CcyNbr", "156");//币种,写死人名币
  318. createElement(doc, body, "CcyType", "0");//币种,写死人名币
  319. createElement(doc, body, "TotalNum", agentpayBillEntity.getString("count"));//汇总笔数
  320. createElement(doc, body, "TotalAmt", agentpayBillEntity.getBigDecimal("payamount").setScale(2, RoundingMode.DOWN).toString());//汇总金额
  321. createElement(doc, body, "FeeFlag", "0");//收费标志
  322. createElement(doc, body, "RichNbr", payeracc);
  323. createElement(doc, body, "FundType", "7");
  324. createElement(doc, body, "RichName", payername);
  325. createElement(doc, body, "QryBrnNbr", jgh);
  326. }
  327. public static void agentPaymentXMLBody_Entry(DynamicObject agentpayBillEntity,Document doc,Element body) {
  328. // 获取分录数据
  329. DynamicObjectCollection entryList = agentpayBillEntity.getDynamicObjectCollection("entry");
  330. for (int i = 0; i <entryList.size() ; i++) {
  331. DynamicObject entry = entryList.get(i);
  332. Element achrapaydtl_i = doc.createElement("achrpaydtl_i"); // 每条数据用一个achrapaydtl_i元素包裹
  333. body.appendChild(achrapaydtl_i);
  334. createElement(doc, achrapaydtl_i, "IdenNbr", entry.getString("nckd_zjh"));//证件号
  335. createElement(doc, achrapaydtl_i, "InRichNbr", entry.getString("payeeacctbank"));//收款户口号
  336. createElement(doc, achrapaydtl_i, "PayAmt", entry.getBigDecimal("entryunmatchamount").setScale(2, RoundingMode.DOWN).toString());//支付金额
  337. createElement(doc, achrapaydtl_i, "CurContentSeq", i+1+"");//展示条数
  338. createElement(doc, achrapaydtl_i, "RowCnt", "10000");//展示条数
  339. }
  340. }
  341. public static void agentPaymentXMLBody_EntryQuery(DynamicObject agentpayBillEntity,String filename,Document doc,Element body) {
  342. createElement(doc, body, "IdenNbr", "");//证件号
  343. createElement(doc, body, "InRichNbr","");//收款户口号
  344. createElement(doc, body, "PayAmt", "");//支付金额
  345. createElement(doc, body, "QryFileName",filename );//文件名称
  346. createElement(doc, body, "RowCnt", "10000");//展示条数
  347. }
  348. public static String createSinglePaymentRequest(DynamicObject payBillEntity) {
  349. try {
  350. DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  351. DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
  352. Document doc = dBuilder.newDocument();
  353. Element rootElement = doc.createElement("Message");
  354. doc.appendChild(rootElement);
  355. Element body = doc.createElement("Body");
  356. rootElement.appendChild(body);
  357. createElement(doc, body, "transcode", "BTSCO001");
  358. createElement(doc, body, "trxcode", "JF01");//渠道交易代码
  359. createElement(doc, body, "channelcode", "JF");//发起渠道
  360. Calendar currentdate = Calendar.getInstance();
  361. createElement(doc, body, "channeldate", TypeUtils.date2String(currentdate.getTime(),"yyyyMMdd"));//发起渠道日期
  362. payBillEntity.set("nckd_fqqdrq",TypeUtils.date2String(currentdate.getTime(),"yyyyMMdd"));
  363. String channelserno = payBillEntity.get("billno")+"-"+payBillEntity.getInt("nckd_bbh");
  364. createElement(doc, body, "channelserno", channelserno);//发起渠道流水
  365. createElement(doc, body, "channeltime", currentdate.get(Calendar.HOUR)+""+currentdate.get(Calendar.MINUTE)+""+currentdate.get(Calendar.SECOND));
  366. createElement(doc, body, "brno", "");//交易发起机构,可为空,默认100800
  367. createElement(doc, body, "bustype", "");//业务类型,可为空,默认为0-汇兑
  368. createElement(doc, body, "buskind", "");//业务种类,可为空,默认为0-普通汇兑
  369. createElement(doc, body, "payeracctype", "1");//付款账户类型 0-对公账户 1-个人账户.待补充
  370. //付款账号
  371. DynamicObject payeracctbankEntity = BusinessDataServiceHelper.loadSingle(payBillEntity.getDynamicObject("payeracctbank").getPkValue(), "am_accountbank");
  372. String payeracc = payeracctbankEntity.getString("bankaccountnumber");
  373. String payername = payeracctbankEntity.getString("acctname");
  374. createElement(doc, body, "payeracc", payeracc);//付款账户
  375. createElement(doc, body, "payername", payername);//付款人名称
  376. createElement(doc, body, "realpayeracc", payeracc);//实际付款人账户
  377. createElement(doc, body, "realpayername", payername);//实际付款人名称
  378. createElement(doc, body, "payeeacc", payBillEntity.getString("payeebanknum"));//收款账号
  379. createElement(doc, body, "payeename", payBillEntity.getString("payeename"));//收款人名称
  380. createElement(doc, body, "amount", payBillEntity.getBigDecimal("actpayamt").setScale(2, RoundingMode.DOWN).toString());//金额
  381. createElement(doc, body, "feeflag", "0");//收费标志0-暂不收费 1-计费 2-按月计费
  382. createElement(doc, body, "postscript", "测试江西银行经费共享系统付款");
  383. DynamicObject skyhinfo = BusinessDataServiceHelper.loadSingle(payBillEntity.getDynamicObject("payeebank").getPkValue(), "bd_bebank");
  384. createElement(doc, body, "recvbank", skyhinfo.getString("union_number"));// 如果是跨行业务,需填写接收行号
  385. createElement(doc, body, "paysysid", "0");// 如果是跨行业务,需填写汇路
  386. TransformerFactory transformerFactory = TransformerFactory.newInstance();
  387. Transformer transformer = transformerFactory.newTransformer();
  388. // 指定编码格式为GBK
  389. transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
  390. transformer.setOutputProperty(OutputKeys.INDENT, "yes");
  391. DOMSource source = new DOMSource(doc);
  392. StringWriter writer = new StringWriter();
  393. StreamResult result = new StreamResult(writer);
  394. transformer.transform(source, result);
  395. return writer.toString();
  396. } catch (Exception e) {
  397. e.printStackTrace();
  398. return null;
  399. }
  400. }
  401. private static void createElement(Document doc, Element parent, String name, String value) {
  402. Element element = doc.createElement(name);
  403. element.appendChild(doc.createTextNode(value));
  404. parent.appendChild(element);
  405. }
  406. /**
  407. * 代发单重新支付-第四步
  408. * @params billEntities
  409. * @returns 返回报错信息
  410. *
  411. */
  412. public static String repaytozfqz(DynamicObject[] billEntities) {
  413. StringBuffer errMsg = new StringBuffer();
  414. //获取接口链接等信息
  415. DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytozfqz")});
  416. String servername = jkpzxx.getString("nckd_servername");
  417. String port = jkpzxx.getString("nckd_port");
  418. for (DynamicObject dataEntity : billEntities) {
  419. boolean isSuccess = false;//第四步是否成功标识
  420. boolean isZFQZ = true;
  421. Map<String, String> qzObject = new HashMap<>();
  422. DynamicObject payBillEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), AGENT_ENTITY_NAME);
  423. /**
  424. * 判断是否可以走前置支付
  425. * 1、代发单为审核状态
  426. * 2、支付状态为支付中
  427. * 3、核心状态为支付处理部分成功
  428. */
  429. String billNum = payBillEntity.getString("billno");
  430. String billstatusString = payBillEntity.getString("billstatus");
  431. String paystatus = payBillEntity.getString("nckd_paystatus");
  432. String nckd_hxzt = payBillEntity.getString("nckd_hxzt");
  433. if (!"C".equals(billstatusString)) {
  434. errMsg.append("单据号:").append(billNum).append(",付款单为审核状态,才能重发~\r\n");
  435. isZFQZ = false;
  436. }
  437. if (!"B".equals(paystatus) && !"".equals(paystatus)) {
  438. errMsg.append("单据号:").append(billNum).append(",付款单为支付中,才能重发~\r\n");
  439. isZFQZ = false;
  440. }
  441. if (!"B".equals(nckd_hxzt) && !"".equals(nckd_hxzt)) {
  442. errMsg.append("单据号:").append(billNum).append(",核心状态为支付处理部分成功,才能重发~\r\n");
  443. isZFQZ = false;
  444. }
  445. if(payBillEntity.getDynamicObject("payeracctbank")==null) {
  446. errMsg.append("单据号:").append(billNum).append(",付款账户为空~\r\n");
  447. isZFQZ = false;
  448. }
  449. String[] returnmsg_2 = agentpayBillFukuan_chongfa(servername,port,payBillEntity);
  450. errMsg.append(returnmsg_2[1]);
  451. if("2".equals(returnmsg_2[0])){//第四步成功
  452. isSuccess=true;
  453. payBillEntity.set("nckd_hxzt","R");//改核心状态为已登记等待执行结果
  454. }
  455. if (isSuccess) {
  456. SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
  457. }
  458. }
  459. return errMsg.toString();
  460. }
  461. /**
  462. * 代发单支付-补传第二步
  463. * @params billEntities
  464. * @returns 返回报错信息
  465. *
  466. */
  467. public static String agentpayzx(DynamicObject[] billEntities) {
  468. StringBuffer errMsg = new StringBuffer();
  469. //获取接口链接等信息
  470. DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytozfqz")});
  471. String servername = jkpzxx.getString("nckd_servername");
  472. String port = jkpzxx.getString("nckd_port");
  473. for (DynamicObject dataEntity : billEntities) {
  474. boolean isSuccess = false;//第二步是否成功标识
  475. boolean isZFQZ = true;
  476. Map<String, String> qzObject = new HashMap<>();
  477. DynamicObject payBillEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), AGENT_ENTITY_NAME);
  478. /**
  479. * 判断是否可以走前置支付
  480. * 1、代发单为审核状态
  481. * 2、支付状态为支付中
  482. * 3、核心状态为已登记执行失败
  483. */
  484. String billNum = payBillEntity.getString("billno");
  485. String billstatusString = payBillEntity.getString("billstatus");
  486. String paystatus = payBillEntity.getString("nckd_paystatus");
  487. String nckd_hxzt = payBillEntity.getString("nckd_hxzt");
  488. if (!"C".equals(billstatusString)) {
  489. errMsg.append("单据号:").append(billNum).append(",付款单为审核状态,才能提交执行~\r\n");
  490. isZFQZ = false;
  491. }
  492. if (!"B".equals(paystatus) && !"".equals(paystatus)) {
  493. errMsg.append("单据号:").append(billNum).append(",付款单为支付中,才能提交执行~\r\n");
  494. isZFQZ = false;
  495. }
  496. if (!"A".equals(nckd_hxzt) && !"".equals(nckd_hxzt)) {
  497. errMsg.append("单据号:").append(billNum).append(",核心状态为已登记执行失败,才能提交执行~\r\n");
  498. isZFQZ = false;
  499. }
  500. if(payBillEntity.getDynamicObject("payeracctbank")==null) {
  501. errMsg.append("单据号:").append(billNum).append(",付款账户为空~\r\n");
  502. isZFQZ = false;
  503. }
  504. String[] returnmsg_2 = agentpayBillFukuan(servername,port,payBillEntity);
  505. errMsg.append(returnmsg_2[1]);
  506. if("2".equals(returnmsg_2[0])){//第二步成功
  507. isSuccess=true;
  508. payBillEntity.set("nckd_hxzt","R");//改核心状态为已登记等待执行结果
  509. }
  510. if (isSuccess) {
  511. SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
  512. }
  513. }
  514. return errMsg.toString();
  515. }
  516. /**
  517. * 代发单支付-手工关闭
  518. * @params billEntities
  519. * @returns 返回报错信息
  520. *
  521. */
  522. public static String payclose(DynamicObject[] billEntities) {
  523. StringBuffer errMsg = new StringBuffer();
  524. //获取接口链接等信息
  525. DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytozfqz")});
  526. String servername = jkpzxx.getString("nckd_servername");
  527. String port = jkpzxx.getString("nckd_port");
  528. for (DynamicObject dataEntity : billEntities) {
  529. boolean isSuccess = false;//手工关闭是否成功标识
  530. boolean isZFQZ = true;
  531. Map<String, String> qzObject = new HashMap<>();
  532. DynamicObject payBillEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), AGENT_ENTITY_NAME);
  533. /**
  534. * 判断是否可以走前置支付
  535. * 1、代发单为审核状态
  536. * 2、支付状态为支付中
  537. * 3、核心状态为支付处理部分成功,或执行失败D
  538. */
  539. String billNum = payBillEntity.getString("billno");
  540. String billstatusString = payBillEntity.getString("billstatus");
  541. String paystatus = payBillEntity.getString("nckd_paystatus");
  542. String nckd_hxzt = payBillEntity.getString("nckd_hxzt");
  543. if (!"C".equals(billstatusString)) {
  544. errMsg.append("单据号:").append(billNum).append(",付款单为审核状态,才能手工关闭~\r\n");
  545. isZFQZ = false;
  546. }
  547. if (!"B".equals(paystatus) && !"".equals(paystatus)) {
  548. errMsg.append("单据号:").append(billNum).append(",付款单为支付中,才能手工关闭~\r\n");
  549. isZFQZ = false;
  550. }
  551. if (!("B".equals(nckd_hxzt) ||"D".equals(nckd_hxzt))) {
  552. errMsg.append("单据号:").append(billNum).append(",核心状态为支付处理部分成功或执行失败,才能手工关闭~\r\n");
  553. isZFQZ = false;
  554. }
  555. if(payBillEntity.getDynamicObject("payeracctbank")==null) {
  556. errMsg.append("单据号:").append(billNum).append(",付款账户为空~\r\n");
  557. isZFQZ = false;
  558. }
  559. String[] returnmsg_2 = agentpayBillFukuan_payclose(servername,port,payBillEntity);
  560. errMsg.append(returnmsg_2[1]);
  561. if("2".equals(returnmsg_2[0])){//手工关闭成功
  562. isSuccess=true;
  563. payBillEntity.set("nckd_paystatus","D");//支付状态为支付关闭
  564. payBillEntity.set("nckd_hxzt","W");//改核心状态为支付处理流程结束
  565. }
  566. if (isSuccess) {
  567. SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
  568. }
  569. }
  570. return errMsg.toString();
  571. }
  572. /**
  573. * 代发单支付-开始传输第一步及后续
  574. * @params billEntities
  575. * @returns 返回报错信息
  576. *
  577. */
  578. public static String agentpayBillForCBSSync(DynamicObject[] billEntities) {
  579. StringBuffer errMsg = new StringBuffer();
  580. //获取接口链接等信息
  581. DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytozfqz")});
  582. String servername = jkpzxx.getString("nckd_servername");
  583. String port = jkpzxx.getString("nckd_port");
  584. for (DynamicObject dataEntity : billEntities) {
  585. boolean isSuccess = false;//第一步是否成功标识
  586. boolean isZFQZ = true;
  587. Map<String, String> qzObject = new HashMap<>();
  588. DynamicObject payBillEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), AGENT_ENTITY_NAME);
  589. /**
  590. * 判断是否可以走前置支付
  591. * 1、代发单为审核状态
  592. * 2、支付状态为未支付
  593. */
  594. String billNum = payBillEntity.getString("billno");
  595. String billstatusString = payBillEntity.getString("billstatus");
  596. String paystatus = payBillEntity.getString("nckd_paystatus");
  597. if (!"C".equals(billstatusString)) {
  598. errMsg.append("单据号:").append(billNum).append(",付款单为审核状态,才能提交~\r\n");
  599. isZFQZ = false;
  600. }
  601. if (!"A".equals(paystatus) && !"".equals(paystatus)) {
  602. errMsg.append("单据号:").append(billNum).append(",付款单为未支付,才能提交~\r\n");
  603. isZFQZ = false;
  604. }
  605. if(payBillEntity.getDynamicObject("payeracctbank")==null) {
  606. errMsg.append("单据号:").append(billNum).append(",付款账户为空~\r\n");
  607. isZFQZ = false;
  608. }
  609. //构建支付数据导入请求xml
  610. String bodyxml = createSingleAgentPaymentRequest_1(payBillEntity);
  611. if(bodyxml==null){
  612. isZFQZ = false;
  613. errMsg.append("单据号:").append(billNum).append(",第一步无法拼出正确的xml请求~\r\n");
  614. }
  615. if(!isZFQZ){
  616. continue;
  617. }
  618. log.info("单据号:"+billNum+"传入参数"+bodyxml);
  619. JSONObject cbsReturnJson =socketServiceAgent(servername,port,bodyxml,"ACHRDATI");
  620. log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
  621. //存入日志表
  622. saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),"1");
  623. if(cbsReturnJson==null){
  624. isSuccess = false;
  625. errMsg.append("单据号:").append(billNum).append(",第一步支付数据导入失败,");
  626. errMsg.append("错误号:").append("XXXXXXX");
  627. errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
  628. errMsg.append("\r\n");
  629. }else if("{}".equals(cbsReturnJson.toString())|| cbsReturnJson.get("Message")==null){
  630. isSuccess = false;
  631. errMsg.append("单据号:").append(billNum).append(",第一步支付数据导入失败,");
  632. errMsg.append("错误号:").append("DDDDDD1");
  633. errMsg.append(",错误原因:").append("接口已连通,但未获取到返回结果");
  634. errMsg.append("\r\n");
  635. }else{
  636. JSONObject head = cbsReturnJson.getJSONObject("Message").getJSONObject("HeadInfo");
  637. if(head==null){
  638. isSuccess = false;
  639. errMsg.append("单据号:").append(billNum).append(",第一步支付数据导入失败,");
  640. errMsg.append("错误号:").append("DDDDDDD2");
  641. errMsg.append(",错误原因:").append("接口已连通,但无法解析返回结果"+cbsReturnJson.toString());
  642. errMsg.append("\r\n");
  643. }else{
  644. String errcode =head.getString("errorcode");
  645. if ("000000".equals(errcode)) {//已受理,表示传输成功
  646. isSuccess = true;
  647. errMsg.append("单据号:").append(billNum).append(",第一步支付数据导入成功!");
  648. //第二步。调用付款接口
  649. String[] returnmsg_2 = agentpayBillFukuan(servername,port,payBillEntity);
  650. errMsg.append(returnmsg_2[1]);
  651. if("2".equals(returnmsg_2[0])){//第二步成功
  652. payBillEntity.set("nckd_hxzt","R");//改核心状态为已登记等待执行结果
  653. }else{//第二步失败
  654. payBillEntity.set("nckd_hxzt","A");//执行失败
  655. }
  656. payBillEntity.set("nckd_paystatus","B");
  657. }else{
  658. errMsg.append("单据号:").append(billNum).append(",第一步支付数据导入失败!"+head.getString("errormsg"));
  659. }
  660. }
  661. }
  662. if (isSuccess) {
  663. SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
  664. }
  665. }
  666. return errMsg.toString();
  667. }
  668. /**
  669. * 代发单关闭-第三步
  670. * @param servername
  671. * @param port
  672. * @param payBillEntity
  673. * @return
  674. */
  675. public static String[] agentpayBillGuanBi_auto(String servername,String port,DynamicObject payBillEntity) {
  676. StringBuffer errMsg = new StringBuffer();
  677. boolean isZFQZ = true;
  678. String billNum = payBillEntity.getString("billno");
  679. String bodyxml = createSingleAgentPaymentRequest_3(payBillEntity);
  680. if(bodyxml==null){
  681. isZFQZ = false;
  682. errMsg.append("单据号:").append(billNum).append(",无法拼出正确的关闭xml请求~\r\n");
  683. }
  684. if(!isZFQZ){
  685. return new String[]{"-1",errMsg.toString()};
  686. }
  687. log.info("单据号:"+billNum+"关闭传入参数"+bodyxml);
  688. JSONObject cbsReturnJson =socketServiceAgent(servername,port,bodyxml,"XXXX3");
  689. log.info("单据号:"+billNum+"关闭返回参数"+cbsReturnJson.toString());
  690. saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),"4");
  691. String errmark = "4";
  692. if(cbsReturnJson==null){
  693. errmark = "1";
  694. errMsg.append("单据号:").append(billNum).append(",第三步关闭付款失败,");
  695. errMsg.append("错误号:").append("XXXXXXX");
  696. errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
  697. errMsg.append("\r\n");
  698. }else if(cbsReturnJson.get("Message")==null){
  699. errmark = "1";
  700. errMsg.append("单据号:").append(billNum).append(",第三步关闭付款失败,");
  701. errMsg.append("错误号:").append("DDDDDD1");
  702. errMsg.append(",错误原因:").append("接口已连通,但未获取到返回结果");
  703. errMsg.append("\r\n");
  704. }else{
  705. JSONObject bodyinfo = cbsReturnJson.getJSONObject("Message").getJSONObject("Body");
  706. if(bodyinfo==null){
  707. errmark = "1";
  708. errMsg.append("单据号:").append(billNum).append(",第三步关闭付款失败,");
  709. errMsg.append("错误号:").append("DDDDDDD2");
  710. errMsg.append(",错误原因:").append("接口已连通,但无法解析返回结果"+cbsReturnJson.toString());
  711. errMsg.append("\r\n");
  712. }else{
  713. String errcode =bodyinfo.getString("errorcode");
  714. if ("FIN0000".equals(errcode)) {//已受理,表示传输成功
  715. errMsg.append("单据号:").append(billNum).append(",第三步关闭付款成功!");
  716. errmark = "3";
  717. }
  718. }
  719. }
  720. return new String[]{errmark,errMsg.toString()};
  721. }
  722. /**
  723. * 代发单-手工关闭
  724. * @param servername
  725. * @param port
  726. * @param payBillEntity
  727. * @return
  728. */
  729. public static String[] agentpayBillFukuan_payclose(String servername,String port,DynamicObject payBillEntity) {
  730. StringBuffer errMsg = new StringBuffer();
  731. boolean isZFQZ = true;
  732. String billNum = payBillEntity.getString("billno");
  733. String nckd_hxzt = payBillEntity.getString("nckd_hxzt");
  734. String bodyxml = "";
  735. if("B".equals(nckd_hxzt)){
  736. bodyxml = createSingleAgentPaymentRequest_3(payBillEntity);
  737. }else{
  738. bodyxml = createSingleAgentPaymentRequest_4(payBillEntity);
  739. }
  740. if(bodyxml==null){
  741. isZFQZ = false;
  742. errMsg.append("单据号:").append(billNum).append(",无法拼出正确的xml请求~\r\n");
  743. }
  744. if(!isZFQZ){
  745. return new String[]{"-1",errMsg.toString()};
  746. }
  747. log.info("单据号:"+billNum+"传入参数"+bodyxml);
  748. String transcode= "ACHRDATE";
  749. String type="";
  750. if("B".equals(nckd_hxzt)){
  751. transcode= "ACHRDATE";
  752. type = "4";
  753. }else{
  754. transcode= "ACHRDATF";
  755. type = "5";
  756. }
  757. JSONObject cbsReturnJson =socketServiceAgent(servername,port,bodyxml,transcode);
  758. log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
  759. saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),type);
  760. String errmark = "4";
  761. if(cbsReturnJson==null){
  762. errmark = "1";
  763. errMsg.append("单据号:").append(billNum).append(",手工关闭失败,");
  764. errMsg.append("错误号:").append("XXXXXXX");
  765. errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
  766. errMsg.append("\r\n");
  767. }else if("{}".equals(cbsReturnJson.toString())|| cbsReturnJson.get("Message")==null){
  768. errmark = "1";
  769. errMsg.append("单据号:").append(billNum).append(",手工关闭失败,");
  770. errMsg.append("错误号:").append("DDDDDD1");
  771. errMsg.append(",错误原因:").append("接口已连通,但未获取到返回结果");
  772. errMsg.append("\r\n");
  773. }else{
  774. JSONObject head = cbsReturnJson.getJSONObject("Message").getJSONObject("HeadInfo");
  775. if(head==null){
  776. errmark = "1";
  777. errMsg.append("单据号:").append(billNum).append(",手工关闭失败,");
  778. errMsg.append("错误号:").append("DDDDDDD2");
  779. errMsg.append(",错误原因:").append("接口已连通,但无法解析返回结果"+cbsReturnJson.toString());
  780. errMsg.append("\r\n");
  781. }else{
  782. String errcode =head.getString("errorcode");
  783. if ("000000".equals(errcode)) {//已受理,表示传输成功
  784. errMsg.append("单据号:").append(billNum).append(",手工关闭成功!");
  785. errmark = "2";
  786. }else{
  787. errMsg.append("单据号:").append(billNum).append(",手工关闭失败!"+head.getString("errormsg"));
  788. errmark = "3";
  789. }
  790. }
  791. }
  792. return new String[]{errmark,errMsg.toString()};
  793. }
  794. /**
  795. * 代发单-第四步重发
  796. * @param servername
  797. * @param port
  798. * @param payBillEntity
  799. * @return
  800. */
  801. public static String[] agentpayBillFukuan_chongfa(String servername,String port,DynamicObject payBillEntity) {
  802. StringBuffer errMsg = new StringBuffer();
  803. boolean isZFQZ = true;
  804. String billNum = payBillEntity.getString("billno");
  805. String bodyxml = createSingleAgentPaymentRequest_7(payBillEntity);
  806. if(bodyxml==null){
  807. isZFQZ = false;
  808. errMsg.append("单据号:").append(billNum).append(",无法拼出正确的xml请求~\r\n");
  809. }
  810. if(!isZFQZ){
  811. return new String[]{"-1",errMsg.toString()};
  812. }
  813. log.info("单据号:"+billNum+"传入参数"+bodyxml);
  814. JSONObject cbsReturnJson =socketServiceAgent(servername,port,bodyxml,"ACHRDATR");
  815. log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
  816. saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),"3");
  817. String errmark = "4";
  818. if(cbsReturnJson==null){
  819. errmark = "1";
  820. errMsg.append("单据号:").append(billNum).append(",第四步调用重发失败,");
  821. errMsg.append("错误号:").append("XXXXXXX");
  822. errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
  823. errMsg.append("\r\n");
  824. }else if("{}".equals(cbsReturnJson.toString())|| cbsReturnJson.get("Message")==null){
  825. errmark = "1";
  826. errMsg.append("单据号:").append(billNum).append(",第四步调用重发失败,");
  827. errMsg.append("错误号:").append("DDDDDD1");
  828. errMsg.append(",错误原因:").append("接口已连通,但未获取到返回结果");
  829. errMsg.append("\r\n");
  830. }else{
  831. JSONObject head = cbsReturnJson.getJSONObject("Message").getJSONObject("HeadInfo");
  832. if(head==null){
  833. errmark = "1";
  834. errMsg.append("单据号:").append(billNum).append(",第四步调用重发失败,");
  835. errMsg.append("错误号:").append("DDDDDDD2");
  836. errMsg.append(",错误原因:").append("接口已连通,但无法解析返回结果"+cbsReturnJson.toString());
  837. errMsg.append("\r\n");
  838. }else{
  839. String errcode =head.getString("errorcode");
  840. if ("000000".equals(errcode)) {//已受理,表示传输成功
  841. errMsg.append("单据号:").append(billNum).append(",第四步调用重发成功!");
  842. errmark = "2";
  843. }else{
  844. errMsg.append("单据号:").append(billNum).append(",第四步调用重发失败!"+head.getString("errormsg"));
  845. errmark = "3";
  846. }
  847. }
  848. }
  849. return new String[]{errmark,errMsg.toString()};
  850. }
  851. /**
  852. * 代发单-第二步
  853. * @param servername
  854. * @param port
  855. * @param payBillEntity
  856. * @return
  857. */
  858. public static String[] agentpayBillFukuan(String servername,String port,DynamicObject payBillEntity) {
  859. StringBuffer errMsg = new StringBuffer();
  860. boolean isZFQZ = true;
  861. String billNum = payBillEntity.getString("billno");
  862. String bodyxml = createSingleAgentPaymentRequest_2(payBillEntity);
  863. if(bodyxml==null){
  864. isZFQZ = false;
  865. errMsg.append("单据号:").append(billNum).append(",无法拼出正确的xml请求~\r\n");
  866. }
  867. if(!isZFQZ){
  868. return new String[]{"-1",errMsg.toString()};
  869. }
  870. log.info("单据号:"+billNum+"传入参数"+bodyxml);
  871. JSONObject cbsReturnJson =socketServiceAgent(servername,port,bodyxml,"ACHRDATD");
  872. log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
  873. saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),"2");
  874. String errmark = "4";
  875. if(cbsReturnJson==null){
  876. errmark = "1";
  877. errMsg.append("单据号:").append(billNum).append(",第二步调用执行失败,");
  878. errMsg.append("错误号:").append("XXXXXXX");
  879. errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
  880. errMsg.append("\r\n");
  881. }else if("{}".equals(cbsReturnJson.toString())|| cbsReturnJson.get("Message")==null){
  882. errmark = "1";
  883. errMsg.append("单据号:").append(billNum).append(",第二步调用执行失败,");
  884. errMsg.append("错误号:").append("DDDDDD1");
  885. errMsg.append(",错误原因:").append("接口已连通,但未获取到返回结果");
  886. errMsg.append("\r\n");
  887. }else{
  888. JSONObject head = cbsReturnJson.getJSONObject("Message").getJSONObject("HeadInfo");
  889. if(head==null){
  890. errmark = "1";
  891. errMsg.append("单据号:").append(billNum).append(",第二步调用执行失败,");
  892. errMsg.append("错误号:").append("DDDDDDD2");
  893. errMsg.append(",错误原因:").append("接口已连通,但无法解析返回结果"+cbsReturnJson.toString());
  894. errMsg.append("\r\n");
  895. }else{
  896. String errcode =head.getString("errorcode");
  897. if ("000000".equals(errcode)) {//已受理,表示传输成功
  898. errMsg.append("单据号:").append(billNum).append(",第二步调用执行成功!");
  899. errmark = "2";
  900. }else{
  901. errMsg.append("单据号:").append(billNum).append(",第二步调用执行失败!"+head.getString("errormsg"));
  902. errmark = "3";
  903. }
  904. }
  905. }
  906. return new String[]{errmark,errMsg.toString()};
  907. }
  908. /**
  909. * 支付单同步
  910. * @params billEntities
  911. * @returns 返回报错信息
  912. *
  913. */
  914. public static String payBillForCBSSync(DynamicObject[] billEntities) {
  915. StringBuffer errMsg = new StringBuffer();
  916. //获取接口链接等信息
  917. DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytoZFQZdb")});
  918. String servername = jkpzxx.getString("nckd_servername");
  919. String port = jkpzxx.getString("nckd_port");
  920. for (DynamicObject dataEntity : billEntities) {
  921. boolean isSuccess = false;
  922. boolean isZFQZ = true;
  923. Map<String, String> qzObject = new HashMap<>();
  924. DynamicObject payBillEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), ENTITY_NAME);
  925. /**
  926. * 判断是否可以走前置支付
  927. * 1、付款单为审核状态
  928. * 2、支付状态为未支付
  929. * 3、版本号>=1时,必须等于付款次数
  930. */
  931. String billNum = payBillEntity.getString("billno");
  932. String billstatusString = payBillEntity.getString("billstatus");
  933. String paystatus = payBillEntity.getString("nckd_paystatus");
  934. int bbh = payBillEntity.getInt("nckd_bbh");
  935. int fkcs = payBillEntity.getInt("nckd_fkcs");
  936. if (!"C".equals(billstatusString)) {
  937. errMsg.append("单据号:").append(billNum).append(",付款单为审核状态,才能提交~\r\n");
  938. isZFQZ = false;
  939. }
  940. if (!"1".equals(paystatus) && !"".equals(paystatus)) {
  941. errMsg.append("单据号:").append(billNum).append(",付款单为未支付,才能提交~\r\n");
  942. isZFQZ = false;
  943. }
  944. if(bbh>=1 && bbh!=fkcs){
  945. errMsg.append("单据号:").append(billNum).append(",付款单未调整,请调整数据,或点击重付~\r\n");
  946. isZFQZ = false;
  947. }
  948. if(payBillEntity.getDynamicObject("payeracctbank")==null) {
  949. errMsg.append("单据号:").append(billNum).append(",付款账户为空~\r\n");
  950. isZFQZ = false;
  951. }
  952. if(payBillEntity.getDynamicObject("payeebank")==null) {
  953. errMsg.append("单据号:").append(billNum).append(",收款账户为空~\r\n");
  954. isZFQZ = false;
  955. }
  956. //构建请求xml
  957. String bodyxml = createSinglePaymentRequest(payBillEntity);
  958. if(bodyxml==null){
  959. isZFQZ = false;
  960. errMsg.append("单据号:").append(billNum).append(",无法拼出正确的xml请求~\r\n");
  961. }
  962. if(!isZFQZ){
  963. continue;
  964. }
  965. log.info("单据号:"+billNum+"传入参数"+bodyxml);
  966. JSONObject cbsReturnJson =socketService(servername,port,bodyxml);
  967. log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
  968. //存入日志表
  969. savelog(payBillEntity,bodyxml,cbsReturnJson.toString());
  970. if(cbsReturnJson==null){
  971. isSuccess = false;
  972. errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
  973. errMsg.append("错误号:").append("XXXXXXX");
  974. errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
  975. errMsg.append("\r\n");
  976. }else if(cbsReturnJson.get("Message")==null){
  977. isSuccess = false;
  978. errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
  979. errMsg.append("错误号:").append("DDDDDD1");
  980. errMsg.append(",错误原因:").append("接口已连通,但未获取到返回结果");
  981. errMsg.append("\r\n");
  982. }else{
  983. JSONObject bodyinfo = cbsReturnJson.getJSONObject("Message").getJSONObject("Body");
  984. if(bodyinfo==null){
  985. isSuccess = false;
  986. errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
  987. errMsg.append("错误号:").append("DDDDDDD2");
  988. errMsg.append(",错误原因:").append("接口已连通,但无法解析返回结果"+cbsReturnJson.toString());
  989. errMsg.append("\r\n");
  990. }else{
  991. String errcode =bodyinfo.getString("errorcode");
  992. if ("FIN0000".equals(errcode)) {//已受理,不代表支付成功
  993. isSuccess = true;
  994. errMsg.append("单据号:").append(billNum).append(",推送支付前置成功!");
  995. payBillEntity.set("nckd_fkcs", fkcs+1);//付款次数+1
  996. payBillEntity.set("nckd_sbyy",bodyinfo.getString("errormsg"));//错误信息
  997. String zfstatus = bodyinfo.getString("status");
  998. if("S".equals(zfstatus)){//成功
  999. payBillEntity.set("nckd_paystatus",3);
  1000. }else if("U".equals(zfstatus)){//在途
  1001. payBillEntity.set("nckd_paystatus",2);//支付中
  1002. }else if("F".equals(zfstatus)){//失败
  1003. payBillEntity.set("nckd_paystatus",4);//支付失败
  1004. }
  1005. } else {//拿到返回结果支付次数就必须加一
  1006. isSuccess = false;
  1007. errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
  1008. errMsg.append("错误号:").append(errcode);
  1009. errMsg.append(",错误原因:").append(bodyinfo.getString("errormsg"));
  1010. errMsg.append("\r\n");
  1011. payBillEntity.set("nckd_fkcs", fkcs+1);//付款次数+1
  1012. payBillEntity.set("nckd_paystatus",4);//支付失败
  1013. payBillEntity.set("nckd_sbyy",bodyinfo.getString("errormsg"));//错误信息
  1014. SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
  1015. }
  1016. }
  1017. }
  1018. if (isSuccess) {
  1019. SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
  1020. }
  1021. }
  1022. return errMsg.toString();
  1023. }
  1024. public static void saveAgentlog(DynamicObject payBillEntity,String qqbw,String fhbw,String type){
  1025. try {
  1026. DynamicObject logInfo = new DynamicObject( EntityMetadataCache.getDataEntityType("nckd_dfjkdyrz"));
  1027. String channelserno = payBillEntity.getString("billno");
  1028. logInfo.set("number",channelserno);
  1029. if("1".equals(type)){
  1030. logInfo.set("name",payBillEntity.get("billno")+"支付数据导入日志");
  1031. }else if("2".equals(type)){
  1032. logInfo.set("name",payBillEntity.get("billno")+"支付数据执行日志");
  1033. }else if("3".equals(type)){
  1034. logInfo.set("name",payBillEntity.get("billno")+"支付数据重发日志");
  1035. }else if("4".equals(type)){
  1036. logInfo.set("name",payBillEntity.get("billno")+"支付结束(成功)日志");
  1037. }else if("5".equals(type)){
  1038. logInfo.set("name",payBillEntity.get("billno")+"支付结束(失败)日志");
  1039. }else if("6".equals(type)){
  1040. logInfo.set("name",payBillEntity.get("billno")+"代发单表头支付信息查询日志");
  1041. }else if("7".equals(type)){
  1042. logInfo.set("name",payBillEntity.get("billno")+"代发单分录支付信息查询日志");
  1043. }
  1044. logInfo.set("nckd_jklx",type);
  1045. logInfo.set("status","A");
  1046. logInfo.set("enable","1");
  1047. Calendar currentdate = Calendar.getInstance();
  1048. logInfo.set("nckd_redate",currentdate.getTime());
  1049. logInfo.set("nckd_billno",payBillEntity.get("billno"));
  1050. logInfo.set("nckd_payid",payBillEntity.getPkValue()+"");
  1051. logInfo.set("nckd_qqbw_tag",qqbw);
  1052. logInfo.set("nckd_fhbw_tag",fhbw);
  1053. logInfo.set("nckd_redate",new Date());
  1054. logInfo.set("nckd_djlx","2");
  1055. OperationServiceHelper.executeOperate("save","nckd_zfjkdyrz",new DynamicObject[]{logInfo});
  1056. }catch (Exception e){
  1057. log.info("保存日志报错"+e.getMessage());
  1058. }
  1059. }
  1060. public static void savelog(DynamicObject payBillEntity,String qqbw,String fhbw){
  1061. try {
  1062. DynamicObject logInfo = new DynamicObject( EntityMetadataCache.getDataEntityType("nckd_zfjkdyrz"));
  1063. String channelserno = payBillEntity.get("billno")+"-"+payBillEntity.getInt("nckd_bbh");
  1064. logInfo.set("number",channelserno);
  1065. logInfo.set("name",payBillEntity.get("billno")+"付款日志");
  1066. logInfo.set("status","A");
  1067. logInfo.set("enable","1");
  1068. Calendar currentdate = Calendar.getInstance();
  1069. logInfo.set("nckd_redate",currentdate.getTime());
  1070. logInfo.set("nckd_billno",payBillEntity.get("billno"));
  1071. logInfo.set("nckd_payid",payBillEntity.getPkValue()+"");
  1072. logInfo.set("nckd_qqbw_tag",qqbw);
  1073. logInfo.set("nckd_fhbw_tag",fhbw);
  1074. logInfo.set("nckd_redate",new Date());
  1075. logInfo.set("nckd_djlx","1");
  1076. OperationServiceHelper.executeOperate("save","nckd_zfjkdyrz",new DynamicObject[]{logInfo});
  1077. }catch (Exception e){
  1078. log.info("保存日志报错"+e.getMessage());
  1079. }
  1080. }
  1081. public static void saveupdatelog(DynamicObject payBillEntity,String qqbw,String fhbw){
  1082. try {
  1083. DynamicObject logInfo = new DynamicObject( EntityMetadataCache.getDataEntityType("nckd_zfcxjkrz"));
  1084. String channelserno = payBillEntity.get("billno")+"-"+payBillEntity.getInt("nckd_bbh");
  1085. logInfo.set("number",channelserno);
  1086. logInfo.set("name",payBillEntity.get("billno")+"查询状态日志");
  1087. logInfo.set("status","A");
  1088. logInfo.set("enable","1");
  1089. Calendar currentdate = Calendar.getInstance();
  1090. logInfo.set("nckd_redate",currentdate.getTime());
  1091. logInfo.set("nckd_billno",payBillEntity.get("billno"));
  1092. logInfo.set("nckd_payid",payBillEntity.getPkValue()+"");
  1093. logInfo.set("nckd_qqbw_tag",qqbw);
  1094. logInfo.set("nckd_fhbw_tag",fhbw);
  1095. logInfo.set("nckd_redate",new Date());
  1096. logInfo.set("nckd_djlx","1");
  1097. OperationServiceHelper.executeOperate("save","nckd_zfcxjkrz",new DynamicObject[]{logInfo});
  1098. }catch (Exception e){
  1099. log.info("保存日志报错"+e.getMessage());
  1100. }
  1101. }
  1102. public static JSONObject socketService(String serverName,String port,String xmlData){
  1103. try {
  1104. Socket client = new Socket(serverName,TypeUtils.nullToInt(port));
  1105. int messageLength = xmlData.getBytes("GBK").length;
  1106. String header = String.format("%08dXMLBTSCO001%%%%%%%%%%%%%%%%%%%%%%%%%%", messageLength);
  1107. String fullMessage = header + xmlData;
  1108. OutputStream outToServer = client.getOutputStream();
  1109. PrintWriter out = new PrintWriter(new OutputStreamWriter(outToServer, "GBK"), true);
  1110. out.println(fullMessage);
  1111. InputStream inFromServer = client.getInputStream();
  1112. BufferedReader in = new BufferedReader(new InputStreamReader(inFromServer, "GBK"));
  1113. StringBuilder responseBuilder = new StringBuilder();
  1114. String line;
  1115. while ((line = in.readLine()) != null) {
  1116. responseBuilder.append(line);
  1117. }
  1118. String responseJson = responseBuilder.toString();
  1119. if(responseJson.indexOf("<?xml")>0){
  1120. int index = responseJson.indexOf("<?xml");
  1121. responseJson = responseJson.substring(index);
  1122. }
  1123. JSONObject jsonObject = XML.toJSONObject(responseJson);
  1124. client.close();
  1125. return jsonObject;
  1126. } catch (IOException e) {
  1127. e.printStackTrace();
  1128. log.info(e.getMessage());
  1129. }
  1130. return null;
  1131. }
  1132. /**
  1133. * 支付单同步
  1134. * @params billEntities
  1135. * @returns 返回报错信息
  1136. *
  1137. */
  1138. public static String agentPayBillClose(DynamicObject[] billEntities) {
  1139. StringBuffer errMsg = new StringBuffer();
  1140. //获取接口链接等信息
  1141. DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytozfqz")});
  1142. String servername = jkpzxx.getString("nckd_servername");
  1143. String port = jkpzxx.getString("nckd_port");
  1144. for (DynamicObject dataEntity : billEntities) {
  1145. boolean isSuccess = false;
  1146. boolean isZFQZ = true;
  1147. Map<String, String> qzObject = new HashMap<>();
  1148. DynamicObject payBillEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), ENTITY_NAME);
  1149. /**
  1150. * 判断是否可以走前置支付
  1151. * 1、付款单为审核状态
  1152. * 2、支付状态为未支付
  1153. * 3、版本号>=1时,必须等于付款次数
  1154. */
  1155. String billNum = payBillEntity.getString("billno");
  1156. String billstatusString = payBillEntity.getString("billstatus");
  1157. String paystatus = payBillEntity.getString("nckd_paystatus");
  1158. int bbh = payBillEntity.getInt("nckd_bbh");
  1159. int fkcs = payBillEntity.getInt("nckd_fkcs");
  1160. if (!"C".equals(billstatusString)) {
  1161. errMsg.append("单据号:").append(billNum).append(",付款单为审核状态,才能提交~\r\n");
  1162. isZFQZ = false;
  1163. }
  1164. if (!"1".equals(paystatus) && !"".equals(paystatus)) {
  1165. errMsg.append("单据号:").append(billNum).append(",付款单为未支付,才能提交~\r\n");
  1166. isZFQZ = false;
  1167. }
  1168. if(bbh>=1 && bbh!=fkcs){
  1169. errMsg.append("单据号:").append(billNum).append(",付款单未调整,请调整数据,或点击重付~\r\n");
  1170. isZFQZ = false;
  1171. }
  1172. if(payBillEntity.getDynamicObject("payeracctbank")==null) {
  1173. errMsg.append("单据号:").append(billNum).append(",付款账户为空~\r\n");
  1174. isZFQZ = false;
  1175. }
  1176. if(payBillEntity.getDynamicObject("payeebank")==null) {
  1177. errMsg.append("单据号:").append(billNum).append(",收款账户为空~\r\n");
  1178. isZFQZ = false;
  1179. }
  1180. //构建请求xml
  1181. String bodyxml = createSinglePaymentRequest(payBillEntity);
  1182. if(bodyxml==null){
  1183. isZFQZ = false;
  1184. errMsg.append("单据号:").append(billNum).append(",无法拼出正确的xml请求~\r\n");
  1185. }
  1186. if(!isZFQZ){
  1187. continue;
  1188. }
  1189. log.info("单据号:"+billNum+"传入参数"+bodyxml);
  1190. JSONObject cbsReturnJson =socketService(servername,port,bodyxml);
  1191. log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
  1192. //存入日志表
  1193. savelog(payBillEntity,bodyxml,cbsReturnJson.toString());
  1194. if(cbsReturnJson==null){
  1195. isSuccess = false;
  1196. errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
  1197. errMsg.append("错误号:").append("XXXXXXX");
  1198. errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
  1199. errMsg.append("\r\n");
  1200. }else if(cbsReturnJson.get("Message")==null){
  1201. isSuccess = false;
  1202. errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
  1203. errMsg.append("错误号:").append("DDDDDD1");
  1204. errMsg.append(",错误原因:").append("接口已连通,但未获取到返回结果");
  1205. errMsg.append("\r\n");
  1206. }else{
  1207. JSONObject bodyinfo = cbsReturnJson.getJSONObject("Message").getJSONObject("Body");
  1208. if(bodyinfo==null){
  1209. isSuccess = false;
  1210. errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
  1211. errMsg.append("错误号:").append("DDDDDDD2");
  1212. errMsg.append(",错误原因:").append("接口已连通,但无法解析返回结果"+cbsReturnJson.toString());
  1213. errMsg.append("\r\n");
  1214. }else{
  1215. String errcode =bodyinfo.getString("errorcode");
  1216. if ("FIN0000".equals(errcode)) {//已受理,不代表支付成功
  1217. isSuccess = true;
  1218. errMsg.append("单据号:").append(billNum).append(",推送支付前置成功!");
  1219. payBillEntity.set("nckd_fkcs", fkcs+1);//付款次数+1
  1220. payBillEntity.set("nckd_sbyy",bodyinfo.getString("errormsg"));//错误信息
  1221. String zfstatus = bodyinfo.getString("status");
  1222. if("S".equals(zfstatus)){//成功
  1223. payBillEntity.set("nckd_paystatus",3);
  1224. }else if("U".equals(zfstatus)){//在途
  1225. payBillEntity.set("nckd_paystatus",2);//支付中
  1226. }else if("F".equals(zfstatus)){//失败
  1227. payBillEntity.set("nckd_paystatus",4);//支付失败
  1228. }
  1229. } else {//拿到返回结果支付次数就必须加一
  1230. isSuccess = false;
  1231. errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
  1232. errMsg.append("错误号:").append(errcode);
  1233. errMsg.append(",错误原因:").append(bodyinfo.getString("errormsg"));
  1234. errMsg.append("\r\n");
  1235. payBillEntity.set("nckd_fkcs", fkcs+1);//付款次数+1
  1236. payBillEntity.set("nckd_paystatus",4);//支付失败
  1237. payBillEntity.set("nckd_sbyy",bodyinfo.getString("errormsg"));//错误信息
  1238. SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
  1239. }
  1240. }
  1241. }
  1242. if (isSuccess) {
  1243. SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
  1244. }
  1245. }
  1246. return errMsg.toString();
  1247. }
  1248. public static JSONObject socketServiceQuery(String serverName,String port,String xmlData,String transcode){
  1249. try {
  1250. Socket client = new Socket(serverName,TypeUtils.nullToInt(port));
  1251. int messageLength = xmlData.getBytes("GBK").length;
  1252. String header = String.format("%08dXML"+transcode+"%%%%%%%%%%%%%%%%%%%%%%%%%%", messageLength);
  1253. String fullMessage = header + xmlData;
  1254. OutputStream outToServer = client.getOutputStream();
  1255. PrintWriter out = new PrintWriter(new OutputStreamWriter(outToServer, "GBK"), true);
  1256. out.println(fullMessage);
  1257. InputStream inFromServer = client.getInputStream();
  1258. BufferedReader in = new BufferedReader(new InputStreamReader(inFromServer, "GBK"));
  1259. StringBuilder responseBuilder = new StringBuilder();
  1260. String line;
  1261. while ((line = in.readLine()) != null) {
  1262. responseBuilder.append(line);
  1263. }
  1264. String responseJson = responseBuilder.toString();
  1265. if(responseJson.indexOf("<?xml")>0){
  1266. int index = responseJson.indexOf("<?xml");
  1267. responseJson = responseJson.substring(index);
  1268. }
  1269. JSONObject jsonObject = XML.toJSONObject(responseJson);
  1270. client.close();
  1271. return jsonObject;
  1272. } catch (IOException e) {
  1273. e.printStackTrace();
  1274. log.info(e.getMessage());
  1275. }
  1276. return null;
  1277. }
  1278. public static JSONObject socketServiceAgent(String serverName,String port,String xmlData,String transcode){
  1279. try {
  1280. Socket client = new Socket(serverName,TypeUtils.nullToInt(port));
  1281. int messageLength = xmlData.getBytes("GBK").length;
  1282. String header = String.format("%08d", messageLength);
  1283. String fullMessage = header + xmlData;
  1284. OutputStream outToServer = client.getOutputStream();
  1285. PrintWriter out = new PrintWriter(new OutputStreamWriter(outToServer, "GBK"), true);
  1286. out.println(fullMessage);
  1287. InputStream inFromServer = client.getInputStream();
  1288. BufferedReader in = new BufferedReader(new InputStreamReader(inFromServer, "GBK"));
  1289. StringBuilder responseBuilder = new StringBuilder();
  1290. String line;
  1291. while ((line = in.readLine()) != null) {
  1292. responseBuilder.append(line);
  1293. }
  1294. String responseJson = responseBuilder.toString();
  1295. if(responseJson.indexOf("<?xml")>0){
  1296. int index = responseJson.indexOf("<?xml");
  1297. responseJson = responseJson.substring(index);
  1298. }
  1299. JSONObject jsonObject = XML.toJSONObject(responseJson);
  1300. client.close();
  1301. return jsonObject;
  1302. } catch (IOException e) {
  1303. e.printStackTrace();
  1304. log.info(e.getMessage());
  1305. }
  1306. return null;
  1307. }
  1308. }