From 0039ca5bf6c44ae276a07032e058832183e8dc33 Mon Sep 17 00:00:00 2001 From: chfei Date: Fri, 4 Sep 2026 15:07:12 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=93=E7=AE=97=E6=B5=81=E6=B0=B4=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=2034=20=E7=B1=BB=E5=9E=8B=20=E7=A4=BC?= =?UTF-8?q?=E7=89=A9=E8=AE=A2=E5=8D=95=E5=8F=91=E9=80=81=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E6=89=A3=E9=99=A4=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KJD_WebService/BLL/WXXD/WXOemManage.cs | 34 +++++++++++++++++--------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/KJD_WebService/BLL/WXXD/WXOemManage.cs b/KJD_WebService/BLL/WXXD/WXOemManage.cs index 2530d05..89f29ab 100644 --- a/KJD_WebService/BLL/WXXD/WXOemManage.cs +++ b/KJD_WebService/BLL/WXXD/WXOemManage.cs @@ -275,7 +275,7 @@ namespace KJD_Web.BLL.WXXD try { - this.SettleOemFlows(mySql, oemInfo.oem_id); + this.SettleOemFlows(mySql, oemInfo.oem_id); mySql.Commit(); } catch (Exception) @@ -589,7 +589,7 @@ namespace KJD_Web.BLL.WXXD { if (oem_id.IsNullOrEmpty()) return 0; - // 1. 找到该oem下所有账户 + // 1. 找到该oem下所有账户 string sql = $@"SELECT user_name, '主账号' AS account_type FROM `wxxd`.`user` WHERE oem_id = '{MysqlUtils.ReplaceSqlSpecial(oem_id)}' @@ -602,7 +602,7 @@ namespace KJD_Web.BLL.WXXD ON A.user_name = B.parent_user_name WHERE A.oem_id = '{MysqlUtils.ReplaceSqlSpecial(oem_id)}'"; var userDt = mySql.ExecuteDataTable(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 userLst = userDt.Rows.Cast() @@ -612,14 +612,15 @@ namespace KJD_Web.BLL.WXXD .ToList(); if (userLst.Count == 0) return 0; - // 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"; - var flowDt = mySql.ExecuteDataTable(sql); - if (!string.IsNullOrEmpty(mySql.Message) || flowDt == null || flowDt.Rows.Count == 0) + // 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,34) AND settlement=0 AND is_deleted=0 ORDER BY id ASC"; + var flowDt = mySql.ExecuteDataTable(sql); + if (!string.IsNullOrEmpty(mySql.Message) || flowDt == null || flowDt.Rows.Count == 0) return 0; - decimal total_amount = 0m; // 总金额(元) + decimal total_amount = 0m; // 总金额(元) decimal rebate_amount = 0m; // 正数部分(累计返利) HashSet deductedOrderSet = new HashSet(); // type=23 已扣减的订单 + HashSet giftsOrderSet = new HashSet(); // type=34 礼物已扣减的订单 List settleIdLst = new List(); // 参与结算的流水id foreach (DataRow row in flowDt.Rows) @@ -647,6 +648,15 @@ namespace KJD_Web.BLL.WXXD deductedOrderSet.Add(orderId); itemAmount = -(amount - 2.2m); } + else if (type == 34) + { + // 同一个订单只能减少一次 + string orderId = row["order_id"].ParseToString(); + if (orderId.IsNullOrEmpty() || giftsOrderSet.Contains(orderId)) + continue; + giftsOrderSet.Add(orderId); + itemAmount = -oem_amount; + } else { continue; // 其他类型不计入 @@ -663,16 +673,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"); - // 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); - if (!string.IsNullOrEmpty(mySql.Message) || oemRst <= 0) + if (!string.IsNullOrEmpty(mySql.Message) || oemRst <= 0) throw new Exception("结算流水到账户失败"); - 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); - + if (!string.IsNullOrEmpty(mySql.Message) || flowRst <= 0) throw new Exception("标记流水结算失败"); return total_fen;