@@ -10,13 +10,18 @@ from django_response import response |
||
10 | 10 |
from paginator import pagination |
11 | 11 |
from TimeConvert import TimeConvert as tc |
12 | 12 |
|
13 |
+from account.models import UserInfo |
|
13 | 14 |
from maintenance.models import ExpressCompanyInfo, MaintenaceInfo |
15 |
+from pre.custom_message import sendtemplatemessage |
|
14 | 16 |
from utils.admin_utils import is_admin, is_maintenanceman |
15 | 17 |
from utils.error.errno_utils import MaintenanceStatusCode |
16 | 18 |
from utils.kuaidi.subscribe import KuaiDi100 as KuaiDi100Subscribe |
17 | 19 |
from utils.kuaidi.synquery import KuaiDi100 |
18 | 20 |
|
19 | 21 |
|
22 |
+WECHAT = settings.WECHAT |
|
23 |
+ |
|
24 |
+ |
|
20 | 25 |
@logit |
21 | 26 |
def maintenance_add(request): |
22 | 27 |
user_id = request.POST.get('user_id', '') |
@@ -31,7 +36,7 @@ def maintenance_add(request): |
||
31 | 36 |
point_name = request.POST.get('point_name', '') |
32 | 37 |
express_name = request.POST.get('express_name', '') |
33 | 38 |
tracking_number = request.POST.get('tracking_number', '') |
34 |
- maintenance_status = request.POST.get('maintenance_status', u'寄出运送中') |
|
39 |
+ maintenance_status = request.POST.get('maintenance_status', MaintenaceInfo.TRACKING_TO_DESPATCH) |
|
35 | 40 |
|
36 | 41 |
try: |
37 | 42 |
company = ExpressCompanyInfo.objects.get(name=express_name, status=True) |
@@ -100,7 +105,7 @@ def maintenance_update(request): |
||
100 | 105 |
tracking_number = request.POST.get('tracking_number', '') |
101 | 106 |
back_express_name = request.POST.get('back_express_name', '') |
102 | 107 |
back_tracking_number = request.POST.get('back_tracking_number', '') |
103 |
- maintenance_status = request.POST.get('maintenance_status', u'寄出运送中') |
|
108 |
+ maintenance_status = request.POST.get('maintenance_status', MaintenaceInfo.TRACKING_TO_DESPATCH) |
|
104 | 109 |
|
105 | 110 |
try: |
106 | 111 |
maintenance = MaintenaceInfo.objects.get(id=maintenance_id, status=True) |
@@ -112,6 +117,11 @@ def maintenance_update(request): |
||
112 | 117 |
|
113 | 118 |
old_tracking_number = maintenance.tracking_number |
114 | 119 |
old_back_tracking_number = maintenance.back_tracking_number |
120 |
+ old_maintenance_status = maintenance.maintenance_status |
|
121 |
+ |
|
122 |
+ # 新增 `back_tracking_number` 之后,更新维修状态 |
|
123 |
+ if not maintenance_status and not old_back_tracking_number and back_tracking_number: |
|
124 |
+ maintenance_status = MaintenaceInfo.TRACKING_FIXED_BACK |
|
115 | 125 |
|
116 | 126 |
if name: |
117 | 127 |
maintenance.name = name |
@@ -148,7 +158,8 @@ def maintenance_update(request): |
||
148 | 158 |
if maintenance_status: |
149 | 159 |
maintenance.maintenance_status = maintenance_status |
150 | 160 |
maintenance_status_at = maintenance.maintenance_status_at |
151 |
- maintenance_status_at[maintenance_status] = tc.utc_datetime() |
|
161 |
+ if maintenance_status not in maintenance_status_at: |
|
162 |
+ maintenance_status_at[maintenance_status] = tc.utc_datetime() |
|
152 | 163 |
maintenance.maintenance_status_at = maintenance_status_at |
153 | 164 |
maintenance.save() |
154 | 165 |
|
@@ -157,6 +168,9 @@ def maintenance_update(request): |
||
157 | 168 |
if back_tracking_number and back_tracking_number != old_back_tracking_number: |
158 | 169 |
maintenance_tracking_info_subscribe(maintenance, 'back_tracking') |
159 | 170 |
|
171 |
+ if maintenance_status != old_maintenance_status: |
|
172 |
+ maintenance_status_update_sendtemplatemessage(maintenance) |
|
173 |
+ |
|
160 | 174 |
return response() |
161 | 175 |
|
162 | 176 |
|
@@ -197,7 +211,43 @@ def maintenance_detail(request): |
||
197 | 211 |
}) |
198 | 212 |
|
199 | 213 |
|
200 |
-def is_tracking_signed(tracking_info): |
|
214 |
+def maintenance_status_update_sendtemplatemessage(maintenance): |
|
215 |
+ try: |
|
216 |
+ user = UserInfo.objects.get(user_id=maintenance.user_id, status=True) |
|
217 |
+ except UserInfo.DoesNotExist: |
|
218 |
+ return |
|
219 |
+ |
|
220 |
+ # Send template_message |
|
221 |
+ # data = { |
|
222 |
+ # "first": { |
|
223 |
+ # "value": u'你的补码申请已通过,请点击消息绑定您的电子保修卡', |
|
224 |
+ # "color": "#173177" |
|
225 |
+ # }, |
|
226 |
+ # "keyword1": { |
|
227 |
+ # "value": log.name, |
|
228 |
+ # "color": "#173177" |
|
229 |
+ # }, |
|
230 |
+ # "keyword2": { |
|
231 |
+ # "value": log.model_name, |
|
232 |
+ # "color": "#173177" |
|
233 |
+ # }, |
|
234 |
+ # "keyword3": { |
|
235 |
+ # "value": log.sn, |
|
236 |
+ # "color": "#173177" |
|
237 |
+ # }, |
|
238 |
+ # "remark": { |
|
239 |
+ # "value": u'感谢您的使用', |
|
240 |
+ # "color": "#173177" |
|
241 |
+ # } |
|
242 |
+ # } |
|
243 |
+ # |
|
244 |
+ # wxcfg = WECHAT.get('MINIAPP', {}) |
|
245 |
+ # appid = wxcfg.get('appID') |
|
246 |
+ # |
|
247 |
+ # sendtemplatemessage(openid=user.openid, template_id=settings.TEMPLATE_ID_COMPLEMENT, data=data, miniappid=appid, minipagepath='/pages/register/consumer/consumer?q={}&marketcode=1'.format(ciphertext)) |
|
248 |
+ |
|
249 |
+ |
|
250 |
+def is_maintenance_tracking_signed(tracking_info): |
|
201 | 251 |
if not tracking_info: |
202 | 252 |
return False |
203 | 253 |
items = tracking_info.get('data', []) |
@@ -206,6 +256,28 @@ def is_tracking_signed(tracking_info): |
||
206 | 256 |
return items[0].get('status') == u'签收' |
207 | 257 |
|
208 | 258 |
|
259 |
+def maintenance_tracking_info_update(maintenance, type_, tracking_info): |
|
260 |
+ old_maintenance_status = maintenance.maintenance_status |
|
261 |
+ is_tracking_signed = is_maintenance_tracking_signed(tracking_info) |
|
262 |
+ if type_ == 'tracking': |
|
263 |
+ maintenance.tracking_info = tracking_info |
|
264 |
+ maintenance.tracking_signed = is_tracking_signed |
|
265 |
+ maintenance_status = MaintenaceInfo.TRACKING_SIGNED_FIXING |
|
266 |
+ else: |
|
267 |
+ maintenance.back_tracking_info = tracking_info |
|
268 |
+ maintenance.back_tracking_signed = is_tracking_signed |
|
269 |
+ maintenance_status = MaintenaceInfo.TRACKING_BACK_SIGNED |
|
270 |
+ maintenance.maintenance_status = maintenance_status |
|
271 |
+ maintenance_status_at = maintenance.maintenance_status_at |
|
272 |
+ if maintenance_status not in maintenance_status_at: |
|
273 |
+ maintenance_status_at[maintenance_status] = tc.utc_datetime() |
|
274 |
+ maintenance.maintenance_status_at = maintenance_status_at |
|
275 |
+ maintenance.save() |
|
276 |
+ |
|
277 |
+ if maintenance_status != old_maintenance_status: |
|
278 |
+ maintenance_status_update_sendtemplatemessage(maintenance) |
|
279 |
+ |
|
280 |
+ |
|
209 | 281 |
@logit |
210 | 282 |
def maintenance_tracking_info(request): |
211 | 283 |
maintenance_id = request.POST.get('maintenance_id', '') |
@@ -231,13 +303,7 @@ def maintenance_tracking_info(request): |
||
231 | 303 |
tracking_info = {} |
232 | 304 |
|
233 | 305 |
if tracking_info: |
234 |
- if type_ == 'tracking': |
|
235 |
- maintenance.tracking_info = tracking_info |
|
236 |
- maintenance.tracking_signed = is_tracking_signed(tracking_info) |
|
237 |
- else: |
|
238 |
- maintenance.back_tracking_info = tracking_info |
|
239 |
- maintenance.back_tracking_signed = is_tracking_signed(tracking_info) |
|
240 |
- maintenance.save() |
|
306 |
+ maintenance_tracking_info_update(maintenance, type_, tracking_info) |
|
241 | 307 |
|
242 | 308 |
return response(data={ |
243 | 309 |
'type': type_, |
@@ -283,12 +349,6 @@ def maintenance_tracking_info_callback(request): |
||
283 | 349 |
except MaintenaceInfo.DoesNotExist: |
284 | 350 |
return response(MaintenanceStatusCode.MAINTENACE_NOT_FOUND) |
285 | 351 |
|
286 |
- if type_ == 'tracking': |
|
287 |
- maintenance.tracking_info = tracking_info |
|
288 |
- maintenance.tracking_signed = is_tracking_signed(tracking_info) |
|
289 |
- else: |
|
290 |
- maintenance.back_tracking_info = tracking_info |
|
291 |
- maintenance.back_tracking_signed = is_tracking_signed(tracking_info) |
|
292 |
- maintenance.save() |
|
352 |
+ maintenance_tracking_info_update(maintenance, type_, tracking_info) |
|
293 | 353 |
|
294 | 354 |
return response() |
@@ -54,6 +54,11 @@ class ExpressCompanyInfo(BaseModelMixin): |
||
54 | 54 |
|
55 | 55 |
|
56 | 56 |
class MaintenaceInfo(BaseModelMixin): |
57 |
+ TRACKING_TO_DESPATCH = u'寄出运送中' |
|
58 |
+ TRACKING_SIGNED_FIXING = u'已签收修理中' |
|
59 |
+ TRACKING_FIXED_BACK = u'已修复寄回' |
|
60 |
+ TRACKING_BACK_SIGNED = u'寄回签收' |
|
61 |
+ |
|
57 | 62 |
user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True) |
58 | 63 |
|
59 | 64 |
name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'姓名') |
@@ -81,7 +86,7 @@ class MaintenaceInfo(BaseModelMixin): |
||
81 | 86 |
back_tracking_signed = models.BooleanField(_(u'back_tracking_signed'), default=False, help_text=u'寄回快递是否已签收') |
82 | 87 |
|
83 | 88 |
# 寄出运送中、已签收修理中、已修复寄回、寄回签收 |
84 |
- maintenance_status = models.CharField(_(u'maintenance_status'), max_length=8, default=u'寄出运送中', help_text=u'维修状态') |
|
89 |
+ maintenance_status = models.CharField(_(u'maintenance_status'), max_length=8, default=TRACKING_TO_DESPATCH, help_text=u'维修状态') |
|
85 | 90 |
maintenance_status_at = JSONField(_(u'maintenance_status_at'), blank=True, null=True, default={}, help_text=u'维修状态变更时间') |
86 | 91 |
|
87 | 92 |
class Meta: |