import_sim_card.py 3.8 KB

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