优化发送短信的来源数据

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

@@ -2208,6 +2208,11 @@
明细ID
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.InStockTask.SourceBillNoQueryResponse.CustomerCode">
<summary>
客户编码
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.InStockTask.SourceBillNoQueryResponse.ErpDetailId">
<summary>
对应金蝶的明细ID
@@ -2703,6 +2708,16 @@
单据ID(等同-入库任务单ID)
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.InStock.SaveInStockDetailsRequest.TaskDetailId">
<summary>
单据ID(等同-入库任务单明细ID)
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.InStock.SaveInStockDetailsRequest.CustomerCode">
<summary>
客户编码
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.InStock.SaveInStockDetailsRequest.BoxId">
<summary>
箱ID
@@ -5284,9 +5299,9 @@
明细
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.SendDataDetailsDto.TaskDetailId">
<member name="P:WMS.Web.Core.Dto.SendDataDetailsDto.InStockDetailId">
<summary>
任务明细ID
入库明细ID
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.SendDataDetailsDto.MaterialName">

View File

@@ -813,6 +813,16 @@
任务单ID
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.InStockDetails.TaskDetailId">
<summary>
任务单明细ID
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.InStockDetails.CustomerCode">
<summary>
客户编码
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.InStockDetails.BoxId">
<summary>
箱ID
@@ -848,6 +858,16 @@
序列号集
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.InStockDetails.IsHasSend">
<summary>
是否已发送
</summary>
</member>
<member name="M:WMS.Web.Domain.Entitys.InStockDetails.HasSend">
<summary>
标记已发送
</summary>
</member>
<member name="T:WMS.Web.Domain.Entitys.InStockErpDetails">
<summary>
wms入库单ERP明细
@@ -2801,6 +2821,27 @@
<param name="taskIds"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.IInStockRepositories.GetNotSendDetails">
<summary>
</summary>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.IInStockRepositories.GetDetailsList(System.Collections.Generic.List{System.Int32})">
<summary>
</summary>
<param name="ids"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.IInStockRepositories.UpdateRange(System.Collections.Generic.List{WMS.Web.Domain.Entitys.InStockDetails},System.Boolean)">
<summary>
</summary>
<param name="entitys"></param>
<param name="isTransaction"></param>
<returns></returns>
</member>
<member name="T:WMS.Web.Domain.Infrastructure.IInStockTaskBoxRepositories">
<summary>
箱与任务单绑定(收货)关系表-仓储接口
@@ -4256,12 +4297,6 @@
<param name="textBody"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.IService.ISendMessageService.GetSendContent">
<summary>
</summary>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.IService.ISendMessageService.Execute">
<summary>
执行

View File

@@ -16,6 +16,18 @@ namespace WMS.Web.Core.Dto.InStock
[Required(ErrorMessage = "任务单ID不能为空")]
public int TaskId { get; set; }
/// <summary>
/// 单据ID(等同-入库任务单明细ID)
/// </summary>
[Required(ErrorMessage = "任务单明细ID不能为空")]
public int TaskDetailId { get; set; }
/// <summary>
/// 客户编码
/// </summary>
[Required(ErrorMessage = "客户编码不能为空")]
public string CustomerCode { get; set; }
/// <summary>
/// 箱ID
/// </summary>

View File

@@ -18,6 +18,11 @@ namespace WMS.Web.Core.Dto.InStockTask
/// </summary>
public int DetailsId { get; set; }
/// <summary>
/// 客户编码
/// </summary>
public string CustomerCode { get; set; }
/// <summary>
/// 对应金蝶的明细ID
/// </summary>

View File

@@ -45,10 +45,15 @@ namespace WMS.Web.Core.Dto
public class SendDataDetailsDto
{
///// <summary>
///// 任务明细ID
///// </summary>
//public int TaskDetailId { get; set; }
/// <summary>
/// 任务明细ID
/// 入库明细ID
/// </summary>
public int TaskDetailId { get; set; }
public int InStockDetailId { get; set; }
/// <summary>
/// 物料名称

View File

@@ -28,6 +28,16 @@ namespace WMS.Web.Domain.Entitys
/// </summary>
public int TaskId { get; set; }
/// <summary>
/// 任务单明细ID
/// </summary>
public int? TaskDetailId { get; set; }
/// <summary>
/// 客户编码
/// </summary>
public string CustomerCode { get; set; }
/// <summary>
/// 箱ID
/// </summary>
@@ -60,5 +70,18 @@ namespace WMS.Web.Domain.Entitys
/// 序列号集
/// </summary>
public List<string> SerialNumbers { get; set; } = new List<string>();
/// <summary>
/// 是否已发送
/// </summary>
public bool? IsHasSend { get; set; } = false;
/// <summary>
/// 标记已发送
/// </summary>
public void HasSend()
{
this.IsHasSend = true;
}
}
}

View File

@@ -30,12 +30,6 @@ namespace WMS.Web.Domain.IService
/// <returns></returns>
Task<Result> SendEmail(List<MailboxAddress> toMailList, string textBody, string coustomerName);
/// <summary>
///
/// </summary>
/// <returns></returns>
Task<Result<List<SendDataDto>>> GetSendContent();
/// <summary>
/// 执行
/// </summary>

View File

@@ -94,5 +94,26 @@ namespace WMS.Web.Domain.Infrastructure
/// <param name="taskIds"></param>
/// <returns></returns>
Task<List<InStockTotalDetails>> GetInStockTotalDetails(List<int> taskIds);
/// <summary>
///
/// </summary>
/// <returns></returns>
Task<List<InStockDetails>> GetNotSendDetails();
/// <summary>
///
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
Task<List<InStockDetails>> GetDetailsList(List<int> ids);
/// <summary>
///
/// </summary>
/// <param name="entitys"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
Task<bool> UpdateRange(List<InStockDetails> entitys, bool isTransaction = true);
}
}

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();
}

View File

@@ -423,5 +423,57 @@ namespace WMS.Web.Repositories
{
return await _context.InStockTotalDetails.Where(x => taskIds.Contains(x.TaskId)).ToListAsync();
}
/// <summary>
/// 获取明细
/// </summary>
/// <returns></returns>
public async Task<List<InStockDetails>> GetNotSendDetails()
{
return await _context.InStockDetails.Where(x =>x.IsHasSend != null && x.IsHasSend == false && !string.IsNullOrEmpty(x.CustomerCode)).ToListAsync();
}
/// <summary>
/// 列表
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<List<InStockDetails>> GetDetailsList(List<int> ids)
{
var entitys = await _context.InStockDetails
.Where(f => ids.Contains(f.Id))
.ToListAsync();
return entitys;
}
/// <summary>
/// 批量修改-明细
/// </summary>
/// <param name="entitys"></param>
/// <returns></returns>
public async Task<bool> UpdateRange(List<InStockDetails> entitys, bool isTransaction = true)
{
IDbContextTransaction _transaction = null;
if (isTransaction)
_transaction = _context.Database.BeginTransaction();
{
try
{
List<int> 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;
}
}
}
}

View File

@@ -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,