upgrade_clean_duplicated_groups.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import os, sys
  4. PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..')
  5. sys.path.insert(0, PROJECT_ROOT)
  6. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'configs.production')
  7. from script.base import init_env
  8. init_env(interactive = False)
  9. from apps.web.device.models import Group
  10. from apps.web.device.models import Device
  11. from apps.web.user.models import RechargeRecord, ConsumeRecord, CardConsumeRecord, VCardConsumeRecord, \
  12. CardRechargeOrder, CardRechargeRecord, MyUser
  13. from apps.web.dealer.models import VirtualCard
  14. def reload_all():
  15. dealers = Dealer.objects.all()
  16. for dealer in dealers:
  17. Dealer.get_dealer(str(dealer.id))
  18. Group.get_own_and_partner_group_list(str(dealer.id))
  19. codes = DriverCode.objects.all()
  20. for code in codes:
  21. DriverCode.get_driver_adapter(code)
  22. groups = Groups.objects.all()
  23. for group in groups:
  24. Group.get_group(str(group.id))
  25. duplicate_records = Group.get_collection().aggregate([
  26. {'$group': {
  27. '_id': {'firstField': "$ownerId", "secondField": "$groupName"},
  28. 'uniqueIds': {'$addToSet': "$_id"},
  29. 'count': {'$sum': 1}
  30. }},
  31. {'$match': {
  32. 'count': {'$gt': 1}
  33. }}
  34. ], allowDiskUse = True)
  35. for duplicate_record in duplicate_records:
  36. if duplicate_record['count'] >= 2:
  37. print "duplicate ids = %s" % str(duplicate_record['uniqueIds'])
  38. lived = duplicate_record['uniqueIds'][0]
  39. deleted_list = duplicate_record['uniqueIds'][1:duplicate_record['count']]
  40. for groupId in deleted_list:
  41. Device.get_collection().update({'groupId': str(groupId)}, {'$set': {'groupId': str(lived)}}, multi = True,
  42. upsert = False)
  43. RechargeRecord.get_collection().update({'groupId': str(groupId)}, {'$set': {'groupId': str(lived)}},
  44. multi = True,
  45. upsert = False)
  46. ConsumeRecord.get_collection().update({'groupId': str(groupId)}, {'$set': {'groupId': str(lived)}},
  47. multi = True,
  48. upsert = False)
  49. CardConsumeRecord.get_collection().update({'groupId': str(groupId)}, {'$set': {'groupId': str(lived)}},
  50. multi = True,
  51. upsert = False)
  52. VCardConsumeRecord.get_collection().update({'groupId': str(groupId)}, {'$set': {'groupId': str(lived)}},
  53. multi = True,
  54. upsert = False)
  55. CardRechargeOrder.get_collection().update({'groupId': str(groupId)}, {'$set': {'groupId': str(lived)}},
  56. multi = True,
  57. upsert = False)
  58. CardRechargeRecord.get_collection().update({'groupId': str(groupId)}, {'$set': {'groupId': str(lived)}},
  59. multi = True,
  60. upsert = False)
  61. Group.get_collection().delete_many({'_id': {'$in': deleted_list}})
  62. print 'over'