diff --git a/src/WMS.Web.Api/Controllers/InStockController.cs b/src/WMS.Web.Api/Controllers/InStockController.cs index fe65dd1e..96239e96 100644 --- a/src/WMS.Web.Api/Controllers/InStockController.cs +++ b/src/WMS.Web.Api/Controllers/InStockController.cs @@ -160,7 +160,7 @@ namespace WMS.Web.Api.Controllers if (loginInfo == null || loginInfo.UserInfo == null) return Result.ReFailure(ResultCodes.Token_Invalid_Error); - return await _inStockService.Sync(dto); + return await _inStockService.Sync(dto,loginInfo); } } } diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index bf002fee..b04d5435 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -775,6 +775,41 @@ 单据编码 + + + 修改采购入库单 + + + + + 单据Id + + + + + 明细 + + + + + 明细 + + + + + 明细Id + + + + + 采购订单明细Id + + + + + 数量 + + 下推 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index bca5cc5f..b9a13442 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -546,6 +546,11 @@ 仓位ID + + + ERP明细 + + 明细 @@ -570,6 +575,23 @@ 生成单据号 + + + 同步金蝶(成功) + + + + + + + + 同步金蝶(失败) + + + + + + wms入库单明细 @@ -625,6 +647,51 @@ 序列号集 + + + wms入库单ERP明细 + + + + + ID + + + + + 单据头ID + + + + + 对应金蝶的明细ID + + + + + 来源单号 + + + + + 物料ID + + + + + 数量 + + + + + 同步成功或者失败 默认是失败状态 + + + + + 同步到金蝶后金蝶的单据Id + + erp入库任务表 @@ -2037,6 +2104,21 @@ + + + 修改 + + + + + + + + 根据单据头id获取数据 + + + + 箱与任务单绑定(收货)关系表-仓储接口 @@ -2466,11 +2548,12 @@ 入库单服务接口 - + - 同步 + 同步金蝶 + @@ -2797,6 +2880,13 @@ + + + erp:查询采购入库单信息 + + + + erp:单据查询-采购入库单 @@ -3736,11 +3826,12 @@ 入库单服务 - + 同步-金蝶 + @@ -3819,6 +3910,23 @@ + + + 采购:同步金蝶 + + + + + + + + 下推 + + + + + + 入库任务单-服务 diff --git a/src/WMS.Web.Core/Dto/Erp/ErpPurchaseInStockSaveDto.cs b/src/WMS.Web.Core/Dto/Erp/ErpPurchaseInStockSaveDto.cs new file mode 100644 index 00000000..1cbc5b21 --- /dev/null +++ b/src/WMS.Web.Core/Dto/Erp/ErpPurchaseInStockSaveDto.cs @@ -0,0 +1,53 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Erp +{ + /// + /// 修改采购入库单 + /// + public class ErpPurchaseInStockSaveDto + { + public ErpPurchaseInStockSaveDto() { } + public ErpPurchaseInStockSaveDto(string id) + { + this.Id = id; + } + + /// + /// 单据Id + /// + [JsonProperty("FID")] + public string Id { get; set; } + + /// + /// 明细 + /// + [JsonProperty("FEntity")] + public List Details { get; set; } = new List(); + } + + /// + /// 明细 + /// + public class ErpPurchaseInStockDetailsSaveDto + { + /// + /// 明细Id + /// + [JsonProperty("FENTRYID")] + public string DetailId { get; set; } + /// + /// 采购订单明细Id + /// + [JsonIgnore] + public string PurchaseDetailId { get; set; } + /// + /// 数量 + /// + [JsonProperty("FRealQty")] + public decimal Qty { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/InStock/SaveInStockDetailsRequest.cs b/src/WMS.Web.Core/Dto/InStock/SaveInStockDetailsRequest.cs index bf84e36c..d1eca5f2 100644 --- a/src/WMS.Web.Core/Dto/InStock/SaveInStockDetailsRequest.cs +++ b/src/WMS.Web.Core/Dto/InStock/SaveInStockDetailsRequest.cs @@ -33,28 +33,6 @@ namespace WMS.Web.Core.Dto.InStock /// [Required(ErrorMessage = "供应商不能为空")] public int SupplierId { get; set; } - ///// - ///// 组织 - ///// - //[Required(ErrorMessage = "组织不能为空")] - //public int OrgId { get; set; } - - ///// - ///// 组织编码:仓位-仓库-带出 - ///// - //[Required(ErrorMessage = "组织不能为空")] - //public string OrgCode { get; set; } - - ///// - ///// 仓库编码 - ///// - //[Required(ErrorMessage = "仓库不能为空")] - //public string StockCode { get; set; } - ///// - ///// 仓位ID - ///// - //[Required(ErrorMessage = " 仓位不能为空")] - //public int SubStockId { get; set; } /// /// 对应金蝶的明细ID diff --git a/src/WMS.Web.Domain/Entitys/InStock.cs b/src/WMS.Web.Domain/Entitys/InStock.cs index 2cb0889f..b80ae6c1 100644 --- a/src/WMS.Web.Domain/Entitys/InStock.cs +++ b/src/WMS.Web.Domain/Entitys/InStock.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; using System.Text; using WMS.Web.Domain.Values; @@ -73,6 +74,12 @@ namespace WMS.Web.Domain.Entitys /// 仓位ID /// public int SubStockId { get; set; } + + /// + /// ERP明细 + /// + public List ErpDetails { get; set; } = new List(); + /// /// 明细 /// @@ -125,5 +132,44 @@ namespace WMS.Web.Domain.Entitys } this.BillNo = "RK" + idStr; } + + /// + /// 同步金蝶(成功) + /// + /// + /// + /// + public void SyncSuccess(int erpDetailId, int operateId, string erpBillNo) + { + var erpd = this.ErpDetails.Where(s=>s.ErpDetailId==erpDetailId).FirstOrDefault(); + erpd.SuccessSync = SyncStatus.Success; + erpd.ErpSyncBillNo = erpBillNo; + + //所有erp明细同步成功才是整个单据成功 + if (this.ErpDetails.Where(w => w.SuccessSync == SyncStatus.Success).Count() == this.Details.Count()) + { + this.SuccessSync = SyncStatus.Success; + this.Remark = ""; + } + this.OperateId = operateId; + this.SyncTime = DateTime.Now; + } + + /// + /// 同步金蝶(失败) + /// + /// + /// + /// + /// + public void SyncFail(string remark, int erpDetailId, int operateId, SyncStatus syncStatus) + { + var erpd = this.ErpDetails.FirstOrDefault(w => w.ErpDetailId == erpDetailId); + erpd.SuccessSync = syncStatus; + this.SuccessSync = SyncStatus.Fail; + this.Remark = remark; + this.OperateId = operateId; + this.SyncTime = DateTime.Now; + } } } diff --git a/src/WMS.Web.Domain/Entitys/InStockDetails.cs b/src/WMS.Web.Domain/Entitys/InStockDetails.cs index aff29acc..27ea0948 100644 --- a/src/WMS.Web.Domain/Entitys/InStockDetails.cs +++ b/src/WMS.Web.Domain/Entitys/InStockDetails.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Text; +using WMS.Web.Core; +using WMS.Web.Domain.Values; namespace WMS.Web.Domain.Entitys { @@ -10,12 +12,12 @@ namespace WMS.Web.Domain.Entitys /// [Serializable] [Table("t_wms_instock_details")] - public class InStockDetails + public class InStockDetails : EntityBase { /// /// ID /// - public int Id { get; set; } + public override int Id { get; set; } /// /// 单据头ID /// @@ -43,30 +45,14 @@ namespace WMS.Web.Domain.Entitys /// 供应商ID /// public int SupplierId { get; set; } - ///// - ///// 组织ID - ///// - //public int OrgId { get; set; } - ///// - ///// 组织编码 - ///// - //public string OrgCode { get; set; } /// /// 物料ID /// public int MaterialId { get; set; } - ///// - ///// 仓库编码 - ///// - //public string StockCode { get; set; } - ///// - ///// 仓位ID - ///// - //public int SubStockId { get; set; } /// /// 数量 /// - public decimal Qty { get; set; } + public decimal Qty { get; set; } /// /// 序列号集 diff --git a/src/WMS.Web.Domain/Entitys/InStockErpDetails.cs b/src/WMS.Web.Domain/Entitys/InStockErpDetails.cs new file mode 100644 index 00000000..2616a1b4 --- /dev/null +++ b/src/WMS.Web.Domain/Entitys/InStockErpDetails.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; +using WMS.Web.Core; +using WMS.Web.Domain.Values; + +namespace WMS.Web.Domain.Entitys +{ + /// + /// wms入库单ERP明细 + /// + [Serializable] + [Table("t_wms_instock_erp_details")] + public class InStockErpDetails : EntityBase + { + /// + /// ID + /// + public override int Id { get; set; } + + /// + /// 单据头ID + /// + public int Fid { get; set; } + + /// + /// 对应金蝶的明细ID + /// + public int ErpDetailId { get; set; } + + /// + /// 来源单号 + /// + public string SourceBillNo { get; set; } + + /// + /// 物料ID + /// + public int MaterialId { get; set; } + /// + /// 数量 + /// + public decimal Qty { get; set; } + + /// + /// 同步成功或者失败 默认是失败状态 + /// + public SyncStatus SuccessSync { get; set; } = SyncStatus.Fail; + + /// + /// 同步到金蝶后金蝶的单据Id + /// + public string ErpSyncBillNo { get; set; } + + } +} diff --git a/src/WMS.Web.Domain/IService/IInStockService.cs b/src/WMS.Web.Domain/IService/IInStockService.cs index 5c4d0985..d70229f8 100644 --- a/src/WMS.Web.Domain/IService/IInStockService.cs +++ b/src/WMS.Web.Domain/IService/IInStockService.cs @@ -19,11 +19,12 @@ namespace WMS.Web.Domain.IService { /// - /// 同步 + /// 同步金蝶 /// /// + /// /// - Task Sync(OperateRequest dto); + Task Sync(OperateRequest dto, LoginInDto loginInfo); /// /// 收货 diff --git a/src/WMS.Web.Domain/IService/Public/IErpService.cs b/src/WMS.Web.Domain/IService/Public/IErpService.cs index 90857a0d..981a0b83 100644 --- a/src/WMS.Web.Domain/IService/Public/IErpService.cs +++ b/src/WMS.Web.Domain/IService/Public/IErpService.cs @@ -20,6 +20,13 @@ namespace WMS.Web.Domain.IService.Public /// Task> BillQueryForBillType(); + /// + /// erp:查询采购入库单信息 + /// + /// + /// + Task> BillQueryForPurchaseInStock(string id); + /// /// erp:单据查询-采购入库单 /// diff --git a/src/WMS.Web.Domain/Infrastructure/IInStockRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IInStockRepositories.cs index 717308d3..de43c12e 100644 --- a/src/WMS.Web.Domain/Infrastructure/IInStockRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IInStockRepositories.cs @@ -50,5 +50,20 @@ namespace WMS.Web.Domain.Infrastructure /// /// Task AddRangeTotalDetails(List entitys, bool isTransaction = true); + + /// + /// 修改 + /// + /// + /// + /// + Task Update(InStock entity, bool isTransaction = true); + + /// + /// 根据单据头id获取数据 + /// + /// + /// + Task> GetList(List ids); } } diff --git a/src/WMS.Web.Domain/Services/InStockService.cs b/src/WMS.Web.Domain/Services/InStockService.cs index 1a87f36d..59e906d6 100644 --- a/src/WMS.Web.Domain/Services/InStockService.cs +++ b/src/WMS.Web.Domain/Services/InStockService.cs @@ -1,5 +1,7 @@ using AutoMapper; using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; @@ -21,6 +23,7 @@ using WMS.Web.Domain.IService; using WMS.Web.Domain.IService.Public; using WMS.Web.Domain.Mappers; using WMS.Web.Domain.Values; +using WMS.Web.Domain.Values.Erp; namespace WMS.Web.Domain.Services { @@ -43,10 +46,12 @@ namespace WMS.Web.Domain.Services private readonly IInStockTaskRepositories _inStockTaskRepositories; private readonly IErpBasicDataExtendService _erpBasicDataExtendService; private readonly IBoxInventoryRepositories _boxInventoryRepositories; + private readonly ILogger _logger; public InStockService(IMapper mapper, ISerialNumbersRepositories serialNumbersRepositories, IErpService erpService, IBoxInventoryService boxInventoryService, ISerialNumberService serialNumberService, ILoginService loginService, IBoxRepositories boxRepositories, IBasicsRepositories basicsRepositories, IErpBasicDataExtendService erpBasicDataExtendService, IChangeMoveBoxService changeMoveBoxService, IInStockTaskBoxRepositories inStockTaskBoxRepositories, - IInStockRepositories inStockRepositories, IInStockTaskRepositories inStockTaskRepositories, IBoxInventoryRepositories boxInventoryRepositories) + IInStockRepositories inStockRepositories, IInStockTaskRepositories inStockTaskRepositories, IBoxInventoryRepositories boxInventoryRepositories, ILogger logger) { + _logger = logger; _mapper = mapper; _erpService = erpService; _loginService = loginService; @@ -67,9 +72,15 @@ namespace WMS.Web.Domain.Services /// 同步-金蝶 /// /// + /// /// - public async Task Sync(OperateRequest dto) + public async Task Sync(OperateRequest dto, LoginInDto loginInfo) { + var list = await _inStockRepositories.GetList(dto.Ids); + foreach (var entity in list) + { + await this.PurchaseInStock(entity, loginInfo); + } return Result.ReSuccess(); } @@ -235,6 +246,15 @@ namespace WMS.Web.Domain.Services entity.Details = _mapper.Map>(dto.Details); entity.Create(loginInfo.UserInfo.StaffId); + //组装:erp明细 + entity.ErpDetails = dto.Details.GroupBy(x => new { x.ErpDetailId, x.MaterialId, x.SourceBillNo }) + .Select(x => new InStockErpDetails + { + ErpDetailId = x.Key.ErpDetailId, + MaterialId = x.Key.MaterialId, + SourceBillNo = x.Key.SourceBillNo, + Qty = x.Sum(t => t.Qty) + }).ToList(); //序列号集:箱里面的 var serialNumbers = await _serialNumbersRepositories.GetEntityListByBoxIds(dto.Details.GroupBy(x => x.BoxId).Select(x => x.Key).ToList()); @@ -270,7 +290,7 @@ namespace WMS.Web.Domain.Services var isSuccess = await _inStockRepositories.AddRangeTotalDetails(totalDetails, isTransaction); if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); - //同步金蝶后,反写任务单的已交数量 + //反写任务单的已交数量 var taskIds = dto.Details.GroupBy(x => x.TaskId).Select(x => x.Key).ToList(); var tasks = await _inStockTaskRepositories.GetList(taskIds); if (tasks != null && tasks.Count != 0) @@ -305,6 +325,10 @@ namespace WMS.Web.Domain.Services if (!boxInventoryResult.IsSuccess) return boxInventoryResult; + //同步金蝶 + if (entity.Type == InstockType.Purchase) + await this.PurchaseInStock(entity, loginInfo); + return Result.ReSuccess(); @@ -685,6 +709,91 @@ namespace WMS.Web.Domain.Services return Result.ReSuccess(response); } + /// + /// 采购:同步金蝶 + /// + /// + /// + /// + private async Task PurchaseInStock(InStock entity, LoginInDto loginInfo) + { + if (entity.Type != InstockType.Purchase) return Result.ReSuccess(); + if (entity.SuccessSync == SyncStatus.Success) return Result.ReSuccess(); + var erpDetails = entity.ErpDetails.Where(w => w.SuccessSync == SyncStatus.Fail).ToList(); + foreach (var s in erpDetails) + { + var erp_details = entity.ErpDetails + .Where(w => w.SourceBillNo.Equals(s)).Select(s => s.ErpDetailId).ToList(); + var erpDto = new ErpPushDto() + { + RuleId = "PUR_PurchaseOrder-STK_InStock",//转换规则内码 采购订单下推采购入库单 + FormId = FormIdParam.PUR_PurchaseOrder.ToString(), + TargetFormId = FormIdParam.STK_InStock.ToString(), + DetailsId = s.ErpDetailId.ToString() + }; + //下推金蝶 + var res = await this.Push(erpDto, s, entity.BillNo); + if (res.result.IsSuccess) + entity.SyncSuccess(s.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.erpBillNo); + else + entity.SyncFail(res.result.Message, s.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.syncStatus); + } + //最好一条一条执行,否则执行失败 但是金蝶那边又同步成功 就会造成数据比价乱 + var isSuccess = await _inStockRepositories.Update(entity, true); + if (entity == null) return Result.ReFailure(ResultCodes.DateWriteError); + return Result.ReSuccess(); + } + + /// + /// 下推 + /// + /// + /// + /// + /// + private async Task<(Result result, SyncStatus syncStatus, string erpBillNo)> Push(ErpPushDto dto, InStockErpDetails erpDetail, string billNo) + { + var res = await _erpService.Push(dto); + if (!res.IsSuccess) + { + _logger.LogInformation($"入库单->下推失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{res.Message}"); + return (Result.ReFailure(res.Message, res.Status), SyncStatus.Fail, ""); + } + string id = res.Data; + var resPurchaseInStock = await _erpService.BillQueryForPurchaseInStock(id); + var purchaseInStock = resPurchaseInStock.Data; + purchaseInStock.Details[0].Qty = erpDetail.Qty; + //{"Id":12709885,"Number":"XSCKD10629570","DIndex":0} + + string formId = dto.TargetFormId.ToString(); + _logger.LogInformation($"入库单->开始同步金蝶 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 数据: {JsonConvert.SerializeObject(dto)}"); + var res_s = await _erpService.Save(purchaseInStock, formId); + if (!res_s.IsSuccess) + { + _logger.LogInformation($"入库单->修改数量失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{res_s.Message}"); + return (Result.ReFailure(res_s.Message, res_s.Status), SyncStatus.SubmitFail, id); + } + //提交 + _logger.LogInformation($"入库单->保存成功 开始提交 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}"); + ErpOperateDto o_dto = new ErpOperateDto(formId, res_s.Data);//res_s.Data + var resSubmit = await _erpService.Submit(o_dto, formId); + if (!resSubmit.IsSuccess) + { + _logger.LogInformation($"入库单->提交失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{resSubmit.Message}"); + return (resSubmit, SyncStatus.SubmitFail, o_dto.Numbers.First()); + } + //审核 + _logger.LogInformation($"入库单->提交成功 开始审核 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}"); + resSubmit = await _erpService.Audit(o_dto, formId); + if (!resSubmit.IsSuccess) + { + _logger.LogInformation($"入库单->审核失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{resSubmit.Message}"); + return (resSubmit, SyncStatus.CheckFail, o_dto.Numbers.First()); + } + _logger.LogInformation($"同步金蝶成功"); + return (Result.ReSuccess(), SyncStatus.Success, o_dto.Numbers.First()); + } + } } diff --git a/src/WMS.Web.Domain/Services/Public/ErpService.cs b/src/WMS.Web.Domain/Services/Public/ErpService.cs index ce4d56d1..1a899449 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpService.cs @@ -2092,6 +2092,48 @@ namespace WMS.Web.Domain.Services.Public } } + public async Task> BillQueryForPurchaseInStock(string id) + { + try + { + //1.先登录金蝶-拿到token + var token_result = await this.Init(); + if (!token_result.IsSuccess) + return Result.ReFailure(token_result); + + + //3.获取金蝶采购订单:拼接参数和条件 + var query = new ErpBillQueryDto(token_result.Data); + var param = new ErpBillQueryParamDto(FormIdParam.STK_InStock.ToString()); + param.FieldKeys = "FID,FInStockEntry_FEntryID,FRealQty"; + param.Limit = 10000; + param.FilterString = $"FID={id}"; + + query.Data = JsonConvert.SerializeObject(param); + var json = JsonConvert.SerializeObject(query); + + //4.请求查询接口 + var result_json = await _client.ExecuteBillQueryAsync(json); + var result = JsonConvert.DeserializeObject>>(result_json); + + //5.返回数据的组装 + var erp_list = new ErpPurchaseInStockSaveDto(id); + foreach (var item in result) + { + var lis = new ErpPurchaseInStockDetailsSaveDto(); + lis.DetailId = item[1]; + lis.Qty = Convert.ToDecimal(item[2]); + lis.PurchaseDetailId = ""; + erp_list.Details.Add(lis); + } + return Result.ReSuccess(erp_list); + } + catch (Exception ex) + { + return Result.ReFailure(ResultCodes.Erp_BillQuery_Error); + } + } + #endregion } } diff --git a/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs b/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs index b43a62e3..bafa3c12 100644 --- a/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs +++ b/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs @@ -187,6 +187,11 @@ namespace WMS.Web.Repositories.Configuration .WithOne() .HasForeignKey(p => p.Fid) .OnDelete(DeleteBehavior.Cascade); + + ent.HasMany(p => p.ErpDetails) + .WithOne() + .HasForeignKey(p => p.Fid) + .OnDelete(DeleteBehavior.Cascade); }); builder.Entity(ent => { @@ -200,6 +205,11 @@ namespace WMS.Web.Repositories.Configuration c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => (List)c.ToList())); }); + builder.Entity(ent => + { + ent.ToTable("t_wms_instock_erp_details"); + ent.HasKey(x => x.Id); + }); builder.Entity(ent => { ent.ToTable("t_wms_instock_total_details"); diff --git a/src/WMS.Web.Repositories/InStockRepositories.cs b/src/WMS.Web.Repositories/InStockRepositories.cs index 1c2d89ad..98310324 100644 --- a/src/WMS.Web.Repositories/InStockRepositories.cs +++ b/src/WMS.Web.Repositories/InStockRepositories.cs @@ -14,6 +14,7 @@ using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.Entitys; using WMS.Web.Domain.Infrastructure; using WMS.Web.Domain.IService.Public; +using WMS.Web.Domain.Mappers; using WMS.Web.Domain.Values; using WMS.Web.Domain.Values.Single; using WMS.Web.Repositories.Configuration; @@ -249,5 +250,55 @@ namespace WMS.Web.Repositories return false; } } + + /// + /// 修改 + /// + /// + /// + public async Task Update(InStock entity, bool isTransaction = true) + { + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _context.Database.BeginTransaction(); + try + { + var model = await _context.Instock + .AsNoTracking() + .Include(s => s.Details) + .FirstOrDefaultAsync(f => f.Id == entity.Id); + if (model == null) + return null; + _mapper.Map(entity, model); + //子集单独映射 + _mapper.ToMapList(entity.Details, model.Details); + await _context.SaveChangesAsync(); + if (_transaction != null) + _transaction.Commit(); + return model; + } + catch (Exception ex) + { + if (_transaction != null) + _transaction.Rollback(); + return null; + } + } + + /// + /// 根据单据头id获取数据 + /// + /// + /// + public async Task> GetList(List ids) + { + var res = await _context.Instock + .Include(s => s.Details) + .Include(s => s.ErpDetails) + .Where(f => ids.Contains(f.Id)) + .ToListAsync(); + + return res; + } } }