美文网首页web服务器
爱家(租房系统)---- 订单

爱家(租房系统)---- 订单

作者: GHope | 来源:发表于2018-10-26 09:12 被阅读34次

    订单功能是整个租房项目的一个核心,也是相对来说比较复杂的一块,所以也另起一个逻辑业务文件进行管理。在项目app文件夹中创建order.py文件管理房屋租借的业务。大体设计:order负责个人订单,orders负责客户订单,根据用户的不同,客户订单与个人订单是不断发生变化的两个属性。所以,主逻辑通过订单所属不同发起请求指向实现。此处的个人订单指的是自己租的房子,客户订单是他人租的自己的房子。

    业务逻辑

    创建订单(房屋详情页实现) -- 查看个人订单和客户订单(用户主页实现) -- 修改订单状态(客户订单详情页中实现拒单和接单两种修改形态,之后在个人订单中根据反馈状态(待支付——选择支付,完成订单,之后开启评价功能;已被拒——选择取消,重新下单))
    综上共提供六个接口供前端使用,具体详情参见代码注释。

    from datetime import datetime
    
    from flask import Blueprint, request, render_template, jsonify, session
    
    from app.models import House, Order
    from utils import status_code
    
    order_blueprint = Blueprint('order', __name__)
    
    
    '''
    下单,创建预约单
    '''
    @order_blueprint.route('/create/', methods=['POST'])
    def order():
        # 接收参数
        dict = request.form
        house_id = int(dict.get('house_id'))
        start_date = datetime.strptime(dict.get('start_date'), '%Y-%m-%d')
        end_date = datetime.strptime(dict.get('end_date'), '%Y-%m-%d')
        # 验证有效性
        if not all([house_id, start_date, end_date]):
            return jsonify(status_code.PARAMS_ERROR)
        if start_date > end_date:
            return jsonify(status_code.ORDER_START_END_TIME_ERROR)
        # 查询房屋对象
        try:
            house = House.query.get(house_id)
        except:
            return jsonify(status_code.DATABASE_ERROR)
        # 创建订单对象
        order = Order()
        order.user_id = session['user_id']
        order.house_id = house_id
        order.begin_date = start_date
        order.end_date = end_date
        order.days = (end_date - start_date).days + 1
        order.house_price = house.price
        order.amount = order.days * order.house_price
    
        try:
            order.add_update()
        except:
            return jsonify(status_code.DATABASE_ERROR)
    
        # 返回信息
        return jsonify(code=status_code.OK)
    
    '''
    个人订单
    '''
    @order_blueprint.route('/my_order/', methods=['GET'])
    def my_order():
        if request.method == 'GET':
            return render_template('order.html')
    
    
    '''
    客户订单
    '''
    @order_blueprint.route('/orders/', methods=['GET'])
    def orders():
        if request.method == 'GET':
            return render_template('orders.html')
    
    
    '''
    所有订单接口
    作为租客查询订单
    '''
    @order_blueprint.route('/all_order/', methods=['GET'])
    def all_order():
    
        uid = session['user_id']
        order_list = Order.query.filter(Order.user_id == uid).order_by(Order.id.desc())
        order_list2 = [order.to_dict() for order in order_list]
        return jsonify(olist=order_list2)
    
    
    '''
    作为房东查询订单
    '''
    @order_blueprint.route('/fd/',methods=['GET'])
    def find_orders():
        uid=session['user_id']
        #查询当前用户的所有房屋编号
        hlist=House.query.filter(House.user_id==uid)
        hid_list=[house.id for house in hlist]
        #根据房屋编号查找订单
        order_list=Order.query.filter(Order.house_id.in_(hid_list)).order_by(Order.id.desc())
        #构造结果
        olist=[order.to_dict() for order in order_list]
        return jsonify(olist=olist)
    
    
    '''
    修改订单状态
    '''
    @order_blueprint.route('/orders/<int:id>/',methods=['PUT'])
    def status(id):
        #接收参数:状态
        status=request.form.get('status')
        #查找订单对象
        order=Order.query.get(id)
        #修改
        order.status=status
        #如果是拒单,需要添加原因
        if status=='REJECTED':
            order.comment=request.form.get('comment')
        #保存
        try:
            order.add_update()
        except:
            return jsonify(status_code.DATABASE_ERROR)
    
        return jsonify(code=status_code.OK)
    

    创建订单

    修改房屋出租状态,访问预留接口,创建租客订单。

     $('.submit-btn').click(function(){
            var search = document.location.search
            h_id = search.split('=')[1]
            //获取入住时间
            var startDate = $("#start-date").val();
            var endDate = $("#end-date").val();
            //发起请求下订单
            $.post('/order/create/',{
                house_id:h_id,
                start_date:startDate,
                end_date:endDate
            },function (data) {
                if(data.code== '200'){
                    location.href='/order/my_order/';
                }
            });
        });
    

    个人订单

    使用Ajax刷新个人订单信息,得到后台数据渲染到前台即可。

    $.get('/order/all_order/',function (data) {
            var order_html=template('orders-list-tmpl',{olist:data.olist});
            $('.orders-list').html(order_html);
    });
    
    

    客户订单

    首先遍历当前是否存在客户订单,展示房主功能,根据要求修改订单状态。

    $.get('/order/fd/', function (data) {
            var html = template('order_list', {olist: data.olist});
            $('.orders-list').html(html);
            //当页面元素存在后,再绑定接单、拒单事件
            //接单
            $(".order-accept").on("click", function () {
                var orderId = $(this).parents("li").attr("order-id");
                $(".modal-accept").attr("order-id", orderId);
            });
            //拒单
            $(".order-reject").on("click", function () {
                var orderId = $(this).parents("li").attr("order-id");
                $(".modal-reject").attr("order-id", orderId);
            });
        });
    
        //确定接单
        $('.modal-accept').click(function () {
            var order_id = $(this).attr('order-id');
            $.ajax({
                url: '/order/orders/' + order_id + '/',
                type: 'put',
                data: {'status': 'WAIT_PAYMENT'},
                success: function (data) {
    //                $('#accept-modal').modal("hide");
                    $('#accept-modal').hide()
                    $('.modal-backdrop').css({'display': 'None'})
                    $('.order-operate').hide();
                    $('#' + order_id).text('待支付');
                }
            });
        });
        //拒单-确定
        $('.modal-reject').click(function () {
            var order_id = $(this).attr('order-id');
            var comment=$('#reject-reason').val();
            $.ajax({
                url: '/order/orders/' + order_id + '/',
                type: 'put',
                data: {'status': 'REJECTED','comment':comment},
                success: function (data) {
                    $('.order-operate').hide();
                    $('.modal-backdrop').css({'display': 'None'})
                    $('#' + order_id).text('已拒单');
                }
            });
        });
    

    。。。
    其实吧!现在这块逻辑算是半成品,后续关于个人接到已被租住接单或拒单的相应逻辑尚未完成。鉴于时间问题。。。以后再说吧!

    相关文章

      网友评论

        本文标题:爱家(租房系统)---- 订单

        本文链接:https://www.haomeiwen.com/subject/trajzftx.html