Эх сурвалжийг харах

Merge branch 'test' of http://192.168.136.99:3000/servers/ASJServer into peng

peng 1 жил өмнө
parent
commit
3d010229d8

+ 170 - 27
AdminController/CloudServiceManage/AgentCustomerController.py

@@ -89,14 +89,20 @@ class AgentCustomerView(View):
 
             elif operation == 'getAgentSettleOrders':
                 return self.get_agent_settle_order(userID, request_dict, response)
+            elif operation == 'getDataStatistics':
+                return self.get_data_statistics(userID, response)
+            
+            # 代理商提现功能
             elif operation == 'getAgentAccountWithdraw':
                 return self.get_agent_account_withdraw(userID, request_dict, response)
             elif operation == 'getCheckBalance':
                 return self.get_check_balance(userID, response)
-            elif operation == 'getDataStatistics':
-                return self.get_data_statistics(userID, response)
             elif operation == 'agentApplyWithdraw':
                 return self.agent_apply_withdraw(userID, request_dict, response)
+            elif operation == 'getWithdrawalReview':
+                return self.get_withdrawal_review(request_dict, response)
+            elif operation == 'updateWithdrawalReview':
+                return self.update_withdrawal_review(userID, request_dict, response)
             else:
                 return response.json(444, 'operation')
 
@@ -107,8 +113,8 @@ class AgentCustomerView(View):
         @return:
         """
         try:
-            # 云存储套餐查询,只包括is_show=1的记录
-            store_meals = Store_Meal.objects.filter(is_show=1).values('id', 'bucket__bucket').distinct()
+            # 云存储套餐查询,只包括is_show=0的记录
+            store_meals = Store_Meal.objects.filter(is_show=0).values('id', 'bucket__bucket').distinct()
 
             # 联通套餐查询,只包括is_show=1且未被删除的记录
             unicom_combos = UnicomCombo.objects.filter(is_show=1, is_del=False).values('id', 'combo_name').distinct()
@@ -192,18 +198,36 @@ class AgentCustomerView(View):
             # 获取请求页的数据
             packages_page = paginator.page(page)
             # 准备响应数据,转换查询集为列表形式
-            packages_list = list(packages_page.object_list.values(
-                'id', 'service_name', 'package_id', 'type',
-                'profit_type', 'cost', 'profit', 'status',
-                'created_time'
-            ))
+            agents_list = []
+            for agent_info in packages_page:
+                package_name = agent_info.package_id
+                if agent_info.type == 1:
+                    store_meals = Store_Meal.objects.filter(id=agent_info.package_id).values('bucket__bucket').first()
+                    if store_meals:
+                        package_name = store_meals['bucket__bucket']
+                else:
+                    unicom_combos = UnicomCombo.objects.filter(id=agent_info.package_id).first()
+                    if unicom_combos:
+                        package_name = unicom_combos.combo_name
+                agents = {
+                    'id': agent_info.id,
+                    'service_name': agent_info.service_name,
+                    'package_name': package_name,
+                    'type': agent_info.type,
+                    'profit_type': agent_info.profit_type,
+                    'cost': agent_info.cost,
+                    'profit': agent_info.profit,
+                    'status': agent_info.status,
+                    'created_time': agent_info.created_time
+                }
+                agents_list.append(agents)
             # 返回分页数据
             return response.json(0, {
                 'page': page,
                 'page_size': page_size,
                 'total': paginator.count,
                 'num_pages': paginator.num_pages,
-                'list': packages_list
+                'list': agents_list
             })
         except Exception as e:
             # 出错时返回错误信息
@@ -234,7 +258,7 @@ class AgentCustomerView(View):
             if not all([package_id, service_name]):
                 return response.json(444)
             if package_type == 1:
-                query_set = Store_Meal.objects.filter(is_show=1, id=package_id)
+                query_set = Store_Meal.objects.filter(is_show=0, id=package_id)
             elif package_type == 2:
                 query_set = UnicomCombo.objects.filter(is_show=1, is_del=False, id=package_id)
             else:
@@ -330,25 +354,49 @@ class AgentCustomerView(View):
         # 接收分页参数
         page = int(request_dict.get('page', 1))
         page_size = int(request_dict.get('page_size', 10))
+        search_query = request_dict.get('search_query', '')
+        user_id = request_dict.get('user_id', None)
+        phone = request_dict.get('phone', None)
+        userEmail = request_dict.get('userEmail', None)
 
-        # 查询AgentCustomerInfo表以获取代理商基本信息
-        agent_infos = AgentCustomerInfo.objects.filter(status=1).values(
-            'id', 'user_id', 'company_name'
-        ).order_by('id')
         try:
-            # 使用Paginator进行分页处理
+            # 基础查询条件
+            agent_infos_query = AgentCustomerInfo.objects.filter(status=1)
+
+            # 精确查询条件
+            if user_id:
+                agent_infos_query = agent_infos_query.filter(user_id=user_id)
+
+            # 获取所有符合条件的AgentCustomerInfo记录
+            agent_infos = agent_infos_query.values('id', 'user_id', 'company_name').order_by('id')
+
+            # 对结果进行分页
             paginator = Paginator(agent_infos, page_size)
-            # 获取请求页的数据
             packages_page = paginator.page(page)
+
             # 准备最终的代理商列表
             agents_list = []
             for agent_info in packages_page:
-                # 查询Device_User表获取用户信息
-                user_info = Device_User.objects.filter(userID=agent_info['user_id']).values('phone',
-                                                                                            'userEmail').first()
-                # 查询AgentCustomerCard表获取卡信息
-                card_info = AgentCustomerCard.objects.filter(ac_id=agent_info['id']).values('name', 'card_no',
-                                                                                            'card_address').first()
+                # 模糊查询
+                if search_query:
+                    card_info_query = AgentCustomerCard.objects.filter(ac_id=agent_info['id'],
+                                                                       name__icontains=search_query)
+                    if not card_info_query.exists() and search_query not in agent_info['company_name']:
+                        continue
+                else:
+                    card_info_query = AgentCustomerCard.objects.filter(ac_id=agent_info['id'])
+
+                # 获取卡信息
+                card_info = card_info_query.values('name', 'card_no', 'card_address').first()
+
+                # 获取用户信息,根据需要进行精确查询
+                user_info_query = Device_User.objects.filter(userID=agent_info['user_id'])
+                if phone:
+                    user_info_query = user_info_query.filter(phone=phone)
+                if userEmail:
+                    user_info_query = user_info_query.filter(userEmail=userEmail)
+
+                user_info = user_info_query.values('phone', 'userEmail').first()
 
                 # 组合信息
                 agent_record = {
@@ -362,8 +410,15 @@ class AgentCustomerView(View):
                     'card_address': card_info.get('card_address') if card_info else None,
                 }
                 agents_list.append(agent_record)
-            return response.json(0, {'page': page, 'page_size': page_size, 'total': paginator.count,
-                                     'num_pages': paginator.num_pages, 'list': agents_list})
+
+            # 返回分页后的结果
+            return response.json(0, {
+                'page': page,
+                'page_size': page_size,
+                'total': paginator.count,
+                'num_pages': paginator.num_pages,
+                'list': agents_list
+            })
         except Exception as e:
             print(e)
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
@@ -471,6 +526,7 @@ class AgentCustomerView(View):
 
         status = request_dict.get('status', None)
         time_str = request_dict.get('time', None)
+        package_type = request_dict.get('package_type', None)
         startTime = int(request_dict.get('start_time', 1))
         endTime = int(request_dict.get('end_time', 0))
 
@@ -498,6 +554,9 @@ class AgentCustomerView(View):
             if startTime < endTime:
                 agent_device_orders_qs = agent_device_orders_qs.filter(created_time__gte=startTime,
                                                                        created_time__lte=endTime)
+            if package_type:
+                csp_ids = list(AgentCloudServicePackage.objects.filter(type=int(package_type)).values_list('id', flat=True))
+                agent_device_orders_qs = agent_device_orders_qs.filter(csp_id__in=csp_ids)
 
             # 计算利润总额和订单总数
             total_profit = agent_device_orders_qs.aggregate(Sum('profit'))['profit__sum'] or 0
@@ -605,7 +664,7 @@ class AgentCustomerView(View):
 
         try:
             # 计算冻结金额
-            frozen_amount_qs = AgentAccountWithdraw.objects.filter(ac_id=ac_id)
+            frozen_amount_qs = AgentAccountWithdraw.objects.filter(ac_id=ac_id, status__in=[1,2,3])
             frozen_amount = frozen_amount_qs.aggregate(total=Sum('amount'))['total'] or Decimal('0.00')
 
             # 计算余额:已结算 - (退款+已打款)
@@ -742,7 +801,7 @@ class AgentCustomerView(View):
             total_profit = incomes_all - expense_all
 
             # 冻结余额
-            frozen_amount_qs = AgentAccountWithdraw.objects.filter(ac_id=ac_id)
+            frozen_amount_qs = AgentAccountWithdraw.objects.filter(ac_id=ac_id, status__in=[1,2,3])
             frozen_amount = frozen_amount_qs.aggregate(total=Sum('amount'))['total'] or Decimal('0.00')
 
             # 可提现余额 = 总余额 - 冻结金额
@@ -762,4 +821,88 @@ class AgentCustomerView(View):
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
 
+    def get_withdrawal_review(self, request_dict, response):
+        """
+        后台用户提现申请审核列表
+        @param request_dict: 请求参数
+        @param request_dict company_name: 公司名称
+        @param request_dict status: 审核状态
+        @param response: 响应对象
+        @return:
+        """
+        company_name = request_dict.get('company_name', None)
+        status = request_dict.get('status', None)
+        page = int(request_dict.get('page', 1))  # 默认为第一页
+        page_size = int(request_dict.get('page_size', 10))  # 默认每页10条记录
+        try:
+            agent_account_withdraw_qs = AgentAccountWithdraw.objects.filter().order_by('updated_time')
+            if company_name:
+                agent_customer_info = AgentCustomerInfo.objects.filter(company_name=company_name).first()
+                ac_id = agent_customer_info.id
+                agent_account_withdraw_qs = agent_account_withdraw_qs.filter(ac_id=ac_id)
+
+            if status:
+                agent_account_withdraw_qs = agent_account_withdraw_qs.filter(status=status)
 
+            # 提现id 公司名 审核状态 提现金额 余额
+            paginator = Paginator(agent_account_withdraw_qs, page_size)
+            current_page = paginator.get_page(page)
+
+            review_list = []
+
+            for review in current_page:
+                ac_id = review.ac_id
+                agent_customer_info = AgentCustomerInfo.objects.filter(id=ac_id).first()
+                company_name = agent_customer_info.company_name
+                review_list.append({
+                    "id": review.id,
+                    "company_name": company_name,
+                    "status": review.status,
+                    "amount": review.amount,
+                    "remark": review.remark,
+                })
+
+            response_data = {
+                'list': review_list,
+                'total': paginator.count,
+                'page': current_page.number,
+                'page_size': page_size,
+                'num_pages': paginator.num_pages,
+            }
+            return response.json(0, response_data)
+        except Exception as e:
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
+    def update_withdrawal_review(self, userID, request_dict, response):
+        """
+        后台提现审核
+        @param request_dict: 请求参数
+        @param request_dict id: 提现单id
+        @param request_dict status: 提现单状态
+        @param request_dict remark: 提现单备注
+        @param response: 响应对象
+        @return:
+        """
+        id = request_dict.get('id', None)
+        status = request_dict.get('status', None)
+        remark = request_dict.get('remark', "")
+
+        if not all([id, status]):
+            return response.json(444)
+
+        try:
+            agent_account_withdraw = AgentAccountWithdraw.objects.get(pk=id)
+            agent_account_withdraw.status = status
+            agent_account_withdraw.remark = remark
+            agent_account_withdraw.save()
+            if int(status) == 4:
+                AgentAccount.objects.create(ac_id=agent_account_withdraw.ac_id,
+                                            amount=agent_account_withdraw.amount,
+                                            status=3,
+                                            created_time = int(time.time()),
+                                            updated_time = int(time.time()),
+                                            remark = f"{userID}修改为已提现")
+            return response.json(0)
+
+        except Exception as e:
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))

+ 13 - 1
AdminController/CloudServiceManage/AgentDeviceController.py

@@ -227,7 +227,19 @@ class AgentDeviceView(View):
 
             result = self.calculate_profit_or_revenue(agent_device_orders, package_details, timeUnit, metric_type,
                                                       start_time, end_time)
-            return response.json(0, {'list': result})
+            total_4G = Decimal('0.00')
+            total_cloud = Decimal('0.00')
+            # 遍历result列表来累加4G和云存的值
+            for item in result:
+                total_4G = item['4G'] + total_4G
+                total_cloud = item['云存'] + total_cloud
+            response_data = {
+                    "list": result,
+                    "total_4G": total_4G,  # 4G的总和
+                    "total_云存": total_cloud,  # 云存的总和
+            }
+
+            return response.json(0, response_data)
 
         except Exception as e:
             error_msg = f"error_line:{traceback.format_exc()}, error_msg:{str(e)}"

+ 152 - 0
AdminController/CloudServiceManage/AgentOrderController.py

@@ -0,0 +1,152 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : AgentOrderController.py
+@Time    : 2024/3/14 10:53
+@Author  : stephen
+@Email   : zhangdongming@asj6.wecom.work
+@Software: PyCharm
+"""
+import threading
+import time
+from decimal import Decimal
+
+from django.http import QueryDict
+from django.views import View
+
+from AgentModel.models import AgentDevice, AgentCloudServicePackage, AgentCustomerPackage, AgentDeviceOrder
+from Model.models import Order_Model
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+from Service.CommonService import CommonService
+from Ansjer.config import LOGGER
+
+
+class AgentOrderView(View):
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.GET, request, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.POST, request, operation)
+
+    def delete(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        delete = QueryDict(request.body)
+        if not delete:
+            delete = request.GET
+        return self.validation(delete, request, operation)
+
+    def put(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        put = QueryDict(request.body)
+        return self.validation(put, request, operation)
+
+    def validation(self, request_dict, request, operation):
+        response = ResponseObject()
+        tko = TokenObject(
+            request.META.get('HTTP_AUTHORIZATION'),
+            returntpye='pc')
+        if operation == 'addOrder':
+            order_id = request_dict.get('order_id', None)
+            uid = request_dict.get('uid', None)
+            order_type = request_dict.get('order_type', None)
+            package_id = request_dict.get('package_id', None)
+
+            self.check_agent_service_package(order_id, uid, int(package_id))
+            return response.json(0)
+
+    @classmethod
+    def check_agent_service_package(cls, order_id, uid, package_id):
+        """
+        检查是否代理服务套餐
+        @param package_id: 套餐id
+        @param order_id: 订单ID
+        @param uid: UID
+        @return: True | False
+        """
+        try:
+            serial_number = CommonService.get_serial_number_by_uid(uid)
+            a_device_qs = AgentDevice.objects.filter(serial_number=serial_number) \
+                .values('ac_id', 'type', 'status')
+            LOGGER.info(f'******check_agent_service_package检查是否代理*****orderId:{order_id}')
+
+            if not a_device_qs.exists():
+                return False
+            LOGGER.info(f'******check_agent_service_package当前设备属于代理商*****serial_number:{serial_number}')
+
+            asy = threading.Thread(target=cls.save_agent_package,
+                                   args=(order_id, serial_number, a_device_qs[0]['ac_id'], package_id))
+            asy.start()
+            return True
+        except Exception as e:
+            LOGGER.info('*****AgentOrderView.check_agent_service_package:errLine:{}, errMsg:{}'
+                        .format(e.__traceback__.tb_lineno, repr(e)))
+        return False
+
+    @classmethod
+    def save_agent_package(cls, order_id, serial_number, ac_id, package_id):
+        """
+        保存代理套餐
+        """
+        try:
+            order_qs = Order_Model.objects.filter(orderID=order_id, status=1).values('price', 'payTime', 'order_type')
+            if not order_qs.exists():
+                LOGGER.info(f'******save_agent_package当前代理客户未添加此套餐******ac_id:{ac_id},package_id:{package_id}')
+                return
+
+            order_type = order_qs[0]['order_type']
+
+            package_type = 2 if order_type in [2, 3, 5] else 1  # 判断订单信息是云存还是4G
+
+            package_id = int(package_id)
+            agent_package_qs = AgentCloudServicePackage.objects.filter(type=package_type, package_id=package_id,
+                                                                       status=1)
+            if not agent_package_qs.exists():
+                LOGGER.info(f'******save_agent_package当前套餐未设置代理******order_id:{order_id},serial_number:{serial_number}')
+                return
+
+            agent_package = agent_package_qs.first()  # 代理云服务套餐
+            LOGGER.info(f'******save_agent_package代理套餐******service_name:{agent_package_qs.first().service_name}')
+            acp_qs = AgentCustomerPackage.objects.filter(ac_id=ac_id, cs_id=agent_package.id).values('id')
+            if not acp_qs.exists():
+                LOGGER.info(f'******save_agent_package当前代理客户未添加此套餐******ac_id:{ac_id},package_id:{package_id}')
+                return
+
+            # 组装数据
+            now_time = int(time.time())
+
+            pay_price = Decimal(order_qs[0]['price']).quantize(Decimal('0.00'))
+            profit = cls.calculate_order_profit(agent_package, pay_price)
+
+            dict_data = {'ac_id': ac_id, 'serial_number': serial_number, 'csp_id': agent_package.id,
+                         'order_id': order_id, 'status': 1, 'profit_amount': pay_price, 'profit': profit,
+                         'pay_time': order_qs[0]['payTime'], 'created_time': now_time, 'updated_time': now_time}
+            AgentDeviceOrder.objects.create(**dict_data)
+            LOGGER.info(f'******save_agent_package代理订单存表结束:{dict_data}')
+        except Exception as e:
+            LOGGER.info('*****AgentOrderView.save_agent_package:errLine:{}, errMsg:{}'
+                        .format(e.__traceback__.tb_lineno, repr(e)))
+
+    @classmethod
+    def calculate_order_profit(cls, agent_package, price):
+        """
+        计算利润
+        @param agent_package: 套餐配置
+        @param price: 支付价格
+        @return: 利润
+        """
+        profit = 0
+        price = Decimal(price).quantize(Decimal('0.00'))
+        if agent_package.profit_type == 1:
+            profit = agent_package.profit
+        elif agent_package.profit_type == 2:
+            profit_value = Decimal(agent_package.profit).quantize(Decimal('0.00'))
+            cost = Decimal(agent_package.cost).quantize(Decimal('0.00'))
+            profit = (price - cost) * (profit_value / 100)
+            profit = profit.quantize(Decimal('0.00'))
+        return profit

+ 1 - 1
AdminController/UserManageController.py

@@ -419,7 +419,7 @@ class UserManagement(View):
         card_name = request_dict.get('card_name', None)
         card_no = request_dict.get('card_no', "")
         card_address = request_dict.get('card_address', "")
-        phone = request_dict.get('phone', None)
+        phone = request_dict.get('phone', "")
 
         # 校验用户名,邮箱,密码是否符合规则
         dataValid = DataValid()

+ 3 - 1
AgentModel/models.py

@@ -140,7 +140,9 @@ class AgentDeviceOrder(models.Model):
     profit = models.DecimalField(default=0, max_digits=10, decimal_places=2, verbose_name='利润')
     is_del = models.BooleanField(blank=True, default=False, verbose_name=u'是否删除')
     settlement_time = models.IntegerField(default=0, verbose_name='结算时间')
-    remark = models.CharField(blank=True, default=None, max_length=128, verbose_name='备注')
+    remark = models.CharField(null=True, default=None, max_length=128, verbose_name='备注')
+    expire_time = models.IntegerField(default=0, verbose_name='套餐失效时间')
+    pay_time = models.IntegerField(default=0, verbose_name='套餐支付时间')
     created_time = models.IntegerField(default=0, verbose_name='创建时间')
     updated_time = models.IntegerField(default=0, verbose_name='修改时间')
 

+ 6 - 1
Controller/CloudStorage.py

@@ -20,6 +20,7 @@ from django.db.models import Q, F
 from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
 from django.views.generic.base import View
 
+from AdminController.CloudServiceManage.AgentOrderController import AgentOrderView
 from Ansjer.config import SERVER_DOMAIN, PAYPAL_CRD, SERVER_DOMAIN_SSL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, \
     AWS_ARN, OAUTH_ACCESS_TOKEN_SECRET, DETECT_PUSH_DOMAINS, CONFIG_INFO, CONFIG_CN, BINOCULAR_DEVICE_TYPE
 from Controller.CheckUserData import DataValid
@@ -1015,6 +1016,8 @@ class CloudStorageView(View):
                         'Dear customer,you already subscribed the cloud storage package successfully for device ' + device_name + ' on ' + time.strftime(
                             "%b %dth,%Y", time.localtime())]
                     self.do_vod_msg_notice(uid, channel, userid, lang, sys_msg_text_list, 'SMS_219738485')
+                    # 检查是否云服务代理订单
+                    AgentOrderView.check_agent_service_package(order_id, uid, rank)
                     red_url = "{}web/paid2/success.html".format(SERVER_DOMAIN_SSL)
                     if lang != 'cn':
                         red_url = red_url.replace('success.html', 'en_success.html')
@@ -1345,6 +1348,8 @@ class CloudStorageView(View):
                         'Dear customer,you already subscribed the cloud storage package successfully for device ' + device_name + ' on ' + time.strftime(
                             "%b %dth,%Y", time.localtime())]
                     self.do_vod_msg_notice(uid, channel, userid, lang, sys_msg_text_list, 'SMS_219738485')
+                    # 检查是否云服务代理订单
+                    AgentOrderView.check_agent_service_package(order_id, uid, rank)
                     redis_obj.del_data(key=order_id + 'do_notify')
                     return HttpResponse("<xml>\
                       <return_code><![CDATA[SUCCESS]]></return_code>\
@@ -1813,7 +1818,7 @@ class CloudStorageView(View):
         if not device_info_qs.exists():
             return response.json(12)
         device_vo = device_info_qs.first()
-        if device_vo.Type == 103 or device_vo.Type == 26:
+        if device_vo.Type == 103 or device_vo.Type == 26 or device_vo.Type == 39:
             return response.json(10064)
         order_id = CommonService.createOrderID()
         now_time = int(time.time())

+ 2 - 1
Controller/SensorGateway/SmartSceneController.py

@@ -1209,6 +1209,7 @@ class SmartSceneView(View):
                 condition['time'] = 'date'
                 # 根据时间戳和时区获取年月日,拼接由分钟转换出来的时间
                 time_string = CommonService.get_date_from_timestamp(now_time, tz)
+                time_string = time_string[:time_string.index('')]
                 time_string += ' {:02d}:{:02d}:00'.format(hour, minute)
                 time_stamp = CommonService.convert_to_timestamp(tz, time_string)
                 if time_stamp < now_time:
@@ -1404,7 +1405,7 @@ class SmartSceneView(View):
                 'status': 1
             }
             url = DETECT_PUSH_DOMAINS + 'gatewayService/sceneLogPush'
-            req = requests.post(url=url, data=data, timeout=8)
+            requests.post(url=url, data=data, timeout=8)
 
     @staticmethod
     def del_aps_job(scene_data_dict):

+ 11 - 6
Controller/UnicomCombo/UnicomComboController.py

@@ -138,10 +138,13 @@ class UnicomComboView(View):
                 serial_no = unicom_device_info_qs[0].serial_no
                 cls.experience_order_4G(iccid, serial_no, user_id)  # 生成4G体验订单
             unicom_api = UnicomObjeect()
+
+            # 查询正在生效套餐
             combo_order_qs = UnicomComboOrderInfo.objects.filter(iccid=iccid, status=1, is_del=False) \
                 .values('iccid', 'status', 'combo__status', 'combo__combo_name', 'combo__combo_type',
                         'combo__flow_total', 'combo__remark', 'combo__expiration_days', 'combo__expiration_type',
                         'year', 'month', 'flow_total_usage', 'expire_time', 'activation_time', 'combo__is_unlimited')
+
             if combo_order_qs.exists():
                 combo_order = combo_order_qs.first()
                 flow_details = {
@@ -157,7 +160,7 @@ class UnicomComboView(View):
                     'expirationType': combo_order['combo__expiration_type'],
                     'flowTotalUsage': combo_order['flow_total_usage'],
                     'activationTime': combo_order['activation_time'],
-                    'expireTime': combo_order['expire_time'],
+                    'expireTime': -1 if combo_order['combo__remark'] == 'LIFETIME_FREE' else combo_order['expire_time'],
                     'year': combo_order['year'],
                     'month': combo_order['month'],
                 }
@@ -171,8 +174,10 @@ class UnicomComboView(View):
                     else flow_details['usableFlow']
                 flow_details['usableFlow'] = Decimal(flow_details['usableFlow']).quantize(Decimal('0.00'))
                 flow_details.pop('flowTotalUsage')
-                cls.update_combo_order_sort(iccid)
-                flow_details['comboList'] = cls.get_combo_order_list(iccid)
+
+                cls.update_combo_order_sort(iccid)  # 排序
+
+                flow_details['comboList'] = cls.get_combo_order_list(iccid)  # 获取当前上架套餐
                 return response.json(0, flow_details)
             else:
                 flow_details = {'iccid': iccid, 'flowInvalid': 1, 'comboList': cls.get_combo_order_list(iccid)}
@@ -252,9 +257,9 @@ class UnicomComboView(View):
                 'isUnlimited': item['combo__is_unlimited'],
                 'flowTotal': item['combo__flow_total'],
                 'comboRemark': item['combo__remark'],
-                'expirationDays': item['combo__expiration_days'],
+                'expirationDays': 0,
                 'expirationType': item['combo__expiration_type'],
-                'expireTime': item['expire_time'],
+                'expireTime': -1 if item['combo__remark'] == 'LIFETIME_FREE' else item['expire_time']
             })
         return combo_list
 
@@ -1112,7 +1117,7 @@ class UnicomComboView(View):
                           'store_meal_name': combo_info_vo['combo_name']
                           }
 
-            orderID=Order_Model.objects.create(**order_dict)
+            orderID = Order_Model.objects.create(**order_dict)
             LOGGER.info(f'4G套餐订单创建成功 orderID:{orderID}, orders表写入数据')
 
             # 创建4G套餐信息记录

+ 4 - 0
Controller/UnicomCombo/UnicomComboPayNotifyController.py

@@ -15,6 +15,7 @@ from django.db import transaction
 from django.http import HttpResponse
 from django.views import View
 
+from AdminController.CloudServiceManage.AgentOrderController import AgentOrderView
 from Controller.UnicomCombo.UnicomComboController import UnicomComboView
 from Model.models import Order_Model, UnicomDeviceInfo, UnicomCombo, Device_User
 from Object.AliPayObject import AliPayObject
@@ -190,7 +191,10 @@ class UnicomComboPayNotifyView(View):
                                                         iccid, combo_id)
             order_qs.update(trade_no=trade_no, status=1, payTime=now_time, updTime=now_time)
             logger.info('购买联通套餐成功,序列号为:{}'.format(serial_no))
+            # 购买套餐成功异步短信推送
             cls.buy_async_sms_sen(user_id, serial_no, combo_id)
+            # 检查是否代理商设备
+            AgentOrderView.check_agent_service_package(order_id, device_uid, combo_id)
         redisObj.del_data(key=request_key)
         if is_wechat_pay:
             return HttpResponse("<xml>\

+ 1 - 1
Service/CommonService.py

@@ -327,7 +327,7 @@ class CommonService:
         # 使用时间戳创建 datetime 对象
         dt = datetime.datetime.fromtimestamp(timestamp, tz)
         # 格式化成 '%Y-%m-%d'
-        formatted_date = dt.strftime('%Y-%m-%d')
+        formatted_date = dt.strftime('%Y-%m-%d %H:%M:%S')
         return formatted_date
 
     # 计算N个月后的时间戳