protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { PageControlLocalizationText pl = new PageControlLocalizationText(this); pl.SetListPageControlLocalizationText(); lblFuncName.Text = Session["FuncName"].ToString(); SetRight.SetPageRight(this.Page, Session["FuncId"].ToString(), Session["RoleIDs"].ToString()); btnJIAOBAN.Attributes.Add("onClick", "return confirm('" + GetGlobalResourceObject("WebGlobalResource", "Common004").ToString() + "');"); btnDelete.Attributes.Add("onClick", "return confirm('" + GetGlobalResourceObject("WebGlobalResource", "DeleteBeforeConfirm").ToString() + "');"); object obj; //为了突出哪个变电站,功能名要加变电站名称 if (Session["Culture"] == null || Session["Culture"].ToString() == "zh-CN") { _sql = "select NAME from DMIS_SYS_DEPART where ID=" + Session["DepartID"].ToString(); } else { _sql = "select OTHER_LANGUAGE_DESCR from DMIS_SYS_DEPART where ID=" + Session["DepartID"].ToString(); } obj = DBOpt.dbHelper.ExecuteScalar(_sql); if (obj != null) { lblFuncName.Text += "[" + obj.ToString() + "]"; } FillDropDownList.FillByTable(ref ddlWEATHER, "DMIS_SYS_WEATHER", "NAME", "TID"); FillDDY(); FillShift(); if (ddlQueryShift.Items.Count < 1) { //JScript.Alert("还没有设置调度值班班次信息,请联系系统管理员!"); return; } DateTime st; //没有权限修改交接班记录的人只能查看数据,不能执行下面查找或生成当前班次的记录。 if (!SetRight.IsModify(Session["FuncID"].ToString(), "frmSTATION_SHIFT.aspx", "btnSave", Session["MemberID"].ToString())) { return; } if (SetRight.IsAdminitrator(Session["MemberID"].ToString())) { btnAdd.Visible = true; btnDelete.Visible = true; } int days = 1; //没有设置值班天数,则为1 if (ddlQueryShift.Items.Count == 1) //值班参数表只有一条记录时,则要判断值班天数,多条记录则为1 { obj = DBOpt.dbHelper.ExecuteScalar("select SHIFT_DAYS from T_STATION_SHIFT_PARA where STATION_ID=" + Session["DepartID"].ToString()); if (obj != null) //得到值班天数 { days = Convert.ToInt16(obj); } } else { days = 1; } uint tid = 1; /*************************************** * 判断当前班次的规则如下: * 1、首先找flag为1(正在当班)的记录,没有找到则以当前日期和第一个班次新建当前班次 * 2、如果有flag为1(正在当班)的记录,则再判断此当班日期是否在今天以前的days内之内;如果不是,则把此表内条件flag=1(正值)的记录的列flag的值设置为0(已值),再以当前日期和第一个班次新建当前班次; * 3、flag为1(正在当班)的记录的当班日期在今天以前的days天之内,则当前班次就是此班次。 * **************************************/ _sql = "select TID,DATEM,SHIFT from T_STATION_SHIFT where flag=1 and STATION_ID=" + Session["DepartID"].ToString() + " order by DATEM desc"; DataTable dt = DBOpt.dbHelper.GetDataTable(_sql); if (dt.Rows.Count > 0) //找到了当班的记录 { st = (Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd"))).AddDays(-days); //值班天数之前的00:00,用于下列比较 if ((DateTime)dt.Rows[0]["DATEM"] < st) //当前班次在值班天数以前,则新建班次 { _sql = "update T_STATION_SHIFT set flag=0 where flag=1 and STATION_ID=" + Session["DepartID"].ToString(); //先把当班记录状态设置为已交班 DBOpt.dbHelper.ExecuteSql(_sql); //查找当日的第一个班次的记录在数据库中是否存在 obj = DBOpt.dbHelper.ExecuteScalar("select count(*) from T_STATION_SHIFT where to_char(DATEM,'YYYYMMDD')='" + DateTime.Now.ToString("yyyyMMdd") + "' and SHIFT=" + ddlQueryShift.Items[0].Value + " and STATION_ID=" + Session["DepartID"].ToString()); if (obj == null || Convert.ToInt16(obj) == 0) //数据库中没有当日的第一个班次的记录 { tid = DBOpt.dbHelper.GetMaxNum("T_STATION_SHIFT", "TID"); obj = DBOpt.dbHelper.ExecuteScalar("select SHIFT_STARTTIME,to_char(SHIFT_STARTTIME,'HH24:MI') ss from T_STATION_SHIFT_PARA where STATION_ID=" + Session["DepartID"].ToString() + " order by ss"); st = (DateTime)obj; _sql = "insert into T_STATION_SHIFT(TID,DATEM,SHIFT,FLAG,STATION_ID) values(" + tid + ",TO_DATE('" + DateTime.Now.ToString("yyyy-MM-dd") + st.ToString(" HH:mm") + "','YYYY-MM-DD HH24:MI')," + ddlQueryShift.Items[0].Value + "," + ddlQueryShift.Items[0].Value + "," + Session["DepartID"].ToString() + ")"; if (DBOpt.dbHelper.ExecuteSql(_sql) < 0) { JScript.Alert((String)GetGlobalResourceObject("WebGlobalResource", "Common001")); MultiView1.Visible = false; return; } } else //数据库中有当日的第一个班次的记录,则把状态设置为当班状态(为1) { _sql = "update T_STATION_SHIFT set flag=1 where to_char(DATEM,'YYYYMMDD')='" + DateTime.Now.ToString("yyyyMMdd") + "' and SHIFT=" + ddlQueryShift.Items[0].Value + " and STATION_ID=" + Session["DepartID"].ToString(); if (DBOpt.dbHelper.ExecuteSql(_sql) != 1) { JScript.Alert((String)GetGlobalResourceObject("WebGlobalResource", "Common002")); MultiView1.Visible = false; return; } tid = Convert.ToUInt16(DBOpt.dbHelper.ExecuteScalar("select TID from T_STATION_SHIFT where to_char(DATEM,'YYYYMMDD')='" + DateTime.Now.ToString("yyyyMMdd") + "' and SHIFT=" + ddlQueryShift.Items[0].Value + " and STATION_ID=" + Session["DepartID"].ToString())); } Session["CurrentShiftDate"] = DateTime.Now.ToString("yyyyMMdd"); Session["CurrentShift"] = 1; ViewState["CurrentShiftDate"] = DateTime.Now.ToString("yyyy-MM-dd"); } else //当前班次是昨天以后,则以此作为当前班次 { Session["CurrentShiftDate"] = ((DateTime)dt.Rows[0][1]).ToString("yyyyMMdd"); Session["CurrentShift"] = dt.Rows[0][2]; tid = Convert.ToUInt16(dt.Rows[0][0]); ViewState["CurrentShiftDate"] = ((DateTime)dt.Rows[0][1]).ToString("yyyy-MM-dd"); } } else //没有当前班次,则以当日的第一个班次新建当前班次 { obj = DBOpt.dbHelper.ExecuteScalar("select count(*) from T_STATION_SHIFT where to_char(DATEM,'YYYYMMDD')='" + DateTime.Now.ToString("yyyyMMdd") + "' and SHIFT=" + ddlQueryShift.Items[0].Value + " and STATION_ID=" + Session["DepartID"].ToString()); if (obj == null || Convert.ToInt16(obj) == 0) //数据库中没有当日的第一个班次的记录 { tid = DBOpt.dbHelper.GetMaxNum("T_STATION_SHIFT", "TID"); obj = DBOpt.dbHelper.ExecuteScalar("select SHIFT_STARTTIME,to_char(SHIFT_STARTTIME,'HH24:MI') ss from T_STATION_SHIFT_PARA where STATION_ID=" + Session["DepartID"].ToString() + " order by ss"); st = (DateTime)obj; _sql = "insert into T_STATION_SHIFT(TID,DATEM,SHIFT,FLAG,STATION_ID,CURRENT_SHIFT_MAN1) values(" + tid + ",TO_DATE('" + DateTime.Now.ToString("yyyy-MM-dd") + st.ToString(" HH:mm") + "','YYYY-MM-DD HH24:MI')" + "," + ddlQueryShift.Items[0].Value + ",1," + Session["DepartID"].ToString() + ",'" + Session["MemberName"].ToString() + "')"; if (DBOpt.dbHelper.ExecuteSql(_sql) < 0) { JScript.Alert((String)GetGlobalResourceObject("WebGlobalResource", "Common001")); MultiView1.Visible = false; return; } } else //数据库中有当日的第一个班次的记录,把其状态改为当值(为1) { _sql = "update T_STATION_SHIFT set flag=1 where to_char(DATEM,'YYYYMMDD')='" + DateTime.Now.ToString("yyyyMMdd") + "' and SHIFT=" + ddlQueryShift.Items[0].Value + " and STATION_ID=" + Session["DepartID"].ToString(); if (DBOpt.dbHelper.ExecuteSql(_sql) != 1) { JScript.Alert((String)GetGlobalResourceObject("WebGlobalResource", "Common002")); MultiView1.Visible = false; return; } tid = Convert.ToUInt16(DBOpt.dbHelper.ExecuteScalar("select TID from T_STATION_SHIFT where to_char(DATEM,'YYYYMMDD')='" + DateTime.Now.ToString("yyyyMMdd") + "' and SHIFT=" + ddlQueryShift.Items[0].Value + " and STATION_ID=" + Session["DepartID"].ToString())); } Session["CurrentShiftDate"] = DateTime.Now.ToString("yyyyMMdd"); Session["CurrentShift"] = ddlQueryShift.Items[0].Value; ViewState["CurrentShiftDate"] = DateTime.Now.ToString("yyyy-MM-dd"); } CustomControlFill.CustomControlFillByTableAndWhere(this.Page, "T_STATION_SHIFT", "TID=" + tid); wdlQueryDate.setTime(Convert.ToDateTime(ViewState["CurrentShiftDate"])); ddlQueryShift.SelectedIndex = ddlQueryShift.Items.IndexOf(ddlQueryShift.Items.FindByValue(Session["CurrentShift"].ToString())); btnQuery_Click(null, null); } else { //btnQuery_Click(null, null); } }