You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DS7/DSWeb/EntityDA/FeeSettlementDA.cs

725 lines
42 KiB
C#

2 years ago
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 通过惟一主键获取费用结算信息
/// <summary>
/// 通过惟一主键获取费用结算信息
/// </summary>
/// <param name="tempFeeSettlementID">费用结算GID</param>
/// <returns>返回实体类FeeSettlementEntity</returns>
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 通过业务编号获取费用结算信息
/// <summary>
/// 通过业务编号获取费用结算信息
/// </summary>
/// <param name="tempFeeSettlementID">费用结算业务编号</param>
/// <returns>返回实体类FeeSettlementEntity</returns>
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)
/// <summary>
/// 获取所有费用结算信息(DataSet)
/// </summary>
/// <returns>返回DataSet数据</returns>
public DataSet GetAllFeeSettlement()
{
return GetExcuteSql(SQL_SELECT_FEE_SETTLEMENT_ALL);
}
#endregion
#region 通过SQL语句获取数据
/// <summary>
/// 通过SQL语句获取数据
/// </summary>
/// <param name="strSql">要执行查询的SQL语句</param>
/// <returns>返回DataSet数据</returns>
public DataSet GetExcuteSql(string strSql)
{
DataSet dataSet = new DataSet();
dataSet = SqlHelper.ExecuteDataset(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, strSql);
return dataSet;
}
#endregion
#region 撤销收费结算(不包含收费申请结算)
/// <summary>
/// 撤销收费结算(不包含收费申请结算)
/// </summary>
/// <param name="tempUserID">用户GID</param>
/// <param name="tempBillNO">收费结算业务编号</param>
/// <returns>值1表示撤销成功 值不等于1表示撤销失败</returns>
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 撤销收费结算(包含收费申请结算)
/// <summary>
/// 撤销收费结算(包含收费申请结算)
/// </summary>
/// <param name="tempPaySettleID">收费结算GID</param>
/// <param name="tempPaySettleID">收费结算单号</param>
/// <param name="tempOperator">操作人GID</param>
/// <param name="tempCompanyID">分公司GID</param>
/// <returns>值1表示撤销结算成功 值不等于1表示撤销结算失败</returns>
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
}
}