Browse Source

2.发货失败增加钉钉通知

3.快递100订阅失败不影响快递单入库
4.订单列表接口返回值调整,快递单增加快递100订阅标记 IsSubscribeKD100
yijia
shanji 2 years ago
parent
commit
14b9899f71
  1. 1
      BBWYB.Server.API/Controllers/PurchaseOrderController.cs
  2. 62
      BBWYB.Server.Business/DingDingBusiness.cs
  3. 10
      BBWYB.Server.Business/KuaiDi100Manager.cs
  4. 108
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  5. 6
      BBWYB.Server.Model/Db/Order/PurchaseExpressOrder.cs

1
BBWYB.Server.API/Controllers/PurchaseOrderController.cs

@ -115,6 +115,7 @@ namespace BBWYB.Server.API.Controllers
[Consumes("application/x-www-form-urlencoded")]
[HttpPost]
[AllowAnonymous]
public IActionResult KuaiDi100Publish([FromForm] string sign, [FromForm] string param)
{
#region 去掉本次请求的DTO格式

62
BBWYB.Server.Business/DingDingBusiness.cs

@ -0,0 +1,62 @@
using BBWYB.Common.Extensions;
using BBWYB.Common.Http;
using BBWYB.Common.Models;
using System.Security.Cryptography;
using System.Text;
namespace BBWYB.Server.Business
{
public class DingDingBusiness : IDenpendency
{
private RestApiService restApiService;
public DingDingBusiness(RestApiService restApiService)
{
this.restApiService = restApiService;
}
public void SendDingDingBotMessage(string secret, string webHook, string content)
{
var timestamp = DateTime.Now.DateTimeToStamp();
var stringToSign = timestamp + "\n" + secret;
var sign = EncryptWithSHA256(stringToSign, secret);
var url = $"{webHook}&timestamp={timestamp}&sign={sign}";
var result = restApiService.SendRequest(url, string.Empty, new
{
msgtype = "text",
text = new
{
content = content
}
}, null, HttpMethod.Post);
if (result.StatusCode != System.Net.HttpStatusCode.OK)
throw new Exception($"发送钉钉机器人消息失败 {result.Content}");
}
/// <summary>
/// Base64 SHA256
/// </summary>
/// <param name="data">待加密数据</param>
/// <param name="secret">密钥</param>
/// <returns></returns>
private string EncryptWithSHA256(string data, string secret)
{
secret = secret ?? "";
// 1、string 转换成 utf-8 的byte[]
var encoding = Encoding.UTF8;
byte[] keyByte = encoding.GetBytes(secret);
byte[] dataBytes = encoding.GetBytes(data);
// 2、 HMACSHA256加密
using (var hmac256 = new HMACSHA256(keyByte))
{
byte[] hashData = hmac256.ComputeHash(dataBytes);
// 3、转换成base64
var base64Str = Convert.ToBase64String(hashData);
// 4、urlEncode编码
return System.Web.HttpUtility.UrlEncode(base64Str, Encoding.UTF8);
}
}
}
}

10
BBWYB.Server.Business/KuaiDi100Manager.cs

@ -37,10 +37,6 @@ namespace BBWYB.Server.Business
}
}
private void ThrowSubscribeError(string waybillno, string kuaidi100CompanyCode, string error)
{
throw new Exception($"订阅快递100失败 waybillno:{waybillno} kuaidi100CompanyCode:{kuaidi100CompanyCode} error:{error}");
}
/// <summary>
/// 订阅快递100
@ -51,7 +47,7 @@ namespace BBWYB.Server.Business
public void SubscribeKuaiDi100(string waybillno, string kuaidi100CompanyCode, string callbackUrl)
{
if (string.IsNullOrEmpty(kuaidi100CompanyCode))
ThrowSubscribeError(waybillno, kuaidi100CompanyCode, "缺少快递100公司编码");
throw new Exception("缺少快递100公司编码");
var paramStr = JsonConvert.SerializeObject(new
{
@ -67,10 +63,10 @@ namespace BBWYB.Server.Business
});
var subscribeResult = restApiService.SendRequest("https://poll.kuaidi100.com", "poll", $"schema=json&param={paramStr}", null, HttpMethod.Post, RestApiService.ContentType_Form);
if (subscribeResult.StatusCode != System.Net.HttpStatusCode.OK)
ThrowSubscribeError(waybillno, kuaidi100CompanyCode, subscribeResult.Content);
throw new Exception(subscribeResult.Content);
var subscribeResponse = JsonConvert.DeserializeObject<KuaiDi100SubscribeResponse>(subscribeResult.Content);
if (!subscribeResponse.result)
ThrowSubscribeError(waybillno, kuaidi100CompanyCode, subscribeResponse.message);
throw new Exception(subscribeResponse.message);
}
/// <summary>

108
BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs

@ -15,45 +15,42 @@ using SDKAdapter.PurchasePlatform.Models;
using System.Text;
using Yitter.IdGenerator;
using BBWYB.Server.Business.Extensions;
using Microsoft.Extensions.DependencyInjection;
namespace BBWYB.Server.Business
{
public class PurchaseOrderBusiness : BaseBusiness, IDenpendency
{
private PP_PlatformClientFactory ppPlatformClientFactory;
private TaskSchedulerManager taskSchedulerManager;
private FreeSqlMultiDBManager fsqlManager;
private OrderBusiness orderBusiness;
private VenderBusiness venderBusiness;
private PurchaseSchemeBusiness purchaseSchemeBusiness;
private ExpressCompanyNameConverter expressCompanyNameConverter;
private RestApiService restApiService;
private Lazy<PP_PlatformClientFactory> pplatformClientFactoryLazy;
private Lazy<TaskSchedulerManager> taskSchedulerManagerLazy;
private Lazy<FreeSqlMultiDBManager> fsqlManagerLazy;
private Lazy<ExpressCompanyNameConverter> expressCompanyNameConverterLazy;
private Lazy<KuaiDi100Manager> kuaiDi100ManagerLazy;
private Lazy<DingDingBusiness> dingDingBusinessLazy;
private Lazy<QiKuManager> qiKuManagerLazy;
private PP_PlatformClientFactory ppPlatformClientFactory => pplatformClientFactoryLazy.Value;
private TaskSchedulerManager taskSchedulerManager => taskSchedulerManagerLazy.Value;
private FreeSqlMultiDBManager fsqlManager => fsqlManagerLazy.Value;
private ExpressCompanyNameConverter expressCompanyNameConverter => expressCompanyNameConverterLazy.Value;
private KuaiDi100Manager kuaiDi100Manager => kuaiDi100ManagerLazy.Value;
private DingDingBusiness dingDingBusiness => dingDingBusinessLazy.Value;
private QiKuManager qiKuManager => qiKuManagerLazy.Value;
private IList<Enums.OrderState> cantPurchaseOrderStateList;
private KuaiDi100Manager kuaiDi100Manager;
private QiKuManager qiKuManager;
public PurchaseOrderBusiness(IFreeSql fsql,
NLogManager nLogManager,
IIdGenerator idGenerator,
PP_PlatformClientFactory ppPlatformClientFactory,
TaskSchedulerManager taskSchedulerManager,
FreeSqlMultiDBManager fsqlManager,
OrderBusiness orderBusiness,
VenderBusiness venderBusiness,
PurchaseSchemeBusiness purchaseSchemeBusiness,
ExpressCompanyNameConverter expressCompanyNameConverter,
RestApiService restApiService,
KuaiDi100Manager kuaiDi100Manager,
QiKuManager qiKuManager) : base(fsql, nLogManager, idGenerator)
IServiceProvider serviceProvider) : base(fsql, nLogManager, idGenerator)
{
this.ppPlatformClientFactory = ppPlatformClientFactory;
this.taskSchedulerManager = taskSchedulerManager;
this.fsqlManager = fsqlManager;
this.orderBusiness = orderBusiness;
this.venderBusiness = venderBusiness;
this.expressCompanyNameConverter = expressCompanyNameConverter;
this.restApiService = restApiService;
this.purchaseSchemeBusiness = purchaseSchemeBusiness;
pplatformClientFactoryLazy = new Lazy<PP_PlatformClientFactory>(() => serviceProvider.GetService<PP_PlatformClientFactory>());
taskSchedulerManagerLazy = new Lazy<TaskSchedulerManager>(() => serviceProvider.GetService<TaskSchedulerManager>());
fsqlManagerLazy = new Lazy<FreeSqlMultiDBManager>(() => serviceProvider.GetService<FreeSqlMultiDBManager>());
expressCompanyNameConverterLazy = new Lazy<ExpressCompanyNameConverter>(() => serviceProvider.GetService<ExpressCompanyNameConverter>());
kuaiDi100ManagerLazy = new Lazy<KuaiDi100Manager>(() => serviceProvider.GetService<KuaiDi100Manager>());
dingDingBusinessLazy = new Lazy<DingDingBusiness>(() => serviceProvider.GetService<DingDingBusiness>());
qiKuManagerLazy = new Lazy<QiKuManager>(() => serviceProvider.GetService<QiKuManager>());
cantPurchaseOrderStateList = new List<Enums.OrderState>()
{
Enums.OrderState.,
@ -61,8 +58,6 @@ namespace BBWYB.Server.Business
Enums.OrderState.,
Enums.OrderState.
};
this.kuaiDi100Manager = kuaiDi100Manager;
this.qiKuManager = qiKuManager;
}
/// <summary>
@ -1223,18 +1218,37 @@ namespace BBWYB.Server.Business
#region 找出新发货的快递单
foreach (var logisticsInfo in logisticsList)
{
if (purchaseExpressOrderList.Any(po => po.WaybillNo == logisticsInfo.WayBillNo))
if (string.IsNullOrEmpty(logisticsInfo.WayBillNo) ||
purchaseExpressOrderList.Any(po => po.WaybillNo == logisticsInfo.WayBillNo))
continue;
#region 快递1688物流公司为快递100物流公司
var kuaidi100Company = expressCompanyNameConverter.ConverterToKuaiDi100Company(logisticsInfo.ExpressName);
if (kuaidi100Company == null)
throw new Exception($"快递100公司翻译失败 SourceExpressName:{logisticsInfo.ExpressName}");
#endregion
#region 订阅快递100
currentProgress = "订阅快递100";
kuaiDi100Manager.SubscribeKuaiDi100(logisticsInfo.WayBillNo, kuaidi100Company.TargetCode, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish");
LogisticsCompanyRelationship kuaidi100Company = null;
bool isSubscribeKD100 = false;
try
{
kuaidi100Company = expressCompanyNameConverter.ConverterToKuaiDi100Company(logisticsInfo.ExpressName);
if (kuaidi100Company == null)
throw new Exception($"快递100公司翻译失败 SourceExpressName:{logisticsInfo.ExpressName} 无翻译结果");
kuaiDi100Manager.SubscribeKuaiDi100(logisticsInfo.WayBillNo, kuaidi100Company.TargetCode, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish");
isSubscribeKD100 = true;
}
catch (Exception ex)
{
nLogManager.Default().Error(ex, $"DeliveryCallback 回调平台1688,订单号{orderId},采购单号{purchaseOrderId},执行进度[{currentProgress}],采购单物流信息:{wayBillNoResponseInfo}");
#region 订阅失败发送钉钉通知
var dingdingMsg = new StringBuilder();
dingdingMsg.AppendLine($"错误:{ex.Message}");
dingdingMsg.AppendLine($"1688订单号:{purchaseOrderId}");
dingdingMsg.AppendLine($"拳探订单号:{orderId}");
dingdingMsg.AppendLine($"源物流公司:{logisticsInfo.ExpressName}");
dingdingMsg.AppendLine($"目标物流公司:{kuaidi100Company?.TargetName} {kuaidi100Company?.TargetCode}");
dingdingMsg.Append($"快递单号:${logisticsInfo.WayBillNo}");
SendDingDingOnKD100SubscribeFail(dingdingMsg.ToString());
#endregion
}
#endregion
#region 创建快递单
@ -1247,9 +1261,10 @@ namespace BBWYB.Server.Business
SourceExpressId = logisticsInfo.ExpressId,
SourceExpressName = logisticsInfo.ExpressName,
WaybillNo = logisticsInfo.WayBillNo,
TargetExpressId = kuaidi100Company.TargetCode,
TargetExpressName = kuaidi100Company.TargetName,
ExpressState = kuaiDi100Manager.GetExpressState(1) //快递100发货状态值 默认揽收
TargetExpressId = kuaidi100Company?.TargetCode,
TargetExpressName = kuaidi100Company?.TargetName,
ExpressState = kuaiDi100Manager.GetExpressState(1), //快递100发货状态值 默认揽收
IsSubscribeKD100 = isSubscribeKD100
};
insertPurchaseExpressOrderList.Add(purchaseExpressOrder);
#endregion
@ -1778,5 +1793,16 @@ namespace BBWYB.Server.Business
nLogManager.GetLogger("快递100").Error(ex, waybillNo);
}
}
private void SendDingDingOnKD100SubscribeFail(string content)
{
try
{
dingDingBusiness.SendDingDingBotMessage("SEC5f08a3dd6813e50bf9a3b81350ec12a8086c64b9e29ef858a17f5cc7887906d7",
"https://oapi.dingtalk.com/robot/send?access_token=7ce472411bb8dde0c3ff503fcca9ead84d39950ee3c4c65c808dbc58981eb929",
content);
}
catch { }
}
}
}

6
BBWYB.Server.Model/Db/Order/PurchaseExpressOrder.cs

@ -73,6 +73,12 @@ namespace BBWYB.Server.Model.Db
[Column(StringLength = 100)]
public string TargetExpressName { get; set; }
/// <summary>
/// 是否订阅快递100
/// </summary>
[Column(DbType = "bit")]
public bool IsSubscribeKD100 { get; set; } = false;
}
}

Loading…
Cancel
Save