ERPServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package com.uas.eis.service.Impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.alibaba.fastjson.TypeReference;
  6. import com.alibaba.fastjson.serializer.SerializerFeature;
  7. import com.google.gson.JsonObject;
  8. import com.uas.eis.config.DonlimConfig;
  9. import com.uas.eis.core.config.SpObserver;
  10. import com.uas.eis.core.support.TokenProperties;
  11. import com.uas.eis.dao.*;
  12. import com.uas.eis.entity.*;
  13. import com.uas.eis.sdk.entity.ApiResult;
  14. import com.uas.eis.sdk.resp.ApiResponse;
  15. import com.uas.eis.service.ERPService;
  16. import com.uas.eis.utils.*;
  17. import nuonuo.open.sdk.NNOpenSDK;
  18. import org.slf4j.Logger;
  19. import org.slf4j.LoggerFactory;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  22. import org.springframework.stereotype.Service;
  23. import java.text.SimpleDateFormat;
  24. import java.util.*;
  25. /**
  26. * @author koul
  27. * @email koul@usoftchina.com
  28. * @date 2021-12-06 18:27
  29. */
  30. @Service
  31. public class ERPServiceImpl implements ERPService {
  32. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  33. private static Map<String,String> tokenConfig = TokenProperties.getAllProperty();
  34. @Autowired
  35. private BaseDao baseDao;
  36. @Autowired
  37. private DonlimConfig donlimConfig;
  38. @Override
  39. public Map<String, Object> pushInvoiceOrder(String master, int id) {
  40. Map<String, Object> map = new HashMap<String, Object>();
  41. Object[] obs=baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_invoice_config",new String[]{"appKey","appSecret","token","taxnum"},"username='"+master+"'");
  42. String url=donlimConfig.getRoute();
  43. System.out.println(url);
  44. String appKey = donlimConfig.getAppKey();
  45. String appSecret = donlimConfig.getAppSecret();
  46. String token = donlimConfig.getToken();
  47. String taxnum= donlimConfig.getTaxnum();
  48. if(donlimConfig.isProd()){
  49. appKey = obs[0].toString();
  50. appSecret = obs[1].toString();
  51. token = obs[2].toString();// 访问令牌
  52. taxnum = obs[3].toString();// 授权企业税号
  53. }
  54. logger.info("pushInvoiceOrder begin: master {} ,id {} ",master,id);
  55. SpObserver.putSp(master);
  56. //Object tab_ma=baseDao.getFieldDataByCondition("enterprise","EN_WHICHSYSTEM","1=1");
  57. SqlRowList rs_main = baseDao.queryForRowSet("select * from invoiceOrder left join customer on io_cucode=cu_code where io_id="+id);
  58. if(rs_main.next()){
  59. //数据组装
  60. InvoiceOrderDTO invoiceOrderDTO=new InvoiceOrderDTO();
  61. invoiceOrderDTO.setOrderType("1");
  62. invoiceOrderDTO.setAutoInvoiceFlag("false");//自动开票
  63. invoiceOrderDTO.setRepeatCall("0");
  64. OrderDTO orderDTO=new OrderDTO();
  65. orderDTO.setOriginalOrderNo(rs_main.getGeneralString("io_code"));
  66. orderDTO.setAddDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(rs_main.getDate("io_date")));
  67. orderDTO.setInvoiceLine(rs_main.getGeneralString("io_invoiceline"));
  68. orderDTO.setSpecificFactor("0");
  69. orderDTO.setSaleTaxNum(donlimConfig.getTaxnum());
  70. orderDTO.setBuyerName(rs_main.getGeneralString("cu_name"));//客户名称
  71. orderDTO.setTaxNum(rs_main.getGeneralString("cu_taxid").trim());//购方税号
  72. orderDTO.setAccount(rs_main.getGeneralString("cu_bankaccount"));
  73. orderDTO.setAddress(rs_main.getGeneralString("cu_add1"));
  74. orderDTO.setTelephone(rs_main.getGeneralString("cu_tel"));
  75. orderDTO.setRemark(rs_main.getGeneralString("io_remark"));
  76. invoiceOrderDTO.setOrderInfo(orderDTO);
  77. SqlRowList rs_det = baseDao.queryForRowSet("select * from invoiceOrderdet_view where id_ioid="+id+" order by id_detno");
  78. List<OrderDetDTO> dets=new ArrayList<>();//商品列表
  79. while(rs_det.next()){
  80. OrderDetDTO orderDetDTO=new OrderDetDTO();
  81. orderDetDTO.setRowNo(rs_det.getGeneralString("id_id"));//唯一值
  82. orderDetDTO.setGoodsName(rs_det.getGeneralString("pr_detail"));
  83. orderDetDTO.setSpec(rs_det.getGeneralString("pr_spec"));
  84. orderDetDTO.setUnit(rs_det.getGeneralString("pr_unit"));
  85. orderDetDTO.setNum(rs_det.getGeneralString("id_qty"));
  86. orderDetDTO.setPrice(rs_det.getGeneralString("id_price"));
  87. orderDetDTO.setTaxRate(rs_det.getGeneralString("taxrate"));//0.13
  88. orderDetDTO.setTaxAmount(rs_det.getGeneralString("id_amount"));
  89. orderDetDTO.setHsbz(rs_det.getGeneralString("hsbz"));
  90. orderDetDTO.setSpbm(rs_det.getGeneralString("spbm"));
  91. dets.add(orderDetDTO);
  92. }
  93. invoiceOrderDTO.setOrderOriginalDetails(dets);
  94. invoiceOrderDTO.setInvoiceGoodsTransports(new ArrayList<>());
  95. System.out.println(JSONArray.toJSONString(invoiceOrderDTO));
  96. //调用对接
  97. NNOpenSDK sdk = NNOpenSDK.getIntance();
  98. String method = "nuonuo.OpeMplatform.saveOrder"; // API方法名
  99. String content =sdk.convertToUtf8(JSONArray.toJSONString(invoiceOrderDTO));
  100. String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
  101. String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
  102. Map<Object, Object> res=JSONUtil.toMap(result);
  103. System.out.println(result);
  104. Object status=res.get("status");
  105. Object message=res.get("message");
  106. if(status !=null && "0000".equals(status.toString())){//调用成功
  107. baseDao.execute("update invoiceOrder set io_dockstatus='对接成功' where io_id="+id);
  108. baseDao.execute("insert into invoicedockLog(id_,code_,date_,result_,err_,keyvalue_)values(invoicedockLog_seq.nextval,'开票订单对接',sysdate,'SUCCEED','',"+id+") ");
  109. }else{
  110. baseDao.execute("update invoiceOrder set io_dockstatus='对接失败' where io_id="+id);
  111. baseDao.execute("insert into invoicedockLog(id_,code_,date_,result_,err_,keyvalue_)values(invoicedockLog_seq.nextval,'开票订单对接',sysdate,'FAILED','("+status+")"+message+"',"+id+") ");
  112. }
  113. logger.info("pushInvoiceOrder master {} ,id {} status {} message {}",master,id,status,message);
  114. map.put("success", true);
  115. map.put("message", message);
  116. return map;
  117. }else{//数据无效
  118. logger.info("pushInvoiceOrder err {对接源信息无效} ,master {} , id {} status {} message {}",master,id);
  119. map.put("success", false);
  120. map.put("message", "对接源信息无效");
  121. return map;
  122. }
  123. }
  124. @Override
  125. public Map<String, Object> invoiceOrderSubmitKp(String master, int id) {
  126. Object[] obs=baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_invoice_config",new String[]{"appKey","appSecret","token","taxnum"},"username='"+master+"'");
  127. String url=donlimConfig.getRoute();
  128. System.out.println(url);
  129. String appKey = donlimConfig.getAppKey();
  130. String appSecret = donlimConfig.getAppSecret();
  131. String token = donlimConfig.getToken();
  132. String taxnum= donlimConfig.getTaxnum();
  133. if(donlimConfig.isProd()){
  134. appKey = obs[0].toString();
  135. appSecret = obs[1].toString();
  136. token = obs[2].toString();// 访问令牌
  137. taxnum = obs[3].toString();// 授权企业税号
  138. }
  139. SpObserver.putSp(master);
  140. SqlRowList rs_main = baseDao.queryForRowSet("select * from invoiceOrder left join customer on io_cucode=cu_code where io_id="+id);
  141. if(rs_main.next()){
  142. NNOpenSDK sdk = NNOpenSDK.getIntance();
  143. String method = "nuonuo.OpeMplatform.submitKp"; // API方法名
  144. String code= rs_main.getGeneralString("io_code");
  145. Map<String,String> reqParam=new HashMap<>();
  146. reqParam.put("orderNo",code);
  147. String content=JSONArray.toJSONString(reqParam);
  148. String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
  149. String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
  150. System.out.println(result);
  151. }else{//数据无效
  152. logger.info("findOrderState err {对接源信息无效} ,master {} , id {} status {} message {}",master,id);
  153. }
  154. return null;
  155. }
  156. @Override
  157. public Map<String, Object> findOrderState(String master, int id) {
  158. Map<String, Object> map = new HashMap<String, Object>();
  159. Object[] obs=baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_invoice_config",new String[]{"appKey","appSecret","token","taxnum"},"username='"+master+"'");
  160. if(obs==null){
  161. return null;//对接信息为配置
  162. }
  163. String url=donlimConfig.getRoute();
  164. System.out.println(url);
  165. String appKey = donlimConfig.getAppKey();
  166. String appSecret = donlimConfig.getAppSecret();
  167. String token = donlimConfig.getToken();
  168. String taxnum= donlimConfig.getTaxnum();
  169. if(donlimConfig.isProd()){
  170. System.out.println("prod");
  171. appKey = obs[0].toString();
  172. appSecret = obs[1].toString();
  173. token = obs[2].toString();// 访问令牌
  174. taxnum = obs[3].toString();// 授权企业税号
  175. }else{
  176. System.out.println("dev");
  177. }
  178. SpObserver.putSp(master);
  179. SqlRowList rs_main = baseDao.queryForRowSet("select * from invoiceOrder left join customer on io_cucode=cu_code where io_id="+id);
  180. if(rs_main.next()){
  181. System.out.println(taxnum);
  182. String code= rs_main.getGeneralString("io_code");
  183. NNOpenSDK sdk = NNOpenSDK.getIntance();
  184. String method = "nuonuo.OpeMplatform.findOrderState"; // API方法名
  185. Map<String,String> reqParam=new HashMap<>();
  186. reqParam.put("originalOrderNo",code);
  187. reqParam.put("saleTaxNum",taxnum);
  188. String content=JSONArray.toJSONString(reqParam);
  189. String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
  190. String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
  191. FindOrderStateResp resp = JSON.parseObject(result , new TypeReference<FindOrderStateResp>() {});
  192. System.out.println(resp.getCode());
  193. System.out.println(resp.getMessage());
  194. System.out.println(resp.getData().getInvoiceStatus());
  195. System.out.println(resp.getData().getErrorMsg());
  196. System.out.println(result);//{"status":"0000","message":"调用成功","data":{"invoiceStatus":"0","errorMsg":null}}
  197. map.put("success", true);
  198. map.put("result", result);
  199. return map;
  200. }else{//数据无效
  201. logger.info("findOrderState err {对接源信息无效} ,master {} , id {} status {} message {}",master,id);
  202. }
  203. return null;
  204. }
  205. }