Wanghugh

博客园 首页 新随笔 联系 订阅 管理
  1 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks

公告

2011年6月22日 #

最近做一个医院的预约系统,需要用到流水号,每天从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
        #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) 编辑