ERPServiceImpl.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  1. package com.uas.eis.service.Impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.TypeReference;
  5. import com.uas.eis.config.DonlimConfig;
  6. import com.uas.eis.core.config.SpObserver;
  7. import com.uas.eis.core.support.TokenProperties;
  8. import com.uas.eis.dao.*;
  9. import com.uas.eis.dto.FindOrderRelationInvoiceDTO;
  10. import com.uas.eis.dto.FindOrderRelationInvoiceReq;
  11. import com.uas.eis.dto.FindOrderRelationInvoiceResp;
  12. import com.uas.eis.service.CommonService;
  13. import com.uas.eis.service.ERPService;
  14. import com.uas.eis.utils.*;
  15. import nuonuo.open.sdk.NNOpenSDK;
  16. import org.slf4j.Logger;
  17. import org.slf4j.LoggerFactory;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.stereotype.Service;
  20. import java.text.SimpleDateFormat;
  21. import java.util.*;
  22. /**
  23. * @author koul
  24. * @email koul@usoftchina.com
  25. * @date 2021-12-06 18:27
  26. */
  27. @Service
  28. public class ERPServiceImpl implements ERPService {
  29. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  30. private static Map<String,String> tokenConfig = TokenProperties.getAllProperty();
  31. @Autowired
  32. private BaseDao baseDao;
  33. @Autowired
  34. private DonlimConfig donlimConfig;
  35. @Autowired
  36. private CommonService commonService;
  37. @Override
  38. public Map<String, Object> pushInvoiceOrder(String master, int id) {
  39. Map<String, Object> map = new HashMap<String, Object>();
  40. Object[] obs=baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_invoice_config",new String[]{"appKey","appSecret","token","taxnum"},"username='"+master+"'");
  41. String url=donlimConfig.getRoute();
  42. System.out.println(url);
  43. String appKey = donlimConfig.getAppKey();
  44. String appSecret = donlimConfig.getAppSecret();
  45. String token = donlimConfig.getToken();
  46. String taxnum= donlimConfig.getTaxnum();
  47. if(donlimConfig.isProd()){
  48. appKey = obs[0].toString();
  49. appSecret = obs[1].toString();
  50. token = obs[2].toString();// 访问令牌
  51. taxnum = obs[3].toString();// 授权企业税号
  52. }
  53. logger.info("pushInvoiceOrder begin: master {} ,id {} ",master,id);
  54. SpObserver.putSp(master);
  55. SqlRowList rs_main = baseDao.queryForRowSet("select * from invoiceOrder left join customer on io_cucode=cu_code where io_id="+id);
  56. if(rs_main.next()){
  57. String autoInvoiceFlag= baseDao.isDBSetting("InvoiceOrder", "autoInvoice")?"true":"false";
  58. //数据组装
  59. InvoiceOrderDTO invoiceOrderDTO=new InvoiceOrderDTO();
  60. invoiceOrderDTO.setOrderType("1");
  61. invoiceOrderDTO.setAutoInvoiceFlag(autoInvoiceFlag );//自动开票
  62. invoiceOrderDTO.setRepeatCall("0");
  63. OrderDTO orderDTO=new OrderDTO();
  64. orderDTO.setOriginalOrderNo(rs_main.getGeneralString("io_code"));
  65. orderDTO.setAddDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(rs_main.getDate("io_date")));
  66. orderDTO.setInvoiceLine(rs_main.getGeneralString("io_invoiceline"));
  67. orderDTO.setSpecificFactor("0");
  68. orderDTO.setSaleTaxNum(donlimConfig.getTaxnum());//
  69. orderDTO.setBuyerName(rs_main.getGeneralString("cu_name"));//客户名称
  70. orderDTO.setTaxNum(rs_main.getGeneralString("cu_taxid").trim());//购方税号
  71. orderDTO.setAccount(rs_main.getGeneralString("cu_bankaccount"));
  72. orderDTO.setAddress(rs_main.getGeneralString("cu_add1"));
  73. orderDTO.setTelephone(rs_main.getGeneralString("cu_tel"));
  74. orderDTO.setRemark(rs_main.getGeneralString("io_remark"));
  75. invoiceOrderDTO.setOrderInfo(orderDTO);
  76. SqlRowList rs_det = baseDao.queryForRowSet("select * from invoiceOrderdet_view where id_ioid="+id+" order by id_detno");
  77. List<OrderDetDTO> dets=new ArrayList<>();//商品列表
  78. while(rs_det.next()){
  79. OrderDetDTO orderDetDTO=new OrderDetDTO();
  80. orderDetDTO.setRowNo(rs_det.getGeneralString("id_id"));//唯一值
  81. orderDetDTO.setGoodsName(rs_det.getGeneralString("pr_detail"));
  82. orderDetDTO.setSpec(rs_det.getGeneralString("pr_spec"));
  83. orderDetDTO.setUnit(rs_det.getGeneralString("pr_unit"));
  84. orderDetDTO.setNum(rs_det.getGeneralString("id_qty"));
  85. //orderDetDTO.setPrice(rs_det.getGeneralString("id_price"));//平台算法问题 传单价会有差异,校验可能不通过,所有传金额和数量,不传单价
  86. orderDetDTO.setTaxRate(rs_det.getGeneralString("taxrate"));//0.13
  87. orderDetDTO.setTaxAmount(rs_det.getGeneralString("id_amount"));
  88. orderDetDTO.setHsbz(rs_det.getGeneralString("hsbz"));
  89. orderDetDTO.setSpbm(rs_det.getGeneralString("spbm"));
  90. dets.add(orderDetDTO);
  91. }
  92. invoiceOrderDTO.setOrderOriginalDetails(dets);
  93. invoiceOrderDTO.setInvoiceGoodsTransports(new ArrayList<>());
  94. System.out.println(JSONArray.toJSONString(invoiceOrderDTO));
  95. //调用对接
  96. NNOpenSDK sdk = NNOpenSDK.getIntance();
  97. String method = "nuonuo.OpeMplatform.saveOrder"; // API方法名
  98. String content =sdk.convertToUtf8(JSONArray.toJSONString(invoiceOrderDTO));
  99. String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
  100. String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
  101. Map<Object, Object> res=JSONUtil.toMap(result);
  102. System.out.println(result);
  103. Object status=res.get("status");
  104. Object message=res.get("message");
  105. if(status !=null && "0000".equals(status.toString())){//调用成功
  106. baseDao.execute("update invoiceOrder set io_dockstatus='对接成功' where io_id="+id);
  107. commonService.logSRecord("开票订单对接",id);
  108. }else{
  109. baseDao.execute("update invoiceOrder set io_dockstatus='对接失败' where io_id="+id);
  110. commonService.logFRecord("开票订单对接","("+status+")"+message,id);
  111. }
  112. logger.info("pushInvoiceOrder master {} ,id {} status {} message {}",master,id,status,message);
  113. map.put("success", true);
  114. map.put("message", message);
  115. return map;
  116. }else{//数据无效
  117. logger.info("pushInvoiceOrder err {对接源信息无效} ,master {} , id {} status {} message {}",master,id);
  118. map.put("success", false);
  119. map.put("message", "对接源信息无效");
  120. return map;
  121. }
  122. }
  123. @Override
  124. public Map<String, Object> invoiceOrderSubmitKp(String master, int id) {
  125. Object[] obs=baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_invoice_config",new String[]{"appKey","appSecret","token","taxnum"},"username='"+master+"'");
  126. String url=donlimConfig.getRoute();
  127. System.out.println(url);
  128. String appKey = donlimConfig.getAppKey();
  129. String appSecret = donlimConfig.getAppSecret();
  130. String token = donlimConfig.getToken();
  131. String taxnum= donlimConfig.getTaxnum();
  132. if(donlimConfig.isProd()){
  133. appKey = obs[0].toString();
  134. appSecret = obs[1].toString();
  135. token = obs[2].toString();// 访问令牌
  136. taxnum = obs[3].toString();// 授权企业税号
  137. }
  138. SpObserver.putSp(master);
  139. SqlRowList rs_main = baseDao.queryForRowSet("select * from invoiceOrder left join customer on io_cucode=cu_code where io_id="+id);
  140. if(rs_main.next()){
  141. NNOpenSDK sdk = NNOpenSDK.getIntance();
  142. String method = "nuonuo.OpeMplatform.submitKp"; // API方法名
  143. String code= rs_main.getGeneralString("io_code");
  144. Map<String,String> reqParam=new HashMap<>();
  145. reqParam.put("orderNo",code);
  146. String content=JSONArray.toJSONString(reqParam);
  147. String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
  148. String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
  149. System.out.println(result);
  150. }else{//数据无效
  151. logger.info("findOrderState err {对接源信息无效} ,master {} , id {} status {} message {}",master,id);
  152. }
  153. return null;
  154. }
  155. @Override
  156. public Map<String, Object> findOrderState(String master, int id) {
  157. Map<String, Object> map = new HashMap<String, Object>();
  158. Object[] obs=baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_invoice_config",new String[]{"appKey","appSecret","token","taxnum"},"username='"+master+"'");
  159. if(obs==null){
  160. return null;//对接信息为配置
  161. }
  162. String url=donlimConfig.getRoute();
  163. String appKey = donlimConfig.getAppKey();
  164. String appSecret = donlimConfig.getAppSecret();
  165. String token = donlimConfig.getToken();
  166. String taxnum= donlimConfig.getTaxnum();
  167. if(donlimConfig.isProd()){
  168. appKey = obs[0].toString();
  169. appSecret = obs[1].toString();
  170. token = obs[2].toString();// 访问令牌
  171. taxnum = obs[3].toString();// 授权企业税号
  172. }
  173. SpObserver.putSp(master);
  174. SqlRowList rs_main = baseDao.queryForRowSet("select * from invoiceOrder left join customer on io_cucode=cu_code where io_id="+id);
  175. if(rs_main.next()){
  176. String code= rs_main.getGeneralString("io_code");
  177. NNOpenSDK sdk = NNOpenSDK.getIntance();
  178. String method = "nuonuo.OpeMplatform.findOrderState"; // API方法名
  179. Map<String,String> reqParam=new HashMap<>();
  180. reqParam.put("originalOrderNo",code);
  181. reqParam.put("saleTaxNum",taxnum);
  182. String content=JSONArray.toJSONString(reqParam);
  183. String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
  184. String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
  185. System.out.println(result);
  186. FindOrderStateResp resp = JSON.parseObject(result , new TypeReference<FindOrderStateResp>() {});
  187. System.out.println(resp.getCode());
  188. System.out.println(resp.getMessage());
  189. if("该订单不存在".equals(resp.getMessage())){
  190. baseDao.execute("update invoiceOrder set IO_INVOICESTATUS = '-1' where io_id = '"+id+"'");
  191. }else{
  192. baseDao.execute("update invoiceOrder set IO_INVOICESTATUS = '"+resp.getData().getInvoiceStatus()+"'"
  193. +",io_errorMsg='"+StringUtil.nvl(resp.getData().getErrorMsg(),"")+"'"
  194. +" where io_id = '"+id+"'");
  195. }
  196. map.put("success", true);
  197. map.put("result", result);
  198. return map;
  199. }else{//数据无效
  200. logger.info("findOrderState err {对接源信息无效} ,master {} , id {} status {} message {}",master,id);
  201. }
  202. return null;
  203. }
  204. @Override
  205. public Map<String, Object> cancelInvoiceOrder(String master, int id) {
  206. Map<String, Object> map = new HashMap<String, Object>();
  207. Object[] obs=baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_invoice_config",new String[]{"appKey","appSecret","token","taxnum"},"username='"+master+"'");
  208. if(obs==null){
  209. return null;//对接信息为配置
  210. }
  211. String url=donlimConfig.getRoute();
  212. System.out.println(url);
  213. String appKey = donlimConfig.getAppKey();
  214. String appSecret = donlimConfig.getAppSecret();
  215. String token = donlimConfig.getToken();
  216. String taxnum= donlimConfig.getTaxnum();
  217. if(donlimConfig.isProd()){
  218. System.out.println("prod");
  219. appKey = obs[0].toString();
  220. appSecret = obs[1].toString();
  221. token = obs[2].toString();// 访问令牌
  222. taxnum = obs[3].toString();// 授权企业税号
  223. }else{
  224. System.out.println("dev");
  225. }
  226. SpObserver.putSp(master);
  227. SqlRowList rs_main = baseDao.queryForRowSet("select * from invoiceOrder left join customer on io_cucode=cu_code where io_id="+id);
  228. if(rs_main.next()){
  229. String code= rs_main.getGeneralString("io_code");
  230. Map<String,String> reqParam=new HashMap<>();
  231. reqParam.put("originalOrderNo",code);
  232. reqParam.put("saleTaxNum",taxnum);
  233. String content=JSONArray.toJSONString(reqParam);
  234. NNOpenSDK sdk = NNOpenSDK.getIntance();
  235. String method = "nuonuo.OpeMplatform.deleteOrder"; // API方法名
  236. String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
  237. String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
  238. Map<Object, Object> res=JSONUtil.toMap(result);
  239. System.out.println(result);
  240. Object status=res.get("status");
  241. Object message=res.get("message");
  242. if(status !=null && "0000".equals(status.toString())){//调用成功
  243. baseDao.execute("update invoiceOrder set io_dockstatus='' where io_id="+id);
  244. baseDao.execute("insert into invoicedockLog(id_,code_,date_,result_,err_,keyvalue_)values(invoicedockLog_seq.nextval,'开票订单删除',sysdate,'SUCCEED','',"+id+") ");
  245. map.put("success", true);
  246. map.put("message", message);
  247. }else{
  248. baseDao.execute("update invoiceOrder set io_dockstatus='取消失败' where io_id="+id);
  249. baseDao.execute("insert into invoicedockLog(id_,code_,date_,result_,err_,keyvalue_)values(invoicedockLog_seq.nextval,'开票订单删除',sysdate,'FAILED','("+status+")"+message+"',"+id+") ");
  250. map.put("success", false);
  251. map.put("message", "("+status+")"+message);
  252. }
  253. logger.info("pushInvoiceOrder master {} ,id {} status {} message {}",master,id,status,message);
  254. return map;
  255. }else{//数据无效
  256. logger.info("findOrderState err {对接源信息无效} ,master {} , id {} status {} message {}",master,id);
  257. }
  258. return null;
  259. }
  260. @Override
  261. public Map<String, Object> getElecInvoicesById(String master, Integer id) {
  262. Map<String, Object> map = new HashMap<String, Object>();
  263. Object[] obs=baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_invoice_config",new String[]{"appKey","appSecret","token","taxnum"},"username='"+master+"'");
  264. if(obs==null){
  265. return null;//对接信息为配置
  266. }
  267. // System.out.println(url);
  268. String appKey = donlimConfig.getAppKey();
  269. String appSecret = donlimConfig.getAppSecret();
  270. String token = donlimConfig.getToken();
  271. String taxnum= donlimConfig.getTaxnum();
  272. if(donlimConfig.isProd()){
  273. appKey = obs[0].toString();
  274. appSecret = obs[1].toString();
  275. token = obs[2].toString();// 访问令牌
  276. taxnum = obs[3].toString();// 授权企业税号
  277. }
  278. SpObserver.putSp(master);
  279. SqlRowList ioList = baseDao.queryForRowSet("select io_id,io_code from "+master+".invoiceOrder left join "+master+".customer on io_cucode=cu_code " +
  280. " where io_id = "+id);
  281. while(ioList.next()) {
  282. map = getElecInvoices(appKey,appSecret,token,taxnum,ioList.getGeneralInt("io_id"),ioList.getGeneralString("io_code"));
  283. }
  284. return map;
  285. }
  286. @Override
  287. public Map<String, Object> getElecInvoices(String appKey,String appSecret,String token,String taxnum,int ioid,String ioCode){
  288. Map<String, Object> res = new HashMap<String, Object>();
  289. String url=donlimConfig.getRoute();
  290. String errCode = "-999";
  291. String errMsg = "";
  292. try {
  293. //调用对接
  294. FindOrderRelationInvoiceReq foriReq = new FindOrderRelationInvoiceReq();
  295. foriReq.setOriginalOrderNo(ioCode);//订单编号
  296. foriReq.setSaleTaxNum(taxnum);//销方税号
  297. foriReq.setNeedInvoiceSourceDetail("0");//是否需要发票所来源的订单明细,1-是, 0-否(不填默认 0) 当为0时,将不回传orderDetailCallBackVOS。先默认不需要明细
  298. NNOpenSDK sdk = NNOpenSDK.getIntance();
  299. String method = "nuonuo.OpeMplatform.findOrderRelationInvoice"; // API方法名
  300. String content =sdk.convertToUtf8(JSONArray.toJSONString(foriReq));
  301. String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
  302. String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
  303. FindOrderRelationInvoiceResp resp = JSON.parseObject(result , new TypeReference<FindOrderRelationInvoiceResp>() {});
  304. errCode = resp.getStatus();
  305. errMsg = resp.getMessage();
  306. logger.info("ElecInvoice-DownLoad-master: {} ,id {} status {} message {}",SpObserver.getSp(),ioid,errCode,errMsg);
  307. if("0000".equals(errCode)){//调用成功
  308. //记录发票明细
  309. baseDao.execute(getElecInvoicesSqls(ioid,resp.getData()));
  310. commonService.logSRecord("订单关联发票对接",ioid);
  311. }else if(!"8958".equals(errCode)){// {"status":"8958","message":"该订单对应的开票单不存在","data":null} 没有开票单的不记录对接失败日志
  312. if(errMsg.length() > 3990){
  313. errMsg = errMsg.substring(0,3990);
  314. }
  315. baseDao.execute("update invoiceOrder set io_errorMsg='"+errMsg+"' where io_id="+ioid);
  316. commonService.logFRecord("订单关联发票对接","("+errCode+")"+errMsg,ioid);
  317. }
  318. }catch (Exception e){
  319. errMsg = "发票获取异常";
  320. if(StringUtil.hasText(e.getMessage())){
  321. errMsg = e.getMessage();
  322. }else if(e.getCause()!=null&&StringUtil.hasText(e.getCause().getMessage())){
  323. errMsg = e.getCause().getMessage();
  324. }
  325. commonService.logFRecord("订单关联发票对接",errMsg.replaceAll("'","''"),ioid);
  326. }
  327. if(StringUtil.hasText(errMsg)&&!"调用成功".equals(errMsg)){
  328. res.put("success", false);
  329. res.put("errCode", errCode);
  330. res.put("errMsg", errMsg);
  331. }else {
  332. res.put("success", true);
  333. }
  334. return res;
  335. }
  336. @Override
  337. public Map<String, Object> rushRed(String master, int id) {
  338. Map<String, Object> map = new HashMap<String, Object>();
  339. Object[] obs=baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_invoice_config",new String[]{"appKey","appSecret","token","taxnum"},"username='"+master+"'");
  340. String url=donlimConfig.getRoute();
  341. String appKey = donlimConfig.getAppKey();
  342. String appSecret = donlimConfig.getAppSecret();
  343. String token = donlimConfig.getToken();
  344. String taxnum= donlimConfig.getTaxnum();
  345. if(donlimConfig.isProd()){
  346. appKey = obs[0].toString();
  347. appSecret = obs[1].toString();
  348. token = obs[2].toString();// 访问令牌
  349. taxnum = obs[3].toString();// 授权企业税号
  350. }
  351. logger.info("rushRed begin: master {} ,id {} ",master,id);
  352. SpObserver.putSp(master);
  353. SqlRowList rs_main = baseDao.queryForRowSet("select * from invoiceOrder left join customer on io_cucode=cu_code left join elecinvoice on io_id=ei_ioid where io_id="+id);
  354. if (rs_main.hasNext()){
  355. while(rs_main.next()){
  356. RedInvoiceReq redInvoiceReq=new RedInvoiceReq();
  357. redInvoiceReq.setBlueInvoiceLine(rs_main.getGeneralString("io_invoiceline"));//蓝票发票种类
  358. redInvoiceReq.setApplySource("0");//申请方(录入方)身份: 0 销方 1 购方
  359. redInvoiceReq.setSellerTaxNo(donlimConfig.getTaxnum());//销方税号
  360. redInvoiceReq.setBuyerName(rs_main.getGeneralString("cu_name"));//购方名称
  361. redInvoiceReq.setBuyerTaxNo(rs_main.getGeneralString("ei_taxno"));
  362. redInvoiceReq.setRedReason(rs_main.getGeneralString("io_redreason"));
  363. redInvoiceReq.setBlueElecInvoiceNumber(rs_main.getGeneralString("ei_allelectronicinvoicenumber"));
  364. NNOpenSDK sdk = NNOpenSDK.getIntance();
  365. String content =sdk.convertToUtf8(JSONArray.toJSONString(redInvoiceReq));
  366. String method = "nuonuo.OpeMplatform.saveInvoiceRedConfirm"; // API方法名
  367. String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
  368. String resp = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
  369. Map<Object, Object> res=JSONUtil.toMap(resp);
  370. Object code=res.get("code");
  371. Object describe=res.get("describe");
  372. Object result=res.get("result");
  373. if(code !=null && "E0000".equals(code.toString())){//调用成功
  374. queryInvoiceRedConfirm( taxnum, appKey, appSecret, token, url, result.toString());
  375. baseDao.execute("update elecinvoice set ei_redapplycode='"+result.toString()+"' where ei_id="+rs_main.getGeneralInt("ei_id"));
  376. commonService.logSRecord("红字确认单申请("+rs_main.getGeneralString("ei_refno")+")",id);
  377. }else{
  378. commonService.logFRecord("红字确认单申请("+rs_main.getGeneralInt("ei_id")+")","("+code+")"+describe,id);
  379. }
  380. logger.info("pushInvoiceOrder master {} ,id {} code {} describe {} applycode{}",master,id,code,describe,result);
  381. }
  382. }else{//数据无效
  383. logger.info("rushRed err {对接源信息无效} ,master {} , id {} status {} message {}",master,id);
  384. map.put("success", false);
  385. map.put("message", "对接源信息无效");
  386. return map;
  387. }
  388. map.put("success", true);
  389. return map;
  390. }
  391. @Override
  392. public void queryInvoiceRedConfirm(String taxnum, String appKey, String appSecret, String token,String url,String redApplycode) {
  393. NNOpenSDK sdk = NNOpenSDK.getIntance();
  394. String method = "nuonuo.OpeMplatform.queryInvoiceRedConfirm"; // API方法名
  395. Map<String,String> reqParam=new HashMap<>();
  396. reqParam.put("identity","0");
  397. reqParam.put("billId",redApplycode);
  398. String content=JSONArray.toJSONString(reqParam);
  399. String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
  400. String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
  401. System.out.println(result);
  402. }
  403. private List<String> getElecInvoicesSqls(int ioid,List<FindOrderRelationInvoiceDTO> data){
  404. List<String> sqls = new ArrayList<String>();
  405. boolean syncToBillOut = baseDao.isDBSetting("BillOut","syncToBillOut");
  406. for (int i = 0; i < data.size(); i++) {
  407. sqls.add(data.get(i).toMergeSql(ioid,(i+1)));
  408. }
  409. sqls.add("update ELECINVOICE set ei_refno = (case when ei_invoiceLine in ('bs','pc','es','ec') then ei_allElectronicInvoiceNumber else ei_invoiceNumber end) " +
  410. "where ei_ioid = "+ioid+" and EI_INVOICESTATE = 1 and EI_EXCEPTIONMESSAGE is null and (ei_allElectronicInvoiceNumber is not null or ei_invoiceNumber is not null )");
  411. sqls.add("update invoiceOrder set io_refno = (select (min(ei_refno)||(case when max(ei_refno) <> min(ei_refno) then '-'||max(ei_refno) else '' end)) from ELECINVOICE where ei_ioid = io_id)" +
  412. "where io_id = "+ioid);
  413. //更新开票记录
  414. if(syncToBillOut){
  415. sqls.add("update BillOut set bi_refno = (select max(io_refno) from invoiceOrder where io_id = "+ioid+" and io_biid = bi_id) where bi_id in (select io_biid from invoiceOrder where io_id = "+ioid+" and io_refno is not null)");
  416. }
  417. return sqls;
  418. }
  419. }