def put_queue_list(self, queue_name=None, message_list=None, print_info=True, exchange=''): '''提交异常至队列列表''' if not queue_name and not exchange: return None try: if not message_list: return None if isinstance(message_list, dict): message_list = [message_list] self.declare(queue_name, exchange=exchange) for message in message_list: if print_info: if 'abbreviation' in message: print('abbreviation : %s 数据已提交至队列 %s' % (Util.binary_type( message['goods_sn']), queue_name)) elif 'cp_id' in message: print('ID : %s 数据已提交至队列 %s' % (Util.binary_type(message['cp_id']), queue_name)) message = json.dumps(message) self.channel.basic_publish( exchange=exchange, routing_key=queue_name, body=message, properties=pika.BasicProperties( delivery_mode=2, # 持久化 )) self.close() except Exception as e: print(e) return None
def _fetch_data(self, fn, data_list=[], **kwargs): """获取数据""" try: data = fn(**kwargs) # 当function_name为fetch_data时失败或异常返回为状态值 if isinstance(data, dict): data['id'] = kwargs['id'] data['status'] = 200 data_list.append(data) elif fn.func_name == 'fetch_data': del kwargs['headers'] kwargs['status'] = data kwargs['count'] = kwargs.get('count', 1) if data in (404, 405): kwargs['list'] = [] data_list.append(kwargs) return data except Exception as e: print(util.binary_type(e)) return None
def import_goods(self, data, put_xs_list=None): """导入产品数据""" put_xs_list = put_xs_list if put_xs_list else [] if not data: return 0 data['category'] = [x.encode('utf-8') for x in data['category']] cids = self.get_ic_category(data['category']) try: cat_id1 = cids[0] except IndexError: cat_id1 = 0 try: cat_id2 = cids[1] except IndexError: cat_id2 = 0 goods_sn = data['goods_sn'] min_buynum = data['min_buynum'] data['mpq'] = 1 increment = data['increment'] url = data['url'] goods_desc = util.binary_type(data['goods_desc']) if data['goods_desc'] else '' goods_img = data['goods_img'] if 'goods_img' in data else '' _unix_time = int(time.time()) goods_data = { 'cat_id1': cat_id1, 'cat_id2': cat_id2, 'cat_id3': 0, 'PN2': PN2, 'goods_name': util.binary_type(data['goods_name']), 'goods_other_name': util.binary_type(data['goods_other_name']), 'provider_name': util.binary_type(data['brand']), 'batch_number': '', 'encap': '', 'goods_desc': goods_desc, 'SPQ': data['mpq'], 'goods_number_hk': data['hk_stock'] if 'hk_stock' in data else 0, 'goods_number': data['cn_stock'] if 'cn_stock' in data else 0, 'DT_HK': HDT, 'DT': CDT, 'CDT': CDT, 'HDT': HDT, 'increment': increment, 'min_buynum': min_buynum, 'goods_sn': goods_sn, 'brand_goods_id': 0, 'doc_url': '', 'digikey_url': url, 'series': '', 'source_type': 0, 'user_id': 0, 'log_id': 0, 'to_china': 1, 'to_hongkong': 0, 'goods_weight': 0.0, 'goods_img': goods_img, 'goods_thumb': goods_img, 'last_update': _unix_time - 8 * 3600, } if goods_data['provider_name']: brand_id = self.get_ic_brand(goods_data['provider_name']) goods_data['brand_id'] = brand_id info = self.supplier.select('goods', condition={'goods_sn': goods_sn, 'PN2': PN2}, fields=('goods_id',), limit=1) if info: self.supplier.update('goods', condition={'goods_id': info['goods_id']}, data=goods_data) goods_id = info['goods_id'] print('更新mysql成功,GoodsId:%s' % (goods_id,)) else: goods_data['add_time'] = _unix_time - 8 * 3600 goods_id = self.supplier.insert('goods', data=goods_data, return_insert_id=1) put_xs_list.append({ 'goods_id': goods_id, 'goods_name': util.binary_type(goods_data['goods_name']), 'goods_other_name': util.binary_type(goods_data['goods_other_name']) }) print('保存mysql成功,GoodsId:%s' % (goods_id,)) if not goods_id: return 0 table_id = str(goods_id)[-1] if info: self.supplier.delete('goods_price_%s' % (table_id,), condition={'goods_id': goods_id}) # 获取价格阶梯 price_tiered = data['tiered'] if not price_tiered: price_tiered.append((goods_data['min_buynum'], 0.0, 0.0)) goods_price = [] for p in price_tiered: qty = util.intval(p[0]) if qty <= 0: continue goods_price.append({ "purchases": p[0], "price": 0, "price_cn": p[2] * PRICE_PROPORTION, }) self.supplier.insert('goods_price_%s' % (table_id,), data={ 'goods_id': goods_id, 'price': json.dumps(goods_price), }) tiered = [] for p in goods_price: tiered.append([ p["purchases"], p['price'], p['price_cn'], ]) mongo_data = { 'ModelName': goods_data['goods_name'], 'OtherModelName': goods_data['goods_other_name'], 'BrandName': goods_data['provider_name'], 'DT': (goods_data['HDT'], goods_data['CDT']), 'Desc': goods_data['goods_desc'], 'GoodsId': goods_id, 'GoodsSn': goods_data['goods_sn'], 'Stock': (goods_data['goods_number'], goods_data['min_buynum'], 0), 'Tiered': tiered, 'error': 0, 'time': int(time.time()), 'url': goods_data['digikey_url'], 'DocUrl': '', 'increment': goods_data['increment'] } # 保存mongodb collect = getattr(self.mongo, 'supplier') info = collect.find_one({'GoodsId': goods_id}) if info: collect.update({'GoodsId': goods_id}, {"$set": mongo_data}) print('更新mongodb成功,GoodsId:%s' % (goods_id,)) else: collect.insert(mongo_data) print('保存mongodb成功,GoodsId:%s' % (goods_id,)) # print('成功导入立创商城产品 %s 数据' % (data[4].encode('utf-8'),)) return 1