<%@ WebHandler Language="C#" Class="ashxOrderMatnr" %> using System; using System.Web; using System.IO; using System.Text; using System.Data; using Curtain.DataAccess; using DK.XuWei.WebMes; using Newtonsoft.Json.Linq; using System.Web.SessionState; using Curtain.Extension.ExObjectConvert; /// /// 同步生产订单上的物料编码 /// public class ashxOrderMatnr : IHttpHandler, IReadOnlySessionState { public void ProcessRequest(HttpContext context) { //context.Response.Write(syncMatnr(context)); context.Response.Write("未开启"); } /// /// 同步生产订单上的物料编码 /// /// json private string syncMatnr(HttpContext context) { // 测试 //string _connStr_ss = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.18.32.31)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=dkmes)));User Id=dkmes;Password=dongke"; //string Url138 = "http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZSDFM138"; // 测试 //string userName = "hgsapdk:Sapdk#240"; // 测试 // 正式 string _connStr_ss = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.18.32.116)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=dkmes)));User Id=hgiboss;Password=dongke"; string Url138 = "http://hgs4powd1.hegii.com:8000/RESTAdapter/DKMES/ZSDFM138"; string userName = "PODKMES:Sapdk#800"; string msg = string.Empty; using (IDataAccess conn = DataAccess.CreateByString(DataBaseType.Oracle, _connStr_ss)) { // 查询当前订单 string sql = @" SELECT O.ORDERID, O.VBELN, O.POSNR FROM TP_PM_ORDER O WHERE INSTR(O.ORDERNO, 'HEGII') = 0 AND O.VBELN IS NOT NULL ORDER BY O.ORDERID "; DataTable dtOrder = conn.ExecuteDatatable(sql); if (dtOrder == null || dtOrder.Rows.Count == 0) { return new JsonResult(JsonStatus.error) { message = "数据不完整,请检查!" }.ToJson(); } string VBELN = string.Empty; string POSNR = string.Empty; int orderID = 0; int r = 0; string postString = string.Empty; string result = string.Empty; string ZTYPE = string.Empty; string ZMSG = string.Empty; string EV_MATNR = string.Empty; string EV_WERKS = string.Empty; string EV_MAKTX = string.Empty; decimal EV_KWMENG = 0; foreach (DataRow row in dtOrder.Rows) { VBELN = row["VBELN"].ToString(); POSNR = row["POSNR"].ToString(); int.TryParse(row["ORDERID"].ToString(), out orderID); #region 调用SAP接口 if (!string.IsNullOrEmpty(VBELN) && !string.IsNullOrEmpty(POSNR)) { // 调用SAP接口,获取工厂号和物料号 postString = "{\"IV_VBELN\":\"" + VBELN + "\",\"IV_POSNR\":\"" + POSNR.PadLeft(6, '0') + "\"}"; try { result = JsonClient.PostData2(Url138, postString, "POST", userName); ZTYPE = JObject.Parse(result)["ZTYPE"].ToString(); EV_MATNR = JObject.Parse(result)["EV_MATNR"].ToString(); EV_WERKS = JObject.Parse(result)["EV_WERKS"].ToString(); EV_MAKTX = JObject.Parse(result)["EV_MAKTX"].ToString(); decimal.TryParse(JObject.Parse(result)["EV_KWMENG"].ToString(), out EV_KWMENG); } catch (Exception ex) { return new JsonResult(JsonStatus.error) { message = "ZSDFM138接口获取失败" }.ToJson(); } if ("E".Equals("ZTYPE")) { return new JsonResult(JsonStatus.error) { message = ZMSG }.ToJson(); } if (!"5000".Equals(EV_WERKS)) { msg += orderID + ":不属于当前工厂\n"; continue; } if (string.IsNullOrEmpty(EV_MATNR)) { msg += orderID + ":订单未匹配到物料编码\n"; continue; } #endregion #region 保存订单明细 // 删除明细 sql = "DELETE FROM tp_pm_orderdetail od WHERE od.orderid = @orderid@"; r = conn.ExecuteNonQuery(sql, new CDAParameter("orderid", orderID, DataType.Int32) ); // 新建明细 if (!string.IsNullOrEmpty(EV_MATNR)) { sql = @" INSERT INTO TP_PM_ORDERDETAIL (ORDERID, MATERIALCODE, MAKTX, KWMENG, ACCOUNTID, CREATEUSERID) VALUES (@ORDERID@, @MATERIALCODE@, @MAKTX@, @KWMENG@, @ACCOUNTID@, @CREATEUSERID@) "; r = conn.ExecuteNonQuery(sql, new CDAParameter("ORDERID", orderID, DataType.Int32), new CDAParameter("MATERIALCODE", EV_MATNR, DataType.VarChar), new CDAParameter("MAKTX", EV_MAKTX, DataType.NVarChar), new CDAParameter("KWMENG", EV_KWMENG, DataType.Decimal), new CDAParameter("ACCOUNTID", 1, DataType.Int32), new CDAParameter("CREATEUSERID", 1, DataType.Int32) ); } #endregion } } } return new JsonResult(JsonStatus.success) { message = msg }.ToJson(); } public bool IsReusable { get { return false; } } }