/// <summary>更新使用者登入時間</summary>
        public static void SetUserLoginDate(LoginViewModel m)
        {
            //開啟資料庫存取物件
            using (var db = new DataBase.DataBase(Definition.Conn, true))
            {
                try
                {
                    //資料庫參數
                    var param = new DataBase.SqlParams();
                    param.Add("Account", m.Account);
                    param.Add("IP", m.IP);
                    param.Add("LastLoginDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                    db.SqlParams = param;

                    //更新使用者最後登入時間,記錄使用者登錄Log
                    db.StrSQL = @"UPDATE [User] SET LastLoginDate = @LastLoginDate WHERE Account = @Account;
                                  INSERT [UserLoginLog](Account, IP, LoginDate) VALUES(@Account, @IP, @LastLoginDate);";
                    db.ExecuteSQL();

                    //確認執行交易
                    db.Commit();
                }
                catch (Exception e)
                {
                    //回復交易
                    db.Rollback();
                    throw e;
                }
            }
        }
Beispiel #2
0
        /// <summary>刪除群組</summary>
        public static void RemoveGroup(string GroupID)
        {
            //開啟資料庫存取物件
            using (var db = new DataBase.DataBase(Definition.Conn, true))
            {
                try
                {
                    //資料庫參數
                    var param = new DataBase.SqlParams();
                    param.Add("GroupID", GroupID);
                    db.SqlParams = param;

                    //刪除舊有群組選單權限與使用者清單
                    db.StrSQL += @"DELETE FROM [Auth] WHERE GroupID = @GroupID;
                                   DELETE FROM [GroupUser] WHERE GroupID = @GroupID;
                                   DELETE FROM [Group] WHERE GroupID = @GroupID;";
                    db.ExecuteSQL();

                    //確認執行交易
                    db.Commit();
                }
                catch (Exception e)
                {
                    //回復交易
                    db.Rollback();
                    throw e;
                }
            }
        }
Beispiel #3
0
        /// <summary>修改使用者密碼</summary>
        public static bool EditPassword(PasswordEditViewModel m)
        {
            //找出此使用者資訊
            DataTable dt = UserDataAccess.GetUserList(m.ID, null, null, null, null, new Pages());

            if (dt.Rows.Count > 0)
            {
                //驗証
                string strOldPwd  = dt.Rows[0]["Password"].ToString();
                string strOldPwd1 = Util.MD5(m.Password, 32);
                if (strOldPwd1 != strOldPwd)
                {
                    throw new Exception("原密碼不相符");
                }

                //開啟資料庫存取物件
                using (var db = new DataBase.DataBase(Definition.Conn))
                {
                    //資料庫參數
                    var param = new DataBase.SqlParams();
                    param.Add("ID", m.ID);
                    param.Add("NewPassword", Util.MD5(m.NewPassword, 32));
                    db.SqlParams = param;

                    //異動資料
                    db.StrSQL = "UPDATE [User] SET Password = @NewPassword WHERE ID = @ID";
                    int iResult = db.ExecuteSQL();
                    return(iResult > 0);
                }
            }
            else
            {
                throw new Exception("無此使用者相關資訊");
            }
        }
Beispiel #4
0
        /// <summary>刪除指定的選單編號</summary>
        public static void DelMenu(string MenuNo)
        {
            //開啟資料庫存取物件
            using (var db = new DataBase.DataBase(Definition.Conn))
            {
                //資料庫參數
                var param = new DataBase.SqlParams();
                param.Add("MenuNo", MenuNo + "%");
                db.SqlParams = param;

                //刪除相關資料表
                db.StrSQL =
                    @"DECLARE @Count int;
                      SET @Count = (SELECT COUNT(*) FROM [Menu] WHERE MenuNo LIKE @MenuNo);

                      IF (@Count = 1) BEGIN
                        DELETE FROM [Menu] WHERE MenuNo LIKE @MenuNo;
                        DELETE FROM [Auth] WHERE MenuNo LIKE @MenuNo;
                      END ELSE BEGIN
                        THROW 51000, '無法刪除子選單!', 1;
                      END";

                db.ExecuteSQL();
            }
        }
        /// <summary>儲存DockDoor InnoapStatus 資料</summary>
        public static void SaveDockDoorInfo_InnoapStatus(string IP, string InnoapStatus)
        {
            //開啟資料庫存取物件
            using (var db = new DataBase.DataBase(Definition.Conn))
            {
                //資料庫參數
                var param = new DataBase.SqlParams();
                param.Add("IP", IP);
                param.Add("InnoapStatus", InnoapStatus);

                db.SqlParams = param;

                //修改
                db.StrSQL =
                    @"DECLARE @Count int;
                          SET @Count = (SELECT COUNT(*) FROM [Innolux_DockDoor] WHERE IP = @IP);
                          IF (@Count = 1) BEGIN
                             UPDATE [Innolux_DockDoor] SET InnoapStatus=@InnoapStatus WHERE IP=@IP;
                          END ELSE BEGIN
                             THROW 51000, 'IP不存在', 1;
                          END";

                db.ExecuteSQL();
            }
        }
        /// <summary>儲存系統參數資料</summary>
        public static bool SaveSysParamsInfo(SysParamsDetailViewModel m)
        {
            //開啟資料庫存取物件
            using (var db = new DataBase.DataBase(Definition.Conn))
            {
                //資料庫參數
                var param = new DataBase.SqlParams();
                param.Add("ParaCode", m.ParaCode);
                param.Add("ParaValue", m.ParaValue);
                param.Add("ParaDesc", m.ParaDesc);
                db.SqlParams = param;

                if (m.Action == "Add")
                {
                    //驗証系統代碼是否重覆
                    var dtParams = GetSysParams(m.ParaCode, null, new Pages());
                    if (dtParams.Rows.Count > 0)
                    {
                        throw new Exception("已有重覆的系統代碼");
                    }

                    //新增系統參數
                    db.StrSQL = "INSERT [SysParams](ParaCode, ParaValue, ParaDesc) VALUES(@ParaCode, @ParaValue, @ParaDesc);";
                }
                else
                {
                    //修改系統參數
                    db.StrSQL = "UPDATE [SysParams] SET ParaValue = @ParaValue, ParaDesc = @ParaDesc WHERE ParaCode = @ParaCode;";
                }

                int iResult = db.ExecuteSQL();
                return(iResult > 0);
            }
        }
Beispiel #7
0
        /// <summary>貨櫃離站函式</summary>
        public static PostResult DelContainer(Container m)
        {
            PostResult r = new PostResult();

            //取得此碼頭資料
            DataTable dtDockDoor         = DockDoorDataAccess.GetDockDoorList(null, m.ip, null, null, new Pages());
            DataRow   rowDoor            = dtDockDoor.Rows[0];
            string    strDockDoorID      = rowDoor["DockDoorID"].ToString();
            string    strContainerID     = rowDoor["ContainerID"].ToString();
            string    strContainerStatus = rowDoor["ContainerStatus"].ToString();
            string    strCaptionPanelIP  = rowDoor["CaptionPanelIP"].ToString();

            try
            {
                string[] StatusList = new string[] { "I", "O" };
                if (StatusList.Contains(strContainerStatus))
                {
                    //判斷裝卸載數量
                    string strNum, strTotal;
                    GetCountProcess(strDockDoorID, strContainerID, strContainerStatus, out strNum, out strTotal);
                    if (strNum == strTotal)
                    {
                        r.result = "Y";
                        r.msg    = string.Format("櫃號:{0}({1}/{2})已離廠", strContainerID, strNum, strTotal);
                    }
                    else
                    {
                        throw new Exception(string.Format("櫃號:{0}({1}/{2})尚未完成作業", strContainerID, strNum, strTotal));
                    }
                }
                else
                {
                    r.result = "Y";
                    r.msg    = string.Format("櫃號:{0}已離廠", strContainerID);
                }
            }
            catch (Exception ex)
            {
                r.result = "N";
                r.msg    = ex.Message;
            }
            finally
            {
                //清空碼頭目前停靠的貨櫃ID
                using (var db = new DataBase.DataBase(Definition.Conn))
                {
                    db.StrSQL = "UPDATE Innolux_DockDoor SET ContainerID = '', ContainerStatus = '', Alarm = '' WHERE IP = '" + m.ip + "'";
                    db.ExecuteSQL();
                }
            }

            ControlMachine(strCaptionPanelIP, r.msg, 3);
            return(r);
        }
        /// <summary>儲存DockDoor資料</summary>
        public static void SaveDockDoorInfo(DockDoorDetailViewModel m)
        {
            //開啟資料庫存取物件
            using (var db = new DataBase.DataBase(Definition.Conn))
            {
                //資料庫參數
                var param = new DataBase.SqlParams();
                param.Add("ID", m.ID);
                param.Add("DockDoorID", m.DockDoorID);
                param.Add("Remark", m.Remark);
                param.Add("Locate", m.Locate);
                param.Add("IP", m.IP);
                param.Add("CaptionPanelIP", m.CaptionPanelIP);
                param.Add("FilterCode", m.FilterCode);
                param.Add("Mask", m.Mask);
                param.Add("MaskOut", m.MaskOut);
                param.Add("Alarm", "N");
                param.Add("ContainerID", "");
                param.Add("ContainerStatus", "");
                param.Add("Account", Definition.UserInfo.Account);
                db.SqlParams = param;

                if (m.ID == 0)
                {
                    //新增
                    db.StrSQL =
                        @"DECLARE @Count int;
                          SET @Count = (SELECT COUNT(*) FROM [Innolux_DockDoor] WHERE (DockDoorID = @DockDoorID) OR (IP = @IP));
                          IF (@Count = 0) BEGIN
                             INSERT [Innolux_DockDoor](DockDoorID, Remark, Locate, IP, CaptionPanelIP, FilterCode, Mask, MaskOut, Alarm, ContainerID, ContainerStatus, CreateTime, Creater, UpdateTime, Updater) VALUES(@DockDoorID, @Remark, @Locate, @IP, @CaptionPanelIP, @FilterCode, @Mask, @MaskOut, @Alarm, @ContainerID, @ContainerStatus, GetDate(), @Account, GetDate(), @Account);
                          END ELSE BEGIN
                             THROW 51000, '碼頭編號或IP已存在', 1;
                          END";
                }
                else
                {
                    //修改
                    db.StrSQL =
                        @"DECLARE @Count int;
                          SET @Count = (SELECT COUNT(*) FROM [Innolux_DockDoor] WHERE (ID <> @ID) AND (DockDoorID = @DockDoorID OR IP = @IP));
                          IF (@Count = 0) BEGIN
                             UPDATE [Innolux_DockDoor] SET DockDoorID=@DockDoorID, Remark=@Remark, Locate=@Locate, IP=@IP, CaptionPanelIP=@CaptionPanelIP, FilterCode=@FilterCode, Mask=@Mask, MaskOut=@MaskOut, UpdateTime=GetDate(), Updater=@Account WHERE ID=@ID;
                          END ELSE BEGIN
                             THROW 51000, '碼頭編號或IP已存在', 1;
                          END";
                }

                db.ExecuteSQL();
            }
        }
        /// <summary>更新貨櫃的作業狀態</summary>
        public static string UpdateTruckStatus(string IP, out string ContainerStatus)
        {
            string strContainerID = "", strMsg = "";

            //取得DockDoor資訊
            DataTable dtDoor = GetDockDoorList(null, IP, null, null, new Pages());
            DataRow   row    = dtDoor.Rows[0];

            //取得貨櫃狀態
            strContainerID  = row["ContainerID"].ToString();
            ContainerStatus = row["ContainerStatus"].ToString();
            if (strContainerID != "")
            {
                //取得並更新貨櫃狀態
                ContainerStatus = ApiDataAccess.GetContainerStatus(strContainerID);
                using (var db = new DataBase.DataBase(Definition.Conn))
                {
                    db.StrSQL = "UPDATE Innolux_DockDoor SET ContainerStatus = '" + ContainerStatus + "' WHERE IP = '" + IP + "'";
                    db.ExecuteSQL();
                }

                //更新控制器的貨櫃狀態
                ApiDataAccess.UpdateControlDB(IP, "UPDATE status SET status = '" + ContainerStatus + "'");

                //依狀態回傳結果
                if (ContainerStatus == "O")
                {
                    strMsg = string.Format("貨櫃號碼{0}的狀態為:{1}", strContainerID, "待裝櫃");
                }
                else if (ContainerStatus == "I")
                {
                    strMsg = string.Format("貨櫃號碼{0}的狀態為:{1}", strContainerID, "待卸櫃");
                }
                else
                {
                    throw new Exception("無" + strContainerID + "的貨櫃狀態");
                }
            }
            else if (ContainerStatus == "N")
            {
                throw new Exception("無貨櫃標籤");
            }
            else
            {
                throw new Exception("無貨櫃靠站資訊");
            }

            return(strMsg);
        }
Beispiel #10
0
        /// <summary>儲存選單資料</summary>
        public static bool SaveMenuInfo(MenuDetailViewModel m)
        {
            string action = "";

            //有無選單編號,若無則視為新增
            if (string.IsNullOrEmpty(m.MenuNo))
            {
                action = "Add";

                //判斷是否為空值
                m.ParentMenuNo = string.IsNullOrWhiteSpace(m.ParentMenuNo) ? "" : m.ParentMenuNo;

                //設定新選單編號
                string strMaxMenuNo = MenuDataAccess.GetMaxMenuNo(m.ParentMenuNo, m.ParentMenuNo.Length + 2);
                m.MenuNo = Util.GetPadLeftString(strMaxMenuNo, 1);
            }

            //開啟資料庫存取物件
            using (var db = new DataBase.DataBase(Definition.Conn))
            {
                //資料庫參數
                var param = new DataBase.SqlParams();
                param.Add("MenuNo", m.MenuNo);
                param.Add("MenuName", m.MenuName);
                param.Add("MenuLink", m.MenuLink);
                param.Add("Type", m.Type);
                param.Add("MenuDesc", m.MenuDesc);
                param.Add("OrderID", m.OrderID);
                param.Add("Enabled", m.Enabled);
                param.Add("MenuIco", m.MenuIco);
                db.SqlParams = param;

                if (action == "Add")
                {
                    //新增資料
                    db.StrSQL = @"--設定排序值--
                    SET @OrderID = (SELECT MAX(OrderID) + 1 FROM Menu WHERE LEN(MenuNo) = LEN(@MenuNo));
                    INSERT Menu(MenuNo, MenuName, MenuLink, Type, MenuDesc, OrderID, Enabled, MenuIco) VALUES(@MenuNo, @MenuName, @MenuLink, @Type, @MenuDesc, @OrderID, @Enabled, @MenuIco)";
                }
                else
                {
                    db.StrSQL = "UPDATE Menu SET MenuName=@MenuName, MenuLink=@MenuLink, Type=@Type, MenuDesc=@MenuDesc, OrderID=@OrderID, Enabled=@Enabled, MenuIco=@MenuIco WHERE MenuNo=@MenuNo";
                }

                int iResult = db.ExecuteSQL();
                return(iResult > 0);
            }
        }
        /// <summary>儲存Filter資料</summary>
        public static void SaveFilter(Models.ViewModel.TagRule.TagRuleDetailViewModel m)
        {
            //驗証白名單字元
            string[] Rules  = m.FilterRules.Split(',');
            int      iRules = Rules.Count(x => x.Length == 2);

            if (iRules != Rules.Length)
            {
                throw new Exception("白名單規則每組只允許2個字元");
            }

            //開啟資料庫存取物件
            using (var db = new DataBase.DataBase(Definition.Conn))
            {
                //資料庫參數
                var param = new DataBase.SqlParams();
                param.Add("FilterCode", m.FilterCode);
                param.Add("FilterName", m.FilterName);
                param.Add("FilterRules", m.FilterRules);
                db.SqlParams = param;

                if (m.Action == "Add")
                {
                    //新增群組
                    db.StrSQL =
                        @"DECLARE @Count int;
                          SET @Count = (SELECT COUNT(*) FROM Innolux_Filter WHERE FilterCode = @FilterCode);
                          IF (@Count = 0) BEGIN
                             INSERT Innolux_Filter(FilterCode, FilterName, FilterRules) VALUES(@FilterCode, @FilterName, @FilterRules);
                          END ELSE BEGIN
                             THROW 51000, '規則編號已存在', 1;
                          END";
                }
                else
                {
                    //修改群組
                    db.StrSQL = "UPDATE Innolux_Filter SET FilterName=@FilterName, FilterRules=@FilterRules WHERE FilterCode=@FilterCode";
                }

                db.ExecuteSQL();
            }
        }
        /// <summary>還原使用者密碼為預設密碼</summary>
        public static bool SetUserDefaultPassword(string Account)
        {
            //開啟資料庫存取物件
            using (var db = new DataBase.DataBase(Definition.Conn))
            {
                //預設密碼
                string pwd = SysParamsDataAccess.GetSysParamsValue("DefaultUserPassword");

                //資料庫參數
                var param = new DataBase.SqlParams();
                param.Add("Account", Account);
                param.Add("Password", Util.MD5(pwd, 32));
                db.SqlParams = param;

                //更新使用者最後登入時間
                db.StrSQL = "UPDATE [User] SET Password = @Password WHERE Account = @Account";
                int iResult = db.ExecuteSQL();
                return(iResult > 0);
            }
        }
Beispiel #13
0
        /// <summary>新增讀取Tag Log</summary>
        private static void AddTagLog(string _DockDoorID, int _Mask, PostModel m, PostResult r, string _Data)
        {
            using (var db = new DataBase.DataBase(Definition.Conn))
            {
                var param = new DataBase.SqlParams();
                param.Add("DockDoorID", _DockDoorID);
                param.Add("Mask", _Mask);
                param.Add("IP", m.ip);
                param.Add("DateTime", DateTime.Now);
                param.Add("Status", r.result);
                param.Add("Alarm", r.result == "N" ? "Y" : "");
                param.Add("Msg", r.msg);
                param.Add("Data", _Data);
                param.Add("PostData", JsonConvert.SerializeObject(m));
                db.SqlParams = param;

                db.StrSQL = "UPDATE Innolux_DockDoor SET Alarm = @Alarm WHERE IP = @IP;" +
                            "INSERT [Innolux_TagLog](DockDoorID, IP, DateTime, Mask, Status, Msg, Data, PostData) VALUES(@DockDoorID, @IP, @DateTime, @Mask, @Status, @Msg, @Data, @PostData);";
                db.ExecuteSQL();
            }
        }
Beispiel #14
0
        /// <summary>清除警報</summary>
        public static void ClearAlarm(string id)
        {
            //取得指定警報中的碼頭
            DataTable dtDoor = DockDoorDataAccess.GetDockDoorList(id, null, null, null, new Pages());

            if (dtDoor.Rows.Count > 0)
            {
                DataRow row               = dtDoor.Rows[0];
                string  strIP             = row["IP"].ToString();
                string  strContainerID    = row["ContainerID"].ToString();
                string  strCaptionPanelIP = row["CaptionPanelIP"].ToString();

                //修改Reader DB,以觸發DB Trigger
                UpdateControlDB(strIP, "UPDATE alarm SET alarm='" + DateTime.Now.ToString("yyyyMMddHHmmss") + "'");

                //清除碼頭的異常狀態
                using (var db = new DataBase.DataBase(Definition.Conn))
                {
                    db.StrSQL = "UPDATE Innolux_DockDoor SET Alarm = '' WHERE DockDoorID = '" + id + "'";
                    db.ExecuteSQL();
                }

                //若有貨櫃停靠,則播放最後一次成功訊息
                if (strContainerID != "")
                {
                    using (var db = new DataBase.DataBase(Definition.Conn))
                    {
                        string strToday = DateTime.Now.ToString("yyyyMMdd");
                        db.StrSQL = "SELECT TOP 1 Msg FROM Innolux_TagLog WHERE (DockDoorID = '" + id + "') AND (Status IN ('Y','A')) AND (Msg LIKE '%" + strContainerID + "%') AND (Convert(varchar, DateTime, 112) = '" + strToday + "') ORDER BY DateTime DESC";
                        string strMsg = db.ExecuteScalar() ?? "";
                        ControlMachine(strCaptionPanelIP, strMsg, 0);
                    }
                }
                else
                {
                    ControlMachine(strCaptionPanelIP, "", 1);
                }
            }
        }
        /// <summary>移除白名單規則</summary>
        public static void RemoveFilter(string FilterCode)
        {
            //開啟資料庫存取物件
            using (var db = new DataBase.DataBase(Definition.Conn))
            {
                //資料庫參數
                var param = new DataBase.SqlParams();
                param.Add("FilterCode", FilterCode);
                db.SqlParams = param;

                //取回資料
                db.StrSQL =
                    @"DECLARE @Count int;
                      SET @Count = (SELECT COUNT(*) FROM Innolux_DockDoor WHERE FilterCode = @FilterCode);
                      IF(@Count = 0) BEGIN
                         DELETE FROM Innolux_Filter WHERE FilterCode = @FilterCode;
                      END ELSE BEGIN
                         THROW 51000, '無法刪除,已有碼頭使用此規則!', 1;
                      END";

                db.ExecuteSQL();
            }
        }
Beispiel #16
0
        //static string DB_Prestr = "";
        /// <summary>貨櫃進站函式</summary>
        public static PostResult AddContainer(Container m)
        {
            PostResult r = new PostResult();
            string     strContainerID = "", strContainerStatus = "";

            try
            {
                //判斷是否有貨櫃標籤
                if (m.containers.Count == 0)
                {
                    throw new Exception("無貨櫃標籤");
                }
                else
                {
                    m.containers = m.containers.Select(x => x.Trim()).ToList();
                }                                                                    //貨櫃號碼去空白

                using (var db = new DataBase.DataBase(Definition.Conn))
                {
                    //檢查是否誤讀到其它貨櫃
                    for (int i = m.containers.Count - 1; i >= 0; i--)
                    {
                        string CID = m.containers[i].Substring(1);
                        db.StrSQL = "SELECT COUNT(*) FROM Innolux_DockDoor WHERE IP <> '" + m.ip + "' AND ContainerID = '" + CID + "'";
                        //ExecuteScalar 返回單行單列的結果集
                        if (db.ExecuteScalar() != "0")
                        {
                            m.containers.RemoveAt(i);
                        }
                    }

                    //判斷過濾後是否只剩一筆貨櫃ID
                    if (m.containers.Count == 1)
                    {
                        strContainerID     = m.containers[0].Substring(1);
                        strContainerStatus = GetContainerStatus(strContainerID);

                        //更新控制器貨櫃狀態
                        UpdateControlDB(m.ip, "UPDATE status SET status='" + strContainerStatus + "'");

                        r.result = strContainerStatus;
                        r.msg    = "櫃號:" + strContainerID + "已進站";
                    }
                    else
                    {
                        throw new Exception("無貨櫃標籤");
                    }
                }
            }
            catch (Exception ex)
            {
                r.result = "N";
                r.msg    = ex.Message;
            }
            finally
            {
                using (var db = new DataBase.DataBase(Definition.Conn))
                {
                    //記錄碼頭目前停靠的貨櫃ID與狀態
                    string strAlarm = (r.result == "N" ? "Y" : "");
                    db.StrSQL = "UPDATE Innolux_DockDoor SET ContainerID = '" + strContainerID + "', ContainerStatus = '" + r.result + "', Alarm = '" + strAlarm + "' WHERE IP = '" + m.ip + "'";
                    db.ExecuteSQL();
                }

                //控制語音與字幕機
                DataTable dtDockDoor        = DockDoorDataAccess.GetDockDoorList(null, m.ip, null, null, new Pages());
                DataRow   rowDoor           = dtDockDoor.Rows[0];
                string    strCaptionPanelIP = rowDoor["CaptionPanelIP"].ToString();
                ControlMachine(strCaptionPanelIP, r.msg, 0);
            }

            return(r);
        }
Beispiel #17
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);
        }
Beispiel #18
0
        public static void SaveDockDoorInfo(string truckID, string Status, string dockdoorID)
        {
            string    O_Status = null;
            DataTable dt = null;
            DataTable dt1 = null;
            string    IP = null;
            string    strNum, strTotal;
            string    cid            = string.Empty;
            string    cstatus        = string.Empty;
            Result    r              = new Result();
            string    ASN            = null;
            string    DN             = null;
            string    CaptionPanelIP = null;

            //Save in ORACLE
            using (var db = new DataBase.OracleDataBase(Definition.WMSConn))
            {
                db.StrSQL = "SELECT DN_NO FROM WMS_RFID_CONTAINER_CHECK_V WHERE CONTAINER_NO='" + truckID + "'";

                dt1 = db.ExecuteDataTable();

                if (dt1.DefaultView.Count > 0)
                {
                    DataRow DN_dr = dt1.Rows[0];

                    DN = DN_dr["DN_NO"].ToString();
                }
            }

            using (var db = new DataBase.DataBase(Definition.Conn, true))
            {
                try
                {
                    db.StrSQL = "SELECT ASN_NO FROM WMS_RFID_TRUCK WHERE TRUCK_NO='" + truckID + "'";

                    dt = db.ExecuteDataTable();

                    DataRow dr_ASN = dt.Rows[0];

                    if (dt.DefaultView.Count > 0)
                    {
                        ASN = dr_ASN["ASN_NO"].ToString();
                    }
                    if (Status == "I")
                    {
                        if (ASN != null && ASN != "")
                        {
                            db.StrSQL = "UPDATE  WMS_RFID_TRUCK SET STATUS='I',DOCKED='" + dockdoorID + "' WHERE TRUCK_NO='" + truckID + "'";
                        }
                        else
                        {
                            if (DN != null && DN != "")
                            {
                                db.StrSQL = "UPDATE  WMS_RFID_TRUCK SET STATUS='O',DOCKED='" + dockdoorID + "' WHERE TRUCK_NO='" + truckID + "'";
                            }


                            else
                            {
                                db.StrSQL = "UPDATE  WMS_RFID_TRUCK SET STATUS=' ',DOCKED='" + dockdoorID + "' WHERE TRUCK_NO='" + truckID + "'";
                            }
                        }
                        db.ExecuteSQL();
                        //  db.Commit();
                    }
                    else
                    {
                        db.StrSQL = "UPDATE  WMS_RFID_TRUCK SET STATUS='" + DBNull.Value + "',DOCKED='" + DBNull.Value + "' WHERE TRUCK_NO='" + truckID + "'";

                        db.ExecuteSQL();
                        // db.Commit();
                    }
                    db.StrSQL = "SELECT STATUS FROM WMS_RFID_TRUCK WHERE TRUCK_NO='" + truckID + "'";

                    DataTable dt2 = db.ExecuteDataTable();

                    DataRow dtstatus = dt2.Rows[0];

                    if (dt2.DefaultView.Count > 0)
                    {
                        O_Status = dtstatus["STATUS"].ToString();
                    }

                    var param = new DataBase.SqlParams();
                    param.Add("ContainerID", truckID);
                    param.Add("ContainerStatus", O_Status);
                    param.Add("DockDoorID", dockdoorID);
                    DateTime dtime = DateTime.Now;
                    param.Add("UpdateTime", dtime);
                    if (Status == "I")
                    {
                        param.Add("Flag", false);
                    }
                    else
                    {
                        param.Add("Flag", true);
                    }

                    db.SqlParams = param;

                    if (Status == "I")
                    {
                        db.StrSQL = " UPDATE [Innolux_DockDoor] SET ContainerID=@ContainerID, ContainerStatus=@ContainerStatus,UpdateTime=@UpdateTime,Flag=@Flag WHERE DockDoorID=@DockDoorID";

                        db.ExecuteSQL();
                    }
                    DataTable dtIP = null;
                    db.StrSQL = "SELECT IP,CaptionPanelIP,ContainerID,ContainerStatus FROM Innolux_DockDoor WHERE DockDoorID='" + dockdoorID + "'";
                    dtIP      = db.ExecuteDataTable();
                    DataRow row = dtIP.Rows[0];

                    if (dtIP.DefaultView.Count > 0)
                    {
                        IP             = row["IP"].ToString();
                        CaptionPanelIP = row["CaptionPanelIP"].ToString();
                        cid            = row["ContainerID"].ToString();
                        cstatus        = row["ContainerStatus"].ToString();
                    }

                    if (Status == "O")
                    {
                        db.StrSQL = " UPDATE [Innolux_DockDoor] SET ContainerID='', ContainerStatus=@ContainerStatus,UpdateTime=@UpdateTime, Flag=@Flag WHERE ContainerID=@ContainerID";

                        db.ExecuteSQL();
                    }
                    //Get IP



                    //Save in MySql
                    if (Status == "I")
                    {
                        if (ASN != null && ASN != "")
                        {
                            // ApiDataAccess.UpdateControlDB(IP, "INSERT checkin(car_in,car_out)VALUES('I','0')");
                            ApiDataAccess.UpdateControlDB(IP, "UPDATE checkin SET  car_in='I',car_out='0'");

                            ApiDataAccess.UpdateControlDB(IP, "UPDATE status  SET  status='I'");
                        }
                        else if (DN != null && DN != "")
                        {
                            // ApiDataAccess.UpdateControlDB(IP, "INSERT checkin(car_in,car_out)VALUES('O','0')");
                            ApiDataAccess.UpdateControlDB(IP, "UPDATE checkin SET  car_in='O',car_out='0'");
                            ApiDataAccess.UpdateControlDB(IP, "UPDATE status  SET  status='O'");
                        }
                        else
                        {
                            //  ApiDataAccess.UpdateControlDB(IP, "INSERT checkin(car_in,car_out)VALUES('_','0')");

                            ApiDataAccess.UpdateControlDB(IP, "UPDATE  checkin SET car_in=' ',car_out='0'");
                            ApiDataAccess.UpdateControlDB(IP, "UPDATE status  SET  status=' '");
                        }
                        var mes = "櫃號:" + truckID + "   已進站";

                        ApiDataAccess.ControlMachine(CaptionPanelIP, mes, 0);
                    }
                    else
                    {
                        if (cstatus == "I" || cstatus == "O")
                        {
                            ApiDataAccess.GetCountProcess(dockdoorID, cid, cstatus, out strNum, out strTotal);

                            if (strNum == strTotal)
                            {
                                var msg = string.Format("櫃號:{0}({1}/{2})已離廠", truckID, strNum, strTotal);

                                ApiDataAccess.ControlMachine(CaptionPanelIP, msg, 3);

                                ApiDataAccess.UpdateControlDB(IP, "UPDATE  checkin SET car_in='0',car_out='Y'");
                            }
                            else
                            {
                                var msg = string.Format("櫃號:{0}({1}/{2})尚未完成作業", truckID, strNum, strTotal);

                                ApiDataAccess.ControlMachine(CaptionPanelIP, msg, 3);

                                ApiDataAccess.UpdateControlDB(IP, "UPDATE  checkin SET car_in='0',car_out='N'");



                                //  ApiDataAccess.UpdateControlDB(IP, "INSERT checkin(car_in,car_out)VALUES('0','N')");
                            }
                        }
                        else if (cstatus == " ")
                        {
                            var msg = string.Format("櫃號:{0})已離廠", truckID);
                            ApiDataAccess.ControlMachine(CaptionPanelIP, msg, 3);

                            ApiDataAccess.UpdateControlDB(IP, "UPDATE  checkin SET car_in='0',car_out='Y'");
                        }
                    }
                    db.Commit();
                }
                catch (Exception ex)
                {
                    var mes = ex.Message;
                    db.Rollback();
                    throw ex;
                }
            }
        }
Beispiel #19
0
        /// <summary>儲存群組資料</summary>
        public static void SaveGroupInfo(GroupDetailViewModel m)
        {
            string action = "";

            //有無群組編號,若無則視為新增
            if (string.IsNullOrEmpty(m.GroupID))
            {
                action = "Add";

                //設定新群組編號
                string strMaxGroupID = GroupDataAccess.GetMaxGroupID();
                m.GroupID = Util.GetPadLeftString(strMaxGroupID, 1);
            }

            //開啟資料庫存取物件
            using (var db = new DataBase.DataBase(Definition.Conn, true))
            {
                try
                {
                    //資料庫參數
                    var param = new DataBase.SqlParams();
                    param.Add("GroupID", m.GroupID);
                    param.Add("GroupName", m.GroupName);
                    param.Add("GroupDesc", m.GroupDesc);
                    db.SqlParams = param;

                    if (action == "Add")
                    {
                        //新增群組
                        db.StrSQL = "INSERT [Group](GroupID, GroupName, GroupDesc) VALUES(@GroupID, @GroupName, @GroupDesc);";
                    }
                    else
                    {
                        //修改群組
                        db.StrSQL = "UPDATE [Group] SET GroupName=@GroupName, GroupDesc=@GroupDesc WHERE GroupID=@GroupID;";
                    }

                    //刪除舊有群組選單權限與使用者清單
                    db.StrSQL += @"DELETE FROM [Auth] WHERE GroupID = @GroupID;
                                   DELETE FROM [GroupUser] WHERE GroupID = @GroupID;";
                    db.ExecuteSQL();

                    //逐筆判斷選單權限
                    foreach (var ma in m.AuthList)
                    {
                        if (ma.Add || ma.Edit || ma.Del || ma.Query || ma.Audit || ma.Print || ma.Export || ma.Import || ma.Admin)
                        {
                            param.Clear();
                            param.Add("GroupID", m.GroupID);
                            param.Add("MenuNo", ma.MenuNo);
                            param.Add("Add", ma.Add);
                            param.Add("Edit", ma.Edit);
                            param.Add("Del", ma.Del);
                            param.Add("Query", ma.Query);
                            param.Add("Audit", ma.Audit);
                            param.Add("Print", ma.Print);
                            param.Add("Export", ma.Export);
                            param.Add("Import", ma.Import);
                            param.Add("Admin", ma.Admin);
                            param.Add("Enabled", true);
                            param.Add("CreateDate", DateTime.Now);
                            param.Add("ModifyDate", DateTime.Now);
                            db.SqlParams = param;

                            db.StrSQL = @"INSERT [Auth](GroupID, Account, MenuNo, [Add], Edit, Del, Query, Audit, [Print], Export, Import, Admin, Enabled, CreateDate, ModifyDate) 
                                           VALUES(@GroupID, '', @MenuNo, @Add, @Edit, @Del, @Query, @Audit, @Print, @Export, @Import, @Admin, @Enabled, @CreateDate, @ModifyDate);";
                            db.ExecuteSQL();
                        }
                    }

                    //逐筆新增群組底下的使用者
                    foreach (var u in m.GroupUserItems)
                    {
                        param.Clear();
                        param.Add("GroupID", m.GroupID);
                        param.Add("Account", u.Account);
                        db.SqlParams = param;

                        db.StrSQL = @"INSERT [GroupUser](GroupID, Account) VALUES(@GroupID, @Account);";
                        db.ExecuteSQL();
                    }

                    //確認執行交易
                    db.Commit();
                }
                catch (Exception e)
                {
                    //回復交易
                    db.Rollback();
                    throw e;
                }
            }
        }
        /// <summary>修改使用者資料</summary>
        public static void SaveUserInfo(Models.ViewModel.User.UserDetailViewModel m)
        {
            string action = "";

            //新增
            if (m.ID == 0)
            {
                action     = "Add";
                m.Password = SysParamsDataAccess.GetSysParamsValue("DefaultUserPassword"); //預設密碼

                //驗証帳號是否重覆
                var dt = GetUserList(null, m.Account, null, null, null, new Pages());
                if (dt.Rows.Count > 0)
                {
                    throw new Exception("已有重覆的帳號");
                }
            }

            //開啟資料庫存取物件
            using (var db = new DataBase.DataBase(Definition.Conn, true))
            {
                try
                {
                    //資料庫參數
                    var param = new DataBase.SqlParams();
                    param.Add("ID", m.ID);
                    param.Add("Email", m.Email);
                    param.Add("Password", Util.MD5(m.Password, 32));
                    param.Add("Account", m.Account);
                    param.Add("Name", m.Name);
                    param.Add("IsSuper", m.IsSuper);
                    param.Add("IsLock", m.IsLock);
                    param.Add("LastLoginDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                    param.Add("CreateDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                    db.SqlParams = param;

                    if (action == "Add")
                    {
                        //新增使用者
                        db.StrSQL = "INSERT [User](Email, Password, Account, Name, IsSuper, IsLock, LastLoginDate, CreateDate) VALUES(@Email, @Password, @Account, @Name, @IsSuper, @IsLock, @LastLoginDate, @CreateDate);";
                    }
                    else
                    {
                        //修改使用者
                        db.StrSQL = "UPDATE [User] SET Email=@Email, Name=@Name, IsSuper=@IsSuper, IsLock=@IsLock WHERE ID=@ID;";
                    }

                    //刪除舊有使用者選單權限與群組資料
                    db.StrSQL += @"DELETE FROM [Auth] WHERE Account = @Account;
                                   DELETE FROM [GroupUser] WHERE Account = @Account";
                    db.ExecuteSQL();

                    //逐筆判斷選單權限
                    foreach (var ma in m.AuthList)
                    {
                        if (ma.Add || ma.Edit || ma.Del || ma.Query || ma.Audit || ma.Print || ma.Export || ma.Import || ma.Admin)
                        {
                            param.Clear();
                            param.Add("Account", m.Account);
                            param.Add("MenuNo", ma.MenuNo);
                            param.Add("Add", ma.Add);
                            param.Add("Edit", ma.Edit);
                            param.Add("Del", ma.Del);
                            param.Add("Query", ma.Query);
                            param.Add("Audit", ma.Audit);
                            param.Add("Print", ma.Print);
                            param.Add("Export", ma.Export);
                            param.Add("Import", ma.Import);
                            param.Add("Admin", ma.Admin);
                            param.Add("Enabled", true);
                            param.Add("CreateDate", DateTime.Now);
                            param.Add("ModifyDate", DateTime.Now);
                            db.SqlParams = param;

                            db.StrSQL = @"INSERT [Auth](GroupID, Account, MenuNo, [Add], Edit, Del, Query, Audit, [Print], Export, Import, Admin, Enabled, CreateDate, ModifyDate) 
                                           VALUES('', @Account, @MenuNo, @Add, @Edit, @Del, @Query, @Audit, @Print, @Export, @Import, @Admin, @Enabled, @CreateDate, @ModifyDate);";
                            db.ExecuteSQL();
                        }
                    }

                    //逐筆新增使用者所屬的群組
                    foreach (var g in m.GroupItems)
                    {
                        param.Clear();
                        param.Add("GroupID", g.GroupID);
                        param.Add("Account", m.Account);
                        db.SqlParams = param;

                        db.StrSQL = "INSERT [GroupUser](GroupID, Account) VALUES(@GroupID, @Account)";
                        db.ExecuteSQL();
                    }

                    //確認執行交易
                    db.Commit();
                }
                catch (Exception e)
                {
                    //回復交易
                    db.Rollback();
                    throw e;
                }
            }
        }