using AutoMapper; using Microsoft.EntityFrameworkCore.Storage; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WMS.Web.Core.Dto; using WMS.Web.Core.Dto.Login; using WMS.Web.Core.Dto.OutStock; using WMS.Web.Core.Dto.TakeStock; using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.Entitys; using WMS.Web.Domain.Infrastructure; using WMS.Web.Domain.IService; using WMS.Web.Domain.IService.Public; using WMS.Web.Domain.Values; namespace WMS.Web.Domain.Services { /// /// 出库服务 /// public class OutStockService : IOutStockService { private readonly IMapper _mapper; private readonly ILoginService _loginService; public readonly ITransactionRepositories _transactionRepositories; private readonly IOutStockRepositories _outStockRepositories; private readonly IOutStockTaskRepositories _outStockTaskRepositories; public OutStockService(IMapper mapper, ILoginService loginService, ITransactionRepositories transactionRepositories, IOutStockRepositories outStockRepositories, IOutStockTaskRepositories outStockTaskRepositories) { _mapper = mapper; _loginService = loginService; _transactionRepositories = transactionRepositories; _outStockRepositories = outStockRepositories; _outStockTaskRepositories = outStockTaskRepositories; } /// /// 出库单 /// /// /// /// public async Task Save(SaveOutStockRequest dto, LoginInDto loginInfo) { var outStockTask = await _outStockTaskRepositories.Get(dto.TaskId); //OutStock entity = await _outStockRepositories.GetByTaskId(dto.TaskId); OutStock entity = new OutStock(); entity.Create(loginInfo.UserInfo.StaffId, outStockTask.Id, outStockTask.Type); foreach (var d in dto.Details) { //任务单明细 var tDetail = outStockTask.Details.FirstOrDefault(f => f.MaterialId == d.MaterialId); if (tDetail == null) continue; var res = tDetail.OutStock(d.MaterialId, d.Qty); if (!res.IsSuccess) return res; var outd = _mapper.Map(tDetail); outd.Qty = outd.Qty + d.Qty; entity.Details.Add(outd); } //需要填写序列号 //需要修改库存 //需要同步金蝶 IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); bool isRollback = false; bool isSuccess = true; entity = await _outStockRepositories.Add(entity, false); if (entity == null) isRollback = true; //提交事务 isSuccess = _transactionRepositories.CommitTransaction(isRollback, _transaction); if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); return Result.ReSuccess(); } /// /// 同步金蝶 /// /// /// public Task Sync(OperateRequest dto) { return Task.FromResult(Result.ReSuccess()); } } }