check_expire_dev_and_simcard.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. # -*- coding: utf-8 -*-
  2. #!/usr/bin/env python
  3. import threading
  4. import uuid
  5. import simplejson as json
  6. import sys
  7. import datetime
  8. from script.base import init_env, setup_logger, get_logger
  9. from apilib.utils_datetime import to_datetime
  10. init_env(interactive = False)
  11. if len(sys.argv) < 2:
  12. logger = get_logger(__name__)
  13. else:
  14. logger = setup_logger(filename = sys.argv[1], namespace = __name__)
  15. from django.conf import settings
  16. from apilib.utils_mqtt import get_share_prefix
  17. from apps.web.constant import Const, MQTT_GROUP
  18. from apps.web.device.models import Device, SIMCard
  19. from apps.web.core.mqtt_client import MqttClient
  20. from apps.web.user.models import MyUser,ConsumeRecord
  21. from mongoengine import connect
  22. from mongoengine import Document
  23. from mongoengine import StringField
  24. from apps.web.dealer.models import DealerRechargeRecord
  25. startTime = to_datetime('2019-11-01 00:00:00')
  26. endTime = to_datetime('2019-12-01 00:00:00')
  27. simObjs = SIMCard.objects.filter(expireTime__gte = startTime,expireTime__lte = endTime)
  28. iccids = [card.iccid for card in simObjs]
  29. devObjs = Device.objects.filter(iccid__in = iccids)
  30. print u'到期的卡一共有:',len(iccids),u'包含这些卡的设备数量有',devObjs.count()
  31. devIccids = [dev.iccid for dev in devObjs]
  32. allDevNos = [dev.devNo for dev in devObjs]
  33. needCheckIccid = list(set(iccids) - set(devIccids))
  34. print u'如下这些SIM卡,没有绑定到设备上,可能没有上线过,也可能卡未被使用:'
  35. for ic in needCheckIccid:
  36. print ic
  37. chargedDevNos = []
  38. objs = DealerRechargeRecord.objects.filter(status = 'Paid')
  39. countAll,devCount = 0,0
  40. for obj in objs:
  41. countAll += obj.totalFee
  42. devCount += len(obj.items)
  43. chargedDevNos.extend([item['devNo'] for item in obj.items])
  44. print u'有记录以来,总共充值的金额有 ',countAll,u'有记录以来,总共充值的设备数目',devCount
  45. # print 'those dev is expired but uncharged,please check...'
  46. # for dev in devObjs:
  47. # print dev.devNo
  48. print u'即将过期或者已经过期,但是还没有充值的清单如下::::'
  49. leftDevNos = list(set(allDevNos) - set(chargedDevNos))
  50. devNolist2 = []
  51. for devNo in leftDevNos:
  52. dev = Device.get_dev(devNo)
  53. print devNo,dev['ownerId'],dev['devType'].get('name',u'未知')
  54. # from apps.web.user.models import ConsumeRecord
  55. # print u'如下设备本月有订单,但是却没有充值,需要确认清楚:'
  56. # needChargedDevNos = []
  57. # for devNo in leftDevNos:
  58. # count = ConsumeRecord.objects.filter(devNo = devNo,dateTimeAdded__gte = startTime,dateTimeAdded__lte = endTime,isNormal = True).count()
  59. # if count > 0:
  60. # dev = Device.get_dev(devNo)
  61. # print u'设备编号',devNo,'ownerId',dev.get('ownerId',u'解绑'),u'是否在线',dev.online
  62. # ownerId = dev['ownerId']
  63. # if not ownerId:
  64. # continue
  65. # needChargedDevNos.append(devNo)
  66. #
  67. # devObjs = Device.objects.filter(devNo__in = needChargedDevNos)
  68. # iccids = [obj.iccid for obj in devObjs]
  69. # simCards = SIMCard.objects.filter(iccid__in = iccids)
  70. # hezhouList,qibenList = [],[]
  71. # for sim in simCards:
  72. # if sim.supplier == 'hezhou':
  73. # hezhouList.append(sim.iccid)
  74. # else:
  75. # qibenList.append(sim.iccid)
  76. #
  77. # print u'如下卡是合宙家的,本月有订单,未充值,建议卡续费,保留一个月'
  78. # for sim in hezhouList:
  79. # print sim
  80. #
  81. # print u'如下卡是qiben家的,本月有订单,未充值,建议卡续费,保留一个月'
  82. # for sim in qibenList:
  83. # print sim
  84. # print u'统计没有续费的设备,都是些什么类型的设备'
  85. # for devNo in leftDevNos:
  86. # dev = Device.get_dev(devNo)
  87. # print devNo,dev['devType']['name']
  88. # print devNo
  89. # import xlrd
  90. # from xlrd import xldate_as_tuple
  91. #
  92. # #检查充值了,但是不在卡数据里面的卡
  93. # book = xlrd.open_workbook(u'F:/SIM卡数据导入/2019-06-24/合宙武汉大源科技有限公司6月份到期卡.xlsx')
  94. # book1 = xlrd.open_workbook(u'F:/SIM卡数据导入/2019-06-24/齐犇武汉微弗智通科技有限公司-到期明细.xlsx')
  95. #
  96. # iccids = []
  97. #
  98. # try:
  99. # sheet = book.sheet_by_name("Sheet")
  100. # except Exception,e:
  101. # print 'open excel file error =%s' % e
  102. # exit(0)
  103. #
  104. # nrows = sheet.nrows
  105. # rows = []
  106. #
  107. # for i in range(1, nrows):
  108. # row = sheet.row_values(i)
  109. # try:
  110. # iccids.append(row[1].replace('\t',''))
  111. # except Exception,e:
  112. # print 'some error when update iccid=%s,e=%s' % (row[1],e)
  113. #
  114. # try:
  115. # sheet = book1.sheet_by_name("Sheet")
  116. # except Exception,e:
  117. # print 'open excel file error =%s' % e
  118. # exit(0)
  119. #
  120. # nrows = sheet.nrows
  121. # rows = []
  122. #
  123. # for i in range(1, nrows):
  124. # row = sheet.row_values(i)
  125. # try:
  126. # iccids.append(row[1].replace('\t',''))
  127. # except Exception,e:
  128. # print 'some error when update iccid=%s,e=%s' % (row[1],e)
  129. #
  130. # devObjs = Device.objects.filter(iccid__in = iccids)
  131. # print 'expire ic card num is ',len(iccids),'the device of sim card ,num is',devObjs.count()
  132. # allDevNos = [dev.devNo for dev in devObjs]
  133. #
  134. # startTime = to_datetime('2019-06-01 00:00:00')
  135. # endTime = to_datetime('2019-07-01 00:00:00')
  136. # objs = DealerRechargeRecord.objects.filter(finishedTime__gte = startTime,finishedTime__lte = endTime,status = 'Paid')
  137. # countAll,devCount = 0,0
  138. # chargedDevNos = []
  139. # for obj in objs:
  140. # countAll += obj.totalFee
  141. # devCount += len(obj.items)
  142. # chargedDevNos.extend([item['devNo'] for item in obj.items])
  143. #
  144. # leftDevNos = list(set(allDevNos) - set(chargedDevNos))
  145. # for devNo in leftDevNos:
  146. # print devNo