def order_status_upd1(self, request, *args, **kwargs): if not len(self.request.data_format.get("orders")): raise PubErrorCustom("订单号不能为空!") for ordercode in self.request.data_format.get("orders"): PayCallBase().work_handler_updbal(ordercode=ordercode)
def appHomeData(self, request): res = { "rate": 0.0, "totorder": 0, "sorder": 0, "amount": 0.0, "totamount": 0.0 } print(request.query_params_format) start_datetime = send_toTimestamp( request.query_params_format.get("startdate") + ' 00:00:01') end_datetime = send_toTimestamp( request.query_params_format.get("enddate") + ' 23:59:59') if self.request.user.rolecode in ["1000", "1001", "1005", "1006"]: pass else: raise PubErrorCustom("权限不足!") obj = Order.objects.filter(createtime__lte=end_datetime, createtime__gte=start_datetime) if obj.exists: for item in obj: res['totamount'] += float(item.amount) res['totorder'] += 1 if item.status == '0': res['amount'] += float(item.amount) res['sorder'] += 1 res['rate'] = round(res['sorder'] * 100.0 / res['totorder'], 2) if res['totorder'] else 0.0 return {"data": res}
def finance_order_count(self, request, *args, **kwargs): query = OrderCount.objects.filter() if request.query_params_format.get("startdate") and request.query_params_format.get("enddate"): query = query.filter( today__lte = request.query_params_format.get("enddate")[:10], today__gte = request.query_params_format.get("startdate")[:10]) if self.request.user.rolecode in ["1000", "1001"]: if request.query_params_format.get("userid"): query = query.filter(userid=request.query_params_format.get("userid")) elif self.request.user.rolecode == '2001': 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 = query.filter(userid=0) else: query = query.filter(userid__in=[item.userid for item in userlink]) if request.query_params_format.get("userid"): query = query.filter(userid=request.query_params_format.get("userid")) else: raise PubErrorCustom("用户类型有误!") page=int(request.query_params_format.get('page')) page_size=int(request.query_params_format.get('page_size')) page_start = page_size * page - page_size page_end = page_size * page res = query.filter().order_by('-today') headers = { 'Total': res.count(), } return {"data":OrderCountModelSerializer(res[page_start:page_end], many=True).data,"header":headers}
def passwdupd(self, request, *args, **kwargs): if request.user.passwd != request.data.get('passwd'): raise PubErrorCustom("登录密码错误!") request.user.passwd = request.data.get('new_passwd') request.user.save() return None
def cashoutlist1_query(self, request, *args, **kwargs): QuerySet = CashoutList.objects.all() if self.request.user.rolecode in ["1000", "1001"]: pass elif self.request.user.rolecode == '2001': QuerySet = QuerySet.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(): QuerySet = CashoutList.objects.filter(userid=0) else: QuerySet = QuerySet.filter( userid__in=[item.userid for item in userlink]) else: raise PubErrorCustom("用户类型有误!") return { "data": CashoutListModelSerializer( QuerySet.filter(status__in=["1", "2"]).order_by('-updtime'), many=True).data }
def list(self, request): is_type = self.request.query_params.get('is_type', '3') if str(is_type) != '1' and str(is_type) != '2': raise PubErrorCustom("is_type有误!") where_sql = str() params = list() code = self.request.query_params.get('code', None) supplier_id = self.request.query_params.get('supplier_id', None) start_dt = self.request.query_params.get('start_dt', None) end_dt = self.request.query_params.get('end_dt', None) order_code = self.request.query_params.get('order_code', None) limit = self.request.query_params.get('ym', None) start_limit = self.request.query_params.get('start_ym', None) end_limit = self.request.query_params.get('end_ym', None) if code: where_sql = "{} and LOCATE(%s,t2.code)>0".format(where_sql) params.append(code) if order_code: where_sql = "{} and LOCATE(%s,t1.use_code)>0".format(where_sql) params.append(order_code) if limit: limit = limit.replace('-', '') where_sql = "{} and t2.limit=%s".format(where_sql) params.append(limit) if supplier_id and str(supplier_id) != 'all' and str( supplier_id) != '0': where_sql = "{} and t2.supplier_id = %s".format(where_sql) params.append(supplier_id) if start_dt and end_dt and end_dt >= start_dt: where_sql = "{} and ( (substr(t1.use_code,1,2)='FA' and t1.refund_date >= %s and t1.refund_date <= %s ) or \ (substr(t1.use_code,1,2)!='FA' and t1.order_date >= %s and t1.order_date <= %s ) )".format( where_sql) params.append(start_dt) params.append(end_dt) params.append(start_dt) params.append(end_dt) if start_limit and end_limit and end_limit >= start_limit: start_limit = start_limit.replace('-', '') end_limit = end_limit.replace('-', '') where_sql = "{} and t2.limit >=%s and t2.limit <=%s ".format( where_sql) params.append(start_limit) params.append(end_limit) if str(is_type) == '1': return { 'data': NoFRceiptSerializer(noticket_query(where_sql=where_sql, params=params), many=True).data } elif str(is_type) == '2': return { 'data': YesFRceiptSerializer(yesticket_query(where_sql=where_sql, params=params), many=True).data }
def paypasslinktype_query(self, request, *args, **kwargs): print(self.request.query_params_format) query_format = str() query_params = list() if self.request.query_params_format.get("id"): query_format = query_format + " and t2.to_id=%s" query_params.append(self.request.query_params_format.get("id")) if self.request.query_params_format.get("type"): query_format = query_format + " and t2.type=%s" query_params.append(self.request.query_params_format.get("type")) if self.request.query_params_format.get("isAgent") == 1: if not self.request.query_params_format.get("userid"): raise PubErrorCustom("用户ID不能为空") query_format = query_format + " and t2.userid in (%s,0)" query_params.append(self.request.query_params_format.get("userid")) elif not self.request.query_params_format.get( "isAgent") and self.request.query_params_format.get("userid"): query_format = query_format + " and t2.userid ='%s'" query_params.append(self.request.query_params_format.get("userid")) else: query_format = query_format + " and t2.userid ='0'" paytype = PayType.objects.raw( """ SELECT t1.*,t2.rate,t2.passid,t2.userid FROM paytype as t1 INNER JOIN paypasslinktype as t2 on t1.paytypeid = t2.paytypeid WHERE 1=1 %s order by t1.createtime """ % (query_format), query_params) data = PayTypeModelSerializer(paytype, many=True).data r_data = [] if self.request.query_params_format.get("isAgent") == 1: for item in data: if len(r_data): isFlag = False for item_r_data in r_data: if item_r_data['paytypeid'] == item[ 'paytypeid'] and item_r_data['type'] == item[ 'type']: if int(item_r_data['userid']) > 0: isFlag = True break else: item_r_data['rate'] = item['rate'] item_r_data['userid'] = item['userid'] item_r_data['createtime'] = item['createtime'] isFlag = True break if isFlag: continue r_data.append(item) return {"data": r_data} else: return {"data": data}
def qrcode_order_get(self,request, *args, **kwargs): try: order=Order.objects.get(ordercode=request.data_format.get("ordercode")) except Order.DoesNotExist: raise PubErrorCustom("订单号不存在!") return get_qrcode_path(order)
def orderquery(self, request,*args,**kwargs): user = request.user trantype=self.request.query_params.get('trantype',None) status=self.request.query_params.get('status',None) if not trantype: raise PubErrorCustom("trantype是空!") print("trantype:",trantype,"userid:",user.userid) if str(trantype) == '0' or str(trantype) == '1': orderfilter = Order.objects.filter(userid=user.userid, trantype=trantype,status__in=[0,1],umark=0).order_by('-confirmtime','-matchtime','-createtime') elif str(trantype) == '2' : orderfilter = Order.objects.filter(userid=user.userid, status=2,umark=0).order_by('-confirmtime') else: raise PubErrorCustom("trantype非法!") return {'data':OrderSerializer(orderfilter,many=True).data}
def run(self): isIpValid = False for item in self.data[0]['dfobj'].split(','): if str(item) == str(self.ip): isIpValid = True break if not isIpValid: raise PubErrorCustom("拒绝访问!")
def call_run(self): self.check_sign() if not self.data.get("businessId") or self.data.get( "businessId") != self.businessId: raise PubErrorCustom("商户ID不存在!") if not self.data.get("amount"): raise PubErrorCustom("金额不能为空!") if not self.data.get("signType") or self.data.get("signType") != 'MD5': raise PubErrorCustom("签名类型不正确") if not self.data.get("outTradeNo"): raise PubErrorCustom("商户订单号为空!") if not self.data.get("orderState"): raise PubErrorCustom("订单状态为空!") if self.data.get("orderState") == 'success': try: order = Order.objects.select_for_update().get( ordercode=self.data.get("outTradeNo")) except Order.DoesNotExist: raise PubErrorCustom("订单号不正确!") if order.status == '0': raise PubErrorCustom("订单已处理!") PayCallLastPass().run(order=order)
def check_referee_name(kwargs): referee_name = kwargs.get('referee_name') try: user = Users.objects.get( Q(mobile=referee_name) | Q(username=referee_name)) kwargs['referee_name'] = user.mobile except Users.DoesNotExist: raise PubErrorCustom("推荐人不存在!") return user
def init_qrcode_obj(self, id=None): """ 初始化二维码结构 :return: """ if id: try: self.qrcode_obj = Qrcode.objects.select_for_update().get(id=id) except Qrcode.DoesNotExist: raise PubErrorCustom("无此二维码") else: self.qrcode_obj = Qrcode.objects.select_for_update().filter( name=self.name, status='0', type=self.type) if not self.qrcode_obj.exists(): logger.error("无对应二维码, name{},type{}".format( self.name, self.type)) raise PubErrorCustom("无对应二维码") self.qrcode_obj = self.qrcode_obj[0]
def login(self, request, *args, **kwargs): try: user = ServerAdminUser.objects.get( username=request.data.get('username'), passwd=request.data.get('passwd')) except ServerAdminUser.DoesNotExist: raise PubErrorCustom('登录账号或密码错误!') return {'data': {'userid': user.userid, 'username': user.username}}
def update(self, request, *args, **kwargs): pk = kwargs.get('pk', None) img_url = self.request.data.get('img_url', None) if pk and img_url: isinstance = Statement.objects.filter(code=pk) if not isinstance: raise PubErrorCustom("未找到") isinstance.update(img_url=img_url) return []
def decrypt(word, key='LXJMTZCVFKQZNQ2J'): try: word = word.encode('utf-8') crypto = AESCrypto(key, key) data = base64.b64decode(word) return crypto.decrypt(data) except Exception as e: print(str(e)) raise PubErrorCustom("请求格式有误!")
def check_sign(self): parastring = (self.data['merchant_id'] + self.data['orderid'] + self.data['money'] + self.secret).encode("gb2312") sign = hashlib.md5(parastring).hexdigest() if self.data['sign'] != sign: raise PubErrorCustom("签名不正确")
def work_handler_updbal(self,ordercode=None,memo='调账'): """ 手工修改余额,传入摘要 :return: """ if not ordercode : raise PubErrorCustom("订单号不能为空") self.init_order_obj(ordercode=ordercode) self.order_obj.confirm_amount = self.order_obj.amount self.amount = self.order_obj.amount # 商户技术费 stand_rate = get_Rate(self.order_obj.userid, paytypeid=self.order_obj.paytype) self.order_obj.tech_cost = float(self.order_obj.confirm_amount) * float(stand_rate) upd_bal(userid=self.order_obj.userid, bal=float(self.order_obj.confirm_amount) - float(self.order_obj.tech_cost), up_bal=self.amount, memo=memo, ordercode=self.order_obj.ordercode) # AccountHandler(isPay=True,userid=self.order_obj.userid) # 代理费用 agent_free = 0.0 for item in UserLink.objects.filter(userid=self.order_obj.userid).order_by('-level'): rate = get_Rate(item.userid_to, paytypeid=self.order_obj.paytype) amount = float(self.order_obj.confirm_amount) * float(stand_rate - rate) if float( stand_rate - rate) > 0.0 else 0.0 if amount > 0.0: upd_bal(userid=item.userid_to, bal=amount, up_bal=self.amount, memo=memo, ordercode=self.order_obj.ordercode) stand_rate = rate agent_free += amount self.order_obj.agentfee = agent_free if self.order_obj.paypass in (0, 1): self.init_qrcode_obj(self.order_obj.qr_id) # 码商费用以及码商流水 rate = get_Rate(self.qrcode_obj.userid, paytypeid=self.order_obj.paytype, type="2") self.order_obj.codefee = float(self.order_obj.confirm_amount) * float(rate) upd_bal(userid=self.qrcode_obj.userid, bal=self.order_obj.codefee, up_bal=self.amount, memo=memo, ordercode=self.order_obj.ordercode,flag=True,upd_business_agent_tot=True) else: # 上游聚到服务费 paypass = PayPass.objects.get(paypassid=self.order_obj.paypass) rate = get_Rate(paypass.paypassid, paytypeid=self.order_obj.paytype, type="0") self.order_obj.codefee = float(self.order_obj.confirm_amount) * float(rate) paypass.bal = float(paypass.bal) + float(self.order_obj.codefee) # 咱们自己的收入 self.order_obj.myfee = float(self.order_obj.tech_cost) - float(self.order_obj.codefee) - float(agent_free) if self.order_obj.userid not in [3,20,5]: upd_bal(userid=1, bal=self.order_obj.myfee, up_bal=self.amount, memo=memo, ordercode=self.order_obj.ordercode,upd_business_agent_tot=True) self.order_obj.save()
def helper_stop(self): res=send_request(url="http://localhost:5000/helper_wechat_stop",method='POST',data={ "runname":self.runname, "basepath":self.basepath, "path":self.path, "md5name":self.md5name }) if not res[0]: raise PubErrorCustom("连接登录服务器有误,请联系客服!")
def call_run(self): self.check_sign() if not self.data.get("money"): raise PubErrorCustom("金额不能为空!") if not self.data.get("orderid"): raise PubErrorCustom("商户订单号为空!") if self.data.get("status") == '1': try: order = Order.objects.select_for_update().get( ordercode=self.data.get("orderid")) except Order.DoesNotExist: raise PubErrorCustom("订单号不正确!") if order.status == '0': raise PubErrorCustom("订单已处理!") PayCallLastPass().run(order=order)
def call_run(self): self.check_sign() if not self.data.get("total"): raise PubErrorCustom("金额不能为空!") if not self.data.get("api_order_sn"): raise PubErrorCustom("商户订单号为空!") if self.data.get("callbacks") == 'CODE_SUCCESS': try: order = Order.objects.select_for_update().get( ordercode=self.data.get("api_order_sn")) except Order.DoesNotExist: raise PubErrorCustom("订单号不正确!") if order.status == '0': raise PubErrorCustom("订单已处理!") PayCallLastPass().run(order=order)
def call_run(self): if not self.data.get("total_fee"): raise PubErrorCustom("金额不能为空!") if not self.data.get("out_order_no"): raise PubErrorCustom("商户订单号为空!") self.check_sign() if self.data.get("trade_status") == 'TRADE_SUCCESS': try: order = Order.objects.select_for_update().get( ordercode=self.data.get("out_order_no")) except Order.DoesNotExist: raise PubErrorCustom("订单号不正确!") if order.status == '0': raise PubErrorCustom("订单已处理!") PayCallLastPass().run(order=order)
def check_request_param(self): if not self.request_param.get("down_ordercode"): raise PubErrorCustom("订单号不存在!") try: amount = float(self.request_param.get('amount')) if amount <= 0.0: raise PubErrorCustom("订单金额不能为0") except: raise PubErrorCustom("订单金额格式不正确!") # try: # timestamp_toDatetime(self.request_param.get('createtime')) # except: self.request_param['createtime'] = datetime_toTimestamp() if not self.request_param.get('client_ip'): raise PubErrorCustom("客户端IP不能为空!") if not self.request_param.get("notifyurl"): raise PubErrorCustom("回调地址不能为空!") if not self.request_param.get("ismobile"): raise PubErrorCustom("是否手机标志不能为空!") if Order.objects.filter(userid=self.user.userid, down_ordercode=self.request_param.get('down_ordercode')).exists(): raise PubErrorCustom("该订单已生成,请勿重复生成订单!") paypass = self.get_paypasslinktype() if not self.request_param.get('paytypeid'): if not len(paypass): raise PubErrorCustom("通道暂未开放!") if len(paypass) > 1: raise PubErrorCustom("通道暂未开放!") self.request_param['paytypeid'] = paypass[0].paytypeid self.paypasslinktype = paypass[0] else: for item in paypass: if str(item.paytypeid) == str(self.request_param.get('paytypeid')): self.paypasslinktype = item if not self.paypasslinktype: raise PubErrorCustom("通道传入有误!")
def paypass_del(self,request, *args, **kwargs): try: pay=PayPass.objects.get(paypassid = request.data_format.get("paypassid")) pay.status = 2 pay.save() except PayPass.DoesNotExist: raise PubErrorCustom("该支付渠道不存在!") return None
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 order_status_upd(self, request, *args, **kwargs): if self.request.data_format.get("orders") and len( self.request.data_format.get("orders")) > 1: raise PubErrorCustom("手工上分只允许单笔操作!") if len(self.request.data_format.get("orders")): try: order = Order.objects.select_for_update().get( ordercode=self.request.data_format.get("orders")[0]) except Order.DoesNotExist: raise PubErrorCustom("订单号不存在!") if order.status == '0': raise PubErrorCustom("请勿重复补单!") else: raise PubErrorCustom("订单号不能为空") PayCallLastPass().handwork_run(order=order)
def matchexchange(res): match1 = res['match1'] match2 = res['match2'] tgbz_obj = dict() jsbz_obj = dict() tgbz_split = dict() jsbz_split = dict() for item in match1: try: order = Order.objects.get(ordercode=item.ordercode) except Order.DoesNotExist: raise PubErrorCustom("订单号[%d]不存在!" % (item.ordercode)) tgbz_obj[item.ordercode] = { 'amount': item.amount, 'obj': item, 'install_obj': order } tgbz_split[item.ordercode] = { 'userid': item.userid, 'username': item.username, 'orders': [] } for item in match2: try: order = Order.objects.get(ordercode=item.ordercode) except Order.DoesNotExist: raise PubErrorCustom("订单号[%d]不存在!" % (item.ordercode)) jsbz_obj[item.ordercode] = { 'amount': item.amount, 'obj': item, 'install_obj': order } jsbz_split[item.ordercode] = { 'userid': item.userid, 'username': item.username, 'orders': [] } return tgbz_obj, jsbz_obj, tgbz_split, jsbz_split
def orderrclimit(user,amount): if user.rcqlimit > 0 : if amount < user.rcqlimit: raise PubErrorCustom("不能低于上次认筹金额%d" % (user.rcqlimit)) else: order=Order.objects.filter(userid=user.userid,umark=0,trantype=0) obj=list() diffamount=list() for item in order: obj.append({'ordercode':item.ordercode,'amount':item.amount,'createtime':item.createtime}) b = list() if len(obj): for item in obj: if item['ordercode'] in b: continue t=list() for t_item in Tranlist.objects.filter(trantype=24,ordercode=item['ordercode']): for j in t_item.tranname.split('[')[1].replace(']','')[:-1].split(','): t.append(int(j)) for j in list(set(t)): if j!=item['ordercode']: try: order = Order.objects.get(ordercode=j, umark=0) item['amount']+=order.amount b.append(j) except Order.DoesNotExist: pass for item in obj: if item['ordercode'] in b: continue t = timestamp_toDatetime(item['createtime']).strftime("%Y-%m-%d") if t < "2018-11-26" and item['amount']<5000 and item['amount']>2000: item['amount']=2000 diffamount.append(item['amount']) if len(diffamount): maxamount=max(diffamount) if amount<maxamount: raise PubErrorCustom("不能低于上次认筹金额%d"%(maxamount))
def destroy(self, request, *args, **kwargs): codes = request.data.get('codes', []) if not len(codes): raise PubErrorCustom("请选择要删除的记录!") objects = Statement.objects.filter(code__in=codes) if not objects.exists(): raise PubErrorCustom("无此账单!") else: for obj in objects: if obj.status in [3, 4]: raise PubErrorCustom("请勿删除已发布的账单!") if obj.status == 2: obj.status = 1 obj.save() StatementDetail.objects.filter(code=obj.code).update( status=1) else: obj.delete() StatementDetail.objects.filter(code=obj.code).delete() return []
def call_run(self): self.check_sign() if not self.data.get("amount"): raise PubErrorCustom("金额不能为空!") if not self.data.get("mchOrderNo"): raise PubErrorCustom("商户订单号为空!") self.data["amount"] = float(self.data.get("amount")) / 100.0 if str(self.data.get("status")) == '2': try: order = Order.objects.select_for_update().get( ordercode=self.data.get("mchOrderNo")) except Order.DoesNotExist: raise PubErrorCustom("订单号不正确!") if order.status == '0': raise PubErrorCustom("订单已处理!") PayCallLastPass().run(order=order)