using System; using System.Collections.Generic; using System.Data; using SuperMap.RealEstate.ServiceModel; using Business = SuperMap.RealEstate.Finance.Storage.Business; using HCC = HZQR.Common.Common; using HZQR.Common; namespace EShang.Common.GeneralMethod { /// /// 票据信息表相关方法 /// 2024/12/12 14:35:15自动生成 /// public class BILLHelper { #region 获取票据信息表列表 /// /// 获取票据信息表列表 /// /// 事务管理器 /// 查询结果总数 /// 查询条件对象 public static List GetBILLList(Transaction transaction, ref int TotalCount, Model.SearchModel searchModel) { List BILLList = new List(); string WhereSQL = "", RowFilterSQL = ""; if (searchModel.SearchParameter != null) { WhereSQL = OperationDataHelper.GetWhereSQL(searchModel.SearchParameter, searchModel.QueryType, "", "SERVERPART_IDS", "SERVERPARTSHOP_IDS", "MERCHANTS_IDS", "BILL_DATE_Start", "BILL_DATE_End", "ACCOUNTED_TYPES", "ACCOUNTED_DATE_Start", "ACCOUNTED_DATE_End"); if (WhereSQL != "") { WhereSQL = " WHERE " + WhereSQL; } //查询服务区内码 if (searchModel.SearchParameter.SERVERPART_IDS.TryParseToString() != "") { WhereSQL += (WhereSQL == "" ? " WHERE " : " AND ") + "SERVERPART_ID IN (" + searchModel.SearchParameter.SERVERPART_IDS + ")"; } //查询门店内码 if (searchModel.SearchParameter.SERVERPARTSHOP_IDS.TryParseToString() != "") { WhereSQL += (WhereSQL == "" ? " WHERE " : " AND ") + "SERVERPARTSHOP_ID IN ('" + searchModel.SearchParameter.SERVERPARTSHOP_IDS.Replace(",", "','") + "')"; } //查询商户内码 if (searchModel.SearchParameter.MERCHANTS_IDS.TryParseToString() != "") { WhereSQL += (WhereSQL == "" ? " WHERE " : " AND ") + "MERCHANTS_ID IN (" + searchModel.SearchParameter.MERCHANTS_IDS + ")"; } //查询开票日期 if (searchModel.SearchParameter.BILL_DATE_Start.TryParseToString() != "") { WhereSQL += (WhereSQL == "" ? " WHERE " : " AND ") + "SUBSTR(BILL_DATE,1,8) >= " + DateTime.Parse(searchModel.SearchParameter.BILL_DATE_Start).ToString("yyyyMMdd"); } if (searchModel.SearchParameter.BILL_DATE_End.TryParseToString() != "") { WhereSQL += (WhereSQL == "" ? " WHERE " : " AND ") + "SUBSTR(BILL_DATE,1,8) <= " + DateTime.Parse(searchModel.SearchParameter.BILL_DATE_End).ToString("yyyyMMdd"); } //查询入账类型(枚举字段:SHOPEXPENSE_TYPE) if (searchModel.SearchParameter.ACCOUNTED_TYPES.TryParseToString() != "") { WhereSQL += (WhereSQL == "" ? " WHERE " : " AND ") + "ACCOUNTED_TYPE IN (" + searchModel.SearchParameter.ACCOUNTED_TYPES + ")"; } //查询入账时间 if (searchModel.SearchParameter.ACCOUNTED_DATE_Start.TryParseToString() != "") { WhereSQL += (WhereSQL == "" ? " WHERE " : " AND ") + "SUBSTR(ACCOUNTED_DATE,1,8) >= " + DateTime.Parse(searchModel.SearchParameter.ACCOUNTED_DATE_Start).ToString("yyyyMMdd"); } if (searchModel.SearchParameter.ACCOUNTED_DATE_End.TryParseToString() != "") { WhereSQL += (WhereSQL == "" ? " WHERE " : " AND ") + "SUBSTR(ACCOUNTED_DATE,1,8) <= " + DateTime.Parse(searchModel.SearchParameter.ACCOUNTED_DATE_End).ToString("yyyyMMdd"); } } DataTable dtBILL = new Business.FINANCEPROINST(transaction).ExecuteDataTable( "SELECT * FROM FINANCE_STORAGE.T_BILL" + WhereSQL); //增加组合查询条件 if (searchModel.keyWord != null && !string.IsNullOrWhiteSpace(searchModel.keyWord.Key)) { foreach (string KeyName in searchModel.keyWord.Key.Split(',')) { RowFilterSQL += (RowFilterSQL == "" ? "" : " or ") + KeyName + " like '%" + searchModel.keyWord.Value + "%'"; } } if (RowFilterSQL != "") { dtBILL.DefaultView.RowFilter = RowFilterSQL; } //排序: dtBILL.DefaultView.Sort = searchModel.SortStr; dtBILL = dtBILL.DefaultView.ToTable(); //获取查询结果总记录条数 TotalCount = dtBILL.Rows.Count; //根据传入的页码和每页显示条数返回结果 dtBILL = CommonHelper.GetDataTableWithPageSize(dtBILL, searchModel.PageSize, searchModel.PageIndex); foreach (DataRow drBILL in dtBILL.Rows) { Model.BILLModel billModel = new Model.BILLModel(); //绑定票据信息表数据对象 BindDataRowToModel(drBILL, billModel); BILLList.Add(billModel); } return BILLList; } #region 绑定model /// /// 绑定model /// /// datarow数据源 /// model对象 public static void BindDataRowToModel(DataRow drBILL, Model.BILLModel billModel) { if (drBILL["BILL_ID"].ToString() != "") { billModel.BILL_ID = drBILL["BILL_ID"].TryParseToInt(); //内码 } if (drBILL["BILL_TYPE"].ToString() != "") { billModel.BILL_TYPE = drBILL["BILL_TYPE"].TryParseToInt(); //票据类型(1000:增值税专用发票;2000:普通发票) } billModel.BILL_NO = drBILL["BILL_NO"].ToString(); //票据编号 billModel.SERIAL_NO = drBILL["SERIAL_NO"].ToString(); //流水号(实际发票号码) if (drBILL["BILL_TAXAMOUNT"].ToString() != "") { billModel.BILL_TAXAMOUNT = drBILL["BILL_TAXAMOUNT"].TryParseToDouble(); //含税开票金额 } if (drBILL["BILL_AMOUNT"].ToString() != "") { billModel.BILL_AMOUNT = drBILL["BILL_AMOUNT"].TryParseToDouble(); //除税开票金额 } if (drBILL["DUTY_PARAGRAPH"].ToString() != "") { billModel.DUTY_PARAGRAPH = drBILL["DUTY_PARAGRAPH"].TryParseToInt(); //开票税率 } if (drBILL["INVOICE_TAXAMOUNT"].ToString() != "") { billModel.INVOICE_TAXAMOUNT = drBILL["INVOICE_TAXAMOUNT"].TryParseToDouble(); //含税费用金额 } if (drBILL["INVOICE_AMOUNT"].ToString() != "") { billModel.INVOICE_AMOUNT = drBILL["INVOICE_AMOUNT"].TryParseToDouble(); //除税费用金额 } if (drBILL["TAXTAIL_DIFFERENCE"].ToString() != "") { billModel.TAXTAIL_DIFFERENCE = drBILL["TAXTAIL_DIFFERENCE"].TryParseToDouble(); //含税尾差 } if (drBILL["TAIL_DIFFERENCE"].ToString() != "") { billModel.TAIL_DIFFERENCE = drBILL["TAIL_DIFFERENCE"].TryParseToDouble(); //除税尾差 } if (drBILL["TAX_PRICE"].ToString() != "") { billModel.TAX_PRICE = drBILL["TAX_PRICE"].TryParseToDouble(); //开票税金 } if (drBILL["SERVERPART_ID"].ToString() != "") { billModel.SERVERPART_ID = drBILL["SERVERPART_ID"].TryParseToInt(); //服务区内码 } billModel.SERVERPART_NAME = drBILL["SERVERPART_NAME"].ToString(); //服务区名称 billModel.SERVERPARTSHOP_ID = drBILL["SERVERPARTSHOP_ID"].ToString(); //门店内码 billModel.SERVERPARTSHOP_NAME = drBILL["SERVERPARTSHOP_NAME"].ToString(); //门店名称 if (drBILL["MERCHANTS_ID"].ToString() != "") { billModel.MERCHANTS_ID = drBILL["MERCHANTS_ID"].TryParseToInt(); //商户内码 } billModel.MERCHANTS_NAME = drBILL["MERCHANTS_NAME"].ToString(); //商户名称 billModel.BILL_PERSON = drBILL["BILL_PERSON"].ToString(); //开票人 if (!string.IsNullOrWhiteSpace(drBILL["BILL_DATE"].ToString())) { //开票日期 billModel.BILL_DATE = HCC.Common.TranslateDateTime(drBILL["BILL_DATE"].ToString()); } billModel.BANK_NAME = drBILL["BANK_NAME"].ToString(); //开户银行 billModel.BANK_ACCOUNT = drBILL["BANK_ACCOUNT"].ToString(); //银行账号 billModel.TAXPAYER_IDENTIFYCODE = drBILL["TAXPAYER_IDENTIFYCODE"].ToString(); //统一信用代码 billModel.INTERBANK_NO = drBILL["INTERBANK_NO"].ToString(); //联行号 if (drBILL["ACCOUNTED_TYPE"].ToString() != "") { billModel.ACCOUNTED_TYPE = drBILL["ACCOUNTED_TYPE"].TryParseToShort(); //入账类型(枚举字段:SHOPEXPENSE_TYPE) } if (!string.IsNullOrWhiteSpace(drBILL["ACCOUNTED_DATE"].ToString())) { //入账时间 billModel.ACCOUNTED_DATE = HCC.Common.TranslateDateTime(drBILL["ACCOUNTED_DATE"].ToString()); } billModel.DOWNLOAD_URL = drBILL["DOWNLOAD_URL"].ToString(); //下载地址 if (drBILL["BILL_STATE"].ToString() != "") { billModel.BILL_STATE = drBILL["BILL_STATE"].TryParseToShort(); //票据状态 } if (drBILL["STAFF_ID"].ToString() != "") { billModel.STAFF_ID = drBILL["STAFF_ID"].TryParseToInt(); //操作员内码 } billModel.STAFF_NAME = drBILL["STAFF_NAME"].ToString(); //操作人员 if (drBILL["OPERATE_DATE"].ToString() != "") { billModel.OPERATE_DATE = drBILL["OPERATE_DATE"].TryParseToDateTime(); //操作时间 } billModel.BILL_DESC = drBILL["BILL_DESC"].ToString(); //备注 } #endregion #endregion #region 获取票据信息表明细 /// /// 获取票据信息表明细 /// /// 事务管理器 /// 票据信息表内码 public static Model.BILLModel GetBILLDetail(Transaction transaction, int BILLId) { Model.BILLModel billModel = new Model.BILLModel(); string WhereSQL = "WHERE BILL_ID = " + BILLId; //查询明细数据 DataTable dtBILL = new Business.FINANCEPROINST(transaction).ExecuteDataTable( "SELECT * FROM FINANCE_STORAGE.T_BILL " + WhereSQL); if (dtBILL.Rows.Count > 0) { //绑定票据信息表数据对象 BindDataRowToModel(dtBILL.Rows[0], billModel); } return billModel; } #endregion #region 同步票据信息表 /// /// 赋值票据信息表数据对象 /// /// 事务管理器 /// 票据信息表数据对象 public static bool SynchroBILL(Transaction transaction, Model.BILLModel billModel) { bool SynchroFlag = true; string SQLString; List excludeField = new List(); Dictionary dateFieldList = new Dictionary(); string tableName = "FINANCE_STORAGE.T_BILL", keyField = "BILL_ID", seqName = "SEQ_BILL"; Business.FINANCEPROINST _FINANCEPROINST = new Business.FINANCEPROINST(transaction); #region 添加SQL语句中需要排除在外的字段 excludeField.Add("SERVERPART_IDS"); excludeField.Add("SERVERPARTSHOP_IDS"); excludeField.Add("MERCHANTS_IDS"); excludeField.Add("BILL_DATE_Start"); excludeField.Add("BILL_DATE_End"); excludeField.Add("ACCOUNTED_TYPES"); excludeField.Add("ACCOUNTED_DATE_Start"); excludeField.Add("ACCOUNTED_DATE_End"); #endregion #region 添加SQL语句中日期相关字段的执行语句 //开票日期 if (!string.IsNullOrWhiteSpace(billModel.BILL_DATE)) { dateFieldList.Add("BILL_DATE", DateTime.Parse( billModel.BILL_DATE).ToString("yyyyMMddHHmmss")); } else { dateFieldList.Add("BILL_DATE", "NULL"); } //入账时间 if (!string.IsNullOrWhiteSpace(billModel.ACCOUNTED_DATE)) { dateFieldList.Add("ACCOUNTED_DATE", DateTime.Parse( billModel.ACCOUNTED_DATE).ToString("yyyyMMddHHmmss")); } else { dateFieldList.Add("ACCOUNTED_DATE", "NULL"); } #endregion if (billModel.BILL_ID != null) { string WhereSQL = " WHERE BILL_ID = " + billModel.BILL_ID; DataTable dtBILL = _FINANCEPROINST.ExecuteDataTable( "SELECT * FROM FINANCE_STORAGE.T_BILL" + WhereSQL); if (dtBILL.Rows.Count > 0) { SQLString = OperationDataHelper.GetTableExcuteSQL( billModel, 1, tableName, keyField, seqName, dateFieldList, excludeField, WhereSQL); } else { return false; } } else { DataTable dtBILL = _FINANCEPROINST.ExecuteDataTable( "SELECT " + seqName + ".NEXTVAL FROM DUAL"); billModel.BILL_ID = dtBILL.Rows[0][0].TryParseToInt(); SQLString = OperationDataHelper.GetTableExcuteSQL( billModel, 0, tableName, keyField, seqName, dateFieldList, excludeField); } _FINANCEPROINST.ExecuteNonQuery(SQLString, null); return SynchroFlag; } #endregion #region 删除票据信息表 /// /// 删除票据信息表 /// /// 事务管理器 /// 票据信息表内码 public static bool DeleteBILL(Transaction transaction, int? BILLId) { bool DeleteFlag = false; if (BILLId != null) { string SQLString = "UPDATE FINANCE_STORAGE.T_BILL SET BILL_STATE = 0 WHERE BILL_ID = " + BILLId; int ExcuteCount = new Business.FINANCEPROINST(transaction).ExecuteNonQuery(SQLString, null); if (ExcuteCount > 0) { DeleteFlag = true; } } return DeleteFlag; } #endregion } }