ソースを参照

新增用户操作表,完成接口调用逻辑

zhangdongming 3 年 前
コミット
0026966454

+ 37 - 3
Controller/Surveys/CloudStorageController.py

@@ -10,11 +10,15 @@
 import logging
 import time
 
+from django.db import transaction
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
 
-from Model.models import Surveys, SurveysTitle, Order_Model, CloudVodSurveysAnswer, SurveysUserLog
+from Model.models import Surveys, SurveysTitle, Order_Model, CloudVodSurveysAnswer, SurveysUserLog, \
+    CloudVodSurveysOperateLog
+from Object.utils import LocalDateTimeUtil
+
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
@@ -50,15 +54,18 @@ class CloudStorageView(View):
         if operation == 'cloud/answer/save':
             ip = CommonService.get_ip_address(request)
             return self.answer_save(userID, ip, request_dict, response)
+        if operation == "cloud/storage/ioc/close":
+            self.cloud_vob_operate_log_save(status=2, userId=userID)
+        return response.json(0)
 
     def check_stock_user(self, user_id, response):
         order = Order_Model.objects.filter(userID=user_id, status=1, order_type=0)
-        if order.count() == 0:
+        if not order.exists() and order.count() == 0:
             return response.json(10030)
         try:
             no = '01'
             surveys = Surveys.objects.filter(no=no, user_type=1)
-            if not all(surveys):
+            if not surveys.exists():
                 return response.json(173)
             result = surveys[0]
             surveys_title = SurveysTitle.objects.filter(surveys_id=result.id).order_by('-created_time')
@@ -82,6 +89,8 @@ class CloudStorageView(View):
             }
             status = True if submit == 1 else False
             self.surveys_user_log_save(status, user_id)
+            if not submit == 1:
+                self.cloud_vob_operate_log_save(submit, userId=user_id)
             return response.json(0, data)
         except Exception as e:
             print(e)
@@ -99,6 +108,30 @@ class CloudStorageView(View):
                 user_log = SurveysUserLog(user_id=userId, type=1, created_time=createdTime)
                 user_log.save()
 
+    @classmethod
+    def cloud_vob_operate_log_save(cls, status=0, userId=''):
+        """ 保存用户操作记录 """
+        try:
+            with transaction.atomic():
+                if userId:
+                    start_time, end_time = LocalDateTimeUtil.get_today_date(True)
+                    user_operate_qs = CloudVodSurveysOperateLog.objects.filter(user_id=userId,
+                                                                               created_time__gte=start_time,
+                                                                               created_time__lte=end_time)
+                    local_time = int(time.time())
+                    if user_operate_qs.exists():
+                        operate_log = user_operate_qs.first()
+                        if not operate_log.status == status:
+                            operate_log.status = status
+                            operate_log.updated_time = local_time
+                            operate_log.save()
+                    else:
+                        operate_log = CloudVodSurveysOperateLog(user_id=userId, status=status, updated_time=local_time,
+                                                                created_time=local_time)
+                        operate_log.save()
+        except Exception as e:
+            print(e)
+
     @classmethod
     def answer_save(cls, userId, ip, request_dict, response):
         try:
@@ -129,6 +162,7 @@ class CloudStorageView(View):
                                                    created_time=createdTime, country_name=country_name)
                     answer.save()
                     SurveysUserLog.objects.filter(user_id=userId, type=1).update(is_filled=1)
+                    cls.cloud_vob_operate_log_save(status=1, userId=userId)
             return response.json(0)
         except Exception as e:
             print(e)

+ 17 - 0
Model/models.py

@@ -1982,6 +1982,7 @@ class Surveys(models.Model):
         verbose_name_plural = verbose_name
         ordering = ('id',)
 
+
 class SurveysUserLog(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     user = models.ForeignKey(Device_User, to_field='userID', default='', on_delete=models.CASCADE,
@@ -1996,6 +1997,7 @@ class SurveysUserLog(models.Model):
         verbose_name_plural = verbose_name
         ordering = ('id',)
 
+
 class SurveysTitle(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     surveys = models.ForeignKey(Surveys, to_field='id', default='', on_delete=models.CASCADE, verbose_name='关联问卷表ID')
@@ -2029,3 +2031,18 @@ class CloudVodSurveysAnswer(models.Model):
         verbose_name = '云存问卷调查—答案表'
         verbose_name_plural = verbose_name
         ordering = ('id',)
+
+
+class CloudVodSurveysOperateLog(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
+    user = models.ForeignKey(Device_User, to_field='userID', default='', on_delete=models.CASCADE,
+                             verbose_name='关联用户表ID')
+    status = models.SmallIntegerField(default=0, verbose_name='状态{0:未处理,1:提交,2:关闭}')
+    updated_time = models.IntegerField(default=0, verbose_name='更新时间')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+
+    class Meta:
+        db_table = 'cloud_vod_surveys_operate_log'
+        verbose_name = '云存问卷调查—操作日志'
+        verbose_name_plural = verbose_name
+        ordering = ('id',)

+ 47 - 0
Object/utils/LocalDateTimeUtil.py

@@ -0,0 +1,47 @@
+#!/usr/bin/python3.6
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2022 #
+# @Time    : 2022/3/26 16:20
+# @Author  : ming
+# @Email   : zhangdongming@asj6.wecom.work
+# @File    : LocalDateTimeUtil.py
+# @Software: PyCharm
+import datetime
+import time
+
+
+def get_last_first_date_and_last_date(n):
+    """
+    获取前n周开始时间和结束时间,参数n:代表前n周
+    """
+    now = datetime.datetime.now()
+    # 上周第一天和最后一天
+    before_n_week_start = now - datetime.timedelta(days=now.weekday() + 7 * n, hours=now.hour, minutes=now.minute,
+                                                   seconds=now.second, microseconds=now.microsecond)
+    # last_week_end = now - timedelta(days=now.weekday() + 1)
+    before_n_week_end = before_n_week_start + datetime.timedelta(days=6, hours=23, minutes=59, seconds=59)
+    return before_n_week_start, before_n_week_end
+
+
+def get_today_date(timestamp=False):
+    """
+    返回当天开始时间和结束时间
+    :param timestamp 是否返回时间戳
+    :returns: zero_today ,last_today
+    """
+
+    now = datetime.datetime.now()
+    zero_today = now - datetime.timedelta(hours=now.hour, minutes=now.minute, seconds=now.second,
+                                          microseconds=now.microsecond)
+    last_today = zero_today + datetime.timedelta(hours=23, minutes=59, seconds=59)
+    if timestamp:
+        zero_today = int(time.mktime(zero_today.timetuple()))
+        last_today = int(time.mktime(last_today.timetuple()))
+        return zero_today, last_today
+    return zero_today, last_today
+
+
+if __name__ == "__main__":
+    start_time, end_time = get_today_date(True)
+    print('--- start_time = {} end_time = {}'.format(start_time, end_time))