Foxtable(狐表)用户栏目专家坐堂 → [求助]网页登录系统如何生成复杂编号


  共有3460人关注过本帖树形打印复制链接

主题:[求助]网页登录系统如何生成复杂编号

帅哥哟,离线,有人找我吗?
huangfanzi
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
[求助]网页登录系统如何生成复杂编号  发帖心情 Post By:2020/3/7 0:15:00 [只看该作者]

根据帮助文件,我在服务端的HttpRequest中写了以下代码,我要生成的单号样式是: SCXD-20200307-001  其中 SCXD 是固定字符,20200307是当前日期, 001是要不停递增,当新的一天开始时,再从001开始编号
 Case "scrwtzdh.htm" '生成生产任务通知单号
        Static bhs As new Dictionary(of String,Integer) '这个字典用于记录每个前缀的下一序号
  If e.PostValues.ContainsKey("制单日期"AndAlso e.PostValues.ContainsKey("工程代码"Then  --这句代码是帮助文件上的,不知如何改,又有何用
            Dim rq As Date = Date.Now
            Dim max As Integer
            Dim bh As String
            Dim prefix As String = "SCXD-" &  Format(rq, "yyyyMMdd")
            If bhs.ContainsKey(prefix) = False Then '如果字典中不存在次前缀的序号,
                Dim cmd As New SQLCommand
                cmd.C onnection Name = "Sql QqServer" '外部表请设置数据源名称'
                cmd.C ommandText = "S elect max(单号) From {生产任务通知} Where 单号 Like '" & prefix & "%'"
                bh = cmd.ExecuteScalar
                If bh IsNot Nothing Then
                    bh = bh.SubString(14)
                    Integer.TryParse(bh,max)
                End If
                bhs.Add(prefix,max)
            Else
                max = bhs(prefix)
            End If
            max = max + 1
            bhs(prefix) = max
            e.WriteString(Prefix & "-" & Format(max,"000"))
  End If

请老师帮我看看,在手机上如何获得新单号,例如以下代码:
    Dim dr As DataRow = _dt生产任务通知.AddNew()
    dr("录入时间") = Date.Now
    dr("单号") = 【这里希望出现单号

另外,目前这个项目之前一直是电脑上的客户端使用的,我现在是要开发手机端可同时使用,在电脑客户端上已经用了“用OpenQQ实现网络环境下的编号”的方法,并且一切正常,如果出现电脑上与手机上同时下任务单生成新的单号,这二者会不会出现问题,例如在数据库中出现了相同的单号
谢谢老师
[此贴子已经被作者于2020/3/7 0:17:10编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/7 8:51:00 [只看该作者]

如果实现了“用OpenQQ实现网络环境下的编号”的方法,直接使用这个就可以了,建议把OpenQQ服务端和web服务端合并到同一个项目,然后网页代码里直接这样用即可

Case "订单.htm"
……其它处理代码
    Dim dr As DataRow = _dt生产任务通知.AddNew()
    dr("录入时间") = Date.Now
    Dim msg As String = "SCXD" '“用OpenQQ实现网络环境下的编号”帮助里的类别
    If flbhs.ContainsKey(msg) Then '如果存在这个类别的编号
        flbhs(msg) = flbhs(msg) + 1 '将该类别最大编号加1
    Else
        flbhs.Add(msg,1) '如果是这个列表的首次编号,则编号等于1
    End If
    dr("单号") = "SCXD-" &  Format(rq, "yyyyMMdd") & Format(id,"000")
……

 回到顶部
帅哥哟,离线,有人找我吗?
huangfanzi
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2020/3/7 10:03:00 [只看该作者]

dr("单号") = "SCXD-" &  Format(rq, "yyyyMMdd") & Format(id,"000")
老师,上面代码中,就这个 id 没看明白,以下是我OpenQQ实现网络环境下的编号的代码,请老师根据代码帮我改改在网页上如何写,谢谢!

服务端全局代码:
Public scxdbh As new Dictionary(of String,Integer)

服务端AfterOpenProject代码:
Dim dt2 As DataTable
Dim cmd2 As New SQLCommand
cmd2.C onnection Name = "SqlQqServer"
cmd2.C ommandT ext = "S elect Year(录入时间) As 年, Month(录入时间) As 月, Day(录入时间) As 日, Max(单号) as 单号 From {生产任务通知} Group By Year(录入时间), Month(录入时间),Day(录入时间)"
dt2 = cmd2.ExecuteReader
scxdbh.Clear()
For Each dr As DataRow In dt2.DataRows
    Dim qz As String = dr("年") & Format(dr("月"),"00") & Format(dr("日"),"00") '编号前缀,4位年,2位月,2位日
    Dim bh As String = dr("单号")
    Dim id As Integer
    If bh.Length = 17 Then
        bh = bh.SubString(14)
        If Integer.TryParse(bh,id) Then
            scxdbh.Add(qz, id)
        End If
    End If
Next

服务端OpenQQ服务端事件ReceivedMessage代码:
Dim msg2 As String = e.Message '生产任务通知单号
If msg2.StartsWith(":x") AndAlso msg1.EndsWith("x:") Then
    msg2 = msg2.SubString(2, msg2.Length - 4)
    If scxdbh.ContainsKey(msg2) Then '如果存在这个年月日的编号
        scxdbh(msg2) = scxdbh(msg2) + 1 '将该日最大编号加1
    Else
        scxdbh.Add(msg2,1) '如果是这个年月日的首次编号,则编号等于1
    End If
    e.ReturnValue = scxdbh(msg2) '将编号返回给客户端
End If

客户端部分代码:
Dim cmd As New SQLCommand
    Dim dt As Date
    cmd.C onnection Name = "ShcsErpSQL"
    cmd.C ommand Text = "Select GetDate()"
    dt = cmd.ExecuteScalar()
    Dim dqsj As Date = Format(dt, "yyyy-MM-dd HH:mm:ss")
    Dim bh As String = Format(dqsj,"yyyyMMdd")
    Dim rt As String =  QQClient.SendWait(":x" & bh & "x:")
    Dim id As Integer
    If rt > "" Then
        If  Integer.TryParse(rt,id)  Then
            dr = _dt生产任务通知.AddNew
            dr("单号") = "SCXD-" & bh & "-" &  Format(id,"000")


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/7 10:11:00 [只看该作者]

Case "订单.htm"
……其它处理代码
    Dim dr As DataRow = _dt生产任务通知.AddNew()
    dr("录入时间") = Date.Now
    Dim msg As String = Format(date.today, "yyyyMMdd")
    If flbhs.ContainsKey(msg) Then '如果存在这个类别的编号
        flbhs(msg) = flbhs(msg) + 1 '将该类别最大编号加1
    Else
        flbhs.Add(msg,1) '如果是这个列表的首次编号,则编号等于1
    End If
    dr("单号") = "SCXD-" &  Format(date.today, "yyyyMMdd") & Format(flbhs(msg),"000")
……

 回到顶部