Ejemplo n.º 1
0
        /// <summary>
        /// 異常状態チェックで
        /// MUエラーチェック
        /// </summary>
        private void UpdateErrorForMu()
        {
//            m_errorInfo.ResetMuInfo();


            string locale_code = CommonUtil.GetAppLocaleCode();

            MuMaster[] mu_masters = BaseModel.GetRows <MuMaster>(m_db.Conn, "SELECT * FROM mu_master WHERE mu_enable=1");

            foreach (MuMaster mu_master in mu_masters)
            {
                int         mu_id         = mu_master.mu_id;
                MuStatusLog mu_status_log = BaseModel.GetFirst <MuStatusLog>(m_db.Conn, "SELECT * FROM mu_status_log WHERE mu_log_mu_id=" + mu_id + " ORDER BY mu_log_index DESC LIMIT 1");
                string      message       = null;
                bool        is_error      = true;
                if (mu_status_log.mu_log_com == 0)
                {
                    //  未接続のとき

                    //  前回のエラー情報とオペモードをリセット
                    //                    ResetMuErrCode(mu_id);
                    m_errorInfo.RemoveByMu(mu_id);
                    ResetMuOpeMode(mu_id);

                    int errcode = 999900009;    //  オフライン用に存在しないエラーコードを設定
                    if (!IsSameErrCode(mu_id, errcode))
                    {
                        message = Properties.Resources.MLD_MUORDER_STATUS_NOCON;
                    }

                    is_error = false;
                }
                else if (mu_status_log.mu_log_errcode == 0)
                {
                    //  エラーなしのとき

                    //  前回のエラー情報リセット
                    ResetMuErrCode(mu_id);

                    int ope_mode = mu_status_log.mu_log_ope_mode;
                    if (!IsSameOpeMode(mu_id, ope_mode))
                    {
                        //  ope_modeに対応するメッセージを取得
                        message = CommonUtil.GetValueFromCSV(Properties.Resources.MLD_OPE_MODE, ope_mode);

                        is_error = false;
                    }
                }
                else
                {
                    //  エラーありのとき

                    //  前回のope_modeリセット
                    ResetMuOpeMode(mu_id);

                    int errcode = mu_status_log.mu_log_errcode;
                    if (!IsSameErrCode(mu_id, errcode))
                    {
                        //  levelかcodeに異常がある場合はメッセージを取得
                        message = CommonUtil.MuErrorMessageFormat(m_db.Conn, locale_code, mu_id, mu_status_log.mu_log_errlevel, errcode);
                    }
                }



                if (message != null)
                {
                    string mu_name = BaseModel.GetFirstValue <string>(m_db.Conn, MuMaster.SelectNameSql(locale_code, mu_id.ToString()), "mu_name_" + locale_code);

                    //  エラー発生日時を取得
                    DateTime updatedAt = mu_status_log.mu_log_datetime;

                    //  発部署、着部署
                    // ①の mu_statusテーブルの同一レコードにあるmu_stat_order_id(搬送オーダID)がNULLの場合(搬送していない)は、発部署、着部署はブランク表示します。
                    //  mu_stat_order_id<> NULLの場合は、このmu_stat_order_idの一致する搬送オーダテーブル(order_reserve)から該当するレコード情報から発部署、着部署(巡回、不在転送含む表示)を表示する。
                    (string fromSectNames, string toSectNames) = OrderReserve.GetSectNames(m_db.Conn, mu_status_log.mu_log_order_id);

                    string other_name = "value";
                    //  棟名称
                    string hospital_name = BaseModel.GetFirstValue <string>(m_db.Conn, HospitalMaster.SelectNameSql(locale_code, mu_status_log.mu_log_hospital_id.ToString(), other_name));

                    //  フロア名称
                    string floor_name = BaseModel.GetFirstValue <string>(m_db.Conn, FloorMaster.SelectNameSql(locale_code, mu_status_log.mu_log_floor_id.ToString(), other_name));


                    //  ポイント名称
                    string point_name = BaseModel.GetFirstValue <string>(m_db.Conn, PointMaster.SelectNameSql(locale_code, mu_status_log.mu_log_point_last.ToString(), other_name));



                    //  メッセージを追加 (オフラインのときは黒)
                    this.addMessage(updatedAt, is_error ? "Red" : "Black", message, mu_name);


                    //  システム状態のリストにもメッセージが表示されるように
                    if (m_systemStatusControl != null)
                    {
                        m_systemStatusControl.addMessage(updatedAt, is_error ? "Red" : "Black", message, mu_name);
                    }



                    int muorder_status = mu_status_log.mu_log_muorder_status;

                    if (is_error)
                    {
                        //  異常情報ようにエラー情報設定
                        m_errorInfo.UpdateMuError(updatedAt, GetErrorBrush(muorder_status), mu_id, mu_name, message, fromSectNames, toSectNames, hospital_name, floor_name, mu_status_log.mu_log_pos_x, mu_status_log.mu_log_pos_y, point_name);
                    }
                }
            }
        }