echo "" | igawk -f main.awk
# 需求:按照多种充值方式的多种金额类型进行累加统计 # 充值方式:移动卡 10,30,50,100元,联通卡20,30,50,100 电信卡 20,30,50,100,300 # wap快充 2,3,5,10 移动短充,2,3,5,10 # 设计:SQL语句取得表虽然不一致,但是我保证所有的记录集都包含2个字段,单元是元 # (固定金额的)累加值,固定金额 # 除了支付宝的其他数据表都没有记录泡豆数,但是金额可以推算出泡豆比例 # 目前有两种,一种1比10 ,一种1比8, 换算是通过savePayList函数完成(gold * paodouRate) @include lib/db.awk @include lib/makesql.awk # 创建进行统计的价格列表 function makePriceList(s, arr, __ARGVEND__,tempArr) { split(s,tempArr,",") for(i in tempArr) { arr[tempArr[i]] } } # 从记录集里提取价格 function parseResultSet(resultSet,payList,__ARGVEND__,i,tempArr) { for(i in resultSet) { split(i,tempArr," ") total = tempArr[1] price = tempArr[2] payList[price] = total } } # 保存单条支付信息 function savePayInfo(item,price,gold,paodou, __ARGVEND__, setData) { setData["item"] = item setData["price"] = price setData["gold"] = gold setData["paodou"] = paodou setData["stat_date"] = STAT_DATE makeInsertSQL(TABLE_NAME,setData,SCRIPT) } # 创建一个支付方式全部价格的支付信息 function savePayList(priceList, payList, item, paodouRate, __ARGVEND__, setData, i) { for(i in priceList) # 该统计需求不在乎元素在不在数组里 { savePayInfo(item, i, int(payList[i]), int(payList[i]) * paodouRate) } } # 移动充值 function chinaMobilePay(__ARGVEND__,sql,priceList,resultSet1, resultSet2, payList1, payList2, payAll, i) { # 易宝卡充 sql = "select sum(price),price from pppay_order where moneyType=1 and status=4" sql = sql " and from_unixtime(dateline) like '" STAT_DATE "%' group by price;" executeResultSet(BANKDB,sql,resultSet1) parseResultSet(resultSet1,payList1) # 神州付卡 sql = "select floor(sum(payMoney)/100),floor(payMoney/100) from pppay_order_szf where moneyType=1" sql = sql " and status=8888 and cardTypeCombine=0 and inserttime like '" STAT_DATE "%' group by payMoney" executeResultSet(BANKDB,sql,resultSet2) parseResultSet(resultSet2,payList2) # 合并两种支付方式 makePriceList("10,30,50,100",priceList) for(i in priceList) { payAll[i] = payList1[i] + payList2[i] } # 保存记录 savePayList(priceList, payAll, "china_mobile", 10) } # 联通充值 function chinaUnicomPay(__ARGVEND__,sql,priceList,resultSet,payList) { sql = "select floor(sum(payMoney)/100),floor(payMoney/100) from pppay_order_szf where moneyType=1" sql = sql " and status=8888 and cardTypeCombine=1 and inserttime like '" STAT_DATE "%' group by payMoney" executeResultSet(BANKDB,sql,resultSet) parseResultSet(resultSet,payList) makePriceList("20,30,50,100",priceList) savePayList(priceList, payList, "china_union", 10) } # 电信充值 function chinaTelecomPay(__ARGVEND__,sql,priceList,resultSet,payList) { sql = "select floor(sum(payMoney)/100),floor(payMoney/100) from pppay_order_szf where moneyType=1" sql = sql " and status=8888 and cardTypeCombine=2 and inserttime like ' " STAT_DATE "%' group by payMoney" executeResultSet(BANKDB,sql,resultSet) parseResultSet(resultSet,payList) makePriceList("20,30,50,100,300",priceList) savePayList(priceList, payList, "china_telecom", 10) } # wap快充 function wapPay(__ARGVEND__, sql, priceList, resultSet, payList, i) { sql = "select sum(price),price from pppay_order_yxjd where status=8888 and moneyType=1" sql = sql " and inserttime like '" STAT_DATE "%' group by price;" executeResultSet(BANKDB,sql,resultSet) parseResultSet(resultSet,payList) makePriceList("2,3,5,10",priceList) savePayList(priceList, payList, "wap", 8) } # 短信充值 - 移动短充 function messagePay(__ARGVEND__,sql,priceList,resultSet,payList) { sql = "select sum(price),price from pppay_order_yxjd_sms where status=8888 " sql = sql" and inserttime like '" STAT_DATE "%' group by price;" executeResultSet(BANKDB,sql,resultSet) parseResultSet(resultSet,payList) makePriceList("2,3,5,10",priceList) savePayList(priceList, payList, "message", 8) } # 支付宝充值 function zhifubaoPay(__ARGVEND__, sql, record, tempArr, totalPrice, paodou) { sql = "select sum(payMoney), sum(ppdou_num) from pppay_order_alipay where status=8888" sql = sql" and moneyType=1 and inserttime like '" STAT_DATE "%'" record = executeScalar(BANKDB,sql) split(record,tempArr," ") totalPrice = int(tempArr[1]) paodou = int(tempArr[2]) savePayInfo("zhifubao", "-", totalPrice, paodou); } BEGIN{ DB = "/usr/local/bin/mysql --disable-auto-rehash -C " BANKDB = DB " -h 192.111.0.211 -u pp**** -pstat** bank**"; STAT_DATE = "2013-09-18" TABLE_NAME = "pay_stat" SCRIPT = "" } END{ chinaMobilePay() chinaUnicomPay() chinaTelecomPay() wapPay() messagePay() zhifubaoPay() }