Beispiel #1
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]}
Beispiel #2
0
    def call_wapi(self, method, app, resource, req, resp):
        watchdog_client.watchdogClient = watchdog_client.WatchdogClient(
            settings.SERVICE_NAME)
        response = {
            "code": 200,
            "errMsg": "",
            "innerErrMsg": "",
        }
        resp.status = falcon.HTTP_200

        args = {}
        args.update(req.params)
        args.update(req.context)
        args['wapi_id'] = req.path + '_' + req.method

        param_args = {}
        param_args['req_params'] = req.params
        try:
            raw_response = wapi_resource.wapi_call(method, app, resource, args,
                                                   req)
            if type(raw_response) == tuple:
                response['code'] = raw_response[0]
                response['data'] = raw_response[1]
                if response['code'] != 200:
                    response['errMsg'] = response['data']
                    response['innerErrMsg'] = response['data']
            else:
                response['code'] = 200
                response['data'] = raw_response
        except wapi_resource.ApiNotExistError as e:
            response['code'] = 404
            response['errMsg'] = str(e).strip()
            response['innerErrMsg'] = unicode_full_stack()
        except Exception as e:
            response['code'] = 531  #不要改动这个code,531是表明service内部发生异常的返回码
            response['errMsg'] = str(e).strip()
            response['innerErrMsg'] = unicode_full_stack()

            msg = {'traceback': unicode_full_stack()}
            watchdog.alert(msg, 'Error')
        resp.body = json.dumps(response, default=_default)

        try:
            param_args['app'] = app
            param_args['resource'] = resource
            param_args['method'] = method
            param_args.update(json.loads(resp.body))
            #param_args.update(simplejson.loads(resp.body))
            watchdog.info(param_args, "CALL_API")
        except:
            pass
Beispiel #3
0
def send_task(queue_name, args):
    try:
        result = celery.send_task(queue_name, args=[args], queue=queue_name)
    except:
        notify_message = u"queue_name:{}, args:{}, cause:\n{}".format(
            queue_name, args, unicode_full_stack())
        watchdog.error(notify_message)
Beispiel #4
0
	def api_put(request):
		post = request.POST
		name = post.get('name')
		db_model = None
		try:
			db_model = models.ProductLimitZoneTemplate.objects.create(name=name,
																	  owner_id=request.user.id)
			params = {
				'name': name,
				'owner_id': PRODUCT_POOL_OWNER_ID
			}
			resp, resp_data = sync_util.sync_zeus(params=params, resource='mall.product_limit_zone_template',
												  method='put')

			if resp and resp_data:
				# 创建中间关系
				models.ProductLimitZoneTemplateRelation.objects.create(
					template_id=db_model.id,
					weapp_template_id=resp_data.get('template').get('id')
				)
				response = create_response(200)
			else:
				models.ProductLimitZoneTemplate.objects.filter(id=db_model).delete()
				response = create_response(500)

		except:
			msg = unicode_full_stack()
			watchdog.error('product_limit_zone.template_PUT{}'.format(msg))
			if db_model:
				models.ProductLimitZoneTemplate.objects.filter(id=db_model.id).delete()
			response = create_response(500)
		return response.get_response()
Beispiel #5
0
	def api_delete(request):
		post = request.POST
		template_id = post.get('id')

		try:
			# 判断是否有正在使用的
			use_products = product_models.Product.objects.filter(limit_zone=template_id)\
				.exclude(limit_zone_type=product_models.NO_LIMIT)
			# print '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.'
			# print use_products.count()
			# print '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.'
			if use_products.count() > 0:
				# data = {
				# 	'msg': '还有正在使用该模板的商品,请先处理!'
				# }
				response = create_response(500)
				response.errMsg = '还有正在使用该模板的商品,请先处理!'
				return response.get_response()
			models.ProductLimitZoneTemplate.objects.filter(id=template_id).update(is_deleted=True)

			# 同步到weapp
			relation = models.ProductLimitZoneTemplateRelation.objects.filter(template_id=template_id).first()
			if relation:
				params = {
					'owner_id': PRODUCT_POOL_OWNER_ID,
					'template_id': relation.weapp_template_id
				}
				resp, resp_data = sync_util.sync_zeus(params=params, resource='mall.product_limit_zone_template',
													  method='delete')
			response = create_response(200)
		except:
			msg = unicode_full_stack()
			watchdog.error('product_limit_zone.template_DELETE{}'.format(msg))
			response = create_response(500)
		return response.get_response()
Beispiel #6
0
    def process_order_from_spread(args):
        """静态方法 订单完成后处理分享链接相关

        @param[in] order_id 订单id
        @param[in] webapp_user 当前下单用户
        """
        order_id = args['order_id']

        mall_order_from_shared = mall_models.MallOrderFromSharedRecord.select(
        ).dj_where(order_id=order_id).first()
        if mall_order_from_shared:
            shared_url = mall_order_from_shared.url
            fmt = mall_order_from_shared.fmt

            if shared_url and fmt:
                try:
                    member_models.MemberSharedUrlInfo.update(
                        leadto_buy_count=member_models.MemberSharedUrlInfo.
                        leadto_buy_count + 1).dj_where(
                            shared_url=shared_url, ).execute()

                    mall_order_from_shared.is_updated = True
                    mall_order_from_shared.save()
                except:
                    notify_message = u"process_order_from_spread cause:\n{}, fmt:{}".format(
                        unicode_full_stack(), fmt)
                    watchdog.error(notify_message)
                    print notify_message
 def wrapper(*args, **kw):
     try:
         return func(*args, **kw)
     except:
         watchdog.alert({
             'uuid': 'order_trade_error',
             'traceback': unicode_full_stack()
         })
Beispiel #8
0
	def __log_exception(self, e=BaseException):
		if isinstance(e, redis.exceptions.RedisError):
			exception_type = 'redis_error'
		else:
			exception_type = 'other'
		watchdog.alert(
			'redis_lock_error:type:{}.\nunicode_full_stack:{}'.format(exception_type, unicode_full_stack()))
		self.__redis_error = True
		return True
    def api_put(request):
        # 新建商品分类
        post = request.POST
        name = post.get('catalog_name', '')
        father_id = int(post.get('father_catalog', -1))
        level = 1 if father_id == -1 else 2
        note = post.get('note', '')
        try:
            product_catalog = product_catalog_models.ProductCatalog.objects.create(
                name=name, level=level, father_id=father_id, note=note)
            #
            weapp_father_id = father_id
            if father_id > 0:
                relation = product_catalog_models.ProductCatalogRelation.objects.filter(
                    catalog_id=father_id).first()
                if relation:
                    weapp_father_id = relation.weapp_catalog_id

            params = {
                'name': name,
                'level': level,
                'father_id': 0 if father_id == -1 else weapp_father_id
            }
            resp = Resource.use(ZEUS_SERVICE_NAME,
                                EAGLET_CLIENT_ZEUS_HOST).put({
                                    'resource': 'mall.classification',
                                    'data': params
                                })
            if resp and resp.get('code') == 200 and resp.get('data').get(
                    'classification'):
                product_catalog_models.ProductCatalogRelation\
                 .objects.create(catalog_id=product_catalog.id,
                     weapp_catalog_id=resp.get('data').get('classification').get('id'))
                response = create_response(200)
            else:
                product_catalog_models.ProductCatalog.objects.filter(
                    id=product_catalog.id).delete()
                response = create_response(500)
        except:
            response = create_response(500)
            response.errMsg = u'新建失败'
            response.innerErrMsg = unicode_full_stack()
            watchdog.error(unicode_full_stack())
        return response.get_response()
Beispiel #10
0
	def api_post(request):
		post = request.POST
		name = post.get('name')
		template_id = post.get('id')

		flag = post.get('flag', 'name')
		try:
			models.ProductLimitZoneTemplate.objects.filter(id=template_id).update(name=name)
			# 同步到weapp的参数
			weapp_cities = []
			weapp_provinces = []
			if flag != 'name':
				selected_data = json.loads(post.get('selected_data', ''))

				provinces = selected_data.get('provinces')
				# 先删除
				models.LimitTemplateHasZone.objects.filter(template_id=template_id).delete()
				# 创建模板的数据
				bulk_create = []

				for province in provinces:
					# 前段传递的数据如果是全选了省,那么cities是空的
					cities = province.get('cities')
					weapp_provinces.append(str(province.get('provinceId')))
					if not cities:
						bulk_create.append(models.LimitTemplateHasZone(template_id=template_id,
																	   province=province.get('provinceId'),
																	   ))
					else:
						bulk_create += [models.LimitTemplateHasZone(template_id=template_id,
																	province=province.get('provinceId'),
																	city=city.get('cityId')) for city in cities]
						weapp_cities += [str(city.get('cityId')) for city in cities]
				models.LimitTemplateHasZone.objects.bulk_create(bulk_create)
				# 同步更新到weapp
			relation = models.ProductLimitZoneTemplateRelation.objects.filter(template_id=template_id).first()

			if relation:
				params = {
					'owner_id': PRODUCT_POOL_OWNER_ID,
					'name': name,
					'cities': ','.join(weapp_cities),
					'template_id': relation.weapp_template_id,
					'provinces': ','.join(weapp_provinces),
					'flag': flag
				}
				sync_util.sync_zeus(params=params, resource='mall.product_limit_zone_template',
										method='post')
			response = create_response(200)
		except:
			msg = unicode_full_stack()
			watchdog.error('product_limit_zone.template_POST{}'.format(msg))
			response = create_response(500)
		return response.get_response()
Beispiel #11
0
    def filter_products(self, args):
        raw_products = args['products']
        product_name = filter_invalid_str(args['product_name'], '').strip()

        products = filter(lambda x: product_name in x['name'], raw_products)
        try:
            self.__log_record(product_name)
        except:
            msg = unicode_full_stack()
            watchdog.alert(msg)

        return products
Beispiel #12
0
def get_wapi_lock(lockname, lock_timeout=1):
	try:
		conn = DEFAULT_CONN
		identifier = '1'
		lockname = 'lk:' + lockname
		lock_timeout = int(math.ceil(lock_timeout))
		if conn.set(name=lockname, value=identifier, nx=True, ex=lock_timeout):
			return identifier
		else:
			return False
	except:
		watchdog.alert(unicode_full_stack())
		return True
Beispiel #13
0
    def _poll_response(self):
        """
		发送快递100 订阅请求,返回成功与否信息
		"""
        # post中的param的json
        param_json_data = {
            self.express_params.COMPANY: self.express_company_name,
            self.express_params.NUMBER: self.express_number,
            self.express_params.TO: self.area,
            self.express_params.KEY: self.express_config.app_key,
            self.express_params.PARAMETERS: {
                self.express_params.CALLBACK_URL: self._get_api()
            }
        }
        # 将PARAMETERS的json转换为字符串
        param_str = json.dumps(param_json_data)

        json_data = {
            self.express_params.SCHEMA: self.express_config.schema,
            self.express_params.PARAM: param_str
        }

        # print param_str
        verified_result = ''
        try:
            param_data = urllib.urlencode(json_data)
            # print '-------------------------------------------'
            # print param_data

            # if settings.IS_UNDER_BDD:
            # 	from test.bdd_util import WeappClient
            # 	bdd_client = WeappClient()
            # 	response = bdd_client.post('/tools/api/express/test_kuaidi_poll/?code=1', param_json_data)
            # 	verified_result = response.content

            # else:
            request = urllib2.Request(self.express_config.get_api_url(),
                                      param_data)
            response = urllib2.urlopen(request)
            verified_result = response.read()

            watchdog.info(
                u"发送快递100 订阅请求 url: {},/n param_data: {}, /n response: {}".
                format(self.express_config.get_api_url(), param_str,
                       verified_result.decode('utf-8')))
        except:
            watchdog.error(u'发送快递100 订阅请求 失败,url:{},data:{},原因:{}'.format(
                self.express_config.get_api_url(), param_str,
                unicode_full_stack()))

        return verified_result
Beispiel #14
0
    def get_express_poll(self):
        # 如果是空不处理
        if self.express_company_name is '' or self.express_number is '':
            watchdog.error(
                u'快递订阅异常,订单号:{}, 原因:{}'.format(self.delivery_item.bid,
                                               unicode_full_stack()),
                self.express_config.watchdog_type)
            return False

        # 是否已经订阅过该订单,并且成功
        status = self._is_poll_by_order()
        if status:
            return True

        # 保存快递信息
        self.express = self._save_poll_order_id()

        # 发送订阅请求
        data = self._send_poll_requset()
        result = True if data.get(
            'result') == "true" or data.get('result') is True else False

        if result:
            # 修改快递信息状态
            self.express.status = data.get('returnCode')
            self.express.send_count = self.express.send_count + 1
            self.express.abort_receive_message = ""
            self.express.save()
            return True
        else:
            if data and data.get('returnCode'):
                self.express.status = data.get('returnCode')
                self.express.save()
            watchdog.error(
                u'快递订阅异常,订单号:{}, 原因:{}'.format(self.delivery_item.bid,
                                               unicode_full_stack()),
                self.express_config.watchdog_type)
            return False
Beispiel #15
0
	def get(args):

		order_id = args['order_id']
		woid = args['woid']
		access_token = args['apiserver_access_token']
		timestamp = str(long(time.time() * 1000))
		data = {
			'timestamp':timestamp, 'woid': woid, 'order_id':order_id,u'access_token':access_token
			}
		resp = Resource.use('apiserver').get({
							'resource': 'mall.express_details',
							'data': data
			})


		errcode = SUCCESS_CODE

		if resp:
			code = resp["code"]
			if code == 200:
				order_detail = {}
				data = resp["data"]
				
				for express_detail in data['express_details']:
					for i in ['express_id', 'ftime', 'status', 'id', 'created_at']:
						del express_detail[i]
				return {'express':data}

			if code == 500:
				# msg = '获取物流信息请求参数错误或缺少参数'
				errcode = GET_EXPRESS_DETAILS_PARAMETER_ERROR
				watchdog.error("get express detail failed!! errcode:{}, msg:{}".format(errcode,unicode_full_stack()),log_type='OPENAPI_ORDER')
				return {'errcode':errcode, 'errmsg':code2msg[errcode]}
		else:
			errcode = SYSTEM_ERROR_CODE
			watchdog.error("get express detail failed!! errcode:{}, msg:{}".format(errcode,unicode_full_stack()),log_type='OPENAPI_ORDER')
			return {'errcode':errcode, 'errmsg':code2msg[errcode]}
Beispiel #16
0
    def _parse_result(self, result):
        data = dict()

        if result is None or len(result) == 0:
            return data

        try:
            data = json.loads(result)
            watchdog.info(u'从快递100获取订单信息,data{}'.format(result),
                          self.express_config.watchdog_type)
        except:
            notify_message = u'解析快递100获取订单信息失败,url:{}, data:{}, 原因:{}'.format(
                result, data, unicode_full_stack())
            watchdog.error(notify_message, self.express_config.watchdog_type)
        return data
 def api_post(request):
     # 编辑商品分类
     post = request.POST
     catalog_id = post.get('catalog_id', '')
     name = post.get('catalog_name', '')
     note = post.get('note', '')
     try:
         product_catalog_models.ProductCatalog.objects.filter(
             id=catalog_id).update(name=name, note=note)
         relation = product_catalog_models.ProductCatalogRelation.objects.filter(
             catalog_id=catalog_id)
         if relation:
             relation = relation.first()
             weapp_catalog_id = relation.weapp_catalog_id
             params = {'id': weapp_catalog_id, 'name': name}
             resp = Resource.use(ZEUS_SERVICE_NAME,
                                 EAGLET_CLIENT_ZEUS_HOST).post({
                                     'resource':
                                     'mall.classification',
                                     'data':
                                     params
                                 })
             if resp and resp.get('code') == 200:
                 response = create_response(200)
             else:
                 response = create_response(500)
                 response.errMsg = u'编辑失败'
         else:
             response = create_response(200)
         return response.get_response()
     except:
         response = create_response(500)
         response.errMsg = u'编辑失败'
         response.innerErrMsg = unicode_full_stack()
         watchdog.error(unicode_full_stack())
         return response.get_response()
Beispiel #18
0
    def _parse_result(self, result):
        data = dict()
        try:
            data = json.loads(result)
            #			status = int(data['status'])
            #			if status >= 0 and status < 3:
            #				data['message'] = self.express_config.STATUSES[status]
            #			else:
            #				data['message'] = self.express_config.STATUSES[3]

            watchdog_info(u'从快递100获取订单信息,data{}'.format(result), 'EXPRESS')
        except:
            notify_message = u'解析快递100获取订单信息失败,url:{},原因:{}'.format(
                result, unicode_full_stack())
            watchdog_error(notify_message)
        return data
Beispiel #19
0
    def save_express_details(self, data):
        # 删除之前的
        callback_id = int(data.get(
            'CallBack', -1))  #CallBack作为ExpressHasOrderPushStatus的id
        express_code = int(data.get('LogisticCode', -1))  #快递号
        if not callback_id:
            watchdog_error(
                u'保存快递鸟的推送数据失败,没有返回订阅id,callback_id:{}'.format(callback_id),
                self.express_config.watchdog_type)
            return False

        self.express = express_models.ExpressHasOrderPushStatus.get(
            callback_id)

        if self.order_id > 0:
            ExpressDetail.objects.filter(order_id=self.order_id).delete()
        else:
            ExpressDetail.objects.filter(express_id=self.express.id).delete()
        try:
            express_details = data.get('Traces', {})
            display_index = 1
            express_id = self.express.id if self.express else -1  #订单的推送状态的id

            for detail in express_details:
                express_detail = ExpressDetail.objects.create(
                    order_id=self.order_id,
                    express_id=express_id,
                    context=detail['AcceptStation'],
                    time=detail['AcceptTime'],
                    ftime=detail['AcceptTime'],
                    #status = detail.get('status',''), #快递鸟没有该数据
                    display_index=display_index)
                display_index = display_index + 1

            watchdog_info(
                u'保存快递鸟的推送数据成功,express_id:{}, json:{}'.format(
                    express_id, data), self.express_config.watchdog_type)
            self.express.receive_count = self.express.receive_count + 1
            self.express.save()

            return True
        except:
            watchdog_error(
                u'保存快递鸟的推送数据失败,express_id:{}, json:{}, 原因:{}'.format(
                    express_id, data, unicode_full_stack()),
                self.express_config.watchdog_type)
            return False
Beispiel #20
0
    def _verify_response(self):
        """用登陆返回的code,获取信息,发送请求"""
        verity_url = self.EXPRESS_ORDER_QUERY_URL_TMPL.format(
            self.express_config.app_key, self.express_company,
            self.express_number, self.order_by)

        verified_result = ''
        try:
            verify_response = urllib2.urlopen(verity_url)
            verified_result = verify_response.read().strip()
            watchdog_info(u'从快递100获取订单信息,url:{}'.format(verity_url), 'EXPRESS')
        except:
            notify_message = u'从快递100获取订单信息失败,url:{},原因:{}'.format(
                verity_url, unicode_full_stack())
            watchdog_error(notify_message)

        return verified_result
Beispiel #21
0
    def increase_member_integral(args):

        #TODO-bert 调整统一参数
        member_id = args['member_id']
        event_type = args['event_type']
        integral_increase_count = args.get('integral_increase_count', 0)
        follower_member = args.get('follower_member', None)
        reason = args.get('reason', '')
        manager = args.get('manager', '')
        webapp_user_id = args.get('webapp_user_id', None)
        corp = args['corp']

        integral_increase_count = int(integral_increase_count)

        if integral_increase_count == 0:
            return None

        member = corp.member_repository.get_member_by_id(member_id)
        current_integral = member.integral + integral_increase_count
        try:
            #TODO-bert 并发下是否会出现积分日志无法对应上
            member_models.Member.update(
                integral=member_models.Member.integral +
                integral_increase_count).dj_where(id=member.id).execute()

            integral_log = member_models.MemberIntegralLog.create(
                member=member.id,
                follower_member_token=follower_member.token
                if follower_member else '',
                integral_count=integral_increase_count,
                event_type=event_type,
                webapp_user_id=webapp_user_id,
                reason=reason,
                current_integral=current_integral,
                manager=manager)
            # todo 看起来有个清理缓存的样子。。。。
            if member:
                member.cleanup_cache()

            return True, integral_log.id
        except:
            notify_message = u"update_member_integral member_id:{}, cause:\n{}".format(
                member.id, unicode_full_stack())
            watchdog.error(notify_message)
            return False, None
Beispiel #22
0
    def post(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,
            'action': 'cancel'
        }
        resp = Resource.use('apiserver').put({
            'resource': 'mall.refund',
            'data': data
        })
        status = 0
        code = 0
        errcode = SUCCESS_CODE

        if resp:
            code = resp["code"]
            if code == 200:
                return {'errcode': errcode}

            if code == 500:
                msg = resp['data']['msg']
                errcode = SUB_ORDER_STATUS_ERROR
                if msg == u'有子订单的状态不是待发货,不能取消订单':
                    errcode = CANCEL_ORDER_ERROR
                watchdog.info(
                    "cancel order failed!! errcode:{}, msg:{}".format(
                        errcode, msg),
                    log_type='OPENAPI_ORDER')
                return {'errcode': errcode, 'errmsg': code2msg[errcode]}
        else:
            errcode = SYSTEM_ERROR_CODE
            watchdog.error("cancel order failed!! errcode:{}, msg:{}".format(
                errcode, unicode_full_stack()),
                           log_type='OPENAPI_ORDER')
            return {'errcode': errcode, 'errmsg': code2msg[errcode]}
Beispiel #23
0
    def getMessge(self, level, message, log_type, log_id):
        self.index += 1
        if log_type:
            self.log_type = log_type
        self.log_id = log_id
        try:
            err_msg = ''
            json.dumps(message)
        except:
            message = str(message)
            err_msg = unicode_full_stack()

        # message = {
        # 	"msg": self.msg,
        # 	"service_name": self.service_name,
        # 	"type": self.type,
        # 	"uuid": self.id,
        # 	"index": self.index,
        # 	"xmessage": message,  # 兼容elk,字段名不能为message
        # 	"json_error": err_msg
        # }

        message = {
            "msg": self.msg,
            "service_name": self.service_name,
            "type": self.log_type,
            "uuid": self.log_id,
            "index": self.index,
            "xmessage": message,  # 兼容elk,字段名不能为message
            "json_error": err_msg,
            "level": level,
            "datetime": datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
            'version': self.version
        }

        # log = json.dumps(message) + ":::" + pson.dumps(message)

        # log = json.dumps({
        # 	'json_log': message,
        # 	# 'pson_log': pson.dumps(message, stringify=False)
        # 	'pson_log': pson.dumps(message)
        # })
        log = pson.dumps(message)
        return log
Beispiel #24
0
    def _poll_response(self):
        """
		发送快递100 订阅请求,返回成功与否信息
		"""
        # post中的param的json

        param_json_data = {
            'Code':
            self.express_company_name_kdniao,
            'Item': [
                {
                    'No': str(self.express_number),
                    'Bk': str(self.express.id)
                },
            ]
        }
        DataSign = self._encrypt(str(param_json_data))
        params = {
            "RequestData": param_json_data,
            "EBusinessID": self.Business_id,
            "RequestType": "1005",
            "DataSign": DataSign,
            "DataType": "2"
        }

        #将数据处理为RequestData=xxx&DataType=xxx这种格式的
        param_str = urllib.urlencode(params)

        verified_result = ''
        try:
            verified_result = post(KdniaoExpressConfig.req_url, param_str)
            watchdog.info(
                u"发送快递鸟 订阅请求 url: {},/n param_data: {}, /n response: {}".
                format(KdniaoExpressConfig.req_url, param_str,
                       verified_result.decode('utf-8')),
                self.express_config.watchdog_type)
        except:
            watchdog.error(
                u'发送快递鸟 订阅请求 失败,url:{},data:{},原因:{}'.format(
                    KdniaoExpressConfig.req_url, param_str,
                    unicode_full_stack()), self.express_config.watchdog_type)

        return verified_result
Beispiel #25
0
    def update_order_status(self, data, orders):
        status = data.get("State")

        #status 1:已取件2:在途中 3:签收
        for order in orders:
            try:
                if int(
                        status
                ) == self.express_config.STATE_SIGNED and order.status == 4:
                    mall_api.update_order_status(user=None,
                                                 action=u'finish-系统',
                                                 order=order)

            except:
                watchdog_error(
                    u'修改订单状态失败,该订单已签收,order_id:{}, 原因:{}'.format(
                        order.id, unicode_full_stack()),
                    self.express_config.watchdog_type)

        return True
    def process_request(self, req, resp):
        if req.path == "/notifications":
            if not mns_util.mns_authenticate(req):
                self.raise_response({"errmsg": "Access Forbidden!"},
                                    falcon.HTTP_403)

            msg = mns_util.NotifyMessage()
            msg_type = "XML"
            body = req.stream.read()
            # print ">>>>>>>>>>", body
            if not mns_util.validate_body(body, msg, msg_type):
                self.raise_response({"errmsg": "Invalid Notify Message"},
                                    falcon.HTTP_400)
            msg = msg.to_dict()
            logging.info(
                "Receive Message Succeed! MessageBody:%s MessageID:%s" %
                (msg['message'], msg['message_id']))

            message = base64.decodestring(msg['message'])
            data = json.loads(message)
            function_name = data['name']
            func = handler_register.find_message_handler(function_name)
            status = falcon.HTTP_500
            if func:
                try:
                    response = func(data['data'], msg)
                    logging.info("service response: {}".format(response))
                    status = falcon.HTTP_200
                except:
                    logging.info(u"Service Exception: {}".format(
                        unicode_full_stack()))
            else:
                logging.info(
                    u"Error: no such service found : {}".format(function_name))

            # query_string = urllib.urlencode({'message': recv_msg['message']})
            # raise redirects.HTTPTemporaryRedirect("/notifications/HTTPEndpoint?{}".format(query_string))
            # resp = Resource.use('notifications', 'localhost:4180').post({'resource': 'HTTPEndpoint', 'data': {'message': recv_msg['message']} })
            self.raise_response({}, status)
    def update_order_status(self, json, orders):
        status = json.get(self.express_params.LAST_RESULT,
                          {}).get(self.express_params.STATE)
        # 状态为 3已签收,并且order的状态为 已发货
        # 将状态改为 已完成
        for order in orders:
            try:
                if int(
                        status
                ) == self.express_config.STATE_SIGNED and order.status == 4:
                    mall_api.update_order_status(user=None,
                                                 action=u'finish-系统',
                                                 order=order)
                    # order.status = 5
                    # order.save()
            except:
                watchdog_error(
                    u'修改订单状态失败,该订单已签收,order_id:{}, 原因:{}'.format(
                        order.id, unicode_full_stack()),
                    self.express_config.watchdog_type)

        return True
Beispiel #28
0
    def getMessge(self, message, user_id, type=None):
        self.index += 1
        if type:
            self.type = type

        try:
            err_msg = ''
            json.dumps(message)
        except:
            message = str(message)
            err_msg = unicode_full_stack()

        message = {
            "msg": self.msg,
            "service_name": self.service_name,
            "type": self.type,
            "uuid": self.id,
            "index": self.index,
            "message": message,
            "user_id": user_id,
            "json_error": err_msg
        }
        return json.dumps(message)
Beispiel #29
0
def upload_qrcode_url_to_upyun(http_image_url, file_name):
    if settings.MODE == 'develop':
        return '/static%s' % upyun_path

    up = upyun.UpYun(BUCKETNAME,
                     USERNAME,
                     PASSWORD,
                     timeout=300,
                     endpoint=upyun.ED_AUTO)
    #headers = {"x-gmkerl-rotate": "180"}
    try:
        res = urllib2.urlopen(http_image_url).read()
        result = up.put('/qrcode/%s' % file_name, res)
        if result:
            return qr_image_path % (BUCKETNAME, file_name)
        else:
            return http_image_url
    except:
        notify_message = u"upload_qrcode_url_to_upyun error {}".format(
            unicode_full_stack())
        watchdog.error(notify_message)
        return http_image_url
    return None
    def save_express_details(self, json):
        # 删除之前的
        if self.order_id > 0:
            ExpressDetail.objects.filter(order_id=self.order_id).delete()
        else:
            ExpressDetail.objects.filter(express_id=self.express.id).delete()

        try:
            express_details = json.get(self.express_params.LAST_RESULT,
                                       {}).get('data', {})
            display_index = 1
            express_id = self.express.id if self.express else -1
            for detail in express_details:
                ExpressDetail.objects.create(order_id=self.order_id,
                                             express_id=express_id,
                                             context=detail['context'],
                                             time=detail['time'],
                                             ftime=detail['ftime'],
                                             status=detail.get('status', ''),
                                             display_index=display_index)
                display_index = display_index + 1

            watchdog_info(
                u'保存快递100的 推送数据成功,url:{}, json:{}'.format(
                    self.callback_post_request.get_full_path(), json),
                self.express_config.watchdog_type)
            self.express.receive_count = self.express.receive_count + 1
            self.express.save()

            return True
        except:
            watchdog_error(
                u'保存快递100的 推送数据失败,url:{}, json:{}, 原因:{}'.format(
                    self.callback_post_request.get_full_path(), json,
                    unicode_full_stack()), self.express_config.watchdog_type)
            return False