From c67a2d59e881e3d1df1a4142983e76e8fb5db24a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 28 十二月 2018 21:26:28 +0800
Subject: [PATCH] 5424 【后端】【1.4】跨服竞技场开发(匹配规则优化,优先匹配同段位的,同段位不足两个人的支持按段位区间匹配)

---
 Tool/WebCenter/Coupon/webapp.py |  373 +++++++++++++++++-----------------------------------
 1 files changed, 124 insertions(+), 249 deletions(-)

diff --git a/Tool/WebCenter/Coupon/webapp.py b/Tool/WebCenter/Coupon/webapp.py
index 227bfe5..aaea0f0 100644
--- a/Tool/WebCenter/Coupon/webapp.py
+++ b/Tool/WebCenter/Coupon/webapp.py
@@ -211,42 +211,6 @@
     
     return json.dumps({"success":couponid}, ensure_ascii=False)
 
-#/api/Coupon/index.php?couponBatchId=%s&agentName=%s"
-# 涓嬭浇鎸囧畾绀煎寘鎵规 
-@myapp.route('/Coupon/CouponLoad.php')
-def LoadCouponBatch():
-    dataDict = request.GET
-    appid = dataDict.get("channel", "")     # 杩愯惀鎻愪緵鐨凙PPID锛屽嵆娓犻亾
-    if not appid:
-        mylog.debug("no appid")
-        return json.dumps({"error":"param appid"}, ensure_ascii=False)
-    couponid = dataDict.get("couponid", "")
-    if not couponid:
-        return json.dumps({"error":"param couponid"}, ensure_ascii=False)
-    
-    downFile = r".\download\%s.zip"%couponid
-    if os.path.isfile(downFile):
-        return static_file("%s.zip"%couponid, r".\download", download=True)
-    
-    dbController = CouponDB.GetDBEventCon()
-    if not dbController:
-        # 鏃犳硶鑾峰彇鏁版嵁搴�
-        mylog.debug("no dbController")
-        return json.dumps({"error":"db"}, ensure_ascii=False)
-    result, data = dbController.find(CouponDB.CouponCodeColName + "_" + appid, {'channel':appid, 'couponid':couponid})
-    if not data:
-        return json.dumps({"error":"no couponid"}, ensure_ascii=False)
-    
-    fileIO = open(r".\download\%s.txt"%couponid, 'w')
-
-    for codeInfo in data:
-        fileIO.write(codeInfo["code"] + "\n")
-    fileIO.close() 
-    
-    f = zipfile.ZipFile(downFile, 'w', zipfile.ZIP_DEFLATED)
-    f.write(r".\download\%s.txt"%couponid)
-    f.close()
-    return static_file("%s.zip"%couponid, r".\download", download=True)
 
 # 鏌ヨ鍗′娇鐢ㄦ儏鍐�
 @myapp.route('/Coupon/QueryCouponCode.php')
@@ -271,219 +235,6 @@
     
     return json.dumps(data, ensure_ascii=False)
 
-# 鍗$被鍨� 寮�澶村瓧姣嶅仛鏍囪瘑濡� g1~999浠h〃姝ゅ崱鍙兘浣跨敤涓�娆� h1~999鍗″彲浠ラ噸澶嶄娇鐢� z寮�澶翠唬琛ㄥ浐瀹氱爜
-# 鐜╁浣跨敤鍗″彿 鍙傛暟 骞冲彴 鍖烘湇 璐﹀彿 鍖烘湇閾炬帴锛圙M鐢級鍗″彿
-# http://center.xxx.com:53003/Coupon/CouponCode.php?channel=appid&code=XXX&accid=YYY&sid=222&pushurl=s222.xxx.com
-@myapp.route('/Coupon/CouponCode.php')
-def CouponCode():
-    dataDict = request.GET
-    
-    for key, value in dataDict.items():
-        mylog.debug("CouponCode key:%s  value:%s"%(key, value))
-    
-    agentName = dataDict.get("channel", "")     # 杩愯惀鎻愪緵鐨凙PPID锛屽嵆娓犻亾
-    if not agentName:
-        mylog.debug("no appid")
-        return
-    codeStr = dataDict.get("code", "")
-    if not codeStr:
-        return
-    
-    accid = dataDict.get("accid", "")
-    if not accid:
-        return
-    
-    sid = CommFunc.ToIntDef(dataDict.get("sid", 0), 0)
-    if not sid:
-        return
-    pushurl = dataDict.get("pushurl", "")
-    if not pushurl:
-        return
-    
-    # 杞寲涓烘父鎴忚处鍙� 
-    accid = "%s@%s@s%s"%(accid, agentName, sid)
-    
-    dbController = CouponDB.GetDBEventCon()
-    if not dbController:
-        # 鏃犳硶鑾峰彇鏁版嵁搴�
-        mylog.debug("no dbController")
-        return
-
-    #閫氳繃GM鎺ュ彛鍛婄煡鐜╁浣跨敤鎯呭喌
-    gmresult = {'accID':accid, 'sid':sid, 'channel':agentName}
-
-    #-----------缁熶竴鍥哄畾鐮佸鐞�----------------------
-    if codeStr in CommonCards:
-        # 涓嶅悓鍥哄畾鐮佸悇鑷彧鑳介涓�娆�
-        result, commondata = dbController.find_one(CouponDB.CouponCodeColName + "_Common", {"code":codeStr, "accid":accid})
-        if commondata:
-            # 宸蹭娇鐢�
-            gmresult['status'] = 2
-            mylog.debug("common status=2")
-            return SendGm(gmresult, pushurl)
-        
-        gmresult['status'] = 1
-        gmresult['code'] = codeStr
-        gmresult['coupontype'] = codeStr  # 缁熶竴鏍煎紡锛屾湇鍔″櫒涓嶄竴瀹氭湁鐢紝鍥哄畾鐮佹牴鎹� codeStr 鍙戝鍔�
-        
-        dbController.insert(CouponDB.CouponCodeColName + "_Common", {"code":codeStr, "accid":accid})
-        mylog.debug("common ok")
-        return SendGm(gmresult, pushurl)
-
-    result, data = dbController.find_one(CouponDB.CouponCodeColName + "_" + agentName, {"code":codeStr, "channel":agentName})
-
-    if not data:
-        #鏃犳鍗�
-        gmresult['status'] = 0
-        mylog.debug("no card")
-        return SendGm(gmresult, pushurl)
-    if int(data['status']) == 1:
-        #宸蹭娇鐢紝鍚屽崱鍙疯褰曢粯璁ゅ彲鐢紝閬垮厤鏂嚎鍙戦�佸け璐ョ殑鎯呭喌锛堟湭杩斿洖缁撴灉楠岃瘉鎯呭喌涓嬶級
-        gmresult['status'] = 2
-        mylog.debug("card used!")
-        return SendGm(gmresult, pushurl)
-    
-    result, data2 = dbController.find_one(CouponDB.CouponBatchColName, {"couponid":data["couponid"]})
-    if not data2:
-        #姝ゆ壒娆″崱宸插垹闄�
-        gmresult['status'] = 0
-        mylog.debug("no couponid")
-        return SendGm(gmresult, pushurl)
-    if int(data2['status']) == 1:
-        #鏆傚仠浣跨敤璇ユ壒娆″崱
-        gmresult['status'] = 0
-        mylog.debug("couponid frozed")
-        return SendGm(gmresult, pushurl)
-    if (data2["minserverno"] != 0 and data2["maxserverno"] != 0):
-        if int(data2["minserverno"]) > sid or int(data2["maxserverno"]) < sid:
-            #涓嶅湪鎸囧畾鍖�
-            gmresult['status'] = 0
-            mylog.debug("no sid")
-            return SendGm(gmresult, pushurl)
-    if data2["expiretime"] != "" and datetime.datetime.today() > GetDateTimeByStr(data2["expiretime"]):
-        #宸茶繃鏈�
-        gmresult['status'] = 0
-        mylog.debug("time pass")
-        return SendGm(gmresult, pushurl)
-    #鍐嶆煡涓�娆℃槸鍚︾敤杩囨鎵规鐨勫叾浠栧崱, 
-    result, data3 = dbController.find_one(CouponDB.CouponCodeColName + "_" + agentName, \
-                                          {"couponid":data["couponid"], "accid":accid})
-    if data3:
-        #鐢ㄨ繃鍚岀被鍗★紝宸茶褰曡繃涓嶅啀鍋氭柊璁板綍
-        gmresult['status'] = 3
-        gmresult['coupontype'] = data["coupontype"]
-        gmresult['code'] = codeStr
-        mylog.debug("use again")
-        return SendGm(gmresult, pushurl)
-    
-    data['status'] = 1
-    data['accid'] = accid
-    data['usetime'] = str(datetime.datetime.today())
-    
-    dbController.update(CouponDB.CouponCodeColName + "_" + agentName, {"code":codeStr, "channel":agentName}, data)
-    # 0 涓嶅彲鐢紝1.鍙敤鍙戞斁濂栧姳 锛�2.宸蹭娇鐢� 3.鍚岀被鍨嬪崱涓嶈兘浣跨敤涓ゆ
-    gmresult['status'] = 1
-    gmresult['code'] = codeStr
-    gmresult['coupontype'] = data["coupontype"]
-    
-    mylog.debug("card ok!")
-    return SendGm(gmresult, pushurl)
-
-
-
-def SendGm(gmresult, pushurl):
-    try:
-        # GM鎺ㄩ�佸湴鍧�
-        #GMToolPage = http://s1.yhlz.09ge.com:30001/Server/Tool.php
-        gmurl = "http://%s:%s/Server/Tool.php"%(pushurl, PushPort)
-        gmkey = PushKey
-        if not gmkey or not gmurl:
-            return
-        
-        useStatus = gmresult['status']
-        
-        gmresult['notifyMsg'] = Def_CardMsg.get(useStatus, "CodeRewardSys2")
-        
-        
-        if useStatus != 1:
-            #澶辫触绯荤粺鎻愮ず
-            pack_data = {};
-            pack_data["queryType"] = "accID"
-            pack_data["playerFind"] = gmresult["accID"]
-            pack_data["pack_type"] = "GMT_MediaCard"
-            pack_data["notifyMsg"] = gmresult['notifyMsg']
-        
-            pack_data["key"] = gmkey;
-            pack_data['coding'] = "utf8";
-        
-            #浣跨敤key鍔犲瘑
-            pack_data_dict = json.dumps(pack_data)
-            sign = md5.md5(pack_data_dict+gmkey).hexdigest()
-            post = {}
-            post['pack'] = pack_data_dict;
-            post['sign'] = sign;
-            urllib2.urlopen(gmurl, urllib.urlencode(post), 3)
-            return
-        
-        mylog.debug("SendGm:%s"%gmurl)
-        pack_data = {};
-        pack_data["queryType"] = "accID"
-        pack_data["playerList"] = gmresult["accID"]
-        pack_data["Title"] = ConfigIO.GetValue(gmresult["coupontype"], "MailTitle").decode("gbk")
-        pack_data["Text"] = ConfigIO.GetValue(gmresult["coupontype"], "MailText").decode("gbk")
-        pack_data["EndTime"] = str(datetime.datetime.today() + datetime.timedelta(days=15)).split('.')[0]
-        pack_data["Sender"] = ConfigIO.GetValue(gmresult["coupontype"], "MailSender").decode("gbk")
-
-        
-        Items =  eval(ConfigIO.GetValue(gmresult["coupontype"], "Items"))
-        pack_data["itemNums"] = ','.join([str(i) for i in range(len(Items))])
-        i = 0
-        for itemList in Items:
-            pack_data["ItemID%s"%i] = str(itemList[0])
-            pack_data["ItemCnt%s"%i] = str(itemList[1])
-            pack_data["IsBind%s"%i] = '1'
-            i += 1
-            
-        pack_data["pack_type"] = "GMT_AddPersonalCompensation"
-        pack_data["Detail"] = "cardCode:" + gmresult["code"]
-
-        pack_data["key"] = gmkey;
-        pack_data['coding'] = "utf8";
-    
-        #浣跨敤key鍔犲瘑
-        pack_data_dict = json.dumps(pack_data)
-        sign = md5.md5(pack_data_dict+gmkey).hexdigest()
-        post = {}
-        post['pack'] = pack_data_dict;
-        post['sign'] = sign;
-        result = urllib2.urlopen(gmurl, urllib.urlencode(post), 10)
-
-        content = result.read()
-        result.close()
-        
-        # 鎴愬姛鎻愮ず
-        pack_data = {};
-        pack_data["queryType"] = "accID"
-        pack_data["playerFind"] = gmresult["accID"]
-        pack_data["pack_type"] = "GMT_MediaCard"
-        pack_data["notifyMsg"] = gmresult['notifyMsg']
-    
-        pack_data["key"] = gmkey;
-        pack_data['coding'] = "utf8";
-    
-        #浣跨敤key鍔犲瘑
-        pack_data_dict = json.dumps(pack_data)
-        sign = md5.md5(pack_data_dict+gmkey).hexdigest()
-        post = {}
-        post['pack'] = pack_data_dict;
-        post['sign'] = sign;
-        urllib2.urlopen(gmurl, urllib.urlencode(post), 3)
-        
-        return content
-    except Exception, e:
-        mylog.debug("gm error %s"%e)
-    return
-    
     
 def GetDateTimeByStr(timeStr, timeFomat="%Y-%m-%d"):
     try:
@@ -494,3 +245,127 @@
     
     return
     
+
+
+#=================娓告垙鏈嶅姟鍣ㄨ褰�==========================================================
+# $arrayInsert=array( '_id'=>$orderID, 'ServerID'=>$getServer_id, 
+#                    'AccID'=>$qid, 'OrderAmount'=>$nOrderAmount, 
+#                    'OrderID'=>$orderID, 'Sign'=>$recvSign, 
+#                    'BeginOrderTime'=>date("Y-m-d H:i:s"), 'EndOrderTime'=>0, 
+#                    'IsProcess'=>0, "OrderInfo"=>$DataArray['OrderInfo']);
+#===========================================================================
+
+#=================鍚庡彴鏁版嵁璁板綍==========================================================
+# appid    鏄�    string    寰俊鍟嗗煄鐢ㄦ埛閫夋嫨鐨勫钩鍙癮ppid
+# regionid    鏄�    string    鍖烘湇ID:  s8001
+# orderid    鏄�    string    寰俊鍟嗗煄璁㈠崟鍙蜂笉鑳戒笌鍏呭�艰鍗曢噸澶�
+# passport    鏄�    string    鐜╁娓告垙甯愬彿
+# roleid    鏄�    string    瑙掕壊鍚嶇О
+# ordertitle    鏄�    string    璁㈠崟鏍囬,渚嬪:  128鍏冪ぜ鍖�
+# orderinfo    鏄�    string    璁㈠崟淇℃伅, 渚嬪:  snxxz.18
+# money    鏄�    float    浠樻鏁颁繚鐣欎袱浣嶅皬鏁�
+# ip    鏄�    string    鐜╁IP,鍙┖鍊�
+# level    鏄�    string    绛夌骇
+# viplevel    鏄�    string    VIP绛夌骇
+# time    鏄�    string    鍏呭�兼椂闂存埑 渚嬪: 1539447585
+# sign    鏄�    string    绛惧悕
+#===========================================================================
+
+#http://center.2460web.com:53002/Coupon/CouponWXBill.php
+#寰俊鍟嗗煄 鍙傛暟 ordertitle orderinfo orderid count money锛堜繚鐣欎袱浣嶅皬鏁帮級sign ip time锛堣ˉ鍙戜笉鏇存柊鏃堕棿锛�
+@myapp.route('/Coupon/CouponWXBill.php', method='POST')
+def CouponWXBill():
+    dataDict = request.POST
+    for key, value in dataDict.items():
+        mylog.debug("key:%s  value:%s"%(key, value))
+
+    channel = "zyxh"  # 闇�鏀寔澶氫釜appid锛屼竴涓鍗曚竴涓縺娲荤爜
+    orderID = dataDict.get("orderid", "")    # 璁㈠崟锛屾牴鎹暟閲忓垎鏀嚭澶氫釜璁㈠崟瀵瑰簲涓�涓縺娲荤爜
+    if not orderID:
+        return json.dumps({"error":"param orderid"}, ensure_ascii=False)
+    
+    orderInfo = dataDict.get("orderinfo", "")    # 鍟嗗搧缂栧彿
+    if not orderInfo:
+        return json.dumps({"error":"param orderInfo"}, ensure_ascii=False)
+    
+    count = int(dataDict.get("count", 0))     # 绀煎寘鏁伴噺
+    if count <= 0:
+        return json.dumps({"error":"param count"}, ensure_ascii=False)
+    
+    money = float(dataDict.get("money", 0))     # 浠锋牸
+    if money <= 0:
+        return json.dumps({"error":"param money"}, ensure_ascii=False)
+    
+    
+    timeStr = dataDict.get("time", "")     # 鍏呭�兼椂闂达紝琛ュ彂涓嶆洿鏂版椂闂�
+    if not timeStr:
+        return json.dumps({"error":"param time"}, ensure_ascii=False)
+    
+    sign = dataDict.get("sign", "")     # 鍏呭�兼椂闂达紝琛ュ彂涓嶆洿鏂版椂闂�
+    if not sign:
+        return json.dumps({"error":"param sign"}, ensure_ascii=False)
+    
+    key = ConfigIO.GetValue("Coupon", channel + "_wxkey")
+    calcSign = md5.md5(str(count) + orderID + timeStr + key).hexdigest()
+    if calcSign != sign:
+        mylog.debug("error sign=%s"%calcSign)
+        return json.dumps({"error":"sign"}, ensure_ascii=False)
+    
+    
+    dbController = CouponDB.GetDBEventCon()
+    if not dbController:
+        # 鏃犳硶鑾峰彇鏁版嵁搴�
+        mylog.debug("no dbController")
+        return json.dumps({"error":"db"}, ensure_ascii=False)
+    
+    # 楠岃瘉鏄惁閲嶅璁㈠崟
+    result = dbController.find(CouponDB.CouponWXColName, {"realorderid":orderID})
+    if result[1]:
+        codeList = []
+        for cardInfo in result[1]:
+            codeList.append(cardInfo['code'])
+        #return json.dumps({"error":"orderid repeat"}, ensure_ascii=False)
+        mylog.debug("orderid repeat")
+        return json.dumps({orderID:codeList}, ensure_ascii=False)
+    
+    #鎵归噺鎻掑叆鍗″彿
+    tmpCodeList = []    # 鍗′俊鎭�
+    codeList = []   # 鍗″彿
+    for i in xrange(count):
+        tmpCodeDoc = {}
+        # 鍓�3浣嶄负绫诲瀷鏍囪瘑
+        tmpCodeDoc['code'] = "wx" + md5.md5( channel + str(i) + orderID + timeStr + str(i) + \
+                                     str(random.randint(1000, 2000000))).hexdigest()[5:17] + \
+                                     random.choice('1234567890abcdefghijklmnopqrstuvwxyz') +\
+                                     random.choice('1234567890abcdefghijklmnopqrstuvwxyz') 
+        tmpCodeDoc['operateid'] = channel   # appid缁勫悎鏍囪瘑 涓�瀹惰繍钀ュ晢鍙兘鏈夊涓猘ppid
+        tmpCodeDoc['status'] = 0
+        tmpCodeDoc['usetime'] = ""
+        
+        tmpCodeDoc['count'] = count
+        
+        tmpCodeDoc['appid'] = ""    # 璁板綍鐢�
+        tmpCodeDoc['serverid'] = ""    # 璁板綍鐢�
+        tmpCodeDoc['realorderid'] = orderID    # 璐墿鐨刼rderID锛屼細鏍规嵁鏁伴噺鎷嗚В
+        tmpCodeDoc['orderid'] = orderID + "_" + str(i+1)    # 鎷嗚В鐨刼rderID锛屼細鏍规嵁鏁伴噺鎷嗚В
+        tmpCodeDoc['accid'] = ""
+        tmpCodeDoc['roleid'] = ""
+        tmpCodeDoc['ordertitle'] = dataDict.get("ordertitle", "")
+        tmpCodeDoc['orderinfo'] = orderInfo
+        tmpCodeDoc['money'] = money
+        tmpCodeDoc['ip'] = dataDict.get("ip", "")
+        tmpCodeDoc['level'] = ""
+        tmpCodeDoc['viplevel'] = ""
+        tmpCodeDoc['createtime'] = timeStr
+        
+        tmpCodeList.append(tmpCodeDoc)
+        codeList.append(tmpCodeDoc['code'])
+        
+        
+    result = dbController.insert(CouponDB.CouponWXColName, tmpCodeList)
+    if not result:
+        return json.dumps({"error":"insert card"}, ensure_ascii=False)
+
+    mylog.debug("鎻掑叆鎴愬姛%s鏉¤鍗�"%len(tmpCodeList))
+   
+    return json.dumps({orderID:codeList}, ensure_ascii=False)

--
Gitblit v1.8.0