Ejemplo n.º 1
0
def reply(apply_id, text):
    """
    邮件回复投递(团队)
    @apply_id:
    @text: 邮件内容
    成功:返回OK_REPLY
    失败:返回ERR_REPLY_DB
    """
    apply_select_rlt = job_apply.id_select(apply_id)

    # 如果查询投递记录成功
    if apply_select_rlt['tag'] == OK_SELECT:
        apply = apply_select_rlt['apply']
        stu_select_rlt = stu_info.select(apply.stu_id)

        # 如果获取关联的学生成功
        if stu_select_rlt['tag'] == OK_SELECT:
            mail = stu_select_rlt['stu'].mail
            send_mail('WeMeet投递职位回复邮件', text, '*****@*****.**', [mail])  # TODO(hjf): 修改邮件标题、发送邮箱
            return OK_REPLY

        # 如果无法获取关联的学生
        else:
            logger.error('数据库异常,无法获取与投递记录关联的学生信息')
            return ERR_REPLY_DB

    # 如果投递记录不存在
    elif apply_select_rlt['tag'] == ERR_SELECT_NOTEXIST:
        logger.warning('尝试回复不存在的投递')
        return ERR_REPLY_DB
    # 如果数据库异常导致获取投递信息失败
    else:
        return ERR_REPLY_DB
Ejemplo n.º 2
0
def add(stu_id, name, duty, url, description, img, audio, video):
    """
    增加作品集信息
    成功:返回{'tag': OK_ADD_WORKS, 'works_id': insert_rlt['works'].works_id}
    失败:返回{'tag': ERR_ADD_WORKS_DB}或{'tag': ERR_ADD_WORKS_FULL}
    """
    select_rlt = stu_info.select(stu_id=stu_id)
    # 如果学生存在
    if select_rlt['tag'] == stu_info.OK_SELECT:
        filter_set = works.stu_filter(stu=select_rlt['stu'])

        # 如果该学生有合法的作品数量数量
        if filter_set.count() < 6:
            insert_rlt = works.insert(name, duty, url, description, select_rlt['stu'], img, audio, video)
            if insert_rlt['tag'] == works.OK_INSERT:
                return {'tag': OK_ADD_WORKS, 'works_id': insert_rlt['works'].works_id}
            else:
                return {'tag': ERR_ADD_WORKS_FULL}

    # 如果学生记录不存在
    elif select_rlt['tag'] == stu_info.ERR_SELECT_NOTEXIST:
        logger.warning('尝试为不存在的学生增加作品集信息')
        return {'tag': ERR_ADD_WORKS_DB}
    # 如果数据库异常导致获取学生信息失败(select_rlt['tag'] == ERR_SELECT_DB)
    else:
        logger.error('数据库异常导致无法确认学生是否存在,增加作品集信息失败')
        return {'tag': ERR_ADD_WORKS_DB}
Ejemplo n.º 3
0
def get(stu_id):
    """
    获取学生的作品集
    """
    select_rlt = stu_info.select(stu_id=stu_id)
    # 如果学生存在
    if select_rlt['tag'] == stu_info.OK_SELECT:
        filter_set = works.stu_filter(stu=select_rlt['stu'])

        # 如果该学生有合法的作品数量数量
        if filter_set.count() in range(1, 6):
            return {'tag': OK_GET_WORKS,
                    'works_list': list(filter_set.values())}

        # 如果该学生无作品
        elif filter_set.count() == 0:
            return {'tag': ERR_GET_NO_WORKS}
        # 如果该学生的作品数量不合法
        else:
            logger.error('学生id为%s的学生拥有不合法的作品数量,导致获取作品失败' % stu_id)
            return {'tag': ERR_GET_WORKS_DB}

    # 如果学生不存在
    elif select_rlt['tag'] == stu_info.ERR_SELECT_NOTEXIST:
        logger.warning('尝试获取不存在的学生的作品')
        return {'tag': ERR_GET_WORKS_DB}
    # 如果数据库异常导致无法确认学生是否存在(select_rlt['tag'] == ERR_SELECT_DB)
    else:
        logger.error('数据库异常导致无法确认学生是否存在,查询作品失败')
        return {'tag': ERR_GET_WORKS_DB}
Ejemplo n.º 4
0
def activate(account_cipher):
    """
    激活账号
    成功:返回OK_ACTIVATE
    失败:返回ERR_ACTIVATE_NOTEXIST
          或ERR_ACTIVATE_DB
    @account_cipher:  加密后的account
    """
    select_rlt = account.ciphertext_select(ciphertext=account_cipher)
    if select_rlt['tag'] == ERR_SELECT_NOTEXIST:
        logger.warning('尝试激活不存在的账号')
        return ERR_ACTIVATE_NOTEXIST
    elif select_rlt['tag'] == ERR_SELECT_DB:
        logger.error('数据库异常导致无法激活账号')
        return ERR_ACTIVATE_DB

    tag = account.update(account=select_rlt['acnt'].account, is_activated=True)

    # 如果更新激活状态失败(账号不存在)
    if tag == ERR_UPDATE_NOTEXIST:
        logger.error('在激活账号过程中,账号记录丢失,激活失败')
        return ERR_ACTIVATE_DB

    # 如果更新激活状态失败(数据库异常)
    elif tag == ERR_UPDATE_DB:
        logger.error('数据库异常导致无法激活账号')
        return ERR_ACTIVATE_DB

    # 如果更新激活状态成功
    return OK_ACTIVATE
Ejemplo n.º 5
0
def delete(stu_id, works_id):
    """
    删除作品
    成功:返回{'tag': OK_DEL_WORKS}
    失败:返回{'tag': ERR_DEL_WORKS_DB}
    """
    select_rlt = stu_info.select(stu_id=stu_id)
    # 如果学生存在
    if select_rlt['tag'] == stu_info.OK_SELECT:
        delete_tag = works.delete(works_id, select_rlt['stu'])
        if delete_tag == works.OK_DELETE:
            return {'tag': OK_DEL_works}

        # delete_tag == ERR_DELETE_DB
        else:
            return {'tag': ERR_DEL_works_DB}

    # 如果学生不存在
    elif select_rlt['tag'] == stu_info.ERR_SELECT_NOTEXIST:
        logger.warning('尝试删除不存在的学生的技能评价')
        return {'tag': ERR_DEL_works_DB}

    # 如果数据库异常导致无法确认学生是否存在(select_rlt['tag'] == ERR_SELECT_DB)
    else:
        logger.error('数据库异常导致无法确认学生是否存在,删除技能评价失败')
        return {'tag': ERR_DEL_works_DB}
Ejemplo n.º 6
0
def delete(stu_id):
    """
    删除简历(只删除学生信息的简历路径)
    成功:返回{'tag': OK_DEL_RESUME}
    失败:返回{'tag': ERR_DEL_RESUME_DB}
    """
    select_rlt = stu_info.select(stu_id)
    # 如果学生存在
    if select_rlt['tag'] == OK_SELECT:
        stu = select_rlt['stu']
        update_rlt = stu_info.update(stu_id=stu.id, resume_path=NO_RESUME)
        if update_rlt == OK_UPDATE:
            return {'tag': OK_DEL_RESUME}
        else:
            logger.error('数据库异常导致无法删除学生的简历(路径)')
            return {'tag': ERR_DEL_RESUME_DB}

    # 如果学生不存在
    elif select_rlt['tag'] == ERR_SELECT_NOTEXIST:
        logger.warning('尝试删除不存在学生的简历路径')
        return {'tag': ERR_DEL_RESUME_DB}

    # 如果数据库异常导致无法确认学生是否存在 select_rlt['tag'] == ERR_SELECT_DB
    else:
        logger.error('数据库异常导致无法确认学生是否存在,删除简历路径失败')
        return {'tag': ERR_DEL_RESUME_DB}
Ejemplo n.º 7
0
def handle(apply_id, new_state):
    """
    处理投递(团队)
    @apply_id:
    @state: 投递状态,1表示待沟通,2表示待面试,3表示录用, 4表示不合适
    成功:返回OK_HANDLE
    失败:返回ERR_STATE或ERR_HANDLE_DB
    """
    new_state = int(new_state)

    if new_state not in range(1, 5):
        logger.warning('尝试用不合法的state处理投递')
        return ERR_STATE

    apply_select_rlt = job_apply.id_select(apply_id)
    # 如果查询投递记录成功
    if apply_select_rlt['tag'] == OK_SELECT:
        update_tag = job_apply.update(apply_id=apply_id, state=new_state, stu_read=False)

        # 如果处理成功
        if update_tag == OK_UPDATE:
            return OK_HANDLE
        # 如果处理失败(update_tag == ERR_UPDATE_DB)
        else:
            return ERR_HANDLE_DB

    # 如果投递记录不存在
    elif apply_select_rlt['tag'] == ERR_SELECT_NOTEXIST:
        logger.warning('尝试处理不存在的投递记录的信息')
        return ERR_HANDLE_DB
    # 如果数据库异常导致获取投递信息失败
    else:
        return ERR_HANDLE_DB
Ejemplo n.º 8
0
def update(skill_id, stu_id, name, value):
    """
    修改技能评价
    成功:返回{'tag': OK_UPDATE_SKILL}
    失败:返回{'tag': ERR_UPDATE_SKILL_DB}
    @skill_id: 技能评价的id
    @stu_id:  关联的学生id
    @name: 技能名称
    @value: 技能值
    """
    select_rlt = stu_info.select(stu_id=stu_id)
    # 如果学生存在
    if select_rlt['tag'] == stu_info.OK_SELECT:
        update_tag = \
            skill.id_stu_update(skill_id, select_rlt['stu'], name, value)

        # 如果更新成功
        if update_tag == skill.OK_UPDATE:
            return {'tag': OK_UPDATE_SKILL}
        # 如果更新失败
        else:
            return {'tag': ERR_UPDATE_SKILL_DB}

    # 如果学生不存在
    elif select_rlt['tag'] == stu_info.ERR_SELECT_NOTEXIST:
        logger.warning('尝试更新不存在的学生的技能评价')
        return {'tag': ERR_UPDATE_SKILL_DB}
    # 如果数据库异常导致无法确认学生是否存在(select_rlt['tag'] == ERR_SELECT_DB)
    else:
        logger.error('数据库异常导致无法确认学生是否存在,修改技能评价失败')
        return {'tag': ERR_UPDATE_SKILL_DB}
Ejemplo n.º 9
0
def get(stu_id):
    """
    获取学生的简历路径
    成功:返回{'tag': OK_GET_RESUME, 'resume_path': select_rlt['stu'].resume_path}
    失败:返回{'tag': ERR_GET_RESUME_DB}
    """
    select_rlt = stu_info.select(stu_id)
    # 如果学生存在
    if select_rlt['tag'] == OK_SELECT:
        # 如果没有简历
        if select_rlt['stu'].resume_path == NO_RESUME:
            return {'tag': ERR_GET_NO_RESUME}

        # 如果成功
        return {
            'tag': OK_GET_RESUME,
            'resume_path': select_rlt['stu'].resume_path
        }

    # 如果学生不存在
    elif select_rlt['tag'] == ERR_SELECT_NOTEXIST:
        logger.warning('尝试获取不存在学生的简历路径')
        return {'tag': ERR_GET_RESUME_DB}

    # 如果数据库异常导致无法确认学生是否存在 select_rlt['tag'] == ERR_SELECT_DB
    else:
        logger.error('数据库异常导致无法确认学生是否存在,获取简历路径失败')
        return {'tag': ERR_GET_RESUME_DB}
Ejemplo n.º 10
0
def get(stu_id):
    """
    获取技能评价
    成功:{'tag': OK_GET_SKILL, 'skill_list': list(filter_set.values())}
                            "skill_list": [{
                                        "skill_id": skill_id,
                                        "name": name,
                                        "value": value},
                                        ...]}
    失败:{'tag': ERR_GET_NO_SKILL}或{'tag': ERR_GET_SKILL_DB}
    """
    select_rlt = stu_info.select(stu_id=stu_id)
    # 如果学生存在
    if select_rlt['tag'] == stu_info.OK_SELECT:
        filter_set = skill.stu_filter(stu=select_rlt['stu'])

        # 如果该学生有合法的技能评价数量
        if filter_set.count() != 0:
            return {
                'tag': OK_GET_SKILL,
                'skill_list': list(filter_set.values())
            }

        # 如果该学生无技能评价 filter_set.count() == 0
        else:
            return {'tag': ERR_GET_NO_SKILL}

    # 如果学生不存在
    elif select_rlt['tag'] == stu_info.ERR_SELECT_NOTEXIST:
        logger.warning('尝试获取不存在的学生的技能评价')
        return {'tag': ERR_GET_SKILL_DB}
    # 如果数据库异常导致无法确认学生是否存在(select_rlt['tag'] == ERR_SELECT_DB)
    else:
        logger.error('数据库异常导致无法确认学生是否存在,查询技能评价失败')
        return {'tag': ERR_GET_SKILL_DB}
Ejemplo n.º 11
0
def id_stu_update(skill_id, stu, name=NO_INPUT, value=NO_INPUT):
    """
    用skill_id和stu更新技能评价
    成功:返回OK_UPDATE
    失败:返回ERR_UPDATE_DB
    @skill_id: 技能评价id
    @stu: 关联的学生
    @name: 技能名称
    @value: 评价值
    """
    try:
        update_skill = StuSkill.objects.all().get(skill_id=skill_id, stu=stu, is_deleted=False)

        update_skill.name = value_update.value(update_skill.name, name)
        update_skill.value = value_update.value(update_skill.value, value)

        update_skill.save()
        return OK_UPDATE

    except StuSkill.DoesNotExist:
        logger.warning("尝试更新学生id和技能评价id不匹配或已删除的技能评价")
        return ERR_UPDATE_DB
    except Exception as e:
        logger.error(e.__str__() + '数据库异常导致更新技能评价失败')
        return ERR_UPDATE_DB
Ejemplo n.º 12
0
def delete(stu_id, skill_id):
    """
    删除技能评价
    成功:返回{'tag': OK_DEL_SKILL}
    失败:返回{'tag': ERR_DEL_SKILL_DB}
    """
    select_rlt = stu_info.select(stu_id=stu_id)
    # 如果学生存在
    if select_rlt['tag'] == stu_info.OK_SELECT:
        delete_tag = skill.id_stu_delete(skill_id, select_rlt['stu'])
        if delete_tag == skill.OK_DELETE:
            return {'tag': OK_DEL_SKILL}

        # delete_tag == ERR_DELETE_DB
        else:
            return {'tag': ERR_DEL_SKILL_DB}

    # 如果学生不存在
    elif select_rlt['tag'] == stu_info.ERR_SELECT_NOTEXIST:
        logger.warning('尝试删除不存在的学生的技能评价')
        return {'tag': ERR_DEL_SKILL_DB}

    # 如果数据库异常导致无法确认学生是否存在(select_rlt['tag'] == ERR_SELECT_DB)
    else:
        logger.error('数据库异常导致无法确认学生是否存在,删除技能评价失败')
        return {'tag': ERR_DEL_SKILL_DB}
Ejemplo n.º 13
0
def stu_get_list(stu_id, state):
    """
    学生获取投递列表
    @stu_id: 学生id
    @state: 投递状态,0表示待查看,1表示待沟通,2表示待面试,3表示录用, 4表示不合适,5表示全部
    成功:返回{
                'tag': OK_GET_APPLY,
                'apply_list': apply_list
            }
    失败:返回{'tag': ERR_GET_NO_APPLY}或{'tag': ERR_GET_APPLY_DB}
    """
    state = int(state)
    select_rlt = stu_info.select(stu_id)
    # 如果学生存在
    if select_rlt['tag'] == OK_SELECT:
        apply_list = []
        if state == 5:
            for s in range(0, 5):
                dump_stu_apply(stu=select_rlt['stu'], state=s, rlt_list=apply_list)

            if not apply_list:
                return {'tag': ERR_GET_NO_APPLY}
            return {
                'tag': OK_GET_APPLY,
                'apply_list': apply_list
            }

        elif state in range(0, 5):
            dump_stu_apply(stu=select_rlt['stu'], state=state, rlt_list=apply_list)

            if not apply_list:
                return {'tag': ERR_GET_NO_APPLY}

            return {
                'tag': OK_GET_APPLY,
                'apply_list': apply_list
            }

        else:
            logger.warning('尝试用不合法的状态查询投递记录')
            return {'tag': ERR_GET_APPLY_DB}


        # 如果学生不存在
    elif select_rlt['tag'] == ERR_SELECT_NOTEXIST:
        logger.warning('尝试获取不存在学生的投递信息')
        return {'tag': ERR_GET_APPLY_DB}
    # 如果数据库异常导致无法确认学生是否存在
    else:
        logger.error('数据库异常导致无法确认学生是否存在,获取学生的投递信息失败')
        return {'tag': ERR_GET_APPLY_DB}
Ejemplo n.º 14
0
def upload(stu_id, works_file):
    """
    上传作品集文件
    @stu_id 学生id
    @works: 作品集文件
    成功:返回{'tag': OK_SAVE_WORKS, 'path': ref_path}
    失败:返回{'tag': ERR_SAVE_WORKS_FAIL}
    """

    def check_resume_file(file):  # TODO(hjf): Check works file
        """return true if works file is valid"""
        return True

    def get_works_path(folder, file_name, file_type):
        return '%s/%s/%s.%s' % (WORKS_PATH_ROOT, folder, file_name, file_type)

    # 确认学生是否存在
    select_rlt = stu_info.select(stu_id=stu_id)
    # 如果学生存在
    if select_rlt['tag'] == stu_info.OK_SELECT:
        # 如果作品集文件合法
        if check_resume_file(works_file):
            works_path = get_works_path(folder=stu_id,
                                        file_name=int(time.time()),
                                        file_type=file_helper.get_file_type(works_file.name))  # 用time作简历文件名称
            # ref_path = '/media/' + works_path
            ref_path = works_path

            # 如果作品集文件上传成功
            if file_helper.save(works_file, works_path):
                return {'tag': OK_SAVE_WORKS,
                        'path': ref_path}
            # 如果作品集文件上传失败,
            else:
                return {'tag': ERR_SAVE_WORKS_FAIL}

        # 如果作品集文件不合法
        else:
            return {'tag': ERR_WORKS_FILE_INVALID}

    # 如果学生不存在
    elif select_rlt['tag'] == stu_info.ERR_SELECT_NOTEXIST:
        logger.warning('尝试为不存在的学生上传作品集')
        return {'tag': ERR_SAVE_WORKS_FAIL}
    # 如果数据库异常导致查询学生是否存在失败(select_rlt['tag'] == ERR_SELECT_DB)
    else:
        logger.error('数据库异常导致无法确定学生是否存在,上传作品集失败')
        return {'tag': ERR_SAVE_WORKS_FAIL}
Ejemplo n.º 15
0
def reset(account_cipher):
    """
    重置账号,修改账号状态为未激活,修改密码为随机字符串的哈希值
    @account_cipher: 由后端加密的account,只能通过邮件获得
    成功:返回{'credential': credential, 'account': account}
    失败:返回ERR_RESET_NOTEXIST
           或ERR_SELECT_DB
    """
    obj = account.ciphertext_select(ciphertext=account_cipher)

    # 如果账号不存在
    if obj['tag'] == ERR_SELECT_NOTEXIST:
        logger.warning('尝试重置不存在的账号')
        return ERR_RESET_NOTEXIST

    # 如果数据库异常无法查询
    elif obj['tag'] == ERR_SELECT_DB:
        logger.error('数据库异常导致无法验证账号是否存在,无法重置账号')
        return ERR_RESET_DB

    # 如果账号存在,但重置账号的请求已过期
    elif date_helper.pass_days(
            obj['acnt'].reset_date) > date_helper.OUT_DATE_DAYS:
        return ERR_RESET_OUT_DATE

    # 如果账号存在,请求未过期,重置状态和密码
    credential = get_hashcode()
    tag = account.update(account=obj['acnt'].account,
                         is_activated=False,
                         pwd=credential)

    # 如果更新账号时,账号不存在
    if tag == ERR_UPDATE_NOTEXIST:
        logger.error('重置账号时,账号记录丢失')
        return ERR_RESET_NOTEXIST

    # 如果数据库异常导致无法重置账号
    elif tag == ERR_UPDATE_DB:
        logger.error('数据库异常导致无法重置账号账号')

    # 如果重置账号成功
    return {
        'credential': credential,
        'account': obj['acnt'].account
    }  # 防止credential(哈希值)和ERROR_RESET_DOESNOTEXIST冲突
Ejemplo n.º 16
0
def set_read(apply_list):
    """
    设置投递记录为已读(学生)
    成功:返回{'tag': OK_READ_APPLY}
    失败:返回{'tag': ERR_READ_APPLY_DB}
    """
    fail_tag = False
    for apply_id in apply_list:
        update_tag = job_apply.update(apply_id=apply_id, stu_read=True)
        # 如果更新失败(update_tag == ERR_UPDATE_DB)
        if update_tag == ERR_UPDATE_DB:
            logger.warning('apply_id为%s的投递记录设置已读失败' % apply_id)
            fail_tag = True

    # 如果更新成功
    if not fail_tag:
        return {'tag': OK_READ_APPLY}
    # 如果更新失败(fail_tag)
    else:
        return {'tag': ERR_READ_APPLY_DB}
Ejemplo n.º 17
0
def id_stu_delete(skill_id, stu):
    """
    用skill_id和stu删除技能评价
    成功:返回OK_DELETE
    失败:返回ERR_DELETE_DB
    """
    try:
        delete_skill = StuSkill.objects.all().get(skill_id=skill_id, stu=stu, is_deleted=False)

        delete_skill.is_deleted = True

        delete_skill.save()
        return OK_DELETE

    except StuSkill.DoesNotExist:
        logger.warning("尝试删除学生id和技能评价id不匹配或已删除的技能评价")
        return ERR_DELETE_DB
    except Exception as e:
        logger.error(e.__str__() + '数据库异常导致删除技能评价失败')
        return ERR_DELETE_DB
Ejemplo n.º 18
0
def send_reset_mail(acnt):
    """
    发送密码重置邮件,记录链接发送的时间
    成功:发送重置邮件并返回OK_RESTE_MAIL
    失败:返回ERR_RESET_MAIL_NOTEXIST
        或ERR_RESET_MAIL_DB
    @account: 账号(邮箱)
    """

    select_rlt = account.acnt_select(account=acnt)
    # 如果账号不存在
    if select_rlt['tag'] == ERR_SELECT_NOTEXIST:
        logger.warning('尝试发送重置邮件到不存在的账号')
        return ERR_RESET_MAIL_NOTEXIST
    # 如果数据异常无法查询
    elif select_rlt['tag'] == ERR_SELECT_DB:
        logger.error('数据库异常导致无法发送重置邮件')
        return ERR_RESET_MAIL_DB

    # 账号密文
    ciphertext = encrypt(acnt)
    # 如果账号存在,记录邮件发送的日期和账号密文,并发送邮件
    update_tag = account.update(account=acnt,
                                reset_date=date_helper.now(),
                                ciphertext=ciphertext)

    # 如果记录日期时,账号记录丢失
    if update_tag == ERR_UPDATE_NOTEXIST:
        logger.error('记录重置邮件发送日期时,账号记录丢失')
        return ERR_RESET_MAIL_NOTEXIST

    # 如果数据库异常无法记录邮件发送日期
    elif update_tag == ERR_UPDATE_DB:
        logger.error('数据库异常导致无法发送重置邮件')
        return ERR_RESET_MAIL_DB

    # 如果日期记录成功,发送邮件
    send_163_mail('13660106752', 'xuegongban118', '*****@*****.**', acnt,
                  'WeMeet重置密码邮件', reset_mail.get_content(ciphertext, acnt))
    return OK_RESET_MAIL
Ejemplo n.º 19
0
def change_pwd(acnt, credential, pwd):
    """
    验证凭据激活账号修改密码
    成功:激活账号,修改密码, 返回OK_CHANGE_PWD
    失败:返回ERR_CHANGE_PWD_NOTEXIST
          或ERR_CHANGE_PWD_WRONG_CREDENTIAL
          或ERR_CHANGE_PWD_DB
    """
    obj = account.acnt_select(account=acnt)
    # 如果账号不存在
    if obj['tag'] == ERR_SELECT_NOTEXIST:
        logger.warning('尝试修改不存在账号的密码')
        return ERR_CHANGE_PWD_NOTEXIST

    # 如果数据异常导致无法验证账号是否存在
    elif obj['tag'] == ERR_SELECT_DB:
        logger.error('数据库异常导致无法修改密码(无法验证账号是否存在)')
        return ERR_CHANGE_PWD_DB

    # 账号存在,如果凭据错误
    elif obj['acnt'].pwd != credential:
        logger.info('以错误的凭据修改密码')
        return ERR_CHANGE_PWD_WRONG_CREDENTIAL

    # 如果账号存在,凭据正确,激活账号,并修改密码
    else:
        tag = account.update(account=acnt, is_activated=True, pwd=pwd)
        # 如果数据库异常导致无法修改密码
        if tag == ERR_UPDATE_DB:
            logger.error('数据库异常导致无法修改密码')
            return ERR_CHANGE_PWD_DB
        # 如果修改密码时,账号不存在
        elif tag == ERR_UPDATE_NOTEXIST:
            logger.error('修改密码时,账号记录丢失')
            return ERR_CHANGE_PWD_NOTEXIST
        # 如果更新成功(tag == GOOD_UPDATE)
        else:
            return OK_CHANGE_PWD
Ejemplo n.º 20
0
def update(works_id, stu_id, name, duty, url, description, img, audio, video):
    """
    修改作品集信息
    成功:返回{'tag': OK_UPDATE_WORKS}
    失败:返回{'tag': ERR_UPDATE_WORKS_DB}
    """
    select_rlt = stu_info.select(stu_id=stu_id)
    # 如果学生存在
    if select_rlt['tag'] == stu_info.OK_SELECT:
        return {'tag': OK_UPDATE_WORKS} \
            if works.update(
                works_id, select_rlt['stu'], name, duty, url, description, img, audio, video
            ) == works.OK_UPDATE \
            else {'tag': ERR_UPDATE_WORKS_DB}

    # 如果学生不存在
    elif select_rlt['tag'] == stu_info.ERR_SELECT_NOTEXIST:
        logger.warning('尝试更新不存在的学生的作品集信息')
        return {'tag': ERR_UPDATE_WORKS_DB}
    # 如果数据库异常导致无法确认学生是否存在(select_rlt['tag'] == ERR_SELECT_DB)
    else:
        logger.error('数据库异常导致无法确认学生是否存在,修改作品集信息失败')
        return {'tag': ERR_UPDATE_WORKS_DB}
Ejemplo n.º 21
0
def add(stu_id, name, value):
    """
    增加技能评价
    成功:返回{'tag': OK_ADD_SKILL, 'skill_id': insert_rlt['skill'].skill_id}
    失败:返回{'tag': ERR_ADD_SKILL_DB}或{'tag': ERR_ADD_SKILL_FULL}
    @stu_id:关联的学生id
    @name: 技能名称
    @value: 技能值
    """
    select_rlt = stu_info.select(stu_id=stu_id)
    # 如果学生存在
    if select_rlt['tag'] == stu_info.OK_SELECT:
        # 如果评价数量已满
        if skill.stu_filter(select_rlt['stu']).count() >= 8:
            logger.error('技能评价数量已满')
            return {'tag': ERR_ADD_SKILL_FULL}

        insert_rlt = \
            skill.insert(name=name, value=value, stu=select_rlt['stu'])
        # 如果插入成功:
        if insert_rlt['tag'] == skill.OK_INSERT:
            return {
                'tag': OK_ADD_SKILL,
                'skill_id': insert_rlt['skill'].skill_id
            }
        # 如果插入失败(insert_rlt['tag'] == ERR_INSERT_DB)
        else:
            return {'tag': ERR_ADD_SKILL_DB}

    # 如果学生记录不存在
    elif select_rlt['tag'] == stu_info.ERR_SELECT_NOTEXIST:
        logger.warning('尝试为不存在的学生增加技能评价')
        return {'tag': ERR_ADD_SKILL_DB}
    # 如果数据库异常导致获取学生信息失败(select_rlt['tag'] == ERR_SELECT_DB)
    else:
        logger.error('数据库异常导致无法确认学生是否存在,增加技能评价失败')
        return {'tag': ERR_ADD_SKILL_DB}
Ejemplo n.º 22
0
def update(apply_id, state=NO_INPUT, change_time=NO_INPUT, stu_read=NO_INPUT):
    """
    用apply_id更新技能评价
    成功:返回OK_UPDATE
    失败:返回ERR_UPDATE_DB
    """
    try:
        update_apply = JobApply.objects.all().get(apply_id=apply_id)

        update_apply.state = value_update.value(update_apply.state, state)
        update_apply.change_time = value_update.value(update_apply.change_time,
                                                      change_time)
        update_apply.stu_read = value_update.value(update_apply.stu_read,
                                                   stu_read)

        update_apply.save()
        return OK_UPDATE

    except JobApply.DoesNotExist as e:
        logger.warning(e.__str__() + "尝试更新不存在的投递记录")
        return ERR_UPDATE_DB
    except Exception as e:
        logger.error(e.__str__() + ':数据库异常导致更新投递记录失败')
        return ERR_UPDATE_DB
Ejemplo n.º 23
0
def upload(stu_id, resume):
    """
    上传简历文件
    @stu_id 学生id
    @resume: 简历文件
    成功:返回{'tag': OK_SAVE_RESUME, 'path': resume_path}
    失败:返回{'tag': ERR_SAVE_RESUME_FAIL}
    """
    def check_resume_file(file):  # TODO(hjf): Check resume file
        """return true if avatar file is valid"""
        return True

    def get_resume_path(folder, file_name, file_type):
        return '%s/%s/%s.%s' % (RESUME_PATH_ROOT, folder, file_name, file_type)

    # 确认学生是否存在
    select_rlt = stu_info.select(stu_id=stu_id)
    # 如果学生存在
    if select_rlt['tag'] == OK_SELECT:
        # 如果简历文件合法
        if check_resume_file(resume):
            pre_ref_path = select_rlt['stu'].resume_path
            resume_path = get_resume_path(folder=stu_id,
                                          file_name=int(time.time()),
                                          file_type=file_helper.get_file_type(
                                              resume.name))  # 用时间作简历文件名称
            # 引用的简历路径
            # ref_path = '/media/' + resume_path
            ref_path = resume_path

            # 更新学生的当前简历路径
            update_stu_tag = stu_info.update(stu_id=stu_id,
                                             resume_path=ref_path)
            # 如果更新学生的当前简历路径成功:
            if update_stu_tag == OK_UPDATE:

                # 如果简历文件上传成功
                if file_helper.save(resume, resume_path):
                    return {'tag': OK_SAVE_RESUME, 'path': ref_path}
                # 如果简历文件上传失败,
                else:
                    logger.error('简历文件上传失败')
                    # 回滚
                    roll_tag = stu_info.update(stu_id=stu_id,
                                               resume_path=pre_ref_path)
                    if roll_tag != OK_UPDATE:
                        logger.error('简历文件上传失败,但学生的简历路径已更新,无法回滚')
                    return {'tag': ERR_SAVE_RESUME_FAIL}

            # 如果更新学生的当前简历路径时学生记录不存在
            elif update_stu_tag == ERR_UPDATE_NOTEXIST:
                logger.error('更新学生当前简历路径时,学生记录丢失,导致上传简历失败')
                return {'tag': ERR_SAVE_RESUME_FAIL}
            # 如果数据库异常导致无法更新学生的当前简历路径update_stu_tag == ERR_UPDATE_DB
            else:
                logger.error('数据库异常导致无法更新学生当前简历路径,上传简历失败')
                return {'tag': ERR_SAVE_RESUME_FAIL}

        # 如果简历不合法
        else:
            return {'tag': ERR_RESUME_FILE_INVALID}

    # 如果学生不存在
    elif select_rlt['tag'] == ERR_SELECT_NOTEXIST:
        logger.warning('尝试为不存在的学生上传简历')
        return {'tag': ERR_SAVE_RESUME_FAIL}
    # 如果数据库异常导致查询学生是否存在失败(select_rlt['tag'] == ERR_SELECT_DB)
    else:
        logger.error('数据库异常导致无法确定学生是否存在,上传简历失败')
        return {'tag': ERR_SAVE_RESUME_FAIL}
Ejemplo n.º 24
0
def apply(stu_id, job_id):
    """
    投递简历
    成功:返回{'tag': OK_APPLY, 'apply_id': insert_apply_rlt['apply'].id}
    失败:返回{'tag': ERR_APPLY_DB}
          或{’tag': ERR_APPLY_NO_RESUME}
    @stu_id:学生id
    @job_id:职位id
    """
    select_stu_rlt = stu_info.select(stu_id)
    # 如果学生存在
    if select_stu_rlt['tag'] == OK_SELECT:
        select_job_rlt = job.id_job(job_id)
        # 如果职位存在
        if select_job_rlt is not None:
            team = select_job_rlt.team  # team一定存在(由model外键的on_delete=CASCADE保证)
            stu = select_stu_rlt['stu']

            # 如果学生无简历
            if stu.resume_path == NO_RESUME:
                return {'tag': ERR_APPLY_NO_RESUME}

            # 如果学生有简历
            else:
                select_apply_rlt = job_apply.stu_job_select(stu=stu,
                                                            job=select_job_rlt)
                # 如果尚未投递
                if select_apply_rlt['tag'] == ERR_SELECT_NOTEXIST:
                    insert_apply_rlt = \
                        job_apply.insert(stu=stu, job=select_job_rlt, state=0, team=team,
                                         apply_time=date_helper.curr_time(), resume_path=stu.resume_path,
                                         change_time=date_helper.now(), stu_read=True)

                    # 如果投递成功
                    if insert_apply_rlt['tag'] == OK_INSERT:
                        return {
                            'tag': OK_APPLY,
                            'apply_id': insert_apply_rlt['apply'].apply_id
                        }

                    # 如果投递失败insert_apply_rlt['tag'] == ERR_INSERT_DB
                    else:
                        logger.error('数据库异常导致投递记录插入失败,投递简历失败')
                        return {'tag': ERR_APPLY_DB}

                # 如果已经投递过了
                elif select_apply_rlt['tag'] == OK_SELECT:
                    return {'tag': ERR_APPLY_EXIST}

                # 如果数据库异常导致无法确认是否已经投递过了(select_apply_rlt['tag'] == ERR_SELECT_DB)
                else:
                    logger.error('数据库异常导致无法确认是否已经投递过,投递简历失败')
                    return {'tag': ERR_APPLY_DB}

        # 如果职位不存在(select_job_rlt is None)
        else:
            logger.warning('尝试投递简历给不存在的职位')
            return {'tag': ERR_APPLY_DB}

    # 如果学生不存在(select_stu_rlt['tag'] == ERR_SELECT_NOTEXIST)
    elif select_stu_rlt['tag'] == ERR_SELECT_NOTEXIST:
        logger.warning('尝试用不存在的学生投递简历')
        return {'tag': ERR_APPLY_DB}

    # 如果数据库异常导致无法确认学生是否存在(select_stu_rlt['tag'] == ERR_SELECT_DB)
    else:
        logger.error('数据库异常导致无法确认学生是否存在,投递简历失败')
        return {'tag': ERR_APPLY_DB}
Ejemplo n.º 25
0
def save(stu_id, avatar):
    """
    保存头像
    @stu_id:学生id
    @avatar:头像文件
    成功:返回{'tag': OK_SAVE_AVATAR, 'path': ref_path}
    失败:返回{'tag': ERR_SAVE_AVATAR_FAIL}
          或{'tag': ERR_AVATAR_FILE_INVALID}
    """

    def check_avatar_file(file):  # TODO(hjf): Check avatar file
        """return true if avatar file is valid"""
        return True

    def get_avatar_path(folder, file_name, file_type):
        return '%s/%s/%s.%s' % (AVATAR_PATH_ROOT, folder, file_name, file_type)

    # 确认学生是否存在
    select_rlt = stu_info.select(stu_id=stu_id)
    # 如果账号不存在
    if select_rlt['tag'] == ERR_SELECT_NOTEXIST:
        logger.warning('尝试为不存在的学生上传头像')
        return {'tag': ERR_SAVE_AVATAR_FAIL}
    # 如果数据库异常导致查询学生是否存在失败
    elif select_rlt['tag'] == ERR_SELECT_DB:
        logger.error('数据库异常导致无法确定学生是否存在,上传头像失败')
        return {'tag': ERR_SAVE_AVATAR_FAIL}

    # 学生存在,如果头像合法
    pre_ref_path = select_rlt['stu'].avatar_path
    if check_avatar_file(avatar):
        # 写入文件的路径
        avatar_path = get_avatar_path(folder=stu_id,
                                      file_name=int(time.time()),
                                      file_type=file_helper.get_file_type(avatar.name))  # use time as avatar file name

        # 引用头像的路径
        # ref_path = '/media/' + avatar_path
        ref_path = avatar_path

        # 更新学生头像路径
        update_tag = stu_info.update(stu_id=stu_id, avatar_path=ref_path)
        # 如果更新头像路径成功
        if update_tag == OK_UPDATE:
            # 如果头像保存成功
            if file_helper.save(avatar, avatar_path):
                return {'tag': OK_SAVE_AVATAR,
                        'path': ref_path}
            # 如果头像保存失败, 回滚
            else:
                roll_tag = stu_info.update(stu_id=stu_id, avatar_path=pre_ref_path)
                # 如果回滚失败
                if roll_tag != OK_UPDATE:
                    logger.error('头像保存失败,但数据库异常导致无法将已更新的头像路径恢复')
                return {'tag': ERR_SAVE_AVATAR_FAIL}

        # 如果写入路径失败
        else:
            return {'tag': ERR_SAVE_AVATAR_FAIL}
    # 如果头像不合法
    else:
        return {'tag': ERR_AVATAR_FILE_INVALID}
Ejemplo n.º 26
0
def team_get_list(team_id, state):

    """
    团队获取投递列表
    @team_id: 团队id
    @state: 投递状态,0表示新接收,1表示待沟通,2表示待面试,3表示完成
    成功:返回{
                    'tag': OK_GET_APPLY,
                    'unread_num': unread_num,
                    'apply_list': apply_list
                }
    失败:返回{'tag': ERR_GET_NO_APPLY}或{'tag': ERR_GET_APPLY_DB}
    """
    state = int(state)
    select_team = team.id_team(team_id)
    if select_team is not None:
        apply_list = []
        unread_num = [0]
        # (输入值)3表示完成,包括录用(返回值3)和不合适(返回值4)
        if state == 3:
            fail_tag = False
            for state in range(3, 5):
                dump_tag = dump_team_apply(select_team, state, apply_list, unread_num)
                if dump_tag == ERR_DUMP_DB:
                    fail_tag = True

            # 如果获取所需信息成功
            if not fail_tag:
                # 如果投递列表为空
                if not apply_list:
                    return {'tag': ERR_GET_NO_APPLY}
                # 如果投递列表不为空
                return {
                    'tag': OK_GET_APPLY,
                    'unread_num': unread_num[0],
                    'apply_list': apply_list
                }
            # 如果数据库异常导致获取所需的信息失败
            else:
                return {'tag': ERR_GET_APPLY_DB}

        elif state in range(0, 3):
            dump_tag = dump_team_apply(select_team, state, apply_list, unread_num)
            # 如果获取所需信息成功
            if dump_tag == OK_DUMP:

                # 如果投递列表为空
                if not apply_list:
                    return {'tag': ERR_GET_NO_APPLY}
                # 如果投递列表不为空
                return {
                    'tag': OK_GET_APPLY,
                    'unread_num': unread_num[0],
                    'apply_list': apply_list
                }

            # 如果数据库异常导致获取所需的信息失败
            else:
                return {'tag': ERR_GET_APPLY_DB}

        # 如果state不合法
        else:
            logger.warning('尝试用不合法的状态查询投递记录')
            return {'tag': ERR_GET_APPLY_DB}

    # 如果团队不存在
    else:
        logger.warning('尝试获取不存在团队的投递信息')
        return {'tag': ERR_GET_APPLY_DB}
Ejemplo n.º 27
0
def team_get_info(apply_id):
    """
    团队获取投递信息
    成功:返回{'tag': OK_APPLY_INFO,
                    'stu_id': apply.stu_id,
                    'name': stu.name,
                    'avatar_path': stu.avatar_path,
                    'sex': stu.sex,
                    'age': stu.age,
                    'mail': stu.mail,
                    'tel': stu.tel,
                    'school': stu.school,
                    'major': stu.major,
                    'location': stu.location,
                    'resume_path': apply.resume_path,
                    'state': apply.state
                    }
    失败:返回{'tag': ERR_APPLY_INFO_DB}
    """
    apply_select_rlt = job_apply.id_select(apply_id)

    # 如果查询投递记录成功
    if apply_select_rlt['tag'] == OK_SELECT:
        apply = apply_select_rlt['apply']
        stu_select_rlt = stu_info.select(apply.stu_id)

        # 如果获取关联的学生成功
        if stu_select_rlt['tag'] == OK_SELECT:
            stu = stu_select_rlt['stu']
            account_select_rlt = account.stu_select(stu.id)

            # 如果获取关联的账号成功
            if account_select_rlt['tag'] == OK_SELECT:
                return {'tag': OK_APPLY_INFO,
                        'stu_id': apply.stu_id,
                        'name': stu.name,
                        'avatar_path': stu.avatar_path,
                        'sex': stu.sex,
                        'age': '',
                        'mail': account_select_rlt['acnt'].account,
                        'tel': '',
                        'school': stu.school,
                        'major': '',
                        'location': '',
                        'resume_path': apply.resume_path,
                        'state': apply.state
                        }
            # 如果获取关联的账号失败
            else:
                logger.error('数据库异常或学生不存在,无法获取与投递记录关联的学生信息(账号)')
                return {'tag': ERR_APPLY_INFO_DB}

        # 如果无法获取关联的学生
        else:
            logger.error('数据库异常,无法获取与投递记录关联的学生信息')
            return {'tag': ERR_APPLY_INFO_DB}

    # 如果投递记录不存在
    elif apply_select_rlt['tag'] == ERR_SELECT_NOTEXIST:
        logger.warning('尝试获取不存在的投递记录的信息')
        return {'tag': ERR_APPLY_INFO_DB}
    # 如果数据库异常导致获取投递信息失败
    else:
        return {'tag': ERR_APPLY_INFO_DB}