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; }
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); } }