| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.ComponentModel.DataAnnotations; |
| | | using System.Data; |
| | | using System.Data.Entity; |
| | | using System.Linq; |
| | | using System.Text; |
| | |
| | | } |
| | | else |
| | | { |
| | | next = serialGen.SERIAL_VALUE; |
| | | //跳过以设置号码结尾的流水号 |
| | | var ignoreList = (rule.SERIAL_IGNORE ?? "").Split(',', StringSplitOptions.RemoveEmptyEntries); |
| | | var isIgnore = false; |
| | | do |
| | | { |
| | | next += rule.SERIAL_INTERVAL; |
| | | foreach (var num in ignoreList) |
| | | { |
| | | isIgnore |= next.ToString().EndsWith(num); |
| | | } |
| | | } while (isIgnore && !ignoreList.IsNullOrEmpty()); |
| | | //流水号重置 |
| | | switch (rule.SERIAL_RESET.GetEnum<BAS_CODE_DTL.SERIAL_RESETs>()) |
| | | { |
| | | case BAS_CODE_DTL.SERIAL_RESETs.Default: |
| | | if (serialGen.SERIAL_VALUE + 1 > rule.SERIAL_MAX) |
| | | if (next > rule.SERIAL_MAX) |
| | | { |
| | | serialGen.SERIAL_VALUE = rule.SERIAL_MIN - 1; |
| | | next = rule.SERIAL_MIN; |
| | | serialGen.SERIAL_DATE = DateTime.Now; |
| | | } |
| | | break; |
| | | case BAS_CODE_DTL.SERIAL_RESETs.Year: |
| | | if (serialGen.SERIAL_DATE.Year != DateTime.Now.Year) |
| | | { |
| | | serialGen.SERIAL_VALUE = rule.SERIAL_MIN - 1; |
| | | next = rule.SERIAL_MIN; |
| | | serialGen.SERIAL_DATE = DateTime.Now; |
| | | } |
| | | break; |
| | | case BAS_CODE_DTL.SERIAL_RESETs.Month: |
| | | if (serialGen.SERIAL_DATE.Month != DateTime.Now.Month) |
| | | { |
| | | serialGen.SERIAL_VALUE = rule.SERIAL_MIN - 1; |
| | | next = rule.SERIAL_MIN; |
| | | serialGen.SERIAL_DATE = DateTime.Now; |
| | | } |
| | | break; |
| | |
| | | if ((serialGen.SERIAL_DATE.Date.DayOfWeek.GetValue() > 0 && DateTime.Now.Date.DayOfWeek.GetValue() == 0) |
| | | || (DateTime.Now.Date - serialGen.SERIAL_DATE.Date).TotalDays >= 7) |
| | | { |
| | | serialGen.SERIAL_VALUE = rule.SERIAL_MIN - 1; |
| | | next = rule.SERIAL_MIN; |
| | | serialGen.SERIAL_DATE = DateTime.Now; |
| | | } |
| | | break; |
| | | case BAS_CODE_DTL.SERIAL_RESETs.Day: |
| | | if (serialGen.SERIAL_DATE.Date != DateTime.Now.Date) |
| | | { |
| | | serialGen.SERIAL_VALUE = rule.SERIAL_MIN - 1; |
| | | next = rule.SERIAL_MIN; |
| | | serialGen.SERIAL_DATE = DateTime.Now; |
| | | } |
| | | break; |
| | | case BAS_CODE_DTL.SERIAL_RESETs.NotReset: |
| | | break; |
| | | } |
| | | |
| | | //流水号取号 |
| | | if (serialGen.SERIAL_VALUE + 1 <= rule.SERIAL_MAX) |
| | | if (next <= rule.SERIAL_MAX) |
| | | { |
| | | serialGen.SERIAL_VALUE++; |
| | | serialGen.SERIAL_VALUE = next; |
| | | serialGen.LAST_GEN_DATE = DateTime.Now; |
| | | serialGen.LAST_HIS_ID = hisID; |
| | | } |
| | |
| | | { |
| | | db.Updateable(serialGen, "system").UpdateColumns(q => new { q.SERIAL_VALUE, q.SERIAL_DATE, q.LAST_GEN_DATE, q.LAST_HIS_ID }).ExecuteCommand(); |
| | | } |
| | | next = serialGen.SERIAL_VALUE; |
| | | //Debug.WriteLine($"{hisID}: {DateTime.Now:HH:mm:ss.fff} > 继续取号成功[{next}],休息1000ms"); |
| | | //Thread.Sleep(1000); |
| | | } |
| | |
| | | his.RULE_ID = rule.ID; |
| | | his.GEN_CODE = string.Concat(rule.Details.OrderBy(q => q.RULE_SEQ).Select(q => q.CodeValue)); |
| | | his.GEN_DATE = DateTime.Now; |
| | | Biz.Db.Insertable(his).ExecuteCommand(); |
| | | try |
| | | { |
| | | Biz.Db.Insertable(his).ExecuteCommand(); |
| | | } |
| | | catch (System.Exception ex) |
| | | { |
| | | throw new DataException(his.GEN_CODE, ex); |
| | | } |
| | | result.Data = his.GEN_CODE; |
| | | } |
| | | } |
| | | catch (DataException ex) |
| | | { |
| | | result.CatchExceptionWithLog(ex.InnerException, Biz.L("BAS.CodeRule.GenerateSnHisException", ruleCode, ex.Message)); |
| | | } |
| | | catch (System.Exception ex) |
| | | { |
| | |
| | | } |
| | | else |
| | | { |
| | | var his = new BAS_CODE_HIS(); |
| | | var argsIndex = 0; |
| | | var his = new BAS_CODE_HIS(); |
| | | foreach (var item in rule.Details.OrderBy(q => q.RULE_SEQ)) |
| | | { |
| | | switch (item.DATA_TYPE.GetEnum<BAS_CODE_DTL.DATA_TYPEs>()) |