| | |
| | | using HH.WCS.Mobox3.DSZSH.util; |
| | | |
| | | using SqlSugar; |
| | | |
| | | using System; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using HH.WCS.Mobox3.DSZSH.util; |
| | | using SqlSugar; |
| | | |
| | | namespace HH.WCS.Mobox3.DSZSH.wms { |
| | | internal class SYSHelper { |
| | | /// <summary> |
| | | /// [ 序列号生成 ] 帮助类 |
| | | /// </summary> |
| | | public class SYSHelper { |
| | | private static object locker = new object(); |
| | | internal static int GetSerialNumber(string snType, string prefix) { |
| | | /// <summary> |
| | | /// <c>"{prefix}-{DateTime.Now.ToString(dateFormat)}-{id.ToString().PadLeft(length,'0')}"</c> |
| | | /// </summary> |
| | | /// <param name="snType"></param> |
| | | /// <param name="prefix"></param> |
| | | /// <param name="dateFormat"></param> |
| | | /// <param name="length"></param> |
| | | /// <example><code><![CDATA[ |
| | | /// private static string GenerateOrderNo(string snType, string prefix) { |
| | | /// //var id = SYSHelper.GetSerialNumber(snType, prefix); |
| | | /// //var date = DateTime.Now.ToString("yyMMdd"); |
| | | /// //return $"{prefix}{date}-{id.ToString().PadLeft(4, '0')}"; |
| | | /// return SYSHelper.GenerateSN(snType, prefix, "yyMMdd"); |
| | | /// } |
| | | /// ]]></code></example> |
| | | /// <returns></returns> |
| | | public static string GenerateSN(string snType, string prefix, string dateFormat = "yyMM", int length = 4) { |
| | | var header = $"{prefix}{DateTime.Now.ToString(dateFormat)}-"; |
| | | var res = GetSerialNumber(snType, header); |
| | | if (res == 0) return ""; |
| | | else { |
| | | return $"{header}{res.ToString().PadLeft(length, '0')}"; |
| | | } |
| | | } |
| | | //原框架方法,不会按日更新MAXID,现在设为私有隐藏,默认调用封装后的GenerateSN方法 |
| | | private static int GetSerialNumber(string snType, string prefix) { |
| | | int result = 0; |
| | | lock (locker) { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var sId = db.Queryable<OI_SYS_MAXID>().Where(a => a.CN_S_TYPE.Trim() == snType && a.CN_S_PRE.Trim() == prefix).First(); |
| | | if (sId != null) { |
| | | |
| | | if (sId.CN_T_LAST < DateTime.Today) { |
| | | sId.CN_N_MAX = 1; |
| | | } |
| | | else { |
| | | sId.CN_N_MAX++; |
| | | } |
| | | |
| | | sId.CN_T_LAST = DateTime.Now; |
| | | if (db.Ado.ExecuteCommand($"update OI_SYS_MAXID set CN_N_MAX={sId.CN_N_MAX}, CN_T_LAST='{sId.CN_T_LAST}' where CN_S_TYPE='{snType}' and CN_S_PRE='{prefix}' ") > 0) { |
| | | //LogHelper.Info($"set cn_n_max {sId.CN_N_MAX}"); |
| | | //原框架逻辑(更接近Mobox的序列号生成方法) |
| | | sId.CN_N_MAX++; |
| | | if (db.Ado.ExecuteCommand($"update OI_SYS_MAXID set CN_N_MAX={sId.CN_N_MAX} " + |
| | | $"where CN_S_TYPE='{snType}' and CN_S_PRE='{prefix}' ") > 0) { |
| | | result = sId.CN_N_MAX; |
| | | } |
| | | |
| | | //if (db.Updateable<OI_SYS_MAXID>(sId).UpdateColumns(it => new { it.CN_N_MAX, it.CN_T_LAST}).ExecuteCommand() > 0) { |
| | | //按日重置MAXID的逻辑(现不考虑使用) |
| | | //sId.CN_N_MAX = sId.CN_T_LAST < DateTime.Today ? 1 : sId.CN_N_MAX + 1; |
| | | //sId.CN_T_LAST = DateTime.Now; |
| | | //if (db.Ado.ExecuteCommand($"update OI_SYS_MAXID set CN_N_MAX={sId.CN_N_MAX}, CN_T_LAST='{sId.CN_T_LAST}' " + |
| | | // $"where CN_S_TYPE='{snType}' and CN_S_PRE='{prefix}' ") > 0) { |
| | | // result = sId.CN_N_MAX; |
| | | //} |
| | | |
| | | //if (db.Updateable<OI_SYS_MAXID>() |
| | | // .SetColumns(it => it.CN_N_MAX == sId.CN_N_MAX && it.CN_T_LAST == sId.CN_T_LAST) |
| | | // .Where(it => it.CN_S_TYPE == sId.CN_S_TYPE && it.CN_S_PRE == sId.CN_S_TYPE) |
| | | // .ExecuteCommand() > 0) { |
| | | // result = sId.CN_N_MAX; |
| | | //} |
| | | |
| | | //var parameters = new[] { |
| | | // new SugarParameter("@CN_N_MAX", sId.CN_N_MAX), |
| | | // new SugarParameter("@CN_T_LAST", sId.CN_T_LAST), |
| | | // new SugarParameter("@CN_S_TYPE", sId.CN_S_TYPE), |
| | | // new SugarParameter("@CN_S_PRE", sId.CN_S_TYPE) |
| | | //}; |
| | | |
| | | //var sql = @"UPDATE OI_SYS_MAXID |
| | | // SET CN_N_MAX = @CN_N_MAX, CN_T_LAST = @CN_T_LAST |
| | | // WHERE CN_S_TYPE = @CN_S_TYPE AND CN_S_PRE = @CN_S_PRE"; |
| | | |
| | | //if (db.Ado.ExecuteCommand(sql, parameters) > 0) { |
| | | // result = sId.CN_N_MAX; |
| | | // LogHelper.Info($"set cn_n_max {sId.CN_N_MAX}"); |
| | | //} |
| | | |
| | | |
| | | } |
| | | else { |
| | | //插入表 |
| | | sId = new OI_SYS_MAXID { CN_S_TYPE = snType, CN_S_PRE = prefix, CN_N_MAX = 1 }; |
| | | result = db.Insertable<OI_SYS_MAXID>(sId).ExecuteCommand() > 0 ? 1 : 0; |
| | | |
| | | result = db.Insertable(sId).ExecuteCommand() > 0 ? 1 : 0; |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | [SugarTable("dbo.OI_SYS_MAXID")] |
| | | public class OI_SYS_MAXID { |
| | | public string CN_S_TYPE { get; set; } |