Browse Source

检查入仓采购单

yijia
shanji 2 years ago
parent
commit
989cbda840
  1. 25
      BBWYB.Server.API/Controllers/JDController.cs
  2. 21
      BBWYB.Server.Business/Extensions/OrderStateExtension.cs
  3. 148
      BBWYB.Server.Business/JD/JDBusiness.cs
  4. 2
      BBWYB.Server.Business/Order/OrderBusiness.cs
  5. 120
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  6. 7
      BBWYB.Server.Business/Vender/VenderBusiness.cs
  7. 29
      BBWYB.Server.Model/Db/Order/InStoreOrderCheckTask.cs
  8. 30
      BBWYB.Server.Model/Db/Order/InStorePurchaseOrdeRrelationInfo.cs

25
BBWYB.Server.API/Controllers/JDController.cs

@ -0,0 +1,25 @@
using BBWYB.Server.Business.JD;
using Microsoft.AspNetCore.Mvc;
namespace BBWYB.Server.API.Controllers
{
public class JDController : BaseApiController
{
private JDBusiness jdBusiness;
public JDController(IHttpContextAccessor httpContextAccessor, JDBusiness jdBusiness) : base(httpContextAccessor)
{
this.jdBusiness = jdBusiness;
}
/// <summary>
/// 检查入仓采购单
/// </summary>
[HttpPost]
public void CheckInStoreOrder()
{
jdBusiness.CheckInStoreOrder();
}
}
}

21
BBWYB.Server.Business/Extensions/OrderStateExtension.cs

@ -13,18 +13,13 @@ namespace BBWYB.Server.Business
/// </summary>
/// <param name="order"></param>
/// <param name="fsql"></param>
/// <param name="IsNotifyDingDingWhenInStoreOrderFail">是否在入库单验证失败后通知钉钉</param>
/// <param name="orderSkuList"></param>
/// <param name="orderPurchaseInfoList"></param>
/// <param name="jdInStoreOrderDetailList"></param>
public static void CalculationOrderState(this Order order,
IFreeSql fsql,
out bool IsNotifyDingDingWhenInStoreOrderFail,
IList<OrderSku> orderSkuList = null,
IList<OrderPurchaseInfo> orderPurchaseInfoList = null,
IList<JDInStoreOrderDetail> jdInStoreOrderDetailList = null)
IList<OrderPurchaseInfo> orderPurchaseInfoList = null)
{
IsNotifyDingDingWhenInStoreOrderFail = false;
if (order.OrderState == Enums.OrderState. ||
order.OrderState == Enums.OrderState. ||
order.OrderState == Enums.OrderState.)
@ -120,13 +115,15 @@ namespace BBWYB.Server.Business
}
else if (order.IntoStoreType == Enums.IntoStoreType.)
{
if (jdInStoreOrderDetailList == null || jdInStoreOrderDetailList.Count() == 0 || jdInStoreOrderDetailList.Any(x => x.storageStatus != "2"))
{
if (order.OrderState != Enums.OrderState.)
order.OrderState = Enums.OrderState.;
IsNotifyDingDingWhenInStoreOrderFail = true;
}
else
order.OrderState = Enums.OrderState.;
//if (jdInStoreOrderDetailList == null || jdInStoreOrderDetailList.Count() == 0 || jdInStoreOrderDetailList.Any(x => x.storageStatus != "2"))
//{
// order.OrderState = Enums.OrderState.待验收;
// IsNotifyDingDingWhenInStoreOrderFail = true;
//}
//else
// order.OrderState = Enums.OrderState.待核算;
}
return;
}

148
BBWYB.Server.Business/JD/JDBusiness.cs

@ -1,8 +1,10 @@
using BBWYB.Common.Http;
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using BBWYB.Server.Model.Db;
using JD.Dto;
using Newtonsoft.Json;
using System.Text;
using Yitter.IdGenerator;
namespace BBWYB.Server.Business.JD
@ -11,14 +13,20 @@ namespace BBWYB.Server.Business.JD
{
private RestApiService restApiService;
private VenderBusiness venderBusiness;
private DingDingBusiness dingDingBusiness;
private TaskSchedulerManager taskSchedulerManager;
public JDBusiness(IFreeSql fsql,
NLogManager nLogManager,
IIdGenerator idGenerator,
RestApiService restApiService,
VenderBusiness venderBusiness) : base(fsql, nLogManager, idGenerator)
VenderBusiness venderBusiness,
DingDingBusiness dingDingBusiness,
TaskSchedulerManager taskSchedulerManager) : base(fsql, nLogManager, idGenerator)
{
this.restApiService = restApiService;
this.venderBusiness = venderBusiness;
this.dingDingBusiness = dingDingBusiness;
this.taskSchedulerManager = taskSchedulerManager;
}
public ApiResponse<IList<JDInStoreOrderDetail>> GetJDInStoreOrderDetailList(string sourceShopName, IList<string> poOrderNos)
@ -50,5 +58,143 @@ namespace BBWYB.Server.Business.JD
return new ApiResponse<IList<JDInStoreOrderDetail>>() { Code = 0, Msg = ex.Message };
}
}
public void CheckInStoreOrder()
{
List<string> orderIds = null;
try
{
var checkTaskList = fsql.Select<InStoreOrderCheckTask>().Where(x => x.IsChecked == false).ToList();
if (checkTaskList.Count() == 0)
return;
orderIds = checkTaskList.Select(x => x.OrderId).ToList();
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => orderIds.Contains(opi.PurchaseOrderId) && opi.IsEnabled == true).ToList();
var waitCheckInStoreOrderList = fsql.Select<InStorePurchaseOrdeRrelationInfo, Order>()
.InnerJoin((io, o) => io.OrderId == o.Id)
.Where((io, o) => orderIds.Contains(io.OrderId) && !string.IsNullOrEmpty(o.SourceShopName))
.ToList((io, o) => new
{
io.Id,
io.PurchaseOrderId,
io.CreateTime,
io.InStorePurchaseOrderId,
io.OrderId,
io.ShopId,
io.WaybillNo,
o.SourceShopName
});
var shopIds = checkTaskList.Select(x => x.ShopId.ToString()).ToList();
var shopList = venderBusiness.GetShopList(shopIds);
foreach (var checkTask in checkTaskList)
{
var dingdingMsg = new StringBuilder();
var inStoreOrderRelationList = waitCheckInStoreOrderList.Where(x => x.OrderId == checkTask.OrderId).ToList();
var currentPurchaseOrderList = orderPurchaseInfoList.Where(opi => opi.OrderId == checkTask.OrderId).ToList();
var shop = shopList.FirstOrDefault(s => s.ShopId == checkTask.ShopId.ToString());
if (inStoreOrderRelationList == null || inStoreOrderRelationList.Count() == 0)
{
if (currentPurchaseOrderList.Count() > 0)
{
foreach (var opi in currentPurchaseOrderList)
{
dingdingMsg.AppendLine($"店铺名称:{shop?.ShopName}");
dingdingMsg.AppendLine($"拳探订单号:{checkTask.OrderSn}");
dingdingMsg.AppendLine($"采购平台:{opi.PurchasePlatform}");
dingdingMsg.AppendLine($"采购单号:{opi.PurchaseOrderId}");
dingdingMsg.AppendLine("缺少入仓采购单号");
dingdingMsg.AppendLine();
}
}
}
else
{
var poOrderNos = inStoreOrderRelationList.Select(i => i.InStorePurchaseOrderId).Distinct().ToList();
//查询京东
var inStoreResponse = GetJDInStoreOrderDetailList(inStoreOrderRelationList.FirstOrDefault().SourceShopName, poOrderNos);
if (!inStoreResponse.Success)
{
if (currentPurchaseOrderList.Count() > 0)
{
foreach (var opi in currentPurchaseOrderList)
{
dingdingMsg.AppendLine($"店铺名称:{shop?.ShopName}");
dingdingMsg.AppendLine($"拳探订单号:{checkTask.OrderSn}");
dingdingMsg.AppendLine($"采购平台:{opi.PurchasePlatform}");
dingdingMsg.AppendLine($"采购单号:{opi.PurchaseOrderId}");
dingdingMsg.AppendLine($"{inStoreResponse.Msg}");
dingdingMsg.AppendLine();
}
}
}
else
{
foreach (var inStoreOrderRelation in inStoreOrderRelationList)
{
var jdInStore = inStoreResponse.Data.FirstOrDefault(x => x.poOrderNo == inStoreOrderRelation.InStorePurchaseOrderId);
if (jdInStore == null || jdInStore.storageStatus == "2")
continue;
var opi = currentPurchaseOrderList.FirstOrDefault(opi => opi.PurchaseOrderId == inStoreOrderRelation.PurchaseOrderId);
if (opi == null)
continue;
var stateText = "";
switch (jdInStore.storageStatus)
{
case "1":
stateText = "有差异待确认";
break;
case "3":
stateText = "待确认";
break;
case "4":
stateText = "有差异已确认";
break;
}
dingdingMsg.AppendLine($"店铺名称:{shop?.ShopName}");
dingdingMsg.AppendLine($"拳探订单号:{checkTask.OrderSn}");
dingdingMsg.AppendLine($"采购平台:{opi.PurchasePlatform}");
dingdingMsg.AppendLine($"采购单号:{opi.PurchaseOrderId}");
dingdingMsg.AppendLine($"入仓采购单号:{inStoreOrderRelation.InStorePurchaseOrderId}");
dingdingMsg.AppendLine($"入仓采购单状态:{jdInStore.storageStatus} {stateText}");
dingdingMsg.AppendLine();
}
}
}
if (dingdingMsg.Length > 0)
{
Task.Factory.StartNew(() => SendDingDing(dingdingMsg.ToString()), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
}
}
}
catch (Exception ex)
{
nLogManager.Default().Error(ex, "CheckInStoreOrder");
}
finally
{
try
{
if (orderIds != null && orderIds.Count() > 0)
fsql.Update<InStoreOrderCheckTask>().Set(x => x.IsChecked, true).Where(x => orderIds.Contains(x.OrderId)).ExecuteAffrows();
}
catch { }
}
}
private void SendDingDing(string content)
{
try
{
dingDingBusiness.SendDingDingBotMessage("SEC5f08a3dd6813e50bf9a3b81350ec12a8086c64b9e29ef858a17f5cc7887906d7",
"https://oapi.dingtalk.com/robot/send?access_token=7ce472411bb8dde0c3ff503fcca9ead84d39950ee3c4c65c808dbc58981eb929",
content);
}
catch { }
}
}
}

2
BBWYB.Server.Business/Order/OrderBusiness.cs

@ -726,7 +726,7 @@ namespace BBWYB.Server.Business
updateOrderSku = fsql.Update<OrderSku>(orderSku.Id).Set(osku => osku.IsCheck, true);
var oldOrderState = dbOrder.OrderState;
dbOrder.CalculationOrderState(fsql, out _, orderSkuList, null);
dbOrder.CalculationOrderState(fsql, orderSkuList);
if (oldOrderState != dbOrder.OrderState)
updateOrder = fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState);

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

@ -541,7 +541,7 @@ namespace BBWYB.Server.Business
#endregion
#region 订单状态
dbOrder.CalculationOrderState(fsql, out _, orderSkus, orderPurchaseInfoList.Union(insertOrderPurchaseInfos).ToList());
dbOrder.CalculationOrderState(fsql, orderSkus, orderPurchaseInfoList.Union(insertOrderPurchaseInfos).ToList());
#endregion
#region 通知C端状态
@ -1041,7 +1041,7 @@ namespace BBWYB.Server.Business
#endregion
#region 订单状态
dbOrder.CalculationOrderState(fsql, out _, dbOrderSkuList, dbPurchaseOrderList.Union(insertOrderPurchaseInfoList).ToList());
dbOrder.CalculationOrderState(fsql, dbOrderSkuList, dbPurchaseOrderList.Union(insertOrderPurchaseInfoList).ToList());
#endregion
#region 通知C端状态
@ -1296,7 +1296,7 @@ namespace BBWYB.Server.Business
#endregion
orderPurchaseInfoList.Remove(historyPurchaseOrder);
dbOrder.CalculationOrderState(fsql, out _, orderPurchaseInfoList: orderPurchaseInfoList);
dbOrder.CalculationOrderState(fsql, orderPurchaseInfoList: orderPurchaseInfoList);
fsql.Transaction(() =>
{
@ -1339,7 +1339,6 @@ namespace BBWYB.Server.Business
});
}
/// <summary>
/// 修改采购快递单
/// </summary>
@ -1489,7 +1488,7 @@ namespace BBWYB.Server.Business
#region 计算订单状态
var oldOrderState = dbOrder.OrderState;
dbOrder.CalculationOrderState(fsql, out _, null, orderPurchaseInfoList);
dbOrder.CalculationOrderState(fsql, null, orderPurchaseInfoList);
if (oldOrderState != dbOrder.OrderState)
{
updateOrder = fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState);
@ -1704,7 +1703,7 @@ namespace BBWYB.Server.Business
#endregion
#region 计算订单状态
dbOrder.CalculationOrderState(fsql, out _, null, orderPurchaseInfoList);
dbOrder.CalculationOrderState(fsql, null, orderPurchaseInfoList);
updateOrder = fsql.Update<Order>(dbOrder.Id)
.Set(o => o.OrderState, dbOrder.OrderState);
#endregion
@ -1913,7 +1912,7 @@ namespace BBWYB.Server.Business
#endregion
#region 计算订单状态
dbOrder.CalculationOrderState(fsql, out _, null, orderPurchaseInfoList);
dbOrder.CalculationOrderState(fsql, null, orderPurchaseInfoList);
updateOrder = fsql.Update<Order>(dbOrder.Id)
.Set(o => o.OrderState, dbOrder.OrderState);
#endregion
@ -1965,7 +1964,6 @@ namespace BBWYB.Server.Business
taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
}
///// <summary>
///// 手动收货
///// </summary>
@ -2371,7 +2369,7 @@ namespace BBWYB.Server.Business
#endregion
#region 计算订单状态
dbOrder.CalculationOrderState(fsql, out _, null, orderPurchaseInfoList);
dbOrder.CalculationOrderState(fsql, null, orderPurchaseInfoList);
updateOrder = fsql.Update<Order>(dbOrder.Id)
.Set(o => o.OrderState, dbOrder.OrderState);
#endregion
@ -2481,6 +2479,7 @@ namespace BBWYB.Server.Business
List<IUpdate<OrderPurchaseInfo>> updateOrderPurchaseList = new List<IUpdate<OrderPurchaseInfo>>();
List<IUpdate<Order>> updateOrderList = new List<IUpdate<Order>>();
List<TimeLimitTask> insertTimeLimitTaskList = new List<TimeLimitTask>();
List<InStoreOrderCheckTask> insertInStoreOrderCheckTaskList = new List<InStoreOrderCheckTask>();
#region 查询该笔快递单
var tpeo = fsql.Select<PurchaseExpressOrder>(wayBillNo).ToOne();
@ -2566,9 +2565,9 @@ namespace BBWYB.Server.Business
#endregion
#region 查询入库单信息
IList<InStorePurchaseOrdeRrelationInfo> inStoreOrderRelationList = null;
IList<InStoreOrderCheckTask> inStoreOrderCheckTaskList = null;
if (orderList.Any(o => o.IntoStoreType == Enums.IntoStoreType.) && state == "QianShou")
inStoreOrderRelationList = fsql.Select<InStorePurchaseOrdeRrelationInfo>().Where(i => orderIds.Contains(i.OrderId)).ToList();
inStoreOrderCheckTaskList = fsql.Select<InStoreOrderCheckTask>().Where(i => orderIds.Contains(i.OrderId)).ToList();
#endregion
#region 计算订单状态和采购单状态
@ -2607,93 +2606,22 @@ namespace BBWYB.Server.Business
}
var oldOrderState = order.OrderState;
order.CalculationOrderState(fsql, currentOrderSkuList, currentPurchaseOrderList);
if (order.IntoStoreType == Enums.IntoStoreType. && state == "QianShou")
if (order.IntoStoreType == Enums.IntoStoreType. &&
state == "QianShou" &&
order.OrderState == Enums.OrderState. &&
!inStoreOrderCheckTaskList.Any(x => x.OrderId == order.Id))
{
#region 检查入库采购单状态
var isNotifyDingDingWhenInOrderFail = false;
var currentOrder_InStoreOrderRelationList = inStoreOrderRelationList.Where(i => i.OrderId == order.Id).ToList();
ApiResponse<IList<JDInStoreOrderDetail>> inStoreResponse = null;
if (currentOrder_InStoreOrderRelationList.Count() > 0)
{
var poOrderNos = currentOrder_InStoreOrderRelationList.Select(i => i.InStorePurchaseOrderId).Distinct().ToList();
//查询京东
inStoreResponse = jdBusiness.GetJDInStoreOrderDetailList(order.SourceShopName, poOrderNos);
}
order.CalculationOrderState(fsql, out isNotifyDingDingWhenInOrderFail, currentOrderSkuList, currentPurchaseOrderList, inStoreResponse?.Data);
if (isNotifyDingDingWhenInOrderFail && inStoreResponse != null)
insertInStoreOrderCheckTaskList.Add(new InStoreOrderCheckTask()
{
#region 入库单查询有误,通知钉钉
var shop = venderBusiness.GetShopList(order.ShopId).FirstOrDefault();
var dingdingMsg = new StringBuilder();
if (!inStoreResponse.Success)
{
foreach (var opi in currentPurchaseOrderList)
{
dingdingMsg.AppendLine($"店铺名称:{shop?.ShopName}");
dingdingMsg.AppendLine($"拳探订单号:{order.OrderSn}");
dingdingMsg.AppendLine($"采购平台:{opi.PurchasePlatform}");
dingdingMsg.AppendLine($"采购单号:{opi.PurchaseOrderId}");
dingdingMsg.AppendLine($"{inStoreResponse.Msg}");
dingdingMsg.AppendLine();
}
}
else if (inStoreResponse.Data == null || inStoreResponse.Data.Count() == 0)
{
foreach (var opi in currentPurchaseOrderList)
{
dingdingMsg.AppendLine($"店铺名称:{shop?.ShopName}");
dingdingMsg.AppendLine($"拳探订单号:{order.OrderSn}");
dingdingMsg.AppendLine($"采购平台:{opi.PurchasePlatform}");
dingdingMsg.AppendLine($"采购单号:{opi.PurchaseOrderId}");
dingdingMsg.AppendLine("缺少入仓采购单号");
dingdingMsg.AppendLine();
}
}
else
{
foreach (var inStoreOrderRelation in currentOrder_InStoreOrderRelationList)
{
var jdInStore = inStoreResponse.Data.FirstOrDefault(x => x.poOrderNo == inStoreOrderRelation.InStorePurchaseOrderId);
if (jdInStore == null || jdInStore.storageStatus == "2")
continue;
var opi = currentPurchaseOrderList.FirstOrDefault(opi => opi.PurchaseOrderId == inStoreOrderRelation.PurchaseOrderId);
if (opi == null)
continue;
var stateText = "";
switch (jdInStore.storageStatus)
{
case "1":
stateText = "有差异待确认";
break;
case "3":
stateText = "待确认";
break;
case "4":
stateText = "有差异已确认";
break;
}
dingdingMsg.AppendLine($"店铺名称:{shop?.ShopName}");
dingdingMsg.AppendLine($"拳探订单号:{order.OrderSn}");
dingdingMsg.AppendLine($"采购平台:{opi.PurchasePlatform}");
dingdingMsg.AppendLine($"采购单号:{opi.PurchaseOrderId}");
dingdingMsg.AppendLine($"入仓采购单号:{inStoreOrderRelation.InStorePurchaseOrderId}");
dingdingMsg.AppendLine($"入仓采购单状态:{jdInStore.storageStatus} {stateText}");
dingdingMsg.AppendLine();
}
}
Task.Factory.StartNew(() => SendDingDing(dingdingMsg.ToString()), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
#endregion
}
#endregion
}
else
{
order.CalculationOrderState(fsql, out _, currentOrderSkuList, currentPurchaseOrderList);
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
IsChecked = false,
OrderId = order.Id,
ShopId = order.ShopId,
OrderSn = order.OrderSn
});
}
if (order.OrderState != oldOrderState)
@ -2747,6 +2675,8 @@ namespace BBWYB.Server.Business
}
if (insertTimeLimitTaskList.Count() > 0)
fsql.Insert(insertTimeLimitTaskList).ExecuteAffrows();
if (insertInStoreOrderCheckTaskList.Count() > 0)
fsql.Insert(insertInStoreOrderCheckTaskList).ExecuteAffrows();
});
#endregion
}

7
BBWYB.Server.Business/Vender/VenderBusiness.cs

@ -32,6 +32,13 @@ namespace BBWYB.Server.Business
.ToList<ShopResponse>();
}
public IList<ShopResponse> GetShopList(List<string> shopIds)
{
return fsqlManager.MDSfsql.Select<Shops>().Where(s => !string.IsNullOrEmpty(s.ShopId) &&
shopIds.Contains(s.ShopId))
.ToList<ShopResponse>();
}
public long SaveShopSetting(ShopSettingRequest shopSettingRequest)
{

29
BBWYB.Server.Model/Db/Order/InStoreOrderCheckTask.cs

@ -0,0 +1,29 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
[Table(Name = "instoreorderchecktask", DisableSyncStructure = true)]
public partial class InStoreOrderCheckTask
{
[Column(IsPrimary = true)]
public long Id { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
public bool? IsChecked { get; set; } = false;
[Column(StringLength = 50)]
public string OrderId { get; set; }
[Column(StringLength = 50)]
public string OrderSn { get; set; }
public long? ShopId { get; set; }
}
}

30
BBWYB.Server.Model/Db/Order/InStorePurchaseOrdeRrelationInfo.cs

@ -7,29 +7,29 @@ namespace BBWYB.Server.Model.Db
/// 入库采购单关系表
/// </summary>
[Table(Name = "instorepurchaseorderrelationinfo", DisableSyncStructure = true)]
public partial class InStorePurchaseOrdeRrelationInfo
public partial class InStorePurchaseOrdeRrelationInfo
{
[Column(IsPrimary = true)]
public long Id { get; set; }
[Column(IsPrimary = true)]
public long Id { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
[Column(StringLength = 100)]
public string InStorePurchaseOrderId { get; set; }
[Column(StringLength = 100)]
public string InStorePurchaseOrderId { get; set; }
[Column(StringLength = 100)]
public string OrderId { get; set; }
[Column(StringLength = 100)]
public string OrderId { get; set; }
[Column(StringLength = 100)]
public string PurchaseOrderId { get; set; }
[Column(StringLength = 100)]
public string PurchaseOrderId { get; set; }
public long? ShopId { get; set; }
public long? ShopId { get; set; }
[Column(StringLength = 100)]
public string WaybillNo { get; set; }
[Column(StringLength = 100)]
public string WaybillNo { get; set; }
}
}
}

Loading…
Cancel
Save