|  |  | @@ -275,21 +275,26 @@ def is_maintenance_tracking_signed(tracking_info): | 
            
            
              | 275 | 275 |  def maintenance_tracking_info_update(maintenance, type_, tracking_info): | 
            
            
              | 276 | 276 |      old_maintenance_status = maintenance.maintenance_status | 
            
            
              | 277 | 277 |      is_tracking_signed = is_maintenance_tracking_signed(tracking_info) | 
            
            
              |  | 278 | + | 
            
            
              |  | 279 | +    # 状态流转,TRACKING_TO_DESPATCH -> TRACKING_SIGNED_FIXING -> TRACKING_FIXED_BACK -> TRACKING_BACK_SIGNED | 
            
            
              |  | 280 | +    # 需判断快递签收再更新维修状态 | 
            
            
              | 278 | 281 |      if type_ == 'tracking': | 
            
            
              | 279 | 282 |          maintenance.tracking_info = tracking_info | 
            
            
              | 280 | 283 |          maintenance.tracking_signed = is_tracking_signed | 
            
            
              | 281 |  | -        if is_tracking_signed: | 
            
            
              |  | 284 | +        if is_tracking_signed and old_maintenance_status == MaintenaceInfo.TRACKING_TO_DESPATCH: | 
            
            
              | 282 | 285 |              maintenance_status = MaintenaceInfo.TRACKING_SIGNED_FIXING | 
            
            
              | 283 | 286 |      else: | 
            
            
              | 284 | 287 |          maintenance.back_tracking_info = tracking_info | 
            
            
              | 285 | 288 |          maintenance.back_tracking_signed = is_tracking_signed | 
            
            
              | 286 |  | -        if is_tracking_signed: | 
            
            
              |  | 289 | +        if is_tracking_signed and old_maintenance_status == MaintenaceInfo.TRACKING_FIXED_BACK: | 
            
            
              | 287 | 290 |              maintenance_status = MaintenaceInfo.TRACKING_BACK_SIGNED | 
            
            
              | 288 |  | -    maintenance.maintenance_status = maintenance_status | 
            
            
              | 289 |  | -    maintenance_status_at = maintenance.maintenance_status_at | 
            
            
              | 290 |  | -    if maintenance_status not in maintenance_status_at: | 
            
            
              | 291 |  | -        maintenance_status_at[maintenance_status] = tc.utc_datetime() | 
            
            
              | 292 |  | -    maintenance.maintenance_status_at = maintenance_status_at | 
            
            
              |  | 291 | +     | 
            
            
              |  | 292 | +    if maintenance_status: | 
            
            
              |  | 293 | +        maintenance.maintenance_status = maintenance_status | 
            
            
              |  | 294 | +        maintenance_status_at = maintenance.maintenance_status_at | 
            
            
              |  | 295 | +        if maintenance_status not in maintenance_status_at: | 
            
            
              |  | 296 | +            maintenance_status_at[maintenance_status] = tc.utc_datetime() | 
            
            
              |  | 297 | +        maintenance.maintenance_status_at = maintenance_status_at | 
            
            
              | 293 | 298 |      maintenance.save() | 
            
            
              | 294 | 299 |   | 
            
            
              | 295 | 300 |      if maintenance_status != old_maintenance_status: |