Esempio n. 1
0
 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
Esempio n. 2
0
 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