Пример #1
0
def get_collection_list():
    # json = {
    #     'page': 1,
    #     'size': 10,
    #     'put_in_status': 100,
    #     'stage': 100,
    # }

    if request.json is None:
        return fail(HTTP_OK, EMSG_PARAMS_MISSING)

    page = request.json.get('page')
    size = request.json.get('size')
    stage = request.json.get('stage')
    put_in_status = request.json.get('put_in_status')

    if not isinstance(page, int) or \
            not isinstance(size, int) or \
            not isinstance(stage, int):
        logger.error(
            "请求参数错误: page = {} size = {} stage = {} put_in_status = {}".format(
                page, size, stage, put_in_status))
        return fail(HTTP_OK, EMSG_PARAMS_ERROR)

    # 请求参数必须为正数
    if page <= 0 or size <= 0:
        msg = "请求参数错误: page = {} size = {} stage = {} put_in_status = {}".format(
            page, size, stage, put_in_status)
        logger.error(msg)
        return fail(HTTP_OK, msg)

    result_list = Collecation.get_collection_list(page, stage, put_in_status,
                                                  size)
    return success(result_list)
Пример #2
0
def admin_login():
    if request.json is None:
        logger.warn("参数错误...")
        return fail(HTTP_BAD_REQUEST, EMSG_PARAMS_MISSING)

    username = request.json.get('username', None)
    password = request.json.get('password', None)
    if username is None or password is None:
        logger.warn("用户账号密码没有传过来...")
        return fail(HTTP_UNAUTHORIZED, EMSG_PARAMS_ERROR)

    admin = Admin.get_admin_by_username(username)
    if admin is None:
        logger.warn("当前用户不存在: {}".format(username))
        return fail(HTTP_UNAUTHORIZED, u"当前用户不存在")

    if admin.password != password:
        logger.warn("当前用户密码错误: {} {}".format(username, password))
        return fail(HTTP_UNAUTHORIZED, u"密码错误!")

    # 登录用户信息
    login_user(admin, remember=True)

    logger.info("登录成功: {}".format(username))
    return success(admin.as_resp())
Пример #3
0
def request_code():
    if request.json is None:
        return fail(HTTP_BAD_REQUEST, u'缺少参数')

    mobile = request.json.get('mobile', None)
    if mobile is None:
        return fail(HTTP_BAD_REQUEST, u'手机号不能未空')

    if len(mobile) != 11:
        return fail(HTTP_BAD_REQUEST, u'手机号不合法')

    account = User.get_by_mobile(mobile)

    if account is not None:
        return fail(HTTP_BAD_REQUEST, u'手机已存在')

    if mobile_reach_ratelimit(mobile):
        return fail(HTTP_FORBIDDEN, u'验证码已发送')

    # 通过手机号请求验证码
    code = request_sms(mobile)

    if config.DEBUG:
        return success({'code': code})

    return success()
Пример #4
0
def create_address():
    current_user = get_current_user()
    if current_user is None:
        return fail(HTTP_UNAUTHORIZED, u'请使用微信客户端登录')

    user_id = current_user.id
    if request.json is None:
        return fail(HTTP_BAD_REQUEST, EMSG_PARAMS_MISSING)

    logger.info(json.dumps(request.json, ensure_ascii=False))

    province = request.json.get('province')
    logger.info("province = {}".format(province))

    city = request.json.get('city')
    area = request.json.get('area')
    location = request.json.get('location')
    contact_name = request.json.get('contact_name')
    contact_phone = request.json.get('contact_phone')

    addr = Address.create(
        user_id=user_id,
        province=province,
        city=city,
        area=area,
        location=location,
        contact_name=contact_name,
        contact_phone=contact_phone,
    )

    return success(addr.as_resp())
Пример #5
0
def update_address(a_id):
    current_user = get_current_user()
    if current_user is None:
        return fail(HTTP_UNAUTHORIZED, u'请使用微信客户端登录')

    addr = Address.get(a_id)
    if addr is None or addr.user_id != current_user.id:
        return fail(HTTP_NOT_FOUND, u'地址不存在')

    if request.method == 'POST':
        province = request.json.get('province')
        city = request.json.get('city')
        area = request.json.get('area')
        location = request.json.get('location')
        contact_name = request.json.get('contact_name')
        contact_phone = request.json.get('contact_phone')

        addr.province = province
        addr.city = city
        addr.area = area
        addr.location = location
        addr.contact_name = contact_name
        addr.contact_phone = contact_phone

        addr.save()
        return success(addr.as_resp())
    elif request.method == 'GET':
        return success(addr.as_resp())

    return fail(HTTP_OK, u'未知异常..')
Пример #6
0
def current():
    openid = session.get('openid', None)
    if openid is None:
        return fail(HTTP_UNAUTHORIZED)

    user = User.get_by_openid(openid)
    if user is None:
        return fail(HTTP_UNAUTHORIZED)

    return success(user.as_resp())
Пример #7
0
def delete_address(id):
    current_user = get_current_user()
    if current_user is None:
        return fail(HTTP_UNAUTHORIZED, u'请使用微信客户端登录')

    addr = Address.get(id)
    if addr is None:
        return fail(HTTP_NOT_FOUND, u'地址未找到')

    addr.delete()

    return success(None)
Пример #8
0
def callback():
    data = XMLData.parse(request.data)

    if data.return_code == 'SUCCESS' and data.result_code == 'SUCCESS':
        payment_no = data.out_trade_no
        transaction_id = data.transaction_id
        paid_at = datetime.strptime(data.time_end, '%Y%m%d%H%M%S')

        payment = Payment.get_by_payment_no(payment_no)
        if payment is not None and payment.status != Payment.STATUS_PAID:
            wechat_transaction = query_order_from_wechat(transaction_id)
            if wechat_transaction is None:
                return fail(HTTP_BAD_REQUEST)

            if (wechat_transaction.return_code == 'SUCCESS' and
                        wechat_transaction.result_code == 'SUCCESS'):

                remark = payment.remark
                remark['wechat_transaction_id'] = transaction_id
                payment.remark = remark

                payment.paid_at = paid_at
                payment.status = Payment.STATUS_PAID
                db.session.add(payment)

                if payment.payment_type == Payment.TYPE_RECHARGE:
                    pocket = Pocket.get_or_create_by_user_id(payment.user_id)
                    pocket.add(payment.amount)

                elif payment.payment_type == Payment.TYPE_BUY:
                    order = Order.get_by_payment_id(payment.id)
                    if order is None:
                        return fail(HTTP_BAD_REQUEST)

                    items = order.get_items()
                    for each in items:
                        if each.item_id is None:
                            item_id = gen_item_id(payment.user_id)
                            Collecation.create(
                                user_id=payment.user_id,
                                mode_id=Mode.get_default_id(),
                                item_id=item_id)
                            each.item_id = item_id
                            db.session.add(each)
                    order.status = Order.STATUS_PAYED
                    order.payment_method = Order.PAYED_WECHAT
                    db.session.add(order)

                db.session.commit()
                return success()

    return fail(HTTP_BAD_REQUEST)
Пример #9
0
def update_order_logistics():
    if request.json is None:
        return fail(HTTP_OK, EMSG_PARAMS_MISSING)

    logistics_no = request.json.get('logistics_no')
    order_id = request.json.get('id')

    is_success, msg = Order.update_logistics(order_id, logistics_no)

    if is_success:
        return success(msg)

    return fail(HTTP_OK, msg)
Пример #10
0
def update_store():
    # json = {
    #     'goods_address': '423-10',
    #     'id': 1,
    # }
    if request.json is None:
        return fail(HTTP_OK, EMSG_PARAMS_MISSING)

    goods_address = request.json.get('goods_address')
    c_id = request.json.get('id')

    is_success, msg = Collecation.put_in(c_id, goods_address)
    if is_success:
        return success(msg)
    return fail(HTTP_OK, msg)
Пример #11
0
def update_user_info():
    if request.json is None:
        return fail(HTTP_OK, EMSG_PARAMS_MISSING)

    username = request.json.get('username')
    mobile = request.json.get('mobile')
    address = request.json.get('address')
    order_id = request.json.get('id')

    is_success, msg = Order.update_user_info(order_id, username, mobile, address)

    if is_success:
        return success(msg)

    return fail(HTTP_OK, msg)
Пример #12
0
def update_stage():
    # json = {
    #     'stage': 100,
    #     'id': 1,
    # }
    if request.json is None:
        return fail(HTTP_OK, EMSG_PARAMS_MISSING)

    stage = request.json.get('stage')
    c_id = request.json.get('id')

    is_success, msg = Collecation.update_stage(c_id, stage)
    if is_success:
        return success(msg)
    return fail(HTTP_OK, msg)
Пример #13
0
def collecation():
    current_user = get_current_user()
    if current_user is None:
        return fail(HTTP_UNAUTHORIZED, u'请使用微信客户端登录')
    collecations = Collecation.get_multi_by_user(current_user.id)
    collecations = [each.as_resp() for each in collecations]
    return success(collecations)
Пример #14
0
def address_list():
    current_user = get_current_user()
    if current_user is None:
        return fail(HTTP_UNAUTHORIZED, u'请使用微信客户端登录')

    rv = [each.as_resp() for each in Address.get_multi_by_uid(current_user.id)]
    return success(rv)
Пример #15
0
def get_collection_num():
    # json = {
    #     'stage': 100,
    #     'put_in_status': 100,
    # }
    if request.json is None:
        return fail(HTTP_OK, u"参数错误")

    stage = request.json.get('stage')
    put_in_status = request.json.get('put_in_status')
    if stage is None or put_in_status is None:
        return fail(HTTP_OK, u"参数错误")

    try:
        return success(Collecation.get_collection_num(stage, put_in_status))
    except:
        logger.error("查询数据数目接口失败: stage = {} put_in_status = {} {}".format(
            stage, put_in_status, traceback.format_exc()))
    return fail(HTTP_OK, u"获取存储订单数目查询失败")
Пример #16
0
def delete_order(c_id):
    msg = u"删除订单失败: {}".format(c_id)
    try:
        is_success, msg = Collecation.delete(c_id)
        if is_success:
            return success(msg)
    except:
        logger.error("删除订单异常: {}".format(traceback.format_exc()))

    return fail(HTTP_OK, msg)
Пример #17
0
def pocket():
    current_user = get_current_user()

    if current_user is None:
        return fail(HTTP_UNAUTHORIZED, u'请使用微信客户端登录')

    user_id = current_user.id

    pocket = Pocket.get_or_create_by_user_id(user_id)

    return success(pocket.as_resp())
Пример #18
0
def recharge():
    current_user = get_current_user()

    if current_user is None:
        return fail(HTTP_UNAUTHORIZED, u'请使用微信客户端登录')

    if request.json is None:
        return fail(HTTP_BAD_REQUEST, u'缺少参数')

    amount = request.json.get('amount')

    if amount is None:
        return fail(HTTP_BAD_REQUEST, u'参数为空')

    try:
        amount = int(amount)
    except Exception:
        return fail(HTTP_BAD_REQUEST, u'充值金额错误')

    amount = int(amount)
    if amount < 1:
        return fail(HTTP_BAD_REQUEST, u'请输入充值金额')

    user_id = current_user.id

    payment = Payment.create(user_id=user_id, amount=amount,
                             payment_type=Payment.TYPE_RECHARGE)

    # 开始进行微信支付
    is_success, rv = create_jsapi_params(current_user.openid, payment)
    if is_success:
        return success(rv)
    else:
        logger.warn(rv)
        return fail(HTTP_BAD_REQUEST, u'充值失败')
Пример #19
0
def create_profile():
    openid = session.get('openid', None)
    if openid is None:
        return fail(HTTP_UNAUTHORIZED, u'请使用微信客户端访问')

    user = User.get_by_openid(openid)
    if user is not None:
        return fail(HTTP_BAD_REQUEST, u'用户已注册')

    if request.json is None:
        return fail(HTTP_BAD_REQUEST)

    mobile = request.json.get('mobile', None)
    if mobile is None:
        return fail(HTTP_BAD_REQUEST, u'请输入手机号')

    code = request.json.get('code', None)
    if code is None:
        return fail(HTTP_BAD_REQUEST, u'请输入验证码')

    # 校验手机验证码
    if validate_captcha(mobile, code):
        user = User.create(mobile, openid)
        return success(user.as_resp())

    return fail(HTTP_BAD_REQUEST, u'验证码错误')
Пример #20
0
    def decorator(*args, **kwargs):
        signature = request.args.get('signature', '')
        timestamp = request.args.get('timestamp', '')
        nonce = request.args.get('nonce', '')

        token = config.WECHAT_TOKEN

        cal_signature = _generate_signature(timestamp, nonce, token)
        if not cal_signature == signature:
            logger.warn("%s != %s" % (signature, cal_signature))
            return fail(HTTP_FORBIDDEN)

        return func(*args, **kwargs)
Пример #21
0
 def http_not_found(e):
     app.logger.warn(traceback.format_exc())
     return fail(HTTP_NOT_FOUND)
Пример #22
0
 def http_server_error(e):
     app.logger.error(traceback.format_exc())
     return fail(HTTP_SERVER_ERROR)
Пример #23
0
 def http_forbidden(e):
     app.logger.warn(traceback.format_exc())
     return fail(HTTP_FORBIDDEN)
Пример #24
0
 def http_bad_request(e):
     app.logger.warn(traceback.format_exc())
     return fail(HTTP_BAD_REQUEST)
Пример #25
0
def create_order():
    current_user = get_current_user()

    if current_user is None:
        return fail(HTTP_UNAUTHORIZED, u'请使用微信客户端登录')

    user_id = current_user.id

    if request.json is None:
        return fail(HTTP_BAD_REQUEST, EMSG_PARAMS_MISSING)

    # 产品ID?
    product_id = request.json.get('product_id')

    # 得先判断产品是否存在,你请求个没有的产品肯定不行
    product = Product.get(product_id)

    if product is None:
        return fail(HTTP_BAD_REQUEST, EMSG_PRODUCT_NOT_FOUND)

    # 地址ID
    address_id = request.json.get('address_id')

    # 支付方式
    payment_method = request.json.get('payment_method') or 'wechat'

    address = Address.get(address_id)
    if address is None:
        return fail(HTTP_BAD_REQUEST, EMSG_PARAMS_ERROR)

    if address.user_id != user_id:
        return fail(HTTP_BAD_REQUEST, EMSG_PARAMS_ERROR)

    # 买了多个箱子
    box_num = int(request.json.get('count'))
    if box_num <= 0:
        logger.warn("箱子数目不正确: {}".format(box_num))
        return fail(HTTP_BAD_REQUEST, u"箱子数目不正确")

    # 计算箱子的费用
    product_fee = product.price * box_num

    # 邮寄费用默认为0
    express_fee = EXPRESS_FEE

    order = Order.create(
        user_id=user_id,
        address_id=address_id,
        product_fee=product_fee,
        express_fee=express_fee,
        box_num=box_num
    )

    items = []
    for each in range(box_num):
        item = OrderItem.create(
            user_id=user_id,
            product_id=product_id,
            order_id=order.id
        )
        items.append(item)

    # 总费用
    total_fee = product_fee + express_fee

    is_success, rv = False, None

    if payment_method == Order.PAYED_WECHAT:
        payment = Payment.create(
            user_id=user_id,
            amount=total_fee,
            payment_type=Payment.TYPE_BUY,
        )

        order.payment_id = payment.id
        db.session.add(order)
        db.session.commit()

        # 这里是微信支付的流程
        is_success, rv = create_jsapi_params(current_user.openid, payment)

    elif payment_method == Order.PAYED_CRASH:
        pocket = Pocket.get_or_create_by_user_id(user_id)
        if pocket.balance >= total_fee:
            pocket.cut_down(total_fee)
            db.session.commit()

            # 不明白为什么现金买的 就有详细订单,微信支付的就没有详细订单了
            for each in items:
                item_id = gen_item_id(user_id)
                Collecation.create(
                    user_id=user_id,
                    mode_id=Mode.get_default_id(),
                    item_id=item_id)
                each.item_id = item_id
                db.session.add(each)

            order.status = Order.STATUS_PAYED
            order.payment_method = payment_method
            db.session.add(order)
            is_success = True
        else:
            return fail(HTTP_BAD_REQUEST,
                        u'您当前余额为 %0.2f 元,不足以支付此订单' %
                        (pocket.balance * 1.0 / 100))

    if is_success:
        return success(rv)
    else:
        if rv:
            logger.warn(rv)
        return fail(HTTP_BAD_REQUEST, u'购买失败')
Пример #26
0
def get_order_num(status):
    try:
        return success(Order.get_order_num(status))
    except:
        logger.error("查询数据数目接口失败: status = {} {}".format(status, traceback.format_exc()))
    return fail(HTTP_OK, u"订单数目查询失败")
Пример #27
0
def use_collecation():
    current_user = get_current_user()
    if current_user is None:
        return fail(HTTP_UNAUTHORIZED, u'请使用微信客户端登录')

    if request.json is None:
        return fail(HTTP_BAD_REQUEST, u'缺少参数')

    # 存储计费方式 现在默认是2块钱一天
    mode_id = request.json.get('mode_id')
    mode = Mode.get(mode_id)
    if mode is None:
        return fail(HTTP_BAD_REQUEST, u'参数错误')

    collecations = request.json.get('collecations')

    for each in collecations:
        id_ = each.get('id', None)
        if id_ is None:
            return fail(HTTP_BAD_REQUEST, u'参数错误')

    # 获得钱包信息
    pocket = Pocket.get_or_create_by_user_id(current_user.id)
    if pocket is None:
        return fail(HTTP_SERVER_ERROR, u'获取钱包信息失败')

    # 获取总金钱数目
    balance = pocket.balance
    total_fee = 0

    collection_list = []
    for each in collecations:
        c = Collecation.get(each.get('id'))
        if c is None:
            continue
        if c.status == Collecation.STATUS_USING:
            continue
        c.mode_id = mode_id
        c.status = Collecation.STATUS_USING

        # 存储入库时间
        c.requested_at = datetime.utcnow()

        # 用户添加的备注信息
        c.remark = each.get('remark')

        # 算总共需要的额度
        total_fee += Mode.get_mode_fee(mode_id)

        collection_list.append(c)

    # 如果总的消费大于余额  则不进行存储
    if total_fee > balance:
        return fail(HTTP_BAD_REQUEST,
                    u'您当前余额为 %0.2f 元,不足以支付此订单' % (pocket.balance * 1.0 / 100))

    # todo 求所有箱子的剩余天数
    # # 算出剩下来的钱
    # remain_fee = balance - total_fee
    #
    # # 计算已经入库的所有箱子的费用
    # coll_list = Collecation.get_used_coll_by_user(current_user.id)
    # cost_
    # for item in coll_list:

    # 开始存储订单
    for item in collection_list:
        db.session.add(item)
    db.session.commit()

    return success()