def getBuyDataForList(self,request): if not request.query_params_format.get("id",None): raise PubErrorCustom("传入彩票分类ID有误!") RCaCheClass = RedisCaCheHandler() RCaCheClass.customInit( method="filter", serialiers="CpModelSerializerToRedis", table="cp", filter_value={"cptypeid": request.query_params_format.get("id", None)} ) res = [] for r in RCaCheClass.run(): cpObj = { "id": r.get("id",None), "name": r.get("name", None), "sort": r.get("sort", None), "url": r.get("url", None), "cptypeid": r.get("cptypeid", None), "typename": r.get("typename", None), "status": r.get("status", None) } res.append(cpObj) res.sort(key=lambda k: (k.get('sort', 0)), reverse=False) return {"data":res}
def get_rate(rules): RCaCheClass = RedisCaCheHandler() if rules['ratetype'] == '2': rates = [] for item in rules['rates']: RCaCheClass.customInit( method="get", serialiers="CpGamesModelSerializerToRedis", table="cpgames", must_key_value=item ) tmpObj = RCaCheClass.run() rates.append(tmpObj['rules']['rate']) rates.sort() return rates elif rules['ratetype'] == '3': rates = [] for item in rules['rate'].split(','): rates.append(item) rates.sort() return rates else: return rules['rate']
def createOrder(self, request): print(request.data_format) cps = request.data_format.get("cp", []) if not len(cps): raise PubErrorCustom("无下单数据!") try: user = Users.objects.select_for_update().get( userid=request.user['userid'], status='0') except Users.DoesNotExist: raise PubErrorCustom("非法用户!") RCaCheClassGames = RedisCaCheHandler() amount = Decimal(0.0) for cp in cps: curramount = cp['num'] * Decimal(str(cp['single'])) amount += curramount RCaCheClassGames.customInit(method="get", serialiers="CpModelSerializerToRedis", table="cp", must_key_value=cp['cpid']) cpStatic = RCaCheClassGames.run() if not cpStatic: raise PubErrorCustom("无此彩票!") if cpStatic['status'] == '1': raise PubErrorCustom("彩票{}已停售".format(cpStatic.name)) elif cpStatic['status'] == '2': raise PubErrorCustom("彩票{}正在维护".format(cpStatic.name)) RCaCheClassGames.customInit( method="get", serialiers="CpGamesModelSerializerToRedis", table="cpgames", must_key_value=cp['gamesid']) games = RCaCheClassGames.run() if not games: raise PubErrorCustom("无此玩法!") rate = get_rate(games['rules']) if isinstance(rate, list): rate.sort() rate_tmp = "" for item in rate: rate_tmp += "{},".format(item) rate = rate_tmp[:-1] print(rate) Order.objects.create( **{ "userid": request.user['userid'], "amount": curramount, "num": cp['num'], "term": get_downdata(cpStatic)['downterm'], "no": json.dumps({'no': cp['cp']}), "cpid": cp['cpid'], "gamesid": cp['gamesid'], "rate": rate }) if amount > user.bal: raise PubErrorCustom("余额不足!") user.bal -= amount user.save() return None
def getCpData(self,request): if not request.query_params_format.get("id",None): raise PubErrorCustom("传入彩票ID有误!") RCaCheClass = RedisCaCheHandler() RCaCheClass.customInit( method="get", serialiers="CpModelSerializerToRedis", table="cp", must_key_value=request.query_params_format.get("id",None) ) cpObj = RCaCheClass.run() RCaCheClassSmallType = RedisCaCheHandler() RCaCheClassMiniType = RedisCaCheHandler() RCaCheClassGames = RedisCaCheHandler() RCaCheClassSmallType.customInit( method="filter", serialiers="CpSmallTypeModelSerializerToRedis", table="cpsmalltype", filter_value={"bigtypeid": cpObj['cptypeid']} ) cpObj['smalltype'] = RCaCheClassSmallType.run() cpObj['smalltype'].sort(key=lambda k: (k.get('sort', 0)), reverse=False) for smalltype in cpObj['smalltype']: RCaCheClassMiniType.customInit( method="filter", serialiers="CpMiniTypeModelSerializerToRedis", table="cpminitype", filter_value={"smalltypeid": smalltype['typeid'], "bigtypeid": cpObj['cptypeid']} ) smalltype['minitype'] = RCaCheClassMiniType.run() smalltype['minitype'].sort(key=lambda k: (k.get('sort', 0)), reverse=False) for minitype in smalltype['minitype']: RCaCheClassGames.customInit( method="filter", serialiers="CpGamesModelSerializerToRedis", table="cpgames", filter_value={"minitypeid": minitype['typeid'], "smalltypeid": smalltype['typeid'], "bigtypeid": cpObj['cptypeid']} ) minitype['games'] = RCaCheClassGames.run() minitype['games'].sort(key=lambda k: (k.get('sort', 0)), reverse=False) for item in minitype['games']: item['rules']['rate'] = get_rate(item['rules']) cpObj['cpnohistory'] = get_open_history(cpObj) cpObj['downterm'],cpObj['downtime'] = count_downtime(cpObj) return {"data": { "id":cpObj['id'], "url":cpObj['url'], "name":cpObj['name'], "downtime":cpObj['downtime'], "cpnohistory":cpObj['cpnohistory'], "downterm":cpObj['downterm'], "smalltype":cpObj['smalltype'] }}