Exemple #1
0
def test():
    sql = 'select * from chart_sidebar'
    with get_mysql_client() as cursor:
        cursor.execute(sql)
        result = cursor.fetchall()
    for row in result:
        exchange = row['exchange']
        variety = row['variety']
        sidebar = row['sidebar']
        title = row['sidebar_name']
        p_axis = row['p_axis']
        s_axis = row['s_axis']
        size = 1
        graph = 1
        compare = 1

        sql = 'select id from chart_sidebar_copy where exchange=%s and variety=%s and name=%s'
        with get_mysql_client() as cursor:
            cursor.execute(
                sql,
                (exchange, variety, title if row['panorama'] == 0 else '全景图'))
            sidebar_id = cursor.fetchone()['id']

        if sidebar == 'panorama_3':
            compare = 2
        elif sidebar == 'panorama_4':
            compare = 3
        else:
            compare = 1

        if row['panorama'] == 1:
            size = 1
        else:
            size = 2

        if sidebar == 'panorama_7':
            graph = 2
        else:
            graph = 1

        sql = 'insert into chart_chart set title=%s, size=%s, graph=%s, compare=%s, p_axis=%s, s_axis=%s'
        with get_mysql_client() as cursor:
            cursor.execute(sql, (title, size, graph, compare, p_axis, s_axis))
            chart_id = cursor.lastrowid

        sql = 'insert into chart_sidebar_chart set chart_id=%s, sidebar_id=%s'
        with get_mysql_client() as cursor:
            cursor.execute(sql, (chart_id, sidebar_id))

        sql = 'update chart_line set chart_id=%s where exchange=%s and variety=%s and sidebar=%s'
        with get_mysql_client() as cursor:
            cursor.execute(sql, (chart_id, exchange, variety, sidebar))
    print('done')
Exemple #2
0
def start():
    lst = []
    date = None
    with get_mysql_client() as cr:
        sql = """
                select date
                from alert_prediction_record
                order by date desc
        """
        cr.execute(sql)
        vals = cr.fetchone()
        date = str(vals.get('date', None))[:10]

        sql1 = """
            select id, varieties from alert_ai_varieties
        """
        cr.execute(sql1)
        lst = cr.fetchall()
        cal_ranking()
    for varieties_vals in lst:
        varieties_name, varieties_id = varieties_vals.get(
            'varieties'), varieties_vals.get('id')
        judgment(varieties_name, varieties_id, date)
        update_quotes(varieties_name, varieties_id, date)
        cal_win_percent(date)
        insert_quotes_vals(varieties_name, varieties_id)
        cal_partical_man_number(varieties_id)
Exemple #3
0
 def get_list(self, timestamp=False):
     q = Q(self.Table, result=Result(compile=mysql_compile)).\
         fields(self.Column, self.Date)
     if self.start:
         q = q.where(self.Date >= self.start)
     if self.end:
         q = q.where(self.Date <= self.end)
     if self.limit:
         q = q.limit(self.offset, self.limit)
     if self.desc:
         q = q.order_by(self.Date.desc())
     else:
         q = q.order_by(self.Date)
     sql, params = q.select()
     logging.info("获取数据SQL:%s, 参数:%s", sql, params)
     with get_mysql_client() as cursor:
         cursor.execute(sql, params)
         data = cursor.fetchall()
     if timestamp:
         result = [
             (int(time.mktime(item[self.date_alias].timetuple())) * 1000,
              item[self.column]) for item in data
             if item[self.column] is not None
         ]
     else:
         result = [
             item[self.column] for item in data
             if item[self.column] is not None
         ]
     # logging.info("数据为:%s", result)
     return result
Exemple #4
0
def judgment(varieties_name, varieties_id, date):
    """判断竞猜的正确与否,并写入数据库"""
    end_day = datetime.strptime(date, '%Y-%m-%d')
    data = ref_ship(varieties_name, 'SETTLE', limit=2, end=end_day)

    prediction = 'up'
    if data[0] < data[1]:
        prediction = 'down'

    with get_mysql_client() as cr:
        sql = """
            select id, prediction
            from alert_prediction_record
            where varieties_id = '%s' and date = '%s'
        """ % (varieties_id, date)
        cr.execute(sql)
        lst = cr.fetchall()
        for vals in lst:
            if vals['prediction'] == prediction:
                cr.execute(
                    "update alert_prediction_record set is_true = 't' where id = '%s'"
                    % vals['id'])
            else:
                cr.execute(
                    "update alert_prediction_record set is_true = 'f' where id = '%s'"
                    % vals['id'])
    return
Exemple #5
0
 def get_list(self, timestamp=False):
     q = None
     std_obj = None
     for data_obj in self.data_objects:
         if q is None:
             std_obj = data_obj
             q = Q(std_obj.Table,
                   result=Result(compile=mysql_compile)).fields(
                       std_obj.Column)
         else:
             q = q.tables(q.tables() + data_obj.Table).\
                 on(std_obj.Date == data_obj.Date).\
                 fields(data_obj.Column)
     if timestamp:
         q = q.fields(std_obj.Date)
     if self.start:
         q = q.where(std_obj.Date >= self.start)
     if self.end:
         q = q.where(std_obj.Date <= self.end)
     if self.limit:
         q = q.limit(self.offset, self.limit)
     if self.desc:
         q = q.order_by(std_obj.Date.desc())
     else:
         q = q.order_by(std_obj.Date)
     sql, params = q.select()
     with get_mysql_client() as cursor:
         cursor.execute(sql, params)
         data = cursor.fetchall()
     result = [item.values() for item in data]
     logging.info("获取数据SQL:%s, 参数:%s, 数据为:%s", sql, params, result)
     return result
Exemple #6
0
 def varieties(self):
     if self._varieties is None:
         sql = 'select varieties_id from formula_varieties where formula_id = %s'
         with get_mysql_client() as cursor:
             cursor.execute(sql, (self.id, ))
             result = cursor.fetchall()
         self._varieties = [item['varieties_id'] for item in result]
     return self._varieties
Exemple #7
0
 def has_emit(self, msg, subscriber):
     sql = ('select id from alert_alert where user_id=%s and triggered_by=%s '
            'and variety=%s and price=%s and created_at>=%s;')
     with get_mysql_client() as cursor:
         cursor.execute(sql, (subscriber['user_id'], msg.formula_id,
                              msg.variety, msg.price,
                              self.today))
         result = cursor.fetchone()
     return bool(result)
Exemple #8
0
 def save(self, msg, subscriber):
     # 持久化到数据库
     sql = ('insert alert_alert set user_id=%s, body=%s, variety=%s, contract=%s, '
            'price=%s, triggered_by=%s, created_at=%s, is_pushed=%s;')
     with get_mysql_client() as cursor:
         cursor.execute(sql, (subscriber['user_id'], msg.body, msg.variety,
                              msg.contract, msg.price, msg.formula_id, self.now, 1))
         alert_id = cursor.lastrowid
     return alert_id
Exemple #9
0
 def subscribers(self):
     # 获取该消息的所有订阅者
     if self._subscribers is None:
         sql = 'select `id` from varieties_record where code=%s'
         with get_mysql_client() as cursor:
             cursor.execute(sql, (self.variety,))
             result = cursor.fetchone()
         if result:
             varieties_id = result['id']
             sql = ('select a.user_id, c.openid from user_subscription_varieties as a '
                    'left join user_subscription_formula as b on a.varieties_id=b.varieties_id '
                    'left join user as c on a.user_id=c.id where a.varieties_id=%s '
                    'and b.formula_id=%s and a.user_id=b.user_id;')
             with get_mysql_client() as cursor:
                 cursor.execute(sql, (varieties_id, self.formula_id))
                 self._subscribers = cursor.fetchall()
         else:
             self._subscribers = []
     return self._subscribers
Exemple #10
0
 def filter(self, contract, years):
     ct = T('contracts')
     q = Q(ct, result=Result(compile=mysql_compile))
     q = q.fields(ct['expire_date']).where(ct['contract'] == contract).limit(1)
     sql, params = q.select()
     with get_mysql_client() as cursor:
         cursor.execute(sql, params)
         expire_date = cursor.fetchone()['expire_date']
     origin = expire_date.strftime('%y%m')
     new = str(expire_date.year + int(years))[-2:] + str(expire_date.month).zfill(2)
     return contract.replace(origin, new)
Exemple #11
0
def sidebar():

    sql = 'select distinct(variety) from chart_sidebar'
    with get_mysql_client() as cursor:
        cursor.execute(sql)
        result = cursor.fetchall()
    for row in result:
        variety = row['variety']
        sql = 'insert into chart_sidebar_copy set exchange=%s, variety=%s, name=%s'
        with get_mysql_client() as cursor:
            cursor.execute(sql, ('', variety, '全景图'))
    sql = 'select * from chart_sidebar where panorama=0'
    with get_mysql_client() as cursor:
        cursor.execute(sql)
        result = cursor.fetchall()
    for row in result:
        exchange = row['exchange']
        variety = row['variety']
        name = row['sidebar_name']
        sql = 'insert into chart_sidebar_copy set exchange=%s, variety=%s, name=%s'
        with get_mysql_client() as cursor:
            cursor.execute(sql, (exchange, variety, name))
Exemple #12
0
 def filter(self, variety, serial):
     if serial == '0':
         _serial = 'main_contract'
     else:
         _serial = 'serial_contract' + serial
     mt = T('main_contract')
     q = Q(mt, result=Result(compile=mysql_compile))
     q = q.fields(mt[_serial].as_('serial'))
     q = q.where((mt['varieties'] == variety) & (mt[_serial] != None )).order_by(mt['settlement_date'].desc()).limit(1)
     sql, params = q.select()
     with get_mysql_client() as cursor:
         cursor.execute(sql, params)
         contract = cursor.fetchone()['serial']
     return contract
Exemple #13
0
 def count(self):
     q = Q(self.Table, result=Result(compile=mysql_compile)).fields(
         self.Column.count().as_('count_value'))
     if self.start:
         q = q.where(self.Date >= self.start)
     if self.end:
         q = q.where(self.Date <= self.end)
     sql, params = q.select()
     logging.info("获取数据SQL:%s, 参数:%s", sql, params)
     with get_mysql_client() as cursor:
         cursor.execute(sql, params)
         data = cursor.fetchone()
     result = data['count_value']
     logging.info("数据为:%s", result)
     return result
Exemple #14
0
 def init(self):
     table = 'ref_ship'
     q = Q(T(table), result=Result(compile=mysql_compile)). \
         fields(T(table)['table_name'],
                T(table)['column']).where((T(table)['varieties'] == self.variety) &
                                          (T(table)['price_code'] == self.price_code))
     sql, params = q.select()
     with get_mysql_client() as cursor:
         cursor.execute(sql, params)
         result = cursor.fetchone()
     if not result:
         raise ShipNotExists('varieties:%s,price_code:%s' %
                             (self.variety, self.price_code))
     self.table = result['table_name']
     self.column = result['column']
     logging.info("获取数据SQL:%s, 参数:%s, 数据为:%s", sql, params, result)
Exemple #15
0
 def init(self):
     sql, params = Q(T('symbol'), result=Result(compile=mysql_compile)).\
         fields('*').where(T('symbol')['symbol'] == self.symbol).select()
     with get_mysql_client() as cursor:
         cursor.execute(sql, params)
         data = cursor.fetchone()
     if not data:
         raise SymbolNotExists('symbol(%s) not exists!' % self.symbol)
     for attr in self.attr_list:
         if attr == 'column':
             self.column = self.column or data.get(attr) or 'amount'
         elif attr == 'date_column':
             self.date = data.get(attr) or self.date
         else:
             setattr(self, attr, data.get(attr))
     logging.info("获取数据SQL:%s, 参数:%s, 数据为:%s", sql, params, data)
     return data
Exemple #16
0
def cal_win_percent(date):
    """每天计算胜率,胜负次数,参与次数"""
    with get_mysql_client() as cr:
        sql = """
                select IFNULL(t2.fail_number, 0) as fail_number, t1.user_id,  IFNULL(t1.victor_number, 0) as victor_number
                from
                    (select count(*) as victor_number, user_id
                    from alert_prediction_record
                    where is_true = 't' and if_visible = '1'
                    group by user_id) as t1
                left outer join
                    (select count(*) as fail_number, user_id
                    from alert_prediction_record
                    where is_true = 'f' and if_visible = '1'
                    group by user_id) as t2
                    on t1.user_id = t2.user_id
            UNION
                select IFNULL(t4.fail_number, 0) as fail_number, t4.user_id,  IFNULL(t3.victor_number, 0) as victor_number
                from
                    (select count(*) as victor_number, user_id
                    from alert_prediction_record
                    where is_true = 't' and if_visible = '1'
                    group by user_id) as t3
                right outer join
                    (select count(*) as fail_number, user_id
                    from alert_prediction_record
                    where  is_true = 'f' and if_visible = '1'
                    group by user_id) as t4
                    on t3.user_id = t4.user_id
        """
        cr.execute(sql)
        head = cr.description
        vals_lst = cr.fetchall()
        for vals in vals_lst:
            vals['part_number'] = vals['victor_number'] + vals['fail_number']
            vals['win_percent'] = round(
                float(vals['victor_number']) / float(
                    (vals['victor_number'] + vals['fail_number'])), 4)
            sql2 = """update user
                        set victor_number = '%(victor_number)s',
                            part_number = '%(part_number)s',
                            fail_number = '%(fail_number)s',
                            win_percent = '%(win_percent)s'
                        where id = '%(user_id)s'""" % vals
            cr.execute(sql2)
    return True
Exemple #17
0
def cal_partical_man_number(varieties_id):
    """每天算出各个品种的参与人数"""
    with get_mysql_client() as cr:
        sql = """
        select user_id, id
        from alert_prediction_record
        where varieties_id = '%s'
        group by user_id
        """ % varieties_id
        cr.execute(sql)
        res = cr.fetchall()

        sql1 = """
                update alert_ai_varieties set count_user = '******' where id = '%s'
        """ % (len(res), varieties_id)
        cr.execute(sql1)
        return True
Exemple #18
0
def update_quotes(varieties_name, varieties_id, date):
    """把今天结算后的价格信息更新到数据库"""
    res = get_quotes(varieties_name, date)
    res['varieties_id'] = varieties_id
    res['date'] = date
    with get_mysql_client() as cr:
        sql = """
                update alert_quotes_record
                set price = '%(price)s',
                    trend = '%(trend)s',
                    change_price = '%(change_price)s',
                    change_percent = '%(change_percent)s'
                where varieties_id = '%(varieties_id)s' and
                      date = '%(date)s'
        """ % res
        cr.execute(sql)
    return
Exemple #19
0
 def init(self):
     mt = T('main_contract')
     q = Q(mt, result=Result(compile=mysql_compile))
     q = q.fields('*').where(mt['varieties'] == self.variety)
     q = q.order_by(mt['settlement_date'].desc()).limit(1)
     sql, params = q.select()
     logging.info("获取数据SQL:%s, 参数:%s", sql, params)
     with get_mysql_client() as cursor:
         cursor.execute(sql, params)
         result = cursor.fetchone()
     logging.info("数据为:%s", result)
     rows = []
     for i in range(1, 13):
         row = "select '%s' contract" % result.get('serial_contract' +
                                                   str(i))
         rows.append(row)
     exp = ' union '.join(rows)
     ft = T(Expr(exp)).as_('future')
     self._ft = ft
Exemple #20
0
def cal_ranking():
    """按胜率计算排名"""
    with get_mysql_client() as cr:
        sql = """
            select id, win_percent
            from user
            where part_number != '0'
            order by win_percent desc, part_number desc
        """
        cr.execute(sql)
        lst = cr.fetchall()
        id_lst = []
        ranking = 1
        # percent_lst = []
        for vals in lst:
            user_id = vals['id']
            sql1 = """update user set ranking = '%s' where id = '%s' """ % (
                ranking, user_id)
            cr.execute(sql1)
            ranking = ranking + 1
    return
Exemple #21
0
 def count(self):
     q = None
     std_obj = None
     for data_obj in self.data_objects:
         if q is None:
             std_obj = data_obj
             q = Q(std_obj.Table,
                   result=Result(compile=mysql_compile)).fields(
                       std_obj.Column.count().as_('count_value'))
         else:
             q = q.tables(q.tables() + data_obj.Table).\
                 on(std_obj.Date == data_obj.Date)
     if self.start:
         q = q.where(std_obj.Date >= self.start)
     if self.end:
         q = q.where(std_obj.Date <= self.end)
     sql, params = q.select()
     with get_mysql_client() as cursor:
         cursor.execute(sql, params)
         data = cursor.fetchone()
     result = data['count_value']
     logging.info("获取数据SQL:%s, 参数:%s, 数据为:%s", sql, params, result)
     return result
Exemple #22
0
def insert_quotes_vals(varieties_name, varieties_id):
    """每天按工作日插入明天竞猜行情信息"""
    today = str(datetime.now())[:10]
    with get_mysql_client() as cr:
        # 查询下个工作日的sql
        sql1 = "select settlement_date from main_contract where settlement_date > '%s' and varieties='%s' order by settlement_date" % (
            today, varieties_name)

        cr.execute(sql1)
        vals = cr.fetchone()
        if vals:
            next_work_day = vals.get('settlement_date')
            # 插入下个工作日
            cr.execute(
                "select id from alert_quotes_record where date = '%s' and varieties_id = '%s' "
                % (next_work_day, varieties_id))
            vals_lst = cr.fetchall()
            if len(vals_lst) == 1:
                return
            elif len(vals_lst) > 1:
                # 删除多余记录
                # delete_lst = []
                for i in range(len(vals_lst) - 1):
                    # delete_lst.append(i)
                    cr.execute(
                        "delete from alert_quotes_record where id = %s " %
                        vals_lst[i]['id'])
            else:
                # 插入新记录
                sql2 = """
                    INSERT INTO `alpha`.`alert_quotes_record`
                                (`price`, `date`, `created_at`, `updated_at`, `varieties_id`)
                         VALUES ('0', '%s', '%s', '%s', '%s')
                """ % (next_work_day, str(datetime.now())[:19],
                       str(datetime.now())[:19], varieties_id)
                cr.execute(sql2)
        return
Exemple #23
0
def alert_history():
    # 第一次提示当日预警汇总
    now_str = datetime.datetime.now().strftime('%Y-%m-%d %H:%M')
    alert_table = T('alert_alert')
    user_table = T('user')
    q = Q(alert_table, result=Result(compile=mysql_compile))
    q = q.tables(q.tables() +
                 user_table).on(alert_table['user_id'] == user_table['id'])
    q = q.fields(alert_table['id'].count().as_('count_value'),
                 user_table['openid'], user_table['id'])
    q = q.group_by(alert_table['user_id'])
    q = q.where(alert_table['created_at'] >= datetime.date.today())
    sql, params = q.select()
    logging.info('sql: %s, params: %s', sql, params)
    with get_mysql_client() as cursor:
        cursor.execute(sql, params)
        result = cursor.fetchall()
    logging.info('result: %s', result)
    for item in result:
        if item['count_value'] and item['openid']:
            q = Q(alert_table, result=Result(compile=mysql_compile))
            q = q.fields(alert_table['body'])
            q = q.where((alert_table['created_at'] >= datetime.date.today())
                        & (alert_table['user_id'] == item['id']))
            q = q.order_by(alert_table['id'])
            q = q.limit(3)
            sql, params = q.select()
            with get_mysql_client() as cursor:
                cursor.execute(sql, params)
                result = cursor.fetchall()
            msg = '\n'.join([d['body'] for d in result])
            url = "%s/#/history" % conf.http.get('host')
            redirect_uri = '%s?url=%s' % (conf.WECHAT_AUTH_URL, url)
            redirect_uri = parse.quote(redirect_uri)
            auth_url = (
                'https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&'
                'redirect_uri={uri}&response_type=code&scope=snsapi_userinfo&'
                'agentid=AGENTID&state=STATE&connect_redirect=1#wechat_redirect'
            ).format(appid=conf.WECHAT_APPID, uri=redirect_uri)
            data = {
                'appId':
                conf.WECHAT_APPID,
                'messages': [{
                    'key': 'first',
                    'tplData': {
                        'value': 'alpha预警'
                    }
                }, {
                    'key': 'keyword1',
                    'tplData': {
                        'value': '行情预警'
                    }
                }, {
                    'key': 'keyword2',
                    'tplData': {
                        'value': msg
                    }
                }, {
                    'key': 'keyword3',
                    'tplData': {
                        'value': now_str
                    }
                }, {
                    'key': 'remark',
                    'tplData': {
                        'value': ''
                    }
                }],
                'openId':
                item['openid'],
                'templateId':
                conf.template_id,
                'url':
                auth_url
            }
            send_alert_history(data)