diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 4c6cc2f1..4ac66be2 100644 Binary files a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 and b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 differ diff --git a/src/WMS.Web.Domain/Entitys/TakeStock.cs b/src/WMS.Web.Domain/Entitys/TakeStock.cs index 44e5008c..38d9438a 100644 --- a/src/WMS.Web.Domain/Entitys/TakeStock.cs +++ b/src/WMS.Web.Domain/Entitys/TakeStock.cs @@ -41,51 +41,6 @@ namespace WMS.Web.Domain.Entitys [Column("SuccessSync")] public SyncStatus SuccessSync { get; set; } = SyncStatus.Fail; /// - /// 箱Id - /// - [Column("BoxId")] - public int BoxId { get; set; } - /// - /// 物料ID - /// - [Column("MaterialId")] - public int MaterialId { get; set; } - /// - /// 组织编码 - /// - [Column("OrgCode")] - public string OrgCode { get; set; } - /// - /// 仓库 - /// - [Column("StockCode")] - public string StockCode { get; set; } - /// - /// 仓位 - /// - [Column("SubStockId")] - public int SubStockId { get; set; } - /// - /// 子仓库(跟金蝶交互字段) - /// - [Column("Erp_SubStockId")] - public int Erp_SubStockId { get; set; } - /// - /// 系统库存 - /// - [Column("BeforeQty")] - public decimal BeforeQty { get; set; } - /// - /// 盘点数量 - /// - [Column("AfterQty")] - public decimal AfterQty { get; set; } - /// - /// 盈亏数量 - /// - [Column("FinalQty")] - public decimal FinalQty { get; set; } - /// /// 盘点结果类型:1为盘盈,2位盘亏 /// 盘点数量-系统库存 大于0为盘盈 小于0为盘亏 /// @@ -102,16 +57,16 @@ namespace WMS.Web.Domain.Entitys [Column("ErpSyncId")] public string ErpSyncId { get; set; } /// - /// 序列号 + /// 明细 /// - [Column("SerialNumbers")] - public List SerialNumbers { get; set; } = new List(); + public List Details { get; set; } = new List(); /// /// 创建 /// /// - public void Create(int creatorId) + public void Create(int creatorId, TakeStockType resultType) { + this.ResultType = resultType; this.CreatorId = creatorId; this.Date = DateTime.Now; } diff --git a/src/WMS.Web.Domain/Entitys/TakeStockDetails.cs b/src/WMS.Web.Domain/Entitys/TakeStockDetails.cs index 7a8b20ed..92228dba 100644 --- a/src/WMS.Web.Domain/Entitys/TakeStockDetails.cs +++ b/src/WMS.Web.Domain/Entitys/TakeStockDetails.cs @@ -36,39 +36,44 @@ namespace WMS.Web.Domain.Entitys [Column("MaterialId")] public int MaterialId { get; set; } /// - /// 仓库ID + /// 组织编码 /// - [Column("StockId")] - public int StockId { get; set; } + [Column("OrgCode")] + public string OrgCode { get; set; } /// - /// 仓位ID + /// 仓库 + /// + [Column("StockCode")] + public string StockCode { get; set; } + /// + /// 仓位 /// [Column("SubStockId")] public int SubStockId { get; set; } /// - /// 盘点前数量(wms系统数量) + /// 子仓库(跟金蝶交互字段) + /// + [Column("Erp_SubStockId")] + public int Erp_SubStockId { get; set; } + /// + /// 系统库存 /// [Column("BeforeQty")] public decimal BeforeQty { get; set; } /// - /// 盘点实际数量(实际仓库数量) + /// 盘点数量 /// [Column("AfterQty")] public decimal AfterQty { get; set; } /// - /// 盘点后数量 + /// 盈亏数量 /// [Column("FinalQty")] public decimal FinalQty { get; set; } /// - /// 盘点结果类型:1为盘盈,2位盘亏 + /// 序列号 /// - [Column("ResultType")] - public TakeStockType ResultType { get; set; } = TakeStockType.Profit; - /// - /// 备注 - /// - [Column("Remark")] - public string Remark { get; set; } + [Column("SerialNumbers")] + public List SerialNumbers { get; set; } = new List(); } } diff --git a/src/WMS.Web.Domain/Mappers/TakeStockMapper.cs b/src/WMS.Web.Domain/Mappers/TakeStockMapper.cs index 3f0d5d11..56eca7da 100644 --- a/src/WMS.Web.Domain/Mappers/TakeStockMapper.cs +++ b/src/WMS.Web.Domain/Mappers/TakeStockMapper.cs @@ -15,12 +15,9 @@ namespace WMS.Web.Domain.Mappers CreateMap(); CreateMap() - .ForMember(x => x.ResultType, ops => ops.MapFrom(x => (x.AfterQty - x.BeforeQty) > 0 ? TakeStockType.Profit : TakeStockType.Loss)) - .ForMember(x => x.FinalQty, ops => ops.MapFrom(x => Math.Abs(x.AfterQty - x.BeforeQty))); - CreateMap() - .ForMember(x => x.ResultType, ops => ops.MapFrom(x => (x.AfterQty - x.BeforeQty) > 0 ? TakeStockType.Profit : TakeStockType.Loss)) - .ForMember(x => x.FinalQty, ops => ops.MapFrom(x => Math.Abs(x.AfterQty - x.BeforeQty))) - .ForMember(x => x.Erp_SubStockId, ops => ops.MapFrom(x => x.Erp_SubStockId ?? 0)); + .ForMember(x => x.FinalQty, ops => ops.MapFrom(x => Math.Abs(x.AfterQty - x.BeforeQty))) + .ForMember(x => x.Erp_SubStockId, ops => ops.MapFrom(x => x.Erp_SubStockId ?? 0)); + CreateMap(); } } } diff --git a/src/WMS.Web.Domain/Services/TakeStockService.cs b/src/WMS.Web.Domain/Services/TakeStockService.cs index b0928646..16f7f6e9 100644 --- a/src/WMS.Web.Domain/Services/TakeStockService.cs +++ b/src/WMS.Web.Domain/Services/TakeStockService.cs @@ -64,14 +64,36 @@ namespace WMS.Web.Domain.Services /// public async Task Save(List dto, LoginInDto loginInfo) { - _logger.LogInformation($"盘点保存:{JsonConvert.SerializeObject(dto)} 盘点人:{loginInfo.UserInfo.StaffId}" ); - List list = _mapper.Map>(dto); - foreach (var entity in list) + _logger.LogInformation($"盘点保存:{JsonConvert.SerializeObject(dto)} 盘点人:{loginInfo.UserInfo.StaffId}"); + List list = new List(); + var profitList = dto.Where(w => w.AfterQty >= w.BeforeQty).ToList();//盘盈 + var lossList = dto.Where(w => w.AfterQty < w.BeforeQty).ToList();//盘亏 + + if (profitList.Count() > 0) { - var subStock = await _transactionRepositories.GetSubUcStockAsync(entity.SubStockId, loginInfo.UserInfo.CompanyId); - entity.Create(loginInfo.UserInfo.StaffId); - entity.OrgCode = subStock?.ErpOrgCode; - entity.StockCode = subStock?.StockCode; + TakeStock takeStock = new TakeStock(); + takeStock.Create(loginInfo.UserInfo.StaffId, TakeStockType.Profit); + takeStock.Details = _mapper.Map>(dto); + foreach(var d in takeStock.Details) + { + var subStock = await _transactionRepositories.GetSubUcStockAsync(d.SubStockId, loginInfo.UserInfo.CompanyId); + d.OrgCode = subStock?.ErpOrgCode; + d.StockCode = subStock?.StockCode; + } + list.Add(takeStock); + } + if (lossList.Count() > 0) + { + TakeStock takeStock = new TakeStock(); + takeStock.Create(loginInfo.UserInfo.StaffId, TakeStockType.Loss); + takeStock.Details = _mapper.Map>(dto); + foreach (var d in takeStock.Details) + { + var subStock = await _transactionRepositories.GetSubUcStockAsync(d.SubStockId, loginInfo.UserInfo.CompanyId); + d.OrgCode = subStock?.ErpOrgCode; + d.StockCode = subStock?.StockCode; + } + list.Add(takeStock); } IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); @@ -125,33 +147,38 @@ namespace WMS.Web.Domain.Services { //获取金蝶仓库仓位编码 //var stockCode = _singleDataService.GetSingleDataCode(SingleAction.Stocks, _loginRepositories.CompanyId, entity.StockId); - var subStockCode = _singleDataService.GetSingleDataCode(SingleAction.Stocks, _loginRepositories.CompanyId, entity.SubStockId); + //var subStockCode = _singleDataService.GetSingleDataCode(SingleAction.Stocks, _loginRepositories.CompanyId, entity.SubStockId); var materials_result = await _erpService.BillQueryForMaterial(); var materials = materials_result.Data.ToList(); - var unitNumber = _erpBasicDataExtendService.GetMaterialUnitNumber(materials, entity.MaterialId); + var res = await _erpService.BillQueryForStock(); var resSub = await _erpService.BillQueryForSubStock(); - var stock = res.Data.FirstOrDefault(f => f.Code == entity.StockCode);//需要根据单点code搜索 - var subStock = resSub.Data.FirstOrDefault(f => f.Code == subStockCode);//需要根据单点code搜索 + var stock = res.Data.FirstOrDefault(f => f.Code == entity.Details[0].StockCode);//需要根据单点code搜索 if (stock == null) return Result.ReFailure(ResultCodes.ErpStockNoData); //组装dto #region 组装dto //子仓库 ORICO_JD:1000008 GD:1000005 HD:1000007 AD:1000004 List detils = new List(); - detils.Add(new ErpTakeStockDetailsSaveDto() + foreach (var d in entity.Details) { - FOwnerid = new ErpNumberDto(stock.OrgCode.ToString()), - FKeeperId = new ErpNumberDto(stock.OrgCode.ToString()), - MaterialId = new ErpNumberDto(_erpBasicDataExtendService.GetMaterialNumber(materials, entity.MaterialId)), - UnitId = new ErpNumberDto(unitNumber), //物料带出来 - StockId = new ErpNumberDto(stock.Code), - SubStockId = new ErpSubStockDto(stock.Code, resSub.Data.FirstOrDefault(f => f.Id == entity.Erp_SubStockId)?.Code), - BeforeQty = entity.BeforeQty, - AfterQty = entity.AfterQty, - FinalQty = entity.ResultType == TakeStockType.Profit ? entity.FinalQty : 0, - LossQty = entity.ResultType == TakeStockType.Loss ? entity.FinalQty : 0, - Fnote = entity.ResultType == TakeStockType.Loss ? "wms盘亏单同步" : "wms盘盈单同步" - }); + var subStockCode = _singleDataService.GetSingleDataCode(SingleAction.Stocks, _loginRepositories.CompanyId, d.SubStockId); + var subStock = resSub.Data.FirstOrDefault(f => f.Code == subStockCode);//需要根据单点code搜索 + var unitNumber = _erpBasicDataExtendService.GetMaterialUnitNumber(materials, d.MaterialId); + detils.Add(new ErpTakeStockDetailsSaveDto() + { + FOwnerid = new ErpNumberDto(stock.OrgCode.ToString()), + FKeeperId = new ErpNumberDto(stock.OrgCode.ToString()), + MaterialId = new ErpNumberDto(_erpBasicDataExtendService.GetMaterialNumber(materials, d.MaterialId)), + UnitId = new ErpNumberDto(unitNumber), //物料带出来 + StockId = new ErpNumberDto(stock.Code), + SubStockId = new ErpSubStockDto(stock.Code, resSub.Data.FirstOrDefault(f => f.Id == d.Erp_SubStockId)?.Code), + BeforeQty = d.BeforeQty, + AfterQty = d.AfterQty, + FinalQty = entity.ResultType == TakeStockType.Profit ? d.FinalQty : 0, + LossQty = entity.ResultType == TakeStockType.Loss ? d.FinalQty : 0, + Fnote = entity.ResultType == TakeStockType.Loss ? "wms盘亏单同步" : "wms盘盈单同步" + }); + } ErpTakeStockSaveDto dto = new ErpTakeStockSaveDto() { BillNo = entity.BillNo, diff --git a/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs b/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs index 94b9f492..ef38acf1 100644 --- a/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs +++ b/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs @@ -161,19 +161,19 @@ namespace WMS.Web.Repositories.Configuration ent.ToTable("t_wms_takestock"); ent.HasKey(x => x.Id); - //ent.HasMany(p => p.Details) - // .WithOne() - // .HasForeignKey(p => p.Fid) - // .OnDelete(DeleteBehavior.Cascade); - - ent.Property(f => f.SerialNumbers).HasConversion( - v => JsonConvert.SerializeObject(v), - v => JsonConvert.DeserializeObject>(v)); + ent.HasMany(p => p.Details) + .WithOne() + .HasForeignKey(p => p.Fid) + .OnDelete(DeleteBehavior.Cascade); }); builder.Entity(ent => { ent.ToTable("t_wms_takestock_details"); ent.HasKey(x => x.Id); + + ent.Property(f => f.SerialNumbers).HasConversion( + v => JsonConvert.SerializeObject(v), + v => JsonConvert.DeserializeObject>(v)); }); #endregion diff --git a/src/WMS.Web.Repositories/TakeStockRepositories.cs b/src/WMS.Web.Repositories/TakeStockRepositories.cs index 987bb346..3d37cc85 100644 --- a/src/WMS.Web.Repositories/TakeStockRepositories.cs +++ b/src/WMS.Web.Repositories/TakeStockRepositories.cs @@ -173,44 +173,44 @@ namespace WMS.Web.Repositories return (new List(), 0); var subStocks = subStock_result.Data.ToList(); - var query = _context.TakeStock - //.GroupJoin(_context.TakeStock, detail => detail.Fid, order => order.Id, (detail, orders) => new { detail, orders }) - //.SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order }) - .OrderByDescending(o => o.Id) + var query = _context.TakeStockDetails + .GroupJoin(_context.TakeStock, detail => detail.Fid, order => order.Id, (detail, orders) => new { detail, orders }) + .SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order }) + .OrderByDescending(o => o.detail.Id) .Where(adv => 1 == 1); if (dto.ResultType != null) - query = query.Where(w => w.ResultType == (TakeStockType)dto.ResultType); + query = query.Where(w => w.order.ResultType == (TakeStockType)dto.ResultType); if (!string.IsNullOrEmpty(dto.BillNo)) - query = query.Where(w => EF.Functions.Like(w.BillNo, "%" + dto.BillNo + "%")); + query = query.Where(w => EF.Functions.Like(w.order.BillNo, "%" + dto.BillNo + "%")); if (!string.IsNullOrEmpty(dto.StockCode)) - query = query.Where(w => w.StockCode == dto.StockCode); + query = query.Where(w => w.detail.StockCode == dto.StockCode); if (dto.DateBeginDate != null) - query = query.Where(w => w.Date >= dto.DateBeginDate); + query = query.Where(w => w.order.Date >= dto.DateBeginDate); if (dto.DateEndDate != null) - query = query.Where(w => w.Date <= dto.DateEndDate); + query = query.Where(w => w.order.Date <= dto.DateEndDate); //组装 int total = await query.CountAsync(); var list = await query.Select(s => new TakeStockQueryInfoResponse() { #region dto组装 - Id = s.Id, - BillNo = s.BillNo, - Unit = _erpBasicDataExtendService.GetMaterialUnitName(materials, s.MaterialId), - Stock = _singleDataService.GetSingleData(SingleAction.StocksJoinOrgCode, _loginRepositories.CompanyId, s.StockCode + s.OrgCode), - SubStock = _singleDataService.GetSingleData(SingleAction.SubStocks, _loginRepositories.CompanyId, s.SubStockId), - Erp_SubStock= _erpBasicDataExtendService.GetStockName(subStocks, s.Erp_SubStockId), - MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.MaterialId), - MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, s.MaterialId), - Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.MaterialId), - BeforeQty = s.BeforeQty, - AfterQty = s.AfterQty, - FinalQty = s.FinalQty, - ResultType = s.ResultType.GetRemark(), - Remark = s.Remark, - Creator = _singleDataService.GetSingleData(SingleAction.Staffs, _loginRepositories.CompanyId, s.CreatorId), - Date = s.Date.DateToStringSeconds(), - SuccessSync = s.SuccessSync== SyncStatus.Success ? "成功":"失败", + Id = s.order.Id, + BillNo = s.order.BillNo, + Unit = _erpBasicDataExtendService.GetMaterialUnitName(materials, s.detail.MaterialId), + Stock = _singleDataService.GetSingleData(SingleAction.StocksJoinOrgCode, _loginRepositories.CompanyId, s.detail.StockCode + s.detail.OrgCode), + SubStock = _singleDataService.GetSingleData(SingleAction.SubStocks, _loginRepositories.CompanyId, s.detail.SubStockId), + Erp_SubStock= _erpBasicDataExtendService.GetStockName(subStocks, s.detail.Erp_SubStockId), + MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.detail.MaterialId), + MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, s.detail.MaterialId), + Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.detail.MaterialId), + BeforeQty = s.detail.BeforeQty, + AfterQty = s.detail.AfterQty, + FinalQty = s.detail.FinalQty, + ResultType = s.order.ResultType.GetRemark(), + Remark = s.order.Remark, + Creator = _singleDataService.GetSingleData(SingleAction.Staffs, _loginRepositories.CompanyId, s.order.CreatorId), + Date = s.order.Date.DateToStringSeconds(), + SuccessSync = s.order.SuccessSync== SyncStatus.Success ? "成功":"失败", #endregion }).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync();