def service_logistics(headers, order_id, item_id=None, service_id=None, project_code=44030011): url = '/aftersales/goods/logistics' try: log.info('service_logistics() --> begin , order_id --> %s ' % order_id) if not item_id: item_info = order_item.order_item(order_id=order_id) item_id = item_info['id'] service_id = item_info['current_service'] data = { "project_code": project_code, "order_id": order_id, "item_id": item_id, "after_service_id": service_id, "express_company_code": "SHUNFENG", "tracking_number": "123456abc", "imgs": [] } resp = request(method='post', headers=headers, url=host + url, json=data) return resp except Exception as e: log.error('service_logistics() failed :', e)
def service_reason( headers, apply_type, order_id, item_id=None, project_code=44030011, ): url = '/aftersales/service/goods' try: log.info('service_reason() --> begin , order_id --> %s ' % order_id) if apply_type not in [ 'REFUNDONLY', 'RETURNPRODUCTANDREFUND', 'CHANGEPRODUCT' ]: log.error( f'can only [REFUNDONLY, RETURNPRODUCTANDREFUND, CHANGEPRODUCT] ,but [{apply_type}]' ) return if not item_id: item_info = order_item.order_item(order_id=order_id) item_id = item_info['id'] params = { 'project_code': project_code, 'order_id': order_id, 'item_id': item_id, 'type': apply_type } resp = request(method='get', headers=headers, url=host + url, params=params) return resp except Exception as e: log.error('service_detail() failed :', e)
def get_service_reason(project_code, order_id, service_type): url = '/aftersales/service/goods' item_id = order_item(order_id=order_id, key='id') params = {'project_code': project_code, 'order_id': order_id, 'item_id': item_id, 'type': service_type} log.info('method : get_service_reason() --> begin ') result = request(method='get', url=host + url, params=params) log.info('method : get_service_reason() --> end ') return result
def input_logistics(headers, order_id, project_code='44030011', express_company='YUANTONG', express_no='0000001'): # 填写回寄的快递单 url = '/aftersales/goods/logistics' item_id = order_item(order_id=order_id, key='id') service_id = order_item(order_id=order_id, key='current_service') data = { "project_code": project_code, "order_id": order_id, "item_id": item_id, "after_service_id": service_id, "express_company_code": express_company, "tracking_number": express_no, "imgs": [] } log.info('method : return_logistics_info() --> begin') resp = request(method='post', headers=headers, url=host + url, json=data) log.info('method : return_logistics_info() --> end') return resp
def service_get_logistics(headers, order_id, project_code='44030011'): # 获取物流公司 url = '/aftersales/logistics/info' service_id = order_item(order_id=order_id, key='current_service') params = {'project_code': project_code, 'order_id': order_id, 'service_id': service_id} log.info('method : service_get_logistics() --> begin') resp = request(method='get', headers=headers, url=host + url, params=params) log.info('method : service_get_logistics() --> end') return resp
def service_list(order_id, project_code='44030011'): # 售后详情 url = '/aftersales/services/list' item_id = order_item(order_id=order_id, key='id') params = {'project_code': project_code, 'order_id': order_id, 'item_id': item_id} log.info('method : service_list() --> begin') resp = request(method='get', url=host + url, params=params) log.info('method : service_list() --> end') return resp
def apply_service(headers, order_id, project_code=44030052, service_type='REFUNDONLY'): # 申請售後 ,RETURNPRODUCTANDREFUND--退货退款 CHANGEPRODUCT--换货 REFUNDONLY--仅退款 resp_result = get_service_reason(project_code=project_code, order_id=order_id, service_type=service_type) if resp_result.json().get('result') == '不支持的售后类型': log.error('method get_service_reason() occurred error ,method apply_service(): run over') return else: reason = resp_result.json().get('result').get('after_service_reason')[0].get('value') # 默认获取第一个原因 url = '/aftersales/service/apply' # 判断发起的售后是否合理 order_status = orders(order_id=order_id, key='order_status') if order_status in ('PAID', 'DELIVERED', 'RECEIVED'): if order_status == 'PAID' and service_type != 'REFUNDONLY': log.error(f'order_status : {order_status} ,can not apply service : {service_type}') return else: log.error( f'only order_status in [PAID, DELIVERED, RECEIVED] can apply service ,current order_status : {order_status}') return item = order_item(order_id=order_id, key='id') item_price = int(order_item(order_id=order_id, key='price') * 100) item_qty = order_item(order_id=order_id, key='quantity') shipping = int(orders(order_id=order_id, key='shipping') * 100) if service_type == 'REFUNDONLY': price = item_price * item_qty + shipping else: price = item_price * item_qty data = { "project_code": project_code, "type": service_type, "order_id": order_id, "item_id": item, "imgs": [], "after_service_reason": reason, "illustration": "Test", "price": price } log.info('method : apply_service() --> begin') resp = request(method='post', url=host + url, headers=headers, json=data) log.info('method : apply_service() --> end') return resp
def service_detail(headers, order_id, item_id=None, project_code=44030011): url = '/aftersales/services/list' try: log.info('service_detail() --> begin , order_id --> %s ' % order_id) if not item_id: item_info = order_item.order_item(order_id=order_id) item_id = item_info['id'] params = { "project_code": project_code, "order_id": order_id, "item_id": item_id } resp = request(method='get', headers=headers, url=host + url, params=params) return resp except Exception as e: log.error('service_detail() failed :', e)
def service_apply(headers, order_id, project_code=44030011, apply_type='RETURNPRODUCTANDREFUND', item_id=None): url = '/aftersales/service/apply' log.info('service_apply() --> begin , order_id --> %s ' % order_id) try: # apply_type类型和原因 my_apply = { 'REFUNDONLY': 'NOTRECEIVED', 'RETURNPRODUCTANDREFUND': 'DELIVERYMISTAKE', 'CHANGEPRODUCT': 'QUALITYPROBLEM' } if apply_type in my_apply.keys(): after_service_reason = my_apply.get(apply_type) else: log.error( 'only [REFUNDONLY,RETURNPRODUCTANDREFUND,CHANGEPRODUCT] can select' ) return # 获取item_id、item_status、单价、数量,并设置申请退款金额(全额) if not item_id: item = order_item.order_item(order_id=order_id) item_id = item['id'] item_status = item.get('item_status') item_price = item.get('price') item_qty = item.get('quantity') price = int(item_price * 100) * item_qty else: item = order_item.order_item(order_id=order_id, item_id=item_id) item_status = item.get('item_status') item_price = item.get('price') item_qty = item.get('quantity') price = int(item_price * 100) * item_qty # 根据item_status判断发起的售后是否合理 if item_status in ('PAID', 'DELIVERED', 'RECEIVED'): if item_status == 'PAID' and apply_type != 'REFUNDONLY': log.error( f'item_status : [PAID] can not apply service : [REFUNDONLY]' ) return elif item_status in ('DELIVERED', 'RECEIVED') and apply_type not in ( 'RETURNPRODUCTANDREFUND', 'CHANGEPRODUCT'): log.error( f'only item_status : [PAID] can not apply service : [REFUNDONLY] , but current item_status :{item_status}' ) return else: log.error( f'only item_status in [PAID, DELIVERED, RECEIVED] can apply service ,current item_status : {item_status}' ) return data = { "project_code": project_code, "type": apply_type, "order_id": order_id, "item_id": item_id, "imgs": [], "after_service_reason": after_service_reason, "illustration": "Test", "price": price } resp = request(method='post', headers=headers, url=host + url, json=data) if resp.status_code == 200 and resp.json().get('code') == 0: log.info('service_apply() success') return resp else: log.error('service_apply() failed --> ' + resp.text) except Exception as e: log.error('service_apply() failed :', e)