diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 4084ea5a..aa10a6e7 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -2208,6 +2208,11 @@ 明细ID + + + 客户编码 + + 对应金蝶的明细ID @@ -2703,6 +2708,16 @@ 单据ID(等同-入库任务单ID) + + + 单据ID(等同-入库任务单明细ID) + + + + + 客户编码 + + 箱ID @@ -5284,9 +5299,9 @@ 明细 - + - 任务明细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 30046a31..fc5ace10 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -813,6 +813,16 @@ 任务单ID + + + 任务单明细ID + + + + + 客户编码 + + 箱ID @@ -848,6 +858,16 @@ 序列号集 + + + 是否已发送 + + + + + 标记已发送 + + wms入库单ERP明细 @@ -2801,6 +2821,27 @@ + + + + + + + + + + + + + + + + + + + + + 箱与任务单绑定(收货)关系表-仓储接口 @@ -4256,12 +4297,6 @@ - - - - - - 执行 diff --git a/src/WMS.Web.Core/Dto/InStock/SaveInStockDetailsRequest.cs b/src/WMS.Web.Core/Dto/InStock/SaveInStockDetailsRequest.cs index 78667c70..413ae5bb 100644 --- a/src/WMS.Web.Core/Dto/InStock/SaveInStockDetailsRequest.cs +++ b/src/WMS.Web.Core/Dto/InStock/SaveInStockDetailsRequest.cs @@ -16,6 +16,18 @@ namespace WMS.Web.Core.Dto.InStock [Required(ErrorMessage = "任务单ID不能为空")] public int TaskId { get; set; } + /// + /// 单据ID(等同-入库任务单明细ID) + /// + [Required(ErrorMessage = "任务单明细ID不能为空")] + public int TaskDetailId { get; set; } + + /// + /// 客户编码 + /// + [Required(ErrorMessage = "客户编码不能为空")] + public string CustomerCode { get; set; } + /// /// 箱ID /// diff --git a/src/WMS.Web.Core/Dto/InStockTask/SourceBillNoQueryResponse.cs b/src/WMS.Web.Core/Dto/InStockTask/SourceBillNoQueryResponse.cs index bf2d84da..95312b56 100644 --- a/src/WMS.Web.Core/Dto/InStockTask/SourceBillNoQueryResponse.cs +++ b/src/WMS.Web.Core/Dto/InStockTask/SourceBillNoQueryResponse.cs @@ -18,6 +18,11 @@ namespace WMS.Web.Core.Dto.InStockTask /// public int DetailsId { get; set; } + /// + /// 客户编码 + /// + public string CustomerCode { get; set; } + /// /// 对应金蝶的明细ID /// diff --git a/src/WMS.Web.Core/Dto/SendDataDto.cs b/src/WMS.Web.Core/Dto/SendDataDto.cs index 375e268b..a0d81cd5 100644 --- a/src/WMS.Web.Core/Dto/SendDataDto.cs +++ b/src/WMS.Web.Core/Dto/SendDataDto.cs @@ -45,10 +45,15 @@ namespace WMS.Web.Core.Dto public class SendDataDetailsDto { + ///// + ///// 任务明细ID + ///// + //public int TaskDetailId { get; set; } + /// - /// 任务明细ID + /// 入库明细ID /// - public int TaskDetailId { get; set; } + public int InStockDetailId { get; set; } /// /// 物料名称 diff --git a/src/WMS.Web.Domain/Entitys/InStockDetails.cs b/src/WMS.Web.Domain/Entitys/InStockDetails.cs index 669e5950..c1fca920 100644 --- a/src/WMS.Web.Domain/Entitys/InStockDetails.cs +++ b/src/WMS.Web.Domain/Entitys/InStockDetails.cs @@ -28,6 +28,16 @@ namespace WMS.Web.Domain.Entitys /// public int TaskId { get; set; } + /// + /// 任务单明细ID + /// + public int? TaskDetailId { get; set; } + + /// + /// 客户编码 + /// + public string CustomerCode { get; set; } + /// /// 箱ID /// @@ -60,5 +70,18 @@ namespace WMS.Web.Domain.Entitys /// 序列号集 /// public List SerialNumbers { get; set; } = new List(); + + /// + /// 是否已发送 + /// + public bool? IsHasSend { get; set; } = false; + + /// + /// 标记已发送 + /// + public void HasSend() + { + this.IsHasSend = true; + } } } diff --git a/src/WMS.Web.Domain/IService/Public/ISendMessageService.cs b/src/WMS.Web.Domain/IService/Public/ISendMessageService.cs index 199524be..a7d12c62 100644 --- a/src/WMS.Web.Domain/IService/Public/ISendMessageService.cs +++ b/src/WMS.Web.Domain/IService/Public/ISendMessageService.cs @@ -30,12 +30,6 @@ namespace WMS.Web.Domain.IService /// Task SendEmail(List toMailList, string textBody, string coustomerName); - /// - /// - /// - /// - Task>> GetSendContent(); - /// /// 执行 /// diff --git a/src/WMS.Web.Domain/Infrastructure/IInStockRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IInStockRepositories.cs index c53a6b74..48aad4d8 100644 --- a/src/WMS.Web.Domain/Infrastructure/IInStockRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IInStockRepositories.cs @@ -94,5 +94,26 @@ namespace WMS.Web.Domain.Infrastructure /// /// Task> GetInStockTotalDetails(List taskIds); + + /// + /// + /// + /// + Task> GetNotSendDetails(); + + /// + /// + /// + /// + /// + Task> GetDetailsList(List ids); + + /// + /// + /// + /// + /// + /// + Task UpdateRange(List entitys, bool isTransaction = true); } } diff --git a/src/WMS.Web.Domain/Services/Public/SendMessageService.cs b/src/WMS.Web.Domain/Services/Public/SendMessageService.cs index b8869284..33d30390 100644 --- a/src/WMS.Web.Domain/Services/Public/SendMessageService.cs +++ b/src/WMS.Web.Domain/Services/Public/SendMessageService.cs @@ -155,7 +155,7 @@ namespace WMS.Web.Domain.Services /// 获取数据 /// /// - public async Task>> GetSendContent() + public async Task<(List sendDataList, List updateDetails)> GetSendContent() { //1.获取物料集合和组织集合和供应商的集合 var materials = new List(); @@ -166,7 +166,9 @@ namespace WMS.Web.Domain.Services //客户 var customerList = await _subscribeNotificationRepositories.GetList(); //要处理发送的明细 - var notSendDetails = await _inStockTaskRepositories.GetNotSendErpDetails(); + //var notSendDetails = await _inStockTaskRepositories.GetNotSendErpDetails(); + var notSendDetails = await _inStockRepositories.GetNotSendDetails(); + var sendDataList = new List(); @@ -174,12 +176,22 @@ namespace WMS.Web.Domain.Services { if (notSendDetails != null && notSendDetails.Count != 0) { - var taskIds = notSendDetails.GroupBy(x => x.Fid).Select(x => x.Key).ToList(); + //var taskIds = notSendDetails.GroupBy(x => x.Fid).Select(x => x.Key).ToList(); + + //var instockTotalDetails = await _inStockRepositories.GetInStockTotalDetails(taskIds); + var instockTotalDetails = notSendDetails.GroupBy(x => new { x.TaskDetailId, x.CustomerCode, x.MaterialNumber }).Select(x => new + { + TaskDetailId = x.Key.TaskDetailId, + CustomerCode = x.Key.CustomerCode, + MaterialNumber = x.Key.MaterialNumber, + TotalQty = x.Sum(t => t.Qty) + }).ToList(); - var instockTotalDetails = await _inStockRepositories.GetInStockTotalDetails(taskIds); foreach (var item in customerList) { - var current_notSendDetails = notSendDetails.Where(x => x.CustomerCode == item.CustomerNumber).ToList(); + //var current_notSendDetails = notSendDetails.Where(x => x.CustomerCode == item.CustomerNumber).ToList(); + //var current_notSendDetails = instockTotalDetails.Where(x => x.CustomerCode == item.CustomerNumber).ToList(); + var current_notSendDetails = instockTotalDetails.Where(x => x.CustomerCode == item.CustomerNumber).ToList(); if (current_notSendDetails != null && current_notSendDetails.Count != 0) { var data = new SendDataDto(); @@ -195,13 +207,15 @@ namespace WMS.Web.Domain.Services foreach (var current_det in current_notSendDetails) { var det = new SendDataDetailsDto(); - det.TaskDetailId = current_det.Id; + //det.TaskDetailId = current_det.Id; det.MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, current_det.MaterialNumber); det.Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, current_det.MaterialNumber); det.MaterialNumber = current_det.MaterialNumber; - det.Qty = instockTotalDetails.Where(x => x.TaskId == current_det.Fid && x.MaterialNumber == current_det.MaterialNumber).Sum(x => x.Qty); - if (det.Qty > 0) - data.Details.Add(det); + //det.Qty = instockTotalDetails.Where(x => x.TaskId == current_det.Fid && x.MaterialNumber == current_det.MaterialNumber).Sum(x => x.Qty); + det.Qty = current_det.TotalQty; + data.Details.Add(det); + //if (det.Qty > 0) + // data.Details.Add(det); } if (data.Details.Count != 0) sendDataList.Add(data); @@ -212,7 +226,7 @@ namespace WMS.Web.Domain.Services } } - return Result>.ReSuccess(sendDataList); + return (sendDataList, notSendDetails); } /// @@ -223,63 +237,62 @@ namespace WMS.Web.Domain.Services { try { - var update_taskDetailsIds = new List(); + var update_DetailsIds = new List(); - var sendContentList_result = await this.GetSendContent(); - if (sendContentList_result.IsSuccess) + var (sendContentList,updateList) = await this.GetSendContent(); + + if (sendContentList != null && sendContentList.Count != 0) { - var sendContentList = sendContentList_result.Data; - if (sendContentList != null && sendContentList.Count != 0) + foreach (var item in sendContentList) { - foreach (var item in sendContentList) + var content = ""; + int i = 1; + foreach (var det in item.Details) { + if (i == item.Details.Count) + content = det.Specifications + " 数量" + Convert.ToInt32(det.Qty); + else + content = det.Specifications + " 数量" + Convert.ToInt32(det.Qty) + ","; + i = i + 1; - var content = ""; - int i = 1; - foreach (var det in item.Details) - { - update_taskDetailsIds.Add(det.TaskDetailId); - if (i == item.Details.Count) - content = det.Specifications + " 数量" + Convert.ToInt32(det.Qty); - else - content = det.Specifications + " 数量" + Convert.ToInt32(det.Qty) + ","; - i = i + 1; - - } - //邮箱 - await this.SendEmail(item.EmailList, content, item.CustomerName); - //短信 - var sms_result = this.SendSms(item.PhoneNumbers, content); - //内容过长-分段发送 - if (!sms_result.IsSuccess && sms_result.Message == "isv.PARAM_LENGTH_LIMIT") - { - //分段发送:以字数480长度分段 - var contentParts = this.SplitContent(content, 480); - foreach (var partContent in contentParts) - { - this.SendSms(item.PhoneNumbers, partContent); - } - - } } - //任务明细:修改的 - var tasksDetails = await _inStockTaskRepositories.GetDetailsList(update_taskDetailsIds.Distinct().ToList()); - if (tasksDetails != null && tasksDetails.Count != 0) + //邮箱 + await this.SendEmail(item.EmailList, content, item.CustomerName); + //短信 + var sms_result = this.SendSms(item.PhoneNumbers, content); + //内容过长-分段发送 + if (!sms_result.IsSuccess && sms_result.Message == "isv.PARAM_LENGTH_LIMIT") { - tasksDetails.ForEach(x => { x.IsHasSend = true; }); - - var update_Result = await _inStockTaskRepositories.UpdateRange(tasksDetails); - if (!update_Result) + //分段发送:以字数480长度分段 + var contentParts = this.SplitContent(content, 480); + foreach (var partContent in contentParts) { - _logger.LogInformation("发送消息:失败-修改任务明细->:" + JsonConvert.SerializeObject(tasksDetails)); + this.SendSms(item.PhoneNumbers, partContent); } + + } + } + + update_DetailsIds = updateList.Select(x => x.Id).ToList(); + //任务明细:修改的 + //var tasksDetails = await _inStockTaskRepositories.GetDetailsList(update_taskDetailsIds); + var inStockDetails = await _inStockRepositories.GetDetailsList(update_DetailsIds); + if (inStockDetails != null && inStockDetails.Count != 0) + { + inStockDetails.ForEach(x => { x.IsHasSend = true; }); + + var update_Result = await _inStockRepositories.UpdateRange(inStockDetails); + if (!update_Result) + { + _logger.LogInformation("发送消息:失败-修改入库明细->:" + JsonConvert.SerializeObject(inStockDetails)); } } - else - _logger.LogInformation("发送消息:暂无可发送的通知明细"); } + else + _logger.LogInformation("发送消息:暂无可发送的通知明细"); + return Result.ReSuccess(); } diff --git a/src/WMS.Web.Repositories/InStockRepositories.cs b/src/WMS.Web.Repositories/InStockRepositories.cs index b7f68d1a..c774d187 100644 --- a/src/WMS.Web.Repositories/InStockRepositories.cs +++ b/src/WMS.Web.Repositories/InStockRepositories.cs @@ -423,5 +423,57 @@ namespace WMS.Web.Repositories { return await _context.InStockTotalDetails.Where(x => taskIds.Contains(x.TaskId)).ToListAsync(); } + + /// + /// 获取明细 + /// + /// + public async Task> GetNotSendDetails() + { + return await _context.InStockDetails.Where(x =>x.IsHasSend != null && x.IsHasSend == false && !string.IsNullOrEmpty(x.CustomerCode)).ToListAsync(); + } + + /// + /// 列表 + /// + /// + /// + public async Task> GetDetailsList(List ids) + { + var entitys = await _context.InStockDetails + .Where(f => ids.Contains(f.Id)) + .ToListAsync(); + return entitys; + } + + /// + /// 批量修改-明细 + /// + /// + /// + public async Task UpdateRange(List entitys, bool isTransaction = true) + { + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _context.Database.BeginTransaction(); + { + try + { + List list = entitys.Select(s => s.Id).ToList(); + var res = await _context.InStockDetails.AsNoTracking().Where(f => list.Contains(f.Id)).ToListAsync(); + _mapper.ToMapList(entitys, res); + await _context.SaveChangesAsync(); + if (_transaction != null) + _transaction.Commit(); + } + catch (Exception ex) + { + if (_transaction != null) + _transaction.Rollback(); + return false; + } + return true; + } + } } } diff --git a/src/WMS.Web.Repositories/InStockTaskRepositories.cs b/src/WMS.Web.Repositories/InStockTaskRepositories.cs index 692d13af..74a5b052 100644 --- a/src/WMS.Web.Repositories/InStockTaskRepositories.cs +++ b/src/WMS.Web.Repositories/InStockTaskRepositories.cs @@ -358,6 +358,7 @@ namespace WMS.Web.Repositories { Id = s.order.Id, DetailsId = s.detail.Id, + CustomerCode=s.detail.CustomerCode, SupplierId = s.detail.SupplierId, OrgId = s.detail.OrgId, OrgCode = s.detail.OrgCode,