修改 OEM 结算 快递流水 退款记录也有OEM_Amount 一 一对应 直接计算金额之和

This commit is contained in:
chfei committed 2026-11-12 14:39:26 +08:00
1 parent 8d6c4ebb84
commit 6f54b8a63f
5 files changed
+34 -62

No files matched your search

@@ -88,6 +88,10 @@ namespace KJD_Web.Controllers.WX
ret = _statsService.GetShopOrderDetails(request.StartDate, request.EndDate, request.OrderType, "", request.ShopIds);
return Ok(ApiResult.Success(ret));
}
catch (ArgumentException ex)
{
return Ok(ApiResult.Fail(ex.Message, ResultCode.ServerError));
}
catch (Exception ex)
{
return Ok(ApiResult.Fail("查询失败", ResultCode.ServerError));
@@ -197,7 +201,7 @@ namespace KJD_Web.Controllers.WX
foreach (var item in ret)
{
item.ShopId= dict[item.ShopId];
item.ShopId = dict[item.ShopId];
}
return Ok(ApiResult.Success(ret));
@@ -2,6 +2,7 @@
using MySqlX.XDevAPI;
using Newtonsoft.Json;
using Store.Contracts.User.Entitys;
using Store.Contracts.User.Enums;
using System;
using System.Collections.Generic;
using System.Data.Common;
@@ -40,7 +41,7 @@ namespace KJD_Web.Services.Users
// 获取OEM下面的所有用户
var users = GetOEMUsers(oem.OemId, true);
if (users.Count == 0)
{//todo
@@ -127,11 +128,12 @@ namespace KJD_Web.Services.Users
decimal total_amount = 0m; // 总金额(元)
decimal rebate_amount = 0m; // 正数部分(累计返利)
DateTime now = DateTime.Now;
List<int> UserPaymentTypeFiltert = [16, 20, 23, 26, 31, 34, 55];
int[] positiveTypes = [16, 20, 26, 31, 35, 39, 55];
int[] negativeTypes = [34, 23, 38, 32, 36, 40];
var paymentTypes = positiveTypes.Concat(negativeTypes).ToArray();
var paymentQuery = tr_freeSql.Select<UserPaymentRecordEntity>()
.Where(a => userNames.Contains(a.UserName))
.Where(a => UserPaymentTypeFiltert.Contains(a.Type))
.Where(a => paymentTypes.Contains(a.Type))
.Where(a => a.Settlement == 0)
.Where(a => a.IsDeleted == 0);
//只有OEM结算才限制OEM创建时间。
@@ -139,58 +141,18 @@ namespace KJD_Web.Services.Users
{
paymentQuery = paymentQuery.Where(a => a.CreateTime > oemAddTime.Value);
}
paymentQuery.OrderBy(a => a.Id);
var userPayments = paymentQuery.ToList();
var userPayments = paymentQuery.OrderBy(a => a.Id).ToList();
if (userPayments.Count > 0)
{
Debug.WriteLine(userPayments.Where(a => a.Type == 20).Sum(a => a.OemAmount));
///原始流水ID。
List<long> ids = userPayments.Select(a => a.Id).ToList();
var userPaymentUnique = userPayments.GroupBy(a => //去重
new
var ids = userPayments.Select(a => a.Id).ToList();
var userPaymentAmount = userPayments
.GroupBy(a => new { a.Type, a.OrderId })
.Select(group => group.First())
.Sum(a =>
{
a.Type,
a.OrderId
}).Select(a => a.First()).ToList();
//经过计算过滤后的列表
List<UserPaymentRecordEntity> userPaymentCalculated = new List<UserPaymentRecordEntity>();
foreach (var item in userPaymentUnique)
{
if (item.Type == 20)
{
//item.OemAmount = item.Amount - 2.2m;
item.OemAmount = item.OemAmount;
}
else if (item.Type == 26)
{
//item.OemAmount = item.Amount - 2.5m;
item.OemAmount = item.OemAmount;
}
if (item.Type == 23)
{
var temp = userPaymentCalculated.FirstOrDefault(a => a.Type == 20 && a.OrderId == item.OrderId);
if (temp != null)
{
userPaymentCalculated.Remove(temp);//23 移除 20
}
continue;
}
else if (item.Type == 34)
{
item.OemAmount = item.OemAmount * -1;
}
userPaymentCalculated.Add(item);
}
decimal userPaymentAmount = userPaymentCalculated.Sum(x => x.OemAmount ?? 0);//累计返利
//StringBuilder sb = new StringBuilder();
//sb.AppendLine("id,order_id,type,amount,oem_amount,time");
//foreach (var item in userPayments)
//{
// sb.AppendLine($"{item.Id},{item.OrderId},{item.Type},{item.Amount},{item.OemAmount},{item.CreateTime}");
//}
var amount = Math.Abs(a.OemAmount ?? 0m);
return positiveTypes.Contains(a.Type) ? amount : -amount;
});
total_amount += userPaymentAmount;
rebate_amount += userPaymentAmount;
@@ -460,4 +422,4 @@ namespace KJD_Web.Services.Users
/// </summary>
public long Balance { get; set; }
}
}
}
+2 -2
View File
@@ -477,7 +477,7 @@ namespace KJD_Web.Services.Users
if (user == null) return false;
// 消费金额必须大于 0
if (user.Balance <= 0) return false;
if (type != UserPaymentTypes.同步单号) return false;
if (type != UserPaymentTypes.同步物流) return false;
consumeAmount = (user.SyncLogisticsPerOrder ?? 0m) + consumeAmount;
return user.Balance >= consumeAmount;
}
@@ -499,7 +499,7 @@ namespace KJD_Web.Services.Users
{
throw new Exception("用户不存在");
}
if (type != UserPaymentTypes.同步单号) throw new Exception("不支持的类型");
if (type != UserPaymentTypes.同步物流) throw new Exception("不支持的类型");
var payItem = new UserPaymentRecordEntity
{
Type = (int)type,
+9 -3
View File
@@ -19,12 +19,18 @@ public enum UserPaymentTypes
//运费退款扣除 = 7,
礼物单支出 = 16,
中转仓扣费支出 = 20,
中转仓作废返还收入 = 23,
中转仓作废收入 = 23,
中转仓超重支出 = 24,
退货包裹扣费支出 = 26,
中转仓快递超重费用 = 28,
支付宝在线充值 = 30,
云仓退货支出 = 31,
礼物单退费 = 34,
同步单号 = 55,
额外订单创建 = 35,
额外订单作废 = 36,
额外订单超重支出 = 37,
退货包裹作废返还 = 38,
同步物流 = 55,
额外包裹退货拦截花费 = 39,
额外包裹退货拦截花费退款 = 40,
额外包裹退货拦截超重花费 = 41,
}
@@ -82,7 +82,7 @@ public class VirtualLogisticsService : ITransientDependency
}
var user = _userService.GetUserByUserName(userName);
if (user == null) throw new Exception("错误的账号");
if (_userService.CanAfford(userName, Contracts.User.Enums.UserPaymentTypes.同步单号, FIXEDFEES) == false)
if (_userService.CanAfford(userName, Contracts.User.Enums.UserPaymentTypes.同步物流, FIXEDFEES) == false)
{
throw new Exception("余额不足");
}
@@ -181,7 +181,7 @@ public class VirtualLogisticsService : ITransientDependency
throw new Exception("记录同步单失败");
}
//todo 更新UserBlance
_userService.UserPayment(user.UserName, orderId, type: Contracts.User.Enums.UserPaymentTypes.同步单号);
_userService.UserPayment(user.UserName, orderId, type: Contracts.User.Enums.UserPaymentTypes.同步物流);
return yhSyncs;
}