Files
YunTongJackYunTask/Reportapi/MyCode.Project.Services/BLL/PreOrderBLL.cs
2025-07-04 09:50:02 +08:00

169 lines
5.6 KiB
C#

using MyCode.Project.Domain.Message.Response.Lxm;
using MyCode.Project.Domain.Model;
using MyCode.Project.Domain.Repositories;
using MyCode.Project.Infrastructure.Enumeration;
using MyCode.Project.Infrastructure.Exceptions;
using MyCode.Project.Repositories.Lxm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyCode.Project.Services.BLL
{
public class PreOrderBLL
{
private readonly LxmInfraRepository _lxmInfraRepository;
private readonly IRepository _repository;
public PreOrderBLL(LxmInfraRepository lxmInfraRepository,
IRepository repository)
{
_lxmInfraRepository = lxmInfraRepository;
_repository = repository;
}
#region HandlePreOrder()
/// <summary>
/// 处理单个的预售单
/// </summary>
public void HandlePreOrder(ChangeRecordResp record)
{
var strSheetId = record.SheetId.ToString();
//因为有些数据是删除了
if (record.Flag != 100)
{
return;
}
var sheet = ToPreLxmSheet(record);
//补充单号
var mssqlSheet = _lxmInfraRepository.GetPreSheet(record.SheetId);
if (mssqlSheet == null) { throw new BaseException($"预售单sheetid={record.SheetId}在BusPresalesSheet中找不到数据"); }
sheet.Sheet = mssqlSheet.Sheet;
var items = ToPreLxmSheetItem(record.SheetId);
_repository.AddQueue<LxmSheet>(sheet);
_repository.AddQueue<LxmSheetItem>(items);
}
#endregion
#region ToLxmSheet(MYSQL订单主表的实体)
/// <summary>
/// 转换为MYSQL订单主表的实体
/// </summary>
/// <returns></returns>
private LxmSheet ToPreLxmSheet(ChangeRecordResp record)
{
var sheet = new LxmSheet();
if (record.TotalAmount < 0)
{
sheet.Direct = -1;
}
else
{
sheet.Direct = 1;
}
sheet.Id = record.SheetId.ToString();
sheet.ShopId = record.ShopId.ToString();
sheet.Balance = Math.Abs(record.Balance);
sheet.CreateTime = record.CreateTime;
sheet.CustomerId = record.CustomerId?.ToString();
sheet.CustomerName = record.CustomerName;
sheet.TotalAmount = Math.Abs(record.TotalAmount);
sheet.Type = (int)LxmRecordType.PreSalesSheet;
sheet.EditTime = record.EditTime;
sheet.UpdateTime = DateTime.Now;
//add by florent 2023-10-30
sheet.IsFirstOrder = record.IsFirstOrder;
sheet.IsNewMemberOrder = record.IsNewMemberOrder;
if (record.MemberId != null)
{
sheet.MemberId = record.MemberId.ToString();
sheet.MemberName = record.MemberName;
sheet.MemberMobile = record.MemberMobile;
}
if (record.ClerkId != null)
{
sheet.OrderClerkId = record.ClerkId.ToString();
sheet.OrderClerkName = record.ClerkName;
sheet.OrderClerkMobile = record.ClerkMobile;
}
if (record.PlatformSource != null) { sheet.PlatformSource = record.PlatformSource; }
if (record.IsRepurchase != null) { sheet.IsRepurchase = record.IsRepurchase; }
//预售的实际支付金额
sheet.NoBalancePayAmount = Math.Abs(record.TotalAmount-record.Balance);
return sheet;
}
#endregion
#region ToPreLxmSheetItem()
/// <summary>
/// 转换层流行美的订单明细
/// </summary>
/// <param name="sheetId"></param>
/// <returns></returns>
private List<LxmSheetItem> ToPreLxmSheetItem(Guid sheetId)
{
var items = _lxmInfraRepository.GetPreSheetItems(sheetId);
if (items == null || items.Count == 0) { throw new BaseException($"预售单SheetId={sheetId}找不到明细"); }
var returnList = new List<LxmSheetItem>();
foreach (var item in items)
{
var returnItem = new LxmSheetItem()
{
Id = item.Id.ToString(),
NoBalanceUnitPrice = Math.Abs(item.NoBalanceUnitPrice),
NoBalanceAmount = Math.Abs(item.NoBalanceUnitPrice) * Math.Abs(item.Qty),
Qty = Math.Abs(item.Qty),
SalesSheetId = sheetId.ToString(),
TopCategoryId = item.TopId.ToString(),
Name = item.Name,
ItemId = item.ItemId.ToString(),
HasChildNode = 0,
//预售单全部都是商品
ItemType = (int)OrderItemType.Goods,
InBlanceUnitPrice = Math.Abs(item.InBlanceUnitPrice)
};
returnItem.InBlanceAmount = returnItem.InBlanceUnitPrice * returnItem.Qty;
returnItem.NoBalancePayAmount = returnItem.NoBalanceAmount;
returnItem.NoBalancePayUnitPrice = returnItem.NoBalanceUnitPrice;
if (item.Qty < 0)
{
returnItem.Direct = -1;
}
else
{
returnItem.Direct = 1;
}
returnList.Add(returnItem);
}
return returnList;
}
#endregion
}
}