webservice接口的生成与调用
2017-08-23 22:56
330 查看
webservice接口的生成与调用
webservice的基础学习
http://www.cnblogs.com/yangang2013/p/5708647.html
axis2
http://blog.csdn.net/shimiso/article/details/9943579
wsimport
http://blog.csdn.net/smshuxue/article/details/47861549
桩连接
对开始学习webservice的很有帮助.
下面为项目源码,仅个人记录
webservice的基础学习
http://www.cnblogs.com/yangang2013/p/5708647.html
axis2
http://blog.csdn.net/shimiso/article/details/9943579
wsimport
http://blog.csdn.net/smshuxue/article/details/47861549
桩连接
public SupplyServiceStub getStub() throws AxisFault { SupplyServiceStub stub = new SupplyServiceStub();// 获取桩文件 // 禁用http传输分段特性,从而可以避免出现“文件过早结束”这个错误。 // 必须设置,否则提示500错误 stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED,Boolean.FALSE); // 设置soap请求超时时间 stub._getServiceClient().getOptions().setTimeOutInMilliSeconds(20000); return stub; }
对开始学习webservice的很有帮助.
下面为项目源码,仅个人记录
package com.osgc.service.timer.spd; import java.math.BigDecimal; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import org.apache.log4j.Category; import com.osgc.common.util.DecimalHelper; import com.osgc.oc.beans.PageMsgBean; import com.osgc.oc.jdbc.sql.SelectSql; import com.osgc.oc.jdbc.sql.UpdateSql; import com.osgc.oc.websocket.ServerWebsocketUtil; import com.osgc.plat.model.OCModel; import com.osgc.service.client.suplan.SupplyServiceStub.SupplyUploadInvoiceItem; import com.osgc.service.inter.PtBusiHelper; import com.osgc.service.timer.InvoiceTimer; import com.sph.webservice.mscp.req.xsd.UploadInvoiceReq; import com.sph.webservice.mscp.resp.xsd.SupplyUploadInvoiceReturn; import com.sph.webservice.mscp.vo.xsd.SuplInvoice; import com.sph.webservice.mscp.vo.xsd.SuplInvoiceItem; import webservice.sph.www.SupplyServiceStub; import webservice.sph.www.xsd.UploadInvoice; import webservice.sph.www.xsd.UploadInvoiceResponse; public class SpdUploadInvoiceTimer { @SuppressWarnings("deprecation") Category logger = Category.getInstance(InvoiceTimer.class) 4000 ; StringBuffer ids = null; public String getTaskName() { return "上传发票信息"; } public long getPeriod() { return 5 * 60L; } private void uploadTask(Connection con) throws Exception { process(con, "0001", "17069", "SDSYGYS", "bd1c1fc787ee56ccd2767f15c902c53d"); } public void process(Connection con, String orgno, String customid, String clientid, String checksum) throws Exception { try { sendMsg("正在查询数据库库连接信息..."); String supplyerid = PtBusiHelper.getSupplyidByOrgno(con, orgno);// 供应商ID if (supplyerid == null || "".equals(supplyerid)) { sendMsg("在系统中未定义平台机构编码为" + orgno + "的供应商。"); logger.error("在系统中未定义平台机构编码为" + orgno + "的供应商。"); return; } // 为了保证上传之前数据的完整整性----------------------------start-------------------------先 String sql = "select * from zx_bms_sa_inv_doc a,zx_bms_sa_inv_dtl b\n" + " where a.invid = b.invid\n" + " and a.customid=? and b.sudocdtlid is null and a.credate > SYSDATE -3"; SelectSql sh = new SelectSql(sql); sh.addParam(customid); OCModel todel = sh.execute(con); if (todel.getRowCount() > 0) { for (int i = 0; i < todel.getRowCount(); i++) { String salesdtlids = todel.get(i, "salesdtlids"); String sudocdtlid = getSudocdtlid(con, salesdtlids); sql = " update zx_bms_sa_inv_dtl set sudocdtlid = ? where salesdtlids = ?"; UpdateSql us = new UpdateSql(sql); us.addParam(sudocdtlid); us.addParam(salesdtlids); us.execute(con); con.commit(); } } // 数据库保存的为erp数据,所以不用转码 sql = "select a.salesids," + "b.invno," + "b.invdate," + "count(0) linecounts," + "sum(b.total_line) total_line," + "b.invid " + "from zx_bms_sa_inv_doc a,zx_bms_sa_inv_dtl b " + "where a.invid = b.invid " + "and a.customid=? " + "and b.sudocdtlid is not null and nvl(b.isupload,0) = 0" + "group by b.invno,b.invdate,b.invid,a.salesids"; SelectSql ss = new SelectSql(sql); ss.addParam(customid); OCModel model = ss.execute(con); if (model.getRowCount() > 0) { SuplInvoice[] invoices = getErpData(con, model, supplyerid); if (invoices != null && invoices.length > 0) { SupplyUploadInvoiceReturn ret = uploadInvoice(con, invoices, clientid, checksum);// ----- handleResult(con, ret); } } } catch (Exception e) { e.printStackTrace(); logger.error(e.getMessage()); try { con.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } finally { if (con != null) { try { con.commit(); // con.close(); } catch (SQLException e) { e.printStackTrace(); } } } } // 处理返回结果 public void handleResult(Connection con, SupplyUploadInvoiceReturn ret) throws Exception { com.sph.webservice.mscp.vo.xsd.SupplyUploadInvoiceItem[] list = ret.getUploadInvoiceReturnList(); StringBuffer invno = new StringBuffer(); for (int i = 0; i < list.length; i++) { com.sph.webservice.mscp.vo.xsd.SupplyUploadInvoiceItem item = list[i]; if (item != null) { String errorCode = item.getErrorCode(); String errorMsg = item.getErrorMsg(); if (errorCode != null && !"".equals(errorCode)) { sendMsg("上传供应商发票错误代码【" + errorCode + "】" + "错误信息:" + errorMsg); logger.error("上传供应商发票错误代码【" + errorCode + "】" + "错误信息:" + errorMsg); String invoiceNo = item.getInvoiceNo(); invno.append(invoiceNo + ","); } } } String invnos = ""; if (invno.length() > 0) { invnos = invno.substring(0, invno.length() - 1); String sql = "update zx_bms_sa_inv_dtl set isupload= 0 where invno in ('" + invnos + "')"; UpdateSql us = new UpdateSql(sql); us.execute(con); } }; public void sendMsg(String msg) { PageMsgBean mb = new PageMsgBean(); mb.setMessage(msg); ServerWebsocketUtil.sendPageMsg("6104", mb); } public SuplInvoice[] getErpData(Connection con, OCModel model, String supplyerid) throws Exception { SuplInvoice[] invoiceList = new SuplInvoice[model.getRowCount()]; String sql = ""; SelectSql ss = null; ids = new StringBuffer(); if (model.getRowCount() > 0) { for (int m = 0; m < model.getRowCount(); m++) { int linenum = 0; SuplInvoice invoice = new SuplInvoice();// 发票总单回传 SuplInvoiceItem item = new SuplInvoiceItem();// 发票细单回传 String invid = model.get(m, "invid");// 申请总单ID--发票 // 发票编码 String invno = model.get(m, "invno"); if (invno == null || "".equals(invno)) { continue; } // 发票日期 String invdate = model.get(m, "invdate"); if (invdate == null || "".equals(invdate)) { sendMsg("发票对账管理invid=" + invid + "发票号invno=" + invno + "发票日期不能为空"); logger.error("发票对账管理invid=" + invid + "发票号invno=" + invno + "发票日期不能为空"); continue; } // 发票金额 String total_line = model.get(m, "total_line"); if (total_line == null || "".equals(total_line) || DecimalHelper.comparaDecimal("0.000000", total_line) == 0) { sendMsg("发票对账管理invid=" + invid + "发票号invno=" + invno + "发票日期=" + invdate + "总金额不能为空"); logger.error("发票对账管理invid=" + invid + "发票号invno=" + invno + "发票日期=" + invdate + "总金额不能为空"); continue; } // 根据金额是正负数判断开票模式(+订单开票 -订单退货开票) String invtype = ""; if (DecimalHelper.comparaDecimal(total_line, "0") == 1) { invtype = "1"; } if (DecimalHelper.comparaDecimal(total_line, "0") == -1) { invtype = "3"; } // 获取erp订单类型 if (invtype == null || "".equals(invtype)) { sendMsg("发票对账管理invid=" + invid + "发票号invno=" + invno + "发票日期=" + invdate + "开票模式不能为空"); logger.error("发票对账管理invid=" + invid + "发票号invno=" + invno + "发票日期=" + invdate + "开票模式不能为空"); continue; } // 红票标志 String redflag = "0"; if (DecimalHelper.comparaDecimal(total_line, "0") == 1) { redflag = "0"; } if (DecimalHelper.comparaDecimal(total_line, "0") == -1) { invtype = "1"; } // 发票细单 sql = " select * from zx_bms_sa_inv_dtl where invid = ? and invno=? and to_char(invdate,'yyyy-mm-dd')=?"; ss = new SelectSql(sql); ss.addParam(invid); ss.addParam(invno); ss.addParam(invdate.substring(0, 10)); OCModel detailmodel = ss.execute(con); if (detailmodel.getRowCount() <= 0) { sendMsg("发票对账管理invid=" + invid + "发票号invno=" + invno + "发票日期=" + invdate + "没有对应的细单"); logger.error("发票对账管理invid=" + invid + "发票号invno=" + invno + "发票日期=" + invdate + "没有对应的细单"); continue; } SuplInvoiceItem[] suplInvoiceItem = new SuplInvoiceItem[detailmodel.getRowCount()]; StringBuffer indtlid = new StringBuffer(); for (int n = 0; n < detailmodel.getRowCount(); n++) { String invdtlid = detailmodel.get(n, "invdtlid"); // 物流单号(平台订单号需要更改) String sudocdtlid = detailmodel.get(n, "sudocdtlid"); OCModel platOrderInfoModel = PtBusiHelper.getPlatOrderInfo(con, sudocdtlid); if (platOrderInfoModel.getRowCount() <= 0) { sendMsg("发票对账管理invid=" + invid + "【invdtlid=" + invdtlid + "】平台订单号不能为空"); logger.error("发票对账管理invid=" + invid + "【invdtlid=" + invdtlid + "】平台订单号不能为空"); continue; } String platorderid = platOrderInfoModel.get(0, "platorderid"); // 配送单物品行号 String goodsid = detailmodel.get(n, "goodsid"); // 供应商系统对应物品ID if (goodsid == null || "".equals(goodsid)) { sendMsg("发票对账管理invid=" + invid + "【invid=" + invdtlid + "】商品ID不能为空"); logger.error("发票对账管理invid=" + invid + "【invid=" + invdtlid + "】商品ID不能为空"); continue; } // 批次号 String lotno = detailmodel.get(n, "lotno"); // 物品序列号条码 String goodsno = detailmodel.get(n, "goodsno"); // 客户结算单号 String sasettledtlid = detailmodel.get(n, "sasettledtlid"); String taxrate = detailmodel.get(n, "taxrate");// 税率 String unitprice = detailmodel.get(n, "unitprice");// 开票价 String taxfreeprice = ""; String taxfreeamount = ""; if (unitprice != null && !"".equals(unitprice)) { // 计算无税单价 if (taxrate != null && !"".equals(taxrate)) { taxfreeprice = DecimalHelper.divide(unitprice, DecimalHelper.add("1", taxrate, 10), 10); taxfreeamount = DecimalHelper.multi(unitprice, DecimalHelper.add("1", taxrate, 10), 10); } } String total_line_dtl = detailmodel.get(n, "total_line"); String total_linedtl = ""; if (total_line_dtl != null && !"".equals(total_line_dtl)) { total_linedtl = total_line_dtl; } String goodsqty = detailmodel.get(n, "goodsqty"); if (goodsqty == null || "".equals(goodsqty)) { sendMsg("发票对账管理invid=" + invid + "【invdtlid=" + invdtlid + "】货品数量不能为空"); logger.error("发票对账管理invid=" + invid + "【invdtlid=" + invdtlid + "】货品数量不能为空"); continue; } item.setItemInvoiceQty(new BigDecimal(goodsqty));// 开票物品数量 String plat_order_detail_sid = platOrderInfoModel.get(0, "plat_order_detail_sid"); if (plat_order_detail_sid == null || "".equals(plat_order_detail_sid)) { sendMsg("发票对账管理invid=" + invid + "【invdtlid=" + invdtlid + "】平台订单明细号不能为空"); logger.error("发票对账管理invid=" + invid + "【invdtlid=" + invdtlid + "】平台订单明细号不能为空"); continue; } // item.setResDetailField2(plat_order_detail_sid);// 平台订单明细 // 发票总单回传 invoice.setInvoiceNo(invno);// 发票编号 invoice.setInvoiceDate(toDate(invdate));// 发票日期 invoice.setInvoiceAmount(new BigDecimal(total_line));// 发票金额 invoice.setInvoiceType(Integer.parseInt(invtype));// 开票模式 invoice.setRedFlg(Integer.parseInt(redflag));// 红票标志 // 发票细单 item.setLogisticOrderId(platorderid);// 物流单号 item.setDelyItemLineId(goodsid);// 供应商系统对应物品ID item.setLotNo(lotno);// 批次号 item.setItemSn(goodsno);// 物品序列号条码 item.setCustSettleId(sasettledtlid);// 客户结算单号 item.setTaxPrice(new BigDecimal(unitprice));// 含税单价 item.setTaxFreePrice(new BigDecimal(taxfreeprice));// 无税单价 item.setTaxFreeAmount(new BigDecimal(taxfreeamount));// 单品无税金额 item.setTaxAmount(new BigDecimal(total_linedtl));// 单品含税金额 // item.setMakeDate();//物品生产日期 // item.setExpireDate();//物品失效日期 suplInvoiceItem = item; linenum++; indtlid.append(invdtlid + ","); } invoice.setInvoiceItems(suplInvoiceItem); if (detailmodel.getRowCount() == linenum) { invoiceList[m] = invoice; ids.append(indtlid); } } } return invoiceList; } /* * 日期的处理 */ private Calendar toDate(String invdate) { try { if (invdate.length() > 10) { invdate = invdate.substring(0, 10); } SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = sf.parse(invdate); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar; } catch (ParseException e) { return null; } } /* * 医院入库订单管理--获取--发货单细单ID */ private String getSudocdtlid(Connection con, String salesdtlid) throws Exception { String sql = "select sudocdtlid from zx_supplier_order_manage a where a.itemno = ? "; SelectSql sh = new SelectSql(sql); sh.addParam(salesdtlid); OCModel model = sh.execute(con); if (model.getRowCount() > 0) { return model.get(0, "sudocdtlid"); } else { return ""; } } public SupplyUploadInvoiceReturn uploadInvoice(Connection con, SuplInvoice[] suplInvoice, String clientid, String checksum) throws Exception { SupplyServiceStub su = new SupplyServiceStub(); UploadInvoice uploadInvoice = new UploadInvoice(); UploadInvoiceReq req = new UploadInvoiceReq(); req.setClientID(clientid); req.setCheckSum(checksum); req.setSyn(false); req.setCheckTime(""); req.setInvoiceList(suplInvoice); uploadInvoice.setUploadInvoiceReq(req); UploadInvoiceResponse res = su.uploadInvoice(uploadInvoice); // 将数据改为已上传 String invdtlids = ""; String sql = ""; SupplyUploadInvoiceReturn ret = res.get_return(); if (ret.getUploadInvoiceReturnList() == null || ret.getUploadInvoiceReturnList().length == 0) { invdtlids = ids.substring(0, ids.length() - 1); sql = "update zx_bms_sa_inv_dtl set isupload= 1 where invdtlid in (" + invdtlids + ")"; UpdateSql us = new UpdateSql(sql); us.execute(con); } else if (ret.getUploadInvoiceReturnList().length == 1 && ret.getUploadInvoiceReturnList()[0] == null) { invdtlids = ids.substring(0, ids.length() - 1); sql = "update zx_bms_sa_inv_dtl set isupload= 1 where invdtlid in (" + invdtlids + ")"; UpdateSql us = new UpdateSql(sql); us.execute(con); } return ret; } public static Connection getSysPlatConn() throws Exception { Connection connecttion = null; String dbip = "*******"; String dbname = "****"; String dbuser = "****"; String dbpass = "****"; Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@" + dbip + ":1521:" + dbname; connecttion = DriverManager.getConnection(url, dbuser, dbpass); connecttion.setAutoCommit(false); return connecttion; } public static void main(String[] args) { try { SpdUploadInvoiceTimer timer = new SpdUploadInvoiceTimer(); Connection con = getSysPlatConn(); timer.uploadTask(con); // 上传供应商发票错误代码【1107】错误信息:消耗单号不正确-发票号:6666666-物流单号:20151231102442170001 } catch (Exception e) { e.printStackTrace(); } } }
相关文章推荐
- gsoap生成webservice调用客户端接口
- gsoap生成webservice调用客户端接口
- gsoap生成webservice调用客户端接口
- 生成webservice接口以及通过客户端调用接口。
- gsoap生成webservice调用客户端接口
- eclipse生成的webservice客户端调用webservice接口返回值慢的问题
- 用wsimport在本地生成代理,调用webservice服务接口的示例
- 用jdk生成webservice客户端代码(调用免费接口)
- 提供了webservice的wsdl地址,如何生成消费端(客户端),怎么调用已经提供的wsdl接口
- gsoap生成webservice调用客户端接口 .
- spring配置xfire生成webservice接口 和 调用webservice接口
- 用axis在eclipse中new出webService client生成客户端,调用远程webservice接口的方法
- Java 调用C# webservice接口 生成java客户端 实现方式
- gsoap生成webservice调用客户端接口
- webservice 生成客户端接口调用
- java调用webservice接口方法
- Java WebService接口生成和调用 图文详解
- 用ladon框架封装Python为Webservice接口以及调用接口的方法
- PHP调用WebService接口
- 调用webservice带参数值返回字符串接口的方法详解