UserBrandController.py 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
  5. @AUTHOR: ASJRD019
  6. @NAME: AnsjerFormal
  7. @software: PyCharm
  8. @DATE: 2019/5/9 11:50
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: AliPayObject.py
  12. @Contact: pzb3076@163.com
  13. """
  14. import time
  15. from collections import Counter
  16. from django.utils.decorators import method_decorator
  17. from django.views.decorators.csrf import csrf_exempt
  18. from django.views.generic.base import View
  19. from Ansjer.config import AWS_DynamoDB_REGION, AWS_DynamoDB_ACCESS_KEY, AWS_DynamoDB_SECRET_KEY, \
  20. USER_BRAND, USER_BRAND_ALL
  21. from Model.models import Device_User
  22. from Object.RedisObject import RedisObject
  23. from Object.ResponseObject import ResponseObject
  24. from Object.TokenObject import TokenObject
  25. from Service.CommonService import CommonService
  26. from Service.ModelService import ModelService
  27. '''
  28. http://192.168.136.39:8000/userbrandinfo/queryByAdmin?token=test&page=1&line=10 记录
  29. http://192.168.136.39:8000/userbrandinfo/queryArea?token=test 市的区域统计
  30. http://192.168.136.39:8000/userbrandinfo/queryDeviceSupplier?token=test 品牌统计
  31. http://192.168.136.39:8000/userbrandinfo/queryAllByAdmin?token=test&page=1&line=10 全部记录中每个用户的数据
  32. http://192.168.136.39:8000/userbrandinfo/queryAll?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTQzOTA5MDUwNDEzMTM4MDAxMzgwMDAiLCJsYW5nIjoiY24iLCJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1NTk4OTY4NTd9.nhK3VSghSGjyXKjel4woz7R_3bhjgqQDlX-ypYsklNU&page=1&line=5
  33. '''
  34. # coding:utf-8
  35. from boto3 import Session
  36. from botocore.exceptions import ClientError
  37. from boto3.dynamodb.conditions import Key, Attr
  38. import logging
  39. import json
  40. logger = logging.getLogger(__name__)
  41. class MyserviceDynamodb(object):
  42. def __init__(self, **kwargs):
  43. self.region = AWS_DynamoDB_REGION
  44. self.access_key = AWS_DynamoDB_ACCESS_KEY
  45. self.secret_key = AWS_DynamoDB_SECRET_KEY
  46. self.session = self.__session()
  47. def __session(self):
  48. try:
  49. session = Session(aws_access_key_id=self.access_key, aws_secret_access_key=self.secret_key,
  50. region_name=self.region)
  51. return session
  52. except:
  53. print("Failed to connect session in region{0}".format(self.region))
  54. # 创建user_brand_all表
  55. def user_brand_all_table_create(self, table_name):
  56. dynamodb = self.session.resource('dynamodb')
  57. inventory = my.tables_list(table_name)
  58. if table_name in inventory:
  59. print('包含')
  60. else:
  61. try:
  62. table = dynamodb.create_table(
  63. TableName=table_name,
  64. KeySchema=[
  65. {
  66. 'AttributeName': 'userID',
  67. 'KeyType': 'HASH'
  68. },
  69. {
  70. 'AttributeName': 'addTime',
  71. 'KeyType': 'RANGE'
  72. }
  73. ],
  74. AttributeDefinitions=[
  75. {
  76. 'AttributeName': 'userID',
  77. 'AttributeType': 'S'
  78. },
  79. {
  80. 'AttributeName': 'addTime',
  81. 'AttributeType': 'N'
  82. },
  83. ],
  84. ProvisionedThroughput={
  85. 'ReadCapacityUnits': 5,
  86. 'WriteCapacityUnits': 5,
  87. }
  88. )
  89. except Exception:
  90. logger.error(table_name + '表已经存在')
  91. # 查询aws数据库里面有什么表
  92. def tables_list(self, table_name):
  93. client = self.session.client('dynamodb')
  94. response = client.list_tables()
  95. return response['TableNames']
  96. # 创建user_brand表
  97. def table_create(self, table_name):
  98. dynamodb = self.session.resource('dynamodb')
  99. inventory = my.tables_list(table_name)
  100. if table_name in inventory:
  101. print('包含')
  102. else:
  103. try:
  104. table = dynamodb.create_table(
  105. TableName=table_name,
  106. KeySchema=[
  107. {
  108. 'AttributeName': 'userID',
  109. 'KeyType': 'HASH'
  110. }
  111. ],
  112. AttributeDefinitions=[
  113. {
  114. 'AttributeName': 'userID',
  115. 'AttributeType': 'S'
  116. }
  117. ],
  118. ProvisionedThroughput={
  119. 'ReadCapacityUnits': 5,
  120. 'WriteCapacityUnits': 5,
  121. }
  122. )
  123. except Exception:
  124. logger.error(table_name + '表已经存在')
  125. # 添加user_brand_all表数据
  126. def user_brand_all_item_put(self, table_name, data_list):
  127. dynamodb = self.session.resource('dynamodb')
  128. table = dynamodb.Table(table_name)
  129. with table.batch_writer() as batch:
  130. for i in data_list:
  131. data = json.loads(i.decode('utf-8'))
  132. # print (json.loads(i))
  133. # data = i
  134. if data['city'] == '':
  135. data['city'] = '无'
  136. if data['area'] == '':
  137. data['area'] = '无'
  138. if data['street'] == '':
  139. data['street'] = '无'
  140. if data['longitude'] == '':
  141. data['longitude'] = '无'
  142. if data['latitude'] == '':
  143. data['latitude'] = '无'
  144. batch.put_item(
  145. Item={
  146. 'userID': data['userID'],
  147. 'addTime': data['addTime'],
  148. 'deviceSupplier': data['deviceSupplier'],
  149. 'deviceModel': data['deviceModel'],
  150. 'osType': data['osType'],
  151. 'osVersion': data['osVersion'],
  152. 'country': data['country'],
  153. 'province': data['province'],
  154. 'city': data['city'],
  155. 'area': data['area'],
  156. 'street': data['street'],
  157. 'longitude': data['longitude'],
  158. 'latitude': data['latitude'],
  159. 'appId': data['appId'],
  160. 'status_all': data['status_all'],
  161. 'ExpirationTime_TTL': data['ExpirationTime_TTL'],
  162. 'ip': data['ip'],
  163. }
  164. )
  165. print('批量添加数据成功!')
  166. # 添加user_brand表数据
  167. def user_brand_item_put(self, table_name, user_id, add_time, device_supplier, device_model, os_type,
  168. os_version, country, province, city, area, street, longitude, latitude, app_id,
  169. status_all, ip):
  170. dynamodb = self.session.resource('dynamodb')
  171. table = dynamodb.Table(table_name)
  172. table.put_item(
  173. Item={
  174. 'userID': user_id,
  175. 'addTime': add_time,
  176. 'deviceSupplier': device_supplier,
  177. 'deviceModel': device_model,
  178. 'osType': os_type,
  179. 'osVersion': os_version,
  180. 'country': country,
  181. 'province': province,
  182. 'city': city,
  183. 'area': area,
  184. 'street': street,
  185. 'longitude': longitude,
  186. 'latitude': latitude,
  187. 'appId': app_id,
  188. 'status_all': status_all,
  189. 'ip': ip,
  190. }
  191. )
  192. print('添加表一条数据成功!')
  193. # page分页数,line条数,table_name表名称,last_evaluated查询开始值,page_value记录分页开始值
  194. def get_page_line(self, page, line, table_name, last_evaluated, page_value):
  195. dynamodb = self.session.resource('dynamodb')
  196. # if not dynamodb:
  197. # raise DynamodbConnectionError("Failed to get resource for dynamodb!")
  198. table = dynamodb.Table(table_name)
  199. last_evaluated_key = last_evaluated
  200. try:
  201. if last_evaluated_key is None:
  202. response = table.scan(
  203. Limit=line,
  204. )
  205. page_value.append(last_evaluated_key)
  206. else:
  207. # 构建分页的起点,传入下一页面的起点,这是由主键来控制的,last_evaluated_key的值就是本表中的uid
  208. response = table.scan(
  209. Limit=line,
  210. ExclusiveStartKey=last_evaluated_key)
  211. try:
  212. last_evaluated_key = response['LastEvaluatedKey']
  213. # 如果有知就追加在该值的后面
  214. page_value.append(last_evaluated_key)
  215. my.get_page_line(page, line, table_name, last_evaluated_key, page_value)
  216. except Exception:
  217. return page_value
  218. except Exception as e:
  219. logger.error("Failed to get table {0}, error".format(table_name, e))
  220. return page_value
  221. def item_get(self, line, table_name, last_evaluated_key):
  222. dynamodb = self.session.resource('dynamodb')
  223. table = dynamodb.Table(table_name)
  224. if last_evaluated_key is None:
  225. response = table.scan(
  226. Limit=line,
  227. )
  228. else:
  229. # 构建分页的起点,传入下一页面的起点,这是由主键来控制的,last_evaluated_key的值就是本表中的uid
  230. response = table.scan(
  231. Limit=line,
  232. ExclusiveStartKey=last_evaluated_key)
  233. return response
  234. def item_get_count(self, table_name):
  235. dynamodb = self.session.resource('dynamodb')
  236. table = dynamodb.Table(table_name)
  237. response = table.scan()
  238. return len(response['Items'])
  239. # 已经查询全部
  240. def item_get_brand(self, table_name):
  241. dynamodb = self.session.resource('dynamodb')
  242. table = dynamodb.Table(table_name)
  243. last_evaluated_key = None
  244. i = 0
  245. table_info = []
  246. while True:
  247. # 刚开始,不需要传入startkey
  248. if last_evaluated_key is None:
  249. try:
  250. response = table.scan()
  251. except Exception:
  252. break
  253. else:
  254. # 构建分页的起点,传入下一页面的起点,这是由主键来控制的,last_evaluated_key的值就是本表中的uid
  255. try:
  256. response = table.scan(ExclusiveStartKey=last_evaluated_key)
  257. except Exception:
  258. break
  259. # print type(response) #字典
  260. i = i + 1
  261. print (i)
  262. if response['Items'] != []:
  263. table_info.extend(response['Items'])
  264. # 判断有没有这个LastEvaluatedKey,如果有,那么还有页面没有拉取玩,将这个值带入request的ExclusiveStartKey中,继续读取页面
  265. try:
  266. if response['LastEvaluatedKey']:
  267. last_evaluated_key = response['LastEvaluatedKey']
  268. continue
  269. else:
  270. break
  271. except Exception:
  272. break
  273. return table_info
  274. def put_item(self, table, item_dict=None):
  275. try:
  276. response = table.put_item(Item=item_dict)
  277. except Exception as e:
  278. logger.error("Failed to put item in to {0}:error{1}".format(table, e))
  279. return response
  280. def update_table(self, table_name, user_id, username, add_time, deviceSupplier, deviceModel, osType, osVersion,
  281. country, province, city, area, street, longitude, latitude, appId, ip, status_all
  282. ):
  283. dynamodb = self.session.resource('dynamodb')
  284. table = dynamodb.Table(table_name)
  285. try:
  286. response = table.update_item(
  287. Key={
  288. 'userID': user_id,
  289. 'username': username
  290. },
  291. UpdateExpression="SET addTime = :add_time, deviceSupplier= :deviceSupplier, deviceModel = :deviceModel, osType = :osType, osVersion = :osVersion, country = :country, province = :province, city = :city, area= :area, street= :street, longitude= :longitude, latitude= :latitude, appId= :appId, ip= :ip, status_all= :status_all",
  292. ExpressionAttributeValues={
  293. ':add_time': add_time,
  294. ':deviceSupplier': deviceSupplier,
  295. ':deviceModel': deviceModel,
  296. ':osType': osType,
  297. ':osVersion': osVersion,
  298. ':country': country,
  299. ':province': province,
  300. ':city': city,
  301. ':area': area,
  302. ':street': street,
  303. ':longitude': longitude,
  304. ':latitude': latitude,
  305. ':appId': appId,
  306. ':ip': ip,
  307. ':status_all': status_all,
  308. }, ReturnValues="UPDATED_NEW")
  309. except ClientError as e:
  310. if e.response['Error']['Code'] == "ConditionalCheckFailedException":
  311. logger.error(e.response['Error']['Message'])
  312. else:
  313. print('Failed update the dynamodb by event_id,not Failed Conditional')
  314. else:
  315. print('修改成功')
  316. def table_delete(self, table_name):
  317. dynamodb = self.session.resource('dynamodb')
  318. table = dynamodb.Table(table_name)
  319. table.delete()
  320. print('删除表成功')
  321. def item_delete(self, table_name, name, user_id, add_time):
  322. dynamodb = self.session.resource('dynamodb')
  323. table = dynamodb.Table(table_name)
  324. try:
  325. if name == 'user_brand':
  326. table.delete_item(
  327. Key={
  328. 'userID': user_id,
  329. }
  330. )
  331. else:
  332. table.delete_item(
  333. Key={
  334. 'userID': user_id,
  335. 'addTime': int(add_time),
  336. }
  337. )
  338. return 'ok'
  339. except Exception:
  340. logger.error("Failed to put item in to {0}:error{1}".format(table))
  341. return 'no'
  342. # 搜索查询并分页查询全部
  343. def get_table_info(self, table_name, username):
  344. """
  345. 对表进行分页扫描,这里尝试的是对visit_info表进行扫描
  346. """
  347. # 通过dynamodb服务获取目标table的操作对象
  348. dynamodb = self.session.resource('dynamodb')
  349. table_handle = dynamodb.Table(table_name)
  350. # 这个值是在分页查询的时候,用来记录页面的最后一个主键的下一个,以方便下一个页面的开启
  351. last_evaluated_key = None
  352. i = 0
  353. table_info =[]
  354. while True:
  355. # 刚开始,不需要传入startkey
  356. if last_evaluated_key is None:
  357. try:
  358. response = table_handle.scan(
  359. FilterExpression=Attr('deviceSupplier').eq(username)
  360. | Key('osType').eq(username)
  361. | Key('deviceModel').eq(username)
  362. | Key('userID').eq(username)
  363. | Key('osVersion').eq(username)
  364. | Key('country').eq(username)
  365. | Key('appId').eq(username)
  366. | Key('province').eq(username)
  367. | Key('city').eq(username)
  368. | Key('area').eq(username)
  369. | Key('street').eq(username)
  370. | Key('longitude').eq(username)
  371. | Key('latitude').eq(username)
  372. | Key('status_all').eq(username)
  373. | Key('ip').eq(username))
  374. except Exception:
  375. break
  376. else:
  377. # 构建分页的起点,传入下一页面的起点,这是由主键来控制的,last_evaluated_key的值就是本表中的uid
  378. try:
  379. response = table_handle.scan(
  380. ExclusiveStartKey=last_evaluated_key,
  381. FilterExpression=Attr('deviceSupplier').eq(username)
  382. | Key('osType').eq(username)
  383. | Key('deviceModel').eq(username)
  384. | Key('userID').eq(username)
  385. | Key('osVersion').eq(username)
  386. | Key('country').eq(username)
  387. | Key('appId').eq(username)
  388. | Key('province').eq(username)
  389. | Key('city').eq(username)
  390. | Key('area').eq(username)
  391. | Key('street').eq(username)
  392. | Key('longitude').eq(username)
  393. | Key('latitude').eq(username)
  394. | Key('status_all').eq(username)
  395. | Key('ip').eq(username))
  396. except Exception:
  397. break
  398. # response 有一个标准的json格式,包含了这次scan结果的各种信息
  399. # print type(response) #字典
  400. i = i+1
  401. print (i)
  402. if response['Items']!=[]:
  403. table_info.extend(response['Items'])
  404. # 判断有没有这个LastEvaluatedKey,如果有,那么还有页面没有拉取玩,将这个值带入request的ExclusiveStartKey中,继续读取页面
  405. try:
  406. if response['LastEvaluatedKey']:
  407. last_evaluated_key = response['LastEvaluatedKey']
  408. continue
  409. else:
  410. break
  411. except Exception:
  412. break
  413. for k, v in enumerate(table_info):
  414. user_ID = Device_User.objects.filter(userID=table_info[k]['userID']).values('userID', 'username', 'NickName')
  415. try:
  416. table_info[k]['username'] = user_ID[0]['username']
  417. except Exception:
  418. table_info[k]['username'] = ''
  419. return table_info
  420. pass
  421. my = MyserviceDynamodb()
  422. # print(my.table_delete('user_brand'))
  423. # print(my.table_delete('user_brand_all'))
  424. # my.table_create(USER_BRAND)
  425. # my.user_brand_all_table_create(USER_BRAND_ALL)
  426. # print(my.item_put('user_brand'))
  427. # table_value = my.get_table('user_brand')
  428. class UserBrandInfo(View):
  429. @method_decorator(csrf_exempt)
  430. def dispatch(self, *args, **kwargs):
  431. return super(UserBrandInfo, self).dispatch(*args, **kwargs)
  432. def get(self, request, *args, **kwargs):
  433. request.encoding = 'utf-8'
  434. operation = kwargs.get('operation')
  435. return self.validation(request.GET, request, operation)
  436. def post(self, request, *args, **kwargs):
  437. request.encoding = 'utf-8'
  438. operation = kwargs.get('operation')
  439. return self.validation(request.POST, request, operation)
  440. def validation(self, request_dict, request, operation):
  441. self.clientIP = CommonService.get_ip_address(request)
  442. response = ResponseObject()
  443. token = request_dict.get('token', None)
  444. tko = TokenObject(token)
  445. if tko.code == 0:
  446. response.lang = tko.lang
  447. userID = tko.userID
  448. if operation == 'add':
  449. return self.add_info(request_dict, userID, USER_BRAND, USER_BRAND_ALL, response)
  450. elif operation == 'queryByAdmin':
  451. return self.query_info(request_dict, userID, USER_BRAND, USER_BRAND_ALL, response)
  452. elif operation == 'queryAllByAdmin':
  453. return self.query_all_info(request_dict, userID, USER_BRAND, USER_BRAND_ALL, response)
  454. elif operation == 'deleteByAdmin':
  455. return self.delete_by_admin(request_dict, userID, USER_BRAND, USER_BRAND_ALL, response)
  456. elif operation == 'queryDeviceSupplier':
  457. return self.query_deviceSupplier_info(request_dict, userID, USER_BRAND, USER_BRAND_ALL, response)
  458. elif operation == 'queryArea':
  459. return self.query_area_info(request_dict, userID, USER_BRAND, USER_BRAND_ALL, response)
  460. else:
  461. return response.json(444)
  462. else:
  463. return response.json(tko.code)
  464. # http://192.168.136.39:8000/userbrandinfo?operation=add&token=test&deviceSupplier=小米&deviceModel=HM NOTE 1TD&osType=WEB&osVersion=4.0.0
  465. def add_info(self, request_dict, userID, user_brand, user_brand_all, response):
  466. return response.json(0, {'OK': int(time.time())})
  467. deviceSupplier = request_dict.get('deviceSupplier', None)
  468. deviceModel = request_dict.get('deviceModel', None)
  469. osType = request_dict.get('osType', None)
  470. osVersion = request_dict.get('osVersion', None)
  471. country = request_dict.get('country', None)
  472. province = request_dict.get('province', None)
  473. city = request_dict.get('city', '')
  474. area = request_dict.get('area', '')
  475. street = request_dict.get('street', '')
  476. longitude = request_dict.get('longitude', '')
  477. latitude = request_dict.get('latitude', '')
  478. appId = request_dict.get('appId', None)
  479. if city == '':
  480. city = '无'
  481. if area == '':
  482. area = '无'
  483. if street == '':
  484. street = '无'
  485. if longitude == '':
  486. longitude = '无'
  487. if latitude == '':
  488. latitude = '无'
  489. param_area = CommonService.get_param_flag(data=[country, province, city])
  490. must_fill_in = CommonService.get_param_flag(data=[appId, deviceSupplier, deviceModel, osType, osVersion])
  491. if must_fill_in is False:
  492. return response.json(444, 'appId,deviceSupplier,deviceModel,osType,osVersion')
  493. if param_area is True:
  494. if '省' in province:
  495. province = province.replace('省', '')
  496. if '市' in city:
  497. city = city.replace('市', '')
  498. status = 1
  499. country = country
  500. province = province
  501. city = city
  502. area = area
  503. street = street
  504. longitude = longitude
  505. latitude = latitude
  506. else:
  507. status = 0
  508. jsonData = CommonService.getIpIpInfo(ip=self.clientIP, lang='CN')
  509. country = jsonData['country_name']
  510. province = jsonData['region_name']
  511. city = jsonData['city_name']
  512. area = '无'
  513. street = '无'
  514. longitude = jsonData['longitude']
  515. latitude = jsonData['latitude']
  516. if country == '局域网':
  517. city = '无'
  518. longitude = '无'
  519. latitude = '无'
  520. param_flag = CommonService.get_param_flag(data=[deviceSupplier, deviceModel, osType, osVersion])
  521. if param_flag is True:
  522. addTime = int(time.time())
  523. print(time.time())
  524. add_data = {
  525. 'userID': userID,
  526. 'addTime': addTime,
  527. 'deviceSupplier': deviceSupplier,
  528. 'deviceModel': deviceModel,
  529. 'osType': osType,
  530. 'osVersion': osVersion,
  531. 'country': country,
  532. 'province': province,
  533. 'city': city,
  534. 'area': area,
  535. 'street': street,
  536. 'longitude': longitude,
  537. 'latitude': latitude,
  538. 'appId': appId,
  539. 'status_all': status,
  540. 'ExpirationTime_TTL': addTime + 2592000,
  541. 'ip': self.clientIP
  542. }
  543. # 增加用户扩展信息
  544. redisObj = RedisObject()
  545. add_user_brand_all_data = json.dumps(add_data)
  546. logKey = USER_BRAND_ALL
  547. redisObj.rpush(name=logKey, val=add_user_brand_all_data)
  548. # print (redisObj.llen(name=logKey))
  549. # 判断redis列表长度
  550. try:
  551. if redisObj.llen(name=logKey) > 100:
  552. data_list = redisObj.lrange(logKey, 0, -1)
  553. redisObj.del_data(key=logKey)
  554. # 添加user_brand_all表信息
  555. my.user_brand_all_item_put(user_brand_all, data_list)
  556. # 添加user_brand表信息
  557. my.user_brand_item_put(user_brand, userID, addTime, deviceSupplier, deviceModel,
  558. osType, osVersion,
  559. country, province, city, area, street, longitude, latitude, appId, status,
  560. self.clientIP)
  561. except Exception:
  562. my.table_create(USER_BRAND)
  563. my.user_brand_all_table_create(USER_BRAND_ALL)
  564. return response.json(0, {'OK': int(time.time())})
  565. else:
  566. # 参数错误
  567. return response.json(444)
  568. # 查询每个用户的最新登录数据表
  569. def query_info(self, request_dict, userID, user_brand, user_brand_all, response):
  570. page = int(request_dict.get('page', None))
  571. line = int(request_dict.get('line', None))
  572. username = request_dict.get('username', None)
  573. param_flag = CommonService.get_param_flag(data=[page, line])
  574. if param_flag is True:
  575. check_perm = ModelService.check_perm(userID=userID, permID=30)
  576. page_value = []
  577. if check_perm is True:
  578. if username is None or username is '':
  579. # table_Limit_value = my.get_page_line(page,line,user_brand,None,page_value)
  580. # # 页面减1
  581. # page = page-1
  582. # if page < len(table_Limit_value):
  583. # # 分页后查询
  584. # table_value = my.item_get(line,user_brand,table_Limit_value[page])
  585. # table_value = table_value['Items']
  586. # count = my.item_get_count(user_brand)
  587. # return response.json(0, {'datas': table_value, 'count': count})
  588. return response.json(0, {'datas': {}, 'count': 0})
  589. else:
  590. # 查询
  591. user_ID = Device_User.objects.filter(username=username).values('userID', 'NickName')
  592. try:
  593. username = user_ID[0]['userID']
  594. except Exception:
  595. username = username
  596. table_value = my.get_table_info(user_brand, username)
  597. return response.json(0, {'datas': table_value, 'count': len(table_value)})
  598. else:
  599. return response.json(404)
  600. else:
  601. return response.json(444)
  602. # 删除接口
  603. def delete_by_admin(self, request_dict, userID, user_brand, user_brand_all, response):
  604. id = request_dict.getlist('id', None)
  605. username = request_dict.getlist('username', None)
  606. add_time = request_dict.getlist('add_time', None)
  607. table_name = request_dict.getlist('table_name', None)
  608. param_flag = CommonService.get_param_flag(data=[id, username])
  609. if param_flag is True:
  610. check_perm = ModelService.check_perm(userID=userID, permID=10)
  611. if check_perm is True:
  612. if str(table_name[0]) == 'user_brand':
  613. is_delete = my.item_delete(user_brand, 'user_brand', id[0], add_time[0])
  614. else:
  615. is_delete = my.item_delete(user_brand_all, 'user_brand_all', id[0], add_time[0])
  616. return response.json(0, {'delete_count': is_delete[0]})
  617. else:
  618. return response.json(404)
  619. else:
  620. return response.json(444)
  621. # Query each user record statistics
  622. def query_all_info(self, request_dict, userID, user_brand, user_brand_all, response):
  623. page = int(request_dict.get('page', None))
  624. line = int(request_dict.get('line', None))
  625. username = request_dict.get('username', None)
  626. param_flag = CommonService.get_param_flag(data=[page, line])
  627. # 增加用户扩展信息
  628. try:
  629. redisObj = RedisObject()
  630. logKey = USER_BRAND_ALL
  631. data_list = redisObj.lrange(logKey, 0, -1)
  632. redisObj.del_data(key=logKey)
  633. # 添加user_brand_all表信息
  634. my.user_brand_all_item_put(user_brand_all, data_list)
  635. except Exception:
  636. print ('有误')
  637. print ('添加了数据')
  638. if param_flag is True:
  639. check_perm = ModelService.check_perm(userID=userID, permID=30)
  640. page_value = []
  641. if check_perm is True:
  642. if username is None or username is '':
  643. return response.json(0, {'datas': {}, 'count': 0})
  644. else:
  645. # 查询
  646. user_ID = Device_User.objects.filter(username=username).values('userID', 'NickName')
  647. try:
  648. username = user_ID[0]['userID']
  649. except Exception:
  650. username = username
  651. table_value = my.get_table_info(user_brand_all, username)
  652. return response.json(0, {'datas': table_value, 'count': len(table_value)})
  653. else:
  654. return response.json(404)
  655. else:
  656. return response.json(444)
  657. # Brand statistics interface
  658. def query_deviceSupplier_info(self, request_dict, userID, user_brand, user_brand_all, response):
  659. check_perm = ModelService.check_perm(userID=userID, permID=30)
  660. if check_perm is True:
  661. table_value = my.item_get_brand(user_brand)
  662. send_jsons = []
  663. counts = 0
  664. for i in table_value:
  665. send_jsons.append(table_value[counts]['deviceSupplier'])
  666. counts = counts + 1
  667. send_jsons = Counter(send_jsons)
  668. return response.json(0, {'datas': send_jsons, 'counts': counts})
  669. else:
  670. return response.json(404)
  671. # Interface to area statistics
  672. def query_area_info(self, request_dict, userID, user_brand, user_brand_all, response):
  673. check_perm = ModelService.check_perm(userID=userID, permID=30)
  674. district = request_dict.get('district', None)
  675. if check_perm is True:
  676. # 按照用户去重复查询
  677. table_value = my.item_get_brand(user_brand)
  678. send_jsons = []
  679. counts = 0
  680. for i in table_value:
  681. send_jsons.append(table_value[counts][district])
  682. counts = counts + 1
  683. send_jsons = Counter(send_jsons)
  684. return response.json(0, {'datas': send_jsons, 'counts': counts})
  685. else:
  686. return response.json(404)