百宝云论坛

 找回密码
 立即注册
查看: 533|回复: 0

[应用中心] 云应用 _buy事件 代码模板(1)

[复制链接]

93

主题

198

帖子

2023

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2023
发表于 2016-8-29 17:28:46 | 显示全部楼层 |阅读模式
云商品应用中心已经正式发布了,今天给大家编写一个_buy事件的逻辑代码模板

首先根据我们的教程视频的PPT的流程图,给大家编写一个大的逻辑框架


代码逻辑框架
  1. //account       购买人
  2. //order         订单号
  3. //merchandise   商品名称  
  4. //merch_type    商品类型
  5. //num           商品数量
  6. //remark        预留参数
  7. function _buy(account, order, merchandise, merch_type, num, remark)

  8.         //1、处理本地数据库需要进行的一些操作,并组合商品信息,支持html
  9.         var regcode_bk = ""
  10.         if(merchandise == "注册码购买")//商品名称判断
  11.                 var result = ""
  12.                 select(merch_type)//商品类型判断
  13.                         case "月卡"
  14.                                 //代码,生成月卡
  15.                         case "周卡"
  16.                                 //代码,生成周卡
  17.                         case "天卡"
  18.                                 //代码,生成天卡
  19.                         default
  20.                                 //商品类型不对,生成失败
  21.                                 return
  22.                 end
  23.                
  24.                 if(strlen(result) == 0)//判断商品信息,如果商品信息为空,表示发货一定是失败的
  25.                         //生成商品信息为空,生成失败
  26.                         return
  27.                 end

  28.                 //2、进行发货操作
  29.                 //参数1     订单号
  30.                 //参数2     通知用户,发货成功还是发货失败,填true表示发货成功,填false表示发货异常
  31.                 //参数3     通知用户的具体信息内容,支持 html 标签
  32.                 var ret = shipment(order, true, result)

  33.                 //3、判断发货是否成功,如果发货失败,需要删除数据库中已经添加数据
  34.                 if(!ret)
  35.                         //如果发货失败,需要删除数据库中已经添加数据
  36.                         //如果发货失败,需要删除数据库中已经添加数据
  37.                         //如果发货失败,需要删除数据库中已经添加数据
  38.                         var ret_arr
  39.                         select(merch_type)
  40.                                 case "月卡"
  41.                                         //删除第一步生成的月卡
  42.                                 case "周卡"
  43.                                         //删除第一步生成的周卡
  44.                                 case "天卡"
  45.                                         //删除第一步生成的天卡
  46.                         end
  47.                         if(!ret)
  48.                                 //删除第一步生成的数据失败,通知作者,需要手动处理
  49.                         end
  50.                         //如果发货失败,需要删除数据库中已经添加数据
  51.                         //如果发货失败,需要删除数据库中已经添加数据
  52.                         //如果发货失败,需要删除数据库中已经添加数据
  53.                 end
  54.         end
  55. end
复制代码

上面的框架代码中,一些比较重要的功能实现部分预留了注释
下面分成三个分部,来写重要功能的逻辑实现部分

第一部分,批量注册码生成,也就是商品生成部分
  1. //批量生成注册码
  2. function RegcodeCreate(type, num,regcode_bk)
  3.         var DB_Handle = sqliteopen(g_DB_Name)
  4.         var ret = false
  5.         var result = ""
  6.         if(DB_Handle > 0)
  7.                 sqlitebegintransaction(DB_Handle)
  8.                 for(var i = 0;i < num;i++)//注册单次生成过多会比较慢,建议单次100条左右
  9.                         var t = timenow()
  10.                         var str = sha1(t&gettickcount())
  11.                         if(i != 0)
  12.                                 regcode_bk = regcode_bk&",'"&str&"'"
  13.                         else
  14.                                 regcode_bk = regcode_bk&"'"&str&"'"
  15.                         end
  16.                         result = result&str&"<br>"
  17.                         var sql = strformat("insert into 注册码管理表(注册码,卡类型,创建时间,卡来源) values('%s','%s','%s','在线购买')", str, type, t)
  18.                         ret = sqlitehandleexecsql(DB_Handle, sql)
  19.                         if(!ret)
  20.                                 break
  21.                         end
  22.                 end
  23.                 if(!ret)
  24.                         sqliterollbacktransaction(DB_Handle)
  25.                         filelog("sqliterollbacktransaction"&getlasterror(1))
  26.                         result = ""
  27.                 else
  28.                         if(!sqlitecommittransaction(DB_Handle))
  29.                                 filelog("sqlitecommittransaction"&getlasterror(1))
  30.                                 result = ""
  31.                         end
  32.                 end
  33.                 sqliteclose(DB_Handle)
  34.         end
  35.         return result
  36. end
复制代码

第二步,当生成注册码异常的时候,我们需要向商品页面反馈对应错误信息,提示给用户,并清理掉,已经添加成功的一些数据
  1. //商品异常处理
  2. //order         订单号
  3. //errormsg      错误信息
  4. //sql           需要清理数据库数据的sql语句
  5. //db_name       数据库名字
  6. function merch_Exception(order, errormsg, sql = "", db_name = "")
  7.         shipment(order, false, errormsg)//发货返回假的状态,表示向商品页面提供错误的信息
  8.         filelog(timenow()&"\t"&errormsg, "_buy事件异常")
  9.         if(strlen(sql) > 0 && strlen(db_name) > 0)
  10.                 if(sqliteexecsql(db_name, sql))
  11.                         filelog(timenow()&"\t删除已生成数据失败,请作者手动处理", "_buy事件异常")
  12.                 end
  13.         end
  14. end
复制代码

第三步,处理发货函数的逻辑,如果发货函数出现错误,我们同样要处理对应的异常信息
  1. //发货异常处理
  2. //errormsg      错误信息
  3. //sql           需要清理数据库数据的sql语句
  4. //db_name       数据库名字
  5. function shipment_Exception(errormsg, sql = "", db_name = "")
  6.         filelog(timenow()&"\t"&errormsg, "_buy事件异常")
  7.         if(strlen(sql) > 0 && strlen(db_name) > 0)
  8.                 if(sqliteexecsql(db_name, sql))
  9.                         filelog(timenow()&"\t删除已生成数据失败,请作者手动处理", "_buy事件异常")
  10.                 end
  11.         end
  12. end
复制代码

到这里,整个逻辑功能就写好了,最后给大家贴上一份完整的示例代码,中间可能某些细节部分处理不足的地方,请大家多多指出
  1. //account       购买人
  2. //order         订单号
  3. //merchandise   商品名称  
  4. //merch_type    商品类型
  5. //num           商品数量
  6. //remark        预留参数
  7. function _buy(account, order, merchandise, merch_type, num, remark)

  8.         //1、处理本地数据库需要进行的一些操作,并组合商品信息,支持html
  9.         var regcode_bk = ""
  10.         if(merchandise == "注册码购买")//商品名称判断
  11.                 var result = ""
  12.                 select(merch_type)//商品类型判断
  13.                         case "月卡"
  14.                                 result = RegcodeCreate(merch_type, num, regcode_bk)
  15.                         case "周卡"
  16.                                 result = RegcodeCreate(merch_type, num, regcode_bk)
  17.                         case "天卡"
  18.                                 result = RegcodeCreate(merch_type, num, regcode_bk)
  19.                         default
  20.                                 merch_Exception(order,"商品类型错误,请联系作审核商品类型")
  21.                                 return
  22.                 end

  23.                 if(strlen(result) == 0)//判断商品信息,如果商品信息为空,表示发货一定是失败的
  24.                         merch_Exception(order,"生成商品信息出错,请重试")
  25.                         return
  26.                 end

  27.                 //2、进行发货操作
  28.                 //参数1     订单号
  29.                 //参数2     通知用户,发货成功还是发货失败,填true表示发货成功,填false表示发货异常
  30.                 //参数3     通知用户的具体信息内容,支持 html 标签
  31.                 var ret = shipment(order, true, result)

  32.                 //3、判断发货是否成功,如果发货失败,需要删除数据库中已经添加数据
  33.                 if(!ret)
  34.                         //如果发货失败,需要删除数据库中已经添加数据
  35.                         //如果发货失败,需要删除数据库中已经添加数据
  36.                         //如果发货失败,需要删除数据库中已经添加数据
  37.                         shipment_Exception("系统发货失败",getlasterror(1),strformat("delete FROM  注册码管理表 where 注册码 in(%s)", regcode_bk),g_DB_Name)
  38.                         //如果发货失败,需要删除数据库中已经添加数据
  39.                         //如果发货失败,需要删除数据库中已经添加数据
  40.                         //如果发货失败,需要删除数据库中已经添加数据
  41.                 end
  42.         end
  43. end
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

技术支持
关闭
售后
在线客服
QQ群:309604797
在线客服

小黑屋|百宝云论坛 ( 湘ICP备15007281号-2 )

GMT+8, 2018-10-23 18:06

Powered by bby! X3.4

© 2015-2018 baibaoyun

快速回复 返回顶部 返回列表