/*********************************************************************** * 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; } } } }