示例#1
0
def step_impl(context, user):
    woid = context.woid

    app_id = context.app_id
    app_secret = context.app_secret

    params = {'woid': woid}

    resp = Resource.use("apiserver").put({
        'resource': 'user.token',
        'data': params
    })
    if resp and resp.get('code') == 200:
        apiserver_access_token = resp.get('data').get('access_token')
        logging.info("apiserver_access_token : %s" % apiserver_access_token)
        context.apiserver_access_token = apiserver_access_token

        app = App.objects.get(woid=woid)
        app.apiserver_access_token = apiserver_access_token
        app.save()

    params = {'appid': app_id, 'secret': app_secret}
    resp = Resource.use("openapi").get({
        'resource': 'auth.access_token',
        'data': params
    })
    if resp and resp.get('code') == 200:
        openapi_access_token = resp.get('data').get('access_token')
        logging.info("openapi_access_token : %s" % openapi_access_token)
        context.openapi_access_token = openapi_access_token
 def api_put(request):
     #给接口传递发货的参数
     __method = request.POST.get('__method', '')
     params = {
         'order_id': request.POST.get('order_id', ''),
         'express_company_name': request.POST.get('express_company_name',
                                                  ''),
         'express_number': request.POST.get('express_number', ''),
         'leader_name': request.POST.get('leader_name', ''),
         'operator_name': request.user.username
     }
     if __method == 'put':
         #发货
         res = Resource.use(ZEUS_SERVICE_NAME,
                            EAGLET_CLIENT_ZEUS_HOST).put({
                                'resource': 'mall.delivery',
                                'data': params
                            })
     else:
         #修改物流
         res = Resource.use(ZEUS_SERVICE_NAME,
                            EAGLET_CLIENT_ZEUS_HOST).post({
                                'resource': 'mall.delivery',
                                'data': params
                            })
     if res and res['data']['result'] == u'SUCCESS':
         response = create_response(200)
         return response.get_response()
     else:
         response = create_response(500)
         response.errMsg = res['data']['msg']
         return response.get_response()
示例#3
0
def process(data, recv_msg=None):
    corp_id = data['corp_id']
    delivery_item_id = data['delivery_item_id']

    data = {'corp_id': corp_id, 'delivery_item_id': delivery_item_id}
    Resource.use('gaia').put({
        'resource': 'delivery_item.phone_message',
        'data': data
    })
示例#4
0
def step_impl(context, user, product_name):
    param_data = {
        'woid': context.woid,
        "access_token": context.openapi_access_token
    }

    resp = Resource.use('openapi').get({
        'resource': 'mall.products',
        'data': param_data
    })
    data = []
    product_id = None
    if resp and resp['code'] == 200:
        data = resp['data']['items']
        for product in data:
            if product['name'] == product_name:
                product_id = product['id']
                break
    if product_id:
        param_data = {
            'woid': context.woid,
            'product_id': product_id,
            "access_token": context.openapi_access_token
        }
        resp = Resource.use('openapi').get({
            'resource': 'mall.product',
            'data': param_data
        })
        data = []
        if resp and resp['code'] == 200:
            data = resp['data']
            print '=========data============', data
            actual_product = {}
            actual_product['name'] = data['name']
            actual_product['price'] = float(
                data['price_info']['display_price'])
            actual_product['weight'] = float(data['models'][0]['weight'])
            actual_product['image'] = data['thumbnails_url'].replace(' ', '')
            actual_product['stocks'] = float(data['total_stocks'])
            actual_product['detail'] = data['detail'][15:-18] if data[
                'detail'].startswith("<html>") else data['detail']
            actual_product['unified_postage_money'] = data[
                'unified_postage_money']
            actual_product['postage_type'] = data['postage_type']
            actual_product['supplier_postage_config'] = data[
                'supplier_postage_config']

            if not hasattr(context, 'product_name2id'):
                context.product_name2id = {}

            context.product_name2id[data['name']] = product_id
            expected = json.loads(context.text)

            bdd_util.assert_dict(expected, actual_product)
    else:
        1 / 0
示例#5
0
def get_shelve_on_product(weapp_product_ids=None,
                          product_2_weapp_product=None):
    """
	获取上架的商品
	"""
    # 获取商品是否上线
    product_shelve_on = []
    if weapp_product_ids:
        weapp_product_ids = '_'.join(
            [str(product_id) for product_id in weapp_product_ids])
        params = {'product_ids': weapp_product_ids}
        resp = Resource.use(ZEUS_SERVICE_NAME, EAGLET_CLIENT_ZEUS_HOST).get({
            'resource':
            'mall.product_status',
            'data':
            params
        })
        # 已上架商品列表
        if resp and resp.get('code') == 200:
            product_status = resp.get('data').get('product_status')
            product_shelve_on = [
                product_2_weapp_product.get(
                    int(product_statu.get('product_id')))
                for product_statu in product_status
                if product_statu.get('status') == 'on'
            ]
    return product_shelve_on
 def api_delete(request):
     value_id = request.POST.get('value_id', 0)
     response = create_response(500)
     try:
         if value_id != 0:
             models.ProductModelPropertyValue.objects.filter(
                 id=value_id).delete()
             response = create_response(200)
             relation = models.ProductModelPropertyValueRelation.objects.filter(
                 property_value_id=value_id).first()
             if relation:
                 params = {
                     'id': relation.weapp_property_value_id,
                 }
                 resp = Resource.use(ZEUS_SERVICE_NAME,
                                     EAGLET_CLIENT_ZEUS_HOST).delete({
                                         'resource':
                                         'mall.model_property_value',
                                         'data':
                                         params
                                     })
                 if not resp or not resp.get('code') == 200:
                     response = create_response(500)
     except:
         msg = unicode_full_stack()
         response.innerErrMsg = msg
         watchdog.error(msg)
     return response.get_response()
def step_impl(context, user):
    data = {}
    data['woid'] = context.woid
    data['access_token'] = context.openapi_access_token
    data['apiserver_access_token'] = context.apiserver_access_token,
    if hasattr(context, 'order_id'):
        order_id = context.order_id
        del context.order_id

    # order_id ='001'
    data['order_id'] = order_id

    resp = Resource.use('openapi').get({
        'resource': 'mall.order',
        'data': data
    })
    actual_order = {}
    if resp:
        code = resp['code']
        if code == 200:
            actual_order = resp['data']['order']

    expected = json.loads(context.text)
    ship_address = expected['ship_address']
    ship_area = expected['ship_area']
    expected_order = {
        'order_status': ORDER_STATUS2ID[expected['status']],
        'ship_address': ship_address,
        'ship_area': ship_area,
        'ship_name': expected['ship_name'],
        'ship_tel': expected['ship_tel'],
        'postage': expected['postage'],
        'final_price': expected['final_price'],
        'sub_orders': []
    }
    if expected_order['order_status'] != 0 and actual_order['sub_orders']:
        for sub_order in expected['group']:
            tmp_order = {
                'postage': sub_order['postage'],
                'order_status': ORDER_STATUS2ID[sub_order['status']],
                'products': []
            }
            for product in sub_order['products']:
                tmp_order['products'].append({
                    'product_name': product['name'],
                    'price': product['price'],
                    'product_count': product['count'],
                })
            expected_order['sub_orders'].append(tmp_order)
    else:
        products = []
        for product in expected['products']:
            products.append({
                'product_name': product['name'],
                'price': product['price'],
                'product_count': product['count']
            })
        expected_order['products'] = products

    bdd_util.assert_dict(expected_order, actual_order)
示例#8
0
文件: groups.py 项目: chengdg/weizoom
	def get_datas(request):
		group_name = request.GET.get('group_name', '')
		product_name = request.GET.get('product_name', '')
		status = int(request.GET.get('status', -1))
		handle_status = int(request.GET.get('handle_status', 0))
		start_time = request.GET.get('start_time', '')
		end_time = request.GET.get('end_time', '')

		now_time = datetime.today().strftime('%Y-%m-%d %H:%M')
		params = {'owner_id':request.manager.id}
		datas_datas = app_models.Group.objects(**params)
		for data_data in datas_datas:
			data_start_time = data_data.start_time.strftime('%Y-%m-%d %H:%M')
			data_end_time = data_data.end_time.strftime('%Y-%m-%d %H:%M')
			handle_status = int(data_data.handle_status)#手动开启状态
			if handle_status == 0:#手动关闭(默认)
				pass
			elif handle_status == 1:#手动开启
				if data_start_time <= now_time and now_time < data_end_time:
					data_data.update(set__status=app_models.STATUS_RUNNING)
			if now_time >= data_end_time:
				data_data.update(set__status=app_models.STATUS_STOPED)
				#活动已结束,所有进行中的小团置为失败
				running_group_relations = app_models.GroupRelations.objects(belong_to=data_data.id,group_status=app_models.GROUP_RUNNING)
				for group_relation in running_group_relations:
					group_relation.update(group_status=app_models.GROUP_FAILURE)
					group_relation_id = group_relation.id
					# update_order_status_by_group_status(group_relation_id,'failure')
					resp = Resource.use('zeus').post({
						'resource': 'mall.group_update_order',
						'data': {
							'group_id': group_relation_id,
							'status': 'failure',
							'is_test': 1 if request.GET.get('is_test', False) else 0
						}
					})
					if resp and resp['code'] == 200:
						#发送拼团失败模板消息
						try:
							group_details = app_models.GroupDetail.objects(relation_belong_to=str(group_relation_id))
							owner_id = data_data.owner_id
							product_name = data_data.product_name
							miss = int(group_relation.group_type)-group_details.count()
							activity_info = {
								"owner_id": str(owner_id),
								"record_id": str(request.POST['id']),
								"group_id": str(group_relation_id),
								"fid": str(group_relation.member_id),
								"price": '%.2f' % group_relation.group_price,
								"product_name": product_name,
								"status" : 'fail',
								"miss": str(miss)
							}
							member_info_list = [{"member_id": group_detail.grouped_member_id, "order_id": group_detail.order_id} for group_detail in group_details]
							send_group_template_message(activity_info, member_info_list)
						except Exception, e:
							print(u'发送拼团失败模板消息失败')
							print 'template----------------------------------'
							print e
							print 'template----------------------------------'
示例#9
0
def sync_create_rebate_info(user_id, account_relation):
	"""
	同步五五分成
	"""
	rebates = AccountHasRebateProport.objects.filter(user_id=user_id)
	for rebate in rebates:

		rebate_params = {
			'supplier_id': account_relation.supplier_id,
			'owner_id': PRODUCT_POOL_OWNER_ID,
			'divide_money': int(rebate.order_money),
			'basic_rebate': int(rebate.default_rebate_proport),
			'rebate': int(rebate.rebate_proport),
		}
		# print '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.'
		# print rebate_params
		# print '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.'
		resp = Resource.use(ZEUS_SERVICE_NAME, EAGLET_CLIENT_ZEUS_HOST).put({
			'resource': 'mall.supplier_divide_rebate_info',
			"data": rebate_params
		})
		if not resp or resp.get('code') != 200:
			AccountHasRebateProport.objects.filter(user_id=user_id).delete()
			raise Exception('Sync create rebate info failed!')
		else:

			AccountRebateProportRelation.objects.create(panda_proport_id=rebate.id,
														weapp_divide_id=resp.get('data').get('info').get('id'))
示例#10
0
    def refund(args):
        """
		微众卡退款,取消订单或者下单失败时使用
		"""
        # 交易类型(支付失败退款:0、普通退款:1)
        if mall_models.Order.select().dj_where(
                order_id=args['order_id']).first():
            trade_type = 1
        else:
            trade_type = 0
        data = {'trade_id': args['trade_id'], 'trade_type': trade_type}

        resp = Resource.use('card_apiserver').delete({
            'resource': 'card.trade',
            'data': data
        })

        is_success = resp and resp['code'] == 200
        if is_success:
            try:
                log = member_models.MemberCardLog.select().dj_where(
                    order_id=args['order_id'], reason=u'下单').first()
                member_models.MemberCardLog.create(
                    member_card=args['member_card_id'],
                    trade_id=args['trade_id'],
                    order_id=args['order_id'],
                    reason=u"取消下单或下单失败",
                    price=log.price)
            except Exception, e:
                watchdog.error(
                    u'会员卡自动退款时获取下单时的扣除金额失败,member_card_id:%s,order_id:%s' %
                    (args['member_card_id'], args['order_id']))
                watchdog.error(e)
示例#11
0
	def get_reserved_products_from_purchase_info(self, purchase_info):
		'''
		根据purchase info获取已预订商品集合

		@param [in] purchase_info: PurchaseInfo对象

		@return ReservedProduct对象集合
		'''
		webapp_owner = self.context['webapp_owner']
		webapp_user = self.context['webapp_user']

		product_ids = purchase_info.product_ids
		promotion_ids = purchase_info.promotion_ids
		product_counts = purchase_info.product_counts
		product_model_names = purchase_info.product_model_names
		products = []
		
		for i in range(len(product_ids)):
			product_id = int(product_ids[i])
			expected_promotion_id = int(promotion_ids[i])
			product_model_name = product_model_names[i]
			product_count = int(product_counts[i])
			product_info = {
				"id": product_id,
				"model_name": product_model_name,
				"count": product_count,
				"expected_promotion_id": expected_promotion_id
			}

			reversed_product = ReservedProduct.get({
				"webapp_owner": webapp_owner,
				"webapp_user": webapp_user,
				"product_info": product_info
			})
			if purchase_info.group_id:
				params = {'group_id': purchase_info.group_id, 'woid': self.context['webapp_owner'].id}

				resp = Resource.use('marketapp_apiserver').get({
					'resource': GroupBuyOPENAPI['group_buy_info'],
					'data': params
				})

				if resp and resp['code'] == 200:
					group_buy_info = resp['data']
					group_buy_price = group_buy_info['group_buy_price']
					reversed_product.price = group_buy_price

			products.append(reversed_product)

		
		#TODO2:目前对商品是否可使用优惠券的设置放在了reserved_product_repository中
		#主要是出于目前批量处理的考虑,后续应该将判断逻辑放入到reserved_product中
		forbidden_coupon_product_ids = ForbiddenCouponProductIds.get_for_webapp_owner({
			'webapp_owner': webapp_owner
		}).ids
		for product in products:
			if product.id in forbidden_coupon_product_ids:
				product.can_use_coupon = False

		return products
示例#12
0
    def refund_for_order(order):
        """
        微众卡退款
        """
        # 交易类型(支付失败退款:0、普通退款:1)

        trade_id = mall_models.OrderCardInfo.select().dj_where(order_id=order.order_id).first().trade_id
        data = {
            'trade_id': trade_id,
            'trade_type': 1  # 普通退款
        }

        msg = {
            'uuid': 'refund_wzcard',
            'order_id': order.order_id,
            'weizoom_card_money': order.weizoom_card_money
        }

        watchdog.info(message=msg, log_type='business_log')

        resp = Resource.use('card_apiserver').delete({
            'resource': 'card.trade',
            'data': data
        })

        return resp
示例#13
0
def get_product2group(pids, woid='3'):
    #例子
    #pids为list,里面的每一项都是商品id的str

    # pids_url = "http://{}/mall2/api/test/".format(settings.MARKETTOOLS_HOST)
    if not pids:
        return {}
    params = {
        'woid': woid,
        'pids': "_".join(pids)
    }

    resp = Resource.use('marketapp_apiserver').get({
        'resource':'group.group_buy_products',
        'data':params
    })

    if resp and resp['code']:
        data = resp['data']
        product_groups = data['pid2is_in_group_buy']
        product2group = {}
        for product_group in product_groups:
            product2group[product_group["pid"]] = product_group["is_in_group_buy"]
    else:
        product2group = {}

    return product2group
示例#14
0
def process(data, recv_msg=None):
    corp_id = data['corp_id']
    delivery_item_id = data['delivery_item_id']
    data = {'corp_id': corp_id, 'delivery_item_id': delivery_item_id}
    result = Resource.use('gaia').put({
        'resource': 'delivery_item.notify_kuaidi',
        'data': data
    })
示例#15
0
    def put(args):
        order_id = args['order_id']
        express_company_name = args['express_company_name']
        express_number = args['express_number']
        data_mns = []

        data = {
            'order_id': order_id,
            'express_company_name': express_company_name,
            'express_number': express_number
        }
        resp = Resource.use('zeus').put({
            'resource': 'mall.delivery',
            'data': data
        })
        errcode = SYSTEM_ERROR_CODE

        # 获取app_id传送到mns进行消息处理
        pay_log = PayLog.from_order_id({"order_id": order_id})
        if pay_log:
            app_id = pay_log.appid
        else:
            watchdog.info(
                "order paylog is not exits, delivery mns message send  failed!!  order_id:{}, msg:{}"
                .format(order_id, unicode_full_stack()),
                log_type='OPENAPI_ORDER')
            errcode = DELIVERY_ORDER_HAS_NO_PAYLOG
            return {'errcode': errcode, 'errmsg': code2msg[errcode]}
        topic_name = TOPIC['order']
        data_mns['order_id'] = order_id
        data_mns['app_id'] = app_id or ''
        data_mns['express_company_name'] = express_company_name
        data_mns['express_number'] = express_number
        if resp:
            if resp['code'] == 200:
                if resp['data']['result'] == 'SUCCESS':
                    errcode = SUCCESS_CODE
                    data = {'errcode': errcode}
                    msgutil.send_message(topic_name, 'delivery_item_shipped',
                                         data_mns)
                    return data
                else:
                    if resp['data']['msg'] == u'不能对当前订单发货':
                        errcode = DELIVERY_ORDER_HAS_MULTIPLE_CHILD_ORDERS
                    elif resp['data']['msg'] == u'订单状态已经改变':
                        errcode = DELIVERY_ORDER_STATUS_ERROR
                    elif resp['data']['msg'] == u'订单不存在':
                        errcode = DELIVERY_ORDER_NOT_EXIST
                    watchdog.info(
                        "delivery failed!! errcode:{}, order_id:{}".format(
                            errcode, order_id),
                        log_type='OPENAPI_ORDER')

        if errcode == SYSTEM_ERROR_CODE:
            watchdog.error("delivery failed!! errcode:{}, msg:{}".format(
                errcode, unicode_full_stack()),
                           log_type='OPENAPI_ORDER')
        return {'errcode': errcode, 'errmsg': code2msg[errcode]}
示例#16
0
def __sync_zeus_get(params, resource):
	resp = Resource.use(ZEUS_SERVICE_NAME, EAGLET_CLIENT_ZEUS_HOST).get({
		'resource': resource,
		'data': params
	})
	if resp and resp.get('code') == 200:
		return True, resp.get('data')
	else:
		return False, None
示例#17
0
    def use(args):
        wzcard_info = args['wzcard_info']

        webapp_owner = args['webapp_owner']
        order_id = args['order_id']
        webapp_user = args['webapp_user']

        if webapp_user.member.is_subscribed:
            if mall_models.Order.select().dj_where(
                    webapp_user_id=webapp_user.id).count() > 0:
                customer_type = 0
            else:
                customer_type = 1
        else:
            customer_type = 2

        params = {
            'card_infos': json.dumps(wzcard_info),
            'money': args['money'],
            'valid_money': -1,
            'order_id': order_id,
            'shop_id': webapp_owner.id,
            'shop_name': webapp_owner.user_profile.store_name,
            'customer_id': args['webapp_user'].member.id,
            'customer_type': customer_type
        }
        resp = Resource.use('card_apiserver').post({
            'resource': 'card.trade',
            'data': params
        })

        data = {}

        if resp:
            code = resp['code']
            data = resp['data']
            if code == 200:
                can_use = True
                msg = ''
            else:
                can_use = False
                msg = data['reason']
        else:
            can_use = False
            msg = u'系统繁忙'
            data['type'] = 'common:wtf'

        if can_use:
            member_models.MemberCardLog.create(
                member_card=webapp_user.member_card.id,
                trade_id=data['trade_id'],
                order_id=order_id,
                reason=u"下单",
                # price=float(args['money'])
                price=float(data['paid_money']))

        return can_use, msg, data
示例#18
0
	def cancel(self, corp):
		"""
		影响:
		- 更新订单状态
		- 记录状态日志
		- 记录操作日志
		- 取消出货单


		- 返还订单资源
			- 积分
			- 优惠券
			- 库存
			- 微众卡
			- 库存
		- 更新商品销量(如果订单已支付
		- 更新会员信息
		- 发送运营邮件通知
		- 发送短信通知

		@return:
		"""

		if self.status != mall_models.ORDER_STATUS_NOT:
			return False, 'Error Status'

		# 关闭微信交易单
		if self.pay_interface_type == mall_models.PAY_INTERFACE_WEIXIN_PAY and not settings.IS_UNDER_BDD:
			resp = Resource.use("pay_misc_tools").delete({
				'data': {'order_bids': json.dumps([self.bid])},

				'resource': 'weixin.trade_order'
			})

			if resp and resp['code'] == 200 and resp['data']['result'][self.bid]:
				pass
			else:
				return False, 'close weixin pay order fail'

		action_text = u"取消订单"
		from_status = self.status
		to_status = mall_models.ORDER_STATUS_CANCEL
		self.status = to_status

		self.__record_operation_log(self.bid, corp.username, action_text)
		self.__recode_status_log(self.bid, corp.username, from_status, to_status)
		self.__save()

		Order.__fill_delivery_items([self], None)

		for delivery_item in self.delivery_items:
			delivery_item.cancel(corp)
		release_order_resource_service = ReleaseOrderResourceService.get(corp)
		release_order_resource_service.release(self.id, from_status, to_status)
		self.__send_msg_to_topic('order_cancelled', from_status, to_status)
		return True, ''
示例#19
0
    def api_put(request):
        self_shop_name = request.POST.get('self_shop_name', '')
        weapp_user_id = request.POST.get('weapp_user_id', '')
        settlement_type = int(request.POST.get('settlement_type', 1))
        corp_account = int(request.POST.get('corp_account', 1))
        split_atio = float(request.POST.get('split_atio', 0))
        risk_money = float(request.POST.get('risk_money', 0))
        is_sync = request.POST.get('is_sync', '')
        remark = request.POST.get('remark', '')
        if models.SelfShops.objects.filter(
                weapp_user_id=weapp_user_id).count() > 0:
            response = create_response(500)
            response.errMsg = u'该自营平台已存在'
            return response.get_response()
        try:
            models.SelfShops.objects.create(self_shop_name=self_shop_name,
                                            weapp_user_id=weapp_user_id,
                                            settlement_type=settlement_type,
                                            split_atio=split_atio,
                                            risk_money=risk_money,
                                            corp_account=corp_account,
                                            remark=remark)
            product_models.SelfUsernameWeappAccount.objects.create(
                self_user_name=weapp_user_id, weapp_account_id=weapp_user_id)

            data = {
                'user_id': weapp_user_id,
                'settlement_type': settlement_type,
                'divide_rebate': split_atio,
                'risk_money': risk_money,
                'remark': remark
            }
            resp = Resource.use(ZEUS_SERVICE_NAME,
                                EAGLET_CLIENT_ZEUS_HOST).put({
                                    'resource': 'account.divide_info',
                                    'data': data
                                })
            is_sync = True if is_sync == 'is_sync' else False
            if is_sync:  #需要在创建时候同步
                is_synced = sync_all_product_2_new_self_shop(weapp_user_id)
                sync_all_product_2_weapp(weapp_user_id)
                if is_synced:
                    models.SelfShops.objects.filter(
                        weapp_user_id=weapp_user_id).update(is_synced=True)
                    response = create_response(200)
                else:
                    response = create_response(500)
                    response.errMsg = u'同步失败'
                    response.innerErrMsg = unicode_full_stack()
            else:
                response = create_response(200)
        except Exception, e:
            msg = unicode_full_stack()
            response = create_response(500)
            response.errMsg = u'添加自营平台失败'
            print msg
示例#20
0
 def api_delete(request):
     model_id = request.POST.get('model_id', 0)
     response = create_response(500)
     try:
         if model_id != 0:
             models.ProductModelProperty.objects.filter(id=model_id).update(
                 is_deleted=True)
             models.ProductModelPropertyValue.objects.filter(
                 property_id=model_id).update(is_deleted=True)
             has_properrty_values = models.ProductModelHasPropertyValue.objects.filter(
                 property_id=model_id, is_deleted=False)
             model_ids = [
                 has_properrty_value.model_id
                 for has_properrty_value in has_properrty_values
             ]
             product_models = models.ProductModel.objects.filter(
                 id__in=model_ids, is_deleted=False)
             product_ids = [
                 product_model.product_id
                 for product_model in product_models
             ]
             product_models.update(stocks=0,
                                   price=0,
                                   market_price=0,
                                   weight=0,
                                   limit_clear_price=0,
                                   is_deleted=True)
             models.Product.objects.filter(id__in=product_ids).update(
                 product_price=0,
                 clear_price=0,
                 product_store=0,
                 product_weight=0)
             has_properrty_values.delete()
             response = create_response(200)
             # 调用zeus接口
             db_model = models.ProductModelPropertyRelation.objects.filter(
                 model_property_id=model_id).first()
             if db_model:
                 params = {
                     "id": db_model.weapp_property_id,
                 }
                 resp = Resource.use(ZEUS_SERVICE_NAME,
                                     EAGLET_CLIENT_ZEUS_HOST).delete({
                                         'resource':
                                         'mall.product_model_property',
                                         'data':
                                         params
                                     })
                 if not resp or resp.get('code') != 200:
                     response = create_response(500)
     except:
         msg = unicode_full_stack()
         watchdog.error(msg)
         response.innerErrMsg = msg
     return response.get_response()
示例#21
0
def sync_add_product(params, product, weapp_catalog_id=None, user_id=None):
    """
	同步新增加商品
	"""
    if product.catalog_id:
        weapp_catalog_id = catalog_models.ProductCatalogRelation.objects\
         .filter(catalog_id=product.catalog_id).first().weapp_catalog_id
    resp = Resource.use(ZEUS_SERVICE_NAME, EAGLET_CLIENT_ZEUS_HOST).put({
        'resource':
        'mall.sync_product',
        'data':
        params
    })
    # 同步到商品中间关系表
    if resp:
        if resp.get('code') == 200 and resp.get('data').get('product'):
            weapp_product_id = resp.get('data').get('product').get('id')
            models.ProductHasRelationWeapp.objects.create(
                product_id=product.id,
                weapp_product_id=weapp_product_id,
                self_user_name=user_id)
            # 同步类目
            if weapp_catalog_id:
                catalog_params = {
                    'classification_id': weapp_catalog_id,
                    'product_id': weapp_product_id
                }
                resp = Resource.use(ZEUS_SERVICE_NAME,
                                    EAGLET_CLIENT_ZEUS_HOST).put({
                                        'resource':
                                        'mall.classification_product',
                                        'data':
                                        catalog_params
                                    })
                if not resp or resp.get('code') != 200:
                    watchdog.error({
                        'errorMsg':
                        'Panda product: %s sync catalog failed!' % product.id
                    })
            # 同步标签
            sync_product_label(weapp_product_id=weapp_product_id,
                               product=product)
示例#22
0
    def handle(self, **options):
        datas = []
        file_name_dir = '%s' % './account/management/commands/sync_customer_phone_1.xlsx'
        data = xlrd.open_workbook(file_name_dir)
        table = data.sheet_by_index(0)
        nrows = table.nrows  #行数
        print "=====" + 'loading xlsx file' + "====="
        for i in range(0, nrows):
            item = dict()
            item['username'] = table.cell(i, 0).value
            item['phone'] = str(int(table.cell(i, 1).value))
            datas.append(item)
        for data in datas:
            try:
                user_id = User.objects.get(username=data['username']).id
                account_info = account_models.UserProfile.objects.filter(
                    user_id=user_id)
                account_info.update(phone=data['phone'])
                new_relation = [
                    re.supplier_id
                    for re in account_models.AccountHasSupplier.objects.filter(
                        user_id=user_id)
                ]
                old_relation = [
                    re.supplier_id
                    for re in account_models.AccountHasSupplier.objects.filter(
                        user_id=-user_id)
                ]
                supplier_ids = old_relation + new_relation
                for supplier_id in supplier_ids:
                    param = {
                        'name': account_info.first().name,
                        'remark': '',
                        'responsible_person': u'8000FT',
                        'supplier_tel': data['phone'],
                        'supplier_address': u'中国 北京',
                        'supplier_id': supplier_id
                    }

                    resp = Resource.use(ZEUS_SERVICE_NAME,
                                        EAGLET_CLIENT_ZEUS_HOST).post({
                                            'resource':
                                            'mall.supplier',
                                            "data":
                                            param
                                        })
                    if resp and resp.get('code') == 200:
                        print '++++++++++++++++++++++++++++++++++++++++++++++='

                print "===" + 'changing user:'******'username'] + "==="
            except Exception, e:
                print e
                print "===" + 'error:user is not exsit:' + data[
                    'username'] + "==="
示例#23
0
    def get_supplier(self, id):
        """
		获得指定的Supplier对象
		"""
        resp = Resource.use('wcas').get({
            'resource': 'corp.supplier',
            'data': {
                'corp_id': 1127  # todo 多平台上线后要改
            }
        })
        supplier_data = resp['data']
        return Supplier(supplier_data)
示例#24
0
    def put(args):
        woid = args['woid']
        order_id = args['order_id']

        access_token = args['apiserver_access_token']
        timestamp = str(long(time.time() * 1000))
        data = {
            'order_id': order_id,
            'timestamp': timestamp,
            'woid': woid,
            u'access_token': access_token,
            'pay_interface_type': '12'
        }
        pay_log = PayLog.from_order_id({
            'order_id': args['order_id'],
        })
        if pay_log:
            errcode = PAY_ORDER_STATUS_ERROR
            return {'errcode': errcode, 'errmsg': code2msg[errcode]}

        resp = Resource.use('apiserver').put({
            'resource': 'pay.pay_result',
            'data': data
        })

        status = 0
        code = 0
        errcode = SYSTEM_ERROR_CODE
        # reason= ''
        if resp:
            code = resp["code"]
            if code == 200:
                if resp['data']['is_success'] == True:
                    status = 1
                    errcode = SUCCESS_CODE
                    PayLog.save({
                        'woid': args['woid'],
                        'order_id': order_id,
                        'status': status,
                        'appid': args['appid']
                    })
                else:
                    msg = resp['data']['msg']
                    # reason = msg
                    if u'非待支付订单' in msg:
                        errcode = PAY_ORDER_STATUS_ERROR
                    else:
                        errcode = PAY_ORDER_ERROR

        if code == 200 and status:
            return {'order_id': order_id}
        else:
            return {'errcode': errcode, 'errmsg': code2msg[errcode]}
示例#25
0
def step_impl(context, user):
    order_id = json.loads(context.text)['order_no']
    data = {
        'order_id': order_id,
        'access_token': context.openapi_access_token,
        'woid': context.woid,
        'apiserver_access_token': context.apiserver_access_token
    }
    resp = Resource.use('openapi').put({
        'resource': 'pay.third_pay',
        'data': data
    })
    if resp:
        assert 200 == resp['code']
示例#26
0
    def fill_options(member_card, fill_options):
        if fill_options:
            with_price = fill_options.get("with_price", False)
            #member_card.balance = 100
            if with_price:
                member_card.balance = 0
                #访问微众卡service
                wzcard_info = [{
                    "card_number": member_card.card_number,
                    "card_password": member_card.card_password
                }]
                params = {
                    'card_infos': json.dumps(wzcard_info),
                }
                resp = Resource.use('card_apiserver').post({
                    'resource': 'card.get_cards',
                    'data': params
                })

                data = {}

                if resp:
                    code = resp['code']
                    data = resp['data']
                    if code == 200:
                        card_infos = resp['data']['card_infos']
                        if len(card_infos) == 1:
                            #判断微众卡状态是否可用 duhao
                            card_status_text = card_infos[0][
                                member_card.card_number]['status']
                            if card_status_text == CAN_USE_TEXT:
                                member_card.is_active = True
                            #剩余返现次数
                            remained_backcash_times = card_infos[0][
                                member_card.
                                card_number]['membership_to_recharge_times']
                            member_card.remained_backcash_times = remained_backcash_times
                            member_card.valid_time_to = card_infos[0][
                                member_card.card_number]['valid_time_to']
                            member_card.balance = card_infos[0][
                                member_card.card_number]['balance']
                            member_card.next_clear_time = card_infos[0][
                                member_card.card_number]['next_clear_time']
                    else:
                        watchdog.error(resp)

                batch_info = get_batch_info(member_card.batch_id)
                member_card.interval_days = int(
                    Decimal(batch_info.get('vip_back_via_day', 30)))
示例#27
0
    def _handle_keyword(self, context, from_weixin_user, is_from_simulator):
        user_id = context.user_profile.user_id
        username = User.objects.get(id=user_id).username
        if username != 'weshop':
            # request = context.request
            message = context.message
            response = None
            response_rule = None
            response_content = None
            try:
                webapp_owner_id = context.user_profile.user_id
                keyword = message.content
                openid = message.fromUserName
                webapp_id = context.user_profile.webapp_id
                response_content = Resource.use('marketapp_apiserver').post({
                    'resource':
                    'sign.do_auto_signment',
                    'data': {
                        'webapp_owner_id': webapp_owner_id,
                        'keyword': keyword,
                        'openid': openid,
                        'webapp_id': webapp_id
                    }
                })
                response_content = response_content['data']
                if response_content:
                    response = generator.get_text_response(
                        message.fromUserName, message.toUserName,
                        response_content, message.fromUserName,
                        context.user_profile)

                    try:
                        self._process_recorde_message(context, response_rule,
                                                      from_weixin_user,
                                                      is_from_simulator)
                    except:
                        notify_message = u"_process_recorde_message, cause:\n{}".format(
                            unicode_full_stack())
                        message_tail = '\nanswer:%s,patterns:%s,owner_id:%d,id:%d' % (
                            response_rule.answer, response_rule.patterns,
                            response_rule.owner_id, response_rule.id)
                        notify_message += message_tail
                        watchdog_error(notify_message)

                return response
            except:
                return None
        else:
            return None
示例#28
0
def sync_delete_retail_rebate_info(account_relation):
	"""
	同步增加零售返点
	user_id 属于哪个平台的团购扣点,-1表示基础扣点
	"""
	params = {
		'supplier_id': account_relation.supplier_id,

	}
	resp = Resource.use(ZEUS_SERVICE_NAME, EAGLET_CLIENT_ZEUS_HOST).delete({
		'resource': 'mall.supplier_retail_rebate_info',
		"data": params
	})
	if not resp or resp.get('code') != 200:
		raise Exception('Sync create delete retail rebate info failed!')
示例#29
0
def sync_weapp_product_store(product_id=None,
                             owner_id=None,
                             source_product=None,
                             new_properties=None,
                             old_properties=None,
                             relation=None):
    """
	判断商品是否需要同步并同步
	"""
    # 如果降价(售价,结算价)库存修改自动更新。
    new_product = models.Product.objects.filter(owner=owner_id,
                                                id=product_id).first()

    # relation = models.ProductHasRelationWeapp.objects.filter(product_id=product_id).first()
    if new_product.has_product_model != source_product.has_product_model:
        return False
    #  未同步的不处理
    if relation:
        if new_product.has_product_model:
            # 多规格,获取规格信息
            model_type = 'custom'
            if not charge_models_product_sync(old_properties=old_properties,
                                              new_properties=new_properties):
                return False
            weapp_models_info = get_weapp_model_properties(
                product=source_product)
        else:
            model_type = 'single'
            if new_product.product_store == source_product.product_store:
                return False
            weapp_models_info = [{
                'name': 'standard',
                'product_store': new_product.product_store
            }]

        params = {
            'model_type': model_type,
            'model_info': json.dumps(weapp_models_info),
            'product_id': relation.weapp_product_id
        }
        resp = Resource.use(ZEUS_SERVICE_NAME, EAGLET_CLIENT_ZEUS_HOST).post({
            'resource':
            'panda.product_store',
            'data':
            params
        })
        if resp and resp.get('code') == 200:
            pass
示例#30
0
	def get_card_infos(args):
		"""
		检查微众卡,编辑订单页接口使用
		@type args: h5请求参数
		"""

		params = {
			'card_infos': json.dumps(args['card_infos'])
		}

		resp = Resource.use('card_apiserver').post({
			'resource': 'card.get_cards',
			'data': params
		})

		return resp