@@ -13,6 +13,7 @@ from TimeConvert import TimeConvert as tc |
||
| 13 | 13 |
from maintenance.models import ExpressCompanyInfo, MaintenaceInfo |
| 14 | 14 |
from utils.admin_utils import is_admin, is_maintenanceman |
| 15 | 15 |
from utils.error.errno_utils import MaintenanceStatusCode |
| 16 |
+from utils.kuaidi.subscribe import KuaiDi100 as KuaiDi100Subscribe |
|
| 16 | 17 |
from utils.kuaidi.synquery import KuaiDi100 |
| 17 | 18 |
|
| 18 | 19 |
|
@@ -55,6 +56,8 @@ def maintenance_add(request): |
||
| 55 | 56 |
maintenance_status_at={maintenance_status: tc.utc_datetime()}
|
| 56 | 57 |
) |
| 57 | 58 |
|
| 59 |
+ maintenance_tracking_info_subscribe(maintenance, 'tracking') |
|
| 60 |
+ |
|
| 58 | 61 |
return response(data={
|
| 59 | 62 |
'maintenance_id': maintenance.id, |
| 60 | 63 |
}) |
@@ -107,6 +110,9 @@ def maintenance_update(request): |
||
| 107 | 110 |
if user_id != maintenance.user_id and not is_admin(brand_id, admin_id): |
| 108 | 111 |
return response(MaintenanceStatusCode.MAINTENACE_PERMISSION_DENIED) |
| 109 | 112 |
|
| 113 |
+ old_tracking_number = maintenance.tracking_number |
|
| 114 |
+ old_back_tracking_number = maintenance.back_tracking_number |
|
| 115 |
+ |
|
| 110 | 116 |
if name: |
| 111 | 117 |
maintenance.name = name |
| 112 | 118 |
if phone: |
@@ -146,6 +152,11 @@ def maintenance_update(request): |
||
| 146 | 152 |
maintenance.maintenance_status_at = maintenance_status_at |
| 147 | 153 |
maintenance.save() |
| 148 | 154 |
|
| 155 |
+ if tracking_number and tracking_number != old_tracking_number: |
|
| 156 |
+ maintenance_tracking_info_subscribe(maintenance, 'tracking') |
|
| 157 |
+ if back_tracking_number and back_tracking_number != old_back_tracking_number: |
|
| 158 |
+ maintenance_tracking_info_subscribe(maintenance, 'back_tracking') |
|
| 159 |
+ |
|
| 149 | 160 |
return response() |
| 150 | 161 |
|
| 151 | 162 |
|
@@ -232,3 +243,25 @@ def maintenance_tracking_info(request): |
||
| 232 | 243 |
'type': type_, |
| 233 | 244 |
'tracking_info': tracking_info, |
| 234 | 245 |
}) |
| 246 |
+ |
|
| 247 |
+ |
|
| 248 |
+def maintenance_tracking_info_subscribe(maintenance, type_): |
|
| 249 |
+ callbackurl = '{}/maintenance/tracking/info/callback?maintenance_id={}&type={}'.format(settings.DOMAIN, maintenance.pk, type_)
|
|
| 250 |
+ if type_ == 'tracking': |
|
| 251 |
+ express_com = maintenance.express_com |
|
| 252 |
+ tracking_number = maintenance.tracking_number |
|
| 253 |
+ phone = maintenance.phone |
|
| 254 |
+ else: |
|
| 255 |
+ express_com = maintenance.back_express_com |
|
| 256 |
+ tracking_number = maintenance.back_tracking_number |
|
| 257 |
+ phone = maintenance.phone |
|
| 258 |
+ res = KuaiDi100Subscribe().submit(express_com, tracking_number, phone=phone, callbackurl=callbackurl) |
|
| 259 |
+ print(res) |
|
| 260 |
+ |
|
| 261 |
+ |
|
| 262 |
+@logit |
|
| 263 |
+def maintenance_tracking_info_callback(request): |
|
| 264 |
+ maintenance_id = request.GET.get('maintenance_id', '')
|
|
| 265 |
+ type_ = request.GET.get('type', 'tracking') # tracking / back_tracking
|
|
| 266 |
+ |
|
| 267 |
+ return response() |
@@ -279,4 +279,5 @@ urlpatterns += [ |
||
| 279 | 279 |
url(r'^admin/maintenance/list$', maintenance_views.maintenance_list, name='maintenance_list'), |
| 280 | 280 |
|
| 281 | 281 |
url(r'^maintenance/tracking/info$', maintenance_views.maintenance_tracking_info, name='maintenance_tracking_info'), |
| 282 |
+ url(r'^maintenance/tracking/info/callback$', maintenance_views.maintenance_tracking_info_callback, name='maintenance_tracking_info_callback'), |
|
| 282 | 283 |
] |
@@ -3,14 +3,15 @@ |
||
| 3 | 3 |
import json |
| 4 | 4 |
|
| 5 | 5 |
import requests |
| 6 |
+from django.conf import settings |
|
| 6 | 7 |
|
| 7 | 8 |
|
| 8 | 9 |
class KuaiDi100: |
| 9 | 10 |
def __init__(self): |
| 10 |
- self.key = '' # TODO 客户授权key |
|
| 11 |
+ self.key = settings.KUAIDI00.get('key', '') # TODO 客户授权key
|
|
| 11 | 12 |
self.url = 'https://poll.kuaidi100.com/poll' # 请求地址 |
| 12 | 13 |
|
| 13 |
- def submit(self, com, num, phone, ship_from, ship_to): |
|
| 14 |
+ def submit(self, com, num, phone=None, ship_from=None, ship_to=None, callbackurl=None): |
|
| 14 | 15 |
""" |
| 15 | 16 |
物流轨迹订阅 |
| 16 | 17 |
:param com: 快递公司编码 |
@@ -27,7 +28,8 @@ class KuaiDi100: |
||
| 27 | 28 |
'to': ship_to, |
| 28 | 29 |
'key': self.key, |
| 29 | 30 |
'parameters': {
|
| 30 |
- 'callbackurl': 'https://www.baidu.com/kd100/callback', # 回调接口的地址。如果需要在推送信息回传自己业务参数,可以在回调地址URL后面拼接上去,例如:https://www.baidu.com/kd100/callback?orderId=123 |
|
| 31 |
+ 'callbackurl': callbackurl, |
|
| 32 |
+ # 'callbackurl': 'https://www.baidu.com/kd100/callback', # 回调接口的地址。如果需要在推送信息回传自己业务参数,可以在回调地址URL后面拼接上去,例如:https://www.baidu.com/kd100/callback?orderId=123 |
|
| 31 | 33 |
'salt': None, # 签名用随机字符串。32位自定义字符串。添加该参数,则推送的时候会增加sign给贵司校验消息的可靠性 |
| 32 | 34 |
'resultv2': '1', # 添加此字段表示开通行政区域解析功能。0:关闭(默认),1:开通行政区域解析功能 |
| 33 | 35 |
'autoCom': '0', # 添加此字段且将此值设为1,则表示开始智能判断单号所属公司的功能,开启后,company字段可为空,即只传运单号(number字段),我方收到后会根据单号判断出其所属的快递公司(即company字段)。建议只有在无法知道单号对应的快递公司(即company的值)的情况下才开启此功能 |
@@ -48,5 +50,5 @@ class KuaiDi100: |
||
| 48 | 50 |
return requests.post(self.url, req_params).text # 发送请求 |
| 49 | 51 |
|
| 50 | 52 |
|
| 51 |
-result = KuaiDi100().submit('yuantong', 'YT9693083639795', '', '江门市', '深圳市')
|
|
| 52 |
-print(result) |
|
| 53 |
+# result = KuaiDi100().submit('yuantong', 'YT9693083639795', '', '江门市', '深圳市')
|
|
| 54 |
+# print(result) |