예제 #1
0
def order_count():
    """
    订单统计
    :return:
    """
    ut = UtilTime()

    lastday = ut.today.replace(days=-1)
    startdate = ut.string_to_timestamp(ut.arrow_to_string(lastday,format_v="YYYY-MM-DD")+' 00:00:00')
    enddate = ut.string_to_timestamp(ut.arrow_to_string(lastday,format_v="YYYY-MM-DD")+' 23:59:59')

    with transaction.atomic():
        print("订单统计,日期:{}...".format(ut.arrow_to_string(lastday,format_v="YYYY-MM-DD")))
        for user in Users.objects.filter(rolecode='2001',status='0',createtime__lt=enddate):
            orders = Order.objects.filter(userid=user.userid,createtime__gte=startdate,createtime__lte=enddate)

            ordercount_insert=dict()
            ordercount_insert["tot_order_count"] = orders.count()
            ordercount_insert["today_success_order_count"] = 0
            ordercount_insert["today_amount"] = 0.0
            ordercount_insert["userid"] = user.userid

            for order in orders:
                if order.status=='0':
                    ordercount_insert["today_success_order_count"] += 1
                    ordercount_insert["today_amount"] += float(order.amount)

            ordercount_insert["today_rate"] = ordercount_insert["today_success_order_count"] * 1.0 / ordercount_insert["tot_order_count"] \
                if ordercount_insert["tot_order_count"] else 0.0
            ordercount_insert["today"] = ut.arrow_to_string(lastday,format_v="YYYY-MM-DD")
            OrderCount.objects.create(**ordercount_insert)
예제 #2
0
    def pass_count(self,request):

        query_format = str()
        query_params = list()

        ut = UtilTime()
        if request.query_params_format.get("today"):
            today = request.query_params_format.get("today")
            startdate = ut.string_to_timestamp(today+' 00:00:01',format_v="YYYY-MM-DD")
            enddate =  ut.string_to_timestamp(today+' 23:59:59',format_v="YYYY-MM-DD")
        else:
            today = ut.arrow_to_string(format_v="YYYY-MM-DD")
            startdate = ut.string_to_timestamp(today+' 00:00:01')
            enddate = ut.string_to_timestamp(today+' 23:59:59')


        query_format = query_format + " and t1.createtime>=%s and t1.createtime<=%s"
        query_params.append(startdate)
        query_params.append(enddate)

        if request.query_params_format.get("paypassid"):
            query_format = query_format + " and t2.paypassid =%s"
            query_params.append(request.query_params_format.get("paypassid"))

        orders = Order.objects.raw("""
                SELECT t1.* FROM `order` as t1
                INNER JOIN `paypass` as t2 ON t1.paypass = t2.paypassid and t2.status='0'
                WHERE 1=1 %s
        """% (query_format), query_params)


        pass_order_dict={}
        for order in orders :
            if order.paypass not in pass_order_dict:
                pass_order_dict[order.paypass]={
                    "id": order.paypass,
                    "name" : order.paypassname,
                    "amount" : 0.0,
                    "order_count":0,
                    "order_success_count":0,
                    "rate" : 0.0,
                    "today" : today[:10]
                }

            pass_order_dict[order.paypass]['order_count'] += 1
            if order.status == '0':
                pass_order_dict[order.paypass]['amount'] += float(order.amount)
                pass_order_dict[order.paypass]['order_success_count'] += 1

        data = []
        for key in pass_order_dict:
            pass_order_dict[key]['rate'] = "{}%".format(round(pass_order_dict[key]['order_success_count'] * 100.0 / pass_order_dict[key]['order_count'] \
                                                                  if pass_order_dict[key]['order_count']  else 0.0 ,2))
            data.append(pass_order_dict[key])

        return {"data": data}
 def get_today_bal(self, obj):
     tot = 0
     ut = UtilTime()
     today = ut.arrow_to_string(ut.today, format_v="YYYY-MM-DD")
     today_start = ut.string_to_timestamp(today + ' 00:00:01')
     today_end = ut.string_to_timestamp(today + ' 23:59:59')
     for item in Order.objects.filter(createtime__lte=today_end,
                                      createtime__gte=today_start,
                                      status="0"):
         tot = float(tot) + float(item.myfee)
     return round(tot, 2)
예제 #4
0
 def get_today(self, obj):
     tot = 0
     ut = UtilTime()
     today = ut.arrow_to_string(ut.today, format_v="YYYY-MM-DD")
     today_start = ut.string_to_timestamp(today + ' 00:00:01')
     today_end = ut.string_to_timestamp(today + ' 23:59:59')
     for item in PayCallList.objects.filter(name=obj.name,
                                            createtime__lte=today_end,
                                            createtime__gte=today_start,
                                            status="0"):
         tot = float(tot) + float(item.amount)
     return tot
예제 #5
0
def order_valid_task():
    """
    订单过期处理,每天凌晨3点处理昨天的过期情况
    :return:
    """
    with transaction.atomic():
        ut = UtilTime()
        # last_day_time = ut.string_to_timestamp(ut.arrow_to_string(ut.today.replace(days=-1), format_v="YYYY-MM-DD") + ' 00:00:01')
        today_time = ut.string_to_timestamp(ut.arrow_to_string(ut.today,format_v="YYYY-MM-DD")+' 00:00:01')
        Order.objects.filter(createtime__lte=today_time,status="1").update(status="3",down_status='3')
예제 #6
0
class jdHandler(object):
    def __init__(self, data):
        self.data = data
        self.ut = UtilTime()

    def OrderQuery(self):

        if not self.data.get('day'):
            raise PubErrorCustom("查询日期不能为空")
        if len(self.data.get('day')) != 10:
            raise PubErrorCustom("日期格式不正确")

        start_day = self.data.get('day') + ' 00:00:01'
        end_day = self.data.get('day') + ' 23:59:59'

        start_day = self.ut.string_to_timestamp(string_s=start_day)
        end_day = self.ut.string_to_timestamp(string_s=end_day)

        return {
            "data":
            OrderModelSerializerToJd(Order.objects.filter(
                isjd='0', createtime__lte=end_day, createtime__gte=start_day),
                                     many=True).data
        }
예제 #7
0
    def business_count(self, request):

        query_format = str()
        query_params = list()

        ut = UtilTime()
        if request.query_params_format.get("today"):
            today = request.query_params_format.get("today")
            startdate = ut.string_to_timestamp(today + ' 00:00:01')
            enddate = ut.string_to_timestamp(today + ' 23:59:59')
        else:
            today = ut.arrow_to_string(format_v="YYYY-MM-DD")
            startdate = ut.string_to_timestamp(today + ' 00:00:01')
            enddate = ut.string_to_timestamp(today + ' 23:59:59')

        query_format = query_format + " and t1.createtime>=%s and t1.createtime<=%s"
        query_params.append(startdate)
        query_params.append(enddate)

        if request.query_params_format.get("userid"):
            query_format = query_format + " and t2.userid =%s"
            query_params.append(request.query_params_format.get("userid"))

        orders = Order.objects.raw(
            """
                SELECT t1.* FROM `order` as t1
                INNER JOIN `user` as t2 ON t1.userid = t2.userid and t2.status='0'
                WHERE 1=1 %s
        """ % (query_format), query_params)

        pass_order_dict = {}
        for order in orders:

            if order.userid not in pass_order_dict:
                pass_order_dict[order.userid] = dict()

            if order.paytype not in pass_order_dict[order.userid]:
                pass_order_dict[order.userid][order.paytype] = {
                    "id": order.userid,
                    "typeid": order.paytype,
                    "name": order.paytypename,
                    "amount": 0.0,
                    "order_count": 0,
                    "order_success_count": 0,
                    "rate": 0.0,
                    "today": today[:10],
                    "tech_cost": 0.0
                }

            pass_order_dict[order.userid][order.paytype]['order_count'] += 1
            if order.status == '0':
                pass_order_dict[order.userid][
                    order.paytype]['amount'] += float(order.amount)
                pass_order_dict[order.userid][
                    order.paytype]['order_success_count'] += 1
                pass_order_dict[order.userid][
                    order.paytype]['tech_cost'] += float(order.tech_cost)

        data = []

        for userid in pass_order_dict:
            for type in pass_order_dict[userid]:

                pass_order_dict[userid][type]['rate'] = "{}%".format(
                    round(pass_order_dict[userid][type]['order_success_count'] * 100.0 / pass_order_dict[userid][type]['order_count'] \
                              if pass_order_dict[userid][type]['order_count'] else 0.0, 2))
                pass_order_dict[userid][type]['endamount'] = float(
                    pass_order_dict[userid][type]['amount']) - float(
                        pass_order_dict[userid][type]['tech_cost'])
                data.append(pass_order_dict[userid][type])

        return {"data": data}
예제 #8
0
class RedisCaCheHandler(RedisCaCheHandlerBase):
    def __init__(self, **kwargs):

        #必查询字段
        self.must_params = list(set([] + kwargs.get('must_params', [])))

        #查询时过滤字段
        self.filter_params = list(
            set(['google_token', 'passwd', 'pay_passwd'] +
                kwargs.get('filter_params', [])))

        #带条件查询字段
        self.condition_params = list(
            set([] + kwargs.get('condition_params', [])))

        #请求的值
        self.filter_value = kwargs.get('filter_value') if kwargs.get(
            'filter_value') else {}

        #唯一key
        self.must_key = kwargs.get('must_key') if kwargs.get(
            'must_key') else ""

        #唯一key value
        self.must_key_value = kwargs.get('must_key_value') if kwargs.get(
            'must_key_value') else ""

        #方法
        if not kwargs.get("method"):
            raise PubErrorCustom("方法不能为空")
        self.method = kwargs.get("method")

        #表
        if not kwargs.get("table"):
            raise PubErrorCustom("表不能为空")
        self.table = kwargs.get("table")

        #序列化
        self.serialiers = kwargs.get("serialiers")

        self.ut = UtilTime()

        kwargs.setdefault('key', self.table)
        super().__init__(**kwargs)

    def filter(self):

        #查前端请求的带条件字段
        self.condition_params_web = list(
            set([] + self.filter_value.get('conditions', []))
        ) if self.filter_value else []

        self.res = self.redis_dict_get_all()

        if not self.res:
            self.res = []

        #特殊处理字段
        createtime = self.filter_value.pop(
            'createtime') if self.filter_value.get('createtime') else None

        data = []

        for key in self.res:

            isOk = True
            #必查字段处理
            for item in self.must_params:

                if not self.res[key].get(item, None):
                    isOk = False
                    break
                if str(self.res[key].get(item, None)) != self.filter_value.get(
                        'rolecode', None):
                    isOk = False
                    break
            if not isOk:
                continue

            #带条件查询字段
            for item in self.condition_params:
                rValue = self.filter_value.pop(
                    item[0]) if self.filter_value.get(item[0], None) else None

                if item[1] == 'like':
                    if rValue and item in str(
                            self.res.get(key)) and str(rValue) not in str(
                                self.res.get(key).get(item)):
                        isOk = False
                        break
                elif item[1] == '>':
                    if rValue and item in str(
                            self.res.get(key)) and str(rValue) > str(
                                self.res.get(key).get(item)):
                        isOk = False
                        break
                elif item[1] == '>=':
                    if rValue and item in str(
                            self.res.get(key)) and str(rValue) >= str(
                                self.res.get(key).get(item)):
                        isOk = False
                        break
                elif item[1] == '<':
                    if rValue and item in str(
                            self.res.get(key)) and str(rValue) < str(
                                self.res.get(key).get(item)):
                        isOk = False
                        break
                elif item[1] == '<=':
                    if rValue and item in str(
                            self.res.get(key)) and str(rValue) <= str(
                                self.res.get(key).get(item)):
                        isOk = False
                        break
                else:
                    raise PubErrorCustom("标识有误!")
            if not isOk:
                continue

            #其他查询字段
            for item in self.filter_value:
                rValue = self.filter_value.get(item, None)
                if rValue and item in str(
                        self.res.get(key)) and str(rValue) != str(
                            self.res.get(key).get(item)):
                    isOk = False
                    break
            if not isOk:
                continue

            #特殊字段处理
            if not self.timeHandler(createtime, self.res, key):
                continue

            #前端条件过滤查询
            for item in self.condition_params_web:
                if '=' in item:
                    s = item.split('=')
                    if not (str(self.res[key].get(s[0])) == str(s[1])):
                        isOk = False
                        break
                elif '≠' in item:
                    s = item.split('≠')
                    if not (str(self.res[key].get(s[0])) != str(s[1])):
                        isOk = False
                        break
                elif 'like' in item:
                    s = item.split('like')
                    if not (str(s[1]) in str(self.res[key].get(s[0]))):
                        isOk = False
                        break
                elif '>' in item:
                    s = item.split('>')
                    try:
                        if not (float(self.res[key].get(s[0])) > float(s[1])):
                            isOk = False
                            break
                    except ValueError:
                        if not (str(self.res[key].get(s[0])) > str(s[1])):
                            isOk = False
                            break
                elif '≥' in item:
                    s = item.split('≥')
                    try:
                        if not (float(self.res[key].get(s[0])) >= float(s[1])):
                            isOk = False
                            break
                    except ValueError:
                        if not (str(self.res[key].get(s[0])) >= str(s[1])):
                            isOk = False
                            break
                elif '<' in item:
                    s = item.split('<')
                    try:
                        if not (float(self.res[key].get(s[0])) < float(s[1])):
                            isOk = False
                            break
                    except ValueError:
                        if not (str(self.res[key].get(s[0])) < str(s[1])):
                            isOk = False
                            break
                elif '≤' in item:
                    s = item.split('≤')
                    try:
                        if not (float(self.res[key].get(s[0])) <= float(s[1])):
                            isOk = False
                            break
                    except ValueError:
                        if not (str(self.res[key].get(s[0])) <= str(s[1])):
                            isOk = False
                            break
                elif '∈' in item:
                    s = item.split('∈')
                    if not (str(self.res[key].get(s[0])) in str(s[1])):
                        isOk = False
                        break
            if not isOk:
                continue

            for item in self.filter_params:
                if item in self.res[key]:
                    self.res[key].pop(item)
            data.append(self.res[key])

        data.sort(key=lambda k: (k.get('createtime', 0)), reverse=True)
        return data

    def save(self):

        res = eval("{}(self.filter_value,many=False).data".format(
            self.serialiers))
        self.redis_dict_insert(res.get(self.must_key), res)

    def delete(self):
        self.redis_dict_del(self.must_key_value)

    def insertAll(self):

        res = eval("{}(self.filter_value,many=True).data".format(
            self.serialiers))
        self.redis_dict_delall()

        for item in res:
            self.redis_dict_insert(item[self.must_key], item)

    def timeHandler(self, timeValue, res, key):
        if timeValue and str(timeValue) != '-1':
            times = timeValue.split(',')

            if len(times) > 1:
                start_date = self.ut.string_to_timestamp(times[0] +
                                                         ' 00:00:01')
                end_date = self.ut.string_to_timestamp(times[1] + ' 23:59:59')
            else:
                today = self.ut.arrow_to_string(self.ut.string_to_arrow(
                    times[0], format_v="YYYY-MM-DD").replace(days=1),
                                                format_v="YYYY-MM-DD")
                if today == self.ut.arrow_to_string(format_v="YYYY-MM-DD"):
                    start_date = self.ut.string_to_timestamp(times[0] +
                                                             ' 00:00:01')
                    end_date = self.ut.string_to_timestamp(times[0] +
                                                           " 23:59:59")
                elif today < self.ut.arrow_to_string(format_v="YYYY-MM-DD"):
                    start_date = self.ut.string_to_timestamp(times[0] +
                                                             ' 00:00:01')
                    end_date = self.ut.string_to_timestamp(
                        self.ut.arrow_to_string(format_v="YYYY-MM-DD") +
                        " 23:59:59")
                else:
                    start_date = self.ut.string_to_timestamp(times[0] +
                                                             ' 00:00:01')
                    end_date = self.ut.string_to_timestamp(times[0] +
                                                           " 23:59:59")

            if res[key]['createtime'] < start_date or res[key][
                    'createtime'] > end_date:
                return False

        return True

    def run(self):

        return eval("self.{}()".format(self.method))
예제 #9
0
    def gethomedata(self, request, *args, **kwargs):

        r_data = {
            "czamount": 0.0,  # 充值金额
            "cznumber": 0,  # 充值数量
            "czamountok": 0.0,  # 充值金额
            "cznumberok": 0,  # 充值数量
            "czrate": '0.0%',  # 成功率
            "countlirun": 0.0,  # 统计利润
            "czlirun": 0.0,  # 实际利润
            "rolecode": self.request.user.rolecode
        }

        ut = UtilTime()

        start = request.query_params_format.get("start", None)
        end = request.query_params_format.get("end", None)

        start = send_toTimestamp(datetime.datetime.now().strftime('%Y-%m-%d') + ' 00:00:01') if not start else \
            ut.string_to_timestamp(start)

        end = send_toTimestamp(datetime.datetime.now().strftime('%Y-%m-%d') + ' 23:59:59') if not end else \
            ut.string_to_timestamp(end)

        query = Order.objects.filter(createtime__lte=end,
                                     createtime__gte=start)

        if self.request.user.rolecode in [
                "1000", "1002", "1001", "1005", "1006"
        ]:
            if self.request.user.rolecode == '1002':
                r_data['czlirun'] = round(Users.objects.get(userid=1).bal, 2)
            else:
                r_data['czlirun'] = round(request.user.bal, 2)
        elif self.request.user.rolecode == '2001':
            r_data['czlirun'] = round(
                Users.objects.get(userid=self.request.user.userid).bal, 2)
            query = query.filter(userid=self.request.user.userid)
        elif request.user.rolecode == "3001":
            userlink = UserLink.objects.filter(
                userid_to=self.request.user.userid)
            if not userlink.exists():
                query = Order.objects.filter(userid=0)
            else:
                links = [item.userid for item in userlink]
                query = query.filter(userid__in=links)
                r_data['czlirun'] = round(
                    Users.objects.get(userid=self.request.user.userid).bal, 2)
        else:
            raise PubErrorCustom("用户类型有误!")

        for rowItem in query:

            r_data['czamount'] += float(rowItem.amount)
            r_data['cznumber'] += 1

            if rowItem.status == '0':
                r_data['czamountok'] += float(rowItem.confirm_amount)
                r_data['cznumberok'] += 1
                if request.user.rolecode == "3001":
                    r_data['countlirun'] += float(rowItem.agentfee)
                elif request.user.rolecode[0] == '1':
                    r_data['countlirun'] += float(rowItem.myfee)

        r_data['czamountok'] = round(r_data['czamountok'], 2)
        r_data['countlirun'] = round(r_data['countlirun'], 2)
        r_data['czamount'] = round(r_data['czamount'], 2)
        r_data['czrate'] = "{}".format(
            round(r_data['cznumberok'] * 100.0 /
                  r_data['cznumber'], 2) if r_data['cznumber'] > 0 else 0)

        return {"data": r_data}