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('')
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)
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)
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)
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))
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)
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)
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)
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)
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)
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))
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}))
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}))
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
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('')
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
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)