示例#1
0
文件: Main.cs 项目: wra222/testgit
        static void Main(string[] args)
        {
            //if (File.Exists(@"\\10.99.183.50\fsm_com\Mailbox\CNU23090R7-28924AD3C1D7.ACK"))
            //{
            //    Console.WriteLine(@"CheckCDSIResult  find \\10.99.183.50\fsm_com\Mailbox\CNU23090R7-28924AD3C1D7.ACK Ack file!!");
               
            //}
            
            AppConfig config = new AppConfig();
            string msg="";
            string localmsg = "";
                     
            Log log = new Log(config.logPath, config.logPrefixName);
            log.write(LogType.Info, 0, "Main" , "", "Start Program...");
            try 
            {
                SqlConnection dbconnect = new SqlConnection(config.DBConnectStr);
                dbconnect.Open();               
                log.write(LogType.Info, 0, "main", "connected with HPIMES DB", "OK");

                SqlConnection CdsiDbconnect = new SqlConnection(config.CDSIDBConnectStr);
                CdsiDbconnect.Open();
                log.write(LogType.Info, 0, "main", "connected with CDSI DB", "OK");

                List<string> SnoIdList = SQLStatement.GetCDSISNList(dbconnect, log, config.OffsetDay);
                log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main", "Start", "Send Link CDSI PO.........................");
                List<ProductInfo> AssignedPOList = new List<ProductInfo>();

                #region send PO Link to CDSI Server
                foreach (string snoId in SnoIdList)
                {
                    #region //0.Check ProductID info
                    ProductInfo productInfo = SQLStatement.GetProductInfo(dbconnect, log, snoId);
                     if (string.IsNullOrEmpty(productInfo.CUSTSN) ||
                            string.IsNullOrEmpty(productInfo.MAC) ||
                            string.IsNullOrEmpty(productInfo.ATSNAV))
                     {
                            #region send  email not found PO need mantain PO data
                            string emptyDataMsg = "";
                            string DataMsg = "";

                            if (string.IsNullOrEmpty(productInfo.CUSTSN))
                                emptyDataMsg = emptyDataMsg + " CustomSN: ";
                            else
                                DataMsg = DataMsg + " CustomSN:" + productInfo.CUSTSN;

                           if (string.IsNullOrEmpty(productInfo.MAC))
                               emptyDataMsg = emptyDataMsg + " MAC: ";
                           else
                               DataMsg = DataMsg + " MAC:" + productInfo.MAC;

                           if (string.IsNullOrEmpty(productInfo.ATSNAV))
                               emptyDataMsg = emptyDataMsg + " ATSNAV: ";
                           else
                               DataMsg = DataMsg + " ATSNAV:" + productInfo.ATSNAV;

                            //localmsg = "<br/> CDSI ProductID:" + snoId + " CustomSN:" + (string.IsNullOrEmpty(productInfo.CUSTSN) ? "" : productInfo.CUSTSN) + " " +
                            //    " MAC:" + (string.IsNullOrEmpty(productInfo.MAC) ? "" : productInfo.MAC) + " " +
                            //    " ATSNAV:" + (string.IsNullOrEmpty(productInfo.ATSNAV) ? "" : productInfo.ATSNAV) + " " + " 為空!!! 請檢查設定!!" + "<br/>";

                            localmsg = "<br/> CDSI ProductID:" + snoId + DataMsg +";" +emptyDataMsg + "為空!!! 請檢查設定或等過站分配" +emptyDataMsg +"值!!" + "<br/>";

                            msg = msg + localmsg;

                            log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main",
                                           "Data is null or empty",
                                           localmsg);

                           
                            #endregion
                            continue;
                     }
                    #endregion


                     #region //1.Get PO
                     string po = SQLStatement.GetSnoPoMo(dbconnect, log, snoId);
                    if (string.IsNullOrEmpty(po))
                    {
                        #region assign PO
                        if (config.AutoAssignPO == 1)
                        {
                            CDSIPO poInfo = new CDSIPO();
                            poInfo.ProductID = snoId;
                            poInfo.MOId = productInfo.MOId;
                            poInfo.PO = "";
                            poInfo.DeliveryNo = "";

                            #region assign PO
                            if (SQLStatement.AssignPO(dbconnect, log, config, productInfo, poInfo))
                            {
                                log.write(LogType.Info, 0, "AssignPO", poInfo.ProductID, "PO:" + poInfo.PO + " DeliveryNo:" + poInfo.DeliveryNo);

                                SQLStatement.InsertCDSIPoMo(dbconnect, log, poInfo);

                                po = SQLStatement.GetSnoPoMo(dbconnect, log, snoId);

                                //Thread.Sleep(config.CDSICmdInterval);

                                //SendCDSIPOLinkCmd(dbconnect,
                                //                                       log,
                                //                                       config,
                                //                                       productInfo,
                                //                                       po,
                                //                                        ref msg);
                                string msgData = "";
                                SendCDSIUpdateCmd(dbconnect,
                                                                    log,
                                                                    config,
                                                                    productInfo,
                                                                    po,
                                                                    true,
                                                                    ref msgData);
                                productInfo.PO =po;
                                AssignedPOList.Add(productInfo);
                            }
                            else
                            {
                                #region send  email not found PO need upload PO data
                                localmsg = "<br/>" + "CDSI ProductID:" + snoId + 
                                                                 " CustomSN:" + productInfo.CUSTSN +
                                                                  " MAC:" + productInfo.MAC +
                                                                 " ATSNAV:" + productInfo.ATSNAV +
                                                                 " Model:" + productInfo.Model + 
                                                                 " 找不到船務資料,請上傳船務資料!!" + "<br/>";
                                msg = msg + "<br/>" + localmsg;

                                log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main",
                                               "Not Found DN",
                                               localmsg);

                                #endregion

                                continue;
                            }
                            #endregion
                        }
                        else
                        {
                            #region send  email not found PO need upload PO data
                            localmsg = "<br/>" + "CDSI ProductID:" + snoId +
                                                                " MAC:" + productInfo.MAC +
                                                               " ATSNAV:" + productInfo.ATSNAV + 
                                                               " CustomSN:" +  productInfo.CUSTSN  + 
                                                               " Model:" + productInfo.Model + 
                                                               " 未設定PO, 請至iMES維護頁面CDSI PO" + "<br/>";
                            msg = msg + "<br/>" + localmsg;

                            log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main",
                                           "Not Found PO",
                                           localmsg);

                            #endregion
                            continue;
                        }
                        #endregion
                    }
                    else
                    {
                        SendCDSIPOLinkCmd(dbconnect,
                                                                       log,
                                                                       config,
                                                                       productInfo,
                                                                       po,
                                                                        ref msg);
                        productInfo.PO = po;
                        AssignedPOList.Add(productInfo);
                    }
                     #endregion
                }
                #endregion
                Thread.Sleep(config.CDSICmdInterval);

                log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main", "Start", "Send CDSI Update & Retrive Asset Tag.........................");
                #region Send OMSUpdate & Retrive ; used assigned PO for each send comand to CDSI Server
                //foreach (string snoId in SnoIdList)
                foreach (ProductInfo productInfo in AssignedPOList)
                {                   
                        #region //0. Check CDSI Server FactoryPO
                        int cdsiCategory = SQLStatement.CheckCDSIFactoryPO(CdsiDbconnect,
                                                                                                                       log,
                                                                                                                       productInfo.PO);
                        if (cdsiCategory == 0)   // not found CDSI FactoryPO
                        {
                            #region not found CDSI FactoryPO
                            localmsg = "<br/> CDSI ProductID:" + productInfo.ProductID +
                                " CustomSN:" + productInfo.CUSTSN + 
                                " MAC:" + productInfo.MAC + 
                                " ATSNAV:" +productInfo.ATSNAV +
                                 " Model:" + productInfo.Model +
                                " PO:" + productInfo.PO + " 在CDSI DB 找不到FactoryPO!!!" + "<br/>";

                            msg = msg + localmsg;

                            log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main",
                                           "not found CDSI FactoryPO",
                                           localmsg);

                            #endregion

                            continue;

                        }
                        else
                        {
                            localmsg = "CDSI FactoryPO Category: " + (cdsiCategory== 1? "Shell PO" : " Nornal PO");
                            log.write(LogType.Info, AppDomain.CurrentDomain.Id, "Main",
                                          "CheckCDSIFactoryPO",
                                          localmsg);
                        }
                        #endregion
                        
                        SendCDSICmd(dbconnect,
                                                   log,
                                                   config,
                                                   productInfo,
                                                   productInfo.PO,
                                                   false,
                                                   ref msg);

                  
                }
                
                #endregion
            }
            catch (Exception e)
            {
                #region exception handle
                msg = e.StackTrace + " " +  e.Message;
                 log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main", "StackTrace", e.StackTrace);
                 log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main", "Message", e.Message);
                         
               
                SendMail.Send(config.FromAddress,
                                                      config.ToAddress,
                                                      config.CcAddress,
                                                      config.MailSubject + "program error",
                                                      msg,
                                                      config.EmailServer,
                                                      log);
                #endregion
            }
            finally
            {
                #region error send email
                if (!string.IsNullOrEmpty(msg))
                {
                    SendMail.Send(config.FromAddress,
                                                      config.ToAddress,
                                                      config.CcAddress,
                                                      config.MailSubject + " 資料有誤!!",
                                                      msg,
                                                      config.EmailServer,
                                                      log);
                }
                
                #endregion
               
            }
               
        }
示例#2
0
文件: Main.cs 项目: wra222/testgit
        static void Main(string[] args)
        {        
            
            AppConfig config = new AppConfig();
            string msg="";
            string localmsg = "";
                     
            Log log = new Log(config.logPath, config.logPrefixName);
            log.write(LogType.Info, 0, "Main" , "", "Start Program...");
            try 
            {
                SqlConnection dbconnect = new SqlConnection(config.DBConnectStr);
                dbconnect.Open();               
                log.write(LogType.Info, 0, "main", "connected with HPIMES DB", "OK");

              

                List<string> SnoIdList = SQLStatement.GetCNRSSNList(dbconnect, log, config.OffsetDay);
                log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main", "Start", "Send Link CNRS PO.........................");
                List<ProductInfo> AssignedPOList = new List<ProductInfo>();

                #region send PO Link to CNRS Table
                foreach (string snoId in SnoIdList)
                {
                    #region //0.Check ProductID info
                    ProductInfo productInfo = SQLStatement.GetProductInfo(dbconnect, log, snoId);
                     if (string.IsNullOrEmpty(productInfo.CUSTSN) ||
                            string.IsNullOrEmpty(productInfo.MAC) ||
                            productInfo.IsCNRS!="Y" ||
                            productInfo.IsPO!="Y")
                     {
                            #region send  email not found PO need mantain PO data
                            string emptyDataMsg = "";
                            string DataMsg = "";

                            if (string.IsNullOrEmpty(productInfo.CUSTSN))
                                emptyDataMsg = emptyDataMsg + " CustomSN: ";
                            else
                                DataMsg = DataMsg + " CustomSN:" + productInfo.CUSTSN;

                           if (string.IsNullOrEmpty(productInfo.MAC))
                               emptyDataMsg = emptyDataMsg + " MAC: ";
                           else
                               DataMsg = DataMsg + " MAC:" + productInfo.MAC;

                           if (productInfo.IsCNRS != "Y")
                               emptyDataMsg = emptyDataMsg + " ModelInfo.Name='CNRS'  ModelInfo.Value!=Y ";

                           if (productInfo.IsPO != "Y")
                               emptyDataMsg = emptyDataMsg + " ModelInfo.Name='PO'  ModelInfo.Value!=Y ";

                            //localmsg = "<br/> CDSI ProductID:" + snoId + " CustomSN:" + (string.IsNullOrEmpty(productInfo.CUSTSN) ? "" : productInfo.CUSTSN) + " " +
                            //    " MAC:" + (string.IsNullOrEmpty(productInfo.MAC) ? "" : productInfo.MAC) + " " +
                            //    " ATSNAV:" + (string.IsNullOrEmpty(productInfo.ATSNAV) ? "" : productInfo.ATSNAV) + " " + " 為空!!! 請檢查設定!!" + "<br/>";

                            localmsg = "<br/> CNRS ProductID:" + snoId + DataMsg +";" +emptyDataMsg + "為空!!! 請檢查ModelInfo設定或等過站分配" +emptyDataMsg +"值!!" + "<br/>";

                            msg = msg + localmsg;

                            log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main",
                                           "Data is null or empty",
                                           localmsg);

                           
                            #endregion
                            continue;
                     }
                    #endregion

                     #region //1.Get PO
                     string po = SQLStatement.GetSnoPoMo(dbconnect, log, snoId);
                    if (string.IsNullOrEmpty(po))
                    {
                        #region assign PO
                       
                        CDSIPO poInfo = new CDSIPO();
                        poInfo.ProductID = snoId;
                        poInfo.MOId = productInfo.MOId;
                        poInfo.PO = "";
                        poInfo.DeliveryNo = "";
                        poInfo.DeliveryQty=0;
                        poInfo.RemainQty=0;

                        #region assign PO
                        if (SQLStatement.AssignPO(dbconnect, log, config, productInfo, poInfo))
                        {
                            log.write(LogType.Info, 0, "AssignPO", poInfo.ProductID, "PO:" + poInfo.PO + " DeliveryNo:" + poInfo.DeliveryNo);

                            SpecialOrder demianOrder = SQLStatement.GetSpecialOrder(dbconnect, log, poInfo.PO);
                            if (demianOrder != null && demianOrder.Category.Equals("CNRS"))
                            {  
                                if (demianOrder.Qty != poInfo.DeliveryQty && config.bCheckQty)
                                {
                                    #region send  email Delivery Qty is not equal SpecialOrder Qty 
                                    localmsg = "<br/>" + "CNRS ProductID:" + snoId +
                                                                     " CustomSN:" + productInfo.CUSTSN +
                                                                      " MAC:" + productInfo.MAC +
                                                                     " Model:" + productInfo.Model +
                                                                     "FactoryPO:" + demianOrder.FactoryPO+
                                                                     " SpecialOrder Qty: " + demianOrder.Qty + " Delivery Qty:" +poInfo.DeliveryQty + ",請檢查SpecialOrder, Delivery資料!!" + "<br/>";
                                    msg = msg + "<br/>" + localmsg;

                                    log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main",
                                                   "Qty is not same",
                                                   localmsg);

                                    #endregion

                                    continue;
                                }

                                if (!demianOrder.Status.Equals("Active") && !demianOrder.Status.Equals("Created"))
                                {
                                    #region send  email Delivery Qty is not equal SpecialOrder Qty
                                    localmsg = "<br/>" + "CNRS ProductID:" + snoId +
                                                                     " CustomSN:" + productInfo.CUSTSN +
                                                                      " MAC:" + productInfo.MAC +
                                                                     " Model:" + productInfo.Model +
                                                                     "FactoryPO:" + demianOrder.FactoryPO +
                                                                     " SpecialOrder Status: " + demianOrder.Status + "不是Active or Created Status,請檢查SpecialOrder 資料!!" + "<br/>";
                                    msg = msg + "<br/>" + localmsg;

                                    log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main",
                                                   "Wrong SpecialOrder Status ",
                                                   localmsg);

                                    #endregion
                                    continue;
                                }
                                string assetTag = demianOrder.AssetTag;
                                #region 若 SpecialOrder Qty>1 or AssetTag="" 則分配重AssetRange 分配Asset Tag
                                if (demianOrder.Qty>1 || string.IsNullOrEmpty(demianOrder.AssetTag))
                                {
                                   IOnlineGenerateAST onlineAst= ServiceAgent.getInstance().GetObjectByName<IOnlineGenerateAST>("IMESService.OnlineGenerateAST");
                                   if (onlineAst == null)
                                   {
                                       throw new Exception("Remoting call FA  Generate AST Number Service Fail, Please check FA Remoting Port and IP setting value in app.config file !!!");
                                   }
                                   assetTag=onlineAst.GenAstNumberByAstHPPo(snoId,demianOrder.FactoryPO, config.ASTStation, "CNRS", "CNRS", "HP");
                                   if (string.IsNullOrEmpty(assetTag))
                                   {
                                       throw new Exception("Generate AST Number is null !!!");
                                   }
                                }
                                #endregion
                                SQLStatement.InsertCNRSPoMo(dbconnect, log, poInfo);
                                int assignQty = poInfo.DeliveryQty - poInfo.RemainQty;
                                int specialRemainQty =demianOrder.Qty  - assignQty;
                                if (specialRemainQty==1)
                                {
                                    SQLStatement.UpdateSpecialOrderStatus(dbconnect, log, poInfo.PO, "Closed");
                                }
                                else if (demianOrder.Status.Equals("Created"))
                                {
                                    SQLStatement.UpdateSpecialOrderStatus(dbconnect, log, poInfo.PO, "Active");
                                }

                                SQLStatement.WriteCDSIAST(dbconnect, log, poInfo.ProductID, "ASSET_TAG", assetTag);
                               
                                 SQLStatement.WriteCDSIAST(dbconnect, log, poInfo.ProductID, "HPOrder", poInfo.CustPo);
                                 SQLStatement.WriteCDSIAST(dbconnect, log, poInfo.ProductID, "FactoryPO", poInfo.HpPo);
                                 //SQLStatement.WriteCDSIAST(dbconnect, log, poInfo.ProductID, "FactoryPO", demianOrder.FactoryPO);
                                
                                SQLStatement.WriteProductAttr(dbconnect, log, poInfo.ProductID, "CNRSState", "OK", "CNRS", DateTime.Now);
                                productInfo.PO = po;
                                AssignedPOList.Add(productInfo);
                            }
                            else
                            {
                                #region send  email not found SpecialPO need upload PO data
                                localmsg = "<br/>" + "CNRS ProductID:" + snoId +
                                                                 " CustomSN:" + productInfo.CUSTSN +
                                                                  " MAC:" + productInfo.MAC +
                                                                 " Model:" + productInfo.Model +
                                                                 " 找不到SpecialOrder 資料,請上傳FactoryPO資料!!" + "<br/>";
                                msg = msg + "<br/>" + localmsg;

                                log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main",
                                               "Not Special order",
                                               localmsg);

                                #endregion
                                continue;
                            }
                        }
                        else
                        {
                            #region send  email not found PO need upload PO data
                            localmsg = "<br/>" + "CNRS ProductID:" + snoId + 
                                                             " CustomSN:" + productInfo.CUSTSN +
                                                              " MAC:" + productInfo.MAC +                                                             
                                                             " Model:" + productInfo.Model +
                                                             " 找不到船務的HP PO 對應SpecialOrder FactoryPO 資料,請上傳船務資料 或是上傳FactoryPO資料!!" + "<br/>";
                            msg = msg + "<br/>" + localmsg;

                            log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main",
                                           "Not Found DN",
                                           localmsg);

                            #endregion

                            continue;
                        }
                        #endregion
                       
                        #endregion
                    }
                    else //Manual assign PO
                    {
                        #region send  email Not Allow Manual Assigned PO
                        localmsg = "<br/>" + "CNRS ProductID:" + snoId +
                                                         " CustomSN:" + productInfo.CUSTSN +
                                                          " MAC:" + productInfo.MAC +
                                                         " Model:" + productInfo.Model +
                                                         "FactoryPO:" + po +
                                                         " 不允許收動分配PO,請檢查SnoDet_PoMo資料!!" + "<br/>";
                        msg = msg + "<br/>" + localmsg;

                        log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main",
                                       "Not Allow Manual Assigned PO ",
                                       localmsg);

                        #endregion
                        continue;
                    }
                     #endregion
                }
                #endregion
                Thread.Sleep(config.AssignedPOCmdInterval);
               
            }
            catch (Exception e)
            {
                #region exception handle
                msg = e.StackTrace + " " +  e.Message;
                 log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main", "StackTrace", e.StackTrace);
                 log.write(LogType.error, AppDomain.CurrentDomain.Id, "Main", "Message", e.Message);
                         
               
                SendMail.Send(config.FromAddress,
                                                      config.ToAddress,
                                                      config.CcAddress,
                                                      config.MailSubject + "program error",
                                                      msg,
                                                      config.EmailServer,
                                                      log);
                #endregion
            }
            finally
            {
                #region error send email
                if (!string.IsNullOrEmpty(msg))
                {
                    SendMail.Send(config.FromAddress,
                                                      config.ToAddress,
                                                      config.CcAddress,
                                                      config.MailSubject + " 資料有誤!!",
                                                      msg,
                                                      config.EmailServer,
                                                      log);
                }
                
                #endregion
               
            }
               
        }