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)
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)
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
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')
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 }
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}
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))
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}