Exemple #1
0
    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}
Exemple #2
0
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']
Exemple #3
0
    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
Exemple #4
0
    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']
        }}