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.Erp.TakeStock; using WMS.Web.Core.Dto.Login; 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; using WMS.Web.Domain.Values.Erp; using WMS.Web.Domain.Values.Single; namespace WMS.Web.Domain.Services { /// /// 盘点单服务 /// public class TakeStockService : ITakeStockService { private readonly IMapper _mapper; private readonly ILoginService _loginService; public readonly ITransactionRepositories _transactionRepositories; private readonly ITakeStockRepositories _takeStockRepositories; private readonly ILoginRepositories _loginRepositories; private readonly ISingleDataService _singleDataService; private readonly IErpService _erpService; public TakeStockService(IMapper mapper, ILoginService loginService, ITransactionRepositories transactionRepositories, ITakeStockRepositories takeStockRepositories, ILoginRepositories loginRepositories, ISingleDataService singleDataService, IErpService erpService) { _mapper = mapper; _loginService = loginService; _transactionRepositories = transactionRepositories; _takeStockRepositories = takeStockRepositories; _loginRepositories = loginRepositories; _singleDataService = singleDataService; _erpService = erpService; } /// /// 保存 /// /// /// /// public async Task Save(List dto, LoginInDto loginInfo) { TakeStock entity = new TakeStock(); //entity.Details = _mapper.Map>(dto); entity.Create(loginInfo.UserInfo.StaffId); //需要填写序列号 //需要修改库存 IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); bool isRollback = false; bool isSuccess = true; entity = await _takeStockRepositories.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()); } /// /// 盘盈 /// /// /// public async Task Profit(TakeStock entity) { //获取金蝶仓库仓位编码 var stockCode = _singleDataService.GetSingleDataCode(SingleAction.Stocks, _loginRepositories.CompanyId, entity.StockId); var subStockCode = _singleDataService.GetSingleDataCode(SingleAction.Stocks, _loginRepositories.CompanyId, entity.SubStockId); var res = await _erpService.BillQueryForStock(); var stock = res.Data.FirstOrDefault(f => f.Code == stockCode);//需要根据单点code搜索 var subStock = res.Data.FirstOrDefault(f => f.Code == subStockCode);//需要根据单点code搜索 if (stock == null || subStock == null) return Result.ReFailure(ResultCodes.ErpStockNoData); //组装dto #region 组装dto List detils = new List(); detils.Add(new ErpTakeStockDetailsSaveDto() { FOwnerid = stock.OrgId.ToString(), FKeeperId = stock.OrgId.ToString(), MaterialId = entity.MaterialId.ToString(), UnitId = entity.UnitId.ToString(), StockId = stock.Id.ToString(), SubStockId = subStock.Id.ToString(), BeforeQty = entity.BeforeQty, AfterQty = entity.AfterQty, FinalQty = entity.FinalQty, Fnote = "" }); ErpTakeStockSaveDto dto = new ErpTakeStockSaveDto() { BillNo = entity.BillNo, StockOrgId = stock.OrgId.ToString(), Type = "PY01_SYS", Date = entity.Date, Details = detils }; #endregion return await _erpService.Sync(dto, FormIdParam.STK_StockCountGain.ToString()); } /// /// 盘亏 /// /// /// public async Task Loss(TakeStock entity) { //获取金蝶仓库仓位编码 var stockCode = _singleDataService.GetSingleDataCode(SingleAction.Stocks, _loginRepositories.CompanyId, entity.StockId); var subStockCode = _singleDataService.GetSingleDataCode(SingleAction.Stocks, _loginRepositories.CompanyId, entity.SubStockId); var res = await _erpService.BillQueryForStock(); var stock = res.Data.FirstOrDefault(f => f.Code == stockCode);//需要根据单点code搜索 var subStock = res.Data.FirstOrDefault(f => f.Code == subStockCode);//需要根据单点code搜索 if (stock == null || subStock == null) return Result.ReFailure(ResultCodes.ErpStockNoData); //组装dto #region 组装dto List detils = new List(); detils.Add(new ErpTakeStockDetailsSaveDto() { FOwnerid = stock.OrgId.ToString(), FKeeperId = stock.OrgId.ToString(), MaterialId = entity.MaterialId.ToString(), UnitId = entity.UnitId.ToString(), StockId = stock.Id.ToString(), SubStockId = subStock.Id.ToString(), BeforeQty = entity.BeforeQty, AfterQty = entity.AfterQty, FinalQty = entity.FinalQty, Fnote = "" }); ErpTakeStockSaveDto dto = new ErpTakeStockSaveDto() { BillNo = entity.BillNo, StockOrgId = stock.OrgId.ToString(), Type = "PK01_SYS", Date = entity.Date, Details = detils }; #endregion return await _erpService.Sync(dto, FormIdParam.STK_StockCountLoss.ToString()); } } }