webservice接口的生成与调用

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);
    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[n] = 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();
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值