|
@@ -28,6 +28,8 @@ import calendar
|
|
import datetime
|
|
import datetime
|
|
import logging
|
|
import logging
|
|
import sys
|
|
import sys
|
|
|
|
+
|
|
|
|
+import requests
|
|
from aliyunsdkcore import client
|
|
from aliyunsdkcore import client
|
|
from aliyunsdksts.request.v20150401 import AssumeRoleRequest
|
|
from aliyunsdksts.request.v20150401 import AssumeRoleRequest
|
|
from boto3.session import Session
|
|
from boto3.session import Session
|
|
@@ -44,7 +46,7 @@ from Controller.CheckUserData import DataValid
|
|
from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel, \
|
|
from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel, \
|
|
ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMassModel, SysMsgModel, UidPushModel, \
|
|
ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMassModel, SysMsgModel, UidPushModel, \
|
|
Unused_Uid_Meal, UIDMainUser, UserModel, PromotionRuleModel, VideoPlaybackTimeModel, CloudLogModel, CouponModel, \
|
|
Unused_Uid_Meal, UIDMainUser, UserModel, PromotionRuleModel, VideoPlaybackTimeModel, CloudLogModel, CouponModel, \
|
|
- AiStoreMeal, AiService, UidSetModel, Ai_Push_Info
|
|
|
|
|
|
+ AiStoreMeal, AiService, UidSetModel, Ai_Push_Info, iotdeviceInfoModel
|
|
from Object.AWS.S3Email import S3Email
|
|
from Object.AWS.S3Email import S3Email
|
|
from Object.AliPayObject import AliPayObject
|
|
from Object.AliPayObject import AliPayObject
|
|
from Object.AliSmsObject import AliSmsObject
|
|
from Object.AliSmsObject import AliSmsObject
|
|
@@ -96,7 +98,7 @@ class AiView(View):
|
|
if operation == 'createpayorder': # 创建支付订单
|
|
if operation == 'createpayorder': # 创建支付订单
|
|
ip = CommonService.get_ip_address(request)
|
|
ip = CommonService.get_ip_address(request)
|
|
return self.do_create_pay_order(request_dict, userID, ip, response)
|
|
return self.do_create_pay_order(request_dict, userID, ip, response)
|
|
- elif operation == 'changeaistatus': # 修改云存状态,传送两个url,即getsignsts接口和storeplaylist接口
|
|
|
|
|
|
+ elif operation == 'changeaistatus': # 修改AI开关状态
|
|
return self.do_change_ai_status(userID, request_dict, response)
|
|
return self.do_change_ai_status(userID, request_dict, response)
|
|
elif operation == 'commoditylist': # 修改云存状态,传送两个url,即getsignsts接口和storeplaylist接口
|
|
elif operation == 'commoditylist': # 修改云存状态,传送两个url,即getsignsts接口和storeplaylist接口
|
|
return self.do_commodity_list(userID, request_dict, response)
|
|
return self.do_commodity_list(userID, request_dict, response)
|
|
@@ -189,12 +191,18 @@ class AiView(View):
|
|
uid_set_qs = UidSetModel.objects.create(**qs_data)
|
|
uid_set_qs = UidSetModel.objects.create(**qs_data)
|
|
uid_set_id = uid_set_qs.id
|
|
uid_set_id = uid_set_qs.id
|
|
|
|
|
|
-
|
|
|
|
|
|
+ topic_name = 'AiServer/{}'.format(uid)
|
|
if status == 0:
|
|
if status == 0:
|
|
hasAiService.update(**qs_data)
|
|
hasAiService.update(**qs_data)
|
|
# UidPushModel.objects.filter(uid_set__uid=uid).delete()
|
|
# UidPushModel.objects.filter(uid_set__uid=uid).delete()
|
|
# 状态为0的时候删除redis缓存数据
|
|
# 状态为0的时候删除redis缓存数据
|
|
# self.do_delete_redis(uid)
|
|
# self.do_delete_redis(uid)
|
|
|
|
+
|
|
|
|
+ # mqtt通知设备关闭AI识别功能
|
|
|
|
+ msg = {'AiStatus', 'inactive'},
|
|
|
|
+ req_success = self.requestPublishMqtt(uid, topic_name, msg)
|
|
|
|
+ if not req_success:
|
|
|
|
+ return response.json(10044)
|
|
return response.json(0)
|
|
return response.json(0)
|
|
elif status == 1:
|
|
elif status == 1:
|
|
hasAiService.update(**qs_data)
|
|
hasAiService.update(**qs_data)
|
|
@@ -243,10 +251,57 @@ class AiView(View):
|
|
# detectUrl = "{DETECT_PUSH_DOMAIN}AiService/push?etk={etk}&endTime={endTime}". \
|
|
# detectUrl = "{DETECT_PUSH_DOMAIN}AiService/push?etk={etk}&endTime={endTime}". \
|
|
# format(etk=etk, DETECT_PUSH_DOMAIN=SERVER_DOMAIN_SSL, endTime=endTime)
|
|
# format(etk=etk, DETECT_PUSH_DOMAIN=SERVER_DOMAIN_SSL, endTime=endTime)
|
|
aiIdentificationUrl = "{DETECT_PUSH_DOMAIN}AiService/identification".format(DETECT_PUSH_DOMAIN=SERVER_DOMAIN_SSL)
|
|
aiIdentificationUrl = "{DETECT_PUSH_DOMAIN}AiService/identification".format(DETECT_PUSH_DOMAIN=SERVER_DOMAIN_SSL)
|
|
|
|
+
|
|
|
|
+ # mqtt通知设备开启AI识别功能
|
|
|
|
+ msg = {
|
|
|
|
+ 'AiStatus', 'active',
|
|
|
|
+ 'etk', etk,
|
|
|
|
+ 'endTime', endTime,
|
|
|
|
+ 'aiIdentificationUrl', aiIdentificationUrl,
|
|
|
|
+ },
|
|
|
|
+ req_success = self.requestPublishMqtt(uid, topic_name, msg)
|
|
|
|
+ if not req_success:
|
|
|
|
+ return response.json(10044)
|
|
return response.json(0, {'aiIdentificationUrl': aiIdentificationUrl, 'endTime': endTime, 'etk': etk})
|
|
return response.json(0, {'aiIdentificationUrl': aiIdentificationUrl, 'endTime': endTime, 'etk': etk})
|
|
else:
|
|
else:
|
|
return response.json(14)
|
|
return response.json(14)
|
|
|
|
|
|
|
|
+ def requestPublishMqtt(self, thing_name, topic_name, msg):
|
|
|
|
+ # 通用发布MQTT主题通知
|
|
|
|
+ if not all([msg, thing_name, topic_name]):
|
|
|
|
+ return False
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ # 获取数据组织将要请求的url
|
|
|
|
+ iot = iotdeviceInfoModel.objects.filter(
|
|
|
|
+ thing_name=thing_name).values(
|
|
|
|
+ 'endpoint', 'token_iot_number')
|
|
|
|
+ if not iot.exists():
|
|
|
|
+ return False
|
|
|
|
+ endpoint = iot[0]['endpoint']
|
|
|
|
+ Token = iot[0]['token_iot_number']
|
|
|
|
+
|
|
|
|
+ # api doc: https://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/http.html
|
|
|
|
+ # url: https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1
|
|
|
|
+ # post请求url发布MQTT消息
|
|
|
|
+ url = 'https://{}/topics/{}'.format(endpoint, topic_name)
|
|
|
|
+ authorizer_name = 'Ansjer_Iot_Auth'
|
|
|
|
+ signature = CommonService.rsa_sign(Token) # Token签名
|
|
|
|
+ headers = {
|
|
|
|
+ 'x-amz-customauthorizer-name': authorizer_name,
|
|
|
|
+ 'Token': Token,
|
|
|
|
+ 'x-amz-customauthorizer-signature': signature}
|
|
|
|
+ msg = eval(msg)
|
|
|
|
+ r = requests.post(url=url, headers=headers, json=msg, timeout=2)
|
|
|
|
+ if r.status_code == 200:
|
|
|
|
+ res = r.json()
|
|
|
|
+ if res['message'] == 'OK':
|
|
|
|
+ return True
|
|
|
|
+ return False
|
|
|
|
+ else:
|
|
|
|
+ return False
|
|
|
|
+ except Exception as e:
|
|
|
|
+ return False
|
|
|
|
|
|
def do_commodity_list(self, userID, request_dict, response): # 查询套餐列表
|
|
def do_commodity_list(self, userID, request_dict, response): # 查询套餐列表
|
|
uid = request_dict.get('uid', None)
|
|
uid = request_dict.get('uid', None)
|