/***********************************************************************
* Project: baifenBinfa
* ProjectName: 百分兵法管理系统
* Web: http://chuanyin.com
* Author:
* Email:
* CreateTime: 202403/02
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Model.Entities;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace CoreCms.Net.Services
{
///
/// 订单明细表 接口实现
///
public class CoreCmsOrderItemServices : BaseServices, ICoreCmsOrderItemServices
{
private readonly ICoreCmsOrderItemRepository _dal;
private readonly IUnitOfWork _unitOfWork;
private readonly IServiceProvider _serviceProvider;
public CoreCmsOrderItemServices(IUnitOfWork unitOfWork,
IServiceProvider serviceProvider,
ICoreCmsOrderItemRepository dal)
{
_serviceProvider = serviceProvider;
this._dal = dal;
base.BaseDal = dal;
_unitOfWork = unitOfWork;
}
///
/// 发货数量
///
///
/// 发货明细
///
public async Task ship(string orderId, Dictionary item)
{
using (var container = _serviceProvider.CreateScope())
{
var goodsRepository = container.ServiceProvider.GetService();
var isOver = true; //是否发完了,true发完了,false未发完
var list = await base.QueryListByClauseAsync(p => p.orderId == orderId);
foreach (var child in list)
{
if (item.ContainsKey(child.productId))
{
var maxNum = child.nums - child.sendNums; //还需要减掉已发数量
//还需要减掉已退的数量
var reshipNums = _dal.GetaftersalesNums(orderId, child.sn);
maxNum = maxNum - reshipNums;
if (item[child.productId] > maxNum) //如果发超了怎么办
{
throw new System.Exception(orderId + "的" + child.sn + "发超了");
}
if (isOver && item[child.productId] < maxNum) //判断是否订单发完了,有一个没发完,就是未发完
{
isOver = false;
}
//await _dal.UpdateAsync(p => new CoreCmsOrderItem() { sendNums = item[child.productId] },
// p => p.id == child.id);
var updateSendNums = item[child.productId] + child.sendNums;
await _dal.UpdateAsync(p => new CoreCmsOrderItem() { sendNums = updateSendNums }, p => p.id == child.id);
//发货后,减库存
goodsRepository.ChangeStock(child.productId, GlobalEnumVars.OrderChangeStockType.send.ToString(), item[child.productId]);
item.Remove(child.productId);
}
}
//如果没发完,也报错
if (item.Count > 0)
{
throw new System.Exception("发货明细里包含订单之外的商品");
}
return isOver;
}
}
}
}