using Rhea.Common;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Globalization;
|
using System.Linq;
|
using System.Text;
|
using System.Text.RegularExpressions;
|
using static Tiger.Business.WMS.Barcode;
|
|
namespace Tiger.Business.WMS
|
{
|
/// <summary>
|
/// 条码分析基类
|
/// </summary>
|
public class BarcodeAnalysis
|
{
|
public Barcode Barcode;
|
/// <summary>
|
/// 条码分析
|
/// </summary>
|
/// <param name="metaSn"></param>
|
public virtual Result<Barcode> Analyse(Barcode barcode)
|
{
|
var result = new Result<Barcode>(Result.Flags.Failed);
|
Barcode = barcode;
|
|
if (!string.IsNullOrEmpty(Barcode.MetaSn))
|
{
|
Barcode.QtyStr = "1";
|
Barcode.Type = Types.Other;
|
Barcode.ItemType = ItemTypes.Unknown;
|
result.Flag = Result.Flags.Success;
|
}
|
|
result.Data = Barcode;
|
return result;
|
}
|
|
/// <summary>
|
/// 根据字符串返回流水号
|
/// </summary>
|
/// <param name="str"></param>
|
/// <returns></returns>
|
public static int? GetSerialNo(string str)
|
{
|
int serialNo;
|
try
|
{
|
serialNo = Convert.ToInt32(new Regex(@"[^\d]*").Replace(str, ""));
|
}
|
catch
|
{
|
return null;
|
}
|
return serialNo;
|
}
|
|
/// <summary>
|
/// 根据字符串返回重打流水号
|
/// </summary>
|
/// <param name="str"></param>
|
/// <returns></returns>
|
public static int? GetReprintNo(string str)
|
{
|
int qty;
|
try
|
{
|
qty = Convert.ToInt32(str, 16);
|
}
|
catch
|
{
|
return null;
|
}
|
return qty;
|
}
|
|
/// <summary>
|
/// 根据字符串返回数量
|
/// </summary>
|
/// <param name="str"></param>
|
/// <returns></returns>
|
public static int? GetInt32(string str)
|
{
|
int qty;
|
try
|
{
|
qty = Convert.ToInt32(str);
|
}
|
catch
|
{
|
return null;
|
}
|
return qty;
|
}
|
|
/// <summary>
|
/// 根据字符串返回数量
|
/// </summary>
|
/// <param name="str"></param>
|
/// <returns></returns>
|
public static double? GetDouble(string str)
|
{
|
double qty;
|
try
|
{
|
qty = Convert.ToDouble(str);
|
}
|
catch
|
{
|
return null;
|
}
|
return qty;
|
}
|
|
/// <summary>
|
/// 根据日期编码返回生产日期
|
/// </summary>
|
/// <param name="dateStr"></param>
|
/// <returns></returns>
|
public static DateTime? GetDateTime(string dateStr)
|
{
|
DateTime proddate;
|
dateStr = dateStr ?? "";
|
if (dateStr.Length == 8)
|
{
|
try
|
{
|
//年月日
|
proddate = DateTime.ParseExact(dateStr, "yyyyMMdd", new CultureInfo("zh-CN", true));
|
}
|
catch
|
{
|
return null;
|
}
|
}
|
else if (dateStr.Length == 6)
|
{
|
try
|
{
|
//年月日
|
proddate = DateTime.ParseExact(dateStr, "yyMMdd", new CultureInfo("zh-CN", true));
|
}
|
catch
|
{
|
try
|
{
|
//年周
|
var firstDate = Convert.ToDateTime(dateStr.Substring(0, 4) + "-1-1");
|
int weekNum = Convert.ToInt32(dateStr.Substring(4, 2));
|
|
int daysOffset = DayOfWeek.Monday - firstDate.DayOfWeek;
|
DateTime firstSunday = firstDate.AddDays(daysOffset);
|
var calendar = CultureInfo.CurrentCulture.Calendar;
|
int firstWeek = calendar.GetWeekOfYear(firstDate, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
|
if (firstWeek <= 1)
|
{
|
weekNum -= 1;
|
}
|
proddate = firstSunday.AddDays(weekNum * 7 - 1);
|
if (proddate.Year < firstDate.Year)
|
{
|
proddate = firstDate;
|
}
|
if (proddate.Year > firstDate.Year)
|
{
|
proddate = firstDate.AddYears(1).AddDays(-1);
|
}
|
}
|
catch
|
{
|
try
|
{
|
//年月
|
proddate = DateTime.ParseExact(dateStr, "yyyyMM", new CultureInfo("zh-CN", true));
|
}
|
catch
|
{
|
try
|
{
|
proddate = Convert.ToDateTime(dateStr);
|
}
|
catch
|
{
|
//proddate = DateTime.Now;
|
return null;
|
}
|
}
|
}
|
}
|
}
|
else if (dateStr.Length == 4)
|
{
|
try
|
{
|
//年周
|
var firstDate = DateTime.ParseExact(dateStr.Substring(0, 2), "yy", CultureInfo.CurrentCulture);
|
int weekNum = Convert.ToInt32(dateStr.Substring(2, 2));
|
|
int daysOffset = DayOfWeek.Monday - firstDate.DayOfWeek;
|
DateTime firstSunday = firstDate.AddDays(daysOffset);
|
var calendar = CultureInfo.CurrentCulture.Calendar;
|
int firstWeek = calendar.GetWeekOfYear(firstDate, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
|
if (firstWeek <= 1)
|
{
|
weekNum -= 1;
|
}
|
proddate = firstSunday.AddDays(weekNum * 7 - 1);
|
if (proddate.Year < firstDate.Year)
|
{
|
proddate = firstDate;
|
}
|
if (proddate.Year > firstDate.Year)
|
{
|
proddate = firstDate.AddYears(1).AddDays(-1);
|
}
|
}
|
catch
|
{
|
try
|
{
|
//年月
|
proddate = DateTime.ParseExact(dateStr, "yyMM", new CultureInfo("zh-CN", true));
|
}
|
catch
|
{
|
try
|
{
|
//年
|
proddate = DateTime.ParseExact(dateStr, "yyyy", new CultureInfo("zh-CN", true));
|
}
|
catch
|
{
|
try
|
{
|
proddate = Convert.ToDateTime(dateStr);
|
}
|
catch
|
{
|
//无法识别则使用当前时间
|
//proddate = DateTime.Now;
|
return null;
|
}
|
}
|
}
|
}
|
}
|
else
|
{
|
try
|
{
|
proddate = Convert.ToDateTime(dateStr);
|
}
|
catch
|
{
|
//proddate = DateTime.Now;
|
return null;
|
}
|
}
|
return proddate;
|
}
|
|
/// <summary>
|
/// 是否非法条码
|
/// </summary>
|
/// <param name="sn"></param>
|
/// <returns></returns>
|
public static bool IsIllegal(string sn)
|
{
|
return !new Barcode(sn).IsRegular;
|
}
|
|
/// <summary>
|
/// 获取条码类型
|
/// </summary>
|
/// <param name="sn"></param>
|
/// <returns></returns>
|
public static Barcode.Types GetType(string sn)
|
{
|
return new Barcode(sn).Type;
|
}
|
|
/// <summary>
|
/// 判断是否重打的条码
|
/// </summary>
|
/// <param name="sn"></param>
|
/// <returns></returns>
|
public static bool IsReprint(string sn)
|
{
|
return new Barcode(sn).IsReprintSn;
|
}
|
}//endClass
|
}
|