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

283 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
}