using Admin.NET.Application.Entity;
using Admin.NET.Application;
namespace Admin.NET.Application
{
///
/// 到货单 帮助类
///
public class OrderHelper
{
///
/// 公共更新 ASN单的 状态和 总的的已收货数
///
///
///
public static void UpdateWmsOrderAsnStatus(List wmsOrderAsnDetails,
WmsOrderAsn wmsOrderAsn)
{
var wmsOrderAsnDetailsAll = wmsOrderAsnDetails.Where(x => x.AsnId == wmsOrderAsn.Id && x.IsDelete == false).ToList();
if (wmsOrderAsnDetailsAll?.Count <=0)
{
throw Oops.Oh($"ASN单号{wmsOrderAsn.AsnNo}更新状态,未获取到明细!");
}
else
{
//汇总明细的已收货数
var totalGoodsQuantity = wmsOrderAsnDetails.Sum(o => o.GoodsQuantity);
if (wmsOrderAsnDetailsAll.Sum(o => o.GoodsQuantity) == 0)
{
wmsOrderAsn.AsnStatus = OrderStatusEnum.新建;
}
else if (wmsOrderAsnDetailsAll.Sum(o => o.Quantity - o.GoodsQuantity) <= 0)
{
wmsOrderAsn.AsnStatus = OrderStatusEnum.已完成;
}
else if (wmsOrderAsnDetailsAll.Sum(o => o.GoodsQuantity) > 0)
{
wmsOrderAsn.AsnStatus = OrderStatusEnum.处理中;
}
//单据状态名称赋值
wmsOrderAsn.AsnStatusName = wmsOrderAsn.AsnStatus.GetDescription();
}
}
///
/// 公共更新 ASN单明细 状态
///
///
public static void UpdateOrderAsnDetailsStatus(WmsOrderAsnDetails goodsdetail)
{
if (goodsdetail.GoodsQuantity == 0)
{
goodsdetail.AsnStatus = OrderStatusEnum.新建;
}
else if (goodsdetail.GoodsQuantity >= goodsdetail.Quantity)
{
goodsdetail.AsnStatus = OrderStatusEnum.已完成;
}
else
{
goodsdetail.AsnStatus = OrderStatusEnum.处理中;
}
//明细状态名称赋值
goodsdetail.AsnStatusName = goodsdetail.AsnStatus.GetDescription();
}
//
/// 公共更新 PO单的 状态 和总的的已收货数
///
///
///
public static void UpdatOrderPurchaseStatus(List wmsOrderPurchaseDetails,
WmsOrderPurchase wmsOrderPurchase)
{
var wmsOrderPurchaseDetailsAll = wmsOrderPurchaseDetails.Where(x => x.PoId == wmsOrderPurchase.Id && x.IsDelete == false).ToList();
if (wmsOrderPurchaseDetailsAll?.Count<=0)
{
throw Oops.Oh($"PO单{wmsOrderPurchase.PurchaseNo}更新状态,未获取到明细!");
}
else
{
//汇总明细的已收货数
var totalGoodsQuantity= wmsOrderPurchaseDetailsAll.Sum(o => o.GoodsQuantity);
if (wmsOrderPurchaseDetailsAll.Sum(o => o.GoodsQuantity) == 0)
{
wmsOrderPurchase.PoStatus = OrderStatusEnum.新建;
}
else if (wmsOrderPurchaseDetailsAll.Sum(o => o.Quantity - o.GoodsQuantity) <= 0)
{
wmsOrderPurchase.PoStatus = OrderStatusEnum.已完成;
}
else if (wmsOrderPurchaseDetailsAll.Sum(o => o.GoodsQuantity) > 0)
{
wmsOrderPurchase.PoStatus = OrderStatusEnum.处理中;
}
//单据状态名称赋值
wmsOrderPurchase.PoStatusName = wmsOrderPurchase.PoStatus.GetDescription();
}
}
///
/// 公共更新 PO单明细 状态
///
///
public static void UpdateOrderPurchaseDetailsStatus(WmsOrderPurchaseDetails detail)
{
if (detail.GoodsQuantity == 0)
{
detail.PoDetailStatus = OrderStatusEnum.新建;
}
else if (detail.GoodsQuantity >= detail.Quantity)
{
detail.PoDetailStatus = OrderStatusEnum.已完成;
}
else
{
detail.PoDetailStatus = OrderStatusEnum.处理中;
}
//明细状态名称赋值
detail.PoDetailStatusName = detail.PoDetailStatus.GetDescription();
}
//
/// 公共更新 报检单的 单据状态
///
///
///
public static void UpdateQCOrderStatus(List wmsQcDetails,
WmsOrderQc wmsQc)
{
var wmsQcDetailsAll = wmsQcDetails.Where(x => x.QCOrderId == wmsQc.Id && x.IsDelete == false).ToList();
if (wmsQcDetailsAll?.Count <= 0)
{
throw Oops.Oh($"报检单{wmsQc.QCNo}更新状态,未获取到明细!");
}
else
{
//明细总数
var totalQcQuantity = wmsQcDetailsAll.Count();
//新建状态的明细数量
var newBuildQcQuantity = wmsQcDetailsAll.Count(o => o.QCOrderStatus == OrderStatusEnum.新建);
//已完成状态的明细数量
var completedQcQuantity = wmsQcDetailsAll.Count(o => o.QCOrderStatus == OrderStatusEnum.已完成);
if (newBuildQcQuantity == totalQcQuantity)//全是新建状态
{
wmsQc.QCOrderStatus = OrderStatusEnum.新建;
}
else if (completedQcQuantity == totalQcQuantity)//全部是已完成状态
{
wmsQc.QCOrderStatus = OrderStatusEnum.已完成;
}
else //处理中状态
{
wmsQc.QCOrderStatus = OrderStatusEnum.处理中;
}
//单据状态名称赋值
wmsQc.QCOrderStatusName = wmsQc.QCOrderStatus.GetDescription();
}
}
///
/// 行号补全
/// 根据指定长度补全行号
/// 生产订单是四位行号0001
///
///
///
///
public static string AutoCompleEBELP(string _EBELP, int length)
{
if (!string.IsNullOrEmpty(_EBELP) & length > 1)
{
return _EBELP.PadLeft(length, '0');
}
return "";
}
//
/// 公共更新 波次单的 状态
///
///
///
public static void UpdatOrderSortStatus(List wmsOrderOrderSortDetails,
WmsOrderSort wmsOrderSort)
{
var wmsOrderPurchaseDetailsAll = wmsOrderOrderSortDetails.Where(x => x.SortId == wmsOrderSort.Id && x.IsDelete == false).ToList();
if (wmsOrderPurchaseDetailsAll?.Count <= 0)
{
throw Oops.Oh($"波次单{wmsOrderSort.SortNo}更新状态,未获取到明细!");
}
else
{
//汇总明细的已下发数
var totalIssueQuantity = wmsOrderPurchaseDetailsAll.Sum(o => o.IssueQuantity);
//汇总明细的已拣货数
var totalPickQuantity = wmsOrderPurchaseDetailsAll.Sum(o => o.PickQuantity);
//汇总明细的需求数
var totalQuantity = wmsOrderPurchaseDetailsAll.Sum(o => o.Quantity);
if (wmsOrderPurchaseDetailsAll.Sum(o => o.IssueQuantity) == 0)
{
wmsOrderSort.SortStatus = OrderStatusEnum.新建;
}
else if (totalPickQuantity== totalQuantity) //分拣完成,单据完结
{
wmsOrderSort.SortStatus = OrderStatusEnum.已完成;
}
else
{
wmsOrderSort.SortStatus = OrderStatusEnum.处理中;
}
//单据状态名称赋值
wmsOrderSort.SortStatusName = wmsOrderSort.SortStatus.GetDescription();
}
}
///
/// 公共更新 波次单明细 状态
///
///
public static void updateOrderSortDetailsStatus(WmsOrderSortDetails detail)
{
if (detail.IssueQuantity == 0)
{
detail.SortDetailStatus = OrderStatusEnum.新建;
}
else if (detail.PickQuantity == detail.Quantity) //分拣完成,单据完结
{
detail.SortDetailStatus = OrderStatusEnum.已完成;
}
else
{
detail.SortDetailStatus = OrderStatusEnum.处理中;
}
//明细状态名称赋值
detail.SortDetailStatusName = detail.SortDetailStatus.GetDescription();
}
///
/// 公共更新 容器分拣相信状态
///
///
public static void UpdateContainerSortStatus(WmsContainerSort detail)
{
if (detail.PickQuantity == 0)
{
detail.SortStatus = OrderStatusEnum.新建;
}
else if (detail.PickQuantity == detail.Quantity) //分拣完成,单据完结
{
detail.SortStatus = OrderStatusEnum.已完成;
}
else
{
detail.SortStatus = OrderStatusEnum.处理中;
}
//明细状态名称赋值
detail.SortStatusName = detail.SortStatus.GetDescription();
}
//
/// 公共更新 移动单的 状态
///
///
///
public static void UpdatOrderMovementStatus(List wmsOrderMovementDetails,
WmsOrderMovement wmsOrderMovement)
{
var wmsOrderMovementDetailsAll = wmsOrderMovementDetails.Where(x => x.MovementId == wmsOrderMovement.Id && x.IsDelete == false).ToList();
if (wmsOrderMovementDetailsAll?.Count <= 0)
{
throw Oops.Oh($"{wmsOrderMovement.OrderType.GetDescription()}类型移动单{wmsOrderMovement.OrderNo}更新状态,未获取到明细!");
}
else
{
if (wmsOrderMovement.OrderType == OrderTypeEnum.下架单)
{
//汇总明细的已拣货数
var totalPickQuantity = wmsOrderMovementDetailsAll.Sum(o => o.PickQuantity);
//汇总明细的需求数
var totalQuantity = wmsOrderMovementDetailsAll.Sum(o => o.Quantity);
//未创建波次 = 新建
if (wmsOrderMovementDetailsAll.Sum(o => o.CreateWaveQuantity) == 0)
{
wmsOrderMovement.OrderStatus = OrderStatusEnum.新建;
}
else if (totalPickQuantity == totalQuantity) //分拣完成,单据完结
{
wmsOrderMovement.OrderStatus = OrderStatusEnum.已完成;
}
else
{
wmsOrderMovement.OrderStatus = OrderStatusEnum.处理中;
}
}
else
{
throw Oops.Oh($"{wmsOrderMovement.OrderType.GetDescription()}类型移动单暂不支持!");
}
//单据状态名称赋值
wmsOrderMovement.OrderStatusName = wmsOrderMovement.OrderStatus.GetDescription();
}
}
//
/// 公共更新 DO的 状态
///
///
///
public static void UpdatOrderDeliverStatus(List wmsOrderDeliverDetails,
WmsOrderDeliver wmsOrderMovement)
{
var wmsOrderMovementDetailsAll = wmsOrderDeliverDetails.Where(x => x.DoId == wmsOrderMovement.Id && x.IsDelete == false).ToList();
if (wmsOrderMovementDetailsAll?.Count <= 0)
{
throw Oops.Oh($"{wmsOrderMovement.OrderType.GetDescription()}类型DO单{wmsOrderMovement.DeliverNo}更新状态,未获取到明细!");
}
else
{
if (wmsOrderMovement.OrderType == OrderTypeEnum.DO单)
{
//汇总明细的已发货数
var totalPickQuantity = wmsOrderMovementDetailsAll.Sum(o => o.DeliverQuantity);
//汇总明细的需求数
var totalQuantity = wmsOrderMovementDetailsAll.Sum(o => o.Quantity);
//未创建波次 = 新建
if (wmsOrderMovementDetailsAll.Sum(o => o.CreateMovementQuantity) == 0)
{
wmsOrderMovement.DoStatus = OrderStatusEnum.新建;
}
else if (totalPickQuantity == totalQuantity) //发货完成,单据完结
{
wmsOrderMovement.DoStatus = OrderStatusEnum.已完成;
}
else
{
wmsOrderMovement.DoStatus = OrderStatusEnum.处理中;
}
}
else
{
throw Oops.Oh($"{wmsOrderMovement.OrderType.GetDescription()}类型移动单暂不支持!");
}
//单据状态名称赋值
wmsOrderMovement.DoStatusName = wmsOrderMovement.DoStatus.GetDescription();
}
}
///
/// 公共更新 移动单明细 状态
///
///
public static void UpdateOrderMovementDetailsStatus(WmsOrderMovementDetails detail)
{
if (detail.CreateWaveQuantity == 0)
{
detail.OrderStatus = OrderStatusEnum.新建;
}
else if (detail.PickQuantity == detail.Quantity) //分拣完成,单据完结
{
detail.OrderStatus = OrderStatusEnum.已完成;
}
else
{
detail.OrderStatus = OrderStatusEnum.处理中;
}
//明细状态名称赋值
detail.OrderStatusName = detail.OrderStatus.GetDescription();
}
///
/// 公共更新 Do明细 状态
///
///
public static void UpdateOrderDeliverDetailsStatus(WmsOrderDeliverDetails detail)
{
if (detail.CreateMovementQuantity == 0)
{
detail.DoDetailStatus = OrderStatusEnum.新建;
}
else if (detail.DeliverQuantity == detail.Quantity) //发货完成,单据完结
{
detail.DoDetailStatus = OrderStatusEnum.已完成;
}
else
{
detail.DoDetailStatus = OrderStatusEnum.处理中;
}
//明细状态名称赋值
detail.DoDetailStatusName = detail.DoDetailStatus.GetDescription();
}
///
/// 更新盘点单明细的盘点状态
///
///
///
public static void UpdateInventoryCheckOrderDetailsCheckStatus(WmsInventoryCheckOrderDetails checkOrderDetails, CheckStatusEnum checkStatus)
{
checkOrderDetails.CheckStatus= checkStatus;
checkOrderDetails.CheckStatusName = checkStatus.GetDescription();
}
///
/// 更新盘点单明细的盘点结果
///
///
///
public static void UpdateInventoryCheckOrderDetailsCheckResult(WmsInventoryCheckOrderDetails checkOrderDetails, CheckResultEnum checkResult)
{
checkOrderDetails.CheckResult = checkResult;
checkOrderDetails.CheckResultName = checkResult.GetDescription();
}
///
///
/// 更新盘点单明细的盘点操作分类
///
///
///
public static void UpdateInventoryCheckOrderDetailsCheckOperatorClassify(WmsInventoryCheckOrderDetails checkOrderDetails, CheckOperatorClassifyEnum checkOperatorClassify)
{
checkOrderDetails.CheckOperatorClassify = checkOperatorClassify;
checkOrderDetails.CheckOperatorClassifyName = checkOperatorClassify.GetDescription();
}
/////
///// 盘点单判断盘点是否有差异
/////
/////
/////
//public static bool CheckDifferenceForInventoryCheckOrder(List checkOrderDetailsList)
//{
// bool isCheckDifference = false;
// if (checkOrderDetailsList.Any(a => a.CheckResult == CheckResultEnum.盘亏 || a.CheckResult == CheckResultEnum.盘盈))
// {
// isCheckDifference = true;
// }
// return isCheckDifference;
//}
///
/// 根据单号规则创建单号 update by liuwq
///
///
public static async Task CreateOrderNoByRuleCommon(OrderTypeEnum orderTypeEnum, int businessType, SqlSugarRepository _wmsOrderMovement, SqlSugarRepository _WmsNoCreateRuleRep, SqlSugarRepository _repSNRep)
{
// 获取当前时间
DateTime currentTime = DateTime.Now;
// 格式化为年月日字符串
string formattedDate = currentTime.ToString("yyyyMMdd");
//按照单号规则生成单号 - 查找最新的创建的一条单据记录
var newestOrder = await _wmsOrderMovement.AsQueryable().Where(p => p.OrderType == orderTypeEnum).Where(p => p.OrderNo.Contains(formattedDate)).OrderBy(it => it.CreateTime, OrderByType.Desc)
.FirstAsync();
//按照单号规则生成单号
var OrderNoSjd = await SerialUtilOrder.GetSerialOrder(orderTypeEnum, _WmsNoCreateRuleRep, _repSNRep, businessType, newestOrder == null ? null : newestOrder.OrderNo);
if (OrderNoSjd == null || OrderNoSjd == "")
{
OrderNoSjd = Yitter.IdGenerator.YitIdHelper.NextId().ToString();
}
return OrderNoSjd;
}
}
}