Files
YunTongJackYunTask/Reportapi/MyCode.Project.Services/BLL/OrderBLL.cs

283 lines
10 KiB
C#
Raw Normal View History

2025-07-04 09:50:02 +08:00
using MyCode.Project.Domain.Message.Response.Lxm;
using MyCode.Project.Domain.Message.Response.LxmZHMDReport;
using MyCode.Project.Domain.Model;
using MyCode.Project.Domain.Repositories;
using MyCode.Project.Domain.ZHMDModel;
using MyCode.Project.Infrastructure.Enumeration;
using MyCode.Project.Infrastructure.Exceptions;
using MyCode.Project.Repositories.Common;
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 OrderBLL
{
private readonly LxmInfraRepository _lxmInfraRepository;
private readonly LxmRepository _lxmRepository;
private readonly IRepository _repository;
private readonly GoodsBLL _goodsBLL;
private readonly ServiceBLL _serviceBLL;
private readonly CustomPackageBLL _customPackageBLL;
private readonly CardBLL _cardBLL;
private readonly ServicePackageBLL _servicePackageBLL;
public OrderBLL(LxmInfraRepository lxmInfraRepository,
IRepository repository,
GoodsBLL goodsBLL,
LxmRepository lxmRepository,
ServiceBLL serviceBLL,
CustomPackageBLL customPackageBLL,
CardBLL cardBLL,
ServicePackageBLL servicePackageBLL)
{
_lxmInfraRepository = lxmInfraRepository;
_repository = repository;
_goodsBLL = goodsBLL;
_serviceBLL = serviceBLL;
_lxmRepository = lxmRepository;
_customPackageBLL = customPackageBLL;
_cardBLL = cardBLL;
_servicePackageBLL = servicePackageBLL;
}
#region GetAddFromType(id和会员id得到来源)
/// <summary>
/// 根据店铺id和会员id得到来源
/// </summary>
/// <param name="shopId"></param>
/// <param name="memberId"></param>
/// <returns></returns>
public int GetAddFromType(string strShopId, string strMemberId)
{
if (string.IsNullOrWhiteSpace(strMemberId)) { return (int)OrderFromType.Other; }
if (string.IsNullOrWhiteSpace(strShopId)) { throw new BaseException("GetAddFromType方法中strShopId不能为空"); }
var guidShopId = Guid.Parse(strShopId);
var guidMemberId = Guid.Parse(strMemberId);
var memberConsultant = _lxmInfraRepository.Queryable<BasMemberConsultant>().Where(p => p.ShopID == guidShopId && p.MemberID == guidMemberId).Select(p => new { p.AddFromType }).First();
if (memberConsultant == null || memberConsultant.AddFromType == null) { return (int)OrderFromType.Other; }
return (int)memberConsultant.AddFromType;
}
#endregion
#region HandleOrder()
/// <summary>
/// 处理单个订单
/// </summary>
/// <param name="id"></param>
public void HandleOrder(ChangeRecordResp record)
{
var strSheetId = record.SheetId.ToString();
if (record.Flag != 100)
{
//_repository.DeleteQueue<LxmSheet>(p => p.Id == strSheetId);
//_repository.DeleteQueue<LxmSheetItem>(p => p.SalesSheetId == strSheetId);
return;
}
var sheet = ToLxmSheet(record);
//补充单号
var mssqlSheet = _lxmInfraRepository.GetSheet(record.SheetId);
if (mssqlSheet == null) { throw new BaseException($"预售单sheetid={record.SheetId}在BusPresalesSheet中找不到数据"); }
sheet.Sheet = mssqlSheet.Sheet;
var items = ToLxmSheetItem(record.SheetId,mssqlSheet);
_repository.AddQueue<LxmSheet>(sheet);
_repository.AddQueue<LxmSheetItem>(items);
}
#endregion
#region ToPreLxmSheetItem()
/// <summary>
/// 转换层流行美的订单明细
/// </summary>
/// <param name="sheetId"></param>
/// <returns></returns>
private List<LxmSheetItem> ToLxmSheetItem(Guid sheetId,LxmSheetResp sheet)
{
var items = _lxmInfraRepository.GetSheetItems(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(),
Name = item.Name,
ItemId = item.ItemId.ToString(),
HasChildNode = 0,
//这个要转成实际的,比如套餐的话
ItemType = item.ItemType,
InBlanceUnitPrice = Math.Abs(item.InBlanceUnitPrice),
NoBalancePayUnitPrice = Math.Abs(item.NoBalanceUnitPrice)
};
returnItem.InBlanceAmount = returnItem.InBlanceUnitPrice * returnItem.Qty;
//如果有预售单的id,则说明是预转销订单这种订单实付支付为0因为在预售单的时候就已经支付了
if (sheet.PreSalesSheetId != null)
{
returnItem.NoBalancePayUnitPrice = 0;
returnItem.NoBalancePayAmount = 0;
}
else
{
returnItem.NoBalancePayAmount = returnItem.NoBalancePayUnitPrice * returnItem.Qty;
}
if (item.Qty < 0)
{
returnItem.Direct = -1;
}
else
{
returnItem.Direct = 1;
}
UpdateOrderItem(returnItem);
returnList.Add(returnItem);
}
return returnList;
}
#endregion
#region UpdateOrderItem()
/// <summary>
/// 更新明细
/// </summary>
/// <param name="item"></param>
private void UpdateOrderItem(LxmSheetItem item)
{
var gItemId = Guid.Parse(item.ItemId);
//如果是商品,则拿到商品名称和顶级分类
if (item.ItemType == (int)OrderItemType.Goods)
{
var goodsInfo = _goodsBLL.GetCacheLxmSimpleGoodsResp(gItemId);
item.Name = goodsInfo.Name;
item.TopCategoryId = goodsInfo.TopCategoryId.ToString();
}
else if (item.ItemType == (int)OrderItemType.Service)
{
var service = _serviceBLL.GetCacheLxmServiceResp(gItemId);
item.Name = service.Name;
}
else if (item.ItemType == (int)OrderItemType.DiyPackage)
{
var diyPackage = _customPackageBLL.GetCacheLxmCustomPackageResp(gItemId);
item.Name = diyPackage.Name;
//这个版本的话先不处理下个版本需要直接处理成40或者41并且把明细拆分出来
}
else if (item.ItemType == (int)OrderItemType.CardCoupon)
{
var card = _cardBLL.GetCacheLxmCardResp(gItemId);
item.Name = card.Name;
}
else if (item.ItemType == (int)OrderItemType.Package)
{
var servicePackage = _servicePackageBLL.GetCacheLxmServicePackage(gItemId);
item.Name = servicePackage.Name;
}
else
{
throw new BaseException($"无法找到对应的数据itemType={item.ItemType},sheetid={gItemId}");
}
}
#endregion
#region ToLxmSheet(MYSQL订单主表的实体)
/// <summary>
/// 转换为MYSQL订单主表的实体
/// </summary>
/// <returns></returns>
private LxmSheet ToLxmSheet(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;
if (Math.Abs(record.YuShouAmount) > 0)
{
sheet.TotalAmount = Math.Abs(record.YuShouAmount);
sheet.NoBalancePayAmount = 0;
//预转销订单
sheet.IsPorderToSorder = 1;
}
else
{
sheet.TotalAmount = Math.Abs(record.TotalAmount);
sheet.NoBalancePayAmount = Math.Abs(sheet.TotalAmount.Value - sheet.Balance.Value);
}
//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.Type = (int)LxmRecordType.SalesSheet;
sheet.UpdateTime = DateTime.Now;
sheet.EditTime = record.EditTime;
return sheet;
}
#endregion
}
}