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.BackRecord; using WMS.Web.Core.Dto.Inventory; using WMS.Web.Core.Dto.Login; 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 BackRecordService: IBackRecordService { private readonly IMapper _mapper; private readonly ILoginService _loginService; public readonly IBasicsRepositories _basicsRepositories; private readonly ISerialNumberService _serialNumberService; private readonly IBackRecordRepositories _backRecordRepositories; private readonly IBoxInventoryService _boxInventoryService; public BackRecordService(IMapper mapper, ILoginService loginService, IBasicsRepositories basicsRepositories, IBoxInventoryService boxInventoryService, ISerialNumberService serialNumberService, IBackRecordRepositories backRecordRepositories) { _mapper = mapper; _loginService = loginService; _boxInventoryService = boxInventoryService; _basicsRepositories = basicsRepositories; _backRecordRepositories = backRecordRepositories; } /// /// 回退上下架 /// /// /// /// /// public async Task BackShelf(SaveBackRecordRequest dto, BackRecordType type, LoginInDto loginInfo) { IDbContextTransaction _transaction = _basicsRepositories.GetTransaction(); bool isRollback = false; bool isTransaction = false; var entity = new BackRecord(); entity.Type = type; entity.Details = _mapper.Map>(dto.Details); entity.Create(loginInfo.UserInfo.StaffId); entity = await _backRecordRepositories.Add(entity, isTransaction); //提交事务 var isSuccess = _basicsRepositories.CommitTransaction(isRollback, _transaction); if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); if (entity != null) { //保存成功后:序列号跟踪流程添加 var serialNumber_result = await _serialNumberService.BackRecord(entity, loginInfo, isTransaction); if (!serialNumber_result.IsSuccess) return serialNumber_result; //保存成功后:变更库存 var entitys = new List(); entitys.Add(entity); var boxInventoryResult= await _boxInventoryService.GenerateBackBox(entitys, isTransaction); if (!boxInventoryResult.IsSuccess) return boxInventoryResult; return Result.ReSuccess(); } else return Result.ReFailure(ResultCodes.DateWriteError); } } }