:art: sendtemplatemessage

huangqimin001 3 anni fa
parent
commit
f2e551e63c
2 ha cambiato i file con 84 aggiunte e 19 eliminazioni
  1. 78 18
      api/maintenance_views.py
  2. 6 1
      maintenance/models.py

+ 78 - 18
api/maintenance_views.py

@@ -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()

+ 6 - 1
maintenance/models.py

@@ -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: