package com.uas.eis.service.Impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.serializer.SerializerFeature; import com.google.gson.JsonObject; import com.uas.eis.config.DonlimConfig; import com.uas.eis.core.config.SpObserver; import com.uas.eis.core.support.TokenProperties; import com.uas.eis.dao.*; import com.uas.eis.entity.*; import com.uas.eis.sdk.entity.ApiResult; import com.uas.eis.sdk.resp.ApiResponse; import com.uas.eis.service.ERPService; import com.uas.eis.utils.*; import nuonuo.open.sdk.NNOpenSDK; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.*; /** * @author koul * @email koul@usoftchina.com * @date 2021-12-06 18:27 */ @Service public class ERPServiceImpl implements ERPService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private static Map tokenConfig = TokenProperties.getAllProperty(); @Autowired private BaseDao baseDao; @Autowired private DonlimConfig donlimConfig; @Override public Map pushInvoiceOrder(String master, int id) { Map map = new HashMap(); Object[] obs=baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_invoice_config",new String[]{"appKey","appSecret","token","taxnum"},"username='"+master+"'"); String url=donlimConfig.getRoute(); System.out.println(url); String appKey = donlimConfig.getAppKey(); String appSecret = donlimConfig.getAppSecret(); String token = donlimConfig.getToken(); String taxnum= donlimConfig.getTaxnum(); if(donlimConfig.isProd()){ appKey = obs[0].toString(); appSecret = obs[1].toString(); token = obs[2].toString();// 访问令牌 taxnum = obs[3].toString();// 授权企业税号 } logger.info("pushInvoiceOrder begin: master {} ,id {} ",master,id); SpObserver.putSp(master); //Object tab_ma=baseDao.getFieldDataByCondition("enterprise","EN_WHICHSYSTEM","1=1"); SqlRowList rs_main = baseDao.queryForRowSet("select * from invoiceOrder left join customer on io_cucode=cu_code where io_id="+id); if(rs_main.next()){ //数据组装 InvoiceOrderDTO invoiceOrderDTO=new InvoiceOrderDTO(); invoiceOrderDTO.setOrderType("1"); invoiceOrderDTO.setAutoInvoiceFlag("false");//自动开票 invoiceOrderDTO.setRepeatCall("0"); OrderDTO orderDTO=new OrderDTO(); orderDTO.setOriginalOrderNo(rs_main.getGeneralString("io_code")); orderDTO.setAddDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(rs_main.getDate("io_date"))); orderDTO.setInvoiceLine(rs_main.getGeneralString("io_invoiceline")); orderDTO.setSpecificFactor("0"); orderDTO.setSaleTaxNum(donlimConfig.getTaxnum()); orderDTO.setBuyerName(rs_main.getGeneralString("cu_name"));//客户名称 orderDTO.setTaxNum(rs_main.getGeneralString("cu_taxid").trim());//购方税号 orderDTO.setAccount(rs_main.getGeneralString("cu_bankaccount")); orderDTO.setAddress(rs_main.getGeneralString("cu_add1")); orderDTO.setTelephone(rs_main.getGeneralString("cu_tel")); orderDTO.setRemark(rs_main.getGeneralString("io_remark")); invoiceOrderDTO.setOrderInfo(orderDTO); SqlRowList rs_det = baseDao.queryForRowSet("select * from invoiceOrderdet_view where id_ioid="+id+" order by id_detno"); List dets=new ArrayList<>();//商品列表 while(rs_det.next()){ OrderDetDTO orderDetDTO=new OrderDetDTO(); orderDetDTO.setRowNo(rs_det.getGeneralString("id_id"));//唯一值 orderDetDTO.setGoodsName(rs_det.getGeneralString("pr_detail")); orderDetDTO.setSpec(rs_det.getGeneralString("pr_spec")); orderDetDTO.setUnit(rs_det.getGeneralString("pr_unit")); orderDetDTO.setNum(rs_det.getGeneralString("id_qty")); orderDetDTO.setPrice(rs_det.getGeneralString("id_price")); orderDetDTO.setTaxRate(rs_det.getGeneralString("taxrate"));//0.13 orderDetDTO.setTaxAmount(rs_det.getGeneralString("id_amount")); orderDetDTO.setHsbz(rs_det.getGeneralString("hsbz")); orderDetDTO.setSpbm(rs_det.getGeneralString("spbm")); dets.add(orderDetDTO); } invoiceOrderDTO.setOrderOriginalDetails(dets); invoiceOrderDTO.setInvoiceGoodsTransports(new ArrayList<>()); System.out.println(JSONArray.toJSONString(invoiceOrderDTO)); //调用对接 NNOpenSDK sdk = NNOpenSDK.getIntance(); String method = "nuonuo.OpeMplatform.saveOrder"; // API方法名 String content =sdk.convertToUtf8(JSONArray.toJSONString(invoiceOrderDTO)); String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可 String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content); Map res=JSONUtil.toMap(result); System.out.println(result); Object status=res.get("status"); Object message=res.get("message"); if(status !=null && "0000".equals(status.toString())){//调用成功 baseDao.execute("update invoiceOrder set io_dockstatus='对接成功' where io_id="+id); baseDao.execute("insert into invoicedockLog(id_,code_,date_,result_,err_,keyvalue_)values(invoicedockLog_seq.nextval,'开票订单对接',sysdate,'SUCCEED','',"+id+") "); }else{ baseDao.execute("update invoiceOrder set io_dockstatus='对接失败' where io_id="+id); baseDao.execute("insert into invoicedockLog(id_,code_,date_,result_,err_,keyvalue_)values(invoicedockLog_seq.nextval,'开票订单对接',sysdate,'FAILED','("+status+")"+message+"',"+id+") "); } logger.info("pushInvoiceOrder master {} ,id {} status {} message {}",master,id,status,message); map.put("success", true); map.put("message", message); return map; }else{//数据无效 logger.info("pushInvoiceOrder err {对接源信息无效} ,master {} , id {} status {} message {}",master,id); map.put("success", false); map.put("message", "对接源信息无效"); return map; } } @Override public Map invoiceOrderSubmitKp(String master, int id) { Object[] obs=baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_invoice_config",new String[]{"appKey","appSecret","token","taxnum"},"username='"+master+"'"); String url=donlimConfig.getRoute(); System.out.println(url); String appKey = donlimConfig.getAppKey(); String appSecret = donlimConfig.getAppSecret(); String token = donlimConfig.getToken(); String taxnum= donlimConfig.getTaxnum(); if(donlimConfig.isProd()){ appKey = obs[0].toString(); appSecret = obs[1].toString(); token = obs[2].toString();// 访问令牌 taxnum = obs[3].toString();// 授权企业税号 } SpObserver.putSp(master); SqlRowList rs_main = baseDao.queryForRowSet("select * from invoiceOrder left join customer on io_cucode=cu_code where io_id="+id); if(rs_main.next()){ NNOpenSDK sdk = NNOpenSDK.getIntance(); String method = "nuonuo.OpeMplatform.submitKp"; // API方法名 String code= rs_main.getGeneralString("io_code"); Map reqParam=new HashMap<>(); reqParam.put("orderNo",code); String content=JSONArray.toJSONString(reqParam); String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可 String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content); System.out.println(result); }else{//数据无效 logger.info("findOrderState err {对接源信息无效} ,master {} , id {} status {} message {}",master,id); } return null; } @Override public Map findOrderState(String master, int id) { Map map = new HashMap(); Object[] obs=baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_invoice_config",new String[]{"appKey","appSecret","token","taxnum"},"username='"+master+"'"); if(obs==null){ return null;//对接信息为配置 } String url=donlimConfig.getRoute(); System.out.println(url); String appKey = donlimConfig.getAppKey(); String appSecret = donlimConfig.getAppSecret(); String token = donlimConfig.getToken(); String taxnum= donlimConfig.getTaxnum(); if(donlimConfig.isProd()){ System.out.println("prod"); appKey = obs[0].toString(); appSecret = obs[1].toString(); token = obs[2].toString();// 访问令牌 taxnum = obs[3].toString();// 授权企业税号 }else{ System.out.println("dev"); } SpObserver.putSp(master); SqlRowList rs_main = baseDao.queryForRowSet("select * from invoiceOrder left join customer on io_cucode=cu_code where io_id="+id); if(rs_main.next()){ System.out.println(taxnum); String code= rs_main.getGeneralString("io_code"); NNOpenSDK sdk = NNOpenSDK.getIntance(); String method = "nuonuo.OpeMplatform.findOrderState"; // API方法名 Map reqParam=new HashMap<>(); reqParam.put("originalOrderNo",code); reqParam.put("saleTaxNum",taxnum); String content=JSONArray.toJSONString(reqParam); String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可 String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content); FindOrderStateResp resp = JSON.parseObject(result , new TypeReference() {}); System.out.println(resp.getCode()); System.out.println(resp.getMessage()); System.out.println(resp.getData().getInvoiceStatus()); System.out.println(resp.getData().getErrorMsg()); System.out.println(result);//{"status":"0000","message":"调用成功","data":{"invoiceStatus":"0","errorMsg":null}} map.put("success", true); map.put("result", result); return map; }else{//数据无效 logger.info("findOrderState err {对接源信息无效} ,master {} , id {} status {} message {}",master,id); } return null; } }