您的位置:首页 > 其它

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

桩连接

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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  web service