using System; using System.Data; using System.Data.SqlClient; using DSWeb.Models; using WebSqlHelper; namespace DSWeb.EntityDA { public class InvoiceBookDA { //发票册主表 private string PARM_INVOICE_BOOK_GID = "@gid"; private string PARM_INVOICE_BOOK_NAME = "@name"; private string PARM_INVOICE_BOOK_DESCRIPTION = "@description"; private string PARM_INVOICE_BOOK_CREATE_USER = "@create_user"; //private string PARM_INVOICE_BOOK_CREATE_TIME = "@create_time"; //private string PARM_INVOICE_BOOK_MODIFIED_USER = "@modified_user"; //private string PARM_INVOICE_BOOK_MODIFIED_TIME = "@modified_time"; private string PARM_INVOICE_BOOK_INVOICE_CODE = "@invoice_code"; private string PARM_INVOICE_BOOK_INVOICE_NUM_START = "@invoice_num_start"; private string PARM_INVOICE_BOOK_INVOICE_NUM_END = "@invoice_num_end"; private string PARM_INVOICE_BOOK_INVOICE_TOTAL = "@invoice_total"; private string PARM_INVOICE_BOOK_IS_LOCK = "@is_lock"; private string PARM_INVOICE_BOOK_IS_DELETE = "@is_delete"; private string PARM_INVOICE_BOOK_DELETE_USER = "@delete_user"; //private string PARM_INVOICE_BOOK_DELETE_TIME = "@delete_time"; private string PARM_INVOICE_BOOK_COMPANY_ID = "@company_id"; private string PARM_INVOICE_BOOK_TYPE = "@type"; //private string PARM_INVOICE_BOOK_COLUMN_NAME = "@column_name"; //private string PARM_INVOICE_BOOK_COLUMN_VALUE = "@column_value"; //发票册从表 private string PARM_INVOICE_BOOK_ITEM_GID = "@gid"; private string PARM_INVOICE_BOOK_ITEM_BOOK_ID = "@book_id"; private string PARM_INVOICE_BOOK_ITEM_INVOICE_NUM = "@invoice_num"; private string PARM_INVOICE_BOOK_ITEM_CREATE_USER = "@create_user"; //private string PARM_INVOICE_BOOK_ITEM_CREATE_TIME = "@create_time"; private string PARM_INVOICE_BOOK_ITEM_IS_LOCK = "@is_lock"; private string PARM_INVOICE_BOOK_ITEM_IS_DELETE = "@is_delete"; private string PARM_INVOICE_BOOK_ITEM_DELETE_USER = "@delete_user"; //private string PARM_INVOICE_BOOK_ITEM_DELETE_TIME = "@delete_time"; private string PARM_INVOICE_BOOK_ITEM_IS_MAKE_OUT = "@is_makeout"; private string SQL_SELECT_INVOICE_BOOK_BY_GID = " SELECT GID, NAME, DESCRIPTION, CREATEUSER, CREATETIME, MODIFIEDUSER, MODIFIEDTIME, INVOICECODE, INVOICENUMSTART, INVOICENUMEND, " + " INVOICETOTAL, ISLOCK, ISDELETE, DELETEUSER, DELETETIME,TYPE,COMPANYID FROM ch_fee_invoicebooks WHERE GID = @gid "; //private string SQL_SELECT_INVOICE_BOOK_BY_INVOICECODE = " SELECT GID, NAME, DESCRIPTION, CREATEUSER, CREATETIME, MODIFIEDUSER, MODIFIEDTIME, INVOICECODE, INVOICENUMSTART, INVOICENUMEND, INVOICETOTAL, ISLOCK, ISDELETE, DELETEUSER, DELETETIME FROM ch_fee_invoicebooks WHERE INVOICECODE = @invoice_code "; private string SQL_INSERT_INVOICE_BOOK = " INSERT INTO ch_fee_invoicebooks(GID,NAME,DESCRIPTION,CREATEUSER,CREATETIME,INVOICECODE,INVOICENUMSTART,INVOICENUMEND,INVOICETOTAL,ISLOCK,ISDELETE,COMPANYID,TYPE) " + " VALUES(@gid,@name,@description,@create_user,GETDATE(),@invoice_code,@invoice_num_start,@invoice_num_end,@invoice_total,@is_lock,@is_delete,@company_id,@type) "; private string SQL_INSERT_INVOICE_BOOK_ITEM = " INSERT INTO ch_fee_invoiceitems(GID, BOOKID, INVOICENUM, CREATEUSER, CREATETIME, ISLOCK, ISDELETE, ISMAKEOUT) " + " VALUES(@gid,@book_id,@invoice_num,@create_user,GETDATE(),@is_lock,@is_delete,@is_makeout)"; private string SQL_SELECT_SAME_INVOICE_NUM = " SELECT COUNT(*) FROM ch_fee_invoiceitems WHERE INVOICENUM = @invoice_num AND ISDELETE <> 1 "; //private string SQL_DELETE_INVOICE_BOOK = " DELETE FROM ch_fee_invoicebooks WHERE GID = @gid "; //private string SQL_DELETE_INVOICE_BOOK_ITEM = " DELETE FROM ch_fee_invoiceitems WHERE BOOKID = @book_id "; private string SQL_SELECT_CURRENT_INVOICE_BOOK_ITEM = " SELECT TOP 1 A.GID, A.BOOKID, A.INVOICENUM, A.CREATEUSER, A.CREATETIME, A.ISLOCK, A.ISDELETE, A.DELETEUSER, A.DELETETIME, A.ISMAKEOUT " + " FROM ch_fee_invoiceitems as A INNER JOIN ch_fee_invoicebooks as B ON A.BOOKID = B.GID " + " WHERE A.ISLOCK <> 1 AND A.ISDELETE <> 1 AND A.ISMAKEOUT <> 1 AND B.COMPANYID = @company_id ORDER BY INVOICENUM ASC "; private string SQL_SELECT_INVOICE_BOOK_IS_EXIST_MAKEOUT = " SELECT COUNT(*) FROM ch_fee_invoiceitems WHERE BOOKID = @book_id AND ISMAKEOUT <> 0 AND ISDELETE <> 1"; //delete ch_fee_invoicebooks private string SQL_UPDATE_INVOICE_BOOK_VOID = "UPDATE ch_fee_invoicebooks SET ISDELETE = 1,DELETEUSER = @delete_user,DELETETIME = GETDATE() WHERE GID = @gid"; //delete ch_fee_invoiceitems private string SQL_UPDATE_INVOICE_ITEM_VOID = "UPDATE ch_fee_invoiceitems SET ISDELETE = 1,DELETEUSER = @delete_user,DELETETIME = GETDATE() WHERE BOOKID = @book_id"; private string SQL_SELECT_INVOICE_BOOK_INVOICE_CODE = "SELECT COUNT(*) FROM ch_fee_invoicebooks WHERE INVOICECODE = @invoice_code and ISDELETE=0"; #region 删除发票册主表信息 /// /// 删除发票册主表信息 /// /// 发票册主表GID /// 操作人GID /// 值1表示删除成功 值不等于1表示删除失败 public int DeleteInvoiceBook(string tempInvoiceBookGID,string tempUserID) { int iResult = 0; using (SqlTransaction sqlTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { try { int iExistState = 0; SqlParameter[] existParms = new SqlParameter[]{ new SqlParameter(PARM_INVOICE_BOOK_ITEM_BOOK_ID,SqlDbType.VarChar,36) }; existParms[0].Value = tempInvoiceBookGID; iExistState = (int)SqlHelper.ExecuteScalar(sqlTran, CommandType.Text, SQL_SELECT_INVOICE_BOOK_IS_EXIST_MAKEOUT, existParms); if (iExistState == 0) { SqlParameter[] updateItemParms = new SqlParameter[] { new SqlParameter(PARM_INVOICE_BOOK_ITEM_DELETE_USER,SqlDbType.VarChar,36), new SqlParameter(PARM_INVOICE_BOOK_ITEM_BOOK_ID,SqlDbType.VarChar,36) }; updateItemParms[0].Value = tempUserID; updateItemParms[1].Value = tempInvoiceBookGID; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_UPDATE_INVOICE_ITEM_VOID, updateItemParms); SqlParameter[] updateBookParms = new SqlParameter[] { new SqlParameter(PARM_INVOICE_BOOK_DELETE_USER,SqlDbType.VarChar,36), new SqlParameter(PARM_INVOICE_BOOK_GID,SqlDbType.VarChar,36) }; updateBookParms[0].Value = tempUserID; updateBookParms[1].Value = tempInvoiceBookGID; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_UPDATE_INVOICE_BOOK_VOID, updateBookParms); } //事务提交 sqlTran.Commit(); if (iExistState > 0) { iResult = 2;//状态为2表示发票册含有已经开出的发票,不能将整个发票删除 } else { iResult = 1;//状态为1表示插入成功 } } catch (Exception execError) { iResult = -1;//有异常,插入失败 sqlTran.Rollback(); iResult = -2;//插入异常,事务已回滚成功 throw execError; } finally { SqlHelper.CloseConnection(); } } return iResult; } #endregion #region 通过发票册GID获取发票信息 /// /// 通过发票册GID获取发票信息 /// /// 发票GID /// 返回实体类InvoiceBookEntity信息 public InvoiceBookEntity GetInvoiceBookByGID(string tempInvoiceBookGID) { InvoiceBookEntity invoiceBookEntity = null; SqlParameter parm = new SqlParameter(PARM_INVOICE_BOOK_GID, SqlDbType.VarChar, 36); parm.Value = tempInvoiceBookGID; using (SqlDataReader sqlRead = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_INVOICE_BOOK_BY_GID, parm)) { try { while (sqlRead.Read()) { invoiceBookEntity = new InvoiceBookEntity(); if (!sqlRead.IsDBNull(0)) { invoiceBookEntity.GID = sqlRead.GetString(0); } if (!sqlRead.IsDBNull(1)) { invoiceBookEntity.Name = sqlRead.GetString(1); } if (!sqlRead.IsDBNull(2)) { invoiceBookEntity.Description = sqlRead.GetString(2); } if (!sqlRead.IsDBNull(3)) { invoiceBookEntity.CreateUser = sqlRead.GetString(3); } if (!sqlRead.IsDBNull(4)) { invoiceBookEntity.CreateTime = sqlRead.GetDateTime(4); } if (!sqlRead.IsDBNull(5)) { invoiceBookEntity.ModifiedUser = sqlRead.GetString(5); } if (!sqlRead.IsDBNull(6)) { invoiceBookEntity.ModifiedTime = sqlRead.GetDateTime(6); } if (!sqlRead.IsDBNull(7)) { invoiceBookEntity.InvoiceCode = sqlRead.GetString(7); } if (!sqlRead.IsDBNull(8)) { invoiceBookEntity.InvoiceNumStart = sqlRead.GetString(8); } if (!sqlRead.IsDBNull(9)) { invoiceBookEntity.InvoiceNumEnd = sqlRead.GetString(9); } if (!sqlRead.IsDBNull(10)) { invoiceBookEntity.InvoiceTotal = sqlRead.GetInt32(10); } if (!sqlRead.IsDBNull(11)) { invoiceBookEntity.IsLock = sqlRead.GetBoolean(11); } if (!sqlRead.IsDBNull(12)) { invoiceBookEntity.IsDelete = sqlRead.GetBoolean(12); } if (!sqlRead.IsDBNull(13)) { invoiceBookEntity.DeleteUser = sqlRead.GetString(13); } if (!sqlRead.IsDBNull(14)) { invoiceBookEntity.DeleteTime = sqlRead.GetDateTime(14); } if (!sqlRead.IsDBNull(15)) { invoiceBookEntity.Type = sqlRead.GetInt32(15); } if (!sqlRead.IsDBNull(16)) { invoiceBookEntity.CompanyID = sqlRead.GetString(16); } } } catch (Exception execError) { throw execError; } } return invoiceBookEntity; } #endregion #region 获取当前可开发票信息 /// /// 获取当前可开发票信息 /// /// 分公司GID /// 返回实体类InvoiceBookItemEntity public InvoiceBookItemEntity GetCurrentBookItem(string tempCompanyID) { InvoiceBookItemEntity invoiceBookItemEntity = null; SqlParameter parm = new SqlParameter(PARM_INVOICE_BOOK_COMPANY_ID, SqlDbType.VarChar, 36); parm.Value = tempCompanyID; using (SqlDataReader sqlRead = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_CURRENT_INVOICE_BOOK_ITEM, parm)) { try { while (sqlRead.Read()) { invoiceBookItemEntity = new InvoiceBookItemEntity(); if (!sqlRead.IsDBNull(0)) { invoiceBookItemEntity.GID = sqlRead.GetString(0); } if (!sqlRead.IsDBNull(1)) { invoiceBookItemEntity.BookID = sqlRead.GetString(1); } if (!sqlRead.IsDBNull(2)) { invoiceBookItemEntity.InvoiceNum = sqlRead.GetString(2); } if (!sqlRead.IsDBNull(3)) { invoiceBookItemEntity.CreateUser = sqlRead.GetString(3); } if (!sqlRead.IsDBNull(4)) { invoiceBookItemEntity.CreateTime = sqlRead.GetDateTime(4); } if (!sqlRead.IsDBNull(5)) { invoiceBookItemEntity.IsLock = sqlRead.GetBoolean(5); } if (!sqlRead.IsDBNull(6)) { invoiceBookItemEntity.IsDelete = sqlRead.GetBoolean(6); } if (!sqlRead.IsDBNull(7)) { invoiceBookItemEntity.DeleteUser = sqlRead.GetString(7); } if (!sqlRead.IsDBNull(8)) { invoiceBookItemEntity.DeleteTime = sqlRead.GetDateTime(8); } if (!sqlRead.IsDBNull(9)) { invoiceBookItemEntity.IsMakeOut = sqlRead.GetBoolean(9); } } } catch (Exception execError) { throw execError; } } return invoiceBookItemEntity; } #endregion #region 插入发票信息(事务控制) /// /// 插入发票信息(事务控制) /// /// 发票实体类 /// 值1表示插入成功 值不等于1表示插入失败 public int InsertInvoiceBook(InvoiceBookEntity tempInvoiceBookEntity) { int iResult = 0; using (SqlTransaction sqlTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { try { SqlParameter[] bookParms = new SqlParameter[] { new SqlParameter(PARM_INVOICE_BOOK_GID,SqlDbType.VarChar,36), new SqlParameter(PARM_INVOICE_BOOK_NAME,SqlDbType.VarChar,50), new SqlParameter(PARM_INVOICE_BOOK_DESCRIPTION,SqlDbType.VarChar,50), new SqlParameter(PARM_INVOICE_BOOK_CREATE_USER,SqlDbType.VarChar,36), new SqlParameter(PARM_INVOICE_BOOK_INVOICE_CODE,SqlDbType.VarChar,200), new SqlParameter(PARM_INVOICE_BOOK_INVOICE_NUM_START,SqlDbType.VarChar,200), new SqlParameter(PARM_INVOICE_BOOK_INVOICE_NUM_END,SqlDbType.VarChar,200), new SqlParameter(PARM_INVOICE_BOOK_INVOICE_TOTAL,SqlDbType.Int), new SqlParameter(PARM_INVOICE_BOOK_IS_LOCK,SqlDbType.Bit), new SqlParameter(PARM_INVOICE_BOOK_IS_DELETE,SqlDbType.Bit), new SqlParameter(PARM_INVOICE_BOOK_COMPANY_ID,SqlDbType.VarChar,36), new SqlParameter(PARM_INVOICE_BOOK_TYPE,SqlDbType.Int) }; bookParms[0].Value = tempInvoiceBookEntity.GID; bookParms[1].Value = tempInvoiceBookEntity.Name; bookParms[2].Value = tempInvoiceBookEntity.Description; bookParms[3].Value = tempInvoiceBookEntity.CreateUser; bookParms[4].Value = tempInvoiceBookEntity.InvoiceCode; bookParms[5].Value = tempInvoiceBookEntity.InvoiceNumStart; bookParms[6].Value = tempInvoiceBookEntity.InvoiceNumEnd; bookParms[7].Value = tempInvoiceBookEntity.InvoiceTotal; bookParms[8].Value = tempInvoiceBookEntity.IsLock; bookParms[9].Value = tempInvoiceBookEntity.IsDelete; bookParms[10].Value = tempInvoiceBookEntity.CompanyID; bookParms[11].Value = tempInvoiceBookEntity.Type; //private string SQL_INSERT_INVOICE_BOOK = " INSERT INTO ch_fee_invoicebooks(GID,NAME,DESCRIPTION,CREATEUSER,CREATETIME,INVOICECODE,INVOICENUMSTART,INVOICENUMEND,INVOICETOTAL,ISLOCK,ISDELETE,COMPANYID,TYPE) " //+ " VALUES(@gid,@name,@description,@create_user,GETDATE(),@invoice_code,@invoice_num_start,@invoice_num_end,@invoice_total,@is_lock,@is_delete,@company_id,@type) "; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_INSERT_INVOICE_BOOK, bookParms); SqlParameter[] itemParms = new SqlParameter[] { new SqlParameter(PARM_INVOICE_BOOK_ITEM_GID,SqlDbType.VarChar,36), new SqlParameter(PARM_INVOICE_BOOK_ITEM_BOOK_ID,SqlDbType.VarChar,36), new SqlParameter(PARM_INVOICE_BOOK_ITEM_INVOICE_NUM,SqlDbType.VarChar,200), new SqlParameter(PARM_INVOICE_BOOK_ITEM_CREATE_USER,SqlDbType.VarChar,36), new SqlParameter(PARM_INVOICE_BOOK_ITEM_IS_LOCK,SqlDbType.Bit), new SqlParameter(PARM_INVOICE_BOOK_ITEM_IS_DELETE,SqlDbType.Bit), new SqlParameter(PARM_INVOICE_BOOK_ITEM_IS_MAKE_OUT,SqlDbType.Bit) }; SqlParameter[] sameParms = new SqlParameter[] { new SqlParameter(PARM_INVOICE_BOOK_ITEM_INVOICE_NUM,SqlDbType.VarChar,200) }; foreach (InvoiceBookItemEntity itemEntity in tempInvoiceBookEntity.InvoiceBookItemEntities) { sameParms[0].Value = itemEntity.InvoiceNum; //private string SQL_SELECT_SAME_INVOICE_NUM = " SELECT COUNT(*) FROM ch_fee_invoiceitems WHERE INVOICENUM = @invoice_num AND ISDELETE <> 1 "; int iSameStatus = (int)SqlHelper.ExecuteScalar(sqlTran, CommandType.Text, SQL_SELECT_SAME_INVOICE_NUM, sameParms); if (iSameStatus > 0) { iResult = -4;//已有发票明细,不能重复添加 sqlTran.Rollback(); return iResult; //throw execError; } itemParms[0].Value = itemEntity.GID; itemParms[1].Value = itemEntity.BookID; itemParms[2].Value = itemEntity.InvoiceNum; itemParms[3].Value = itemEntity.CreateUser; itemParms[4].Value = itemEntity.IsLock; itemParms[5].Value = itemEntity.IsDelete; itemParms[6].Value = itemEntity.IsMakeOut; //private string SQL_INSERT_INVOICE_BOOK_ITEM = " INSERT INTO ch_fee_invoiceitems(GID, BOOKID, INVOICENUM, CREATEUSER, CREATETIME, ISLOCK, ISDELETE, ISMAKEOUT) VALUES(@gid,@book_id,@invoice_num,@create_user,GETDATE(),@is_lock,@is_delete,@is_makeout)"; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_INSERT_INVOICE_BOOK_ITEM, itemParms); } //事务提交 sqlTran.Commit(); iResult = 1;//状态为1表示插入成功 } catch (Exception execError) { iResult = -1;//有异常,插入失败 sqlTran.Rollback(); iResult = -2;//插入异常,事务已回滚成功 throw execError; } finally { SqlHelper.CloseConnection(); } } return iResult; } #endregion #region 获取SQL语句查询数据集 /// /// 获取SQL语句查询数据集 /// /// /// public DataSet GetExcuteSql(string strSql) { DataSet tempSet = new DataSet(); tempSet = SqlHelper.ExecuteDataset(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, strSql); return tempSet; } #endregion #region /// /// 验证字段值是否已经存在 /// /// 值1表示已经存在 值为0表示不存在 public int ValidateInvoiceCode(string tempInvoiceCode) { int iResult = 0; using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction)) { SqlParameter[] parms = new SqlParameter[]{ new SqlParameter(PARM_INVOICE_BOOK_INVOICE_CODE,SqlDbType.VarChar,200), }; parms[0].Value = tempInvoiceCode; iResult = (int)SqlHelper.ExecuteScalar(conn, CommandType.Text, SQL_SELECT_INVOICE_BOOK_INVOICE_CODE, parms); } return iResult; } #endregion } }