优化发送短信的来源数据

This commit is contained in:
tongfei
2024-04-09 13:50:47 +08:00
parent 1f65acf923
commit c835f25b79
11 changed files with 245 additions and 69 deletions

View File

@@ -155,7 +155,7 @@ namespace WMS.Web.Domain.Services
/// 获取数据
/// </summary>
/// <returns></returns>
public async Task<Result<List<SendDataDto>>> GetSendContent()
public async Task<(List<SendDataDto> sendDataList, List<InStockDetails> updateDetails)> GetSendContent()
{
//1.获取物料集合和组织集合和供应商的集合
var materials = new List<ErpMaterialDto>();
@@ -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<SendDataDto>();
@@ -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<List<SendDataDto>>.ReSuccess(sendDataList);
return (sendDataList, notSendDetails);
}
/// <summary>
@@ -223,63 +237,62 @@ namespace WMS.Web.Domain.Services
{
try
{
var update_taskDetailsIds = new List<int>();
var update_DetailsIds = new List<int>();
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();
}