Ejemplo n.º 1
0
def calcDayWater():
    #todo 同步中午12点前24小时的平博投注单
    try:
        betList=yield from get_wagers()
        for x in betList:
            yield from todo_pingbo_wagers(x)
    except Exception as e:
        logging.exception(e)
        logging.error('{},中午流水计算平博注单修复失败,请及时人工修复平博注单,计算流水'.format(timestamp2Str(getNow())))
    else:
        strLastCheckTime = yield from classDataBaseMgr.getInstance().getCalcDayWaterTime()
        if strLastCheckTime is None:
            yield from classDataBaseMgr.getInstance().setCalcDayWaterTime(timeHelp.getNow())

        iLastCheckTime = int(strLastCheckTime)

        if not timeHelp.isSameBetDay(iLastCheckTime,timeHelp.getNow()):
            #隔bet日了,中午进行计算日流水,做返利活动
            #计算日流水
            yield from classDataBaseMgr.getInstance().setCalcDayWaterTime(timeHelp.getNow())
            iTodayStartTs = timeHelp.todayStartTimestamp()

            #获取昨日投注流水
            funFuture = asyncio.ensure_future(runExecuteAll(iTodayStartTs,iTodayStartTs-86400))
            listAllRet = yield from asyncio.wait_for(funFuture,10)

            #TODO log
            for var_ret in listAllRet:
                strAccountId = var_ret["loginId"]
                iValidCoin = int(var_ret["validWaterCoin"] * 100) #单位换算成分
                #拿用户数据
                if len(strAccountId) <= 0 or strAccountId is None:
                    logging.error("account data not find")
                    continue

                if iValidCoin <= 0:
                    logging.error("account [{}] validCoin [{}] not find".format(strAccountId,iValidCoin))
                    continue

                objPlayerData, objPlayLock = yield from classDataBaseMgr.getInstance().getPlayerDataByLock(strAccountId)
                if objPlayerData is None:
                    logging.error("account [{}] data not find")
                    continue

                dictVipCfg = vip_config.get(objPlayerData.iLevel,None)
                if dictVipCfg is None:
                    logging.error("accountId[{}] vipLevel[{}] cfg is not valid".format(objPlayerData.strAccountId,objPlayerData.iLevel))
                    continue
                    yield from classDataBaseMgr.getInstance().releasePlayerDataLock(objPlayerData.strAccountId)

                iRebate = int(iValidCoin / 1000 * dictVipCfg[rebate])
                balance = objPlayerData.iCoin + iRebate
                objPlayerData.iCoin += iRebate
                #TODO 日红利计算的bill要记录一下

                yield from classDataBaseMgr.getInstance().setPlayerDataByLock(objPlayerData,objPlayLock)

                yield from addPlayerBill(strAccountId, iValidCoin, balance, CoinOp.coinOpPingboDayWaterRebate, iValidWater=iRebate, strDes="日有效流水[{}]返利[{}]".format(iValidCoin/100,iRebate/100))
Ejemplo n.º 2
0
def handleHttp(dict_param: dict):
    """提款"""
    objRsp = cResp()

    strAccountId = dict_param.get("accountId", "")
    strCardNum = str(dict_param.get("cardNum", ""))
    TradePwd = dict_param.get("tradePwd", "")
    money = dict_param.get("money", "")
    if not all([strCardNum, money]):
        raise exceptionLogic(errorLogic.client_param_invalid)
    if cpv.checkIsString(money):
        raise exceptionLogic(errorLogic.client_param_invalid)
    fMoney = float(money)
    if not cpv.checkIsFloat(fMoney):
        raise exceptionLogic(errorLogic.client_param_invalid)
    iCoin = int(fMoney * 100)
    if not cpv.checkIsInt(iCoin):
        raise exceptionLogic(errorLogic.client_param_invalid)

    strTradePwd = PwdEncrypt().create_md5(TradePwd)

    objPlayerData, objLock = yield from classDataBaseMgr.getInstance(
    ).getPlayerDataByLock(strAccountId)
    if not objPlayerData.strTradePassword:
        raise exceptionLogic(errorLogic.trade_pwde_not_bind)
    if strTradePwd != objPlayerData.strTradePassword:
        raise exceptionLogic(errorLogic.trade_pwde_not_valid)

    # 获取可提现额度
    drawinglimit = round(
        (objPlayerData.iCoin - objPlayerData.iNotDrawingCoin) / 100, 2)

    Coin = round(iCoin / 100)
    if not cpv.checkIsInt(Coin):
        raise exceptionLogic(errorLogic.player_drawing_coin_not_int)
    if Coin > drawinglimit:
        raise exceptionLogic(errorLogic.player_drawing_not_enough)
    if objPlayerData.iCoin < iCoin:
        raise exceptionLogic(errorLogic.player_coin_not_enough)
    else:
        balance = objPlayerData.iCoin - iCoin
        # redis 事务操作以及余额的处理
        objPlayerData.iCoin -= iCoin
        yield from classDataBaseMgr.getInstance().setPlayerDataByLock(
            objPlayerData, objLock)

        yield from addPlayerBill(strAccountId, iCoin, balance,
                                 CoinOp.coinOpDraw, 2, "中心钱包", strCardNum)

    newdrawinglimit = drawinglimit - Coin
    objRsp.data = cData()
    objRsp.data.iCoin = "%.2f" % round(objPlayerData.iCoin / 100, 2)
    objRsp.data.newDrawingLimit = newdrawinglimit

    return classJsonDump.dumps(objRsp)
Ejemplo n.º 3
0
def generalPayOrder(strPayOrder,
                    strThirdOrder,
                    strThirdPayName,
                    strAccountId,
                    iRmbFen,
                    srcIp,
                    payChannel,
                    bank=""):

    objNewPayOrder = classPayData()
    objNewPayOrder.strPayOrder = strPayOrder
    objNewPayOrder.strThirdPayOrder = strThirdOrder  #dictResponse["data"]["order_sn"]
    objNewPayOrder.strThirdPayName = strThirdPayName
    objNewPayOrder.strAccountId = strAccountId
    objNewPayOrder.iBuyCoin = iRmbFen
    objNewPayOrder.iOrderTime = timeHelp.getNow()
    objNewPayOrder.strIp = srcIp  #str(dictParam.get("srcIp", ""))
    objNewPayOrder.strPayChannel = payChannel
    objNewPayOrder.strBank = bank

    yield from classDataBaseMgr.getInstance().setPayOrderByLock(objNewPayOrder,
                                                                save=False,
                                                                new=True)
    objPlayerData = yield from classDataBaseMgr.getInstance().getPlayerData(
        strAccountId)
    if objPlayerData is None:
        logging.error("player data is None [{}]".format(strAccountId))
        raise exceptionLogic(errorLogic.player_data_not_found)

    #iBalance = objPlayerData.iCoin + iRmbFen
    yield from addPlayerBill(strAccountId=strAccountId,
                             iOpCoin=iRmbFen,
                             iBalance=objPlayerData.iCoin,
                             enumOp=CoinOp.coinOpPay,
                             tradeState=2,
                             transFrom=payChannel,
                             transTo=bank,
                             srcIp=srcIp,
                             strOrderId=strPayOrder)
Ejemplo n.º 4
0
def handleHttp(dictParam: dict):
    #领取活动奖金
    objResp = cResp()
    strAccountId = dictParam.get('accountId','')
    strToken = dictParam.get('token','')
    iActiveId=int(dictParam.get('activeId',0))

    certifytoken.certify_token(strAccountId, strToken)
    objPlayerData,objPlayerLock=yield from classDataBaseMgr.getInstance().getPlayerDataByLock(strAccountId)
    if objPlayerData is None:
        yield from classDataBaseMgr.getInstance().setPlayerDataByLock(objPlayerData, objPlayerLock)
        raise exceptionLogic(errorLogic.player_data_not_found)
    objActiveData, objLock = yield from classDataBaseMgr.getInstance().getActiveDataByLock(strAccountId, None)
    #判断活动是否完成
    objActiveItme=objActiveData.dictActiveItem.get(iActiveId)
    if objActiveItme is None:
        yield from classDataBaseMgr.getInstance().setPlayerDataByLock(objPlayerData, objPlayerLock)
        yield from classDataBaseMgr.getInstance().setActiveDataByLock(objActiveData, objLock)
        raise exceptionLogic(errorLogic.active_not_find)
    if objActiveItme.iActiveState==1:
        yield from classDataBaseMgr.getInstance().setPlayerDataByLock(objPlayerData, objPlayerLock)
        yield from classDataBaseMgr.getInstance().setActiveDataByLock(objActiveData, objLock)

        raise exceptionLogic(errorLogic.active_have_already_get)

    global awardCoin,transFrom
    awardCoin=0
    transFrom=""
    if iActiveId==1000:
        #首冲活动领取
        #计算他该领取的金钱
        recharge=yield from classSqlBaseMgr.getInstance().getFirstRechCoin(strAccountId,objActiveItme.iActiveTime)
        recharge=recharge/100
        config_keys=[]
        for x in activeConfig.activeConfig_cfg.keys():
            if x.startswith('10'):
                config_keys.append(int(x))
        config_keys.sort()
        for x in config_keys:
            if recharge>=int(activeConfig.activeConfig_cfg[str(x)].get('taskConditionParam2')):
                awardCoin=activeConfig.activeConfig_cfg[str(x)].get('awardNum')
                transFrom=activeConfig.activeConfig_cfg[str(x)].get('taskDes')
                continue
            else:
                break
    elif iActiveId==2001:
        #vip月首冲活动
        if objPlayerData.iLevel == 0:
            yield from classDataBaseMgr.getInstance().setPlayerDataByLock(objPlayerData, objPlayerLock)
            raise exceptionLogic(errorLogic.active_requirements_not_met)
        #1.判断是否领取时间过期
        nowDtObj=datetime.fromtimestamp(getNow())
        actDtobj=datetime.fromtimestamp(objActiveItme.iActiveTime)
        if (nowDtObj.year!=actDtobj.year) and (nowDtObj.month!=actDtobj.month):
            objActiveItme.iActiveState=1
            yield from classDataBaseMgr.getInstance().setPlayerDataByLock(objPlayerData,objPlayerLock)
            yield from classDataBaseMgr.getInstance().setActiveDataByLock(objActiveData,objLock)
            raise exceptionLogic(errorLogic.active_award_not_get)
        totalCoin,fistrtTime=yield from classSqlBaseMgr.getInstance().getAccountFirstPayByDay(strAccountId)
        totalCoin=0 if totalCoin is None else totalCoin/100
        if totalCoin<10000:
            yield from classDataBaseMgr.getInstance().setPlayerDataByLock(objPlayerData, objPlayerLock)
            yield from classDataBaseMgr.getInstance().setActiveDataByLock(objActiveData, objLock)
            raise exceptionLogic(errorLogic.active_requirements_not_met)
        for x in activeConfig.activeConfig_cfg.keys():
            if objPlayerData.iLevel == int(activeConfig.activeConfig_cfg[x].get('taskConditionParam2')):
                awardCoin = activeConfig.activeConfig_cfg[x].get('awardNum')
                transFrom = activeConfig.activeConfig_cfg[str(x)].get('taskDes')
    #加钱
    awardCoin=awardCoin*100
    objActiveItme.iActiveState = 1
    objPlayerData.iCoin+=awardCoin
    # 增加不可提现额度
    objActiveData.iNotDrawingCoin+=awardCoin
    #记录流水
    yield from addPlayerBill(strAccountId,awardCoin,CoinOp.coinOpActiveAward,1,transFrom,strAccountId,dictParam.get('srcIp'))
    yield from classDataBaseMgr.getInstance().setPlayerDataByLock(objPlayerData, objPlayerLock)
    yield from classDataBaseMgr.getInstance().setActiveDataByLock(objActiveData, objLock)
    return classJsonDump.dumps(objResp)
Ejemplo n.º 5
0
def joinVipPayRebateActive(strAccountId: str, iActiveId: int):
    var_cfg = activeConfig_cfg.get(str(iActiveId), None)
    if var_cfg is None:
        raise exceptionLogic(errorLogic.active_cfg_not_find)

    if var_cfg["taskType"] != enumActiveType.activeVipPayRebate:
        raise exceptionLogic(errorLogic.active_cfg_not_find)

    objActiveData, objActiveLock = yield from classDataBaseMgr.getInstance(
    ).getActiveDataByLock(strAccountId, None)
    if objActiveData is None:
        yield from classDataBaseMgr.getInstance().releaseActiveDataLock(
            strAccountId, None)
        raise exceptionLogic(errorLogic.active_not_find)

    objActiveTypeItem = objActiveData.getTypeItemByType(
        enumActiveType.activeVipPayRebate)
    if objActiveTypeItem is None:
        raise exceptionLogic(errorLogic.active_not_find)

    #检测是否重复参与
    checkHaveSameActiveType(objActiveData, enumActiveType.activeVipPayRebate,
                            var_cfg, strAccountId)

    # 看看是否符合条件规则
    from appweb.handle.active.getVipPayRebateData import getVipActiveId

    # 查看等级是否有效
    objPlayerData = yield from classDataBaseMgr.getInstance().getPlayerData(
        strAccountId)
    iCheckActiveId = getVipActiveId(objPlayerData.iLevel)
    if iActiveId != iCheckActiveId:
        raise exceptionLogic(errorLogic.active_requirements_not_met)

    #查看总充值是否有效
    #HARD code
    if objActiveTypeItem.dictParam.get("activePayCoin", 0) < 10000:
        raise exceptionLogic(errorLogic.active_requirements_not_met)

    iNowTime = timeHelp.getNow()

    if (var_cfg["actStartTime"]) < iNowTime and (iNowTime <
                                                 var_cfg["actEndTime"]):
        objNewActiveItem = classActiveItem()
        objNewActiveItem.iActiveId = int(var_cfg['id'])
        objNewActiveItem.iActiveTime = timeHelp.getNow()
        objNewActiveItem.iActiveState = enumActiveState.stateAward
        objActiveData.dictActiveItem[
            objNewActiveItem.iActiveId] = objNewActiveItem

    else:
        raise exceptionLogic(errorLogic.active_time_not_valid)

    # 给用户加钱
    objPlayerData, objPlayerLock = yield from classDataBaseMgr.getInstance(
    ).getPlayerDataByLock(strAccountId)
    if objPlayerData is None:
        raise exceptionLogic(errorLogic.player_data_not_found)

    # 充值已经加过一倍流水了
    iAddCoin = int(var_cfg["awardNum"])
    objPlayerData.iCoin += iAddCoin
    iPayCoin = int(var_cfg["taskConditionParam2"])
    objPlayerData.iNotDrawingCoin += (
        (int(var_cfg["awardNum"])) * int(var_cfg["waterRate"]) +
        iPayCoin * int(var_cfg["waterRate"] - 1))

    yield from addPlayerBill(strAccountId,
                             iAddCoin,
                             objPlayerData.iCoin,
                             CoinOp.coinOpActiveAward,
                             tradeState=1,
                             strDes="vip 每月首冲奖励活动 冲[{}] 奖励[{}]".format(
                                 iPayCoin, iAddCoin))

    yield from classDataBaseMgr.getInstance().setActiveDataByLock(
        objActiveData, objActiveLock)

    yield from classDataBaseMgr.getInstance().setPlayerDataByLock(
        objPlayerData, objPlayerLock)
Ejemplo n.º 6
0
def handleHttp(dict_param: dict):
    """转账"""
    objRsp = cResp()

    strAccountId = dict_param.get("accountId", "")
    TurnOut = dict_param.get("Turnout", "")
    TurnIn = dict_param.get("Turnin", "")
    money = dict_param.get("money", "")

    if not all([TurnOut, TurnIn, money]):
        raise exceptionLogic(errorLogic.client_param_invalid)

    if cpv.checkIsString(money):
        raise exceptionLogic(errorLogic.client_param_invalid)

    fMoney = float(money)
    if not cpv.checkIsFloat(fMoney):
        raise exceptionLogic(errorLogic.client_param_invalid)
    fMoney = float("%.2f" % fMoney)

    iCoin = int(fMoney * 100)
    if not cpv.checkIsInt(iCoin):
        raise exceptionLogic(errorLogic.client_param_invalid)

    if TurnOut != "中心钱包" and TurnIn != "中心钱包":
        raise exceptionLogic(errorLogic.client_param_invalid)

    objPlayerData, objLock = yield from classDataBaseMgr.getInstance(
    ).getPlayerDataByLock(strAccountId)
    tradeData = None
    if TurnOut == "中心钱包" and TurnIn == "平博钱包":
        if iCoin > int(objPlayerData.iCoin):
            raise exceptionLogic(errorLogic.player_coin_not_enough)
        objPlayerData.iCoin -= iCoin
        iBalance = objPlayerData.iCoin - iCoin

        # 触发另一个平台的转账功能
        status = yield from pinboDeposit.deposit(kind='deposit',
                                                 accountId=strAccountId,
                                                 amount=fMoney)
        if status == 1:
            objPlayerData.iPingboCoin += iCoin
        yield from classDataBaseMgr.getInstance().setPlayerDataByLock(
            objPlayerData, objLock)

        tradeData = yield from addPlayerBill(strAccountId, iCoin, iBalance,
                                             CoinOp.coinOpTrans, status,
                                             TurnOut, TurnIn)

    elif TurnOut == "中心钱包" and TurnIn == "电竞钱包":
        if iCoin > int(objPlayerData.iCoin):
            raise exceptionLogic(errorLogic.player_coin_not_enough)
        objPlayerData.iCoin -= iCoin
        objPlayerData.iGuessCoin += iCoin
        iBalance = objPlayerData.iCoin - iCoin
        yield from classDataBaseMgr.getInstance().setPlayerDataByLock(
            objPlayerData, objLock)

        tradeData = yield from addPlayerBill(strAccountId, iCoin, iBalance,
                                             CoinOp.coinOpTrans, 1, TurnOut,
                                             TurnIn)

    elif TurnIn == "中心钱包" and TurnOut == "平博钱包":
        # 触发另一个平台的转账功能
        status = yield from pinboDeposit.deposit(kind='withdraw',
                                                 accountId=strAccountId,
                                                 amount=fMoney)
        if status == 1:
            objPlayerData.iCoin += iCoin
            objPlayerData.iPingboCoin -= iCoin
            iBalance = objPlayerData.iCoin + iCoin
            yield from classDataBaseMgr.getInstance().setPlayerDataByLock(
                objPlayerData, objLock)

        tradeData = yield from addPlayerBill(strAccountId, iCoin, iBalance,
                                             CoinOp.coinOpTrans, status,
                                             TurnOut, TurnIn)

    elif TurnIn == "中心钱包" and TurnOut == "电竞钱包":
        if iCoin > int(objPlayerData.iGuessCoin):
            raise exceptionLogic(errorLogic.player_coin_not_enough)

        objPlayerData.iCoin += iCoin
        objPlayerData.iGuessCoin -= iCoin
        iBalance = objPlayerData.iCoin + iCoin
        yield from classDataBaseMgr.getInstance().setPlayerDataByLock(
            objPlayerData, objLock)
        tradeData = yield from addPlayerBill(strAccountId, iCoin, iBalance,
                                             CoinOp.coinOpTrans, 1, TurnOut,
                                             TurnIn)
    else:
        logging.error("unkown trun way {} {}".format(TurnIn, TurnOut))

    objRsp.data = cData()
    objRsp.data.iCoin = "%.2f" % round(objPlayerData.iCoin / 100, 2)
    objRsp.data.iGuessCoin = "%.2f" % round(objPlayerData.iGuessCoin / 100, 2)
    tradeData.iCoin = float("%.2f" % round(tradeData.iCoin / 100, 2))
    objRsp.data.orderdata = tradeData

    return classJsonDump.dumps(objRsp)