%@ 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;
}
}
}