fubin 2 年 前
コミット
51e68a83fe
2 ファイル変更181 行追加12 行削除
  1. 12 12
      wwwroot/App_Code/SyncZhongTai.cs
  2. 169 0
      wwwroot/api/ZhongTai/ashxOrderMatnr.ashx

+ 12 - 12
wwwroot/App_Code/SyncZhongTai.cs

@@ -337,10 +337,10 @@ public class SyncZhongTai
                 #region 结果处理
                 char tozhongtaiflag = message.Equals("条码保存成功") ? '1' : '0';
                 // 超时也当作成功
-                if (tozhongtaiflag.Equals('0') && message.Contains("超时"))
-                {
-                    tozhongtaiflag = '1';
-                }
+                //if (tozhongtaiflag.Equals('0') && message.Contains("超时"))
+                //{
+                //    tozhongtaiflag = '1';
+                //}
 
                 // 更新推送结果
                 string barcodes = "('" + string.Join("','", dtSyncFinishProduct.AsEnumerable().Select(d => d.Field<string>("BARCODE")).ToArray()) + "')";
@@ -642,10 +642,10 @@ public class SyncZhongTai
                 #region 结果处理
                 char tozhongtaiflag = message.Equals("条码保存成功") ? '1' : '0';
                 // 超时也当作成功
-                if (tozhongtaiflag.Equals('0') && message.Contains("超时"))
-                {
-                    tozhongtaiflag = '1';
-                }
+                //if (tozhongtaiflag.Equals('0') && message.Contains("超时"))
+                //{
+                //    tozhongtaiflag = '1';
+                //}
 
                 // 更新推送结果
                 string barcodes = "('" + string.Join("','", dtSyncFinishProduct.AsEnumerable().Select(d => d.Field<string>("BARCODE")).ToArray()) + "')";
@@ -947,10 +947,10 @@ public class SyncZhongTai
                 #region 结果处理
                 char tozhongtaiflag = message.Equals("条码保存成功") ? '1' : '0';
                 // 超时也当作成功
-                if (tozhongtaiflag.Equals('0') && message.Contains("超时"))
-                {
-                    tozhongtaiflag = '1';
-                }
+                //if (tozhongtaiflag.Equals('0') && message.Contains("超时"))
+                //{
+                //    tozhongtaiflag = '1';
+                //}
 
                 // 更新推送结果
                 string barcodes = "('" + string.Join("','", dtSyncFinishProduct.AsEnumerable().Select(d => d.Field<string>("BARCODE")).ToArray()) + "')";

+ 169 - 0
wwwroot/api/ZhongTai/ashxOrderMatnr.ashx

@@ -0,0 +1,169 @@
+<%@ 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;
+
+/// <summary>
+/// 同步生产订单上的物料编码
+/// </summary>
+public class ashxOrderMatnr : IHttpHandler, IReadOnlySessionState
+{
+
+    public void ProcessRequest(HttpContext context)
+    {
+        //context.Response.Write(syncMatnr(context));
+        context.Response.Write("未开启");
+    }
+
+    /// <summary>
+    /// 同步生产订单上的物料编码
+    /// </summary>
+    /// <returns>json</returns>
+    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;
+        }
+    }
+
+}