笔记20150522-生成更新重复单据编号的update语句

        public string GenereteUpdateSql(int type = 0,int localdb=0)
        {
            StringBuilder sb = new StringBuilder();
            StringBuilder sbToday = new StringBuilder();
            sbToday.Append("<font color='red'>");
            if (localdb == 1) DbHelper.Conn = "Data Source=192.168.9.222;Initial Catalog=test;Persist Security Info=True;User ID=dev;Password=dev;";
            else DbHelper.Conn = "Data Source=****;Initial Catalog=test;Persist Security Info=True;User ID=test;Password=test";
            DbHelper db = new DbHelper();
            string sql = "SELECT  MAX(ReceiptNo) ReceiptNo FROM dbo.FinanceReceipts  f  GROUP BY f.ReceiptNo  HAVING COUNT(f.ReceiptNo)>1";//WHERE SUBSTRING(f.ReceiptNo,3,2)!='LS' ,,COUNT(ReceiptNo) repeatcount,MAX(ObjectType) ObjectType,MAX(CreatedDate) CreatedDate,MAX(CASE WHEN  IsSummary=1 THEN 1 ELSE 0 END ) isSummary,
            DataTable dtReceiptNo = db.ExecuteDataTable(sql);
            Dictionary<string, int> DateTypeSeriaNo = new Dictionary<string, int>();
            if (dtReceiptNo != null && dtReceiptNo.Rows.Count > 0)
            {
                foreach (DataRow drReceiptNo in dtReceiptNo.Rows)
                {
                    string ReceiptNoQuery = drReceiptNo["ReceiptNo"].ToString();
                    DataTable dtData = db.ExecuteDataTable(string.Format("select ReceiptId,ReceiptNo,ObjectType,CreatedDate,CASE WHEN  ReceiptStatus=0 THEN 0 ELSE 1 END IsCommit  FROM dbo.FinanceReceipts WHERE ReceiptNo='{0}' ", ReceiptNoQuery));
                    if (dtData != null && dtData.Rows.Count > 1)//同一编号大于2个
                    {

                        for (int i = 0; i < dtData.Rows.Count - 1; i++)//更新前n-1个
                        {
                            DataRow drData = dtData.Rows[i];
                            int ReceiptId = Convert.ToInt32(drData["ReceiptId"]);
                            int ObjectType = Convert.ToInt32(drData["ObjectType"]);
                            string CreatedDate = drData["CreatedDate"].ToString();

                            int maxSerial = 0;
                            int IsCommit = Convert.ToInt32(drData["IsCommit"]);
                            string DateTypeKey = string.Format("{0}{1}{2}", CreatedDate, ObjectType, IsCommit);
                            if (DateTypeSeriaNo.ContainsKey(DateTypeKey))
                            {
                                maxSerial = DateTypeSeriaNo[DateTypeKey];
                            }

                            {
                                string maxSerialSql = "";
                                if (IsCommit == 0) maxSerialSql = string.Format(" SELECT MAX(SerialNumber) FROM dbo.FinanceReceipts WHERE  ObjectType={0} AND ReceiptStatus=0 AND CreatedDate='{1}' ", ObjectType, CreatedDate);
                                else maxSerialSql = string.Format(" SELECT MAX(SerialNumber) FROM dbo.FinanceReceipts WHERE  ObjectType={0} AND ReceiptStatus!=0 AND CreatedDate='{1}' ", ObjectType, CreatedDate);
                                object retobj = db.ExecuteScalar(maxSerialSql);
                                int dbMaxSerail = 0;
                                if (retobj != DBNull.Value) dbMaxSerail = Convert.ToInt32(retobj);
                                maxSerial=(maxSerial>dbMaxSerail?maxSerial:dbMaxSerail);
                                DateTypeSeriaNo[DateTypeKey] = maxSerial;//存入dict
                            }
                            string ReceiptNo = string.Empty;
                            switch (ObjectType)
                            {
                                case 1: // 应收
                                    ReceiptNo = "YS";
                                    break;

                                case 2: // 收款
                                    ReceiptNo = "SK";
                                    break;

                                case 3: // 应付
                                    ReceiptNo = "YF";
                                    break;

                                case 4: // 付款
                                    ReceiptNo = "FK";
                                    break;

                                default:
                                    throw new InvalidOperationException("未知票据类型,不能生成单据编号");
                            }

                            // 未提交
                            if (IsCommit == 0 || ReceiptNoQuery.Substring(2, 2) == "LS")
                            {
                                ReceiptNo += "LS";
                            }
                            ReceiptNo += CreatedDate;
                            maxSerial++;
                            DateTypeSeriaNo[DateTypeKey] = maxSerial;
                            ReceiptNo += string.Format("{0:D6}", maxSerial);
                            string CreatedDateToday=DateTime.Now.ToString("yyyyMMdd");
                            if (CreatedDate == CreatedDateToday)
                            {
                                sbToday.AppendFormat("UPDATE dbo.FinanceReceipts SET SerialNumber={0},ReceiptNo='{1}' WHERE ReceiptId={2};<br/>", maxSerial, ReceiptNo, ReceiptId);
                                sbToday.AppendFormat("INSERT INTO dbo.FinanceBillLog(ReceiptId,[Action] ,Remark ,CreatedById ,CreatedByName ,CreatedDate) VALUES  ({0},N'修改重复付款单编号' ,N'从 {1} 改为 {2}' ,0 ,N'sql' ,'2015-05-22 15:30:00');<br/>", ReceiptId, ReceiptNoQuery, ReceiptNo);
                            }
                            else
                            {
                                sb.AppendFormat("UPDATE dbo.FinanceReceipts SET SerialNumber={0},ReceiptNo='{1}' WHERE ReceiptId={2};<br/>", maxSerial, ReceiptNo, ReceiptId);
                                sb.AppendFormat("INSERT INTO dbo.FinanceBillLog(ReceiptId,[Action] ,Remark ,CreatedById ,CreatedByName ,CreatedDate) VALUES  ({0},N'修改重复付款单编号' ,N'从 {1} 改为 {2}' ,0 ,N'sql' ,'2015-05-22 15:30:00');<br/>", ReceiptId, ReceiptNoQuery, ReceiptNo);
                            }
                        }
                    }
                }
            }
            sbToday.Append("</font>");
            if (type == 1) return sb.ToString();
            if (type == 2) return sbToday.ToString();
            return sb.ToString() + "<br/><br/><br/>" + sbToday.ToString();
        }

				
时间: 2024-10-20 02:00:20

笔记20150522-生成更新重复单据编号的update语句的相关文章

用C#生成不重复的随机数

对于随机数,大家都知道,计算机不可能产生完全随机的数字,所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称 作伪随机数.伪随机数是以相同的概率从一组有限的数字中选取的.所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了.伪随机数的选 择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地"随机",随机种子的选择就显得非常重要.如果随机种子一样,那么同一个随机数发生器产生 的随机数也会一样.一

php编写批量生成不重复的卡号密码代码

  本文给大家分享的是一个十分实用的代码,项目中经常需要用到,可以批量生成不重复的卡号密码的2种方法,有需要的小伙伴参考下吧. 闲的蛋疼的时候,顺便加强下自己对PHP中数组操纵的一些技巧,就写了下面的一段小代码,可以随机生成卡号密码对应的数组,并且自动去重复,思路没有,纯粹瞎掰. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

用TreeSet生成不重复自动排序随机数组

随机数的重复问题,这个问题常常被忽略,本文利用TreeSet集合实现不重复的数列,并自动完成元素的排序后然后生成数组. TreeSet集合属于Set集合的子类,Set集合不允许有重复的元素存在,所以重复数据是不允许添加到Set集合中的: 而add()的返回值可以确定添加操作是否成功完成,该方法的声明如下:public boolean add(E e) 代码如下所示: package com.chapter.three.one.cn; import java.util.ArrayList; imp

C#生成不重复随机数列表实例_C#教程

复制代码 代码如下: /// <summary>        /// 生成不重复随机数列表实例        /// </summary>        /// <param name="count">不重复数数量</param>        /// <returns>不重复数列表</returns>        private static List<int> GetRandomList(int

PHP生成不重复标识符的方法_php技巧

本文实例讲述了PHP生成不重复标识符的方法.分享给大家供大家参考.具体实现方法如下: 生成唯一不重复的标识我们主要是根据当前的一个时间time然后再转换在md5值,这样几乎是可以保证标签的唯一性,下面整理了一些关于PHP生成不重复标识符程序代码,感兴趣的朋友可以来看一下 PHP倒是自带了生成唯一id的函数:uniqid() ,它是基于当前时间微秒数的,用法如下: 复制代码 代码如下: echo uniqid(); //13位的字符串 echo uniqid("php_"); //当然你

生成不重复的随机数的二种方法

下面我以生成1-10之间的10个不重复的随机数为例介绍生成不重复的随机数的三种方法:1. 通过while循环来实现通过while循环不停的生成随机数,直到生成一个不重复的为止,这种方法比较容易想到,但是效率也比较低下,实例代码如下: static void Main(string[] args) { int[] result = new int[10]; int tmp = -1; Random random = new Random(); bool repeat = false; for (i

用C#生成不重复的随机数的代码_C#教程

对于随机数,大家都知道,计算机不 可能产生完全随机的数字,所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称 作伪随机数.伪随机数是以相同的概率从一组有限的数字中选取的.所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了.伪随机数的选 择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地"随机",随机种子的选择就显得非常重要.如果随机种子一样,那么同一个随机数发生器产生 的随机数也会一样.

javascript生成不重复的随机数_javascript技巧

题目来源:在慕课学习jQuery过程中一道测试题. 初始时:<ul>元素中仅显示5个<li>元素,其中包含还包括最后一个<li>元素,<a>元素中的显示"更多"字符. 当点击"更多"链接时,自身内容变为"简化",同时,<ul>元素中显示全部的<li>元素. 当点击"简化"链接时,自身内容变为"更多",同时,<ul>元素中仅显

php生成不重复随机数、数组的4种方法分享_php技巧

下面写几种生成不重复随机数的方法,直接上代码吧 复制代码 代码如下: <?php define('RANDOM_MAX', 100); define('COUNT', 10); echo 'max random num: '.RANDOM_MAX, ' ;result count:'.COUNT, '<br/>'; invoke_entry('rand1'); invoke_entry('rand2'); invoke_entry('rand3'); invoke_entry('rand