using System; using System.Data; using System.Data.SqlClient; using DSWeb.Models; using WebSqlHelper; namespace DSWeb.EntityDA { public class FeeSettlementDA { private string PARM_FEE_SETTLEMENT_GID = "@gid"; private string PARM_FEE_SETTLEMENT_BILL_NO = "@bill_no"; //private string PARM_FEE_SETTLEMENT_SETTLE_MODE = "@settle_mode"; //private string PARM_FEE_SETTLEMENT_CUSTOMER_NAME = "@customer_name"; //private string PARM_FEE_SETTLEMENT_SETTLE_TYPE = "@settle_type"; //private string PARM_FEE_SETTLEMENT_AMOUNT_RMB = "@amount_rmb"; //private string PARM_FEE_SETTLEMENT_ACCOUNT_RMB = "@account_rmb"; //private string PARM_FEE_SETTLEMENT_RATE = "@rate"; //private string PARM_FEE_SETTLEMENT_AMOUNT_USD = "@amount_usd"; //private string PARM_FEE_SETTLEMENT_ACCOUNT_USD = "@account_usd"; //private string PARM_FEE_SETTLEMENT_BILL_TYPE = "@bill_type"; //private string PARM_FEE_SETTLEMENT_VOUCHER_NO = "@voucher_no"; //private string PARM_FEE_SETTLEMENT_SETTLE_USER = "@settle_user"; //private string PARM_FEE_SETTLEMENT_SETTLE_TIME = "@settle_time"; //private string PARM_FEE_SETTLEMENT_AUDIT_USER = "@audit_user"; //private string PARM_FEE_SETTLEMENT_AUDIT_TIME = "@audit_time"; //private string PARM_FEE_SETTLEMENT_IS_EXPORT = "@is_export"; //private string PARM_FEE_SETTLEMENT_FINANCIAL_VOUCHER = "@financial_voucher"; //private string PARM_FEE_SETTLEMENT_BILL_STATUS = "@bill_status"; //private string PARM_FEE_SETTLEMENT_REMARK = "@remark"; //private string PARM_FEE_SETTLEMENT_IS_DELETE = "@is_delete"; private string PARM_FEE_SETTLEMENT_DELETE_USER = "@delete_user"; //private string PARM_FEE_SETTLEMENT_DELETE_TIME = "@delete_time"; //ch_fee_do //private string PARM_FEE_DO_GID = "@gid"; private string PARM_FEE_DO_BILL_NO = "@bill_no"; //private string PARM_FEE_DO_IS_DELETE = "@is_delete"; private string PARM_FEE_DO_DELETE_USER = "@delete_user"; //private string PARM_FEE_DO_DELETE_TIME = "@delete_time"; private string SQL_SELECT_FEE_SETTLEMENT_BY_GID = " SELECT GID, BILLNO, BILLDATE, SETTLEMODE, CUSTOMERNAME, SETTLETYPE, AMOUNTRMB, ACCOUNTRMB, RATE, AMOUNTUSD, ACCOUNTUSD, BILLTYPE, VOUCHERNO, SETTLEUSER, SETTLETIME, AUDITUSER, AUDITTIME, ISEXPORT, FINANCIALVOUCHER, BILLSTATUS, REMARK, ISDELETE,DELETEUSER,DELETETIME,COMPANYID, ACCOUNTS_CURRENCY, ACCOUNTS_RATE, ACCOUNTS_MONEY, PREPAY_CURRENCY, PREPAY_RATE, PREPAY_MONEY, AHSR_CURRENCY, AHSR_RATE, AHSR_MONEY, FINANCIAL_CURRENCY, FINANCIAL_RATE, FINANCIAL_MONEY, ADVANCE_CURRENCY, ADVANCE_RATE, ADVANCE_MONEY FROM ch_fee_settlement WHERE GID = @gid"; private string SQL_SELECT_FEE_SETTLEMENT_BY_BILLNO = " SELECT GID, BILLNO, BILLDATE, SETTLEMODE, CUSTOMERNAME, SETTLETYPE, AMOUNTRMB, ACCOUNTRMB, RATE, AMOUNTUSD, ACCOUNTUSD, BILLTYPE, VOUCHERNO, SETTLEUSER, SETTLETIME, AUDITUSER, AUDITTIME, ISEXPORT, FINANCIALVOUCHER, BILLSTATUS, REMARK,ISDELETE,DELETEUSER,DELETETIME " + " FROM ch_fee_settlement WHERE BILLNO = @bill_no"; private string SQL_SELECT_FEE_SETTLEMENT_ALL = " SELECT GID, BILLNO, BILLDATE, SETTLEMODE, CUSTOMERNAME, SETTLETYPE, AMOUNTRMB, ACCOUNTRMB, RATE, AMOUNTUSD, ACCOUNTUSD, BILLTYPE, VOUCHERNO, SETTLEUSER, SETTLETIME, AUDITUSER, AUDITTIME, ISEXPORT, FINANCIALVOUCHER, BILLSTATUS, REMARK FROM ch_fee_settlement"; private string SQL_UPDATE_FEE_SETTLEMENT_BY_BILL_NO = " UPDATE ch_fee_settlement SET ISDELETE = 1,DELETEUSER = @delete_user,DELETETIME = GETDATE() WHERE BILLNO = @bill_no "; private string SQL_UPDATE_FEE_DO_BY_BILL_NO = " UPDATE ch_fee_do SET ISDELETED = 1,DELETEUSER = @delete_user,DELETETIME = GETDATE() WHERE BILLNO = @bill_no "; private string SQL_UPDATE_CH_FEE = " UPDATE ch_fee SET SETTLEMENT = isnull((SETTLEMENT - A.AMOUNT),0),FEESTATUS = A.FEESTATUS " + " FROM (SELECT CASE WHEN B.AMOUNT = C.SETTLEMENT THEN 0 ELSE 8 END as FEESTATUS,B.FEEID,B.AMOUNT FROM ch_fee_do as B INNER JOIN ch_fee as C ON " + " B.FEEID = C.GID WHERE B.BILLNO = @bill_no) as A WHERE A.FEEID = ch_fee.GID "; #region 通过惟一主键获取费用结算信息 /// /// 通过惟一主键获取费用结算信息 /// /// 费用结算GID /// 返回实体类FeeSettlementEntity public FeeSettlementEntity GetFeeSettlementByGID(string tempFeeSettlementID) { SqlParameter parm = new SqlParameter(PARM_FEE_SETTLEMENT_GID, SqlDbType.VarChar, 36); parm.Value = tempFeeSettlementID; FeeSettlementEntity feeSettlementEntity = null; using (SqlDataReader sqlRead = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_FEE_SETTLEMENT_BY_GID, parm)) { try { while (sqlRead.Read()) { feeSettlementEntity = new FeeSettlementEntity(); if (!sqlRead.IsDBNull(0)) { feeSettlementEntity.GID = sqlRead.GetString(0); } if (!sqlRead.IsDBNull(1)) { feeSettlementEntity.BillNO = sqlRead.GetString(1); } if (!sqlRead.IsDBNull(2)) { feeSettlementEntity.BillDate = sqlRead.GetDateTime(2); } if (!sqlRead.IsDBNull(3)) { feeSettlementEntity.SettleMode = sqlRead.GetInt32(3); } if (!sqlRead.IsDBNull(4)) { feeSettlementEntity.CustomerName = sqlRead.GetString(4); } if (!sqlRead.IsDBNull(5)) { feeSettlementEntity.SettleType = sqlRead.GetInt32(5); } if (!sqlRead.IsDBNull(6)) { feeSettlementEntity.AmountRMB = sqlRead.GetDecimal(6); } if (!sqlRead.IsDBNull(7)) { feeSettlementEntity.AccountRMB = sqlRead.GetString(7); } if (!sqlRead.IsDBNull(8)) { feeSettlementEntity.Rate = sqlRead.GetDecimal(8); } if (!sqlRead.IsDBNull(9)) { feeSettlementEntity.AmountUSD = sqlRead.GetDecimal(9); } if (!sqlRead.IsDBNull(10)) { feeSettlementEntity.AccountUSD = sqlRead.GetString(10); } if (!sqlRead.IsDBNull(11)) { feeSettlementEntity.BillType = sqlRead.GetInt32(11); } if (!sqlRead.IsDBNull(12)) { feeSettlementEntity.VoucherNO = sqlRead.GetString(12); } if (!sqlRead.IsDBNull(13)) { feeSettlementEntity.SettleUser = sqlRead.GetString(13); } if (!sqlRead.IsDBNull(14)) { feeSettlementEntity.SettleTime = sqlRead.GetDateTime(14); } if (!sqlRead.IsDBNull(15)) { feeSettlementEntity.AuditUser = sqlRead.GetString(15); } if (!sqlRead.IsDBNull(16)) { feeSettlementEntity.AuditTime = sqlRead.GetDateTime(16); } if (!sqlRead.IsDBNull(17)) { feeSettlementEntity.IsExport = sqlRead.GetBoolean(17); } if (!sqlRead.IsDBNull(18)) { feeSettlementEntity.FinancialVoucher = sqlRead.GetString(18); } if (!sqlRead.IsDBNull(19)) { feeSettlementEntity.BillStatus = sqlRead.GetInt32(19); } if (!sqlRead.IsDBNull(20)) { feeSettlementEntity.Remark = sqlRead.GetString(20); } if (!sqlRead.IsDBNull(21)) { feeSettlementEntity.IsDelete = sqlRead.GetBoolean(21); } if (!sqlRead.IsDBNull(22)) { feeSettlementEntity.DeleteUser = sqlRead.GetString(22); } if (!sqlRead.IsDBNull(23)) { feeSettlementEntity.DeleteTime = sqlRead.GetDateTime(23); } if (!sqlRead.IsDBNull(24)) { feeSettlementEntity.CompanyID = sqlRead.GetString(24); } if (!sqlRead.IsDBNull(25)) { feeSettlementEntity.ACCOUNTS_CURRENCY = sqlRead.GetString(25); } if (!sqlRead.IsDBNull(26)) { feeSettlementEntity.ACCOUNTS_RATE = sqlRead.GetDecimal(26); } if (!sqlRead.IsDBNull(27)) { feeSettlementEntity.ACCOUNTS_MONEY = sqlRead.GetDecimal(27); } if (!sqlRead.IsDBNull(28)) { feeSettlementEntity.PREPAY_CURRENCY = sqlRead.GetString(28); } if (!sqlRead.IsDBNull(29)) { feeSettlementEntity.PREPAY_RATE = sqlRead.GetDecimal(29); } if (!sqlRead.IsDBNull(30)) { feeSettlementEntity.PREPAY_MONEY = sqlRead.GetDecimal(30); } if (!sqlRead.IsDBNull(31)) { feeSettlementEntity.AHSR_CURRENCY = sqlRead.GetString(31); } if (!sqlRead.IsDBNull(32)) { feeSettlementEntity.AHSR_RATE = sqlRead.GetDecimal(32); } if (!sqlRead.IsDBNull(33)) { feeSettlementEntity.AHSR_MONEY = sqlRead.GetDecimal(33); } if (!sqlRead.IsDBNull(34)) { feeSettlementEntity.FINANCIAL_CURRENCY = sqlRead.GetString(34); } if (!sqlRead.IsDBNull(35)) { feeSettlementEntity.FINANCIAL_RATE = sqlRead.GetDecimal(35); } if (!sqlRead.IsDBNull(36)) { feeSettlementEntity.FINANCIAL_MONEY = sqlRead.GetDecimal(36); } if (!sqlRead.IsDBNull(37)) { feeSettlementEntity.ADVANCE_CURRENCY = sqlRead.GetString(37); } if (!sqlRead.IsDBNull(38)) { feeSettlementEntity.ADVANCE_RATE = sqlRead.GetDecimal(38); } if (!sqlRead.IsDBNull(39)) { feeSettlementEntity.ADVANCE_MONEY = sqlRead.GetDecimal(39); } } } catch (Exception execError) { throw execError; } } return feeSettlementEntity; } #endregion #region 通过业务编号获取费用结算信息 /// /// 通过业务编号获取费用结算信息 /// /// 费用结算业务编号 /// 返回实体类FeeSettlementEntity public FeeSettlementEntity GetFeeSettlementByBillNO(string tempBillNO) { SqlParameter parm = new SqlParameter(PARM_FEE_SETTLEMENT_BILL_NO, SqlDbType.VarChar, 20); parm.Value = tempBillNO; FeeSettlementEntity feeSettlementEntity = null; using (SqlDataReader sqlRead = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_FEE_SETTLEMENT_BY_BILLNO, parm)) { try { while (sqlRead.Read()) { feeSettlementEntity = new FeeSettlementEntity(); if (!sqlRead.IsDBNull(0)) { feeSettlementEntity.GID = sqlRead.GetString(0); } if (!sqlRead.IsDBNull(1)) { feeSettlementEntity.BillNO = sqlRead.GetString(1); } if (!sqlRead.IsDBNull(2)) { feeSettlementEntity.BillDate = sqlRead.GetDateTime(2); } if (!sqlRead.IsDBNull(3)) { feeSettlementEntity.SettleMode = sqlRead.GetInt32(3); } if (!sqlRead.IsDBNull(4)) { feeSettlementEntity.CustomerName = sqlRead.GetString(4); } if (!sqlRead.IsDBNull(5)) { feeSettlementEntity.SettleType = sqlRead.GetInt32(5); } if (!sqlRead.IsDBNull(6)) { feeSettlementEntity.AmountRMB = sqlRead.GetDecimal(6); } if (!sqlRead.IsDBNull(7)) { feeSettlementEntity.AccountRMB = sqlRead.GetString(7); } if (!sqlRead.IsDBNull(8)) { feeSettlementEntity.Rate = sqlRead.GetDecimal(8); } if (!sqlRead.IsDBNull(9)) { feeSettlementEntity.AmountUSD = sqlRead.GetDecimal(9); } if (!sqlRead.IsDBNull(10)) { feeSettlementEntity.AccountUSD = sqlRead.GetString(10); } if (!sqlRead.IsDBNull(11)) { feeSettlementEntity.BillType = sqlRead.GetInt32(11); } if (!sqlRead.IsDBNull(12)) { feeSettlementEntity.VoucherNO = sqlRead.GetString(12); } if (!sqlRead.IsDBNull(13)) { feeSettlementEntity.SettleUser = sqlRead.GetString(13); } if (!sqlRead.IsDBNull(14)) { feeSettlementEntity.SettleTime = sqlRead.GetDateTime(14); } if (!sqlRead.IsDBNull(15)) { feeSettlementEntity.AuditUser = sqlRead.GetString(15); } if (!sqlRead.IsDBNull(16)) { feeSettlementEntity.AuditTime = sqlRead.GetDateTime(16); } if (!sqlRead.IsDBNull(17)) { feeSettlementEntity.IsExport = sqlRead.GetBoolean(17); } if (!sqlRead.IsDBNull(18)) { feeSettlementEntity.FinancialVoucher = sqlRead.GetString(18); } if (!sqlRead.IsDBNull(19)) { feeSettlementEntity.BillStatus = sqlRead.GetInt32(19); } if (!sqlRead.IsDBNull(20)) { feeSettlementEntity.Remark = sqlRead.GetString(20); } if (!sqlRead.IsDBNull(21)) { feeSettlementEntity.IsDelete = sqlRead.GetBoolean(21); } if (!sqlRead.IsDBNull(22)) { feeSettlementEntity.DeleteUser = sqlRead.GetString(22); } if (!sqlRead.IsDBNull(23)) { feeSettlementEntity.DeleteTime = sqlRead.GetDateTime(23); } } } catch (Exception execError) { throw execError; } } return feeSettlementEntity; } #endregion #region 获取所有费用结算信息(DataSet) /// /// 获取所有费用结算信息(DataSet) /// /// 返回DataSet数据 public DataSet GetAllFeeSettlement() { return GetExcuteSql(SQL_SELECT_FEE_SETTLEMENT_ALL); } #endregion #region 通过SQL语句获取数据 /// /// 通过SQL语句获取数据 /// /// 要执行查询的SQL语句 /// 返回DataSet数据 public DataSet GetExcuteSql(string strSql) { DataSet dataSet = new DataSet(); dataSet = SqlHelper.ExecuteDataset(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, strSql); return dataSet; } #endregion #region 撤销收费结算(不包含收费申请结算) /// /// 撤销收费结算(不包含收费申请结算) /// /// 用户GID /// 收费结算业务编号 /// 值1表示撤销成功 值不等于1表示撤销失败 public int RevocateSettlement(string tempUserID,string tempBillNO) { int iResult = 0; using (SqlTransaction sqlTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { try { //撤销收费结算 //1-删除结算表ch_fee_settlement记录 SqlParameter[] updateSettleParms = new SqlParameter[] { new SqlParameter(PARM_FEE_SETTLEMENT_DELETE_USER,SqlDbType.VarChar,36), new SqlParameter(PARM_FEE_SETTLEMENT_BILL_NO,SqlDbType.VarChar,20) }; updateSettleParms[0].Value = tempUserID; updateSettleParms[1].Value = tempBillNO; //string SQL_UPDATE_FEE_SETTLEMENT_BY_BILL_NO = " UPDATE ch_fee_settlement SET ISDELETE = 1,DELETEUSER = @delete_user,DELETETIME = GETDATE() WHERE BILLNO = @bill_no "; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_UPDATE_FEE_SETTLEMENT_BY_BILL_NO, updateSettleParms); //2-删除ch_fee_do表 SqlParameter[] updateFeeDoParms = new SqlParameter[] { new SqlParameter(PARM_FEE_DO_DELETE_USER,SqlDbType.VarChar,36), new SqlParameter(PARM_FEE_DO_BILL_NO,SqlDbType.VarChar,20) }; updateFeeDoParms[0].Value = tempUserID; updateFeeDoParms[1].Value = tempBillNO; //string SQL_UPDATE_FEE_DO_BY_BILL_NO = " UPDATE ch_fee_do SET ISDELETED = 1,DELETEUSER = @delete_user,DELETETIME = GETDATE() WHERE BILLNO = @bill_no "; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_UPDATE_FEE_DO_BY_BILL_NO, updateFeeDoParms); //3-还原费用表SETTLEMENT字段值 SqlParameter[] updateFeeParms = new SqlParameter[] { new SqlParameter(PARM_FEE_DO_BILL_NO,SqlDbType.VarChar,20) }; updateFeeParms[0].Value = tempBillNO; //string SQL_UPDATE_CH_FEE = " UPDATE ch_fee SET SETTLEMENT = SETTLEMENT - A.AMOUNT,FEESTATUS = A.FEESTATUS " //+ " FROM (SELECT CASE WHEN B.AMOUNT = C.SETTLEMENT THEN 0 ELSE 8 END as FEESTATUS,B.FEEID,B.AMOUNT FROM ch_fee_do as B INNER JOIN ch_fee as C ON B.FEEID = C.GID WHERE B.BILLNO = @bill_no) as A WHERE A.FEEID = ch_fee.GID "; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_UPDATE_CH_FEE, updateFeeParms); //事务提交 sqlTran.Commit(); iResult = 1;//状态为1表示插入成功 } catch (Exception execError) { iResult = -1;//有异常,插入失败 sqlTran.Rollback(); iResult = -2;//插入异常,事务已回滚成功 throw execError; } finally { SqlHelper.CloseConnection(); } } return iResult; } #endregion #region 撤销收费结算(包含收费申请结算) /// /// 撤销收费结算(包含收费申请结算) /// /// 收费结算GID /// 收费结算单号 /// 操作人GID /// 分公司GID /// 值1表示撤销结算成功 值不等于1表示撤销结算失败 public int CacelRecvSettle(string tempPaySettleID, string tempBillNO, string tempOperator, string tempCompanyID) { int iResult = 0; using (SqlTransaction sqlTran = SqlHelper.BeginTransaction(SqlHelper.ConnectionStringLocalTransaction)) { try { int iSourceState = 0; string sSourceState2 = ""; if (tempCompanyID == null) { tempCompanyID = ""; } else { tempCompanyID = tempCompanyID.ToString().Trim() == "" ? "" : " AND COMPANYID = '" + tempCompanyID + "'"; } //获取收费结算来源//再判断当前结算信息是否来自收费申请 string SQL_VALID_PAY_SETTLE_SOURCE = " SELECT COUNT(*) FROM ch_fee_settle_link WHERE SETTLEID = '" + tempPaySettleID + "'"; iSourceState = (int)SqlHelper.ExecuteScalar(sqlTran, CommandType.Text, SQL_VALID_PAY_SETTLE_SOURCE, null); //iSourceState为0表示收费结算是直接结算 iSourceState大于0表示收费结算是通过收费申请结算 if (iSourceState > 0) { string sSQL = "SELECT COUNT(*) FROM ch_fee_settle_link WHERE RELATIONSUBID=(select top 1 RELATIONSUBID from ch_fee_settle_link where SETTLEID = '" + tempPaySettleID + "')"; iSourceState = (int)SqlHelper.ExecuteScalar(sqlTran, CommandType.Text, sSQL, null); // string sCURRENCY = "RMB"; sSQL = "SELECT (case when isnull(AMOUNTRMB,0)<>0 then 'RMB' else (case when isnull(AMOUNTUSD,0)<>0 then 'USD' else 'RMB' end) end) as CURRENCY from ch_fee_RecvApplication where GID=(select top 1 RELATIONSUBID from ch_fee_settle_link where SETTLEID = '" + tempPaySettleID + "') and (ISDELETE is null or ISDELETE=0) "; object statusObj = SqlHelper.ExecuteScalar(sqlTran, CommandType.Text, sSQL, null); if (statusObj != null) { sCURRENCY = statusObj.ToString().Trim(); } // if (sCURRENCY == "RMB") { sSQL = "SELECT (case when isnull(AMOUNTRMB,0)=(case when isnull((select sum(DOAMOUNT) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and CURRENCY='RMB' and feename<>'汇率损益' and (ISDELETED is null or ISDELETED=0)),0)=0 then isnull((select CAST(sum(DOAMOUNT*EXCHANGERATE) as decimal(20,2)) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and CURRENCY='USD' and feename<>'汇率损益' and (ISDELETED is null or ISDELETED=0)),0) else isnull((select sum(DOAMOUNT) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and CURRENCY='RMB' and feename<>'汇率损益' and (ISDELETED is null or ISDELETED=0)),0) end) then '全部结算' else '部分结算' end) as zt from ch_fee_RecvApplication where GID=(select top 1 RELATIONSUBID from ch_fee_settle_link where SETTLEID = '" + tempPaySettleID + "') and (ISDELETE is null or ISDELETE=0) "; statusObj = SqlHelper.ExecuteScalar(sqlTran, CommandType.Text, sSQL, null); if (statusObj == null) { sSourceState2 = "全部结算"; } else { sSourceState2 = statusObj.ToString().Trim(); } } else { sSQL = "SELECT (case when isnull(AMOUNTUSD,0)=(case when isnull((select CAST(sum(DOAMOUNT*EXCHANGERATE) as decimal(20,2)) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and CURRENCY='RMB' and feename<>'汇率损益' and (ISDELETED is null or ISDELETED=0)),0)=0 then isnull((select sum(DOAMOUNT) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and CURRENCY='USD' and feename<>'汇率损益' and (ISDELETED is null or ISDELETED=0)),0) else isnull((select CAST(sum(DOAMOUNT*EXCHANGERATE) as decimal(20,2)) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and CURRENCY='RMB' and feename<>'汇率损益' and (ISDELETED is null or ISDELETED=0)),0) end) then '全部结算' else '部分结算' end) as zt from ch_fee_RecvApplication where GID=(select top 1 RELATIONSUBID from ch_fee_settle_link where SETTLEID = '" + tempPaySettleID + "') and (ISDELETE is null or ISDELETE=0) "; statusObj = SqlHelper.ExecuteScalar(sqlTran, CommandType.Text, sSQL, null); if (statusObj == null) { sSourceState2 = "全部结算"; } else { sSourceState2 = statusObj.ToString().Trim(); } } //说明是部分结算 if (iSourceState > 0 && sSourceState2 == "部分结算") { //更新ch_fee_RecvApplication的部分结算金额(撤销结算) if (sCURRENCY == "RMB") { sSQL = " UPDATE ch_fee_RecvApplication SET " + " SETTLERMB=isnull((SETTLERMB-(case when isnull((select sum(DOAMOUNT) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and CURRENCY='RMB' and feename<>'汇率损益' and (ISDELETED is null or ISDELETED=0)),0)<>0 then isnull((select sum(DOAMOUNT) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and CURRENCY='RMB' and feename<>'汇率损益' and (ISDELETED is null or ISDELETED=0)),0) else (case when isnull((select CAST(sum(DOAMOUNT*EXCHANGERATE) as decimal(20, 2)) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and CURRENCY='USD' and feename<>'汇率损益' and (ISDELETED is null or ISDELETED=0)),0)<>0 then isnull((select CAST(sum(DOAMOUNT*EXCHANGERATE) as decimal(20, 2)) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and CURRENCY='USD' and feename<>'汇率损益' and (ISDELETED is null or ISDELETED=0)),0) else SETTLERMB end) end)),0) " + " FROM ch_fee_settle_link WHERE ch_fee_settle_link.RELATIONSUBID = ch_fee_RecvApplication.GID AND SETTLEID = '" + tempPaySettleID + "' and (ch_fee_RecvApplication.ISDELETE is null or ch_fee_RecvApplication.ISDELETE=0) "; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, sSQL, null); } else { sSQL = " UPDATE ch_fee_RecvApplication SET " + " SETTLEUSD=isnull((SETTLEUSD-(case when isnull((select CAST(sum(DOAMOUNT*EXCHANGERATE) as decimal(20, 2)) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and CURRENCY='RMB' and feename<>'汇率损益' and (ISDELETED is null or ISDELETED=0)),0)<>0 then isnull((select CAST(sum(DOAMOUNT*EXCHANGERATE) as decimal(20, 2)) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and CURRENCY='RMB' and feename<>'汇率损益' and (ISDELETED is null or ISDELETED=0)),0) else (case when isnull((select sum(DOAMOUNT) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and CURRENCY='USD' and feename<>'汇率损益' and (ISDELETED is null or ISDELETED=0)),0)<>0 then isnull((select sum(DOAMOUNT) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and CURRENCY='USD' and feename<>'汇率损益' and (ISDELETED is null or ISDELETED=0)),0) else SETTLEUSD end) end)),0) " + " FROM ch_fee_settle_link WHERE ch_fee_settle_link.RELATIONSUBID = ch_fee_RecvApplication.GID AND SETTLEID = '" + tempPaySettleID + "' and (ch_fee_RecvApplication.ISDELETE is null or ch_fee_RecvApplication.ISDELETE=0) "; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, sSQL, null); } //更新收费申请状态从已经结算更新为已审核(撤销结算) string SQL_UPDATE_CH_FEE_PAY_APP_FOR_CANCEL = " UPDATE ch_fee_recvapplication SET " + "BILLSTATUS=(case when isnull(AMOUNTRMB,0)<>0 then (case when isnull(AMOUNTRMB,0)=isnull(SETTLERMB,0) then 4 else (case when isnull(SETTLERMB,0)=0 then 0 else 5 end) end) else (case when isnull(AMOUNTUSD,0)<>0 then (case when isnull(AMOUNTUSD,0)=isnull(SETTLEUSD,0) then 4 else (case when isnull(SETTLEUSD,0)=0 then 0 else 5 end) end)else 0 end) end)" + " from ch_fee_recvapplication where GID=(select top 1 RELATIONSUBID from ch_fee_settle_link where SETTLEID = '" + tempPaySettleID + "') and (ISDELETE is null or ISDELETE=0) "; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_UPDATE_CH_FEE_PAY_APP_FOR_CANCEL, null); //更新ch_fee_do的结算金额-部分结算金额(撤销结算) sSQL = " update ch_fee_do set " + " DOAMOUNT=(case when DOAMOUNT-(select DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and feeid=D.feeid and (ISDELETED is null or ISDELETED=0))>0 then DOAMOUNT-(select DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and feeid=D.feeid and (ISDELETED is null or ISDELETED=0)) else isnull(AMOUNT,0) end) " + " from ch_fee_do as D where D.billno=(select top 1 billno from ch_fee_recvapplication where GID=(select top 1 RELATIONSUBID from ch_fee_settle_link where SETTLEID = '" + tempPaySettleID + "') and (ISDELETE is null or ISDELETE=0)) and (D.ISDELETED is null or D.ISDELETED=0)"; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, sSQL, null); //更新ch_fee的结算金额-部分结算金额(撤销结算) sSQL = " update ch_fee set " + " SETTLEMENT=isnull((SETTLEMENT-(select (case when AMOUNT-DOAMOUNT=0 then AMOUNT else DOAMOUNT end) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and feeid=D.GID and (ISDELETED is null or ISDELETED=0))),0) " + ",FEESTATUS=(case when SETTLEMENT-(select (case when AMOUNT-DOAMOUNT=0 then AMOUNT else DOAMOUNT end) as DOAMOUNT from ch_fee_do where billno = '" + tempBillNO + "' and feeid=D.GID and (ISDELETED is null or ISDELETED=0))=0 then 0 else 8 end) " + "from ch_fee as D where D.GID in (select feeid from ch_fee_do where billno = '" + tempBillNO + "' and (ISDELETED is null or ISDELETED=0))"; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, sSQL, null); //更新收费申请相关的费用状态为激活状态(撤销结算)//更新收费申请费用明细状态未结算 string SQL_UPDATE_CH_FEE_DO_APP_FOR_CANCEL = " UPDATE ch_fee_do SET ISDELETED = 0 FROM ch_fee_recvapplication WHERE ch_fee_recvapplication.BILLNO = ch_fee_do.BILLNO AND ch_fee_recvapplication.COMPANYID = ch_fee_do.COMPANYID AND ch_fee_recvapplication.GID = '" + tempPaySettleID + "' "; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_UPDATE_CH_FEE_DO_APP_FOR_CANCEL, null); } else { //更新收费申请状态从已经结算更新为已审核(撤销结算) string SQL_UPDATE_CH_FEE_PAY_APP_FOR_CANCEL = " UPDATE ch_fee_recvapplication SET BILLSTATUS=0,SETTLERMB=0,SETTLEUSD=0 FROM ch_fee_settle_link WHERE ch_fee_settle_link.RELATIONSUBID = ch_fee_recvapplication.GID AND SETTLEID = '" + tempPaySettleID + "' and (ch_fee_recvapplication.ISDELETE is null or ch_fee_recvapplication.ISDELETE=0) "; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_UPDATE_CH_FEE_PAY_APP_FOR_CANCEL, null); //更新ch_fee_do的结算金额-部分结算金额(撤销结算) sSQL = " update ch_fee_do set " + " DOAMOUNT=AMOUNT " + "from ch_fee_do as D where D.billno=(select top 1 billno from ch_fee_recvapplication where (ISDELETE is null or ISDELETE=0) and GID=(select top 1 RELATIONSUBID from ch_fee_settle_link where SETTLEID = '" + tempPaySettleID + "')) and (D.ISDELETED is null or D.ISDELETED=0)"; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, sSQL, null); //更新收费申请相关的费用状态为激活状态(撤销结算),更新收费申请费用明细状态未结算 string SQL_UPDATE_CH_FEE_DO_APP_FOR_CANCEL = " UPDATE ch_fee_do SET ISDELETED = 0 FROM ch_fee_recvapplication WHERE ch_fee_recvapplication.BILLNO = ch_fee_do.BILLNO AND ch_fee_recvapplication.COMPANYID = ch_fee_do.COMPANYID AND ch_fee_recvapplication.GID = '" + tempPaySettleID + "' "; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_UPDATE_CH_FEE_DO_APP_FOR_CANCEL, null); //还原已经进行收费结算的费用(撤销收费结算),先将费用表的结算信息更新到结算前状态 string SQL_UPDATE_CH_FEE_FOR_CANCELPAYSETTLE = " UPDATE ch_fee SET ch_fee.FEESTATUS = (CASE WHEN ch_fee_do.ORIGAMOUNT = ch_fee.SETTLEMENT THEN 0 ELSE 8 END), " + " ch_fee.SETTLEMENT = isnull((ISNULL(ch_fee.SETTLEMENT,0) - ch_fee_do.ORIGAMOUNT),0) " + " FROM ch_fee_do WHERE ch_fee.GID = ch_fee_do.FEEID AND ch_fee_do.BILLNO = '" + tempBillNO + "'" + tempCompanyID; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_UPDATE_CH_FEE_FOR_CANCELPAYSETTLE, null); } //更新ch_fee的结算金额-部分结算金额(撤销结算) sSQL = " delete from ch_fee where GID in (select feeid from ch_fee_do where billno = '" + tempBillNO + "' and (ISDELETED is null or ISDELETED=0)) and feename='汇率损益'"; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, sSQL, null); } else { //还原已经进行收费结算的费用(撤销收费结算),先将费用表的结算信息更新到结算前状态 string SQL_UPDATE_CH_FEE_FOR_CANCELPAYSETTLE = " UPDATE ch_fee SET ch_fee.FEESTATUS = (CASE WHEN ch_fee_do.ORIGAMOUNT = ch_fee.SETTLEMENT THEN 0 ELSE 8 END), " + " ch_fee.SETTLEMENT = isnull((ISNULL(ch_fee.SETTLEMENT,0) - ch_fee_do.ORIGAMOUNT),0) " + " FROM ch_fee_do WHERE ch_fee.GID = ch_fee_do.FEEID AND ch_fee_do.BILLNO = '" + tempBillNO + "'" + tempCompanyID; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_UPDATE_CH_FEE_FOR_CANCELPAYSETTLE, null); } //删除收费结算费用明细表(撤销收费结算)//删除FeeDo记录 string SQL_DELETE_CH_FEE_DO = " UPDATE ch_fee_do SET ISDELETED = 1,DELETEUSER = '" + tempOperator + "',DELETETIME = GETDATE() WHERE BILLNO = '" + tempBillNO + "' " + tempCompanyID; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_DELETE_CH_FEE_DO, null); //更新主表,更新要删除的预收预收明细表中的预收支取用资料 string ssql = "update [ch_fee_advance_payment] set DOAMOUNT=isnull((DOAMOUNT-(select sum(DOAMOUNT) from ch_fee_advance_payment_detail where SETTLEBILLNO='" + tempBillNO + "' and LINKGID=ch_fee_advance_payment.GID and (ISDELETE=0 or ISDELETE is null))),0),ISFINISH=0 where GID in (select LINKGID from ch_fee_advance_payment_detail where SETTLEBILLNO='" + tempBillNO + "' and (ISDELETE=0 or ISDELETE is null))"; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, ssql, null); //删除预收预收明细表中的预收支取用资料 ssql = "delete from ch_fee_advance_payment_detail where SETTLEBILLNO='" + tempBillNO + "'"; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, ssql, null); //删除预收预收主表中的预收支资料 ssql = "delete from ch_fee_advance_payment where BILLNO='" + tempBillNO + "'"; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, ssql, null); //删除收费结算表(撤销收费结算)//删除FeeSettlement记录 string SQL_DELETE_CH_FEE_SETTLEMENT = " UPDATE ch_fee_settlement SET ISDELETE = 1,DELETEUSER = '" + tempOperator + "',DELETETIME = GETDATE() WHERE BILLNO = '" + tempBillNO + "' " + tempCompanyID; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_DELETE_CH_FEE_SETTLEMENT, null); //删除合并结算关联信息表记录 string SQL_DELETE_CH_FEE_SETTLE_LINK = " DELETE FROM ch_fee_settle_link WHERE SETTLEID = '" + tempPaySettleID + "' "; SqlHelper.ExecuteNonQuery(sqlTran, CommandType.Text, SQL_DELETE_CH_FEE_SETTLE_LINK, null); //事务提交 sqlTran.Commit(); iResult = 1;//状态为1表示插入成功 } catch (Exception execError) { iResult = -1;//有异常,插入失败 sqlTran.Rollback(); iResult = -2;//插入异常,事务已回滚成功 throw execError; } finally { SqlHelper.CloseConnection(); } } return iResult; } #endregion } }