最近做一个医院的预约系统,需要用到流水号,每天从1开始。因为水平比较菜,所以从院子了学习了很多高手的思想,因为时间紧张,就弄了一个,自己测试,基本上能满足功能要求。
public int singleStr; //序号
#region 生成预约单号
public string GetOrderID(DateTime sdt)
{
DataTable dt = rd.GetR_Number(sdt);//当前表中已经存在的最新的记录
string multiStr; //序号加0之后
int i_Number;
if (dt.Rows.Count == 0)//如果记录为空,则从1开始
{
singleStr = 1;
}
else
{
string s_Number = dt.Rows[0]["R_Number"].ToString().Substring(14, 4);
if (Convert.ToDateTime(dt.Rows[0]["R_OnDate"]).Day.ToString() == sdt.Day.ToString())
{
#region 除0
if (s_Number.Substring(0, 1) == "0" && s_Number.Substring(0, 2) == "0" && s_Number.Substring(0, 3) == "0" && s_Number.Substring(0, 3) != "0")
{
i_Number = Convert.ToInt32(s_Number.Substring(3, 1));
singleStr = i_Number + 1;
}
else if (s_Number.Substring(0, 1) == "0" && s_Number.Substring(0, 2) == "0" && s_Number.Substring(0, 3) != "0" && s_Number.Substring(0, 3) != "0")
{
i_Number = Convert.ToInt32(s_Number.Substring(2, 2));
singleStr = i_Number + 1;
}
else if (s_Number.Substring(0, 1) == "0" && s_Number.Substring(0, 2) != "0" && s_Number.Substring(0, 3) != "0" && s_Number.Substring(0, 3) != "0")
{
i_Number = Convert.ToInt32(s_Number.Substring(1, 3));
singleStr = i_Number + 1;
}
else if (s_Number.Substring(0, 1) != "0" && s_Number.Substring(0, 2) != "0" && s_Number.Substring(0, 3) != "0" && s_Number.Substring(0, 3) != "0")
{
i_Number = Convert.ToInt32(s_Number.Substring(0, 4));
singleStr = i_Number + 1;
}
#endregion
}
else
{
singleStr = 1;
}
}
#region 补 0
int strLens = singleStr.ToString().Length;
switch (strLens)
{
case 1:
multiStr = "000" + singleStr;
break;
case 2:
multiStr = "00" + singleStr;
break;
case 3:
multiStr = "0" + singleStr;
break;
default:
multiStr = singleStr.ToString();
break;
}
#endregion
return multiStr;
}
#endregion
public string GetOrderID(DateTime sdt)
{
DataTable dt = rd.GetR_Number(sdt);//当前表中已经存在的最新的记录
string multiStr; //序号加0之后
int i_Number;
if (dt.Rows.Count == 0)//如果记录为空,则从1开始
{
singleStr = 1;
}
else
{
string s_Number = dt.Rows[0]["R_Number"].ToString().Substring(14, 4);
if (Convert.ToDateTime(dt.Rows[0]["R_OnDate"]).Day.ToString() == sdt.Day.ToString())
{
#region 除0
if (s_Number.Substring(0, 1) == "0" && s_Number.Substring(0, 2) == "0" && s_Number.Substring(0, 3) == "0" && s_Number.Substring(0, 3) != "0")
{
i_Number = Convert.ToInt32(s_Number.Substring(3, 1));
singleStr = i_Number + 1;
}
else if (s_Number.Substring(0, 1) == "0" && s_Number.Substring(0, 2) == "0" && s_Number.Substring(0, 3) != "0" && s_Number.Substring(0, 3) != "0")
{
i_Number = Convert.ToInt32(s_Number.Substring(2, 2));
singleStr = i_Number + 1;
}
else if (s_Number.Substring(0, 1) == "0" && s_Number.Substring(0, 2) != "0" && s_Number.Substring(0, 3) != "0" && s_Number.Substring(0, 3) != "0")
{
i_Number = Convert.ToInt32(s_Number.Substring(1, 3));
singleStr = i_Number + 1;
}
else if (s_Number.Substring(0, 1) != "0" && s_Number.Substring(0, 2) != "0" && s_Number.Substring(0, 3) != "0" && s_Number.Substring(0, 3) != "0")
{
i_Number = Convert.ToInt32(s_Number.Substring(0, 4));
singleStr = i_Number + 1;
}
#endregion
}
else
{
singleStr = 1;
}
}
#region 补 0
int strLens = singleStr.ToString().Length;
switch (strLens)
{
case 1:
multiStr = "000" + singleStr;
break;
case 2:
multiStr = "00" + singleStr;
break;
case 3:
multiStr = "0" + singleStr;
break;
default:
multiStr = singleStr.ToString();
break;
}
#endregion
return multiStr;
}
#endregion
#region 生成流水号 前提
public DataTable GetR_Number(DateTime sdt)
{
SqlParameter par = new SqlParameter("@R_OnDate",sdt);
return SqlHelper.ExecuteDataset(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, "SELECT TOP 1 R_Number,R_OnDate FROM DayOHARS_Register where day(R_OnDate)=day(@R_OnDate) ORDER BY R_Number Desc",par).Tables[0];
}
#endregion
string sn="ES9E-" + DayOHARS.Unitity.HtmlHelper.GetTimeStr(Convert.ToDateTime(txtROnDate.Text)) + "-" + GetOrderID(Convert.ToDateTime(txtROnDate.Text));//最终写入数据库的格式,前缀-日期-序号
这里面应该还可以进一步封装,由于时间关系,先记录下来,以备后用。欢迎高手指点,进一步优化。
posted @ 2011-06-22 09:35 Wanghugh 阅读(74) 评论(1) 编辑