CPS条码生成原理

CPS条码生成原理
系列目录

前言


本节主要介绍CPS中产品条码、批次号的生成原理。

代码实现


CPS中条码生成主要涉及四个表:
PRD_SERIAL_BOOK(标签序列号流水记录表)
CFG_LABEL_RULE(条码标签规则)
CFG_LABEL_TEMPLATE(标签模板维护)
CFG_LABEL_TEMPLATE_PARAMETER(模板参数维护)
CFG_LABEL_PARAMETER(标签参数维护)
其中 PRD_SERIAL_BOOKCFG_LABEL_RULE作用是生产条码,CFG_LABEL_TEMPLATECFG_LABEL_PARAMETER是打印标签。

根据条码规则和流水记录表生成唯一码,如下:

        /// <summary>
        /// CPS页面生产流水号公共方法
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public string GenerateCommonSerialNumber(CommonLotNumberInput input)
        {
            try
            {
                lock (SerialLock)
                {
                    if (String.IsNullOrEmpty(input.RuleCode))
                    {
                        throw new UserFriendlyException("条码规则不能为空");
                    }
                    LabelRule labelRule =  _labelRuleRepository.FirstOrDefault(r => r.RuleCode == input.RuleCode);
                    if (labelRule == null)
                    {
                        throw new UserFriendlyException(string.Format("该[{0}]条码规则不存在", input.RuleCode));
                    }
                    int n = labelRule.SerialLenth;
                    string format = string.Empty;
                    while (n > 0)
                    {
                        format += "0";
                        n--;
                    }
                    DateTime dtBusiness = Convert.ToDateTime(DateTime.Now);
                    GregorianCalendar gc = new GregorianCalendar();
                    SerialBook serialBook =  _serialBookRepository.FirstOrDefault(s => s.SNType == labelRule.RuleCode && s.GenerateCondition == labelRule.Prefix);
                    if (serialBook == null)
                    {
                        serialBook = new SerialBook
                        {
                            TenantId = AbpSession.TenantId,
                            OrgId = AbpSession.OrgId,
                            SNType = labelRule.RuleCode,
                            Prefix = labelRule.Prefix,
                            CreationTime = DateTime.Now,
                            Year = dtBusiness.Year,
                            Quarter = GetQuarter(dtBusiness.Month),
                            Month = dtBusiness.Month,
                            Week = gc.GetWeekOfYear(dtBusiness, CalendarWeekRule.FirstDay, DayOfWeek.Monday),
                            Date = dtBusiness.Day,
                            MaxSerial = 1.ToString(format),
                            GenerateCondition = labelRule.Prefix,
                        };
                        serialBook = _serialBookRepository.Insert(serialBook);
                        CurrentUnitOfWork.SaveChanges();
                    }
                    else
                    {
                        serialBook.MaxSerial = (serialBook.MaxSerial.ToInt32() + 1).ToString(format);
                        serialBook = _serialBookRepository.Update(serialBook);
                    }
                    if (serialBook.MaxSerial.Length > labelRule.SerialLenth)
                    {
                        throw new UserFriendlyException(L("SerialLenthTooLarge", labelRule.RuleCode));
                    }
                    //生成条码 前缀+年+月+日+流水号
                    string barcode = labelRule.Prefix;
                    if (labelRule.Year)
                    {
                        barcode += dtBusiness.Year.ToString().Remove(0, 2);
                    }
                    if (labelRule.Month)
                    {
                        barcode += dtBusiness.Month.ToString("00");
                    }
                    if (labelRule.Date)
                    {
                        barcode += dtBusiness.Day.ToString("00");
                    }
                    barcode += serialBook.MaxSerial;
                    return barcode;
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五菱宏光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值