Przeglądaj źródła

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

locky 1 rok temu
rodzic
commit
8d47d1d479

+ 5 - 2
AdminController/CloudServiceManage/AgentCustomerController.py

@@ -662,11 +662,12 @@ class AgentCustomerView(View):
             for withdraw in current_page:
                 agent_customer_card = AgentCustomerCard.objects.filter(ac_id=ac_id).first()
                 card_no = agent_customer_card.card_no
+                masked_card_no = card_no[:4] + '*' * (len(card_no) - 8) + card_no[-4:]
                 withdraw_list.append({
                     'id': withdraw.id,
                     'amount': withdraw.amount,
                     'created_time': withdraw.created_time,
-                    'card_no': card_no,
+                    'card_no': masked_card_no,
                     'status': withdraw.status,
                     'remark': withdraw.remark,
                     'arrival_time': withdraw.arrival_time
@@ -855,8 +856,10 @@ class AgentCustomerView(View):
             # 可提现余额 = 总余额 - 冻结金额
             available_balance = total_profit - frozen_amount
 
+            if amount < Decimal('1000.00'):
+                return response.json(10, '每次提现最少为1000元')
             if amount > available_balance:
-                return response.json(173, f'余额不足,无法提现')
+                return response.json(10, '余额不足,无法提现')
 
             # 提交提现申请
             acc = AgentCustomerCard.objects.filter(ac_id=ac_id).first()

+ 1 - 2
AdminController/CloudServiceManage/AgentDeviceController.py

@@ -192,7 +192,6 @@ class AgentDeviceView(View):
 
         # 补全时间段内所有可能的时间单位
         current_time = start_time
-        end_time += relativedelta(days=1)  # 包括结束日期
 
         while current_time < end_time:
             time_key = current_time.strftime(time_format[time_unit]) if time_unit != "quarter" else time_format[
@@ -223,7 +222,7 @@ class AgentDeviceView(View):
             metric_type = int(request_dict.get('metric_type', 0))
 
             # endTime变成每个月最后一天
-            end_datetime = datetime.utcfromtimestamp(endTime)
+            end_datetime = datetime.fromtimestamp(endTime)
             month_str = end_datetime.strftime('%Y-%m')
             year, month = int(month_str.split('-')[0]), int(month_str.split('-')[1])
             end = calendar.monthrange(year, month)[1]

+ 14 - 1
AdminController/CloudServiceManage/AgentOrderController.py

@@ -17,7 +17,7 @@ from django.views import View
 from AgentModel.models import AgentDevice, AgentCloudServicePackage, AgentCustomerPackage, AgentDeviceOrder, \
     AgentDeviceOrderInstallment, AgentAccount
 from Ansjer.config import LOGGER
-from Model.models import Order_Model, Store_Meal, UnicomCombo
+from Model.models import Order_Model, Store_Meal, UnicomCombo, TimeZoneInfo
 from Object.CeleryBeatObject import CeleryBeatObj
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
@@ -69,6 +69,19 @@ class AgentOrderView(View):
         elif operation == 'delSettlementJob':
             self.del_settlement_job()
             return response.json(0)
+        elif operation == 'updateSettlementJob':
+            self.update_settlement_job()
+            return response.json(0)
+
+    @classmethod
+    def update_settlement_job(cls):
+        celery_beat_obj = CeleryBeatObj()
+        job_name = 'Agent-updateSettlement'
+        time_zone_info_qs = TimeZoneInfo.objects.filter(tz=8).values('zone_info')
+        if time_zone_info_qs.exists():
+            time_zone = time_zone_info_qs[0]['zone_info']
+            cron_tuple = ('*/3', '*', '*', '*', '*', time_zone)
+            celery_beat_obj.update_task(name=job_name, crontab=cron_tuple)
 
     @classmethod
     def add_settlement_job(cls):

+ 4 - 1
Controller/CeleryTasks/tasks.py

@@ -19,6 +19,7 @@ from Service.CommonService import CommonService
 import time
 from Ansjer.config import LOGGER, CONFIG_INFO, DETECT_PUSH_DOMAINS
 from Model.models import Device_User
+from AdminController.CloudServiceManage.AgentOrderController import AgentOrderView
 
 
 # ###################测试函数
@@ -77,4 +78,6 @@ def loocam_smart_scene(device_type, event_type, serial_number, scene_id=0):
 
 @app.task
 def update_installment_settlement_order():
-    LOGGER.info('update_installment_settlement_order测试周期任务')
+    LOGGER.info('start周期结算代理商订单任务')
+    AgentOrderView.update_periodic_settlement()
+    LOGGER.info('end周期结算代理商订单任务')

+ 13 - 8
Controller/CloudVod.py

@@ -16,7 +16,7 @@ from django.views.generic.base import View
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD, \
     CONFIG_INFO, CONFIG_CN
 from Model.models import Device_Info, Order_Model, Store_Meal, OssCrdModel, UID_Bucket, StsCrdModel, \
-    VodBucketModel, UidSetModel, AiService
+    VodBucketModel, UidSetModel, AiService, LogModel
 from Object.AliPayObject import AliPayObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
@@ -52,7 +52,7 @@ class CloudVodView(View):
             return self.do_getSts(request_dict, ip, response)
         # 付款完成
         elif operation == 'payExecute':
-            return self.do_paypal_execute(request_dict, response)
+            return self.do_paypal_execute(request, request_dict, response)
         elif operation == 'payOK':
             return self.do_pay_ok()
         elif operation == 'payError':
@@ -397,7 +397,7 @@ class CloudVodView(View):
                 return HttpResponse(json.dumps(res, ensure_ascii=False),
                                     content_type="application/json,charset=utf-8")
 
-    def do_paypal_execute(self, request_dict, response):
+    def do_paypal_execute(self, request, request_dict, response):
         paymentId = request_dict.get('paymentId', None)
         PayerID = request_dict.get('PayerID', None)
         orderID = request_dict.get('orderID', None)
@@ -407,13 +407,10 @@ class CloudVodView(View):
         paypalrestsdk.configure(PAYPAL_CRD)
         # ID of the payment. This ID is provided when creating payment.
         payment = paypalrestsdk.Payment.find(paymentId)
-        print(payment)
         payres = payment.execute({"payer_id": PayerID})
-        print(payres)
         if not payres:
             red_url = "{SERVER_DOMAIN}cloudVod/payError".format(SERVER_DOMAIN=SERVER_DOMAIN)
             return HttpResponseRedirect(red_url)
-        print("Payment execute successfully")
         order_qs = Order_Model.objects.filter(orderID=orderID)
         nowTime = int(time.time())
         order_qs.update(status=1, updTime=nowTime)
@@ -450,10 +447,18 @@ class CloudVodView(View):
                         OssCrdModel.objects.filter(uid=UID, channel=channel).delete()
         # 新增模式
         else:
-            print('create')
             UID_Bucket.objects.create(uid=UID, channel=channel,
                                       bucket_id=bucketId, endTime=nowTime + addTime)
-            # return response.json(0)
+        log = {
+            'ip': CommonService.get_ip_address(request),
+            'user_id': 1,
+            'status': 200,
+            'time': nowTime,
+            'content': json.dumps(request_dict),
+            'url': 'cloudVod/payExecute',
+            'operation': '订单{}回调成功'.format(orderID)
+        }
+        LogModel.objects.create(**log)
         red_url = "{SERVER_DOMAIN}cloudVod/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
         return HttpResponseRedirect(red_url)
 

+ 8 - 4
Controller/Cron/CronTaskController.py

@@ -136,6 +136,14 @@ class CronDelDataView(View):
                           '72V201353AA', '72V201354AA', '72V201355AA', '72V201254AA', 'C22501850VA',
                           'V82301850AA', 'V82301850XA', '72V201257AA', '72V201256AA', '730201350AA']
             UidSetModel.objects.filter(ucode__in=ucode_list, is_ai=2).update(is_ai=1)
+
+            # 根据设备规格码更新alexa
+            ucode_list = ['823C01552AA', '823C01550AA', '823C01550XA', '522001352AA',
+                          '823C01550TA', '823C01550VA', '823C01850XA', 'C18201850KA', '823C01850TA',
+                          'C22501850VA', 'V82301850AA', 'V82301850XA', '730201350AA', '72V201252AA',
+                          '72V201253AA', '72V201353AA', '72V201354AA', '72V201355AA', '72V201256AA']
+            UidSetModel.objects.filter(ucode__in=ucode_list, is_alexa=0).update(is_alexa=1)
+
             return response.json(0)
         except Exception as e:
             LOGGER.info('UpdateConfiguration异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
@@ -1498,7 +1506,6 @@ class CronComparedDataView(View):
             thread = threading.Thread(target=CronComparedDataView.thread_compared_paypal_order,
                                       args=(order_list['transaction_details'], end_date))
             thread.start()  # 启动线程
-            thread.join()  # 主线程等待子线程结束
             return response.json(0)
         except Exception as e:
             LOGGER.info('CronComparedDataView.compared_paypal_order, errLine:{}, errMsg:{}'.format(
@@ -1584,7 +1591,6 @@ class CronComparedDataView(View):
             thread = threading.Thread(target=CronComparedDataView.thread_compared_wechat_order,
                                       args=(order_list,))
             thread.start()
-            thread.join()  # 主线程等待子线程结束
             return response.json(0)
         except Exception as e:
             LOGGER.info('CronComparedDataView.compared_wechat_order, errLine:{}, errMsg:{}'.format(
@@ -1644,7 +1650,6 @@ class CronComparedDataView(View):
             thread = threading.Thread(target=CronComparedDataView.thread_compared_alipay_order,
                                       args=(order_list,))
             thread.start()
-            thread.join()  # 主线程等待子线程结束
             return response.json(0)
         except Exception as e:
             LOGGER.info('CronComparedDataView.compared_alipay_order, errLine:{}, errMsg:{}'.format(
@@ -1694,7 +1699,6 @@ class CronComparedDataView(View):
             thread = threading.Thread(target=CronComparedDataView.thread_compared_ansjer_order,
                                       args=(list(order_qs), start_date))
             thread.start()  # 启动线程
-            thread.join()  # 主线程等待子线程结束
             return response.json(0)
         except Exception as e:
             LOGGER.info('CronComparedDataView.compared_ansjer_order, errLine:{}, errMsg:{}'.format(

+ 66 - 0
Object/CeleryBeatObject.py

@@ -132,3 +132,69 @@ class CeleryBeatObj:
         @return:
         """
         PeriodicTask.objects.get(name=name).delete()
+
+    @staticmethod
+    def update_task(name, **kwargs):
+        """
+        更新任务
+
+        @param name: 任务名称
+        @param kwargs: 需要更新的属性及对应的值(可选)
+            - interval: (every, period) 或 IntervalSchedule 对象,用于更新间隔任务
+            - clocked_time: str 或 datetime,用于更新定时任务的时间戳
+            - crontab: (minute, hour, day_of_week, day_of_month, month_of_year, timezone) 或 CrontabSchedule 对象,用于更新周期任务
+            - task: 新的任务函数名
+            - args: 新的参数列表
+            - kwargs: 新的关键字参数字典
+            - enabled: 是否启用任务(True 或 False)
+        @return:
+            None
+        """
+        periodic_task = PeriodicTask.objects.get(name=name)
+
+        # 更新通用属性
+        if 'task' in kwargs:
+            periodic_task.task = kwargs['task']
+        if 'args' in kwargs:
+            periodic_task.args = json.dumps(kwargs['args'])
+        if 'kwargs' in kwargs:
+            periodic_task.kwargs = json.dumps(kwargs['kwargs'])
+        if 'enabled' in kwargs:
+            periodic_task.enabled = kwargs['enabled']
+
+        # 更新不同类型任务的特定属性
+        if 'interval' in kwargs:
+            if isinstance(kwargs['interval'], tuple):
+                every, period = kwargs['interval']
+                schedule, _ = IntervalSchedule.objects.get_or_create(every=every, period=period)
+            else:
+                schedule = kwargs['interval']
+            periodic_task.interval = schedule
+
+        if 'clocked_time' in kwargs:
+            if isinstance(kwargs['clocked_time'], str):
+                clocked_time = CommonService.get_date_from_timestamp(
+                    CommonService.convert_to_timestamp(0, kwargs['clocked_time']), 8)
+            else:
+                clocked_time = kwargs['clocked_time']
+            schedule, _ = ClockedSchedule.objects.get_or_create(clocked_time=clocked_time)
+            periodic_task.clocked = schedule
+
+        if 'crontab' in kwargs:
+            if isinstance(kwargs['crontab'], tuple):
+                minute, hour, day_of_week, day_of_month, month_of_year, timezone = kwargs['crontab']
+                schedule, _ = CrontabSchedule.objects.get_or_create(
+                    minute=minute,
+                    hour=hour,
+                    day_of_week=day_of_week,
+                    day_of_month=day_of_month,
+                    month_of_year=month_of_year,
+                    timezone=timezone
+                )
+            else:
+                schedule = kwargs['crontab']
+            periodic_task.crontab = schedule
+
+        periodic_task.save()
+
+