Exemple #1
0
    def text(self, sp_id, msg, mem, sp_props):
        """关键词应答"""
        content = msg.findtext('./Content')
        msg_time = datetime.fromtimestamp(int(msg.findtext('./CreateTime')))
        self.db.execute('insert into wx_msg (created_at, sent_from, sent_to, content, wx_msg_id)'
                        'values (%s, %s, %s, %s, %s)', msg_time, mem.id, sp_id, content,
                        msg.findtext('./MsgId'))

        mapping = self.db.get('select * from wx_keyword where sp_id = %s and deleted = 0 and key_type = 1 '
                              'and keyword=%s order by id desc limit 1', sp_id, content)
        if not mapping:
            mapping = self.db.get('select * from wx_keyword where sp_id = %s and deleted = 0 and key_type = 2 '
                                  'and keyword like %s order by id desc limit 1', sp_id, '%'+content+'%')
        if mapping:
            if mapping.response_type == 1:  # 文本
                response = Template(wx_response['text']).generate(
                    to_user=mem.wx_id,
                    from_user=sp_props.wx_id,
                    time=int(time.time()),
                    content=mapping.response,
                )
                self.write(response)
                return
            elif mapping.response_type == 2:  # 图文消息
                app_msg = self.db.get('select id, summary, title, cover from wx_app_msg where id=%s', mapping.response)
                response = Template(wx_response['news']).generate(
                    to_user=mem.wx_id,
                    from_user=sp_props.wx_id,
                    time=int(time.time()),
                    items=[PropDict(
                        title=app_msg.title,
                        description=app_msg.summary,
                        picurl=img_url(app_msg.cover),
                        url='http://%s.quanfx.com/app_msg/%s?wx_id=%s' % (sp_id, app_msg.id, mem.wx_id)
                    )],
                )
                self.write(response)
                return
            elif mapping.response_type == 3:
                app_msg_group = self.db.get('select * from wx_app_msg_gp where deleted=0 and id=%s', mapping.response)
                if app_msg_group:
                    app_msgs = self.db.query('select * from wx_app_msg where deleted=0 and id in ('
                                             + app_msg_group.app_msgs + ')')
                    response = Template(wx_response['news']).generate(
                        to_user=mem.wx_id,
                        from_user=sp_props.wx_id,
                        time=int(time.time()),
                        items=[PropDict(
                            title=app_msg.title,
                            description=app_msg.summary,
                            picurl=img_url(app_msg.cover),
                            url='http://%s.quanfx.com/app_msg/%s?wx_id=%s' % (sp_id, app_msg.id, mem.wx_id)
                        ) for app_msg in app_msgs],
                    )
                    self.write(response)
                    return
                self.write('')
                return
            
        self.write('')
Exemple #2
0
    def get(self):
        product = self.db.get('select * from goods_distributor_shop where id = %s', self.get_argument('gds_id'))
        goods = self.db.get('select * from goods where id = %s', product.goods_id)
        goods_shops = get_goods_shops(self, goods.id)
        area_list = get_area_list(self, goods_shops)

        img_paths = json.loads(goods.img_paths) if goods.img_paths else dict()
        img_path = img_url(img_paths['680x425']) if '680x425' in img_paths else img_url(goods.img_path)
        self.render('goods/distributor/wuba/edit.html', goods=goods, product=product,
                    goods_shops=goods_shops, area_list=area_list, img_path=img_path)
Exemple #3
0
    def get(self, goods_id):
        """展示推送页面 """
        goods = self.db.get("select * from goods where id =%s", goods_id)
        goods_shops = get_goods_shops(self, goods_id)
        area_list = get_area_list(self, goods_shops)

        img_paths = json.loads(goods.img_paths) if goods.img_paths else dict()
        img_path = img_url(img_paths['680x425']) if '680x425' in img_paths else img_url(goods.img_path)

        self.render('goods/distributor/wuba/push.html', goods=goods, goods_shops=goods_shops,
                    area_list=area_list, img_path=img_path)
Exemple #4
0
    def get(self):
        sql = """select g.id, g.short_name, g.created_at, g.purchase_price, g.sales_price, g.img_path, g.face_value
                 from goods g join goods_category gc on g.category_id = gc.id
                 where g.off_sale_at > NOW() and g.deleted = 0
                 and g.id not in (select goods_id from ktv_product_goods
                                  union select gpp.goods_id from goods_property gpp where gpp.name = 'hidden' and gpp.value = 1
                                  union select gq.goods_id from goods_property gq where gq.name = 'recommend' and gq.value = 1)
                 and g.id in (select goods_id from goods_distributor_shop where distributor_shop_id in (%s, %s, %s, %s)
                              and deleted = 0 and distributor_goods_id <> '')
              """

        recommend_sql = """select distinct(g.id), g.short_name, g.created_at, g.purchase_price, g.sales_price, g.img_path, g.face_value
                           from goods g
                           join (select gpp.goods_id from goods_property gpp where gpp.name = 'recommend' and gpp.value = 1 and gpp.goods_id not in
                                (select gq.goods_id from goods_property gq where gq.name='hidden' and gq.value = 1)) gp on gp.goods_id = g.id
                           join goods_category gc on g.category_id = gc.id
                           where g.off_sale_at > NOW() and g.deleted = 0 and g.id not in (select goods_id from ktv_product_goods)
                           and g.id in (select goods_id from goods_distributor_shop where distributor_goods_id <> ''
                           and deleted = 0 and distributor_shop_id in (%s, %s, %s, %s))
                        """
        params = [options.shop_id_tmall, options.shop_id_taobao, options.shop_id_jingdong, options.shop_id_yihaodian]

        category = self.get_argument('category', '')

        if category != '':
            sql += 'and gc.parent_id = %s '
            recommend_sql += 'and gc.parent_id = %s '
            params.append(category)

        sql1 = sql
        sql1 += 'order by g.id desc limit 5 '

        sql += 'order by g.sales_count desc limit 10 '

        recommend_sql += 'limit 4'
        recommend_list = self.db.query(recommend_sql, *params)

        goods_list = self.db.query(sql, *params)
        new_goods_list = self.db.query(sql1, *params)

        max_id = self.db.get('select g.id from goods g where g.off_sale_at > NOW() and g.deleted = 0 '
                             'order by id desc limit 1')['id']

        #转化图片地址为图片服务器上的地址
        for goods in goods_list:
            goods.img_path = img_url(goods.img_path)
        for recommend_goods in recommend_list:
            recommend_goods.img_path = img_url(recommend_goods.img_path)
        for new_goods in new_goods_list:
            new_goods.img_path = img_url(new_goods.img_path)

        self.render('index.html', goods_list=goods_list, new_goods_list=new_goods_list, max_id=max_id,
                    category=category, recommend_list=recommend_list)
Exemple #5
0
    def post(self):
        page_number = self.get_argument('page_number')
        max_id = self.get_argument('max_id')
        category = self.get_argument('category', '')

        begin = int(page_number) * 10 + 1

        sql = """select g.id, g.face_value, g.sales_price, g.img_path, g.short_name
                 from goods g left join goods_category gc on g.category_id = gc.id
                 where g.off_sale_at > NOW() and g.deleted = 0 and g.id <= %s and g.id not in
                 (select goods_id from goods_property where name = 'hidden' and value = 1)
                 and g.id in (select goods_id from goods_distributor_shop where distributor_goods_id <> ''
                              and deleted = 0 and distributor_shop_id in (%s, %s, %s, %s))
              """
        params = [
            max_id, options.shop_id_tmall, options.shop_id_taobao,
            options.shop_id_jingdong, options.shop_id_yihaodian
        ]

        if category != '':
            sql += 'and gc.parent_id = %s '
            params.append(category)

        sql += 'order by g.sales_count desc limit %s, 10 '
        params.append(begin)
        goods_list = self.db.query(sql, *params)

        for goods in goods_list:
            goods['img_path'] = img_url(goods.img_path)

        self.set_header('Content-Type', 'application/json; charset=UTF-8')
        self.write(json_dumps(goods_list))
Exemple #6
0
    def get(self):
        sql = """select g.id, g.img_path, g.face_value, g.sales_price, g.short_name
                 from goods g join goods_category gc on g.category_id = gc.id
                 left join (select gpp.goods_id from goods_property gpp where gpp.name = 'hidden' and gpp.value = 1) gp on g.id <> gp.goods_id
                 where g.off_sale_at > NOW() and g.deleted = 0
                 and g.id in (select goods_id from goods_distributor_shop where distributor_goods_id <> ''
                              and deleted = 0 and distributor_shop_id in (%s, %s, %s, %s))
              """
        params = [
            options.shop_id_tmall, options.shop_id_taobao,
            options.shop_id_jingdong, options.shop_id_yihaodian
        ]

        category = self.get_argument('category', '')

        if category != '':
            sql += 'and gc.parent_id = %s '
            params.append(category)

        sql += 'order by g.id desc limit 9 '
        goods_list = self.db.query(sql, *params)

        for goods in goods_list:
            goods.img_path = img_url(goods.img_path)

        self.render('new.html', goods_list=goods_list, category=category)
Exemple #7
0
 def get(self):
     sql = """select am.* from wx_app_msg am, supplier sp
              where am.sp_id=sp.id and sp.id=%s and am.deleted=0 order by am.created_at desc"""
     page = Paginator(self, sql, [self.current_user.supplier_id])
     for item in page.rows:
         item.cover = img_url(item.cover)
     self.render("wx/app_msg/list.html", page=page, img_url=img_url)
Exemple #8
0
    def get(self, goods_id):
        goods = self.db.get('select * from goods where id = %s', goods_id)
        goods.img_path = img_url(goods.img_path)

        distributor_shop_list = self.db.query('select * from goods_distributor_shop where goods_id=%s and deleted=0 '
                                              'order by goods_link_id desc', goods_id)

        shop_order = ((options.shop_id_tmall,       '天猫', 'http://detail.tmall.com/item.htm?id=%s&r=%s'),
                      (options.shop_id_taobao,      '淘宝', 'http://item.taobao.com/item.html?id=%s&r=%s'),
                      (options.shop_id_jingdong,    '京东', 'http://tuan.jd.com/team-%s.html?r=%s'),
                      (options.shop_id_yihaodian,   '一号店', 'http://item.1mall.com/item/%s?r=%s'))

        shop_info = None
        for shop_id, name, url in shop_order:
            found = False
            for shop in distributor_shop_list:
                if shop.distributor_shop_id == shop_id and shop.distributor_goods_id:
                    shop_info = {'name': name, 'url': url % (shop.distributor_goods_id, time.time())}
                    found = True
                    break
            if found:
                break

        supplier_shop_list = self.db.query(
            'select ss.* from supplier_shop ss,goods g where ss.supplier_id=g.supplier_id and g.id=%s and ss.deleted=0 '
            'and (g.all_shop=1 or ss.id in (select supplier_shop_id from goods_supplier_shop where goods_id=%s))',
            goods_id, goods_id)

        category = self.get_argument('category', '')
        self.render('detail.html', goods=goods, shop_info=shop_info, supplier_shop_list=supplier_shop_list,
                    category=category)
Exemple #9
0
def get_goods_info(db, goods_id):
    goods_info = db.get('select * from goods where id = %s', goods_id)

    shops = [item.id for item in db.query('select ss.id from supplier_shop ss, goods_supplier_shop gss '
                                          'where ss.id=gss.supplier_shop_id and gss.goods_id=%s', goods_id)]
    properties = [d.name for d in db.query('select name from goods_property where goods_id = %s', goods_id)]
    return goods_info, shops, properties, img_url(goods_info.img_path)
Exemple #10
0
 def get(self):
     sql = """select am.* from wx_app_msg am, supplier sp
              where am.sp_id=sp.id and sp.id=%s and am.deleted=0 order by am.created_at desc"""
     page = Paginator(self, sql, [self.current_user.supplier_id])
     for item in page.rows:
         item.cover = img_url(item.cover)
     self.render('wx/app_msg/list.html', page=page, img_url=img_url)
Exemple #11
0
    def post(self):
        page_number = self.get_argument('page_number')
        max_id = self.get_argument('max_id')
        category = self.get_argument('category', '')

        begin = int(page_number) * 10 + 1

        sql = """select g.id, g.face_value, g.sales_price, g.img_path, g.short_name
                 from goods g left join goods_category gc on g.category_id = gc.id
                 where g.off_sale_at > NOW() and g.deleted = 0 and g.id <= %s and g.id not in
                 (select goods_id from goods_property where name = 'hidden' and value = 1)
                 and g.id in (select goods_id from goods_distributor_shop where distributor_goods_id <> ''
                              and deleted = 0 and distributor_shop_id in (%s, %s, %s, %s))
              """
        params = [max_id, options.shop_id_tmall, options.shop_id_taobao, options.shop_id_jingdong, options.shop_id_yihaodian]

        if category != '':
            sql += 'and gc.parent_id = %s '
            params.append(category)

        sql += 'order by g.sales_count desc limit %s, 10 '
        params.append(begin)
        goods_list = self.db.query(sql, *params)

        for goods in goods_list:
            goods['img_path'] = img_url(goods.img_path)

        self.set_header('Content-Type', 'application/json; charset=UTF-8')
        self.write(json_dumps(goods_list))
Exemple #12
0
    def post(self):
        if (not self.request.files) or (not 'imgFile' in self.request.files):
            return self.write(json_dumps({'error': 1, 'message': u'请选择文件'}))

        img_file = self.request.files['imgFile'][0]
        o_filename = img_file['filename']

        # 选择上传根目录
        root = self.get_argument('root', '')
        if root:
            upload_root = options['upload_img_path_%s' % root]
        else:
            upload_root = options.upload_img_path

        # 生成文件名
        random_id = int(datetime.now().strftime('%Y%m%d%H%M%S%f')[:19])
        random_id += random.randint(0, 99)
        extension = os.path.splitext(o_filename)[1]
        file_name = '%s%s' % (random_id, extension)

        # 算出目录
        first_dir = random_id >> 20
        second_dir = (~(first_dir << 10)) & (random_id >> 10)
        third_dir = (~((random_id >> 10) << 10)) & random_id
        first_dir %= 1000

        three_level_path = os.path.join(str(first_dir), str(second_dir),
                                        str(third_dir))
        file_dir = os.path.join(upload_root, three_level_path)

        # 如果目录不存在,创建之
        if not os.path.exists(file_dir):
            try:
                os.makedirs(file_dir)
            except OSError:
                return self.write(
                    json_dumps({
                        'error': 1,
                        'message': u'创建目录失败'
                    }))

        # 保存文件
        try:
            with open(os.path.join(file_dir, file_name), 'w') as f:
                f.write(img_file['body'])
        except IOError:
            return self.write(json_dumps({'error': 1, 'message': u'保存文件失败'}))

        # 文件名上加认证信息、水印信息
        masks = ['nw']
        if self.get_argument('source', ''):
            masks.append(self.get_argument('source'))

        if root == 'contract':
            url = contract_url(os.path.join('/', three_level_path, file_name))
        else:
            url = img_url(os.path.join('/', three_level_path, file_name),
                          *masks)
        self.write(json_dumps({'error': 0, 'url': url}))
Exemple #13
0
    def get(self):
        sql = """select id, info from wx_booking_setting where sp_id = %s and deleted = 0 order by op_time desc """
        page = Paginator(self, sql, [self.current_user.supplier_id])
        for item in page.rows:
            item.info = json.loads(item.info)
            item.info['pic'] = img_url(item.info['pic'])

        self.render('wx/book/list.html', page=page)
Exemple #14
0
    def get(self):
        sql = """select id, info from wx_booking_setting where sp_id = %s and deleted = 0 order by op_time desc """
        page = Paginator(self, sql, [self.current_user.supplier_id])
        for item in page.rows:
            item.info = json.loads(item.info)
            item.info['pic'] = img_url(item.info['pic'])

        self.render('wx/book/list.html', page=page)
    def post(self):
        if (not self.request.files) or (not 'imgFile' in self.request.files):
            return self.write(json_dumps({'error': 1, 'message': u'请选择文件'}))

        img_file = self.request.files['imgFile'][0]
        o_filename = img_file['filename']

        # 选择上传根目录
        root = self.get_argument('root', '')
        if root:
            upload_root = options['upload_img_path_%s' % root]
        else:
            upload_root = options.upload_img_path

        # 生成文件名
        random_id = int(datetime.now().strftime('%Y%m%d%H%M%S%f')[:19])
        random_id += random.randint(0, 99)
        extension = os.path.splitext(o_filename)[1]
        file_name = '%s%s' % (random_id, extension)

        # 算出目录
        first_dir = random_id >> 20
        second_dir = (~(first_dir << 10)) & (random_id >> 10)
        third_dir = (~((random_id >> 10) << 10)) & random_id
        first_dir %= 1000

        three_level_path = os.path.join(str(first_dir), str(second_dir), str(third_dir))
        file_dir = os.path.join(upload_root, three_level_path)

        # 如果目录不存在,创建之
        if not os.path.exists(file_dir):
            try:
                os.makedirs(file_dir)
            except OSError:
                return self.write(json_dumps({'error': 1, 'message': u'创建目录失败'}))

        # 保存文件
        try:
            with open(os.path.join(file_dir, file_name), 'w') as f:
                f.write(img_file['body'])
        except IOError:
            return self.write(json_dumps({'error': 1, 'message': u'保存文件失败'}))

        # 文件名上加认证信息、水印信息
        masks = ['nw']
        if self.get_argument('source', ''):
            masks.append(self.get_argument('source'))

        if root == 'contract':
            url = contract_url(os.path.join('/', three_level_path, file_name))
        else:
            url = img_url(os.path.join('/', three_level_path, file_name), *masks)
        self.write(json_dumps({'error': 0, 'url': url}))
Exemple #16
0
    def get(self):
        msg_id = self.get_argument("id", 0)
        msg = self.db.get(
            "select * from wx_app_msg where deleted=0 and sp_id=%s and id=%s", self.current_user.supplier_id, msg_id
        )

        if not msg:
            raise HTTPError(404)

        form = Form(msg, add_schema)
        form.action["value"] = "edit"
        form.img_url["value"] = img_url(msg.cover)

        self.render("wx/app_msg/add.html", form=form)
Exemple #17
0
    def get(self):
        msg_id = self.get_argument('id', 0)
        msg = self.db.get(
            'select * from wx_app_msg where deleted=0 and sp_id=%s and id=%s',
            self.current_user.supplier_id, msg_id)

        if not msg:
            raise HTTPError(404)

        form = Form(msg, add_schema)
        form.action['value'] = 'edit'
        form.img_url['value'] = img_url(msg.cover)

        self.render('wx/app_msg/add.html', form=form)
Exemple #18
0
    def get(self):
        product = self.db.get(
            'select * from goods_distributor_shop where id = %s',
            self.get_argument('gds_id'))
        goods = self.db.get('select * from goods where id = %s',
                            product.goods_id)
        shops = self.db.query(
            'select ss.* from supplier_shop ss,goods g where ss.supplier_id=g.supplier_id and g.id=%s and ss.deleted=0 '
            'and (g.all_shop=1 or ss.id in (select supplier_shop_id from goods_supplier_shop where goods_id=%s))',
            goods.id, goods.id)

        img_paths = json.loads(goods.img_paths) if goods.img_paths else dict()
        img = img_url(
            img_paths['440x293']) if '440x293' in img_paths else img_url(
                goods.img_path)
        self.render('goods/distributor/jd/edit.html',
                    product=product,
                    goods=goods,
                    shops=shops,
                    now=datetime.now(),
                    img=img,
                    jd_logo_url_replace=jd_logo_url_replace,
                    html_font_size_replace=html_font_size_replace)
Exemple #19
0
    def get(self):
        query = self.get_argument('query', '')

        sql = """select id, face_value, sales_price, img_path, short_name from goods
                 where short_name like %s and id not in (select gpp.goods_id from goods_property gpp where gpp.name = "hidden" and gpp.value = 1)
                 order by id desc """

        goods_list = self.db.query(sql, '%' + query + '%')

        for goods in goods_list:
            goods.img_path = img_url(goods.img_path)

        category = self.get_argument('category', '')

        self.render('search.html', goods_list=goods_list, category=category, query=query)
Exemple #20
0
    def get(self, goods_id):
        gid = self.get_argument('id', 0)
        goods = self.db.get('select g.*, gc.name category,s.short_name sp_name from goods_copy g,goods_category gc,'
                            'supplier s where g.category_id= gc.id and s.id=g.supplier_id and g.id =%s', gid)
        shops = self.db.query(
            'select ss.* from supplier_shop ss,goods_copy g where ss.supplier_id=g.supplier_id and g.goods_id=%s and '
            'ss.deleted=0 '
            'and (g.all_shop=1 or ss.id in (select supplier_shop_id from goods_supplier_shop where goods_id=%s) ) ',
            goods_id, goods_id
        )
        if goods.img_path:
            imgurl = img_url(goods.img_path)
        else:
            imgurl = 'http://img.uhcdn.com/images/autumn/default.png'

        self.render('goods/history_detail.html', goods=goods, shops=shops, img_url=imgurl)
Exemple #21
0
    def get(self):
        gp_id = self.get_argument('gp_id', 0)
        group = self.db.get('select * from wx_app_msg_gp where id = %s', gp_id)

        msg_list = map(int, group.app_msgs.split(','))

        msg_sort_set = []
        msg_set = self.db.query('select * from wx_app_msg where id in (%s)' % ','.join(['%s'] * len(msg_list)), *msg_list)

        for msg_id in msg_list:
            for msg_content in msg_set:
                if msg_id == msg_content.id:
                    msg_content.cover = img_url(msg_content.cover)
                    msg_sort_set.append(msg_content)
                    break

        self.render('wx/app_msg/group_detail.html', msg_sort_set=msg_sort_set)
Exemple #22
0
    def get(self):
        query = self.get_argument('query', '')

        sql = """select id, face_value, sales_price, img_path, short_name from goods
                 where short_name like %s and id not in (select gpp.goods_id from goods_property gpp where gpp.name = "hidden" and gpp.value = 1)
                 order by id desc """

        goods_list = self.db.query(sql, '%' + query + '%')

        for goods in goods_list:
            goods.img_path = img_url(goods.img_path)

        category = self.get_argument('category', '')

        self.render('search.html',
                    goods_list=goods_list,
                    category=category,
                    query=query)
Exemple #23
0
    def get(self, goods_id):
        goods = self.db.get('select g.*, gc.name category from goods g, goods_category gc '
                            'where g.category_id = gc.id and g.id =%s and g.supplier_id=%s',
                            goods_id, self.current_user.supplier_id)
        if not goods:
            raise HTTPError(404)

        shops = self.db.query(
            'select ss.* from supplier_shop ss,goods g where ss.supplier_id=g.supplier_id and g.id=%s and ss.deleted=0 '
            'and (g.all_shop=1 or ss.id in (select supplier_shop_id from goods_supplier_shop where goods_id=%s) ) ',
            goods_id, goods_id
        )
        if goods.img_path:
            imgurl = img_url(goods.img_path)
        else:
            imgurl = 'http://img.uhcdn.com/images/autumn/default.png'

        self.render('goods/detail.html', goods=goods, shops=shops, img_url=imgurl)
Exemple #24
0
    def get(self):
        gp_id = self.get_argument('gp_id', 0)
        group = self.db.get('select * from wx_app_msg_gp where id = %s', gp_id)

        msg_list = map(int, group.app_msgs.split(','))

        msg_sort_set = []
        msg_set = self.db.query(
            'select * from wx_app_msg where id in (%s)' %
            ','.join(['%s'] * len(msg_list)), *msg_list)

        for msg_id in msg_list:
            for msg_content in msg_set:
                if msg_id == msg_content.id:
                    msg_content.cover = img_url(msg_content.cover)
                    msg_sort_set.append(msg_content)
                    break

        self.render('wx/app_msg/group_detail.html', msg_sort_set=msg_sort_set)
Exemple #25
0
    def get(self, goods_id):
        goods = self.db.get('select * from goods where id = %s', goods_id)
        goods.img_path = img_url(goods.img_path)

        distributor_shop_list = self.db.query(
            'select * from goods_distributor_shop where goods_id=%s and deleted=0 '
            'order by goods_link_id desc', goods_id)

        shop_order = ((options.shop_id_tmall, '天猫',
                       'http://detail.tmall.com/item.htm?id=%s&r=%s'),
                      (options.shop_id_taobao, '淘宝',
                       'http://item.taobao.com/item.html?id=%s&r=%s'),
                      (options.shop_id_jingdong, '京东',
                       'http://tuan.jd.com/team-%s.html?r=%s'),
                      (options.shop_id_yihaodian, '一号店',
                       'http://item.1mall.com/item/%s?r=%s'))

        shop_info = None
        for shop_id, name, url in shop_order:
            found = False
            for shop in distributor_shop_list:
                if shop.distributor_shop_id == shop_id and shop.distributor_goods_id:
                    shop_info = {
                        'name': name,
                        'url': url % (shop.distributor_goods_id, time.time())
                    }
                    found = True
                    break
            if found:
                break

        supplier_shop_list = self.db.query(
            'select ss.* from supplier_shop ss,goods g where ss.supplier_id=g.supplier_id and g.id=%s and ss.deleted=0 '
            'and (g.all_shop=1 or ss.id in (select supplier_shop_id from goods_supplier_shop where goods_id=%s))',
            goods_id, goods_id)

        category = self.get_argument('category', '')
        self.render('detail.html',
                    goods=goods,
                    shop_info=shop_info,
                    supplier_shop_list=supplier_shop_list,
                    category=category)
Exemple #26
0
    def get(self):
        sql = """select g.id, g.img_path, g.face_value, g.sales_price, g.short_name
                 from goods g join goods_category gc on g.category_id = gc.id
                 left join (select gpp.goods_id from goods_property gpp where gpp.name = 'hidden' and gpp.value = 1) gp on g.id <> gp.goods_id
                 where g.off_sale_at > NOW() and g.deleted = 0
                 and g.id in (select goods_id from goods_distributor_shop where distributor_goods_id <> ''
                              and deleted = 0 and distributor_shop_id in (%s, %s, %s, %s))
              """
        params = [options.shop_id_tmall, options.shop_id_taobao, options.shop_id_jingdong, options.shop_id_yihaodian]

        category = self.get_argument('category', '')

        if category != '':
            sql += 'and gc.parent_id = %s '
            params.append(category)

        sql += 'order by g.id desc limit 9 '
        goods_list = self.db.query(sql, *params)

        for goods in goods_list:
            goods.img_path = img_url(goods.img_path)

        self.render('new.html', goods_list=goods_list, category=category)
Exemple #27
0
    def post(self):
        params = dict([(name, self.get_argument(name).encode('utf-8'))
                       for name in self.request.arguments])

        #判断是否存在对应的商品,如果没有则添加
        goods = self.db.get(
            'select goods_id from ktv_product_goods where product_id = %s and shop_id = %s',
            params['product_id'], params['shop_id'])
        shop = self.db.get('select * from supplier_shop where id = %s',
                           params['shop_id'])
        product = self.db.get('select * from ktv_product where id = %s',
                              params['product_id'])
        taobao_sku_list = build_taobao_sku(self.db, shop.id, product.id)

        props = ''
        if 'attr-name' in self.request.arguments:
            for pid in self.request.arguments['attr-name']:
                if pid in self.request.arguments:
                    for i in self.request.arguments[pid]:
                        props += pid + ':' + i + ';'

        if not goods:
            shop_name = self.db.get(
                'select name from supplier_shop where id = %s',
                params['shop_id'])['name']
            sql = """insert into goods(supplier_id, sales_price, face_value, purchase_price, category_id, name,
                     short_name, sms_name, created_at, expire_at, type, detail, created_by, generate_type, all_shop)
                     values(%s, 1, 1, 1, 1021, %s, %s, %s, NOW(), NOW(), 'E', 'ktv产品', %s, 'GENERATE', 0)"""
            combo = shop_name + product['name']
            param = [
                self.current_user.supplier_id, combo, combo, combo,
                self.current_user.name
            ]
            goods_id = self.db.execute(sql, *param)
            self.db.execute(
                'insert into goods_property(goods_id, name, value) values(%s, "ktv", 1)',
                goods_id)
            self.db.execute(
                'insert into goods_property(goods_id, name, value) values(%s, "hidden", 1)',
                goods_id)
            self.db.execute(
                'insert into ktv_product_goods(shop_id, product_id, goods_id, created_at) '
                'values(%s, %s, %s, NOW())', params['shop_id'],
                params['product_id'], goods_id)
            self.db.execute(
                'insert into goods_supplier_shop(goods_id,supplier_shop_id) values(%s, %s)',
                goods, shop.id)
        else:
            goods_id = goods.goods_id

        # shop_id 如果是银乐迪,指定为31, 否则默认是券生活8的id(13)
        shop_id = {
            629: 31
        }.get(self.current_user.supplier_id, options.shop_id_taobao)
        dg = alloc_distributor_goods(self.db, goods_id, shop_id)
        outer_id = str(dg.goods_link_id)

        sku_properties = []
        sku_quantities = []
        sku_prices = []
        sku_outer_ids = []
        props_set = []

        goods_number = 0
        min_price = 100000
        max_price = 0
        room_type_taobao_info = {
            'MINI': '27426219:6312905',
            'SMALL': '27426219:3442354',
            'MIDDLE': '27426219:6769368',
            'LARGE': '27426219:3374388',
            'DELUXE': '27426219:40867986'
        }

        for taobao_sku in taobao_sku_list:
            sku_properties.append(get_taobao_propertities(taobao_sku))
            sku_quantities.append(taobao_sku.quantity)
            sku_prices.append(taobao_sku.price)
            sku_outer_ids.append(get_taobao_outer_id(taobao_sku))
            for i in sku_quantities:
                goods_number += i
            props_set = remove_repeat(
                props_set, room_type_taobao_info[taobao_sku.room_type])
            if taobao_sku.price < min_price:
                min_price = taobao_sku.price
            if taobao_sku.price > max_price:
                max_price = taobao_sku.price

        props += ';'.join(props_set)
        sku_properties_str = ','.join(sku_properties)
        # sku_properties_str = sku_properties_str.encode('utf-8')
        sku_quantities_str = ','.join([str(i) for i in sku_quantities
                                       ]).encode('utf-8')
        sku_prices_str = ','.join([str(i) for i in sku_prices]).encode('utf-8')
        sku_outer_ids_str = ','.join(sku_outer_ids).encode('utf-8')

        input_pid = []
        input_s = []
        # props += self.get_argument('face_value') + ':' + str(int(max_price) * 1.5) + ';'

        # 增加品牌、省份、城市属性
        props += ';' + params['ktv_brand'] + ':' + params['brand'] + ';'
        ktv_province = self.request.arguments['ktv_provinces']
        for province_item in ktv_province:
            props += params['ktv_province'] + ':' + province_item + ';'

        ktv_cities = self.request.arguments['ktv_cities']
        for city_item in ktv_cities:
            props += params['ktv_city'] + ':' + city_item + ';'

        merchant = params['merchant']

        input_pid.append(self.get_argument('face_value'))
        input_s.append(str(int(int(max_price) * 1.5)))
        input_pids = ','.join(input_pid).encode('utf-8')
        input_str = ','.join(input_s).encode('utf-8')

        app_info = json.loads(self.db.get(
            'select taobao_api_info from distributor_shop where id = %s',
            options.shop_id_taobao).taobao_api_info,
                              object_hook=json_hook)
        goods_push = Taobao('taobao.item.add')
        goods_push.set_app_info(app_info.app_key, app_info.app_secret_key)
        goods_push.set_session(app_info.session)
        publish = self.get_argument('publish', 0)
        image = img_url(params['img_url'])
        # image = 'http://img0.bdstatic.com/img/image/9196a600c338744ebf8e350016bdbf9d72a6059a745.jpg'
        if publish:
            approve_status = 'onsale'
        else:
            approve_status = 'instock'

        args = {
            'num': goods_number,
            'price': min_price,
            'type': 'fixed',
            'image': image,
            'stuff_status': 'news',
            'title': params['title'],
            'location__state': params['location_state'],
            'location__city': params['location_city'],
            'cid': 50644003,
            'approve_status': approve_status,
            'desc': params['desc'],
            'props': props,
            'sku_properties': sku_properties_str,
            'sku_quantities': sku_quantities_str,
            'sku_prices': sku_prices_str,
            'sku_outer_ids': sku_outer_ids_str,
            'input_pids': input_pids,
            'input_str': input_str,
            'outer_id': outer_id,
            'locality_life__merchant': merchant,
            'locality_life__choose_logis': '0',
            'locality_life__expirydate': '30',
            'locality_life__onsale_auto_refund_ratio': 100
        }

        response = yield goods_push(**args)
        goods_push.parse_response(response.body)
        if goods_push.is_ok():
            message = '发布成功'
            self.db.execute(
                'update goods_distributor_shop set status="PENDING", created_by=%s, created_at=NOW(), '
                'distributor_goods_id = %s where goods_id=%s and distributor_shop_id=%s and '
                'goods_link_id=%s', self.current_user.name,
                goods_push.message.item.num_iid, goods_id, shop_id,
                dg.goods_link_id)
        else:
            err_msg = goods_push.error.sub_msg if 'sub_msg' in goods_push.error else goods_push.error.msg
            message = '发布失败:' + err_msg.encode('utf-8')

        self.render('ktv/manage/result.html', message=message)
Exemple #28
0
    def get(self):
        sql = """select g.id, g.short_name, g.created_at, g.purchase_price, g.sales_price, g.img_path, g.face_value
                 from goods g join goods_category gc on g.category_id = gc.id
                 where g.off_sale_at > NOW() and g.deleted = 0
                 and g.id not in (select goods_id from ktv_product_goods
                                  union select gpp.goods_id from goods_property gpp where gpp.name = 'hidden' and gpp.value = 1
                                  union select gq.goods_id from goods_property gq where gq.name = 'recommend' and gq.value = 1)
                 and g.id in (select goods_id from goods_distributor_shop where distributor_shop_id in (%s, %s, %s, %s)
                              and deleted = 0 and distributor_goods_id <> '')
              """

        recommend_sql = """select distinct(g.id), g.short_name, g.created_at, g.purchase_price, g.sales_price, g.img_path, g.face_value
                           from goods g
                           join (select gpp.goods_id from goods_property gpp where gpp.name = 'recommend' and gpp.value = 1 and gpp.goods_id not in
                                (select gq.goods_id from goods_property gq where gq.name='hidden' and gq.value = 1)) gp on gp.goods_id = g.id
                           join goods_category gc on g.category_id = gc.id
                           where g.off_sale_at > NOW() and g.deleted = 0 and g.id not in (select goods_id from ktv_product_goods)
                           and g.id in (select goods_id from goods_distributor_shop where distributor_goods_id <> ''
                           and deleted = 0 and distributor_shop_id in (%s, %s, %s, %s))
                        """
        params = [
            options.shop_id_tmall, options.shop_id_taobao,
            options.shop_id_jingdong, options.shop_id_yihaodian
        ]

        category = self.get_argument('category', '')

        if category != '':
            sql += 'and gc.parent_id = %s '
            recommend_sql += 'and gc.parent_id = %s '
            params.append(category)

        sql1 = sql
        sql1 += 'order by g.id desc limit 5 '

        sql += 'order by g.sales_count desc limit 10 '

        recommend_sql += 'limit 4'
        recommend_list = self.db.query(recommend_sql, *params)

        goods_list = self.db.query(sql, *params)
        new_goods_list = self.db.query(sql1, *params)

        max_id = self.db.get(
            'select g.id from goods g where g.off_sale_at > NOW() and g.deleted = 0 '
            'order by id desc limit 1')['id']

        #转化图片地址为图片服务器上的地址
        for goods in goods_list:
            goods.img_path = img_url(goods.img_path)
        for recommend_goods in recommend_list:
            recommend_goods.img_path = img_url(recommend_goods.img_path)
        for new_goods in new_goods_list:
            new_goods.img_path = img_url(new_goods.img_path)

        self.render('index.html',
                    goods_list=goods_list,
                    new_goods_list=new_goods_list,
                    max_id=max_id,
                    category=category,
                    recommend_list=recommend_list)
Exemple #29
0
    def get(self, goods_id):
        goods = self.db.get('select * from goods where id = %s', goods_id)

        goods_area_ids = [
            item.area_id for item in self.db.query(
                'select ss.* from supplier_shop ss,goods g where ss.supplier_id=g.supplier_id and g.id=%s and ss.deleted=0 '
                'and (g.all_shop=1 or ss.id in (select supplier_shop_id from goods_supplier_shop where goods_id=%s))',
                goods_id, goods_id)
        ]

        area_list = self.db.query(
            'select area_area.name area, area_district.name district, area_city.name city from '
            '(select * from area where type = "AREA") as area_area, '
            '(select * from area where type="DISTRICT") as area_district, '
            '(select * from area where type="CITY") as area_city '
            'where area_district.parent_id = area_city.id '
            'and area_area.parent_id = area_district.id and area_area.id in (%s)'
            % ','.join(['%s'] * len(goods_area_ids)), *
            goods_area_ids) if goods_area_ids else []

        shop_id = self.get_argument('shop_id')
        shop = self.db.get(
            'select taobao_seller_id, taobao_api_info from distributor_shop where id=%s',
            shop_id)
        api_info = json.loads(shop.taobao_api_info, object_hook=json_hook)

        jd = Jingdong('queryCategoryList', str(shop.taobao_seller_id),
                      api_info.vender_key, api_info.secret_key)
        parent_id = self.get_argument('id', '0')
        response = yield jd(category_id=parent_id)
        jd.parse_response(response.body)
        result = []
        if jd.is_ok():
            for category in jd.message.findall('Categories/Category'):
                result.append({
                    'id': category.findtext('Id'),
                    'name': category.findtext('Name'),
                })

        jd_map_city = Jingdong('queryCityList', str(shop.taobao_seller_id),
                               api_info.vender_key, api_info.secret_key)
        map_response = yield jd_map_city()
        jd_map_city.parse_response(map_response.body)
        map_result = []
        if jd_map_city.is_ok():
            for area in jd_map_city.message.findall('Cities/City'):
                map_result.append({
                    'id': area.findtext('Id'),
                    'name': area.findtext('Name'),
                })
        # 主图
        img_paths = json.loads(goods.img_paths) if goods.img_paths else dict()
        img = img_url(
            img_paths['440x293']) if '440x293' in img_paths else img_url(
                goods.img_path)

        self.render('goods/distributor/jd/push.html',
                    goods=goods,
                    result=result,
                    map_result=map_result,
                    area_list=area_list,
                    img=img,
                    jd_logo_url_replace=jd_logo_url_replace,
                    html_font_size_replace=html_font_size_replace,
                    now=datetime.now(),
                    shop_id=shop_id)
Exemple #30
0
    def event(self, sp_id, msg, mem, sp_props):
        msg_time = datetime.fromtimestamp(int(msg.findtext('./CreateTime')))
        event = msg.findtext('./Event').lower()
        wx_id = mem.wx_id
        # 取消订阅,更新数据库
        if event == 'unsubscribe':
            logging.info('user %s un-sub', wx_id)
            self.db.execute('update member set wx_unfollow_at=%s where id=%s',
                            msg_time, mem.id)  # 更新取消时间
            self.write('')  # 退订,什么都不返回
            return
        if event == 'subscribe':
            logging.info('user %s subscribe', wx_id)
            # 查是否存在用户
            if mem:
                # 如果是认证的服务号,去抓取一下用户信息
                if sp_props.wx_type == 'service' and sp_props.wx_verified == '1':
                    app_id = sp_props.app_id
                    app_secret = sp_props.app_secret
                    info = Weixin(method='user/info',
                                  db=self.db,
                                  sp_id=sp_id,
                                  body='')
                    info.set_app_info(app_id, app_secret)
                    response = info.sync_fetch(openid=wx_id, lang='zh_CN')
                    info.parse_response(response)
                    if info.is_ok():
                        nickname = info.message.nickname
                        # 暂时数据库未升级至可以存储emoji字符,故使用以下代码,升级数据库后可删除
                        import re
                        try:
                            # UCS-4
                            highpoints = re.compile(u'[\U00010000-\U0010ffff]')
                        except re.error:
                            # UCS-2
                            highpoints = re.compile(
                                u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
                        nickname = highpoints.sub(u'', nickname)
                        sex = {0: '未知', 1: '男', 2: '女'}.get(info.message.sex)
                        follow_at = datetime.fromtimestamp(
                            info.message.subscribe_time)
                        head_img = info.message.headimgurl
                        self.db.execute(
                            'update member set wx_name = %s, gender = %s, last_active=NOW(), max_msg_id=0,'
                            'head_img = %s, wx_follow_at = %s, country = %s, province = %s, city = %s '
                            'where wx_id = %s and sp_id = %s', nickname, sex,
                            head_img, follow_at, info.message.country,
                            info.message.province, info.message.city, wx_id,
                            sp_id)
                        logging.info('user %s fetch info successfully', wx_id)
                    else:
                        self.db.execute(
                            'update member set wx_follow_at=%s, last_active=NOW(), '
                            'max_msg_id=0 where id=%s', msg_time, mem.id)
                        logging.info('user %s fetch info failed', wx_id)
                else:
                    self.db.execute(
                        'update member set wx_follow_at=%s, last_active=NOW(), '
                        'max_msg_id=0 where id=%s', msg_time, mem.id)

            # 推送新关注消息
            app_msg = self.db.get(
                'select wam.* '
                'from supplier_property sp join wx_app_msg wam on sp.value = wam.id '
                'where sp.sp_id = %s and name="wx_sub_msg" ', mem.sp_id)
            if app_msg:
                response = Template(wx_response['news']).generate(
                    to_user=mem.wx_id,
                    from_user=sp_props.wx_id,
                    time=int(time.time()),
                    items=[
                        PropDict(
                            title=app_msg.title,
                            description=app_msg.summary,
                            picurl=img_url(app_msg.cover),
                            url='http://%s.quanfx.com/app_msg/%s?wx_id=%s' %
                            (sp_id, app_msg.id, mem.wx_id))
                    ],
                )
                self.write(response)
                return
            else:
                self.write('')
                return
        if event == 'click':
            event_key = msg.findtext('./EventKey')
            action_type, action = event_key.split(':', 1)
            if action_type == 'website':
                cover = self.db.get(
                    'select * from supplier_property where sp_id=%s and name="wx_site_cover"',
                    sp_id)
                cover = json.loads(cover.value, object_hook=json_hook)
                response = Template(wx_response['news']).generate(
                    to_user=mem.wx_id,
                    from_user=sp_props.wx_id,
                    time=int(time.time()),
                    items=[
                        PropDict(title=cover.title,
                                 description=cover.desc,
                                 picurl=img_url(cover.pic),
                                 url='http://%s.quanfx.com/?wx_id=%s' %
                                 (sp_id, mem.wx_id))
                    ],
                )
                self.write(response)
                return
            elif action_type == 'app_msg':
                app_msg = self.db.get(
                    'select * from wx_app_msg where id=%s and deleted=0',
                    action)
                if app_msg:
                    response = Template(wx_response['news']).generate(
                        to_user=mem.wx_id,
                        from_user=sp_props.wx_id,
                        time=int(time.time()),
                        items=[
                            PropDict(
                                title=app_msg.title,
                                description=app_msg.summary,
                                picurl=img_url(app_msg.cover),
                                url='http://%s.quanfx.com/app_msg/%s?wx_id=%s'
                                % (sp_id, app_msg.id, mem.wx_id))
                        ],
                    )
                    self.write(response)
                    return
                else:
                    self.write('')
                    return
            elif action_type == 'app_msg_group':
                app_msg_group = self.db.get(
                    'select * from wx_app_msg_gp where deleted=0 and id=%s',
                    action)
                if app_msg_group:
                    app_msgs = self.db.query(
                        'select * from wx_app_msg where deleted=0 and id in ('
                        + app_msg_group.app_msgs + ')')
                    response = Template(wx_response['news']).generate(
                        to_user=mem.wx_id,
                        from_user=sp_props.wx_id,
                        time=int(time.time()),
                        items=[
                            PropDict(
                                title=app_msg.title,
                                description=app_msg.summary,
                                picurl=img_url(app_msg.cover),
                                url='http://%s.quanfx.com/app_msg/%s?wx_id=%s'
                                % (sp_id, app_msg.id, mem.wx_id))
                            for app_msg in app_msgs
                        ],
                    )
                    self.write(response)
                    return
                self.write('')
                return
            elif action_type == 'text':
                sms = self.db.get(
                    'select * from wx_menu where action like %s and sp_id = %s limit 1',
                    '%' + action + '%', sp_id)
                if sms:
                    response = Template(wx_response['text']).generate(
                        to_user=mem.wx_id,
                        from_user=sp_props.wx_id,
                        time=int(time.time()),
                        content=sms.action[12:])
                    self.write(response)
                    return
                self.write('')
                return
            elif action_type == 'member':
                # 取会员卡封面
                cover = self.db.get(
                    'select * from supplier_property where sp_id=%s and name="wx_mem_cover"',
                    sp_id)
                if not cover:
                    # 没有会员卡封面,取官网封面
                    cover = self.db.get(
                        'select * from supplier_property where sp_id=%s and name="wx_site_cover"',
                        sp_id)
                cover = json.loads(cover.value, object_hook=json_hook)
                response = Template(wx_response['news']).generate(
                    to_user=mem.wx_id,
                    from_user=sp_props.wx_id,
                    time=int(time.time()),
                    items=[
                        PropDict(title=cover.title,
                                 description=cover.desc,
                                 picurl=img_url(cover.pic),
                                 url='http://%s.quanfx.com/member?wx_id=%s' %
                                 (sp_id, mem.wx_id))
                    ],
                )
                self.write(response)
                return
            elif action_type == 'book':
                cover = self.db.get(
                    'select * from wx_booking_setting where sp_id=%s and id = %s',
                    sp_id, action)
                logging.info(cover)
                if cover:
                    info = json.loads(cover.info, object_hook=json_hook)
                    response = Template(wx_response['news']).generate(
                        to_user=mem.wx_id,
                        from_user=sp_props.wx_id,
                        time=int(time.time()),
                        items=[
                            PropDict(
                                title=info.title,
                                description=info.desc,
                                picurl=img_url(info.pic),
                                url='http://%s.quanfx.com/book/%s?wx_id=%s' %
                                (sp_id, cover.id, mem.wx_id))
                        ],
                    )
                    self.write(response)
                    return
                else:
                    self.write('')
                    return
            elif action_type == 'mall':
                cover = self.db.get(
                    'select * from supplier_property where sp_id=%s and name="wx_mall_cover"',
                    sp_id)
                if not cover:
                    # 没有商城封面,取官网封面
                    cover = self.db.get(
                        'select * from supplier_property where sp_id=%s and name="wx_site_cover"',
                        sp_id)
                cover = json.loads(cover.value, object_hook=json_hook)
                response = Template(wx_response['news']).generate(
                    to_user=mem.wx_id,
                    from_user=sp_props.wx_id,
                    time=int(time.time()),
                    items=[
                        PropDict(
                            title=cover.title,
                            description=cover.desc,
                            picurl=img_url(cover.pic),
                            url='http://%s.quanfx.com/mall/goods?wx_id=%s' %
                            (sp_id, mem.wx_id))
                    ],
                )
                self.write(response)
                return
            elif action_type == 'activity':
                cover = self.db.get(
                    'select * from supplier_property where sp_id = %s and name="wx_activity_cover"',
                    sp_id)
                if not cover:
                    # 没有商城封面,取官网封面
                    cover = self.db.get(
                        'select * from supplier_property where sp_id=%s and name="wx_site_cover"',
                        sp_id)
                cover = json.loads(cover.value, object_hook=json_hook)
                response = Template(wx_response['news']).generate(
                    to_user=mem.wx_id,
                    from_user=sp_props.wx_id,
                    time=int(time.time()),
                    items=[
                        PropDict(
                            title=cover.title,
                            description=cover.desc,
                            picurl=img_url(cover.pic),
                            url='http://%s.quanfx.com/activity/list?wx_id=%s' %
                            (sp_id, mem.wx_id))
                    ],
                )
                self.write(response)
                return
Exemple #31
0
    def text(self, sp_id, msg, mem, sp_props):
        """关键词应答"""
        content = msg.findtext('./Content')
        msg_time = datetime.fromtimestamp(int(msg.findtext('./CreateTime')))
        self.db.execute(
            'insert into wx_msg (created_at, sent_from, sent_to, content, wx_msg_id)'
            'values (%s, %s, %s, %s, %s)', msg_time, mem.id, sp_id, content,
            msg.findtext('./MsgId'))

        mapping = self.db.get(
            'select * from wx_keyword where sp_id = %s and deleted = 0 and key_type = 1 '
            'and keyword=%s order by id desc limit 1', sp_id, content)
        if not mapping:
            mapping = self.db.get(
                'select * from wx_keyword where sp_id = %s and deleted = 0 and key_type = 2 '
                'and keyword like %s order by id desc limit 1', sp_id,
                '%' + content + '%')
        if mapping:
            if mapping.response_type == 1:  # 文本
                response = Template(wx_response['text']).generate(
                    to_user=mem.wx_id,
                    from_user=sp_props.wx_id,
                    time=int(time.time()),
                    content=mapping.response,
                )
                self.write(response)
                return
            elif mapping.response_type == 2:  # 图文消息
                app_msg = self.db.get(
                    'select id, summary, title, cover from wx_app_msg where id=%s',
                    mapping.response)
                response = Template(wx_response['news']).generate(
                    to_user=mem.wx_id,
                    from_user=sp_props.wx_id,
                    time=int(time.time()),
                    items=[
                        PropDict(
                            title=app_msg.title,
                            description=app_msg.summary,
                            picurl=img_url(app_msg.cover),
                            url='http://%s.quanfx.com/app_msg/%s?wx_id=%s' %
                            (sp_id, app_msg.id, mem.wx_id))
                    ],
                )
                self.write(response)
                return
            elif mapping.response_type == 3:
                app_msg_group = self.db.get(
                    'select * from wx_app_msg_gp where deleted=0 and id=%s',
                    mapping.response)
                if app_msg_group:
                    app_msgs = self.db.query(
                        'select * from wx_app_msg where deleted=0 and id in ('
                        + app_msg_group.app_msgs + ')')
                    response = Template(wx_response['news']).generate(
                        to_user=mem.wx_id,
                        from_user=sp_props.wx_id,
                        time=int(time.time()),
                        items=[
                            PropDict(
                                title=app_msg.title,
                                description=app_msg.summary,
                                picurl=img_url(app_msg.cover),
                                url='http://%s.quanfx.com/app_msg/%s?wx_id=%s'
                                % (sp_id, app_msg.id, mem.wx_id))
                            for app_msg in app_msgs
                        ],
                    )
                    self.write(response)
                    return
                self.write('')
                return

        self.write('')
Exemple #32
0
    def event(self, sp_id, msg, mem, sp_props):
        msg_time = datetime.fromtimestamp(int(msg.findtext('./CreateTime')))
        event = msg.findtext('./Event').lower()
        wx_id = mem.wx_id
        # 取消订阅,更新数据库
        if event == 'unsubscribe':
            logging.info('user %s un-sub', wx_id)
            self.db.execute('update member set wx_unfollow_at=%s where id=%s', msg_time, mem.id)  # 更新取消时间
            self.write('')  # 退订,什么都不返回
            return
        if event == 'subscribe':
            logging.info('user %s subscribe', wx_id)
            # 查是否存在用户
            if mem:
                # 如果是认证的服务号,去抓取一下用户信息
                if sp_props.wx_type == 'service' and sp_props.wx_verified == '1':
                    app_id = sp_props.app_id
                    app_secret = sp_props.app_secret
                    info = Weixin(method='user/info', db=self.db, sp_id=sp_id, body='')
                    info.set_app_info(app_id, app_secret)
                    response = info.sync_fetch(openid=wx_id, lang='zh_CN')
                    info.parse_response(response)
                    if info.is_ok():
                        nickname = info.message.nickname
                        # 暂时数据库未升级至可以存储emoji字符,故使用以下代码,升级数据库后可删除
                        import re
                        try:
                            # UCS-4
                            highpoints = re.compile(u'[\U00010000-\U0010ffff]')
                        except re.error:
                            # UCS-2
                            highpoints = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
                        nickname = highpoints.sub(u'', nickname)
                        sex = {0: '未知', 1: '男', 2: '女'}.get(info.message.sex)
                        follow_at = datetime.fromtimestamp(info.message.subscribe_time)
                        head_img = info.message.headimgurl
                        self.db.execute('update member set wx_name = %s, gender = %s, last_active=NOW(), max_msg_id=0,'
                                        'head_img = %s, wx_follow_at = %s, country = %s, province = %s, city = %s '
                                        'where wx_id = %s and sp_id = %s',
                                        nickname, sex, head_img, follow_at, info.message.country,
                                        info.message.province, info.message.city,
                                        wx_id, sp_id)
                        logging.info('user %s fetch info successfully', wx_id)
                    else:
                        self.db.execute('update member set wx_follow_at=%s, last_active=NOW(), '
                                        'max_msg_id=0 where id=%s', msg_time, mem.id)
                        logging.info('user %s fetch info failed', wx_id)
                else:
                    self.db.execute('update member set wx_follow_at=%s, last_active=NOW(), '
                                    'max_msg_id=0 where id=%s', msg_time, mem.id)

            # 推送新关注消息
            app_msg = self.db.get('select wam.* '
                                  'from supplier_property sp join wx_app_msg wam on sp.value = wam.id '
                                  'where sp.sp_id = %s and name="wx_sub_msg" ', mem.sp_id)
            if app_msg:
                response = Template(wx_response['news']).generate(
                    to_user=mem.wx_id,
                    from_user=sp_props.wx_id,
                    time=int(time.time()),
                    items=[PropDict(
                        title=app_msg.title,
                        description=app_msg.summary,
                        picurl=img_url(app_msg.cover),
                        url='http://%s.quanfx.com/app_msg/%s?wx_id=%s' % (sp_id, app_msg.id, mem.wx_id)
                    )],
                )
                self.write(response)
                return
            else:
                self.write('')
                return
        if event == 'click':
            event_key = msg.findtext('./EventKey')
            action_type, action = event_key.split(':', 1)
            if action_type == 'website':
                cover = self.db.get('select * from supplier_property where sp_id=%s and name="wx_site_cover"',  sp_id)
                cover = json.loads(cover.value, object_hook=json_hook)
                response = Template(wx_response['news']).generate(
                    to_user=mem.wx_id,
                    from_user=sp_props.wx_id,
                    time=int(time.time()),
                    items=[PropDict(
                        title=cover.title,
                        description=cover.desc,
                        picurl=img_url(cover.pic),
                        url='http://%s.quanfx.com/?wx_id=%s' % (sp_id, mem.wx_id)
                    )],
                )
                self.write(response)
                return
            elif action_type == 'app_msg':
                app_msg = self.db.get('select * from wx_app_msg where id=%s and deleted=0', action)
                if app_msg:
                    response = Template(wx_response['news']).generate(
                        to_user=mem.wx_id,
                        from_user=sp_props.wx_id,
                        time=int(time.time()),
                        items=[PropDict(
                            title=app_msg.title,
                            description=app_msg.summary,
                            picurl=img_url(app_msg.cover),
                            url='http://%s.quanfx.com/app_msg/%s?wx_id=%s' % (sp_id, app_msg.id, mem.wx_id)
                        )],
                    )
                    self.write(response)
                    return
                else:
                    self.write('')
                    return
            elif action_type == 'app_msg_group':
                app_msg_group = self.db.get('select * from wx_app_msg_gp where deleted=0 and id=%s', action)
                if app_msg_group:
                    app_msgs = self.db.query('select * from wx_app_msg where deleted=0 and id in ('
                                             + app_msg_group.app_msgs + ')')
                    response = Template(wx_response['news']).generate(
                        to_user=mem.wx_id,
                        from_user=sp_props.wx_id,
                        time=int(time.time()),
                        items=[PropDict(
                            title=app_msg.title,
                            description=app_msg.summary,
                            picurl=img_url(app_msg.cover),
                            url='http://%s.quanfx.com/app_msg/%s?wx_id=%s' % (sp_id, app_msg.id, mem.wx_id)
                        ) for app_msg in app_msgs],
                    )
                    self.write(response)
                    return
                self.write('')
                return
            elif action_type == 'text':
                sms = self.db.get('select * from wx_menu where action like %s and sp_id = %s limit 1', '%' + action + '%', sp_id)
                if sms:
                    response = Template(wx_response['text']).generate(
                        to_user=mem.wx_id,
                        from_user=sp_props.wx_id,
                        time=int(time.time()),
                        content=sms.action[12:]
                    )
                    self.write(response)
                    return
                self.write('')
                return
            elif action_type == 'member':
                # 取会员卡封面
                cover = self.db.get('select * from supplier_property where sp_id=%s and name="wx_mem_cover"',  sp_id)
                if not cover:
                    # 没有会员卡封面,取官网封面
                    cover = self.db.get('select * from supplier_property where sp_id=%s and name="wx_site_cover"',  sp_id)
                cover = json.loads(cover.value, object_hook=json_hook)
                response = Template(wx_response['news']).generate(
                    to_user=mem.wx_id,
                    from_user=sp_props.wx_id,
                    time=int(time.time()),
                    items=[PropDict(
                        title=cover.title,
                        description=cover.desc,
                        picurl=img_url(cover.pic),
                        url='http://%s.quanfx.com/member?wx_id=%s' % (sp_id, mem.wx_id)
                    )],
                )
                self.write(response)
                return
            elif action_type == 'book':
                cover = self.db.get('select * from wx_booking_setting where sp_id=%s and id = %s', sp_id, action)
                logging.info(cover)
                if cover:
                    info = json.loads(cover.info, object_hook=json_hook)
                    response = Template(wx_response['news']).generate(
                        to_user=mem.wx_id,
                        from_user=sp_props.wx_id,
                        time=int(time.time()),
                        items=[PropDict(
                            title=info.title,
                            description=info.desc,
                            picurl=img_url(info.pic),
                            url='http://%s.quanfx.com/book/%s?wx_id=%s' % (sp_id, cover.id, mem.wx_id)
                        )],
                    )
                    self.write(response)
                    return
                else:
                    self.write('')
                    return
            elif action_type == 'mall':
                cover = self.db.get('select * from supplier_property where sp_id=%s and name="wx_mall_cover"', sp_id)
                if not cover:
                    # 没有商城封面,取官网封面
                    cover = self.db.get('select * from supplier_property where sp_id=%s and name="wx_site_cover"', sp_id)
                cover = json.loads(cover.value, object_hook=json_hook)
                response = Template(wx_response['news']).generate(
                    to_user=mem.wx_id,
                    from_user=sp_props.wx_id,
                    time=int(time.time()),
                    items=[PropDict(
                        title=cover.title,
                        description=cover.desc,
                        picurl=img_url(cover.pic),
                        url='http://%s.quanfx.com/mall/goods?wx_id=%s' % (sp_id, mem.wx_id)
                    )],
                )
                self.write(response)
                return
            elif action_type == 'activity':
                cover = self.db.get('select * from supplier_property where sp_id = %s and name="wx_activity_cover"',
                                    sp_id)
                if not cover:
                    # 没有商城封面,取官网封面
                    cover = self.db.get('select * from supplier_property where sp_id=%s and name="wx_site_cover"', sp_id)
                cover = json.loads(cover.value, object_hook=json_hook)
                response = Template(wx_response['news']).generate(
                    to_user=mem.wx_id,
                    from_user=sp_props.wx_id,
                    time=int(time.time()),
                    items=[PropDict(
                        title=cover.title,
                        description=cover.desc,
                        picurl=img_url(cover.pic),
                        url='http://%s.quanfx.com/activity/list?wx_id=%s' % (sp_id, mem.wx_id)
                    )],
                )
                self.write(response)
                return
Exemple #33
0
    def post(self):
        params = dict([(name, self.get_argument(name).encode('utf-8')) for name in self.request.arguments])

        #判断是否存在对应的商品,如果没有则添加
        goods = self.db.get('select goods_id from ktv_product_goods where product_id = %s and shop_id = %s',
                            params['product_id'], params['shop_id'])
        shop = self.db.get('select * from supplier_shop where id = %s', params['shop_id'])
        product = self.db.get('select * from ktv_product where id = %s', params['product_id'])
        taobao_sku_list = build_taobao_sku(self.db, shop.id, product.id)

        props = ''
        if 'attr-name' in self.request.arguments:
            for pid in self.request.arguments['attr-name']:
                if pid in self.request.arguments:
                    for i in self.request.arguments[pid]:
                        props += pid + ':' + i + ';'

        if not goods:
            shop_name = self.db.get('select name from supplier_shop where id = %s', params['shop_id'])['name']
            sql = """insert into goods(supplier_id, sales_price, face_value, purchase_price, category_id, name,
                     short_name, sms_name, created_at, expire_at, type, detail, created_by, generate_type, all_shop)
                     values(%s, 1, 1, 1, 1021, %s, %s, %s, NOW(), NOW(), 'E', 'ktv产品', %s, 'GENERATE', 0)"""
            combo = shop_name + product['name']
            param = [self.current_user.supplier_id, combo, combo, combo, self.current_user.name]
            goods_id = self.db.execute(sql, *param)
            self.db.execute('insert into goods_property(goods_id, name, value) values(%s, "ktv", 1)', goods_id)
            self.db.execute('insert into goods_property(goods_id, name, value) values(%s, "hidden", 1)', goods_id)
            self.db.execute('insert into ktv_product_goods(shop_id, product_id, goods_id, created_at) '
                            'values(%s, %s, %s, NOW())', params['shop_id'], params['product_id'], goods_id)
            self.db.execute('insert into goods_supplier_shop(goods_id,supplier_shop_id) values(%s, %s)', goods, shop.id)
        else:
            goods_id = goods.goods_id

        # shop_id 如果是银乐迪,指定为31, 否则默认是券生活8的id(13)
        shop_id = {629: 31}.get(self.current_user.supplier_id, options.shop_id_taobao)
        dg = alloc_distributor_goods(self.db, goods_id, shop_id)
        outer_id = str(dg.goods_link_id)

        sku_properties = []
        sku_quantities = []
        sku_prices = []
        sku_outer_ids = []
        props_set = []

        goods_number = 0
        min_price = 100000
        max_price = 0
        room_type_taobao_info = {'MINI': '27426219:6312905', 'SMALL': '27426219:3442354', 'MIDDLE': '27426219:6769368',
                                 'LARGE': '27426219:3374388', 'DELUXE': '27426219:40867986'}

        for taobao_sku in taobao_sku_list:
            sku_properties.append(get_taobao_propertities(taobao_sku))
            sku_quantities.append(taobao_sku.quantity)
            sku_prices.append(taobao_sku.price)
            sku_outer_ids.append(get_taobao_outer_id(taobao_sku))
            for i in sku_quantities:
                goods_number += i
            props_set = remove_repeat(props_set, room_type_taobao_info[taobao_sku.room_type])
            if taobao_sku.price < min_price:
                min_price = taobao_sku.price
            if taobao_sku.price > max_price:
                max_price = taobao_sku.price

        props += ';'.join(props_set)
        sku_properties_str = ','.join(sku_properties)
        # sku_properties_str = sku_properties_str.encode('utf-8')
        sku_quantities_str = ','.join([str(i) for i in sku_quantities]).encode('utf-8')
        sku_prices_str = ','.join([str(i) for i in sku_prices]).encode('utf-8')
        sku_outer_ids_str = ','.join(sku_outer_ids).encode('utf-8')

        input_pid = []
        input_s = []
        # props += self.get_argument('face_value') + ':' + str(int(max_price) * 1.5) + ';'

        # 增加品牌、省份、城市属性
        props += ';' + params['ktv_brand'] + ':' + params['brand'] + ';'
        ktv_province = self.request.arguments['ktv_provinces']
        for province_item in ktv_province:
            props += params['ktv_province'] + ':' + province_item + ';'

        ktv_cities = self.request.arguments['ktv_cities']
        for city_item in ktv_cities:
            props += params['ktv_city'] + ':' + city_item + ';'

        merchant = params['merchant']

        input_pid.append(self.get_argument('face_value'))
        input_s.append(str(int(int(max_price) * 1.5)))
        input_pids = ','.join(input_pid).encode('utf-8')
        input_str = ','.join(input_s).encode('utf-8')

        app_info = json.loads(self.db.get('select taobao_api_info from distributor_shop where id = %s',
                              options.shop_id_taobao).taobao_api_info, object_hook=json_hook)
        goods_push = Taobao('taobao.item.add')
        goods_push.set_app_info(app_info.app_key, app_info.app_secret_key)
        goods_push.set_session(app_info.session)
        publish = self.get_argument('publish', 0)
        image = img_url(params['img_url'])
        # image = 'http://img0.bdstatic.com/img/image/9196a600c338744ebf8e350016bdbf9d72a6059a745.jpg'
        if publish:
            approve_status = 'onsale'
        else:
            approve_status = 'instock'

        args = {
            'num': goods_number,
            'price': min_price,
            'type': 'fixed',
            'image': image,
            'stuff_status': 'news',
            'title': params['title'],
            'location__state': params['location_state'],
            'location__city': params['location_city'],
            'cid': 50644003,
            'approve_status': approve_status,
            'desc': params['desc'],
            'props': props,
            'sku_properties': sku_properties_str,
            'sku_quantities': sku_quantities_str,
            'sku_prices': sku_prices_str,
            'sku_outer_ids': sku_outer_ids_str,
            'input_pids': input_pids,
            'input_str': input_str,
            'outer_id': outer_id,
            'locality_life__merchant': merchant,
            'locality_life__choose_logis': '0',
            'locality_life__expirydate': '30',
            'locality_life__onsale_auto_refund_ratio': 100
        }

        response = yield goods_push(**args)
        goods_push.parse_response(response.body)
        if goods_push.is_ok():
            message = '发布成功'
            self.db.execute('update goods_distributor_shop set status="PENDING", created_by=%s, created_at=NOW(), '
                            'distributor_goods_id = %s where goods_id=%s and distributor_shop_id=%s and '
                            'goods_link_id=%s', self.current_user.name, goods_push.message.item.num_iid, goods_id,
                            shop_id, dg.goods_link_id)
        else:
            err_msg = goods_push.error.sub_msg if 'sub_msg' in goods_push.error else goods_push.error.msg
            message = '发布失败:' + err_msg.encode('utf-8')

        self.render('ktv/manage/result.html', message=message)