// 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
|
{
|
|
/// <summary>
|
/// 根据批次规则获取批次规则属性格式
|
/// </summary>
|
/// <param name="batchRule"></param>
|
/// <returns></returns>
|
public static List<EnumOutput> GetAttrForamtEnumList(BatchRuleEnum batchRule)
|
{
|
|
|
if (batchRule == BatchRuleEnum.收货日期)
|
{
|
return new List<EnumOutput>()
|
{
|
|
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<EnumOutput>()
|
{
|
|
new EnumOutput(){ Title= AttrForamtEnum.字符.ToString(),Value= Convert.ToInt32(AttrForamtEnum.字符),Desc=AttrForamtEnum.字符.GetDescription() },
|
};
|
}
|
|
}
|
|
|
/// <summary>
|
/// 根据ASN单明细、批次规则生成批次号
|
/// </summary>
|
/// <param name="currentAsnDetail"></param>
|
/// <param name="materialBaseInfo"></param>
|
/// <param name="batchRuleDetailsList"></param>
|
/// <returns></returns>
|
public static string GetBatch(WmsOrderAsnDetails currentAsnDetails, WmsMaterialOutput materialBaseInfo, List<WmsBaseBatchRule> 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;
|
|
}
|
}
|