Пример #1
0
        /// <summary>收料邏輯</summary>
        private static PostResult POST_IN(string DockDoorID, string ContainerID, string ContainerStatus, PostModel m)
        {
            PostResult r = new Models.ApiModel.PostResult();

            using (var db = new DataBase.OracleDataBase(Definition.WMSConn))
            {
                //讀取指定棧板號碼的資料
                //20180214 增加 RESERVED_03 = ContainerID 條件 --> 要讓一單多車棧板資料可以上報(查詢出的資料只有一筆才合法)
                string strRFIDList = string.Join(",", m.pallets.Select(x => "'" + x.pallet + "'"));
                string strSQL      = "SELECT * FROM " + DB_Prestr + "WMS_RFID_CHECK_LIST_VIEW WHERE (RESERVED_03 = '" + ContainerID + "') AND (DOCK_DOOR_NO = '" + DockDoorID + "') AND (RFID IN (" + strRFIDList + "))";
                db.StrSQL = strSQL;
                DataTable dtCheckList = db.ExecuteDataTable();

                using (var dba = new DataBase.DataBase(Definition.Conn))
                {
                    //20180214 增加 --> 記錄 Select View SQL 語法
                    dba.StrSQL = "INSERT DebugSQL (sql,updatetime) VALUES ('" + strSQL.Replace("'", "") + "','" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "')";
                    dba.ExecuteSQL();
                }

                #region 檢查RFID資訊是否異常
                foreach (PalletItem item in m.pallets)
                {
                    DataRow[] rows = dtCheckList.Select("RFID = '" + item.pallet + "'");
                    if (rows.Length == 1)
                    {
                        string strStatus = rows[0]["STATUS"].ToString();
                        if (strStatus != "0")
                        {
                            throw new Exception(item.pallet + "異常資訊");
                        }
                    }
                    else
                    {
                        throw new Exception(item.pallet + "異常資訊");
                    }
                }
                #endregion

                //判斷卸櫃資料是否正確
                //20180226 增加 RESERVED_05 == Definition.AppPlant 條件 --> 確認屬於該廠的進貨
                var listPallet      = dtCheckList.AsEnumerable().Where(x => x.Field <string>("RESERVED_03") == ContainerID && x.Field <string>("RESERVED_05") == Definition.AppPlant).Select(x => x.Field <string>("RFID")).ToList();
                var listErrorPallet = m.pallets.FindAll(x => !listPallet.Contains(x.pallet)).Select(x => x.pallet);
                if (listErrorPallet.Count() > 0)
                {
                    throw new Exception(string.Join(",", listErrorPallet) + " 不屬於該廠區");
                }

                //逐筆執行過帳
                foreach (DataRow row in dtCheckList.Rows)
                {
                    //設定DB參數值
                    var param = new DataBase.SqlParams();
                    foreach (DataColumn col in dtCheckList.Columns)
                    {
                        param.Add(col.ColumnName, row[col.ColumnName].ToString());
                    }

                    db.SqlParams = param;
                    db.StrSQL    = "INSERT INTO " + DB_Prestr + "WMS_RFID_OK_LIST(PLANT, DOCK_DOOR_NO, ACTION, RFID, RESERVED_01, RESERVED_02, RESERVED_03, RESERVED_04, RESERVED_05, RESERVED_06, RESERVED_07, RESERVED_08, RESERVED_09, RESERVED_10, RESERVED_11, RESERVED_12, RESERVED_13, RESERVED_14, RESERVED_15, RESERVED_16, RESERVED_17, RESERVED_18, RESERVED_19, RESERVED_20) " +
                                   "VALUES(:PLANT, :DOCK_DOOR_NO, :ACTION, :RFID, :RESERVED_01, :RESERVED_02, :RESERVED_03, :RESERVED_04, :RESERVED_05, :RESERVED_06, :RESERVED_07, :RESERVED_08, :RESERVED_09, :RESERVED_10, :RESERVED_11, :RESERVED_12, :RESERVED_13, :RESERVED_14, :RESERVED_15, :RESERVED_16, :RESERVED_17, :RESERVED_18, :RESERVED_19, :RESERVED_20)";
                    db.ExecuteSQL();
                }

                //判斷卸載數量
                string strNum, strTotal;
                GetCountProcess(DockDoorID, ContainerID, ContainerStatus, out strNum, out strTotal);
                if (strNum != strTotal)
                {
                    r.result = "Y";
                    r.msg    = string.Format("櫃號:{0}({1}/{2})收料中", ContainerID, strNum, strTotal);
                }
                else
                {
                    r.result = "A";
                    r.msg    = string.Format("櫃號:{0}({1}/{2})收料完成", ContainerID, strNum, strTotal);
                }
            }

            return(r);
        }
Пример #2
0
        /// <summary>出料邏輯</summary>
        private static PostResult POST_OUT(string DockDoorID, string ContainerID, string ContainerStatus, PostModel m)
        {
            PostResult r = new Models.ApiModel.PostResult();

            using (var db = new DataBase.OracleDataBase(Definition.WMSConn))
            {
                //判斷前次與此次上報時間,大於3秒則清空貨櫃清單,重新計算

                /*
                 * if (((DateTime.Now.Ticks - Definition.LastPostTime.Ticks) / 10000000) > 3) Definition.CONTAINERS.Clear();
                 * Definition.CONTAINERS.Add(ContainerID);
                 * Definition.LastPostTime = DateTime.Now;
                 *
                 * Thread.Sleep(3500); //等待時間內是否還有資料繼續上報
                 */

                //讀取指定棧板號碼的資料
                string strRFIDList = string.Join(",", m.pallets.Select(x => "'" + x.pallet + "'"));
                db.StrSQL = "SELECT * FROM " + DB_Prestr + "WMS_RFID_CHECK_LIST_VIEW WHERE (DOCK_DOOR_NO = '" + DockDoorID + "') AND (RFID IN (" + strRFIDList + "))";
                DataTable dtCheckList = db.ExecuteDataTable();

                #region 檢查RFID資訊是否異常
                foreach (PalletItem item in m.pallets)
                {
                    DataRow[] rows = dtCheckList.Select("RFID = '" + item.pallet + "'");
                    if (rows.Length == 1)
                    {
                        string strStatus = rows[0]["STATUS"].ToString();
                        if (strStatus != "0")
                        {
                            throw new Exception(item.pallet + "異常資訊");
                        }
                    }
                    else
                    {
                        throw new Exception(item.pallet + "異常資訊");
                    }
                }
                #endregion

                //判斷是否裝錯櫃
                //string strContainers = string.Join(",", Definition.CONTAINERS.Select(x => "'" + x + "'"));
                db.StrSQL = "SELECT CONTAINER_NO, PALLET_ID, RFID_OK_FLAG FROM " + DB_Prestr + "WMS_RFID_CONTAINER_CHECK_V WHERE (CONTAINER_NO = '" + ContainerID + "') AND (PALLET_ID IN (" + strRFIDList + "))";
                DataTable dtPallet        = db.ExecuteDataTable();
                var       listPallet      = dtPallet.AsEnumerable().Select(x => x.Field <string>("PALLET_ID"));
                var       listErrorPallet = m.pallets.FindAll(x => !listPallet.Contains(x.pallet)).Select(x => x.pallet);
                if (listErrorPallet.Count() > 0)
                {
                    throw new Exception(string.Join(",", listErrorPallet) + " 不屬於該貨櫃");
                }

                //過濾已用其他方式過帳的棧板資料
                listPallet = dtPallet.AsEnumerable().Where(x => x.Field <string>("RFID_OK_FLAG") == null && x.Field <string>("CONTAINER_NO") == ContainerID).Select(x => x.Field <string>("PALLET_ID"));
                var Rows = dtCheckList.AsEnumerable().Where(x => listPallet.Contains(x.Field <string>("RFID")));
                m.pallets = m.pallets.FindAll(x => listPallet.Contains(x.pallet));

                if (Rows.Count() > 0)
                {
                    //逐筆執行過帳
                    foreach (DataRow row in Rows)
                    {
                        //設定DB參數值
                        var param = new DataBase.SqlParams();
                        foreach (DataColumn col in dtCheckList.Columns)
                        {
                            param.Add(col.ColumnName, row[col.ColumnName].ToString());
                        }

                        db.SqlParams = param;
                        db.StrSQL    = "INSERT INTO " + DB_Prestr + "WMS_RFID_OK_LIST(PLANT, DOCK_DOOR_NO, ACTION, RFID, RESERVED_01, RESERVED_02, RESERVED_03, RESERVED_04, RESERVED_05, RESERVED_06, RESERVED_07, RESERVED_08, RESERVED_09, RESERVED_10, RESERVED_11, RESERVED_12, RESERVED_13, RESERVED_14, RESERVED_15, RESERVED_16, RESERVED_17, RESERVED_18, RESERVED_19, RESERVED_20) " +
                                       "VALUES(:PLANT, :DOCK_DOOR_NO, :ACTION, :RFID, :RESERVED_01, :RESERVED_02, '" + ContainerID + "', :RESERVED_04, :RESERVED_05, :RESERVED_06, :RESERVED_07, :RESERVED_08, :RESERVED_09, :RESERVED_10, :RESERVED_11, :RESERVED_12, :RESERVED_13, :RESERVED_14, :RESERVED_15, :RESERVED_16, :RESERVED_17, :RESERVED_18, :RESERVED_19, :RESERVED_20)";
                        db.ExecuteSQL();
                    }

                    //判斷裝載數量
                    string strNum, strTotal;
                    GetCountProcess(DockDoorID, ContainerID, ContainerStatus, out strNum, out strTotal);
                    if (strNum != strTotal)
                    {
                        r.result = "Y";
                        r.msg    = string.Format("櫃號:{0}({1}/{2})裝櫃中", ContainerID, strNum, strTotal);
                    }
                    else
                    {
                        r.result = "A";
                        r.msg    = string.Format("櫃號:{0}({1}/{2})裝櫃完成", ContainerID, strNum, strTotal);
                    }
                }
                else
                {
                    throw new Exception("無載貨資訊");
                }
            }

            return(r);
        }