Преглед изворни кода

修复转移AI套餐无法转移和无法生效的bug

linhaohong пре 1 година
родитељ
комит
73550e834c
1 измењених фајлова са 33 додато и 22 уклоњено
  1. 33 22
      AdminController/ServeManagementController.py

+ 33 - 22
AdminController/ServeManagementController.py

@@ -1202,19 +1202,15 @@ class serveManagement(View):
         # 订单套餐未使用
         if old_unusing_uid_bucket.exists():
             with transaction.atomic():
-                if old_unusing_uid_bucket.filter(is_ai=0).exists():
-                    old_unusing_uid_bucket.update(uid=new_uid, addTime=nowTime)
-                    new_unused_uid_bucket = Unused_Uid_Meal.objects.filter(uid=new_uid, addTime=nowTime).values(
-                        'id', 'channel', 'bucket_id', 'addTime', 'expire', 'is_ai', 'order_id'
-                    )
-                else:
-                    new_ai_service = AiService.objects.filter(uid=new_uid, endTime__gte=nowTime, use_status=1)
-                    if new_ai_service.exists():  # 转入设备有开通AI功能,不能转
-                        return response.json(10014)
-                    old_unusing_uid_bucket.update(uid=new_uid, addTime=nowTime)
-                    new_unused_uid_bucket = Unused_Uid_Meal.objects.filter(uid=new_uid, addTime=nowTime).values(
-                        'id', 'channel', 'bucket_id', 'addTime', 'expire', 'is_ai', 'order_id'
-                    )
+                # 旧设备不包含 ai
+                if old_unusing_uid_bucket.filter(is_ai=1).exists():
+                    new_uid_set = UidSetModel.objects.filter(uid=new_uid).values('is_ai')
+                    if new_uid_set[0]['is_ai'] == 2:
+                        return response.json(10016)
+                old_unusing_uid_bucket.update(uid=new_uid, addTime=nowTime)
+                new_unused_uid_bucket = Unused_Uid_Meal.objects.filter(uid=new_uid, addTime=nowTime).values(
+                    'id', 'channel', 'bucket_id', 'addTime', 'expire', 'is_ai', 'order_id'
+                )
 
                 # 转移后如果没有未使用套餐则把 has_unused 改为 0
                 unused_uid_meal_qs = Unused_Uid_Meal.objects.filter(uid=old_uid)
@@ -1222,13 +1218,19 @@ class serveManagement(View):
                     UID_Bucket.objects.filter(uid=old_uid).update(has_unused=0)
 
                 # 判断新设备是否有正在使用的套餐
-                new_uid_bucket_qs = UID_Bucket.objects.filter(uid=new_uid, endTime__gte=nowTime)
+                new_uid_bucket_qs = UID_Bucket.objects.filter(uid=new_uid, endTime__gte=nowTime, use_status=1)
                 if new_uid_bucket_qs.exists():
                     new_uid_bucket_qs.update(has_unused=1)
                 else:
                     # 激活转移的套餐
                     unused = new_unused_uid_bucket[0]
                     endTime = CommonService.calcMonthLater(unused['expire'])
+                    # 判断是否有已过期套餐
+                    if UID_Bucket.objects.filter(uid=new_uid).exists():
+                        UID_Bucket.objects.filter(uid=new_uid).update(status=1, orderId=orderID, updateTime=nowTime,
+                                                                      use_status=1, has_unused=0, endTime=endTime,
+                                                                      bucket_id=unused['bucket_id'], channel=unused['channel'],
+                                                                      addTime=unused['addTime'])
                     data_dict = {
                         'uid': new_uid,
                         'channel': unused['channel'],
@@ -1242,14 +1244,19 @@ class serveManagement(View):
                         'orderId': unused['order_id']
                     }
                     UID_Bucket.objects.create(**data_dict)  # 正在使用套餐表添加数据
-                    Unused_Uid_Meal.objects.filter(order_id=orderID).first().delete()
                     if unused['is_ai']:  # 开通AI服务
-                        AiService.objects.filter(orders_id=orderID).update(
-                            uid=new_uid, channel=unused['channel'],
-                            detect_status=new_ai_service[0]['detect_status'],
-                            addTime=nowTime, updTime=nowTime, endTime=endTime, use_status=1,
-                            orders_id=unused['order_id']
-                        )
+                        new_aiservice = AiService.objects.filter(uid=new_uid)
+                        if new_aiservice.filter(use_status=1 or 0).exists():
+                            return response.json(10014)
+                        if new_aiservice.exists():
+                            new_aiservice.update(channel=unused['channel'], detect_status=1, addTime=nowTime,
+                                                 updTime=nowTime, endTime=endTime, use_status=1, orders_id=unused['order_id'])
+                        else:
+                            AiService.objects.create(uid=new_uid, channel=unused['channel'], detect_status=1, addTime=nowTime,
+                                                 updTime=nowTime, endTime=endTime, use_status=1, orders_id=unused['order_id'])
+
+                    Unused_Uid_Meal.objects.filter(order_id=orderID).first().delete()
+
                 # 修改订单表
                 Order_Model.objects.filter(orderID=orderID).update(UID=new_uid, updTime=nowTime)
 
@@ -1281,6 +1288,10 @@ class serveManagement(View):
                     return response.json(10014)
             with transaction.atomic():
                 if is_delete == 1:
+                    if AiService.objects.filter(orders_id=orderID).exists():
+                        ai_service = AiService.objects.filter(uid=old_uid).first()
+                        if ai_service:
+                            ai_service.delete()
                     new_using_uid_bucket.delete()
                 # 如果转出设备有未使用套餐,更改第一个未使用套餐为正在使用
                 if old_using_uid_bucket[0]['has_unused'] == 1:
@@ -1326,7 +1337,7 @@ class serveManagement(View):
                                                                                 detect_group='', detect_interval=60)
                     msg = {'commandType': 'AIDisable'}
                     thing_name = CommonService.query_serial_with_uid(old_uid)  # 存在序列号则为使用序列号作为物品名
-                    topic_name = 'ansjer/generic/{}'.format('')
+                    topic_name = 'ansjer/generic/{}'.format(thing_name)
                     req_success = CommonService.req_publish_mqtt_msg(thing_name, topic_name, msg)
                     if not req_success:
                         return response.json(10044)