集成接口

16 篇文章 0 订阅
       前几天和SAP集成,实现报工,取消报工接口,发现线上可参照资源很少,联调之后特此分享

1.界面
在这里插入图片描述

2.业务逻辑

      业务逻辑很简单,点击SAP界面,选中并提交报工信息,将信息保存在固定格式XML中,调取SAP接口,将数据传出,成功之后SAP回传XML,在集成方面,重要的是双方要在XML格式上保持一致,互相配合保证联调成功。

3.报工按钮代码,生成XML,将数据插入XML中

/// <summary>
        /// ERP报工
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnERPStart_Click(object sender, EventArgs e)
        {
            try
            {//yehy 20180918 增加
                #region SAP 报工
                if (m_strSAP != "")
                {

                    this.ProductorderReportbindingSource.EndEdit();
                    this.gridView2.PostEditor();
                    DataRow[] drOrdersSAP = dstFinishReport1.ERP_PRODUCTORDERREPORT.Select("SelectRow=True");
                    if (drOrdersSAP.Length > 0)
                    {
                        string strResult = "";
                        foreach (DataRow drOrder in drOrdersSAP)
                        {
                            #region 组织报工数据
                            //MemoryStream swbizData = new MemoryStream();
                            //XmlWriterSettings setting = new XmlWriterSettings();
                            //setting.Encoding = new UTF8Encoding(false);
                            //setting.Indent = true;
                            //XmlWriter xtw = XmlWriter.Create(swbizData, setting);
                            StringWriter swbizData = new StringWriter();
                            XmlTextWriter xtw = new XmlTextWriter(swbizData);
                            xtw.WriteStartDocument();
                            xtw.WriteStartElement("ROOT");
                            xtw.WriteStartElement("ITEM");
                            //xtw.WriteStartElement("INSDATA");
                            //操作完成的确认编号:报工时不需反馈到ERP,报工后ERP反馈该值到MES,用于取消报工
                            xtw.WriteStartElement("RUECK");
                            xtw.WriteString("");
                            xtw.WriteEndElement();
                            //订单号
                            xtw.WriteStartElement("AUFNR");
                            xtw.WriteString(drOrder["VBILLCODE"].ToString());
                            xtw.WriteEndElement();
                            //活动编号:订单工序中的活动编号,与工作中心一一对应
                            xtw.WriteStartElement("VORNR");
                            xtw.WriteString(drOrder["VORNR"].ToString());
                            xtw.WriteEndElement();
                            //已确认的总计产量(报工数量)
                            xtw.WriteStartElement("LMNGA");
                            xtw.WriteString(drOrder["REPORTAMOUNT"].ToString());
                            xtw.WriteEndElement();
                            //已确认的废品数量总计
                            xtw.WriteStartElement("XMNGA");
                            xtw.WriteString(drOrder["USELESSAMOUT"].ToString());
                            xtw.WriteEndElement();
                            //已确认的废品数量总计
                            xtw.WriteStartElement("RMNGA");
                            xtw.WriteString(drOrder["REJECTAMOUNT"].ToString());
                            xtw.WriteEndElement();
                            //差异原因 :不用关注
                            xtw.WriteStartElement("GRUND");
                            xtw.WriteString("");
                            xtw.WriteEndElement();
                            //作业单位
                            xtw.WriteStartElement("ILE01");
                            xtw.WriteString(drOrder["ILE01"].ToString());
                            xtw.WriteEndElement();
                            //作业
                            xtw.WriteStartElement("ISM01");
                            xtw.WriteString("");
                            xtw.WriteEndElement();
                            string USER = "DH_RFC_USER";//校验用户
                            string PASSW = "123456";//校验密码
                            string ITYPE = "CK_PP_I_0004";//接口代码
                            strResult = R_logic.MesToSapUniversalInterfaceForOrder(m_strWorkShopName, "REPORT", drOrder["VBILLCODE"].ToString(), USER, PASSW, ITYPE, "", "", "", swbizData.ToString());
                            m_Operate.SaveOperateInfo(" ERP报工", "FrmFinishPlanToERP.btnERPStart_Click", strResult, "");
                        }
                        if (strResult.IndexOf("成功") > -1)
                        {
                            UserMessages.ShowInfoBox("报工成功!");
                            //刷新下方列表数据
                            finishreportbindingsource_CurrentChanged(null, null);
                        }
                    }
                }
                #endregion
            }
            catch (Exception ex)
            {
                m_Operate.SaveOperateInfo(" SAP报工", "FrmFinishPlanToERP.btnERPStart_Click", ex.ToString(), "");
                throw ex;
            }
        }
  1. 数据传至zp001中间接口
 /// <summary>
        /// 手动获取院SAP订单最新版
        /// </summary>
        /// <param name="USER"></param>
        /// <param name="PASSW"></param>
        /// <param name="ITYPE"></param>
        /// <param name="p_OP1"></param>
        /// <param name="p_OP2"></param>
        /// <param name="p_OP3"></param>
        /// <param name="p_bizData"></param>
        /// <returns></returns>
        public string MesToSapUniversalInterfaceForOrder(string p_isInclude, string p_bizOperation, string p_key, string USER, string PASSW, string ITYPE, string p_OP1, string p_OP2, string p_OP3, string p_bizData)
        {//yehy 20180921 增加
            try
            {
                using (zpp0001.zpp0001 zpp = new zpp0001.zpp0001())
                {
                    zpp.Url = ReflectionHelper.GetUrl("zpp0001");
                    zpp.Credentials = System.Net.CredentialCache.DefaultCredentials;
                    return zpp.MesToSapUniversalInterfaceForOrder(p_isInclude, p_bizOperation, p_key,USER, PASSW, ITYPE, p_OP1, p_OP2, p_OP3, p_bizData);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
  1. 调取对方接口,实现数据传递,增加日志(快速查找联调bug)
/// <summary>
    /// yehy
    /// </summary>
    /// <param name="USER">用户名(固定格式)</param>
    /// <param name="PASSW">密码(固定格式)</param>
    /// <param name="ITYPE">接口</param>
    /// <param name="p_OP1"></param>
    /// <param name="p_OP2"></param>
    /// <param name="p_OP3"></param>
    /// <param name="p_bizData"></param>
    /// <returns></returns>
    [WebMethod]
    public string MesToSapUniversalInterfaceForOrder(string p_isInclude, string p_bizOperation, string p_key, string USER, string PASSW, string ITYPE, string p_OP1, string p_OP2, string p_OP3, string p_bizData)
    {
        try
        {
            string strResult = "";//返回结果
            string strTibcoFactory = "";//TIBCO需要的场所参数
            string strEryFactory = "";//ERP需要的场所参数
            string strWorkCenter = "";//工作中心
            #region 场所参数赋值
            #endregion
            #region 调用接口
            using (SAP.ZPUBLICKWEBSERVICE reject = new SAP.ZPUBLICKWEBSERVICE())
            {

                #region//获取接口服务路径
                string strUrl = "";
                //yehy 20180927 urlxml引入
                DataRow[] drUrl = this.dstISURL.Tables[0].Select("URLKey = 'SAP报工'");
                if (drUrl.Length > 0)
                {
                    strUrl = drUrl[0]["URLValue"].ToString();
                }
                reject.Url = strUrl;
                reject.Credentials = System.Net.CredentialCache.DefaultCredentials;
                //将值放入
                SAP.ZgsmDataProcess zdp = new SAP.ZgsmDataProcess();
                zdp.User = USER;
                zdp.Passw = PASSW;
                zdp.Itype = ITYPE;
                zdp.Plant = p_OP1;
                zdp.Begda = p_OP2;
                zdp.Endda = p_OP3;
                zdp.Input = p_bizData;
                #region yehy 测试xml
                //DataSet dstReport1 = new DataSet();
                //using (XmlReader reader = XmlReader.Create(new StringReader(p_bizData)))
                //{
                //    dstReport1.ReadXml(reader);
                //}
                #endregion
                #endregion
                switch (ITYPE)
                {
                    case "CK_PP_I_0004":
                        #region 报工
                        m_Operate.SaveOperateInfo("订单报工", "REPORT", "fromUnit:" + strTibcoFactory + ",toUnit:" + strTibcoFactory + ""
                             + ",fromSys:MES,toSys:ERP,bizOperation:ZINT_MES_03" + ",key:" + p_key + ",bizData:" + p_bizData + "", "");// 增加日志
                        //报工(p_key:订单号,p_bizData:报工数据,p_OP1:预留,p_OP2:预留,p_OP4:REPORTID,用于更新状态、订单上报编号和确认计数器)
                        SAP.ZgsmDataProcessResponse zdpResponse = new SAP.ZgsmDataProcessResponse();
                        //接收response类型
                        zdpResponse = reject.ZgsmDataProcess(zdp);
                        DataSet dstReport = new DataSet();
                        //传回 解读是否成功xml
                        using (XmlReader reader = XmlReader.Create(new StringReader(zdpResponse.Output)))
                        {
                            dstReport.ReadXml(reader);
                            string strStatus = dstReport.Tables["ROOT"].Rows[0]["MSGTY"].ToString();//接收信息状态,S:接收成功
                            string strMessage = dstReport.Tables["ROOT"].Rows[0]["MSGTX"].ToString();//接收状态说明,更多用在接收出错时使用
                            //不返回数据 功能不需要 yehy 20180927
                            //string strBizData = dstReport.Tables["Result"].Rows[0]["BizData"].ToString();
                            if (strStatus == "S")
                            {

                                //更新订单上报编号和确认计数器
                                string strSqlUpdate = "update erp_productorderreport ep set ep.state = '已上报'";
                                SqlStruct sqlStructUpdate = new SqlStruct();
                                sqlStructUpdate.SqlString = strSqlUpdate;
                                sqlStructUpdate.CommandType = CommandType.Text;
                                if (strSqlUpdate.Length > 0)
                                {
                                    ServiceManager.GetDatabase().ExecuteNonQuery(sqlStructUpdate);
                                }
                                strResult = "上报成功!";
                            }
                            else
                            {
                                strResult = "获取失败!失败原因:" + strMessage + "!";
                            }
                        }
                        #endregion
                        break;
                    case "CK_PP_I_0006":
                        #region 取消报工
                        m_Operate.SaveOperateInfo("取消报工", "CCREPORT", "fromUnit:" + strTibcoFactory + ",toUnit:" + strTibcoFactory + ""
                            + ",fromSys:MES,toSys:ERP,bizOperation:ZINT_MES_04" + ",key:" + p_key + ",bizData:" + p_bizData + " ,OP1:" + p_OP1 + ",OP2:" + p_OP2 + "", "");//jiangb 20160405 增加日志
                        //取消报工(p_key:订单号,p_bizData:报工数据,p_OP1:预留,p_OP2:预留,p_OP4:REPORTID,用于更新状态、订单上报编号和确认计数器)
                        SAP.ZgsmDataProcessResponse zdpResponseno = new SAP.ZgsmDataProcessResponse();
                        zdpResponseno = reject.ZgsmDataProcess(zdp);
                        DataSet dstCCReport = new DataSet();
                        using (XmlReader reader = XmlReader.Create(new StringReader(zdpResponseno.Output)))
                        {
                            dstCCReport.ReadXml(reader);
                            string strStatus = dstCCReport.Tables["ROOT"].Rows[0]["MSGTY"].ToString();//接收信息状态,S:接收成功
                            string strMessage = dstCCReport.Tables["ROOT"].Rows[0]["MSGTX"].ToString();//接收状态说明,更多用在接收出错时使用
                            if (strStatus == "S")
                            {
                                //更新订单上报编号和确认计数器
                                string strSqlUpdate = "update erp_productorderreport ep set ep.state = '取消上报' ";
                                SqlStruct sqlStructUpdate = new SqlStruct();
                                sqlStructUpdate.SqlString = strSqlUpdate;
                                sqlStructUpdate.CommandType = CommandType.Text;
                                if (strSqlUpdate.Length > 0)
                                {
                                    ServiceManager.GetDatabase().ExecuteNonQuery(sqlStructUpdate);
                                }
                                strResult = "取消上报成功!";
                            }
                            else
                            {
                                strResult = "获取失败!失败原因:" + strMessage + "!";
                            }
                        }
                        #endregion
                        break;
                }
            }
            #endregion
            return strResult;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
  1. SAP接口URL
 <ServiceURL>
    <URLKey>SAP报工</URLKey>
    <URLValue>http://保密原因此处略:zpublickwebservice?sap-client=300</URLValue>
    <MEMO>SAP报工接口路径</MEMO>
  </ServiceURL>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot可以集成多个接口文档框架,其中两个比较常用的是Swagger和Knife4j。下面分别介绍它们的集成方法: 1. Swagger集成: Swagger是一个开源的接口文档框架,可以帮助我们生成、展示和测试API文档。在Spring Boot中,我们可以通过添加相应的依赖和配置来集成Swagger。 首先,在pom.xml文件中添加Swagger的依赖: ```xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> ``` 然后,在Spring Boot的启动类上添加`@EnableSwagger2`注解: ```java import springfox.documentation.swagger2.annotations.EnableSwagger2; @EnableSwagger2 @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 接下来,我们可以在Controller类的方法上使用Swagger的注解来描述接口信息,例如: ```java import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @Api(tags = "示例接口") public class SampleController { @GetMapping("/hello") @ApiOperation("示例接口") public String hello() { return "Hello, Swagger!"; } } ``` 最后,启动Spring Boot应用程序,访问`http://localhost:8080/swagger-ui.html`即可查看生成的接口文档。 2. Knife4j集成: Knife4j是Swagger的增强版,提供了更多的功能和样式定制。在Spring Boot中,我们可以通过添加相应的依赖和配置来集成Knife4j。 首先,在pom.xml文件中添加Knife4j的依赖: ```xml <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.2</version> </dependency> ``` 然后,在Spring Boot的启动类上添加`@EnableKnife4j`注解: ```java import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; @EnableKnife4j @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 接下来,我们可以在Controller类的方法上使用Knife4j的注解来描述接口信息,例如: ```java import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @Api(tags = "示例接口") public class SampleController { @GetMapping("/hello") @ApiOperation("示例接口") public String hello() { return "Hello, Knife4j!"; } } ``` 最后,启动Spring Boot应用程序,访问`http://localhost:8080/doc.html`即可查看生成的接口文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值