fubin 3 лет назад
Родитель
Сommit
ecdfac6b29
1 измененных файлов с 89 добавлено и 64 удалено
  1. 89 64
      DK.Service/SAPDataService/SAPDataLogic.cs

+ 89 - 64
DK.Service/SAPDataService/SAPDataLogic.cs

@@ -13,6 +13,7 @@ using Dongke.IBOSS.PRD.WCF.DataModels;
 using Oracle.ManagedDataAccess.Client;
 using Newtonsoft.Json.Linq;
 using Newtonsoft.Json;
+using System.Linq;
 
 namespace Dongke.IBOSS.PRD.Service.SAPHegiiDataService
 {
@@ -1069,24 +1070,24 @@ namespace Dongke.IBOSS.PRD.Service.SAPHegiiDataService
                 string yyyymmddhh24miss = date.ToString("yyyyMMddHH24miss");
                 int r = 0;
 
-                // 查询出当前日志外,最新的一次日志
-                string sqlString = "SELECT t.executedateend\n" +
-                            "  FROM (SELECT dl.executedateend\n" +
-                            "          FROM tsap_hegii_datalog_bg dl\n" +
-                            "         WHERE dl.logtype = '3'\n" +
-                            "           AND dl.datastuts = 'S'\n" +
-                            "           AND dl.datacode = :datacode\n" +
-                            "           AND dl.logid   <> :logid\n" +
-                            "         ORDER BY dl.executedateend DESC) t\n" +
-                            " WHERE rownum = 1";
+                //// 查询出当前日志外,最新的一次日志
+                //string sqlString = "SELECT t.executedateend\n" +
+                //            "  FROM (SELECT dl.executedateend\n" +
+                //            "          FROM tsap_hegii_datalog_bg dl\n" +
+                //            "         WHERE dl.logtype = '3'\n" +
+                //            "           AND dl.datastuts = 'S'\n" +
+                //            "           AND dl.datacode = :datacode\n" +
+                //            "           AND dl.logid   <> :logid\n" +
+                //            "         ORDER BY dl.executedateend DESC) t\n" +
+                //            " WHERE rownum = 1";
 
-                paras = new OracleParameter[]
-                {
-                    new OracleParameter(":datacode", datacode),
-                    new OracleParameter(":logid", logid)
-                };
+                //paras = new OracleParameter[]
+                //{
+                //    new OracleParameter(":datacode", datacode),
+                //    new OracleParameter(":logid", logid)
+                //};
 
-                object executedateend = oracleConn.GetSqlResultToObj(sqlString, paras);
+                //object executedateend = oracleConn.GetSqlResultToObj(sqlString, paras);
 
                 //if (executedateend == null || Convert.ToDateTime(executedateend) >= date)
                 //{
@@ -1095,39 +1096,55 @@ namespace Dongke.IBOSS.PRD.Service.SAPHegiiDataService
                 //	return sre;
                 //}
 
+                // 查询当前节点所有不为S的日志
+                string sqlString = @"
+                SELECT DL.LOGID
+                  FROM TSAP_HEGII_DATALOG_BG DL
+                 WHERE DL.LOGTYPE = '3'
+                   AND DL.DATASTUTS <> 'S'
+                   AND DL.DATACODE = :DATACODE ";
 
-                sqlString = "SELECT TO_CHAR(wd.yyyymmdd) yyyymmdd\n" +
-                            "      ,TO_CHAR(5000) WERKS\n" +
-                            "      ,TO_CHAR(wd.goodscode) GROES\n" +
-                            "      ,TO_CHAR(wd.sapcode) MATNR\n" +
-                            "      ,TO_CHAR(wd.usercode) ZGHNU\n" +
-                            "      ,TO_CHAR(wd.datacode) ZJDNU\n" +
-                            "      ,to_char(DL.EXECUTEDATEBEGIN, 'YYYYMMDD' ) ZSCNU\n" +
-                            "      ,to_char(DL.EXECUTEDATEBEGIN, 'HH24MISS' ) ZKSSJ\n" +
-                            "      ,to_char(DL.EXECUTEDATEEND, 'YYYYMMDDHH24MISS' ) ZJSRQ\n" +
-                            "      ,TO_CHAR(wd.ordercode) VBELN\n" +
-                            "      ,TO_CHAR(wd.orderitem) POSNR\n" +
-                            "      ,TO_CHAR(wd.outputnum) ZCLNG\n" +
-                            "      ,TO_CHAR(wd.scrapnum) ZSPNG\n" +
-                            "      ,TO_CHAR(wd.cleanupnum) ZQCNG\n" +
-                            "      ,TO_CHAR(wd.recoverynum) ZHSNG\n" +
-                            "      ,TO_CHAR(wd.repairnum) ZGBNG\n" +
-                            "      ,TO_CHAR(wd.testmouldflag) ZSCMS\n" +
-                            "      -- ,TO_CHAR(wd.zscs) zscs\n" +
-                            "      ,DECODE( :datacode,20,TO_CHAR(wd.zscs),'T') AS zscs\n" +
-                            "      ,TO_CHAR(wd.WORKSHOP) ZSCCJ\n" +
-                            "      ,TO_CHAR( :yyyymmdd) CHARG\n" +
-                            "      ,TO_CHAR( :datacode) datacode\n" +
-                            "  FROM tsap_hegii_workdata_bg wd\n" +
-                            "  INNER JOIN TSAP_HEGII_DATALOG_BG DL\n" +
-                            "  ON wd.LOGID = DL.LOGID \n" +
-                            " WHERE wd.logid = :logid";
+                paras = new OracleParameter[]
+                {
+                    new OracleParameter(":DATACODE", datacode),
+                };
+
+                DataTable dtLogID = oracleConn.GetSqlResultToDt(sqlString, paras);
+                string logIDs = "," + string.Join(",", dtLogID.AsEnumerable().Select(d => d.Field<decimal>("LOGID")).ToArray()) + ",";
+
+                sqlString = @"
+                SELECT TO_CHAR(WD.YYYYMMDD) YYYYMMDD,
+                       TO_CHAR(5000) WERKS,
+                       TO_CHAR(WD.GOODSCODE) GROES,
+                       TO_CHAR(WD.SAPCODE) MATNR,
+                       TO_CHAR(WD.USERCODE) ZGHNU,
+                       TO_CHAR(WD.DATACODE) ZJDNU,
+                       TO_CHAR(DL.EXECUTEDATEBEGIN, 'YYYYMMDD') ZSCNU,
+                       TO_CHAR(DL.EXECUTEDATEBEGIN, 'HH24MISS') ZKSSJ,
+                       TO_CHAR(DL.EXECUTEDATEEND, 'YYYYMMDDHH24MISS') ZJSRQ,
+                       TO_CHAR(WD.ORDERCODE) VBELN,
+                       TO_CHAR(WD.ORDERITEM) POSNR,
+                       TO_CHAR(WD.OUTPUTNUM) ZCLNG,
+                       TO_CHAR(WD.SCRAPNUM) ZSPNG,
+                       TO_CHAR(WD.CLEANUPNUM) ZQCNG,
+                       TO_CHAR(WD.RECOVERYNUM) ZHSNG,
+                       TO_CHAR(WD.REPAIRNUM) ZGBNG,
+                       TO_CHAR(WD.TESTMOULDFLAG) ZSCMS,
+                       DECODE(:DATACODE, 20, TO_CHAR(WD.ZSCS), 'T') AS ZSCS,
+                       TO_CHAR(WD.WORKSHOP) ZSCCJ,
+                       TO_CHAR(:YYYYMMDD) CHARG,
+                       TO_CHAR(:DATACODE) DATACODE,
+                       DL.SAPGUID
+                  FROM TSAP_HEGII_WORKDATA_BG WD
+                 INNER JOIN TSAP_HEGII_DATALOG_BG DL
+                    ON WD.LOGID = DL.LOGID
+                 WHERE INSTR(:LOGIDS, WD.LOGID) > 0 ";
 
                 paras = new OracleParameter[]
                 {
-                    new OracleParameter(":logid", OracleDbType.Int32, logid, ParameterDirection.Input),
-                    new OracleParameter(":datacode",datacode),
-                    new OracleParameter(":yyyymmdd",yyyymmdd),
+                    new OracleParameter(":DATACODE",datacode),
+                    new OracleParameter(":YYYYMMDD",yyyymmdd),
+                    new OracleParameter(":LOGIDS", OracleDbType.Varchar2, logIDs, ParameterDirection.Input),
                 };
 
                 DataTable workData = oracleConn.GetSqlResultToDt(sqlString, paras);
@@ -1140,22 +1157,22 @@ namespace Dongke.IBOSS.PRD.Service.SAPHegiiDataService
                 string result = PostData(url030, postString, "POST");
                 if (JObject.Parse(result)["TABLE_OUT"] != null && JObject.Parse(result)["TABLE_OUT"].ToString().Length > 0)
                 {
-                    sqlString = "update TSAP_HEGII_WorkData_bg t set t.ZTime =sysdate, ZTYPE = :ZTYPE, ZMSG = :ZMSG where logid = " + logid +
-                            " \n and YYYYMMDD='" + yyyymmdd + "' and WorkCode='" + workcode +
-                            "' and DataCode=:DataCode and GoodsCode=:GoodsCode and SAPCode=:SAPCode and UserCode=:UserCode \n" +
-                            "and OrderCode=:OrderCode and OrderItem=:OrderItem";
+                    //sqlString = "update TSAP_HEGII_WorkData_bg t set t.ZTime =sysdate, ZTYPE = :ZTYPE, ZMSG = :ZMSG where logid = " + logid +
+                    //        " \n and YYYYMMDD='" + yyyymmdd + "' and WorkCode='" + workcode +
+                    //        "' and DataCode=:DataCode and GoodsCode=:GoodsCode and SAPCode=:SAPCode and UserCode=:UserCode \n" +
+                    //        "and OrderCode=:OrderCode and OrderItem=:OrderItem";
 
-                    //object obj = JObject.Parse(result)["TABLE_OUT"];
-                    Dictionary<string, object> obj = JsonConvert.DeserializeObject<Dictionary<string, object>>(result);
+                    ////object obj = JObject.Parse(result)["TABLE_OUT"];
+                    //Dictionary<string, object> obj = JsonConvert.DeserializeObject<Dictionary<string, object>>(result);
 
-                    object TABLE_OUT;
-                    obj.TryGetValue("TABLE_OUT", out TABLE_OUT);
+                    //object TABLE_OUT;
+                    //obj.TryGetValue("TABLE_OUT", out TABLE_OUT);
 
-                    obj = JsonConvert.DeserializeObject<Dictionary<string, object>>(TABLE_OUT + "");
-                    object item1;
-                    obj.TryGetValue("item", out item1);
+                    //obj = JsonConvert.DeserializeObject<Dictionary<string, object>>(TABLE_OUT + "");
+                    //object item1;
+                    //obj.TryGetValue("item", out item1);
 
-                    JArray arr = JArray.FromObject(item1);
+                    //JArray arr = JArray.FromObject(item1);
 
                     //foreach (JObject item in arr)
                     //{
@@ -1175,21 +1192,29 @@ namespace Dongke.IBOSS.PRD.Service.SAPHegiiDataService
                     //}
                 }
 
-                sqlString = "update tsap_hegii_datalog_bg t set t.EndTime = sysdate, DataStuts = :DataStuts, DataMSG =:msg where logid = :logid";
+                sqlString = @"
+                UPDATE TSAP_HEGII_DATALOG_BG T
+                   SET T.ENDTIME = SYSDATE,
+                       DATASTUTS = :DATASTUTS,
+                       DATAMSG   = :MSG
+                 WHERE INSTR(:LOGIDS, LOGID) > 0 ";
                 paras = new OracleParameter[]
                 {
-                    new OracleParameter(":DataStuts",OracleDbType.Varchar2, JObject.Parse(result)["ZTYPE"].ToString(), ParameterDirection.Input),
-                    new OracleParameter(":msg",OracleDbType.Varchar2, JObject.Parse(result)["ZMSG"].ToString(), ParameterDirection.Input),
-                    new OracleParameter(":logid",OracleDbType.Int32, logid, ParameterDirection.Input),
+                    new OracleParameter(":DATASTUTS",OracleDbType.Varchar2, JObject.Parse(result)["ZTYPE"].ToString(), ParameterDirection.Input),
+                    new OracleParameter(":MSG",OracleDbType.Varchar2, JObject.Parse(result)["ZMSG"].ToString(), ParameterDirection.Input),
+                    new OracleParameter(":LOGIDS", OracleDbType.Varchar2, logIDs, ParameterDirection.Input),
                 };
                 r = oracleConn.ExecuteNonQuery(sqlString, paras);
                 if (JObject.Parse(result)["ZTYPE"].ToString() == "S")
                 {
-                    sqlString = "update tsap_hegii_datalog_bg t set t.createuserid = :userid where logid = :logid";
+                    sqlString = @"
+                    UPDATE TSAP_HEGII_DATALOG_BG T
+                       SET T.CREATEUSERID = :USERID
+                     WHERE INSTR(:LOGIDS, LOGID) > 0 ";
                     paras = new OracleParameter[]
                     {
-                        new OracleParameter(":logid",OracleDbType.Int32, logid, ParameterDirection.Input),
-                        new OracleParameter(":userid",OracleDbType.Int32, userid, ParameterDirection.Input),
+                        new OracleParameter(":USERID",OracleDbType.Int32, userid, ParameterDirection.Input),
+                        new OracleParameter(":LOGIDS", OracleDbType.Varchar2, logIDs, ParameterDirection.Input)
                     };
                     r = oracleConn.ExecuteNonQuery(sqlString, paras);
                 }