实时打印与条码动态生成

如今条码已经在各行各业被普遍的使用,下面介绍我在制造行业动态生成条码的方法。

对于一个条码来说,一般包含如下几个部分内容:日期、流水号、特殊字符。

要生成一个条码,首先要给这些内容设置一个组合规则,可以是日期+特殊字符+流水,也可能是其他的。我们将规则使用Custom字段保存在数据库中。为了方便取值,规则名称统一设置成4个字符,下面是规则设置界面。

下面是Custom保存的数据内容:

工厂代码SK&班次代码&玻璃种类0&电池类型P&电池厂家&电池效率&生产日期SUBSTRING(CONVERT(varchar(100),DATEADD(HH,-8,GETDATE()),120),3,2)+SUBSTRING(‘ABCDEFGHIJKLMNOPQRSTUVWXYZ‘,MONTH(DATEADD(HH,-8,GETDATE())),1)+SUBSTRING(CONVERT(varchar(100),DATEADD(HH,-8,GETDATE()),120),9,2)&序列号码4

然后,就是要在一个查询里面,解析这组规则动态生成条码。比较关键的点在于,条码的重复性处理方式。一旦判断生成的条码是存在的,就要将工单流水号+1,使用goto语句重新生成。

sql代码如下:

--生成实时条码
ALTER PROCEDURE [dbo].[proc_GetRealtimeBarCode]
(
    @OrderNumber nvarchar(50),--工单号
    @LineCode nvarchar(50),--班次代码
    @SupplierCode nvarchar(50),--厂家代码
    @Eff decimal(18,2)--电池片效率
)
AS

declare @result nvarchar(500)--返回值

declare @Battery nvarchar(50)--电池片类型
declare @BarcodeType nvarchar(1)--流水号更新方式
declare @BarCodeSerial int--最新打印流水号
declare @Custome nvarchar(max)--打印自定义

---开启事务
begin tran

select
    @Battery=Battery,@BarcodeType=BarcodeType,@BarCodeSerial=BarCodeSerial,@Custome=Custome
from AkWorkOrderPrint
where OrderNumber=@OrderNumber

--如果没有定义规则,不能生成条码
if @Custome is null or @Custome=‘‘
begin
  set @result=‘false:请先设置实时打印规则‘
end
else
begin
  --定义规则列表
  declare @SplitTable table
  (
     Id int,
     Value nvarchar(max)
  )
  --获取规则
  insert into @SplitTable
  select Id,Value from SplitString(@Custome,‘&‘, 0)
  --循环表变量
  declare @customCount int
  select @customCount=COUNT(*) from @SplitTable
  declare @Id int
  --其他变量
  declare @date nvarchar(max)--时间格式
  declare @PrintDate datetime--最后打印时间

  --标签
  lable:
  set @Id=1
  set @result=‘‘

  --构造结果
  while @Id<=@customCount
  begin
    --当前自定义项
    declare @Value nvarchar(max)
    select @Value=Value from @SplitTable where Id=@Id
    --定义项的名称和值
    declare @itemTitle nvarchar(max)
    set @itemTitle=left(@Value,4)--自定义项的名称的长度必须为4,这个在前台设置的时候就要规范好,不能随便添加
    declare @itemValue nvarchar(max)
    set @itemValue=right(@Value,LEN(@Value)-4)--自定义项的值

    --生成规则
    if @itemTitle=‘班次代码‘
    begin
      if @LineCode is null or @LineCode=‘‘
      begin
        set @result=‘false:无法获取班次代码‘
        break;
      end
      else
      begin
        set @result=@result+@LineCode
      end
    end
    else if @itemTitle=‘电池厂家‘
    begin
      if @SupplierCode is null or @SupplierCode=‘‘
      begin
        set @result=‘false:无法获取电池厂家代码‘
        break;
      end
      else
      begin
        set @result=@result+@SupplierCode
      end
    end
    else if @itemTitle=‘电池效率‘
    begin
      if @Eff is null or @Eff<=0
      begin
        set @result=‘false:无法获取电池效率‘
        break;
      end
      else
      begin
        if @Battery=‘单晶‘
          begin
            set @result=@result+substring(‘ABCDEFGHIJKLMNOPQRSTUVWXYZ‘,(((@Eff*100)-1800)/20)+1,1)
          end
        else
          begin
            set @result=@result+substring(‘ABCDEFGHIJKLMNOPQRSTUVWXYZ‘,(((@Eff*100)-1500)/20)+1,1)
         end
      end
    end
    else if @itemTitle=‘生产日期‘
    begin
      set @itemValue=‘select @a=‘+@itemValue
      exec sp_executesql @itemValue,N‘@a nvarchar(max) output‘,@date output 

      set @result=@result+@date
    end
    else if @itemTitle=‘序列号码‘
    begin
      set @result=@result+right(cast(power(10,CAST(@itemValue as int)) as varchar)+@BarCodeSerial,CAST(@itemValue as int))
    end
    else
    begin
      set @result=@result+@itemValue
    end

    --变量+1
    set @Id=@Id+1
  end

  --条码已经存在的情况
  while left(@result,5)<>‘false‘ and exists(select * from AkBarcodeCompInfo where Barcode=@result)
  begin
        --变更流水号
        if @BarcodeType=‘是‘
        begin
            --用当前时间和最后一次打码时间对比 2013-12-31 08:00-->2013-12-31 07:55
            select @PrintDate=BarcodeDate from AkWorkOrderPrint where OrderNumber=@OrderNumber
            if CONVERT(varchar(100),dateadd(HH,-8,getdate()),111)<>CONVERT(varchar(100),dateadd(HH,-8,@PrintDate),111)
              begin
                 --不相同时清零,不相同表示本次打印为新的一天
                 update AkWorkOrderPrint set BarCodeSerial=0 where OrderNumber=@OrderNumber
              end
        end
        --流水号+1
        update AkWorkOrderPrint set BarCodeSerial=BarCodeSerial+1,BarcodeDate=GETDATE() where OrderNumber=@OrderNumber
        --更新变量
        select @BarCodeSerial=BarCodeSerial from AkWorkOrderPrint where OrderNumber=@OrderNumber
        --重新生成条码
        Goto lable
  end
end

--保存条码
if left(@result,5)<>‘false‘
begin
    insert into AkBarcodeCompInfo(Barcode,OrderNumber,PrintDate,LineCode)
    values(@result,@OrderNumber,GETDATE(),@LineCode)
end

commit tran--提交事务

select @result
时间: 2024-12-24 23:56:15

实时打印与条码动态生成的相关文章

java抓取动态生成的网页

最近在做项目的时候有一个需求:从网页面抓取数据,要求是首先抓取整个网页的html源码(后期更新要使用到).刚开始一看这个简单,然后就稀里哗啦的敲起了代码(在这之前使用过Hadoop平台的分布式爬虫框架Nutch,使用起来是很方便,但是最后因为速度的原因放弃了,但生成的统计信息在后来的抓取中使用到了),很快holder.html和finance.html页面成功下载完成,然后解析完holder.html页面之后再解析finance.html,然后很沮丧的发现在这个页面中我需要的数据并没有在html

IT咨询服务-客户案例(四):根据图片等素材,动态生成个性化图片

最近,慕名而来一个客户. 客户的目标    网站来一个用户,选择模版,上传图片等素材,生成自定义的图片,或者静态网站,然后分享到社交网站.有点类似于,网上制作名片,选择模版,输入个人信息,生成名片的设计图.可以下载名片设计图,或者直接让别人打印名片,寄给自己.     客户做这个产品的目的,是自己用,还是卖给别人,我是不用关心的.我需要做的,就是帮助客户实现他的目标. 客户的背景   计算机专业毕业,有iOS UI设计经验,了解Object-C和Java,对于JavaScript等Web前端技术

java抓取动态生成的网页--吐槽

最近在做项目的时候有一个需求:从网页面抓取数据,要求是首先抓取整个网页的html源码(后期更新要使用到).刚开始一看这个简单,然后就稀里哗啦的敲起了代码(在这之前使用过Hadoop平台的分布式爬虫框架Nutch,使用起来是很方便,但是最后因为速度的原因放弃了,但生成的统计信息在后来的抓取中使用到了),很快holder.html和finance.html页面成功下载完成,然后解析完holder.html页面之后再解析finance.html,然后很沮丧的发现在这个页面中我需要的数据并没有在html

使用Ghost.py爬取由JS动态生成的网页

很多网站的内容是由JS动态生成的,对于这样的网站查看它的源代码是看不出什么的,常规的爬虫对于这样的网站束手无策.我自己做了一个由JS生成的图片,并成功的用Ghost.py把它爬取了下来. 对于这么个图片看似平常,那么看下它的源代码 从源代码里看不出关于这张图片的地址,而图片的地址是在后端,由JS加载进去的,爬取这类网站需要模拟浏览器执行JS语句,得到执行JS后的页面,再实现爬取. 这里需要用到一个工具:ghost.py ghost.py是一个使用python编写的封装了webkit的网络工具.官

jQuery获取动态生成的元素

需求描述:页面上可以动态添加数据,比如table,点击按钮可以动态添加行.又或页面 加载时table数据是通过ajax从后台获取的.而这时我们想要获取其中的某个值,又该如何获取呢? 如果是要通过某个事件来获取的比如click,mouseover等等,则可以使用live()方法 $(".button").live("click",function(){ console.info($("#mytd").html()); }) live()的详细说明参

利用Java动态生成 PDF 文档

利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那么目前最佳的解决方案,你可能会想到 iText ,对没错... iText+(Velocity / Freemarker)可以实现.不过据我熟悉,iText本身提供的HTML解析器还是不够强大,许多HTML标签和属性无法识别,更悲催的是简单的CSS它不认识,排版调整样式会让你头大的.不要失望,接下来

python爬取ajax动态生成的数据 以抓取淘宝评论为例子

在学习python的时候,一定会遇到网站内容是通过ajax动态请求.异步刷新生成的json数据的情况,并且通过python使用之前爬取静态网页内容的方式是不可以实现的,所以这篇文章将要讲述如果在python中爬取ajax动态生成的数据. 至于读取静态网页内容的方式,有兴趣的可以查看博客内容. 这里我们以爬取淘宝评论为例子讲解一下如何去做到的. 这里主要分为了四步: 一 获取淘宝评论时,ajax请求链接(url) 二 获取该ajax请求返回的json数据 三 使用python解析json数据 四

怎样用java编程抓取动态生成的网页

最近在做项目的时候有一个需求:从网页面抓取数据,要求是首先抓取整个网页的html源码(后期更新要使用到).刚开始一看这个简单,然后就稀里哗啦的敲起了代码(在这之前使用过Hadoop平台的分布式爬虫框架Nutch,使用起来是很方便,但是最后因为速度的原因放弃了,但生成的统计信息在后来的抓取中使用到了),很快holder.html和finance.html页面成功下载完成,然后解析完holder.html页面之后再解析finance.html,然后很沮丧的发现在这个页面中我需要的数据并没有在html

关于动态生成dom绑定事件失效的原因

之前做项目都是直接用jquery的bind绑定事件,不过当时都不是动态生成dom元素,而是已经页面中原本存在的dom元素进行事件绑定,最近在测试给动态生成的dom绑定事件的时候发现事件失效,于是就测试了一下: 1.事件失效的原因:(1)bind事件绑定只对dom中存在的元素有效,对于我们后来动态增加的元素是监测不到,所以绑定不了 (2)同样,当你使用var aa = document.getElementsByTagName("动态生成的元素");来获取动态生成的元素的时候也是获取不到