优化发送短信的来源数据
This commit is contained in:
@@ -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">
|
||||
|
||||
@@ -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>
|
||||
执行
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
/// 物料名称
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user