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