Foxtable(狐表)用户栏目专家坐堂 → 每100行执行一次。。。


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

主题:每100行执行一次。。。

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
每100行执行一次。。。  发帖心情 Post By:2017/10/19 23:52:00 [显示全部帖子]

导入券号一次 只能到100个,我索性就一次一行(也就是一个券号)导入,
然后库存 +1

但是感觉这样效率很低,每一行都要去调用微信的接口,而不是100行100行地调用
但是这个一次100行的遍历的低级问题却不知道怎么写。。。
以下是我之前的代码
For Each r As Row In Tables("导入券").Rows
    Dim qh As String = r("券号")
    Dim url As String = "https://api.weixin.qq.com/card/code/deposit?access_token={0}"
    Dim hc As New HttpClient(CExp(url,Functions.Execute("GetAccessToken")))
    Dim jo As New JObject
    jo("card_id") = kaid
    jo("code") = qh
    hc.Content = jo.ToString()
    jo = JObject.Parse(hc.GetData)
    r("是否已导入") = "1"    
'以上是导入券的代码
'以下是让券的库存+1的代码

    Dim url1 As String = "https://api.weixin.qq.com/card/modifystock?access_token={0}"
    Dim hc1 As New HttpClient(CExp(url1,Functions.Execute("GetAccessToken")))
    Dim jo1 As New JObject
    jo1("card_id") = kaid
    jo1("increase_stock_value") = 1
    hc1.Content = jo1.ToString()
    jo1 = JObject.Parse(hc1.GetData)
Next
[此贴子已经被作者于2017/10/19 23:51:53编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/20 10:24:00 [显示全部帖子]

谢谢甜老师!!
我试一下!!

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/22 15:59:00 [显示全部帖子]

甜老师,这样可以批量导入,但是有个问题:
每导10个(我是设成10个导一次),第一个10个会成功导入,第二个就会出现这个问题:
第一个弹出错误:
请求被中止: 连接被意外关闭。
第二个弹出错误
Error reading JObject from JsonReader. Path '', line 0, position 0.
[此贴子已经被作者于2017/10/22 16:09:15编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/22 17:18:00 [显示全部帖子]

第一次的10行弹出的是导入成功的内容。

接下去就是依次弹出那两个错误。
第一个弹出错误:
请求被中止: 连接被意外关闭。
第二个弹出错误
Error reading JObject from JsonReader. Path '', line 0, position 0.


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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/22 17:50:00 [显示全部帖子]

甜老师,我换种方法,可以成功!
Dim ja As Jarray
Dim url As String = "https://api.weixin.qq.com/card/code/deposit?access_token={0}"
Dim hc As New HttpClient(CExp(url,Functions.Execute("GetAccessToken")))
Dim jo As New JObject
jo("card_id") = kaid
ja = new Jarray
Dim count As Integer = Tables("不定向卡券导入券号").Rows.Count
If Count >= 10 Then
    For j As Integer = 0 To 9 '添加当前组的项目到集合
        ja.Add(Tables("不定向卡券导入券号").Rows(j)("券号"))
    Next
    
    jo("code") = ja
    hc.Content = jo.ToString()
    jo = JObject.Parse(hc.GetData)
    output.Show(jo.ToString)
    
    For j As Integer = 0 To 9 '添加当前组的项目到集合
        Tables("不定向卡券导入券号").Rows(j)("是否已导入") = "1"
    Next
    
    Dim drs As List(Of DataRow)
    drs = DataTables("不定向卡券导入券号").Select("是否已导入 = '1'")
    For Each dr As DataRow In drs
        dr.Delete
    Next
    Dim btn As WinForm.Button = e.Form.Controls("Button2")
    btn.PerformClick() '模拟单击
Else
    For j As Integer = 0 To count-1 '添加当前组的项目到集合
        ja.Add(Tables("不定向卡券导入券号").Rows(j)("券号"))
    Next
    
    jo("code") = ja
    hc.Content = jo.ToString()
    jo = JObject.Parse(hc.GetData)
    output.Show(jo.ToString)
    
    For j As Integer = 0 To count-1 '添加当前组的项目到集合
        Tables("不定向卡券导入券号").Rows(j)("是否已导入") = "1"
    Next
    
    Dim drs As List(Of DataRow)
    drs = DataTables("不定向卡券导入券号").Select("是否已导入 = '1'")
    For Each dr As DataRow In drs
        dr.Delete
    Next
End If

305条用了16'

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20171022175550.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2017/10/22 17:55:25编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/10/22 22:32:00 [显示全部帖子]

哦,甜老师,那意思是这样:
Dim maxCount As Integer = 100
Dim ja As Jarray
Dim count As Integer = Tables("导入券").Rows.Count
Dim url As String = "https://api.weixin.qq.com/card/code/deposit?access_token={0}"
Dim jo As New JObject
jo("card_id") = kaid
For i As Integer = 0 To count Step maxCount '按maxCount的数据进行分组
Dim hc As New HttpClient(CExp(url,Functions.Execute("GetAccessToken")))   '这句放在循环里哈
    ja = new Jarray
    Dim n = Math.Min(i + maxCount - 1,count )
    For j As Integer = i To n '添加当前组的项目到集合
        ja.Add(Tables("导入券").Rows(j)("券号"))
        Tables("导入券").Rows(j)("是否已导入") = 1
    Next
    jo("code") = ja
    hc.Content = jo.ToString()
    hc.GetData
Next



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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/12/27 21:35:00 [显示全部帖子]

甜老师,倒是没报错,就是数量不对,取最大的整数了,余数没有导进去,但是感觉都没有错啊。公众号的库存也是1200。

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20171227213330.png
图片点击可在新窗口打开查看
代码是这样:
Dim kaid As String = e.Form.Controls("textbox1").value
Dim st As Date = Date.Now
'导入卡券
Dim count As Integer = Tables("不定向卡券导入券号").Rows.Count
If Count >= 100 Then
    Dim maxCount As Integer = 100
        Dim ja As Jarray
        Dim url As String = "https://api.weixin.qq.com/card/code/deposit?access_token={0}"
        Dim jo As New JObject
        jo("card_id") = kaid

    For i As Integer = 0 To count Step maxCount '按maxCount的数据进行分组 0 100 200 1000 1100 1200         
        Dim hc As New HttpClient(CExp(url,Functions.Execute("GetAccessToken")))   '这句放在循环里哈
        ja = new Jarray
        Dim n = Math.Min(i + maxCount - 1,count) '1299 1215
        For j As Integer = i To n '添加当前组的项目到集合
            ja.Add(Tables("不定向卡券导入券号").Rows(j)("券号"))
            Tables("不定向卡券导入券号").Rows(j)("是否已导入") = 1
        Next
        jo("code") = ja
        hc.Content = jo.ToString()
        hc.GetData
    Next    
Else
    Dim ja As Jarray
    Dim url As String = "https://api.weixin.qq.com/card/code/deposit?access_token={0}"
    Dim hc As New HttpClient(CExp(url,Functions.Execute("GetAccessToken")))
    Dim jo As New JObject
    jo("card_id") = kaid
    ja = new Jarray
    
    For j As Integer = 0 To count-1 '添加当前组的项目到集合
        ja.Add(Tables("不定向卡券导入券号").Rows(j)("券号"))
    Next
    jo("code") = ja
    hc.Content = jo.ToString()
    jo = JObject.Parse(hc.GetData)
    For j As Integer = 0 To count-1 '添加当前组的项目到集合
        Tables("不定向卡券导入券号").Rows(j)("是否已导入") = "1"
    Next
    Dim drs As List(Of DataRow)
    drs = DataTables("不定向卡券导入券号").Select("是否已导入 = '1'")
    For Each dr As DataRow In drs
        dr.Delete
    Next
End If

'导入的总数量
Dim url3 As String = "https://api.weixin.qq.com/card/code/getdepositcount?access_token={0}"
Dim hc3 As New HttpClient(CExp(url3,Functions.Execute("GetAccessToken")))
Dim jo3 As New JObject
jo3("card_id") = kaid
hc3.Content = jo3.ToString()
jo3 = JObject.Parse(hc3.GetData)
Dim drcount As Integer = jo3("count")

'之前的库存
Dim url1 As String = "https://api.weixin.qq.com/card/get?access_token={0}"
Dim hc1 As New HttpClient(CExp(url1,Functions.Execute("GetAccessToken")))
Dim jo1 As New JObject
jo1("card_id") = kaid
hc1.Content = jo1.ToString()
jo1 = JObject.Parse(hc1.GetData)
Dim kc As Integer = jo1("card")("general_coupon")("base_info")("sku")("quantity")

'修改库存
Dim sl As Integer = drcount - kc
Dim url2 As String = "https://api.weixin.qq.com/card/modifystock?access_token={0}"
Dim hc2 As New HttpClient(CExp(url2,Functions.Execute("GetAccessToken")))
Dim jo2 As New JObject
jo2("card_id") = kaid
jo2("increase_stock_value") = sl
hc2.Content = jo2.ToString()
jo2 = JObject.Parse(hc2.GetData)

PopMessage("成功导入的数量为:" & sl & "共耗时: " & (Date.Now - st).TotalSeconds & "秒")

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/12/27 22:42:00 [显示全部帖子]

1
[此贴子已经被作者于2017/12/27 22:45:17编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2017/12/27 23:09:00 [显示全部帖子]

可以了,谢谢甜老师!!

 回到顶部