计算流水增加事务提交

This commit is contained in:
chfei committed 2026-08-27 18:12:53 +08:00
1 parent 2dc89f4c8e
commit bdbc13d63c
1 file changed
+23 -21
+23 -21
View File
@@ -272,8 +272,20 @@ namespace KJD_Web.BLL.WXXD
oem oemInfo = oems.First();
string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString;
MysqlUtils mySql = new MysqlUtils(conn, true);
this.SettleOemFlows(mySql, oemInfo.oem_id);
try
{
this.SettleOemFlows(mySql, oemInfo.oem_id);
}
catch (Exception)
{
mySql.RollBack();
throw;
}
finally
{
mySql.Close();
}
oems = GetOems(new List<string> { request.user_name });
if (oems == null || oems.Any() == false)
{
@@ -576,12 +588,10 @@ namespace KJD_Web.BLL.WXXD
{
if (oem_id.IsNullOrEmpty())
return 0;
LogHelper.Info($"找账号");
// 1. 找到该oem下所有账户
// 1. 找到该oem下所有账户
string sql = "SELECT user_name FROM `wxxd`.`user` WHERE oem_id='" + MysqlUtils.ReplaceSqlSpecial(oem_id) + "'";
var userDt = mySql.ExecuteDataTable(sql);
LogHelper.Info($"找账号:{sql}");
if (!string.IsNullOrEmpty(mySql.Message) || userDt == null || userDt.Rows.Count == 0)
if (!string.IsNullOrEmpty(mySql.Message) || userDt == null || userDt.Rows.Count == 0)
return 0;
List<string> userLst = userDt.Rows.Cast<DataRow>()
@@ -591,16 +601,12 @@ namespace KJD_Web.BLL.WXXD
.ToList();
if (userLst.Count == 0)
return 0;
LogHelper.Info($"当前找到:{userLst.Count} 账号");
// 2. 该oem所有账户的未结算流水,按id升序
// 2. 该oem所有账户的未结算流水,按id升序
sql = "SELECT * FROM `wxxd`.`user_payment_record` WHERE user_name IN ('" + string.Join("','", userLst) + "') AND type IN (20,23,26,16,31) AND settlement=0 AND is_deleted=0 ORDER BY id ASC";
LogHelper.Info($"流水SQL:{sql}");
var flowDt = mySql.ExecuteDataTable(sql);
LogHelper.Info($"找到:{flowDt?.Rows?.Count ?? 0}条");
if (!string.IsNullOrEmpty(mySql.Message) || flowDt == null || flowDt.Rows.Count == 0)
var flowDt = mySql.ExecuteDataTable(sql);
if (!string.IsNullOrEmpty(mySql.Message) || flowDt == null || flowDt.Rows.Count == 0)
return 0;
LogHelper.Info($"开始计算");
decimal total_amount = 0m; // 总金额(元)
decimal total_amount = 0m; // 总金额(元)
decimal rebate_amount = 0m; // 正数部分(累计返利)
HashSet<string> deductedOrderSet = new HashSet<string>(); // type=23 已扣减的订单
List<long> settleIdLst = new List<long>(); // 参与结算的流水id
@@ -646,20 +652,16 @@ namespace KJD_Web.BLL.WXXD
long total_fen = (long)Math.Round(total_amount * 100m);
long rebate_fen = (long)Math.Round(rebate_amount * 100m);
string now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
LogHelper.Info($"开始修改金额");
// 3. 写oem金额 + 更新流水状态(同一事务)
// 3. 写oem金额 + 更新流水状态(同一事务)
sql = "UPDATE wxxd.oem SET available_balance=available_balance+" + total_fen +
", total_rebate_amount=total_rebate_amount+" + rebate_fen +
" WHERE oem_id='" + oem_id + "'";
var oemRst = mySql.ExecuteAffectedRows(sql);
LogHelper.Info($"开始修改金额{sql}");
if (!string.IsNullOrEmpty(mySql.Message) || oemRst <= 0)
if (!string.IsNullOrEmpty(mySql.Message) || oemRst <= 0)
throw new Exception("结算流水到账户失败");
LogHelper.Info($"开始修改状态");
sql = "UPDATE wxxd.user_payment_record SET settlement=1,settlement_time='" + now + "' WHERE id IN (" + string.Join(",", settleIdLst) + ")";
sql = "UPDATE wxxd.user_payment_record SET settlement=1,settlement_time='" + now + "' WHERE id IN (" + string.Join(",", settleIdLst) + ")";
var flowRst = mySql.ExecuteAffectedRows(sql);
LogHelper.Info($"开始修改状态{sql}");
if (!string.IsNullOrEmpty(mySql.Message) || flowRst <= 0)
throw new Exception("标记流水结算失败");
return total_fen;