예제 #1
0
def add_dataset():
    req_json = request.get_json(force=True)

    res = ResMsg()
    result = es.index(index='news', doc_type='politics', body=req_json)
    res.update(data=result)
    return res.data
예제 #2
0
def log_list():
    """
    获取日志列表
    :return:
    """
    current_app.logger.debug('aodifoads')
    res = ResMsg()
    obj = request.args
    n_user = db.session.query(User).all()
    n_teacher = db.session.query(Teacher).all()
    n_student = db.session.query(Student).all()
    n_class = db.session.query(Class).all()
    n_log = db.session.query(Log).filter(Log.student_id == obj['sid']).all()
    dataList = []
    for log in n_log:
        logObj = log
        for user in n_user:
            if user.id == log.operator_id:
                logObj.operator_name = user.nick_name
        for teacher in n_teacher:
            if teacher.id == log.teacher_id:
                logObj.teacher_name = teacher.name
        for student in n_student:
            if student.id == log.student_id:
                logObj.student_name = student.name
        for cls in n_class:
            if cls.id == log.class_id:
                logObj.class_name = cls.class_name
        dataList.append(logObj)
    data = {dataList: dataList}
    res.update(data=data)
    return res.data
예제 #3
0
def add_customer():
    """
    添加客户
    :return:
    """
    res = ResMsg()
    try:
        customer = request.get_json(force=True)
        user_name = session["user_name"]
        user = db.session.query(User).filter(
            User.username == user_name).first()
        if not customer or not user:
            res.update(code=ResponseCode.InvalidParameter)
            return res.data

        customer_count = db.session.query(Customer).filter(
            Customer.name == customer.get("name")).count()
        if customer_count != 0:
            res.update(code=ResponseCode.RepeatUserName)
            return res.data

        customer_obj = Customer()
        customer_obj.name = customer.get("name")
        customer_obj.email = customer.get("email")
        customer_obj.users.append(user)

        db.session.add(customer_obj)
        db.session.commit()
        res.update(data=model_to_dict(customer_obj))

    except Exception as ex:
        logging.error(ex)
        res.update(code=ResponseCode.Fail)

    return res.data
예제 #4
0
파일: order.py 프로젝트: etscript/wizwxapp
def edit_order(id):
    '''
    功能: 小程序订单状态修改

    参数: 
    <int:id> 订单的id
    {
      "status": "状态", // complete, checking
      "result": "生成文件的地址" //绝对路径
    }

    返回格式: {
      "status": "complete", // 已完成
      "company": '上海思华科技股份有限公司',
      "create": "2000-08-15 00:00:00.0",
      "complete": "2000-08-15 00:00:00.0",
      "id": 234,
      "price": 39.9,
      "code": "sdasdasdsadsadsadasd" // 订单号,
    }
    '''
    data = request.get_json()
    if not data:
        code = ResponseCode.InvalidParameter
        data = 'You must post JSON data.'
        return ResMsg(code=code, data=data).data

    order = Order.query.get_or_404(id)
    order.from_dict(data)
    db.session.commit()

    # 制作返回内容
    return ResMsg(data=data).data
예제 #5
0
def test_refresh_token():
    """
    刷新token,获取新的数据获取token
    :return:
    """
    res = ResMsg()
    refresh_token = request.args.get("refresh_token")
    if not refresh_token:
        res.update(code=ResponseCode.InvalidParameter)
        return res.data
    payload = Auth.decode_auth_token(refresh_token)
    # token被串改或过期
    if not payload:
        res.update(code=ResponseCode.PleaseSignIn)
        return res.data

    # 判断token正确性
    if "user_id" not in payload:
        res.update(code=ResponseCode.PleaseSignIn)
        return res.data
    # 获取新的token
    access_token = Auth.generate_access_token(user_id=payload["user_id"])
    data = {
        "access_token": access_token.decode("utf-8"),
        "refresh_token": refresh_token
    }
    res.update(data=data)
    return res.data
예제 #6
0
파일: order.py 프로젝트: etscript/wizwxapp
def send_order():
    '''
    功能: 小程序下单

    参数: {
      "status": "complete", // 已完成
      "company": '上海思华科技股份有限公司',
      "price": 39.9,
    }

    返回格式: {
      "status": "complete", // 已完成
      "company": '上海思华科技股份有限公司',
      "create": "2000-08-15 00:00:00.0",
      "id": 234,
      "price": 39.9,
      "code": "sdasdasdsadsadsadasd" // 订单号,
    }
    '''
    data = request.get_json()
    if not data:
        code = ResponseCode.InvalidParameter
        data = 'You must post JSON data.'
        return ResMsg(code=code, data=data).data

    order = Order()
    data["wxuser_openid"] = g.current_user.to_dict()["openid"]
    data["code"] = get_order_code()
    order.from_dict(data)

    db.session.add(order)
    db.session.commit()

    # 制作返回内容
    return ResMsg(data=data).data
예제 #7
0
def handle_stats_dashborad():
    """
    基本业务统计
    今日新用户 et_members
    今日任务提交 et_task_orders
    今日分销数 et_member_drps
    今日提现 et_member_withdrawal
    DAU -7days 
    :return: json
    """
    res = ResMsg()
    id = request.args.get("id", 1)

    member_sql = 'select count(id) as num from et_members  where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(reg_time);'
    task_orders_sql = 'select count(id) as num from et_task_orders where status>1 and DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(add_time);'
    member_drps_sql = 'select count(id) as num from et_member_drps where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(add_time);'
    member_wd_sql = 'select count(id) as num from et_member_withdrawal where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(start_time);'

    new_mems = db.session.execute(member_sql).first()
    new_task_orders = db.session.execute(task_orders_sql).first()
    member_drps = db.session.execute(member_drps_sql).first()
    member_wds = db.session.execute(member_wd_sql).first()

    res_data = dict()

    stats = {}
    stats['m'] = new_mems[0]
    stats['o'] = new_task_orders[0]
    stats['d'] = member_drps[0]
    stats['w'] = member_wds[0]
    res_data['infos'] = stats

    res.update(code=ResponseCode.Success, data=res_data, msg=f'获取成功')
    return res.data
예제 #8
0
def course_list():
    """
    获取课程列表
    :return:
    """
    res = ResMsg()
    obj = request.args
    stu_cls = db.session.query(StuCls).filter(StuCls.student_id == obj['sid']).all()
    classid_arr = []
    for sc in stu_cls:
        classid_arr.append(sc.class_id)
    cls_wd = db.session.query(ClsWd).filter(ClsWd.class_id.in_(classid_arr)).all()
    n_class = db.session.query(Class).filter(Class.id.in_(classid_arr)).all()
    weekSet = set([])
    for sw in cls_wd:
        weekSet.add(sw.weekday)
    course_list = {}
    for wd in weekSet:
        week_cls = []
        # 获取每周几的班级id列表
        for clswd in cls_wd:
            if clswd.weekday == wd:
                week_cls.append(clswd.class_id)
        cls_arr = []
        for wc in week_cls:
            for nc in n_class:
                if wc == nc.id:
                    cls_arr.append(nc)
        course_list[wd] = cls_arr
    res.update(data = {
        'course_list': course_list
    })
    return res.data
예제 #9
0
def test_tree():
    """
    测试无限层级目录树
    :return:
    """
    res = ResMsg()
    data = [
        {"id": 1, "father_id": None, "name": "01"},
        {"id": 2, "father_id": 1, "name": "0101"},
        {"id": 3, "father_id": 1, "name": "0102"},
        {"id": 4, "father_id": 1, "name": "0103"},
        {"id": 5, "father_id": 2, "name": "010101"},
        {"id": 6, "father_id": 2, "name": "010102"},
        {"id": 7, "father_id": 2, "name": "010103"},
        {"id": 8, "father_id": 3, "name": "010201"},
        {"id": 9, "father_id": 4, "name": "010301"},
        {"id": 10, "father_id": 9, "name": "01030101"},
        {"id": 11, "father_id": 9, "name": "01030102"},
    ]

    new_tree = Tree(data=data)

    data = new_tree.build_tree()

    res.update(data=data)
    return res.data
예제 #10
0
def get_incomes():
    res = ResMsg()

    client_id = request.args.get("id")
    if not client_id:
        res.update(ResponseCode.InvalidParameter)
        return res.data

    client_obj = Client.query.filter(Client.id == client_id).first()
    if not client_obj:
        res.update(code=ResponseCode.NoResourceFound)
        return res.data

    user_obj = User.query.filter(User.name == session["user_name"]).first()
    if user_obj not in client_obj.users:
        res.update(code=ResponseCode.AccessNotAuthorized)
        return res.data

    incomes_obj = Income.query.filter(Income.client_id == client_id).order_by(
        Income.date)
    income_json = model_to_dict(incomes_obj)
    res.update(data={
        key: [pair[key] for pair in income_json]
        for key in ('date', 'value')
    })
    return res.data
예제 #11
0
def email_client():
    res = ResMsg()

    user_name = session["user_name"]
    client_id = request.form.get("id")
    if not user_name or not client_id:
        res.update(code=ResponseCode.InvalidParameter)
        return res.data

    user_obj = User.query.filter(User.name == user_name).first()
    client_obj = Client.query.filter(Client.id == client_id).first()
    if not client_obj:
        res.update(code=ResponseCode.NoResourceFound)
        return res.data
    if user_obj not in client_obj.users:
        res.update(code=ResponseCode.AccessNotAuthorized)
        return res.data

    subject = request.form.get("subject", "")
    body = request.form.get("body", "")
    file = request.files.get('file', None)
    logger.info(type(file))
    if file:
        result = EmailSender.send_email(client_obj.email, subject, body,
                                        file.stream.read(), file.filename)
    else:
        result = EmailSender.send_email(client_obj.email, subject, body)

    if not result:
        res.update(code=ResponseCode.SendEmailFailed)

    return res.data
예제 #12
0
def test_phone_login_or_register():
    """
    用户验证码登录或注册
    :return:
    """
    res = ResMsg()

    obj = request.get_json(force=True)
    phone = obj.get('account', None)
    code = obj.get('code', None)
    if phone is None or code is None:
        res.update(code=ResponseCode.InvalidParameter)
        return res.data
    # 验证手机号和验证码是否正确
    flag = PhoneTool.check_phone_code(phone, code)
    if not flag:
        res.update(code=ResponseCode.InvalidOrExpired)
        return res.data

    # 登陆或注册
    data = phone_login_or_register(phone)

    if data is None:
        res.update(code=ResponseCode.Fail)
        return res.data
    res.update(data=data)
    return res.data
예제 #13
0
def get_clients():
    res = ResMsg()

    name = session["user_name"]
    user_obj = User.query.filter(User.name == name).first()
    res.update(data=model_to_dict(user_obj.clients))

    return res.data
예제 #14
0
def test_get_verification_code():
    """
    获取手机验证码
    :return:
    """
    now = datetime.now()
    res = ResMsg()

    category = request.args.get("category", None)
    # category 参数如下:
    # authentication: 身份验证
    # login_confirmation: 登陆验证
    # login_exception: 登陆异常
    # user_registration: 用户注册
    # change_password: 修改密码
    # information_change: 信息修改

    phone = request.args.get('phone', None)

    # 验证手机号码正确性
    re_phone = PhoneTool.check_phone(phone)
    if phone is None or re_phone is None:
        res.update(code=ResponseCode.MobileNumberError)
        return res.data
    if category is None:
        res.update(code=ResponseCode.InvalidParameter)
        return res.data

    try:
        # 获取手机验证码设置时间
        flag = Redis.hget(re_phone, 'expire_time')
        if flag is not None:
            flag = datetime.strptime(flag, '%Y-%m-%d %H:%M:%S')
            # 判断是否重复操作
            if (flag - now).total_seconds() < 60:
                res.update(code=ResponseCode.FrequentOperation)
                return res.data

        # 获取随机验证码
        code = "".join([str(random.randint(0, 9)) for _ in range(6)])
        template_param = {"code": code}
        # 发送验证码
        sms = SendSms(phone=re_phone,
                      category=category,
                      template_param=template_param)
        sms.send_sms()
        # 将验证码存入redis,方便接下来的验证
        Redis.hset(re_phone, "code", code)
        # 设置重复操作屏障
        Redis.hset(re_phone, "expire_time",
                   (now + timedelta(minutes=1)).strftime('%Y-%m-%d %H:%M:%S'))
        # 设置验证码过去时间
        Redis.expire(re_phone, 60 * 3)
        return res.data
    except Exception as e:
        logger.exception(e)
        res.update(code=ResponseCode.Fail)
        return res.data
예제 #15
0
def test_unified_response():
    """
    测试统一返回消息
    :return:
    """
    res = ResMsg()
    test_dict = dict(name="zhang", age=18)
    res.update(code=ResponseCode.Success, data=test_dict)
    return jsonify(res.data)
예제 #16
0
def test_get_data():
    """
    测试登陆保护下获取数据
    :return:
    """
    res = ResMsg()
    name = session.get("user_name")
    data = "{},你好!!".format(name)
    res.update(data=data)
    return res.data
예제 #17
0
def get_info():
    res = ResMsg()

    name = session["user_name"]
    user_obj = User.query.filter(User.name == name).first()
    user_json = model_to_dict(user_obj)
    user_json['n_clients'] = len(user_obj.clients)
    res.update(data=user_json)

    return res.data
예제 #18
0
def delete_dataset():
    req_json = request.get_json(force=True)
    id = req_json.get("id")
    if not id:
        res.update(code=ResponseCode.InvalidParameter)
        return res.data
    res = ResMsg()
    result = es.delete(index='news', doc_type='politics', id=id)
    res.update(data=result)
    return res.data
예제 #19
0
def user_info():
    """
    获取用户信息
    :return:
    """
    res = ResMsg()
    name = session.get("user_name")
    current_app.logger.debug(session)
    data = {"name": name, "nick_name": session.get("user_nickname")}
    res.update(data=data)
    return res.data
예제 #20
0
def test_get_captcha():
    """
    获取图形验证码
    :return:
    """
    res = ResMsg()
    new_captcha = CaptchaTool()
    img, code = new_captcha.get_verify_code()
    res.update(data=img)
    session["code"] = code
    return res.data
예제 #21
0
def get_qrcode():
    res = ResMsg()
    # 创建flag
    wechat_flag = create_flag()
    # 创建微信带参二维码
    # 创建一天有效期的二维码, 参数使用字符串而不是数字id
    res_qrcode = make_qrcode(client, scene_str=wechat_flag)
    # 创建二维码地址
    url = client.qrcode.get_url(res_qrcode['ticket'])

    res.update(data=dict(qrcode_url=url, wechat_flag=wechat_flag))
    return res.data
예제 #22
0
def create_user():
    """
    用户注册
    ---
    tags:
      - 用户相关接口
    description:
        用户注册接口,json格式
    parameters:
      - name: body
        description: 用户注册接口的body数据
        in: body
        type: object
        required: true
        schema:
          id: 用户
          required:
            - username
            - password
          properties:
            username:
              type: string
              description: 用户账号.
            name:
              type: string
              description: 用户名字.
            password:
              type: string
              description: 密码.
            email:
              type: string
              description: 邮箱.
            remark:
              type: string
              description: 备注.
            department_id:
              type: integer
              description: 部门id.
    responses:
      200:
        description: 
    """
    data = request.get_json()
    if not data:
        code = ResponseCode.InvalidParameter
        return ResMsg(code=code, data='You must post JSON data.').data

    user = User()
    user.from_dict(data, new_user=True)
    db.session.add(user)
    db.session.commit()

    return ResMsg(data='用户创建成功').data
예제 #23
0
def test_packed_response():
    """
    测试响应封装
    :return:
    """
    res = ResMsg()
    test_dict = dict(name="zhang", age=18)
    # 此处只需要填入响应状态码,即可获取到对应的响应消息
    res.update(code=ResponseCode.Success, data=test_dict)
    # 此处不再需要用jsonify,如果需要定制返回头或者http响应如下所示
    # return res.data,200,{"token":"111"}
    return res.data
예제 #24
0
def update_department(id):
    """
    更新某个部门
    ---
    tags:
      - 部门相关接口
    description:
        部门信息接口
    parameters:
      - name: id
        in: path
        type: integer
        description: 用户id
      - name: body
        description: 部门的数据格式
        in: body
        type: string
        required: true
        schema:
          id: 部门
          required:
            - name
            - describe
            - members
            - active
            - permissions
          properties:
            name:
              type: string
              description: 部门名称.
            describe:
              type: string
              description: 部门描述.
            permissions:
              type: string
              description: 权限设置.
            active:
              type: boolean
              description: 是否启用.
    responses:
      200:
        description: 
    """
    department = Department.query.get_or_404(id)
    data = request.get_json()
    if not data:
        code = ResponseCode.InvalidParameter
        return ResMsg(code=code, data='You must post JSON data.').data

    department.from_dict(data)
    db.session.commit()
    return ResMsg(data=department.to_dict()).data
예제 #25
0
def test_pdf():
    """
    测试pdf报表输出
    :return:
    """
    res = ResMsg()
    report_path = current_app.config.get("REPORT_PATH", "./report")
    file_name = "{}.pdf".format(uuid.uuid4().hex)
    path = os.path.join(report_path, file_name)
    path = pdf_write(path)
    path = path.lstrip(".")
    res.update(data=path)
    return res.data
예제 #26
0
def delete_tags():
    '''删除一个tag'''
    id = request.get_json()["id"]
    tag = Tag.query.get_or_404(id)
    # db.session.delete(haowen)
    if tag.haowens.all():
      code = ResponseCode.TagHasArticles
      data = 'Tag 还有相关文章!'
      return ResMsg(code=code, data=data).data
    
    tag.delete_tag = 1
    db.session.commit()
    return ResMsg(message='Tag删除成功!').data
예제 #27
0
def get_all_customers():
    res = ResMsg()
    customers = db.session.query(Customer).filter().all()
    customers_json = []
    for customer in customers:
        incomes_dic = model_to_dict(customer.incomes)
        customer_dic = model_to_dict(customer)
        customer_dic["incomes"] = incomes_dic
        customers_json.append(customer_dic)

    res.update(data=customers_json)

    return res.data
예제 #28
0
def student_list():
    """
    获取学员列表
    :return:
    """
    res = ResMsg()
    # obj = request.get_json(force=True)
    obj = request.args
    name = obj.get("name") or None
    phone = obj.get("phone") or None
    type = obj.get("type") or None
    page_index = int(obj.get("page"))
    page_size = int(obj.get("count"))
    filters = {
        or_(Student.name == name, name == None),
        or_(Student.phone == phone, phone == None),
        or_(Student.type == type, type == None),
    }
    # current_app.logger.debug(db.session.query(Student).filter(*filters).order_by(Student.id).limit(page_size).offset((page_index-1)*page_size))
    db_student = db.session.query(Student).filter(*filters).order_by(Student.id).limit(page_size).offset((page_index-1)*page_size).all()
    total_count = db.session.query(Student).filter(*filters).count()
    all_class = db.session.query(Class).all()
    student_list = []
    for stu in db_student:
        class_id = []
        n_stu_cls = db.session.query(StuCls).filter(StuCls.student_id == stu.id).all()
        for nstu in n_stu_cls:
            for cla in all_class:
                if nstu.class_id == cla.id:
                    class_id.append(cla)
        student_list.append({
            'id': stu.id,
            'name': stu.name,
            'type': stu.type,
            'phone': stu.phone,
            'birthday': stu.birthday,
            'age': stu.age,
            'class_id': class_id,
            'used_hour': stu.used_hour,
            'left_hour': stu.left_hour,
            'remark': stu.remark
        })
    data = {
            "students": student_list,
            "page": page_index,
            "count": page_size,
            "total": total_count
            }
    
    res.update(data=data)
    return res.data
예제 #29
0
def user_login():
    """
    登陆成功获取到数据获取token和刷新token
    :return:
    """
    res = ResMsg()
    obj = request.get_json(force=True)
    user_name = obj.get("username")
    user_password = obj.get("password")
    db_user = db.session.query(User).filter(User.name == user_name).first()
    # 未获取到参数或参数不存在
    if not obj or not user_name or not user_password or not db_user:
        res.update(code=ResponseCode.InvalidParameter)
        return res.data

    if user_name == db_user.name and user_password == db_user.password:
        # 生成数据获取token和刷新token
        access_token, refresh_token = Auth.encode_auth_token(user_id=user_name)

        data = {
            "access_token": access_token.decode("utf-8"),
            # "refresh_token": refresh_token.decode("utf-8")
        }
        res.update(data=data)
        return res.data
    else:
        res.update(code=ResponseCode.AccountOrPassWordErr)
        return res.data
예제 #30
0
def test_login():
    """
    登陆成功获取到数据获取token和刷新token
    :return:
    """
    res = ResMsg()
    obj = request.get_json(force=True)
    user_name = obj.get("name")
    # 未获取到参数或参数不存在
    if not obj or not user_name:
        res.update(code=ResponseCode.InvalidParameter)
        return res.data

    if user_name == "qin":
        # 生成数据获取token和刷新token
        access_token, refresh_token = Auth.encode_auth_token(user_id=user_name)

        data = {
            "access_token": access_token.decode("utf-8"),
            "refresh_token": refresh_token.decode("utf-8")
        }
        res.update(data=data)
        return res.data
    else:
        res.update(code=ResponseCode.AccountOrPassWordErr)
        return res.data