def user_charge(user_id, charge_num): try: # 检查支付账户余额是否满足此次充值 payment_account = SysUser().get_one8id(settings.PaymentAccount) if payment_account.balance - charge_num < 0: # 支付账户余额不足 return False # 更新支付账户余额 res = SysUser().update( where={"id": payment_account.id}, data={"balance": payment_account.balance - Decimal(charge_num)}) if not res: return False # 更新待充值账户余额 user = SysUser().get_one8id(user_id) res = SysUser().update( where={"id": user_id}, data={"balance": user.balance + Decimal(charge_num)}) if not res: return False return True except: return False
def get(self, *args, **kwargs): try: user_id = self.get_args("id", "") if not user_id: self.send_fail_json("id不能为空") return user_model = SysUser() res = user_model.delete(where={"id": user_id}) if not res: self.send_fail_json("删除失败") return write_log("'{}'删除了一个用户(ID为:{})".format(self.user["id"], user_id), LOG_TYPE_OPERATE) self.send_ok_json("") except Exception as ex: write_log("{}.{} raise exception, ex={}".format( self.__class__.__name__, sys._getframe().f_code.co_name, repr(ex))) self.send_fail_json("系统错误,稍会儿再试")
def main(): data = dict( role_id=1, name="admin", pwd=hashlib.md5("000000{}".format( settings.PLATFORM_USER_PASSWORD_SECRET).encode( "utf-8")).hexdigest(), enable=True, comments="超管", create_time=datetime.datetime.now(), ) SysUser().add(data=data)
def post(self, *args, **kwargs): """ 执行充值 :param args: :param kwargs: :return: """ try: user_id = self.get_args("user_id", "") if is_empty(user_id): self.send_fail_json("用户id不能为空") return # 充值数量 charge_num = self.get_args("charge_num") if is_empty(charge_num): # 充值数量不能为空 self.send_fail_json("充值数量不能为空") return charge_num = Decimal(charge_num) # 查询支付账户余额是否满足此次充值 payment_account = SysUser().get_one8id(settings.PaymentAccount) if payment_account.balance - charge_num < 0: # 支付账户余额不足 self.send_fail_json("支付账户余额不足") return # 用户充值 res = db_engine.transaction(dbengine_transaction, func=user_charge, user_id=user_id, charge_num=charge_num) if not res: self.send_fail_json("充值失败") return write_log( "'{}'给用户(ID为:{})充值了{} {}".format( self.user["id"], user_id, charge_num, settings.COIN_NAME, ), LOG_TYPE_OPERATE) self.send_ok_json("") except Exception as ex: write_log("{}.{} raise exception, ex={}".format( self.__class__.__name__, sys._getframe().f_code.co_name, repr(ex))) self.send_fail_json("系统错误,稍会儿再试")
def get_template_namespace(self): """ 添加额外的模板变量, 默认有: handler=self, request=self.request, current_user=self.current_user, locale=self.locale, _=self.locale.translate, static_url=self.static_url, xsrf_form_html=self.xsrf_form_html, reverse_url=self.reverse_url """ user = SysUser().get_one8id(self.user["id"]) if self.user else dict() add_names = dict( filter_none=myfilter.filter_none, json_loads=myjson.loads, settings=settings, user=user, ) name = super().get_template_namespace() name.update(add_names) return name
def get(self, *args, **kwargs): """ 加载修改用户表单页 :param args: :param kwargs: :return: """ # 获取用户 user_id = self.get_args("id", "") if is_empty(user_id): self.send_fail_json("用户id不能为空") return user = SysUser().get_one8id(user_id) # 获取角色 roles = Role().get_all() self.render("system/user-add.html", one=user, roles=roles, user_init_pwd=settings.PLATFORM_USER_INITIAL_PWD)
def create_orders(user={}, order_data={}): """ 创建订单 :param user: :param order_data: :return: """ now = datetime.now() amount = Decimal(order_data["product_numbers"]) * Decimal( order_data["product_price"]) balance_after = Decimal(user["balance"]) - amount if not user or not order_data or balance_after < 0: return False try: # 第一步:更新用户账户余额信息 now_timestamp = int(time.time() * (10**6)) res = SysUser().update({"id": user["id"]}, {"balance": balance_after}) if not res: return False # 第二步:创建订单 # 更新订单字典 order_data.update(create_time=now, order_number=now_timestamp) # 实例化订单实体 orders = get_orders_obj(order_data["product_types"]) order_res = orders.add(order_data) if not order_res: return False # 第三步:插入日志到用户消费日志表 consume_log_data = { "user_id": user["id"], "amount": amount, "create_time": now, "comments": "购买“{}”产品,订单号为:{}".format(order_data["product_name"], now_timestamp) } log_res = SysUserConsumeLog().add(consume_log_data) if not log_res: return False # 第四步:将订单信息插入到消息队列rabbitmq中 # 消息队列名称 rabbit_exchange_name = get_rabbitmq_exchange_name( product_types=order_data["product_types"]) # 待插入到消息队列中的数据 rabbit_msg = dict(product_types=order_data["product_types"], product_numbers=order_data["product_numbers"], weibo_url=order_data["weibo_url"], order_id=order_res.lastrowid, comment_id=order_data.get("comment_id", "")) # 插入消息到消息队列 res_status = ExchangeRabbitMQ( rabbitmq_host=settings.RABBITMQ_HOST, rabbitmq_port=settings.RABBITMQ_PORT, user_name=settings.RABBITMQ_USER, user_pwd=settings.RABBITMQ_PWD, virtual_host=settings.RABBITMQ_VIRTUAL_HOST).sender( body=myjson.dumps(rabbit_msg), exchange_name=rabbit_exchange_name) if not res_status: return False return True except: return False
def post(self, *args, **kwargs): """ 执行修改用户 :param args: :param kwargs: :return: """ try: user_id = self.get_args("user_id", "") if is_empty(user_id): self.send_fail_json("用户id不能为空") return # 用户角色 role_id = self.get_args("role_id") if is_empty(role_id): # 角色不能为空 self.send_fail_json("角色不能为空") return # 用户名 name = self.get_args("name") if is_empty(name): # 用户名不能为空 self.send_fail_json("用户名不能为空") return # 登录密码 pwd = self.md5_password( self.get_args("pwd", "") if self. get_args("pwd", "") else settings.PLATFORM_USER_INITIAL_PWD) # 是否启用 enable = self.get_args("enable", "0") data = dict( role_id=role_id, name=name.lower(), pwd=pwd, enable=enable, update_time=datetime.now(), ) # 父级id fid = self.get_args("fid", "") if fid: data["fid"] = fid # 备注 comments = self.get_args("comments") if comments: data["comments"] = comments res = SysUser().update(where={"id": user_id}, data=data) if not res: self.send_fail_json("更新失败") return write_log("'{}'修改了一个用户(ID为:{})".format(self.user["id"], user_id), LOG_TYPE_OPERATE) self.send_ok_json("") except Exception as ex: write_log("{}.{} raise exception, ex={}".format( self.__class__.__name__, sys._getframe().f_code.co_name, repr(ex))) self.send_fail_json("系统错误,稍会儿再试")
def post(self, *args, **kwargs): try: # 产品id product_id = self.get_args("product_id") if is_empty(product_id): self.send_fail_json("产品id不能为空") return product = Product().get_one8id(product_id) # 微博地址 weibo_url = self.get_args("weibo_url") res = re.match(r'^https://weibo\.com/\S*', weibo_url) if res is None: self.send_fail_json("微博地址不正确") return # 产品数量 product_numbers = self.get_args("amount") res = re.match(r'^\d+$', str(product_numbers)) if res is None: self.send_fail_json("数量必须为整数") return # 数量处理,乘以精度 product_numbers = int(product_numbers) * settings.PRODUCT_BUY_PRECISION data = dict( user_id=self.user["id"], product_id=product_id, product_name=product.name, product_types=self.product_types, product_price=product.price, product_numbers=product_numbers, weibo_url=weibo_url, ) if product.types == PRODUCT_TYPES_WEIBO_COMMENT_LIKE: # 如果是微博评论赞,则必须要一个评论id comment_id = self.get_args("comment_id", "") if not comment_id: self.send_fail_json("评论id不能为空") return data.update(comment_id=comment_id) # 备注 comments = self.get_args("comments") if not is_empty(comments): data.update(comments=comments) # 查看用户账户余额是否足够支撑本次订单 user = SysUser().get_one8id(self.user["id"]) if (user.balance - product_numbers * product.price) < 0: self.send_fail_json("创建订单失败,账户余额不足") return # 创建订单 res = db_engine.transaction( dbengine_transaction, func=create_orders, user=user, order_data=data) if not res: self.send_fail_json("创建订单失败") return write_log("'{}'添加了一个订单(product_id:{},产品名为:{},数量为:{},单价为:{})".format( user["id"], product_id, product.name, product_numbers, product.price), LOG_TYPE_OPERATE) self.send_ok_json("创建订单成功,可去\"个人中心->我的订单\"中查看") except Exception as ex: write_log("{}.{} raise exception, ex={}".format( self.__class__.__name__, sys._getframe().f_code.co_name, repr(ex) )) self.send_fail_json("系统错误,稍会儿再试")