diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index e75e1233..0bcc4d8e 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -1091,7 +1091,7 @@ - + 同步金蝶(失败) @@ -1561,7 +1561,7 @@ - 同步成功或者失败 null 就是未同步 + 同步状态 @@ -1631,7 +1631,7 @@ - + 同步金蝶结果 @@ -2580,6 +2580,14 @@ + + + 获取物料基本单位id + + + + + 获取组织名称 @@ -3899,6 +3907,14 @@ + + + 获取物料基本单位Id + + + + + 获取组织名称 @@ -5578,6 +5594,26 @@ 获取仓位详情:根据仓位ID集合和公司ID + + + 同步金蝶状态 + + + + + 失败 + + + + + 成功 + + + + + 部分成功(数据保存成功,提交或者审核失败) + + 盘点单类型 diff --git a/src/WMS.Web.Domain/Entitys/OutStock.cs b/src/WMS.Web.Domain/Entitys/OutStock.cs index c2d2d348..3390fea1 100644 --- a/src/WMS.Web.Domain/Entitys/OutStock.cs +++ b/src/WMS.Web.Domain/Entitys/OutStock.cs @@ -80,7 +80,7 @@ namespace WMS.Web.Domain.Entitys /// 同步成功或者失败 默认是失败状态 /// [Column("SuccessSync")] - public bool SuccessSync { get; set; } = false; + public SyncStatus SuccessSync { get; set; } = SyncStatus.Fail; ///// ///// 同步失败的源订单号(默认就包含所有来源单号) ///// @@ -118,15 +118,15 @@ namespace WMS.Web.Domain.Entitys if (task.Type == OutStockType.Sal) { //只有销售出库才需要同步金蝶 - this.SuccessSync = false; + this.SuccessSync = SyncStatus.Fail; var erpd = this.Details.SelectMany(s => s.ErpDetails).ToList(); - erpd.ForEach(f => f.SuccessSync = false); + erpd.ForEach(f => f.SuccessSync = SyncStatus.Fail); } else { - this.SuccessSync = true; + this.SuccessSync = SyncStatus.Success; var erpd = this.Details.SelectMany(s => s.ErpDetails).ToList(); - erpd.ForEach(f => f.SuccessSync = true); + erpd.ForEach(f => f.SuccessSync = SyncStatus.Success); } } /// @@ -138,11 +138,11 @@ namespace WMS.Web.Domain.Entitys //foreach (var e in erpDetailIds) // this.SuccessSyncFail.Remove(e); var erpd = this.Details.SelectMany(s => s.ErpDetails).Where(w => w.SourceBillNo.Equals(sourcBillNo)).ToList(); - erpd.ForEach(f => f.SuccessSync = true); + erpd.ForEach(f => f.SuccessSync = SyncStatus.Success); //所有erp明细同步成功才是整个单据成功 - if (this.Details.SelectMany(s => s.ErpDetails).Where(w => w.SuccessSync != false).Any()) + if (this.Details.SelectMany(s => s.ErpDetails).Where(w => w.SuccessSync == SyncStatus.Success).Any()) { - this.SuccessSync = true; + this.SuccessSync = SyncStatus.Success; this.Remark = ""; } this.OperateId = operateId; @@ -152,9 +152,9 @@ namespace WMS.Web.Domain.Entitys /// 同步金蝶(失败) /// /// - public void SyncFail(string remark, int operateId) + public void SyncFail(string remark, int operateId, SyncStatus syncStatus) { - this.SuccessSync = false; + this.SuccessSync = syncStatus; this.Remark = remark; this.OperateId = operateId; this.SyncTime = DateTime.Now; diff --git a/src/WMS.Web.Domain/Entitys/OutStockErpDetails.cs b/src/WMS.Web.Domain/Entitys/OutStockErpDetails.cs index ead3bbb2..1990b823 100644 --- a/src/WMS.Web.Domain/Entitys/OutStockErpDetails.cs +++ b/src/WMS.Web.Domain/Entitys/OutStockErpDetails.cs @@ -3,6 +3,7 @@ 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 { @@ -48,6 +49,6 @@ namespace WMS.Web.Domain.Entitys /// 同步成功或者失败 默认是失败状态 /// [Column("SuccessSync")] - public bool SuccessSync { get; set; } = false; + public SyncStatus SuccessSync { get; set; } = SyncStatus.Fail; } } diff --git a/src/WMS.Web.Domain/Entitys/TakeStock.cs b/src/WMS.Web.Domain/Entitys/TakeStock.cs index e12d322b..66eb5cc3 100644 --- a/src/WMS.Web.Domain/Entitys/TakeStock.cs +++ b/src/WMS.Web.Domain/Entitys/TakeStock.cs @@ -36,10 +36,10 @@ namespace WMS.Web.Domain.Entitys [Column("CreatorId")] public int CreatorId { get; set; } /// - /// 同步成功或者失败 null 就是未同步 + /// 同步状态 /// [Column("SuccessSync")] - public bool? SuccessSync { get; set; } + public SyncStatus SuccessSync { get; set; } = SyncStatus.Fail; /// /// 箱Id /// @@ -115,18 +115,10 @@ namespace WMS.Web.Domain.Entitys /// /// /// - public void Sync(bool isSuccess,string remark) + public void Sync(bool isSuccess, string remark, SyncStatus syncStatus) { - if (isSuccess) - { - this.SuccessSync = true; - this.Remark = ""; - } - else - { - this.SuccessSync = false; - this.Remark = remark; - } + this.SuccessSync = syncStatus; + this.Remark = ""; } /// /// 生成单据号 diff --git a/src/WMS.Web.Domain/IService/Public/IErpBasicDataExtendService.cs b/src/WMS.Web.Domain/IService/Public/IErpBasicDataExtendService.cs index f8809f31..d3d27b77 100644 --- a/src/WMS.Web.Domain/IService/Public/IErpBasicDataExtendService.cs +++ b/src/WMS.Web.Domain/IService/Public/IErpBasicDataExtendService.cs @@ -43,7 +43,13 @@ namespace WMS.Web.Domain.IService.Public /// /// string GetMaterialUnitName(List erpMaterials, int materialId); - + /// + /// 获取物料基本单位id + /// + /// + /// + /// + int GetMaterialUnitId(List erpMaterials, int materialId); /// /// 获取组织名称 /// diff --git a/src/WMS.Web.Domain/Services/OutStockService.cs b/src/WMS.Web.Domain/Services/OutStockService.cs index 55fd3b6f..69e9a602 100644 --- a/src/WMS.Web.Domain/Services/OutStockService.cs +++ b/src/WMS.Web.Domain/Services/OutStockService.cs @@ -178,9 +178,9 @@ namespace WMS.Web.Domain.Services var list = await _outStockRepositories.GetEntityList(dto.Ids); foreach (var entity in list) { - if (entity.SuccessSync) continue; + if (entity.SuccessSync!=SyncStatus.Fail) continue; List failList =entity.Details.SelectMany(s=>s.ErpDetails) - .Where(w=> w.SuccessSync==false).GroupBy(g=>g.SourceBillNo) + .Where(w=> w.SuccessSync== SyncStatus.Fail).GroupBy(g=>g.SourceBillNo) .Select(s=>s.Key).ToList();//同步失败的来源单号 //找到单据里需要同步的单据 var sourcNos = entity.Details.SelectMany(s => s.ErpDetails).GroupBy(s => s.SourceBillNo).Select(s => s.Key); @@ -199,7 +199,7 @@ namespace WMS.Web.Domain.Services if (res.IsSuccess) entity.SyncSuccess(s, loginInfo.UserInfo.StaffId); else - entity.SyncFail(res.Message, loginInfo.UserInfo.StaffId); + entity.SyncFail(res.Message, loginInfo.UserInfo.StaffId, SyncStatus.Fail); } //entity.SuccessSync = entity.SuccessSyncFail.Count() > 0 ? false : true; //最好一条一条执行,否则执行失败 但是金蝶那边又同步成功 就会造成数据比价乱 diff --git a/src/WMS.Web.Domain/Services/Public/ErpBasicDataExtendService.cs b/src/WMS.Web.Domain/Services/Public/ErpBasicDataExtendService.cs index 216ce79b..b77462fb 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpBasicDataExtendService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpBasicDataExtendService.cs @@ -98,7 +98,32 @@ namespace WMS.Web.Domain.Services.Public public string GetMaterialUnitName(List erpMaterials, int materialId) { var mat = erpMaterials.Where(x => x.MaterialId == materialId).FirstOrDefault(); - return mat == null ? "" : mat.BaseUnitName; + if (mat == null) + { + var result = _erpService.BillQueryForMaterial(materialId).Result; + if (!result.IsSuccess) + return ""; + return result.Data == null ? "" : result.Data.BaseUnitName; + } + return mat.BaseUnitName; + } + /// + /// 获取物料基本单位Id + /// + /// + /// + /// + public int GetMaterialUnitId(List erpMaterials, int materialId) + { + var mat = erpMaterials.Where(x => x.MaterialId == materialId).FirstOrDefault(); + if (mat == null) + { + var result = _erpService.BillQueryForMaterial(materialId).Result; + if (!result.IsSuccess) + return 0; + return result.Data == null ? 0 : result.Data.BaseUnitId; + } + return mat.BaseUnitId; } /// diff --git a/src/WMS.Web.Domain/Services/TakeStockService.cs b/src/WMS.Web.Domain/Services/TakeStockService.cs index ff7a83d9..d5de94a4 100644 --- a/src/WMS.Web.Domain/Services/TakeStockService.cs +++ b/src/WMS.Web.Domain/Services/TakeStockService.cs @@ -38,11 +38,12 @@ namespace WMS.Web.Domain.Services private readonly IErpService _erpService; private readonly ILogger _logger; private readonly IBoxInventoryService _boxInventoryService; + private readonly IErpBasicDataExtendService _erpBasicDataExtendService; public TakeStockService(IMapper mapper, ILoginService loginService, IBasicsRepositories transactionRepositories, ITakeStockRepositories takeStockRepositories, ILoginRepositories loginRepositories, ISingleDataService singleDataService, IErpService erpService, ILogger logger, - IBoxInventoryService boxInventoryService) + IBoxInventoryService boxInventoryService, IErpBasicDataExtendService erpBasicDataExtendService) { _mapper = mapper; _loginService = loginService; @@ -53,6 +54,7 @@ namespace WMS.Web.Domain.Services _erpService = erpService; _logger = logger; _boxInventoryService = boxInventoryService; + _erpBasicDataExtendService = erpBasicDataExtendService; } /// /// 保存 @@ -107,7 +109,7 @@ namespace WMS.Web.Domain.Services public async Task Sync(OperateRequest dto) { var list = await _takeStockRepositories.GetEntityList(dto.Ids); - list = list.Where(w => w.SuccessSync == false).ToList(); + list = list.Where(w => w.SuccessSync == SyncStatus.Fail).ToList(); foreach (var entity in list) await Loss_Profit(entity); @@ -123,7 +125,9 @@ 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 materials_result = await _erpService.BillQueryForMaterial(); + var materials = materials_result.Data.ToList(); + var unitId = _erpBasicDataExtendService.GetMaterialUnitId(materials,entity.MaterialId); var res = await _erpService.BillQueryForStock(); var stock = res.Data.FirstOrDefault(f => f.Code == entity.StockCode);//需要根据单点code搜索 var subStock = res.Data.FirstOrDefault(f => f.Code == subStockCode);//需要根据单点code搜索 @@ -136,7 +140,7 @@ namespace WMS.Web.Domain.Services FOwnerid = stock.OrgId.ToString(), FKeeperId = stock.OrgId.ToString(), MaterialId = entity.MaterialId.ToString(), - UnitId = "", //物料带出来 + UnitId = unitId.ToString(), //物料带出来 StockId = stock.Id.ToString(), SubStockId = subStock.Id.ToString(), BeforeQty = entity.BeforeQty, @@ -157,7 +161,7 @@ namespace WMS.Web.Domain.Services FormIdParam type = entity.ResultType == TakeStockType.Loss ? FormIdParam.STK_StockCountLoss : FormIdParam.STK_StockCountGain; //操作金蝶 var resSync = await ErpOperate(dto, type); - entity.Sync(resSync.IsSuccess, resSync.Message); + entity.Sync(resSync.result.IsSuccess, resSync.result.Message,resSync.syncStatus); await _takeStockRepositories.Edit(entity, true); return res; } @@ -167,13 +171,13 @@ namespace WMS.Web.Domain.Services /// /// /// - private async Task ErpOperate(ErpTakeStockSaveDto dto, FormIdParam type) + private async Task<(Result result,SyncStatus syncStatus)> ErpOperate(ErpTakeStockSaveDto dto, FormIdParam type) { string formId = type.ToString(); _logger.LogInformation($"开始同步金蝶 单号:{dto.BillNo} 数据: {JsonConvert.SerializeObject(dto)}"); var res_s = await _erpService.Save(dto, formId); if (!res_s.IsSuccess) - return Result.ReFailure(res_s.Message, res_s.Status); + return (Result.ReFailure(res_s.Message, res_s.Status), SyncStatus.Fail); //提交 ErpOperateDto o_dto = new ErpOperateDto(formId, res_s.Data); var res = await _erpService.Submit(o_dto, formId); @@ -181,10 +185,10 @@ namespace WMS.Web.Domain.Services { //如果提交失败 //1.则调删单接口 - var del_res = await _erpService.Delete(o_dto, formId); - if (!del_res.IsSuccess) - _logger.LogError($"盘盈盘亏同步金蝶 单号:{dto.BillNo} 提交失败原因: {res.Message} 删单失败原因:{del_res.Message}"); - return res; + //var del_res = await _erpService.Delete(o_dto, formId); + //if (!del_res.IsSuccess) + // _logger.LogError($"盘盈盘亏同步金蝶 单号:{dto.BillNo} 提交失败原因: {res.Message} 删单失败原因:{del_res.Message}"); + return (res, SyncStatus.PortionSuccess); } //审核 res = await _erpService.Audit(o_dto, formId); @@ -193,20 +197,20 @@ namespace WMS.Web.Domain.Services //如果审核失败 //1.调反审核接口 //2.调删除接口 - var noAudit_res = await _erpService.NoAudit(o_dto, formId); - if (!noAudit_res.IsSuccess) - { - _logger.LogError($"盘盈盘亏同步金蝶 单号:{dto.BillNo} 审核失败原因: {res.Message} 反审核失败原因:{noAudit_res.Message}"); - return res; - } + //var noAudit_res = await _erpService.NoAudit(o_dto, formId); + //if (!noAudit_res.IsSuccess) + //{ + // _logger.LogError($"盘盈盘亏同步金蝶 单号:{dto.BillNo} 审核失败原因: {res.Message} 反审核失败原因:{noAudit_res.Message}"); + // return res; + //} - var del_res = await _erpService.Delete(o_dto, formId); - if (!del_res.IsSuccess) - _logger.LogError($"盘盈盘亏同步金蝶 单号:{dto.BillNo} 审核失败原因: {res.Message} 删单失败原因:{del_res.Message}"); - return res; + //var del_res = await _erpService.Delete(o_dto, formId); + //if (!del_res.IsSuccess) + // _logger.LogError($"盘盈盘亏同步金蝶 单号:{dto.BillNo} 审核失败原因: {res.Message} 删单失败原因:{del_res.Message}"); + return (res, SyncStatus.PortionSuccess); } _logger.LogInformation($"同步金蝶成功"); - return Result.ReSuccess(); + return (Result.ReSuccess(),SyncStatus.Success); } } } diff --git a/src/WMS.Web.Domain/Values/SyncStatus.cs b/src/WMS.Web.Domain/Values/SyncStatus.cs new file mode 100644 index 00000000..ced02c2c --- /dev/null +++ b/src/WMS.Web.Domain/Values/SyncStatus.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Text; +using WMS.Web.Core; + +namespace WMS.Web.Domain.Values +{ + /// + /// 同步金蝶状态 + /// + public enum SyncStatus + { + /// + /// 失败 + /// + [EnumRemark("失败")] + Fail =0, + /// + /// 成功 + /// + [EnumRemark("成功")] + Success =1, + /// + /// 部分成功(数据保存成功,提交或者审核失败) + /// + [EnumRemark("部分成功")] + PortionSuccess =2 + } +} diff --git a/src/WMS.Web.Repositories/OutStockRepositories.cs b/src/WMS.Web.Repositories/OutStockRepositories.cs index a2b26aab..20561a8e 100644 --- a/src/WMS.Web.Repositories/OutStockRepositories.cs +++ b/src/WMS.Web.Repositories/OutStockRepositories.cs @@ -141,7 +141,12 @@ namespace WMS.Web.Repositories if (dto.Type != null) query = query.Where(w => w.order.Type == (OutStockType)dto.Type); if (dto.SuccessSync != null) - query = query.Where(w => w.order.SuccessSync == dto.SuccessSync); + { + if (dto.SuccessSync == true) + query = query.Where(w => w.order.SuccessSync == SyncStatus.Success); + else + query = query.Where(w => w.order.SuccessSync != SyncStatus.Success); + } if (dto.DeliveryOrgId != null) query = query.Where(w => w.order.DeliveryOrgId == dto.DeliveryOrgId); if (!string.IsNullOrEmpty(dto.StockCode)) @@ -160,7 +165,7 @@ namespace WMS.Web.Repositories Type = s.order.Type.GetRemark(), Creator = _singleDataService.GetSingleData(SingleAction.Staffs, _loginRepositories.CompanyId, s.order.CreatorId), CreateTime = s.order.CreateTime.DateToStringSeconds(), - SuccessSync = s.order.SuccessSync == true ? "成功" : "失败", + SuccessSync = s.order.SuccessSync == SyncStatus.Success ? "成功" : "失败", Stock = _singleDataService.GetSingleData(SingleAction.StocksJoinOrgCode, _loginRepositories.CompanyId, s.order.StockCode + s.order.OrgCode), SourceBillNoList = s.detail.ErpDetails.Select(s => s.SourceBillNo).ToList(), SaleBillNoList = s.detail.ErpDetails.Select(s => s.SaleBillNo).ToList(), diff --git a/src/WMS.Web.Repositories/TakeStockRepositories.cs b/src/WMS.Web.Repositories/TakeStockRepositories.cs index 17e210e5..407cec01 100644 --- a/src/WMS.Web.Repositories/TakeStockRepositories.cs +++ b/src/WMS.Web.Repositories/TakeStockRepositories.cs @@ -207,7 +207,7 @@ namespace WMS.Web.Repositories Remark = s.Remark, Creator = _singleDataService.GetSingleData(SingleAction.Staffs, _loginRepositories.CompanyId, s.CreatorId), Date = s.Date.DateToStringSeconds(), - SuccessSync = s.SuccessSync==true?"成功":"失败", + SuccessSync = s.SuccessSync== SyncStatus.Success ? "成功":"失败", #endregion }).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync();