示例#1
0
        public static string UpdateStatus(MoConfirmChange CFResult)
        {
            string Message = "";
            string TxnId = CFResult.SerialNumber;
            string MoNumber = CFResult.MoNumber;
            string Result = CFResult.Result;
            SqlParameter outResult = SQLHelper.CreateSqlParameter("@ReturnMessage", 255, "", ParameterDirection.Output);
            SQLHelper.ExecuteNonQuery(SQLHelper.ConnectionString_CFG(),
                                    System.Data.CommandType.StoredProcedure,
                                    "SAP_MOConfirmResult",
                                    SQLHelper.CreateSqlParameter("@Function", 32, "MOConfirmChange"),
                                    SQLHelper.CreateSqlParameter("@TxnId", 32, TxnId.Trim()),
                                    SQLHelper.CreateSqlParameter("@MoNumber", 20, MoNumber.Trim()),
                                    SQLHelper.CreateSqlParameter("@Result", 20, Result.Trim()),
                                    outResult);

            Message = outResult.Value.ToString();
            return Message;

        }
示例#2
0
文件: Execute.cs 项目: wra222/testgit
         public static void ProcessRewok()
         {
             bool running =false;
             const string TxnName = "ConfirmMOChange";
             const string ProgramName = "MO-CONFIRM-REWORK-RUN";
             string methodName = MethodBase.GetCurrentMethod().Name;
             BaseLog.LoggingBegin(logger, methodName);
             try
             {
                 using (TransactionScope txn = UTL.CreateDbTxn())
                 {
                     bool bRun = SQL.CheckConfirmMORunning(ProgramName);
                     if (bRun)
                     {
                         txn.Complete();
                         throw new Exception("The Adjust ConfirmMO Program is running");
                     }
                     SQL.UpdateConfirmMORunning(ProgramName, "T");
                     txn.Complete();
                     running = true;
                 }

                 #region 1. get MO List by 'Complete' status and rework flag =Y in ProductMO
                 List<CompleteMO> completeMOList = SQL.GetCompleteProductMO(EnumProductMOState.Complete, "Y");
                 #endregion

                 foreach (CompleteMO mo in completeMOList)
                 {
                     #region by MO 傳送給SAP Confirm data

                     List<string> productIdList = new List<string>();
                     string errorDescr = "";
                     List<string> errorMsg=new List<string>();                      
                     string txnId = UTL.GenTxnId();
                     string moId = mo.MOId;
                     BaseLog.LoggingInfo(logger, "Caculate Rework MO:{0} TxnId:{1}  assembly componet quantity start....", moId, txnId);

                     #region   2.統計&產生SAP Reworkconfirm MO  資料格式
                     int ret = SQL.CaculateConfirmChangeMO(moId, txnId, mo.IsParentMO, out productIdList, out errorDescr);
                     #endregion

                     if (ret < 0) // 統計失敗
                     {
                         BaseLog.LoggingError(logger, "Caculate Rework MO:{0} ParentMO:{1} TxnId:{2} Error Code:{3} Error Description:{4}",
                                                            moId, mo.IsParentMO, txnId, ret.ToString(), errorDescr);
                         //Send e-mail
                         UTL.SendMail("ConfirmRework MO 統計扣帳失敗",
                                                 string.Format("Caculate Rework MO:{0} ParentMO:{1} TxnId:{2} Error Code:{3} Error Description:{4}",
                                                            moId, mo.IsParentMO, txnId, ret.ToString(), errorDescr));
                     }
                     else if (ret == 0)
                     {
                         BaseLog.LoggingInfo(logger, "MO:{0} have no Change Component", mo);
                         #region ProductMO Confirm Status & insert Log
                         using (TransactionScope txn = UTL.CreateDbTxn())
                         {
                             DateTime now = DateTime.Now;                            

                             //8. update productMO Confirm Status & LastTxnId
                             //9. insert productMOLog
                             //For state is complete
                             SQL.UpdateProductMOStatusAndInsertLogByComplete(TxnName,
                                                                             "ChangeStatus",
                                                                             productIdList,
                                                                             EnumProductMOState.Confirm,
                                                                             txnId,
                                                                             "NA",
                                                                             now,
                                                                             editor,
                                                                             EnumProductMOState.Complete,
                                                                             moId);
                             //for state is not confirm state
                             SQL.UpdateProductMOReworkStatusAndInsertLog(TxnName,
                                                                         "Rework",
                                                                         productIdList,
                                                                         txnId,
                                                                         "NA",
                                                                         now,
                                                                         editor,
                                                                         EnumProductMOState.Confirm,
                                                                         moId);

                             MoConfirmChange MCC = new MoConfirmChange();
                             MCC.SerialNumber = txnId;
                             MCC.MoNumber = moId;
                             MCC.Result = "T"; // T/F                                
                             string Message = SQL.UpdateStatus(MCC);
                             BaseLog.LoggingInfo(logger, Message);

                             // 10.最後一行 commit 
                             txn.Complete();
                         }
                         #endregion
                     }
                     else // 統計成功
                     {

                         #region  3. get ConfirmReworkMO & ConfirmReworkMaterial table by moId, txnId
                         int ConfirmReworkMOID = 0;

                         ZMO_MES_261_H moHeader = BuildSAPConfirmReworkMOHeader(moId, txnId, out ConfirmReworkMOID);
                         List<ZMO_MES_261_I> moItemList = BuildSAPConfirmReworkMOItem(moId, txnId, ConfirmReworkMOID);

                         #endregion

                         #region 4.Insert SendData  &TxnDataLog  table
                         using (TransactionScope txn = UTL.CreateDbTxn())
                         {
                             SQL.InsertSendDataAndLog(EnumMsgCategory.Send,
                                                      TxnName,
                                                      moId,
                                                      "",
                                                      txnId,
                                                      EnumMsgState.Sending,
                                                      DateTime.Now);
                             txn.Complete();
                         }
                         #endregion

                         #region  5.Request SAP MOReworkConfirm Web service
                         if (SAPClient.SentConfirmChangeMO(moHeader, moItemList.ToArray(), out errorMsg))
                         {
                             #region request SAP webservice Success & update SendData/ProductMO Confirm Status & insert Log
                             using (TransactionScope txn = UTL.CreateDbTxn())
                             {
                                 DateTime now = DateTime.Now;

                                 //6. update SendData Success state 
                                 //7.insert TxnDataLog
                                 SQL.UpdateSendDataAndInsertLog(EnumMsgCategory.Receive,
                                                                TxnName,
                                                                moId,
                                                                "",
                                                                txnId,
                                                                "",
                                                                "",
                                                                EnumMsgState.Success,
                                                                now);

                                 //8. update productMO Confirm Status & LastTxnId
                                 //9. insert productMOLog
                                 //For state is complete                                     
                                 SQL.UpdateProductMOStatusAndInsertLogByComplete(TxnName,
                                                                                 "ChangeStatus",
                                                                                 productIdList,
                                                                                 EnumProductMOState.Confirm,
                                                                                 txnId,
                                                                                 "NA",
                                                                                 now,
                                                                                 editor,
                                                                                 EnumProductMOState.Complete,
                                                                                 moId);
                                 //for state is not Confirm State
                                 SQL.UpdateProductMOReworkStatusAndInsertLog(TxnName,
                                                                             "Rework",
                                                                             productIdList,
                                                                             txnId,
                                                                             "NA",
                                                                             now,
                                                                             editor,
                                                                             EnumProductMOState.Confirm,
                                                                             moId);

                                 MoConfirmChange MCC = new MoConfirmChange();
                                 MCC.SerialNumber = txnId;
                                 MCC.MoNumber = moId;
                                 MCC.Result = "T"; // T/F                                
                                 string Message = SQL.UpdateStatus(MCC);
                                 BaseLog.LoggingInfo(logger, Message);

                                 // 10.最後一行 commit 
                                 txn.Complete();
                             }
                             #endregion
                         }
                         else  //Send SAP fail Case
                         {
                             #region request SAP Web service Fail

                             errorDescr=string.Join(";", errorMsg.ToArray());
                             BaseLog.LoggingInfo(logger, errorDescr);
                             //update SendData Fail state & insert TxnDataLog
                             SQL.UpdateSendDataAndInsertLog(EnumMsgCategory.Receive,
                                                            TxnName,
                                                            moId,
                                                            "",
                                                            txnId,
                                                            "",
                                                            errorDescr,
                                                            EnumMsgState.Fail,
                                                            DateTime.Now);
                             //send e-mail ....
                             UTL.SendMail("Request SAP MOConfirmReowrk Fail ",
                                         string.Format("MO:{0} TxnId:{1} Error Description:{2}",
                                                            moId, txnId, errorDescr));
                             #endregion
                         }
                         #endregion


                     }
                     #endregion by MO 傳送給SAP Confirm data
                 }
             }
             catch (Exception e)
             {
                 BaseLog.LoggingError(logger, MethodBase.GetCurrentMethod(), e);
                 //throw ;
                 //send e-mail
                 UTL.SendMail("ConfirmRework MO 異常", e.Message);
                 throw e;
             }
             finally
             {
                 if (running)
                    SQL.UpdateConfirmMORunning(ProgramName, "F");
                 BaseLog.LoggingEnd(logger, methodName);
             }
         }