compare_file_and_simcard.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # -*- coding: utf-8 -*-
  2. #!/usr/bin/env python
  3. import sys,os
  4. import datetime
  5. PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..')
  6. sys.path.insert(0, PROJECT_ROOT)
  7. os.environ.update({"DJANGO_SETTINGS_MODULE": "configs.production"})
  8. import django
  9. django.setup()
  10. from apilib.utils_datetime import to_datetime
  11. from apps.web.device.models import SIMCard,Device
  12. import xlrd
  13. from xlrd import xldate_as_tuple
  14. # 从SIM卡平台上导出来的excel,导入到数据库中,便于流量结算。
  15. # 1、月末:根据用户的充值情况,把SIM卡数据全部导出来,发给卡商,进行充值。
  16. # 2、月头:卡商充值后,我们利用import_sim_card脚本,把excel导出来,然后导入到数据库,并执行另外一个脚本update_device_sim_info_from_simdb更新设备的超时时间
  17. supplier = sys.argv[1]
  18. excelFile = sys.argv[2]
  19. if supplier not in ['qiben','hezhou','jieyang']:
  20. print u'卡供应商必须是qiben、hezhou'
  21. exit(0)
  22. book = xlrd.open_workbook(excelFile)
  23. try:
  24. if supplier == 'hezhou':
  25. sheet = book.sheet_by_name("Sheet")
  26. elif supplier == 'qiben':
  27. sheet = book.sheet_by_name("Sheet")
  28. elif supplier == 'jieyang':
  29. sheet = book.sheet_by_name("Sheet1")
  30. except Exception,e:
  31. print 'open excel file error =%s' % e
  32. exit(0)
  33. nrows = sheet.nrows
  34. rows = []
  35. okCount = 0
  36. iccids = []
  37. simDict = {}
  38. mapFromFile = {}
  39. jj = 0
  40. for i in range(1, nrows):
  41. row = sheet.row_values(i)
  42. if not row[18]:
  43. continue
  44. jj += 1
  45. expireTime = to_datetime(row[18] + ' 00:00:00')
  46. iccid = row[0]
  47. mapFromFile[iccid] = expireTime
  48. if jj % 1000 == 0 :
  49. iccids = mapFromFile.keys()
  50. cards = Device.get_collection().find({'iccid':{'$in':iccids}})
  51. for card in cards:
  52. tempiccid = card['iccid']
  53. if mapFromFile.has_key(tempiccid) and card.has_key('simExpireDate') and card.has_key('simStatus') and mapFromFile[tempiccid] != card['simExpireDate'] and card['simStatus'] != 'chargedUnupdated':
  54. print(tempiccid,mapFromFile[tempiccid],card['simExpireDate'])
  55. mapFromFile = {}
  56. iccids = mapFromFile.keys()
  57. cards = SIMCard.get_collection().find({'iccid':{'$in':iccids}})
  58. for card in cards:
  59. tempiccid = card['iccid']
  60. if mapFromFile.has_key(tempiccid) and card.has_key('simExpireDate') and card.has_key('simStatus') and mapFromFile[tempiccid] != card['simExpireDate'] and card['simStatus'] != 'chargedUnupdated':
  61. print(tempiccid,mapFromFile[tempiccid],card['simExpireDate'])
  62. mapFromFile = {}
  63. print u'总共的数据为:%s条,成功导入:%s条' % (nrows-1,okCount)