// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
using Admin.NET.Application.Entity;
using Admin.NET.Application.Service.WmsBase.WmsBatchRuleDetail.Dto;
using Admin.NET.Core.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Admin.NET.Application.CommonHelper;
public class BatchRuleHelper
{
///
/// 根据批次规则获取批次规则属性格式
///
///
///
public static List GetAttrForamtEnumList(BatchRuleEnum batchRule)
{
if (batchRule == BatchRuleEnum.收货日期)
{
return new List()
{
new EnumOutput(){ Title= AttrForamtEnum.日期年.ToString(),Value= Convert.ToInt32(AttrForamtEnum.日期年),Desc=AttrForamtEnum.日期年.GetDescription() },
new EnumOutput(){ Title= AttrForamtEnum.日期年月.ToString(),Value= Convert.ToInt32(AttrForamtEnum.日期年月),Desc=AttrForamtEnum.日期年月.GetDescription() },
new EnumOutput(){ Title= AttrForamtEnum.日期年月日.ToString(),Value= Convert.ToInt32(AttrForamtEnum.日期年月日),Desc=AttrForamtEnum.日期年月日.GetDescription() },
new EnumOutput(){ Title= AttrForamtEnum.时间年月日时.ToString(),Value= Convert.ToInt32(AttrForamtEnum.时间年月日时),Desc=AttrForamtEnum.时间年月日时.GetDescription() },
new EnumOutput(){ Title= AttrForamtEnum.时间年月日时分.ToString(),Value= Convert.ToInt32(AttrForamtEnum.时间年月日时分),Desc=AttrForamtEnum.时间年月日时分.GetDescription() },
new EnumOutput(){ Title= AttrForamtEnum.时间年月日时分秒.ToString(),Value= Convert.ToInt32(AttrForamtEnum.时间年月日时分秒),Desc=AttrForamtEnum.时间年月日时分秒.GetDescription() },
};
}
else
{
return new List()
{
new EnumOutput(){ Title= AttrForamtEnum.字符.ToString(),Value= Convert.ToInt32(AttrForamtEnum.字符),Desc=AttrForamtEnum.字符.GetDescription() },
};
}
}
///
/// 根据ASN单明细、批次规则生成批次号
///
///
///
///
///
public static string GetBatch(WmsOrderAsnDetails currentAsnDetails, WmsMaterialOutput materialBaseInfo, List batchRuleDetailsList)
{
bool isHasBatchRule = batchRuleDetailsList.Count > 0;
if (isHasBatchRule)
{
//如果配置了批次规则 ,批次号=往来单位+物料+12个批次属性
string batchNo = currentAsnDetails.SupplierCode + "-" + materialBaseInfo.MaterialCode;
foreach (var item in batchRuleDetailsList.OrderBy(o => o.Priority))
{
batchNo += "-";
//TODO 目前 批次规则只开放了 收货日期,后面业务确定了再增加
if (item.BatchRuleType == BatchRuleEnum.收货日期)
{
if (item.AttrForamt == AttrForamtEnum.日期年)
{
batchNo += DateTime.Now.ToString("yyyy");
}
else if (item.AttrForamt == AttrForamtEnum.日期年月)
{
batchNo += DateTime.Now.ToString("yyyyMM");
}
else if (item.AttrForamt == AttrForamtEnum.日期年月日)
{
batchNo += DateTime.Now.ToString("yyyyMMdd");
}
else if (item.AttrForamt == AttrForamtEnum.时间年月日时)
{
batchNo += DateTime.Now.ToString("yyyyMMddHH");
}
else if (item.AttrForamt == AttrForamtEnum.时间年月日时分)
{
batchNo += DateTime.Now.ToString("yyyyMMddHHmm");
}
else if (item.AttrForamt == AttrForamtEnum.时间年月日时分秒)
{
batchNo += DateTime.Now.ToString("yyyyMMddHHmmss");
}
}
else if (item.BatchRuleType == BatchRuleEnum.物料颜色)
{
if (string.IsNullOrWhiteSpace(materialBaseInfo.Color) && item.InputControl == InputControlEnum.必输)
{
throw Oops.Oh($"配置的批次规则物料颜色为必输项,该物料{materialBaseInfo.MaterialCode}的颜色为空!");
}
batchNo += materialBaseInfo.Color;
}
}
return batchNo;
}
return string.Empty;
}
}