diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 3c24069f..9d90d5b9 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -56,15 +56,15 @@ namespace WMS.Web.Api.Controllers [Route("hj")] public async Task TestHJ() { - // OperateRequest dto = new OperateRequest(); - // dto.Ids.Add(65); - //await _outStockService.Sync(dto, null); + OperateRequest dto = new OperateRequest(); + dto.Ids.Add(65); + await _outStockService.Sync(dto, null); // List list = null; //var b= list.FirstOrDefault(f => f.Id == 123); //var entity=await _takeStockRepositories.GetEntityList(new List() {2 }); //var r= await _takeStockService.Loss_Profit(entity.First()); //var list = await GetList(); - var c = await _erpService.BillQueryForSalOutStock("12709885"); + //var c = await _erpService.BillQueryForSalOutStock("12709885"); //var c = await _erpService.BillQueryForAssembledAppOutStock_Assembly(new List() { "ZZCX003061" }, DateTime.Now.AddDays(-10)); //var bc2 = await _erpService.BillQueryForDeliveryNoticeOutStock(new List() { "FHTZD8022232" }, DateTime.Now.AddDays(-10)); //var bc = await _erpService.BillQueryForTransferOutOutStock(null, DateTime.Now.AddDays(-10)); diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 8b7b7c09..56a15257 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -1011,6 +1011,31 @@ 含税单价 取对应发货通知单对应物料编码行的 含税单价 + + + 修改销售出库单 + + + + + 单据Id + + + + + 明细 + + + + + 明细Id + + + + + 数量 + + key为string 下拉列表对象 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 9b48cb3b..1e04b583 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -1180,7 +1180,7 @@ - + 同步金蝶(成功) @@ -1312,6 +1312,11 @@ 同步成功或者失败 默认是失败状态 + + + 同步到金蝶后金蝶的单据Id + + erp出库任务单 @@ -2864,6 +2869,13 @@ + + + erp:查询销售出库单信息 + + + + erp:单据查询-物料集合 @@ -3943,7 +3955,7 @@ - + 下推 diff --git a/src/WMS.Web.Core/Dto/Erp/OutStock/ErpSalOutStockSaveDto.cs b/src/WMS.Web.Core/Dto/Erp/OutStock/ErpSalOutStockSaveDto.cs new file mode 100644 index 00000000..52fde395 --- /dev/null +++ b/src/WMS.Web.Core/Dto/Erp/OutStock/ErpSalOutStockSaveDto.cs @@ -0,0 +1,43 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Erp.OutStock +{ + /// + /// 修改销售出库单 + /// + public class ErpSalOutStockSaveDto + { + public ErpSalOutStockSaveDto() { } + public ErpSalOutStockSaveDto(string id) + { + this.Id = id; + } + /// + /// 单据Id + /// + [JsonProperty("FID")] + public string Id { get; set; } + /// + /// 明细 + /// + [JsonProperty("FEntity")] + public List Details { get; set; } = new List(); + } + public class ErpSalOutStockDetailsSaveDto + { + public ErpSalOutStockDetailsSaveDto(){} + /// + /// 明细Id + /// + [JsonProperty("FENTRYID")] + public string DetailId { get; set; } + /// + /// 数量 + /// + [JsonProperty("FRealQty")] + public decimal Qty { get; set; } + } +} diff --git a/src/WMS.Web.Domain/Entitys/OutStock.cs b/src/WMS.Web.Domain/Entitys/OutStock.cs index f87d3f9e..5812aa55 100644 --- a/src/WMS.Web.Domain/Entitys/OutStock.cs +++ b/src/WMS.Web.Domain/Entitys/OutStock.cs @@ -133,12 +133,16 @@ namespace WMS.Web.Domain.Entitys /// 同步金蝶(成功) /// /// - public void SyncSuccess(string sourcBillNo, int operateId) + public void SyncSuccess(string sourcBillNo, int operateId,string salOutStockId) { //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 = SyncStatus.Success); + foreach (var e in erpd) + { + e.SuccessSync = SyncStatus.Success; + e.ErpSyncId = salOutStockId; + } //所有erp明细同步成功才是整个单据成功 var erpDetails = this.Details.SelectMany(s => s.ErpDetails); if (erpDetails.Where(w => w.SuccessSync == SyncStatus.Success).Count()== erpDetails.Count()) diff --git a/src/WMS.Web.Domain/Entitys/OutStockErpDetails.cs b/src/WMS.Web.Domain/Entitys/OutStockErpDetails.cs index 1990b823..0d31272b 100644 --- a/src/WMS.Web.Domain/Entitys/OutStockErpDetails.cs +++ b/src/WMS.Web.Domain/Entitys/OutStockErpDetails.cs @@ -50,5 +50,10 @@ namespace WMS.Web.Domain.Entitys /// [Column("SuccessSync")] public SyncStatus SuccessSync { get; set; } = SyncStatus.Fail; + /// + /// 同步到金蝶后金蝶的单据Id + /// + [Column("ErpSyncId")] + public string ErpSyncId { get; set; } } } diff --git a/src/WMS.Web.Domain/IService/Public/IErpService.cs b/src/WMS.Web.Domain/IService/Public/IErpService.cs index 4d0ce139..90857a0d 100644 --- a/src/WMS.Web.Domain/IService/Public/IErpService.cs +++ b/src/WMS.Web.Domain/IService/Public/IErpService.cs @@ -91,8 +91,12 @@ namespace WMS.Web.Domain.IService.Public /// /// Task> BillQueryForMisDeliveryOutStock(List sourceBillNos = null, DateTime? beginTime = null); - - Task> BillQueryForSalOutStock(string id); + /// + /// erp:查询销售出库单信息 + /// + /// + /// + Task> BillQueryForSalOutStock(string id); /// /// erp:单据查询-物料集合 /// diff --git a/src/WMS.Web.Domain/Services/OutStockService.cs b/src/WMS.Web.Domain/Services/OutStockService.cs index de46bfda..18874dfd 100644 --- a/src/WMS.Web.Domain/Services/OutStockService.cs +++ b/src/WMS.Web.Domain/Services/OutStockService.cs @@ -9,6 +9,7 @@ using System.Text; using System.Threading.Tasks; using WMS.Web.Core.Dto; using WMS.Web.Core.Dto.Erp; +using WMS.Web.Core.Dto.Erp.OutStock; using WMS.Web.Core.Dto.Inventory; using WMS.Web.Core.Dto.Login; using WMS.Web.Core.Dto.OutStock; @@ -235,11 +236,11 @@ namespace WMS.Web.Domain.Services DetailsId = string.Join(",", erp_details) }; //下推金蝶 - var res = await this.Push(erpDto); - if (res.IsSuccess) - entity.SyncSuccess(s, loginInfo?.UserInfo?.StaffId ?? 0); + var res = await this.Push(erpDto, entity); + if (res.result.IsSuccess) + entity.SyncSuccess(s, loginInfo?.UserInfo?.StaffId ?? 0,res.erpId); else - entity.SyncFail(res.Message, loginInfo?.UserInfo?.StaffId ?? 0, SyncStatus.Fail); + entity.SyncFail(res.result.Message, loginInfo?.UserInfo?.StaffId ?? 0, res.syncStatus); } //entity.SuccessSync = entity.SuccessSyncFail.Count() > 0 ? false : true; //最好一条一条执行,否则执行失败 但是金蝶那边又同步成功 就会造成数据比价乱 @@ -253,12 +254,47 @@ namespace WMS.Web.Domain.Services /// /// /// - private async Task Push(ErpPushDto dto) + private async Task<(Result result, SyncStatus syncStatus, string erpId)> Push(ErpPushDto dto, OutStock entity) { var res = await _erpService.Push(dto); - var id = res.Data; + if (!res.IsSuccess) + { + _logger.LogInformation($"出库单->下推失败 单号:{entity.BillNo} 错误:{res.Message}"); + return (Result.ReFailure(res.Message, res.Status), SyncStatus.Fail, ""); + } + string id = res.Data; + var resSalOutStock= await _erpService.BillQueryForSalOutStock(id); + var salOutStock = resSalOutStock.Data; + salOutStock.Details[0].Qty = entity.Details[0].Qty; //{"Id":12709885,"Number":"XSCKD10629570","DIndex":0} - return Result.ReSuccess(); + + string formId = dto.TargetFormId.ToString(); + _logger.LogInformation($"出库单->开始同步金蝶 单号:{entity.BillNo} 数据: {JsonConvert.SerializeObject(dto)}"); + var res_s = await _erpService.Save(salOutStock, formId); + if (!res_s.IsSuccess) + { + _logger.LogInformation($"出库单->修改数量失败 单号:{entity.BillNo} 错误:{res_s.Message}"); + return (Result.ReFailure(res_s.Message, res_s.Status), SyncStatus.SubmitFail, id); + } + //提交 + _logger.LogInformation($"出库单->保存成功 开始提交 单号:{entity.BillNo}"); + 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($"出库单->提交失败 单号:{entity.BillNo} 错误:{resSubmit.Message}"); + return (resSubmit, SyncStatus.SubmitFail, o_dto.Ids); + } + //审核 + _logger.LogInformation($"出库单->提交成功 开始审核 单号:{entity.BillNo}"); + resSubmit = await _erpService.Audit(o_dto, formId); + if (!resSubmit.IsSuccess) + { + _logger.LogInformation($"出库单->审核失败 单号:{entity.BillNo} 错误:{resSubmit.Message}"); + return (resSubmit, SyncStatus.CheckFail, o_dto.Ids); + } + _logger.LogInformation($"同步金蝶成功"); + return (Result.ReSuccess(), SyncStatus.Success, o_dto.Ids); } } } diff --git a/src/WMS.Web.Domain/Services/Public/ErpService.cs b/src/WMS.Web.Domain/Services/Public/ErpService.cs index c407868f..01ad7fb6 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpService.cs @@ -2050,24 +2050,24 @@ namespace WMS.Web.Domain.Services.Public } } - public async Task> BillQueryForSalOutStock(string id) + public async Task> BillQueryForSalOutStock(string id) { try { var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId); if (stocks.Count == 0) - return ResultList.ReFailure(ResultCodes.ErpStockNoData); + return Result.ReFailure(ResultCodes.ErpStockNoData); //1.先登录金蝶-拿到token var token_result = await this.Init(); if (!token_result.IsSuccess) - return ResultList.ReFailure(token_result); + return Result.ReFailure(token_result); //3.获取金蝶采购订单:拼接参数和条件 var query = new ErpBillQueryDto(token_result.Data); var param = new ErpBillQueryParamDto(FormIdParam.SAL_OUTSTOCK.ToString()); - param.FieldKeys = "FID,FEntity_FENTRYID,FMaterialID,FMustQty,FRealQty,FStockID.FNumber"; + param.FieldKeys = "FID,FEntity_FENTRYID,FRealQty,"; param.Limit = 10000; param.FilterString = $"FID={id}"; @@ -2079,30 +2079,19 @@ namespace WMS.Web.Domain.Services.Public var result = JsonConvert.DeserializeObject>>(result_json); //5.返回数据的组装 - var erp_list = new List(); - //foreach (var item in result) - //{ - // var lis = new ErpDeliveryNoticeOutStockResultDto(); - // lis.SourceBillNo = item[0]; - // lis.SaleBillNo = item[1]; - // lis.DeliveryOrgId = Convert.ToInt32(item[2]); - // lis.ReceiptCustomerId = Convert.ToInt32(item[3]); - // lis.MaterialId = Convert.ToInt32(item[4]); - // lis.StockCode = item[5]; - // lis.SubStockId = Convert.ToInt32(item[6]); - // lis.AccruedQty = Convert.ToDecimal(item[7]); - // lis.Remark = item[8]; - // lis.CreateTime = Convert.ToDateTime(item[9]); - // lis.Type = (int)OutStockType.Miscellaneous; - // lis.Erp_DetailId = Convert.ToInt32(item[10]); - // lis.OrgCode = item[11]; - // erp_list.Add(lis); - //} - return ResultList.ReSuccess(erp_list); + var erp_list = new ErpSalOutStockSaveDto(id); + foreach (var item in result) + { + var lis = new ErpSalOutStockDetailsSaveDto(); + lis.DetailId = item[1]; + lis.Qty =Convert.ToDecimal(item[2]); + erp_list.Details.Add(lis); + } + return Result.ReSuccess(erp_list); } catch (Exception ex) { - return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); + return Result.ReFailure(ResultCodes.Erp_BillQuery_Error); } }