Ejemplo n.º 1
0
def add_data():
    # 获取要添加的数据
    year_select = session["year_current"]
    insert_dict = {}
    item = get_item_list(["person", "education", "skill", "workinfo"])
    for i in item:
        insert_dict[i] = request.args.get(i, "暂无", type=str)
        if insert_dict[i] == "":
            insert_dict[i] = "暂无"

    # 添加数据到person表
    item_person = get_item_list("person")
    insert_table("person", year_select, item_person, insert_dict)

    # 获取自动生成的person_id
    person_id = select_table(
        "person",
        year_select,
        {"person_id": "person"},
        {"person_name": " = '" + insert_dict["person_name"] + "'"},
    )["person_id"]
    insert_dict["person_id"] = float_int_string(person_id)

    # 添加数据到其他表
    item_education = get_item_list("education")
    item_education.append("person_id")
    insert_table("education", year_select, item_education, insert_dict)

    item_skill = get_item_list("skill")
    item_skill.append("person_id")
    insert_table("skill", year_select, item_skill, insert_dict)

    item_workinfo = get_item_list("workinfo")
    item_workinfo.append("person_id")
    insert_table("workinfo", year_select, item_workinfo, insert_dict)

    # 返回结果
    msg = "成功添加教师" + insert_dict["person_name"] + "的信息"
    return jsonify({"msg": msg})
Ejemplo n.º 2
0
def search():
    # 获取要查看详情的教师id
    person_id = request.args.get("id", 0, type=int)

    # 拼接要查询的项目
    year = session["year_current"]
    item = {}
    table = ["person", "education", "skill", "workinfo"]
    for table_name in table:
        item_list = get_item_list(table_name)
        for i in item_list:
            item[i] = table_name

    # 查询结果
    condition = "person_" + year + ".person_id"
    result = select_table(
        ["person", "education", "skill", "workinfo"],
        year,
        item,
        {condition: " = '" + float_int_string(person_id) + "'"},
    )

    # 返回结果
    return jsonify(result)
Ejemplo n.º 3
0
def importData():
    if request.method == "POST":
        # 获取年份列表
        db = get_lijing_db()
        year_data = db.execute("select year from year_list").fetchall()
        year_list = []
        for year in year_data:
            year_list.insert(0, year["year"])

        # 获取要导入的年份,判断是否在已有年份中
        year_select = request.form.get("year_select")
        if year_select not in year_list:
            # 插入新的年份
            db.execute(
                "insert into year_list (year, basicinfo, workinfo, honorinfo) values (?,?,?,?)",
                (
                    year_select,
                    0,
                    0,
                    0,
                ),
            )
            # 新年份创建新的表
            create_table(["person", "education", "workinfo", "skill"], year_select)

        # 获取选择的表格文件
        f = request.files["file"]

        # 获取文件名,判断是否是excel文件
        filename = secure_filename("".join(lazy_pinyin(f.filename)))
        if filename.endswith(".xlsx"):
            # 保存文件到服务器uploads文件夹
            upload_path = list_to_path(["flaskr", "static", "uploads", filename])
            f.save(upload_path)

            # 打开保存后的文件
            data = xlrd.open_workbook(upload_path)
            table = data.sheet_by_index(0)
            # print("总行数:" + str(table.nrows))
            # print("总列数:" + str(table.ncols))

            # 找到标题
            dict_title = {
                "姓名": "person_name",
                "性别": "gender",
                "身份证号": "id_number",
                "联系电话": "phone",
                "政治面貌": "political_status",
                "入党时间": "time_Party",
                "参加工作时间": "time_work",
                "家庭住址": "address",
                "工作简历": "resume",
                "第一学历": "edu_start",
                "第一学历毕业时间": "time_edu_start",
                "第一学历毕业学校": "school_edu_start",
                "第一学历专业": "major_edu_start",
                "最高学历": "edu_end",
                "最高学历毕业时间": "time_edu_end",
                "最高学历毕业学校": "school_edu_end",
                "最高学历专业": "major_edu_end",
                "专业技术职称": "skill_title",
                "取得时间": "time_skill",
                "发证单位": "skill_unit",
                "发证文件批号": "skill_number",
                "调入大集中学时间": "time_school",
                "用工性质": "work_kind",
                "工作岗位": "job_post",
                "退休时间": "time_retire",
            }

            row_title = table.row_values(0)
            title_id = {}
            for i in dict_title:
                # 初始化-1
                title_id[dict_title[i]] = -1

            for i in range(0, len(row_title)):
                title_name = row_title[i]
                if title_name in dict_title:
                    # 保存标题序号
                    title_id[dict_title[title_name]] = i

            # 导入数据
            item = get_item_list(["person", "education", "skill", "workinfo"])

            for i in range(1, table.nrows):
                # 获取每一行的值
                row_value = table.row_values(i)

                insert_dict = {}
                for j in item:
                    if title_id[j] == -1:
                        # 没有找到标题
                        insert_dict[j] = "暂无"
                    else:
                        # 找到标题
                        insert_dict[j] = float_int_string(row_value[title_id[j]])
                        if len(insert_dict[j]) == 0:
                            # 找到标题,但没有值
                            insert_dict[j] = "暂无"

                # 插入数据到person表
                item_person = get_item_list("person")
                insert_table("person", year_select, item_person, insert_dict)

                # 获取自动生成的person_id
                condition = {"person_name": " = '" + insert_dict["person_name"] + "'"}
                person_id = select_table(
                    "person", year_select, {"person_id": "person"}, condition
                )["person_id"]
                insert_dict["person_id"] = float_int_string(person_id)

                # 插入其他表
                item_education = get_item_list("education")
                item_education.append("person_id")
                insert_table("education", year_select, item_education, insert_dict)

                item_skill = get_item_list("skill")
                item_skill.append("person_id")
                insert_table("skill", year_select, item_skill, insert_dict)

                item_workinfo = get_item_list("workinfo")
                item_workinfo.append("person_id")
                insert_table("workinfo", year_select, item_workinfo, insert_dict)

            # 删除保存的表格文件
            os.remove(upload_path)

            return redirect(url_for("lijing_basicinfo.hello"))
        else:
            # 不是execl文件
            error = "请导入xlsx格式的文件"
            flash(error)
            return redirect(url_for("lijing_basicinfo.hello"))
Ejemplo n.º 4
0
def resultStatistics():
    if request.method == "POST":

        msg = "成功"

        f = request.files["file"]
        f2 = request.files["file2"]
        filename = secure_filename("".join(lazy_pinyin(f.filename)))
        filename2 = secure_filename("".join(lazy_pinyin(f2.filename)))

        if not filename2.endswith(".xlsx"):
            msg = "请导入xlsx格式的文件"
            return jsonify({"msg": msg})

        # 防止文件重名
        if filename == filename2:
            filename2 = "1" + filename2

        # 获取request数据
        class1 = int(request.form.get("class1"))
        class2 = int(request.form.get("class2"))
        delete_id_list = request.form.get("delete_id").split("\n")
        change_examid_list = request.form.get("change_examid").split("\n")
        change_class_list = request.form.get("change_class").split("\n")

        if len(change_examid_list) != len(change_class_list):
            msg = "调整班级数据有错误"
            return jsonify({"msg": msg})

        # 保存文件
        upload_path = list_to_path(["flaskr", "static", "uploads", filename])
        f.save(upload_path)
        upload_path2 = list_to_path(["flaskr", "static", "uploads", filename2])
        f2.save(upload_path2)

        # 打开文件
        data = xlrd.open_workbook(upload_path)
        table = data.sheet_by_index(0)

        data2 = xlrd.open_workbook(upload_path2)
        table2 = data2.sheet_by_index(0)

        # 获取成绩表格列索引
        items = {
            "姓名": -1,
            "考号": -1,
            "班级": -1,
            "总分": -1,
            "语文": -1,
            "数学": -1,
            "英语": -1,
            "物理": -1,
            "化学": -1,
            "道法": -1,
            "历史": -1,
            "地理": -1,
            "生物": -1,
        }
        item_title = [
            "姓名",
            "考号",
            "班级",
            "语文",
            "数学",
            "英语",
            "物理",
            "化学",
            "生物",
            "历史",
            "地理",
            "道法",
            "总分",
        ]
        item_id_list = request.form.get("item_id_list").split(",")
        it = 0
        for item in items:
            items[item] = int(item_id_list[it]) - 1
            it = it + 1
            if items[item] == -1:
                item_title.remove(item)
            pass

        # 获取各科老师、人数表格索引
        items_table2 = item_title[2:]
        items_table2[-1] = "人数"
        data_title_teacher = table2.row_values(0)
        item_table2_id_list = []

        for item in items_table2:
            flag = False
            for i in range(len(data_title_teacher)):
                if item in data_title_teacher[i]:
                    flag = True
                    item_table2_id_list.append(i)
                    pass
                pass

            if not flag:
                if item == "班级":
                    msg = "教师、有效人数表格:缺少班级"
                elif item == "人数":
                    msg = "教师、有效人数表格:缺少班级有效人数"
                else:
                    msg = "教师、有效人数表格:缺少" + item + "教师姓名"
                return jsonify({"msg": msg})
            pass

        # 获取成绩数据、班级数据
        data_table = []
        class_list = []
        index_data = int(request.form.get("index_data")) - 1
        for i in range(index_data, table.nrows):
            row_value = table.row_values(i)
            class_name = float_int_string(row_value[items["班级"]])
            if class_name not in class_list:
                class_list.append(class_name)

            data_row = []
            for item in item_title:
                if row_value[items[item]] == "":
                    data_row.append(0.0)
                else:
                    if item == "班级":
                        data_row.append(
                            int(float_int_string(row_value[items[item]])))
                    elif item == "考号":
                        data_row.append(
                            float_int_string(row_value[items[item]]))
                    else:
                        data_row.append(row_value[items[item]])
                    pass
                pass

            data_table.append(data_row)
            pass

        # 获取老师、有效人数数据
        data_table2 = []
        for i in range(1, table2.nrows):
            row = []
            data_row = table2.row_values(i)
            for teacher_id in item_table2_id_list:
                row.append(float_int_string(data_row[teacher_id]))
            data_table2.append(row)

        os.remove(upload_path)
        os.remove(upload_path2)

        # 处理数据
        # 调整部分学生的班级
        for i in range(len(change_examid_list)):
            change_exam_id = change_examid_list[i]
            flag = False
            for j in range(len(data_table)):
                if change_exam_id == data_table[j][1]:
                    flag = True
                    data_table[j][2] = int(change_class_list[i])
                    pass
                pass
            if not flag:
                if change_exam_id == "":
                    pass
                else:
                    msg = "要调整班级的学生学号找不到:" + change_exam_id
                    return jsonify({"msg": msg})
                pass
            pass

        # 判断调整的班级是否存在
        for class_name in change_class_list:
            if class_name not in class_list:
                if class_name == "":
                    pass
                else:
                    msg = "要调整班级的班级不存在:" + class_name
                    return jsonify({"msg": msg})
                pass
            pass

        # 通过学号删除不计入统计的学生
        index_delele = []
        delete_id_dict = {}
        for i in delete_id_list:
            if i == "":
                continue
            i = i.replace("\r", "")
            delete_id_dict[i] = True
            pass

        for i in range(len(data_table)):
            exam_id = data_table[i][1]
            if exam_id in delete_id_dict:
                delete_id_dict[exam_id] = False
                index_delele.append(i)
            pass

        for i in delete_id_dict:
            if delete_id_dict[i]:
                msg = "要删除的学生学号找不到:" + i
                return jsonify({"msg": msg})
            pass

        index_delele = sorted(index_delele, reverse=True)
        for i in index_delele:
            del data_table[i]

        #############################################################

        export_title = []
        export_data = []
        item_subject = item_title[3:]

        # 找到总分索引
        index_total = -1
        for i in range(len(item_title)):
            if "总分" == item_title[i]:
                index_total = i
                break
            pass

        # 按总分排序
        data_table.sort(key=itemgetter(index_total), reverse=True)

        # 找到尖子生边界分数
        class1_total_result = data_table[class1 - 1][-1]
        class2_total_result = data_table[class1 + class2 - 1][-1]

        # 找到班级索引
        index_class = -1
        for i in range(len(item_title)):
            if "班级" == item_title[i]:
                index_class = i
                break
            pass

        # 按班级排序、按班级分组
        data_table.sort(key=itemgetter(index_class))
        for class_name, class_students in groupby(data_table,
                                                  itemgetter(index_class)):

            # 一个班的所有学生数据
            class_students_result = []
            for student in class_students:
                class_students_result.append(student)

            # 判断教师、有效人数表格中是否有对应的班级
            index_teacher_number = -1
            for i in range(len(data_table2)):
                if str(class_name) == data_table2[i][0]:
                    index_teacher_number = i
                    break

            if index_teacher_number == -1:
                msg = "教师、有效人数表格:找不到班级 %s" % str(class_name)
                return jsonify({"msg": msg})

            # # 有效人数
            average_num = int(data_table2[index_teacher_number][-1])
            # if average_num > len(class_students_result):
            #     msg = "教师、有效人数表格:%s班有效人数错误" % str(class_name)
            #     return jsonify({"msg": msg})

            # 每个班级的数据
            data_class = []
            data_class.append(class_name)

            # 分科目计算平均分
            for item in item_subject:

                # 科目老师的名字
                index_teacher_name = -1
                for i in range(len(items_table2)):
                    if item == items_table2[i]:
                        index_teacher_name = i
                        break
                if index_teacher_name != -1:
                    data_class.append(
                        data_table2[index_teacher_number][index_teacher_name])

                # 找到分数索引
                index_item = -1
                for i in range(len(item_title)):
                    if item == item_title[i]:
                        index_item = i
                        break

                # 计算平均分
                sum_result = 0
                if average_num <= len(class_students_result):
                    for i in range(0, average_num):
                        sum_result = sum_result + class_students_result[i][
                            index_item]
                    pass
                else:
                    for i in range(0, len(class_students_result)):
                        sum_result = sum_result + class_students_result[i][
                            index_item]
                    pass

                average_result = sum_result / average_num
                data_class.append(average_result)

                # 预留排名
                data_class.append(0)

            # 统计尖子生个数
            number_class1 = 0
            number_class2 = 0
            for student in class_students_result:
                if student[-1] >= class1_total_result:
                    number_class1 = number_class1 + 1
                elif student[-1] >= class2_total_result:
                    number_class2 = number_class2 + 1
                else:
                    pass

            data_class.append(number_class1)
            data_class.append(0)
            data_class.append(number_class2)
            data_class.append(0)

            export_data.append(data_class)

        # 标题
        export_title.append("班级")
        it = 0
        sort_id_list = []
        for item in item_subject:
            if item != "总分":
                export_title.append(item + "教师")
                it = it + 1
            export_title.append(item + "人平")
            export_title.append(item + "排名")
            it = it + 2
            sort_id_list.append(it)
            pass

        export_title.append("一类人数")
        export_title.append("排名")
        it = it + 2
        sort_id_list.append(it)
        export_title.append("二类人数")
        export_title.append("排名")
        it = it + 2
        sort_id_list.append(it)

        # 统计排名
        for i in sort_id_list:
            export_data.sort(key=itemgetter(i - 1), reverse=True)
            it = 1
            old_result = export_data[0][i - 1]
            old_paiming = 1
            for row in export_data:
                if old_result == row[i - 1]:
                    row[i] = old_paiming
                else:
                    row[i] = it
                    old_result = row[i - 1]
                    old_paiming = row[i]
                it = it + 1
                pass
            pass

        # 按班级排序
        export_data.sort(key=itemgetter(0))

        # 统计全校人平
        total_school_row = []
        for i in range(len(export_title)):
            if i == 0:
                total_school_row.append("全校人平")
            else:
                total_school_row.append("")
            pass

        for i in sort_id_list:
            sum_result = 0
            for row in export_data:
                sum_result = sum_result + row[i - 1]
            total_school_row[i - 1] = sum_result / len(class_list)
            pass

        total_school_row[-2] = total_school_row[-2] * len(class_list)
        total_school_row[-4] = total_school_row[-4] * len(class_list)
        export_data.append(total_school_row)

        ##############################################################
        # 导出数据
        out_file_name = "exportData(%s).xlsx" % current_time()
        save_path = list_to_path(
            ["flaskr", "static", "downloads", out_file_name])
        workbook = xlsxwriter.Workbook(save_path)
        worksheet = workbook.add_worksheet("Sheet1")

        for it in range(len(export_title)):
            worksheet.write(0, it, export_title[it])

        for i in range(len(export_data)):
            data_row = export_data[i]
            for j in range(len(data_row)):
                worksheet.write(i + 1, j, data_row[j])
            pass

        workbook.close()

    return jsonify({"msg": msg, "filename": out_file_name})
Ejemplo n.º 5
0
def importData():
    if request.method == "POST":

        db = get_lijing_db()

        # year_select = session['year_current']
        # print(session['year_current'])

        f = request.files["file"]
        year_select = request.form.get("year")
        item_id_list = request.form.get("item_id_list").split(",")

        filename = secure_filename("".join(lazy_pinyin(f.filename)))
        upload_path = list_to_path(["flaskr", "static", "uploads", filename])
        f.save(upload_path)

        data = xlrd.open_workbook(upload_path)
        table = data.sheet_by_index(0)
        item = [
            "person_name",
            "school_name",
            "job_name",
            "lesson_number",
            "year_result",
            "class_id",
            "subject",
            "rank_up_school",
            "rank_up_country",
            "rank_down_school",
            "rank_down_country",
        ]

        update_item = {}
        for i in range(len(item)):
            if item_id_list[i] != "0":
                update_item[item[i]] = int(item_id_list[i]) - 1

        print(update_item)

        person_data = db.execute(
            "select person_id, person_name from person_" + year_select
        ).fetchall()
        person_id_dict = {}
        person_name_list = []
        for i in person_data:
            person_id_dict[i["person_name"]] = i["person_id"]
            person_name_list.append(i["person_name"])

        for i in range(1, table.nrows):
            row = table.row_values(i)
            person_name = float_int_string(row[update_item["person_name"]])
            if person_name not in person_name_list:
                return jsonify({"msg": "教师姓名:“" + person_name + "” 不存在"})
                # 表中有不存在基本信息的教师
            person_id = person_id_dict[person_name]

            if "lesson_number" in update_item:
                lesson_number = float_int_string(row[update_item["lesson_number"]])
                if (
                    db.execute(
                        "select workload_id from workload_"
                        + year_select
                        + " where person_id = ?",
                        (person_id,),
                    ).fetchone()
                    is None
                ):
                    db.execute(
                        "insert into workload_"
                        + year_select
                        + " (lesson_number, year_result, person_id) values (?,?,?)",
                        (
                            lesson_number,
                            "",
                            person_id,
                        ),
                    )
                else:
                    db.execute(
                        "update workload_"
                        + year_select
                        + " set lesson_number = ? where person_id = ?",
                        (
                            lesson_number,
                            person_id,
                        ),
                    )

            if "year_result" in update_item:
                year_result = float_int_string(row[update_item["year_result"]])
                if (
                    db.execute(
                        "select workload_id from workload_"
                        + year_select
                        + " where person_id = ?",
                        (person_id,),
                    ).fetchone()
                    is None
                ):
                    db.execute(
                        "insert into workload_"
                        + year_select
                        + " (lesson_number, year_result, person_id) values (?,?,?)",
                        (
                            "",
                            year_result,
                            person_id,
                        ),
                    )
                else:
                    db.execute(
                        "update workload_"
                        + year_select
                        + " set year_result = ? where person_id = ?",
                        (
                            year_result,
                            person_id,
                        ),
                    )

            if "school_name" in update_item:
                school_name = float_int_string(row[update_item["school_name"]])
                school_id_data = db.execute(
                    "select school_id from school_"
                    + year_select
                    + " where school_name = ?",
                    (school_name,),
                ).fetchone()
                if school_id_data is None:
                    return jsonify({"msg": "分校:“" + school_name + "” 不存在"})
                school_id = school_id_data["school_id"]

                db.execute(
                    "update job_"
                    + year_select
                    + " set school_id = ? where person_id = ?",
                    (
                        school_id,
                        person_id,
                    ),
                )

            if "job_name" in update_item:
                job_name = float_int_string(row[update_item["job_name"]])
                if job_name == "":
                    job_name = "无"
                db.execute(
                    "update job_"
                    + year_select
                    + " set job_name = ? where person_id = ?",
                    (
                        job_name,
                        person_id,
                    ),
                )

            if "class_id" in update_item:
                school_name = row[update_item["school_name"]]
                school_id = db.execute(
                    "select school_id from school_"
                    + year_select
                    + " where school_name = ?",
                    (school_name,),
                ).fetchone()["school_id"]

                class_name = float_int_string(row[update_item["class_id"]])
                class_id_data = db.execute(
                    "select class_id from class_"
                    + year_select
                    + " where school_id = ? and class_name = ? ",
                    (
                        school_id,
                        class_name,
                    ),
                ).fetchone()
                if class_id_data is None:
                    return jsonify(
                        {"msg": "分校“" + school_name + "”中不存在班级:“" + class_name + "”"}
                    )
                class_id = class_id_data["class_id"]

                subject = row[update_item["subject"]]
                rank_data = db.execute(
                    "select rank_up_school from rank_"
                    + year_select
                    + " where person_id = ? and subject = ? and class_id = ?",
                    (
                        person_id,
                        subject,
                        class_id,
                    ),
                ).fetchone()
                if rank_data is None:
                    db.execute(
                        "insert into rank_"
                        + year_select
                        + " (subject, class_id, person_id, rank_up_school, rank_up_country, rank_down_school, rank_down_country) values (?,?,?,?,?,?,?)",
                        (
                            subject,
                            class_id,
                            person_id,
                            "暂无",
                            "暂无",
                            "暂无",
                            "暂无",
                        ),
                    )

            if "rank_up_school" in update_item:
                rank_up_school = float_int_string(row[update_item["rank_up_school"]])
                db.execute(
                    "update rank_"
                    + year_select
                    + " set rank_up_school = ? where subject = ? and person_id = ? and class_id = ?",
                    (
                        rank_up_school,
                        subject,
                        person_id,
                        class_id,
                    ),
                )

            if "rank_up_country" in update_item:
                rank_up_country = float_int_string(row[update_item["rank_up_country"]])
                db.execute(
                    "update rank_"
                    + year_select
                    + " set rank_up_country = ? where subject = ? and person_id = ? and class_id = ?",
                    (
                        rank_up_country,
                        subject,
                        person_id,
                        class_id,
                    ),
                )

            if "rank_down_school" in update_item:
                rank_down_school = float_int_string(
                    row[update_item["rank_down_school"]]
                )
                db.execute(
                    "update rank_"
                    + year_select
                    + " set rank_down_school = ? where subject = ? and person_id = ? and class_id = ?",
                    (
                        rank_down_school,
                        subject,
                        person_id,
                        class_id,
                    ),
                )

            if "rank_down_country" in update_item:
                rank_down_country = float_int_string(
                    row[update_item["rank_down_country"]]
                )
                db.execute(
                    "update rank_"
                    + year_select
                    + " set rank_down_country = ? where subject = ? and person_id = ? and class_id = ?",
                    (
                        rank_down_country,
                        subject,
                        person_id,
                        class_id,
                    ),
                )

        db.commit()
        os.remove(upload_path)

        return jsonify({"msg": "成功导入"})
Ejemplo n.º 6
0
def importData():
    if request.method == "POST":

        db = get_lijing_db()
        # year_select = request.form.get('year_select')
        year_select = session["year_current"]

        f = request.files["file"]
        filename = secure_filename("".join(lazy_pinyin(f.filename)))

        if filename.endswith(".xlsx"):
            upload_path = list_to_path(
                ["flaskr", "static", "uploads", filename])
            f.save(upload_path)

            data = xlrd.open_workbook(upload_path)
            table = data.sheet_by_index(0)
            print("总行数:" + str(table.nrows))
            print("总列数:" + str(table.ncols))

            # 找到标题
            dict_title = {
                "姓名": 0,
                "所在分校": 1,
                "发证时间": 2,
                "获得时间": 3,
                "发证单位": 4,
                "获奖名称": 5,
                "证书级别": 6,
                "证书编号": 7,
                "备注": 8,
            }
            row_title = table.row_values(0)
            title_id = [-1 for i in range(9)]
            for i in range(0, len(row_title)):
                title_name = row_title[i]
                if title_name in dict_title:
                    title_id[dict_title[title_name]] = i

            # 教师基本信息
            person_data = db.execute(
                "select person_id, person_name from person_" +
                year_select).fetchall()
            person_id_dict = {}
            # person_name_list = []
            for i in person_data:
                person_id_dict[i["person_name"]] = i["person_id"]
                # person_name_list.append(i['person_name'])

            # 导入数据
            for i in range(1, table.nrows):
                row_value = table.row_values(i)
                person_name = float_int_string(row_value[title_id[0]])
                if person_name not in person_id_dict:
                    error = "教师姓名:“" + person_name + "” 不存在"
                    flash(error)
                    return redirect(url_for("lijing_honorinfo.hello"))
                    # 表中有不存在基本信息的教师
                person_id = person_id_dict[person_name]
                print(person_id, person_name)

                insert_data = [0 for i in range(9)]
                for j in range(0, len(title_id)):
                    if title_id[j] == -1:
                        insert_data[j] = "待添加"
                    else:
                        insert_data[j] = float_int_string(
                            row_value[title_id[j]])
                        if len(insert_data[j]) == 0:
                            insert_data[j] = "待添加"
                print(insert_data)

                db.execute(
                    "insert into honor_" + year_select +
                    " (person_id, school_name, honor_time, get_time, honor_unit, honor_name, honor_grade, honor_number, honor_remark) values (?,?,?,?,?,?,?,?,?)",
                    (
                        person_id,
                        insert_data[1],
                        insert_data[2],
                        insert_data[3],
                        insert_data[4],
                        insert_data[5],
                        insert_data[6],
                        insert_data[7],
                        insert_data[8],
                    ),
                )

                db.commit()

            os.remove(upload_path)

            return redirect(url_for("lijing_honorinfo.hello"))
        else:
            error = "请导入xlsx格式的文件"
            flash(error)
            return redirect(url_for("lijing_honorinfo.hello"))
Ejemplo n.º 7
0
def calculator_bonus():
    if request.method == "POST":
        msg = "成功"

        # 接收文件
        f = request.files["file"]
        filename = secure_filename("".join(lazy_pinyin(f.filename)))

        # 接收参数
        item_value = request.form.get("item_value").split(",")
        item_subject = [
            "chinese",
            "math",
            "english",
            "wl",
            "hx",
            "zz",
            "ls",
            "dl",
            "sw",
        ]
        item = [
            "chinese",
            "math",
            "english",
            "wl",
            "hx",
            "zz",
            "ls",
            "dl",
            "sw",
            "class1",
            "class2",
            "bonus1",
            "bonus2",
            "ebonus1",
            "ebonus2",
            "bonus_average",
            "bonus3",
        ]

        # 参数字典
        value_dict = {}
        for i in range(len(item)):
            value_dict[item[i]] = float(item_value[i])

        # 科目系数
        item_coefficient = []
        for i in item_subject:
            item_coefficient.append(value_dict[i])

        # 判断文件格式
        if filename.endswith(".xlsx"):
            # 保存文件
            upload_path = list_to_path(
                ["flaskr", "static", "uploads", filename])
            f.save(upload_path)

            # 打开文件
            data = xlrd.open_workbook(upload_path)
            table = data.sheet_by_index(0)

            # 标题栏
            table_title = table.row_values(0)

            item_average = [
                "语文人平",
                "数学人平",
                "英语人平",
                "物理人平",
                "化学人平",
                "道法人平",
                "历史人平",
                "地理人平",
                "生物人平",
            ]
            item_teacher = [
                "语文教师",
                "数学教师",
                "英语教师",
                "物理教师",
                "化学教师",
                "道法教师",
                "历史教师",
                "地理教师",
                "生物教师",
            ]

            # 日志数据
            log = {}
            # 奖金数据
            bonus_dict = {}

            # 标题序号
            id_dict = {}
            for i in range(len(table_title)):
                if table_title[i] == "班级":
                    id_dict["班级"] = i

                if table_title[i] in item_average:
                    id_dict[table_title[i]] = i

                if table_title[i] in item_teacher:
                    id_dict[table_title[i]] = i

                if "一类" in table_title[i]:
                    id_dict["一类"] = i
                if "二类" in table_title[i]:
                    id_dict["二类"] = i

            # 检查是否有班级数据
            if "班级" not in id_dict:
                msg = "找不到班级数据,读取失败\n"
                return jsonify({"msg": msg})

            # 获取班级数据
            class_list = []
            for i in range(1, table.nrows):
                table_row = table.row_values(i)
                class_list.append(float_int_string(table_row[id_dict["班级"]]))
            class_list.remove("全校人平")

            # 获取老师列表
            teacher_list = []
            for item in item_teacher:
                for i in range(1, table.nrows):
                    table_row = table.row_values(i)
                    if item in id_dict:
                        if table_row[id_dict[item]] != "":
                            teacher_list.append(table_row[id_dict[item]])
            teacher_list = list(set(teacher_list))
            print(teacher_list)
            teacher_list = sorted(teacher_list)

            # 平均分奖金计算
            # 按九个科目依次计算
            for i in range(9):
                # 没有某科目老师
                if item_teacher[i] in id_dict:
                    teacher_id = id_dict[item_teacher[i]]
                else:
                    continue

                # 没有某科目平均分
                if item_average[i] in id_dict:
                    average_id = id_dict[item_average[i]]
                else:
                    continue

                # 拿到某科目全校平均分
                average_total = table.row_values(table.nrows - 1)[average_id]

                # 计算每行数据
                for row in range(1, table.nrows - 1):
                    table_row = table.row_values(row)

                    class_name = table_row[id_dict["班级"]]
                    teacher = table_row[teacher_id]
                    average = table_row[average_id]
                    diff = round((average - average_total), 1)

                    # 日志
                    log_string = []
                    log_string.append(float_int_string(class_name) + "班")
                    log_string.append(item_average[i])
                    log_string.append(str(average))
                    log_string.append(str(average_total))
                    log_string.append("%.2f-%.2f=%.2f" %
                                      (average, average_total, diff))

                    # 判断是否有老师奖金的信息
                    if teacher in bonus_dict:
                        sum = bonus_dict[teacher]
                    else:
                        # 没有某老师信息则初始化
                        log[teacher] = teacher + "\n"
                        sum = 0

                    # 计算基本奖金:100*系数
                    basic = value_dict["bonus_average"] * item_coefficient[i]
                    log_string.append("%.2f*%.2f=%.2f" %
                                      (value_dict["bonus_average"],
                                       item_coefficient[i], basic))

                    # 计算额外奖金:多一分8元
                    addition = value_dict["bonus3"] * diff
                    log_string.append("%.2f*%.2f=%.2f" %
                                      (value_dict["bonus3"], diff, addition))

                    # 奖金相加
                    bonus_dict[teacher] = sum + basic + addition
                    log_string.append(
                        "%.2f+%.2f=%.2f" %
                        (sum, basic + addition, bonus_dict[teacher]))

                    # 保存日志
                    log[teacher] = log[teacher] + "\t".join(log_string) + "\n"

            # 计算系数和
            total_coefficient = 0
            for i in range(len(item_teacher)):
                if item_teacher[i] in id_dict:
                    total_coefficient = total_coefficient + item_coefficient[i]
            total_coefficient = round(total_coefficient, 2)

            # 计算尖子生奖金
            # 按每行一个班级计算
            for i in range(1, table.nrows - 1):
                # 日志
                log_string = []

                table_row = table.row_values(i)
                class_name = float_int_string(table_row[id_dict["班级"]]) + "班"
                log_string.append(class_name)

                # 尖子生个数
                class1 = table_row[id_dict["一类"]]
                class2 = table_row[id_dict["二类"]]
                log_string.append("一类:%d个,二类:%d个" % (class1, class2))

                # 尖子生差距
                diff1 = class1 - value_dict["class1"]
                diff2 = class2 - value_dict["class2"]

                # 尖子生奖金
                bonus1 = value_dict["bonus1"] + value_dict["ebonus1"] * diff1
                bonus2 = value_dict["bonus2"] + value_dict["ebonus2"] * diff2
                log_string.append("一类奖金:%d,二类奖金:%d" % (bonus1, bonus2))

                # 总奖金
                bonus_total = bonus1 + bonus2
                log_string.append("总奖金:%d" % (bonus_total))

                # 计算某个班级的老师奖金
                for j in range(len(item_teacher)):
                    # 没有某科目老师
                    if item_teacher[j] not in id_dict:
                        continue

                    # 老师名称
                    teacher_id = id_dict[item_teacher[j]]
                    teacher = table_row[teacher_id]
                    log_string.append("\n\t%s:%s" % (item_teacher[j], teacher))

                    # 奖金比例
                    ratio = item_coefficient[j] / total_coefficient
                    log_string.append(
                        "%.2f/%.2f=%.2f" %
                        (item_coefficient[j], total_coefficient, ratio))

                    # 尖子生奖金
                    bonus_class = bonus_total * ratio
                    log_string.append("%.2f*%.2f=%.2f" %
                                      (bonus_total, ratio, bonus_class))

                    # 汇入奖金数据
                    origin = bonus_dict[teacher]
                    bonus_dict[teacher] = origin + bonus_class
                    log[teacher] = log[teacher] + "%s %.2f+%.2f=%.2f\n" % (
                        class_name,
                        origin,
                        bonus_class,
                        bonus_dict[teacher],
                    )

                # 日志保存
                log[class_name] = "\t".join(log_string) + "\n"

            # 输出数据到表格
            out_file_name = "exportData(%s).xlsx" % current_time()
            save_path = list_to_path(
                ["flaskr", "static", "downloads", out_file_name])
            workbook = xlsxwriter.Workbook(save_path)
            worksheet = workbook.add_worksheet("Sheet1")
            worksheet.write(0, 0, "教师")
            worksheet.write(0, 1, "奖金")

            for i in range(len(teacher_list)):
                teacher = teacher_list[i]
                worksheet.write(i + 1, 0, teacher)
                # 四舍五入
                bonus_dict[teacher] = int(bonus_dict[teacher] + 0.5)
                worksheet.write(i + 1, 1, bonus_dict[teacher])

            workbook.close()

            os.remove(upload_path)
        else:
            msg = "请导入xlsx格式的文件\n"
            return jsonify({"msg": msg})

    return jsonify({
        "msg": msg,
        "class_list": class_list,
        "teacher_list": teacher_list,
        "log": log,
        "filename": out_file_name,
    })