From eddda540e947bcc6483b1c89b3e42b81a337f77e Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 23 十月 2020 15:28:52 +0800
Subject: [PATCH] 4834 【主干】【长尾】【BT】GM补偿邮件重复;(当非单服邮件时GUID相同则不允许重复插入;当指定单服邮件批量发送补偿指令时,每个服重新生成GUID插入邮件)
---
Tool/WebCenter/CouponCode/webapp.py | 101 +++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 86 insertions(+), 15 deletions(-)
diff --git a/Tool/WebCenter/CouponCode/webapp.py b/Tool/WebCenter/CouponCode/webapp.py
index a3f8638..2468ab8 100644
--- a/Tool/WebCenter/CouponCode/webapp.py
+++ b/Tool/WebCenter/CouponCode/webapp.py
@@ -59,6 +59,15 @@
myapp = Bottle()
+# 闃叉鐭椂闂村唴鐨勫娆℃棤鏁堣闂� accid锛歵ime
+AccID_Cache_Dict = {}
+
+def CleanAccID():
+ global AccID_Cache_Dict
+
+ if len(AccID_Cache_Dict) < 100:
+ return
+ AccID_Cache_Dict = {}
#/api/Coupon/index.php?couponBatchId=%s&agentName=%s"
@@ -117,6 +126,7 @@
# http://center.xxx.com:53003/Coupon/CouponCode.php
@myapp.route('/Coupon/CouponCode.php')
def CouponCode():
+ global AccID_Cache_Dict
dataDict = request.GET
for key, value in dataDict.items():
@@ -129,14 +139,9 @@
codeStr = dataDict.get("code", "")
if not codeStr:
return
-
+ codeStr = codeStr.strip()
+ #鍙槸鐢ㄦ潵鎷兼帴璐﹀彿
spID = dataDict.get("spid", "")
- if not spID:
- tdict = {"jisugame":"jisu", 'spxjgame':'sipu', 'mrgame':'maoer',
- "jisugameios":"jisu", 'spyxxjios':'sipu', 'mrgameios':'maoer'}
-
- # 娌′紶鐨勮瘽榛樿鍜宎ppid涓�鏍�
- spID = tdict.get(agentName, agentName)
accid = dataDict.get("accid", "")
if not accid:
@@ -150,7 +155,21 @@
return
# 杞寲涓烘父鎴忚处鍙�
- accid = "%s@%s@s%s"%(accid, spID, sid)
+ accid = "%s@%s@s%s"%(accid.lower(), spID, sid)
+
+ try:
+ CleanAccID()
+ #mylog.debug("AccID_Cache_Dict : %s"%str(AccID_Cache_Dict))
+ if accid not in AccID_Cache_Dict:
+ AccID_Cache_Dict[accid] = int(time.time())
+ elif time.time() - AccID_Cache_Dict[accid] < 2:
+ mylog.debug("==========bad: fast click %s"%accid)
+ return
+
+ AccID_Cache_Dict[accid] = int(time.time())
+ except:
+ pass
+
dbController = CouponDB.GetDBEventCon()
if not dbController:
@@ -162,7 +181,8 @@
gmresult = {'accID':accid, 'sid':sid, 'channel':agentName}
#-----------缁熶竴鍥哄畾鐮佸鐞�----------------------
- if codeStr in CommonCards:
+ CommonCardsList = CommonCards.get(agentName, [])
+ if codeStr in CommonCardsList:
# 涓嶅悓鍥哄畾鐮佸悇鑷彧鑳介涓�娆�
result, commondata = dbController.find_one(CouponDB.CouponCodeColName + "_Common", {"code":codeStr, "accid":accid})
if commondata:
@@ -210,8 +230,59 @@
SendDataCollectorBillInfo(wxdata, pushurl, operateID)
return
-
- #-----------鎵归噺鍏戞崲鐮佸鐞�----------------------
+ #-----------鎵归噺鍏戞崲鐮佸鐞嗭紝鍚岀被鍨嬪彲閲嶅棰嗗彇----------------------
+ if codeStr.startswith('h'):
+ 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)
+
+ #鍙噸澶嶉鍙栧垯涓嶉獙璇佸悓鎵规鍗�
+ 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)
+
+ #-----------鎵归噺鍏戞崲鐮佸鐞嗭紝鍚岀被鍨嬪彧棰嗗彇涓�娆�----------------------
result, data = dbController.find_one(CouponDB.CouponCodeColName + "_" + agentName, {"code":codeStr, "channel":agentName})
if not data:
@@ -323,7 +394,7 @@
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'
+ pack_data["IsBind%s"%i] = str(itemList[2] if len(itemList) > 2 else 0)
i += 1
pack_data["pack_type"] = "GMT_AddPersonalCompensation"
@@ -338,9 +409,9 @@
post = {}
post['pack'] = pack_data_dict;
post['sign'] = sign;
- result = urllib2.urlopen(gmurl, urllib.urlencode(post), 10)
+ result = urllib2.urlopen(gmurl, urllib.urlencode(post), 3)
- content = result.read()
+ #content = result.read()
result.close()
# 鎴愬姛鎻愮ず
@@ -361,7 +432,7 @@
post['sign'] = sign;
urllib2.urlopen(gmurl, urllib.urlencode(post), 3)
- return content
+ return 0
except Exception, e:
mylog.debug("gm error %s"%e)
return
--
Gitblit v1.8.0