├── .gitignore ├── .idea ├── .gitignore ├── compiler.xml ├── dictionaries │ └── .xml ├── encodings.xml ├── inspectionProfiles │ └── Project_Default.xml ├── libraries │ ├── Maven__ch_qos_logback_logback_classic_1_2_3.xml │ ├── Maven__ch_qos_logback_logback_core_1_2_3.xml │ ├── Maven__com_alibaba_fastjson_1_2_75.xml │ ├── Maven__com_baomidou_mybatis_plus_3_4_2.xml │ ├── Maven__com_baomidou_mybatis_plus_annotation_3_4_2.xml │ ├── Maven__com_baomidou_mybatis_plus_boot_starter_3_4_2.xml │ ├── Maven__com_baomidou_mybatis_plus_core_3_4_2.xml │ ├── Maven__com_baomidou_mybatis_plus_extension_3_4_2.xml │ ├── Maven__com_fasterxml_jackson_core_jackson_annotations_2_11_4.xml │ ├── Maven__com_fasterxml_jackson_core_jackson_core_2_11_4.xml │ ├── Maven__com_fasterxml_jackson_core_jackson_databind_2_11_4.xml │ ├── Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_11_4.xml │ ├── Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_4.xml │ ├── Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_11_4.xml │ ├── Maven__com_github_jsqlparser_jsqlparser_4_0.xml │ ├── Maven__com_jayway_jsonpath_json_path_2_4_0.xml │ ├── Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml │ ├── Maven__com_zaxxer_HikariCP_3_4_5.xml │ ├── Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml │ ├── Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml │ ├── Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml │ ├── Maven__mysql_mysql_connector_java_8_0_23.xml │ ├── Maven__net_bytebuddy_byte_buddy_1_10_20.xml │ ├── Maven__net_bytebuddy_byte_buddy_agent_1_10_20.xml │ ├── Maven__net_minidev_accessors_smart_1_2.xml │ ├── Maven__net_minidev_json_smart_2_3.xml │ ├── Maven__org_apache_logging_log4j_log4j_api_2_13_3.xml │ ├── Maven__org_apache_logging_log4j_log4j_to_slf4j_2_13_3.xml │ ├── Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_43.xml │ ├── Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_43.xml │ ├── Maven__org_apiguardian_apiguardian_api_1_1_0.xml │ ├── Maven__org_assertj_assertj_core_3_18_1.xml │ ├── Maven__org_attoparser_attoparser_2_0_5_RELEASE.xml │ ├── Maven__org_glassfish_jakarta_el_3_0_3.xml │ ├── Maven__org_hamcrest_hamcrest_2_2.xml │ ├── Maven__org_junit_jupiter_junit_jupiter_5_7_1.xml │ ├── Maven__org_junit_jupiter_junit_jupiter_api_5_7_1.xml │ ├── Maven__org_junit_jupiter_junit_jupiter_engine_5_7_1.xml │ ├── Maven__org_junit_jupiter_junit_jupiter_params_5_7_1.xml │ ├── Maven__org_junit_platform_junit_platform_commons_1_7_1.xml │ ├── Maven__org_junit_platform_junit_platform_engine_1_7_1.xml │ ├── Maven__org_mockito_mockito_core_3_6_28.xml │ ├── Maven__org_mockito_mockito_junit_jupiter_3_6_28.xml │ ├── Maven__org_mybatis_mybatis_3_5_6.xml │ ├── Maven__org_mybatis_mybatis_spring_2_0_5.xml │ ├── Maven__org_objenesis_objenesis_3_1.xml │ ├── Maven__org_opentest4j_opentest4j_1_2_0.xml │ ├── Maven__org_ow2_asm_asm_5_0_4.xml │ ├── Maven__org_projectlombok_lombok_1_18_18.xml │ ├── Maven__org_skyscreamer_jsonassert_1_5_0.xml │ ├── Maven__org_slf4j_jul_to_slf4j_1_7_30.xml │ ├── Maven__org_slf4j_slf4j_api_1_7_30.xml │ ├── Maven__org_springframework_boot_spring_boot_2_4_3.xml │ ├── Maven__org_springframework_boot_spring_boot_autoconfigure_2_4_3.xml │ ├── Maven__org_springframework_boot_spring_boot_configuration_processor_2_4_3.xml │ ├── Maven__org_springframework_boot_spring_boot_devtools_2_4_3.xml │ ├── Maven__org_springframework_boot_spring_boot_starter_2_4_3.xml │ ├── Maven__org_springframework_boot_spring_boot_starter_jdbc_2_4_3.xml │ ├── Maven__org_springframework_boot_spring_boot_starter_json_2_4_3.xml │ ├── Maven__org_springframework_boot_spring_boot_starter_logging_2_4_3.xml │ ├── Maven__org_springframework_boot_spring_boot_starter_test_2_4_3.xml │ ├── Maven__org_springframework_boot_spring_boot_starter_thymeleaf_2_4_3.xml │ ├── Maven__org_springframework_boot_spring_boot_starter_tomcat_2_4_3.xml │ ├── Maven__org_springframework_boot_spring_boot_starter_web_2_4_3.xml │ ├── Maven__org_springframework_boot_spring_boot_test_2_4_3.xml │ ├── Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_4_3.xml │ ├── Maven__org_springframework_spring_aop_5_3_4.xml │ ├── Maven__org_springframework_spring_beans_5_3_4.xml │ ├── Maven__org_springframework_spring_context_5_3_4.xml │ ├── Maven__org_springframework_spring_core_5_3_4.xml │ ├── Maven__org_springframework_spring_expression_5_3_4.xml │ ├── Maven__org_springframework_spring_jcl_5_3_4.xml │ ├── Maven__org_springframework_spring_jdbc_5_3_4.xml │ ├── Maven__org_springframework_spring_test_5_3_4.xml │ ├── Maven__org_springframework_spring_tx_5_3_4.xml │ ├── Maven__org_springframework_spring_web_5_3_4.xml │ ├── Maven__org_springframework_spring_webmvc_5_3_4.xml │ ├── Maven__org_thymeleaf_extras_thymeleaf_extras_java8time_3_0_4_RELEASE.xml │ ├── Maven__org_thymeleaf_thymeleaf_3_0_12_RELEASE.xml │ ├── Maven__org_thymeleaf_thymeleaf_spring5_3_0_12_RELEASE.xml │ ├── Maven__org_unbescape_unbescape_1_1_6_RELEASE.xml │ ├── Maven__org_xmlunit_xmlunit_core_2_7_0.xml │ └── Maven__org_yaml_snakeyaml_1_27.xml ├── misc.xml ├── modules.xml ├── uiDesigner.xml └── vcs.xml ├── README.md ├── pom.xml ├── project-interface.iml └── src ├── main ├── java │ └── com │ │ └── jdk │ │ └── projectinterface │ │ ├── ProjectInterfaceApplication.java │ │ ├── bean │ │ ├── Admin.java │ │ ├── Attend.java │ │ ├── Course.java │ │ ├── CourseStudent.java │ │ ├── Leave.java │ │ ├── Record.java │ │ ├── Statistics.java │ │ ├── Student.java │ │ └── Teacher.java │ │ ├── common │ │ ├── ExceptionController.java │ │ └── ServiceResponse.java │ │ ├── config │ │ ├── CORSConfig.java │ │ └── UploadConfig.java │ │ ├── controller │ │ ├── AccountController.java │ │ ├── AttendController.java │ │ ├── CourseController.java │ │ ├── CourseStudentController.java │ │ ├── ImageController.java │ │ ├── IndexController.java │ │ ├── LeaveController.java │ │ └── RecordController.java │ │ ├── mapper │ │ ├── AdminMapper.java │ │ ├── AttendMapper.java │ │ ├── CourseMapper.java │ │ ├── CourseStudentMapper.java │ │ ├── LeaveMapper.java │ │ ├── RecordMapper.java │ │ ├── StudentMapper.java │ │ └── TeacherMapper.java │ │ ├── service │ │ ├── AccountService.java │ │ ├── AttendService.java │ │ ├── CourseService.java │ │ ├── CourseStudentService.java │ │ ├── LeaveService.java │ │ └── RecordService.java │ │ └── utils │ │ └── Utils.java └── resources │ ├── application.yml │ ├── mapper │ ├── AttendMapper.xml │ ├── CourseMapper.xml │ ├── LeaveMapper.xml │ ├── RecordMapper.xml │ └── StudentMapper.xml │ ├── mybatis │ └── mybatis-config.xml │ └── templates │ └── index.html ├── python └── face.exe └── test └── java └── com └── jdk └── projectinterface └── ProjectInterfaceApplicationTests.java /.gitignore: -------------------------------------------------------------------------------- 1 | # Project exclude paths 2 | /target/ -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /workspace.xml -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/dictionaries/.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | admini 5 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 36 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_alibaba_fastjson_1_2_75.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_baomidou_mybatis_plus_3_4_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_baomidou_mybatis_plus_annotation_3_4_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_baomidou_mybatis_plus_boot_starter_3_4_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_baomidou_mybatis_plus_core_3_4_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_baomidou_mybatis_plus_extension_3_4_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_11_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_11_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_11_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_11_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_11_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_github_jsqlparser_jsqlparser_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__com_zaxxer_HikariCP_3_4_5.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__mysql_mysql_connector_java_8_0_23.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_20.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_10_20.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__net_minidev_json_smart_2_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_13_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_13_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_43.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_43.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_assertj_assertj_core_3_18_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_attoparser_attoparser_2_0_5_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_glassfish_jakarta_el_3_0_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_hamcrest_hamcrest_2_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_7_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_7_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_7_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_7_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_7_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_7_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_mockito_mockito_core_3_6_28.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_3_6_28.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_mybatis_mybatis_3_5_6.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_mybatis_mybatis_spring_2_0_5.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_objenesis_objenesis_3_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_projectlombok_lombok_1_18_18.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_30.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_2_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_configuration_processor_2_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_devtools_2_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_jdbc_2_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_thymeleaf_2_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_4_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_aop_5_3_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_beans_5_3_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_context_5_3_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_core_5_3_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_expression_5_3_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_jcl_5_3_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_jdbc_5_3_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_test_5_3_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_tx_5_3_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_web_5_3_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_springframework_spring_webmvc_5_3_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_thymeleaf_extras_thymeleaf_extras_java8time_3_0_4_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_thymeleaf_thymeleaf_3_0_12_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_thymeleaf_thymeleaf_spring5_3_0_12_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_unbescape_unbescape_1_1_6_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_7_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Maven__org_yaml_snakeyaml_1_27.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/uiDesigner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # project-interface 2 | 毕设项目中的接口项目 3 | 4 | 其中人脸识别的调用在utils.java中,由于face_recognition库打包时一直提示我找不到该模块,所以若想使用该功能请自行创建python项目,导入opencv、dlib、face_recognition, 5 | 所调用的python脚本文件内容地址:https://blog.csdn.net/qq_41563868/article/details/117447552 6 | 7 | 另外数据库使用的是MySQL,代码地址:https://blog.csdn.net/qq_41563868/article/details/117787600 8 | 9 | 在后台搭建完成之后,请修改Android中com.example.project_android.utils包下的ProjectStatic类中的SERVICE_PATH的值为服务端的ip。 10 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | org.springframework.boot 7 | spring-boot-starter-parent 8 | 2.4.3 9 | 10 | 11 | com.jdk 12 | project-interface 13 | 0.0.1-SNAPSHOT 14 | project-interface 15 | Demo project for Spring Boot 16 | 17 | 1.8 18 | 19 | 20 | 21 | org.springframework.boot 22 | spring-boot-starter-thymeleaf 23 | 24 | 25 | org.springframework.boot 26 | spring-boot-starter-web 27 | 28 | 29 | 30 | org.apache.httpcomponents 31 | httpclient 32 | 4.5.8 33 | 34 | 35 | 36 | com.baomidou 37 | mybatis-plus-boot-starter 38 | 3.4.2 39 | 40 | 41 | 42 | org.jsoup 43 | jsoup 44 | 1.11.3 45 | 46 | 47 | 48 | com.alibaba 49 | fastjson 50 | 1.2.75 51 | 52 | 53 | 54 | org.springframework.boot 55 | spring-boot-devtools 56 | runtime 57 | true 58 | 59 | 60 | mysql 61 | mysql-connector-java 62 | runtime 63 | 64 | 65 | org.springframework.boot 66 | spring-boot-configuration-processor 67 | true 68 | 69 | 70 | org.projectlombok 71 | lombok 72 | true 73 | 74 | 75 | org.springframework.boot 76 | spring-boot-starter-test 77 | test 78 | 79 | 80 | 81 | 82 | 83 | 84 | org.springframework.boot 85 | spring-boot-maven-plugin 86 | 87 | 88 | 89 | org.projectlombok 90 | lombok 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /project-interface.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/ProjectInterfaceApplication.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface; 2 | 3 | import org.mybatis.spring.annotation.MapperScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | @MapperScan("com.jdk.projectinterface.mapper") 7 | @SpringBootApplication 8 | public class ProjectInterfaceApplication { 9 | 10 | public static void main(String[] args) { 11 | SpringApplication.run(ProjectInterfaceApplication.class, args); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/bean/Admin.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.bean; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableName; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | /** 9 | * 管理员表 10 | */ 11 | @Data 12 | @NoArgsConstructor 13 | public class Admin { 14 | @TableId(type = IdType.AUTO) 15 | private Integer adminId; 16 | private String adminAccount; 17 | private String adminPassword; 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/bean/Attend.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.bean; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.fasterxml.jackson.annotation.JsonFormat; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | 10 | import java.sql.Timestamp; 11 | import java.util.List; 12 | 13 | /** 14 | * 考勤任务表 15 | */ 16 | @Data 17 | @NoArgsConstructor 18 | public class Attend { 19 | @TableId(type = IdType.AUTO) 20 | private Integer attendId; 21 | private Integer courseId; 22 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") 23 | private Timestamp attendStart; 24 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") 25 | private Timestamp attendEnd; 26 | private Double attendLongitude; 27 | private Double attendLatitude; 28 | private String attendLocation; 29 | private Integer attendType; 30 | private String attendGesture; 31 | 32 | @TableField(exist = false) 33 | private List records; 34 | 35 | public Attend(Integer courseId, Timestamp attendStart, Timestamp attendEnd, Double attendLongitude, Double attendLatitude, String attendLocation, Integer attendType) { 36 | this.courseId = courseId; 37 | this.attendStart = attendStart; 38 | this.attendEnd = attendEnd; 39 | this.attendLongitude = attendLongitude; 40 | this.attendLatitude = attendLatitude; 41 | this.attendLocation = attendLocation; 42 | this.attendType = attendType; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/bean/Course.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.bean; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.fasterxml.jackson.annotation.JsonFormat; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | 10 | import java.sql.Timestamp; 11 | 12 | /** 13 | * 课程表 14 | */ 15 | @Data 16 | @NoArgsConstructor 17 | public class Course { 18 | @TableId(type = IdType.AUTO) 19 | private Integer courseId; 20 | private Integer teacherId; 21 | private String courseName; 22 | private String courseAvatar; 23 | private String courseIntroduce; 24 | private String courseCode; 25 | 26 | @TableField(exist = false) 27 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") 28 | private Timestamp joinTime; 29 | 30 | //测试连表查询 31 | @TableField(exist = false) 32 | private Teacher teacher; 33 | 34 | public Course(Integer teacherId, String courseName, String courseAvatar, String courseIntroduce) { 35 | this.teacherId = teacherId; 36 | this.courseName = courseName; 37 | this.courseAvatar = courseAvatar; 38 | this.courseIntroduce = courseIntroduce; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/bean/CourseStudent.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.bean; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableField; 4 | import com.fasterxml.jackson.annotation.JsonFormat; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.sql.Timestamp; 9 | import java.util.List; 10 | 11 | /** 12 | * 课程学生统计表 13 | */ 14 | @Data 15 | @NoArgsConstructor 16 | public class CourseStudent { 17 | private Integer courseId; 18 | private Integer studentId; 19 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") 20 | private Timestamp joinTime; 21 | 22 | @TableField(exist = false) 23 | private Student student; 24 | 25 | public CourseStudent(Integer courseId, Integer studentId) { 26 | this.courseId = courseId; 27 | this.studentId = studentId; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/bean/Leave.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.bean; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableName; 7 | import com.fasterxml.jackson.annotation.JsonFormat; 8 | import lombok.Data; 9 | import lombok.NoArgsConstructor; 10 | 11 | import java.sql.Timestamp; 12 | 13 | /** 14 | * 请假表 15 | */ 16 | @Data 17 | @TableName("leave_attend") 18 | @NoArgsConstructor 19 | public class Leave { 20 | @TableId(type = IdType.AUTO) 21 | private Integer leaveId; 22 | private Integer studentId; 23 | private Integer courseId; 24 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") 25 | private Timestamp leaveTime; 26 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") 27 | private Timestamp backTime; 28 | private String leaveReason; 29 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") 30 | private Timestamp approvalTime; 31 | private Integer approvalResult; 32 | private String approvalRemark; 33 | 34 | @TableField(exist = false) 35 | private Student student; 36 | 37 | public Leave(Integer studentId, Integer courseId, Timestamp leaveTime, Timestamp backTime, String leaveReason) { 38 | this.studentId = studentId; 39 | this.courseId = courseId; 40 | this.leaveTime = leaveTime; 41 | this.backTime = backTime; 42 | this.leaveReason = leaveReason; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/bean/Record.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.bean; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.fasterxml.jackson.annotation.JsonFormat; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | 10 | import java.sql.Timestamp; 11 | 12 | /** 13 | * 考勤记录表 14 | */ 15 | @Data 16 | @NoArgsConstructor 17 | public class Record { 18 | private Integer attendId; 19 | private Integer studentId; 20 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") 21 | private Timestamp recordTime; 22 | private String recordLocation; 23 | /** 24 | * 0代表未签,1代表失败,2代表成功,3代表请假 25 | */ 26 | private Integer recordResult; 27 | private String recordPhoto; 28 | 29 | @TableField(exist = false) 30 | private Student student; 31 | @TableField(exist = false) 32 | private Attend attend; 33 | 34 | public Record(Integer attendId, Integer studentId, Timestamp recordTime, String recordLocation, String recordPhoto) { 35 | this.attendId = attendId; 36 | this.studentId = studentId; 37 | this.recordTime = recordTime; 38 | this.recordLocation = recordLocation; 39 | this.recordPhoto = recordPhoto; 40 | } 41 | 42 | public Record(Integer attendId, Integer studentId, Integer recordResult) { 43 | this.attendId = attendId; 44 | this.studentId = studentId; 45 | this.recordResult = recordResult; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/bean/Statistics.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.bean; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class Statistics { 9 | private String studentName; 10 | private String studentAccount; 11 | private Integer absentCount; 12 | private Integer failedCount; 13 | private Integer successCount; 14 | private Integer leaveCount; 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/bean/Student.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.bean; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import lombok.AllArgsConstructor; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * 学生用户表 14 | */ 15 | @Data 16 | @NoArgsConstructor 17 | public class Student { 18 | @TableId(type = IdType.AUTO) 19 | private Integer studentId; 20 | private String studentAccount; 21 | private String studentPassword; 22 | private String studentName; 23 | private Boolean studentSex; 24 | private String studentAvatar; 25 | private String studentClass; 26 | private String studentFace; 27 | private String studentPhone; 28 | private String studentEmail; 29 | 30 | @TableField(exist = false) 31 | private List records; 32 | @TableField(exist = false) 33 | private List leaves; 34 | @TableField(exist = false) 35 | private List courseStudents; 36 | 37 | public Student(String studentAccount, String studentPassword, String studentName, Boolean studentSex, String studentAvatar, String studentClass, String studentPhone, String studentEmail) { 38 | this.studentAccount = studentAccount; 39 | this.studentPassword = studentPassword; 40 | this.studentName = studentName; 41 | this.studentSex = studentSex; 42 | this.studentAvatar = studentAvatar; 43 | this.studentClass = studentClass; 44 | this.studentPhone = studentPhone; 45 | this.studentEmail = studentEmail; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/bean/Teacher.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.bean; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import lombok.AllArgsConstructor; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * 教师用户表 14 | */ 15 | @Data 16 | @NoArgsConstructor 17 | public class Teacher { 18 | @TableId(type = IdType.AUTO) 19 | private Integer teacherId; 20 | private Integer adminId; 21 | private String teacherAccount; 22 | private String teacherPassword; 23 | private String teacherName; 24 | private Boolean teacherSex; 25 | private String teacherPhone; 26 | private String teacherEmail; 27 | private String teacherAvatar; 28 | 29 | //连表查询 30 | @TableField(exist = false) 31 | private List courses; 32 | 33 | public Teacher(Integer adminId, String teacherAccount, String teacherPassword, String teacherName, Boolean teacherSex, String teacherPhone, String teacherEmail, String teacherAvatar) { 34 | this.adminId = adminId; 35 | this.teacherAccount = teacherAccount; 36 | this.teacherPassword = teacherPassword; 37 | this.teacherName = teacherName; 38 | this.teacherSex = teacherSex; 39 | this.teacherPhone = teacherPhone; 40 | this.teacherEmail = teacherEmail; 41 | this.teacherAvatar = teacherAvatar; 42 | } 43 | } -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/common/ExceptionController.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.common; 2 | 3 | import org.springframework.web.bind.annotation.ExceptionHandler; 4 | import org.springframework.web.bind.annotation.RestControllerAdvice; 5 | 6 | import java.sql.SQLIntegrityConstraintViolationException; 7 | 8 | /** 9 | * 捕获全局异常 10 | */ 11 | @RestControllerAdvice 12 | public class ExceptionController { 13 | 14 | @ExceptionHandler(NullPointerException.class) 15 | public Object NullPointExceptionH(){ 16 | return ServiceResponse.createFailResponse("空指针异常"); 17 | } 18 | 19 | @ExceptionHandler(SQLIntegrityConstraintViolationException.class) 20 | public Object SQLIntegrityConstraintViolationExceptionH(){ 21 | return ServiceResponse.createFailResponse("SQL完整性约束违反异常"); 22 | } 23 | 24 | @ExceptionHandler(IllegalArgumentException.class) 25 | public Object illegalArgumentExceptionH(){ 26 | return ServiceResponse.createFailResponse("非法参数异常"); 27 | } 28 | 29 | @ExceptionHandler(IndexOutOfBoundsException.class) 30 | public Object IndexOutOfBoundsExceptionH(){ 31 | return ServiceResponse.createFailResponse("索引越界异常"); 32 | } 33 | 34 | @ExceptionHandler(Exception.class) 35 | public Object exceptionH(){ 36 | return ServiceResponse.createFailResponse("异常申请"); 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/common/ServiceResponse.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.common; 2 | 3 | import com.jdk.projectinterface.utils.Utils; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | @Data 9 | public class ServiceResponse implements Serializable{ 10 | private static final int RESPONSE_SUCCESS = 200; 11 | private static final int RESPONSE_EMPTY = 204; 12 | private static final int RESPONSE_FAIL = 401; 13 | 14 | private int code; 15 | private String message; 16 | private T data; 17 | 18 | /** 19 | * 创建一个请求失败的response 20 | * @param msg 请求失败返回的消息 21 | * @return ServiceResponse 22 | */ 23 | public static ServiceResponse createFailResponse(String msg){ 24 | ServiceResponse response = new ServiceResponse<>(); 25 | response.setCode(RESPONSE_FAIL); 26 | response.setMessage(msg); 27 | response.setData(null); 28 | return response; 29 | } 30 | 31 | /** 32 | * 请求成功,但查询结果为空的ServiceResponse 33 | * @param msg 请求为空,返回的消息 34 | * @return ServiceResponse 35 | */ 36 | public static ServiceResponse createEmptyResponse(String msg){ 37 | ServiceResponse response = new ServiceResponse<>(); 38 | response.setCode(RESPONSE_EMPTY); 39 | response.setMessage(msg); 40 | response.setData(null); 41 | return response; 42 | } 43 | 44 | /** 45 | * 请求成功,返回相应data 46 | * @param msg 返回成功的消息 47 | * @param object 成功时的data数据 48 | * @return ServiceResponse 49 | */ 50 | @SafeVarargs 51 | public static ServiceResponse createResponse(String msg, T... object){ 52 | ServiceResponse response = new ServiceResponse<>(); 53 | response.setCode(RESPONSE_SUCCESS); 54 | response.setMessage(msg); 55 | if (object.length < 1){ 56 | response.setData(null); 57 | } else { 58 | response.setData(object[0]); 59 | } 60 | return response; 61 | } 62 | 63 | public static ServiceResponse backFailResponse(String msgOnEmpty,String msgOnSuccess,T object){ 64 | ServiceResponse response; 65 | if (Utils.isEmpty(object)){ 66 | response = ServiceResponse.createEmptyResponse(msgOnEmpty); 67 | return response; 68 | } else { 69 | response = ServiceResponse.createResponse(msgOnSuccess,object); 70 | return response; 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/config/CORSConfig.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.config; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.web.servlet.config.annotation.CorsRegistry; 6 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 7 | 8 | @Configuration 9 | public class CORSConfig implements WebMvcConfigurer { 10 | 11 | @Override 12 | public void addCorsMappings(CorsRegistry registry) { 13 | registry.addMapping("/**") 14 | .allowedHeaders("*") 15 | .allowedMethods("*") 16 | .allowedOrigins("*"); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/config/UploadConfig.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.config; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 5 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 6 | 7 | import java.io.File; 8 | 9 | @Configuration 10 | public class UploadConfig implements WebMvcConfigurer { 11 | @Override 12 | public void addResourceHandlers(ResourceHandlerRegistry registry) { 13 | String imagePath = new File("").getAbsolutePath() + "\\src\\main\\resources\\static\\"; 14 | registry.addResourceHandler("/image/**").addResourceLocations("file:" + imagePath); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/controller/AccountController.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.controller; 2 | 3 | import com.jdk.projectinterface.bean.Student; 4 | import com.jdk.projectinterface.bean.Teacher; 5 | import com.jdk.projectinterface.common.ServiceResponse; 6 | import com.jdk.projectinterface.service.AccountService; 7 | import com.jdk.projectinterface.utils.Utils; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.web.bind.annotation.*; 10 | 11 | @RestController 12 | @RequestMapping("/account") 13 | public class AccountController { 14 | @Autowired 15 | AccountService accountService; 16 | 17 | /** 18 | * 用户登录 19 | * @param type 用户角色 20 | * @param account 账号 21 | * @param password 密码 22 | * @return 登录成功返回用户信息,失败返回code401 23 | */ 24 | @GetMapping("/login") 25 | public Object login(@RequestParam("type") Integer type, 26 | @RequestParam("account") String account, 27 | @RequestParam("password") String password){ 28 | 29 | return accountService.accountLogin(type, account, password); 30 | } 31 | 32 | /** 33 | * 注销用户 34 | * @param type 被删除用户角色 35 | * @param accountId 被删用户的账户id 36 | * @return 执行删除操作的结果 37 | */ 38 | @GetMapping("/deleteAccount") 39 | public Object deleteAccount( 40 | @RequestParam("type") Integer type, 41 | @RequestParam("accountId") Integer accountId 42 | ){ 43 | switch (type){ 44 | case 1: 45 | /** 46 | * 删除教师用户 47 | */ 48 | return accountService.deleteTeacher(accountId); 49 | case 2: 50 | /** 51 | * 删除学生用户 52 | */ 53 | return accountService.deleteStudent(accountId); 54 | default: 55 | return ServiceResponse.createFailResponse("操作不允许"); 56 | } 57 | } 58 | 59 | /** 60 | * 添加学生和教师的两种方法 61 | */ 62 | 63 | @GetMapping("/addTeacher") 64 | public Object addTeacher( 65 | @RequestParam("adminId") Integer adminId, 66 | @RequestParam("account") String account, 67 | @RequestParam("password") String password, 68 | @RequestParam("name") String name, 69 | @RequestParam("sex") Boolean sex, 70 | @RequestParam("phone") String phone, 71 | @RequestParam("email") String email, 72 | @RequestParam("avatar") String avatar 73 | ){ 74 | ServiceResponse response; 75 | if (!Utils.isPhone(phone) || !Utils.IsEmail(email)){ 76 | response = ServiceResponse.createFailResponse("电话或邮箱填写有误"); 77 | } else { 78 | Teacher teacher = new Teacher(adminId,account,password,name,sex,phone,email,avatar); 79 | response = accountService.addTeacher(teacher); 80 | } 81 | return response; 82 | } 83 | 84 | @GetMapping("/addStudent") 85 | public Object addStudent( 86 | @RequestParam("account") String account, 87 | @RequestParam("password") String password, 88 | @RequestParam("name") String name, 89 | @RequestParam("sex") Boolean sex, 90 | @RequestParam("major") String classname, 91 | @RequestParam("phone") String phone, 92 | @RequestParam("email") String email 93 | ){ 94 | ServiceResponse response; 95 | String avatar = "/image/avatars/user-default.png"; 96 | if (!Utils.isPhone(phone) || !Utils.IsEmail(email)){ 97 | response = ServiceResponse.createFailResponse("电话或邮箱填写有误"); 98 | } else { 99 | Student student = new Student(account,password,name,sex,avatar,classname,phone,email); 100 | response = accountService.addStudent(student); 101 | } 102 | return response; 103 | } 104 | 105 | /** 106 | * 修改学生和教师的两种方法 107 | */ 108 | @GetMapping("/modifyTeacher") 109 | public Object modifyTeacher( 110 | @RequestParam("teacherId") Integer teacherId, 111 | @RequestParam(value = "adminId",required = false) Integer adminId, 112 | @RequestParam(value = "account",required = false) String account, 113 | @RequestParam(value = "password",required = false) String password, 114 | @RequestParam(value = "name",required = false) String name, 115 | @RequestParam(value = "sex",required = false) Boolean sex, 116 | @RequestParam(value = "phone",required = false) String phone, 117 | @RequestParam(value = "email",required = false) String email, 118 | @RequestParam(value = "avatar",required = false) String avatar 119 | ){ 120 | ServiceResponse response; 121 | Teacher teacher = new Teacher(adminId,account,password,name,sex,phone,email,avatar); 122 | teacher.setTeacherId(teacherId); 123 | response = accountService.modifyTeacher(teacher); 124 | return response; 125 | } 126 | 127 | @GetMapping("/modifyStudent") 128 | public Object modifyStudent( 129 | @RequestParam("studentId") Integer studentId, 130 | @RequestParam(value = "account",required = false) String account, 131 | @RequestParam(value = "password",required = false) String password, 132 | @RequestParam(value = "name",required = false) String name, 133 | @RequestParam(value = "sex",required = false) Boolean sex, 134 | @RequestParam(value = "avatar",required = false) String avatar, 135 | @RequestParam(value = "major",required = false) String classname, 136 | @RequestParam(value = "face",required = false) String face, 137 | @RequestParam(value = "phone",required = false) String phone, 138 | @RequestParam(value = "email",required = false) String email 139 | ){ 140 | ServiceResponse response; 141 | Student student = new Student(account,password,name,sex,avatar,classname,phone,email); 142 | student.setStudentId(studentId); 143 | student.setStudentFace(face); 144 | response = accountService.modifyStudent(student); 145 | return response; 146 | } 147 | 148 | /** 149 | * 查询所有用户账号 150 | */ 151 | @GetMapping("/findAccount") 152 | public Object findAccount(@RequestParam("type") Integer type){ 153 | switch (type){ 154 | case 1: 155 | return accountService.findAllTeacher(); 156 | case 2: 157 | return accountService.findAllStudent(); 158 | default: 159 | return ServiceResponse.createFailResponse("查询失败"); 160 | } 161 | } 162 | 163 | /** 164 | * 通过模糊查询查找用户 165 | * @return 返回是一个数组 166 | */ 167 | @GetMapping("/findAccountByColumn") 168 | public Object findAccountByColumn( 169 | @RequestParam("type") Integer type, 170 | @RequestParam("column") String column, 171 | @RequestParam("value") Object value 172 | ){ 173 | 174 | switch (type){ 175 | case 1: 176 | return accountService.findTeacher(column,value); 177 | case 2: 178 | return accountService.findStudent(column,value); 179 | default: 180 | return ServiceResponse.createFailResponse("查询失败"); 181 | } 182 | } 183 | 184 | /** 185 | * 验证账户是否存在 186 | */ 187 | @GetMapping("/confirmAccount") 188 | public Object confirmAccount( 189 | @RequestParam("type") Integer type, 190 | @RequestParam("account") String account, 191 | @RequestParam(value = "phone",required = false) String phone 192 | ){ 193 | if(phone.isEmpty()) { 194 | return accountService.confirmAccount(type, account); 195 | } else { 196 | return accountService.confirmAccount(type,account,phone); 197 | } 198 | } 199 | 200 | } 201 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/controller/AttendController.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.controller; 2 | 3 | import com.jdk.projectinterface.bean.Attend; 4 | import com.jdk.projectinterface.service.AttendService; 5 | import com.jdk.projectinterface.utils.Utils; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.web.bind.annotation.GetMapping; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RequestParam; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | import java.sql.Timestamp; 13 | import java.util.Map; 14 | 15 | 16 | /** 17 | 考勤任务表 18 | */ 19 | @RestController 20 | @RequestMapping("/attend") 21 | public class AttendController { 22 | @Autowired 23 | AttendService attendService; 24 | 25 | @GetMapping("/addAttend") 26 | public Object addAttend( 27 | @RequestParam("courseId") Integer courseId, 28 | @RequestParam("start") Timestamp start, 29 | @RequestParam("end") Timestamp end, 30 | @RequestParam("longitude") Double longitude, 31 | @RequestParam("latitude") Double latitude, 32 | @RequestParam("location") String location, 33 | @RequestParam("type") Integer type, 34 | @RequestParam(value = "gesture",required = false) String gesture 35 | ){ 36 | Attend attend = new Attend(courseId,start,end,longitude,latitude,location,type); 37 | if (type == 2){ 38 | attend.setAttendGesture(gesture); 39 | } 40 | return attendService.addAttend(attend); 41 | } 42 | 43 | /** 44 | * 修改 45 | */ 46 | @GetMapping("/modifyAttend") 47 | public Object modifyAttend( 48 | @RequestParam("attendId") Integer attendId, 49 | @RequestParam(value = "courseId",required = false) Integer courseId, 50 | @RequestParam(value = "start",required = false) Timestamp start, 51 | @RequestParam(value = "end",required = false) Timestamp end, 52 | @RequestParam(value = "longitude",required = false) Double longitude, 53 | @RequestParam(value = "latitude",required = false) Double latitude, 54 | @RequestParam(value = "location",required = false) String location 55 | ){ 56 | Attend attend = new Attend(); 57 | attend.setAttendId(attendId); 58 | attend.setCourseId(Utils.isEmpty(courseId) ? null : courseId); 59 | attend.setAttendStart(Utils.isEmpty(start) ? null : start); 60 | attend.setAttendEnd(Utils.isEmpty(end) ? null : end); 61 | attend.setAttendLongitude(Utils.isEmpty(longitude) ? null : longitude); 62 | attend.setAttendLatitude(Utils.isEmpty(latitude) ? null : latitude); 63 | attend.setAttendLocation(Utils.isEmpty(location) ? null : location); 64 | return attendService.modifyAttend(attend); 65 | } 66 | 67 | /** 68 | * 查询 69 | */ 70 | @GetMapping("/findAttendByColumn") 71 | public Object findAttendByColumn( 72 | @RequestParam("column") String column, 73 | @RequestParam("value") Object value 74 | ){ 75 | return attendService.findAttendByColumn(column,value); 76 | } 77 | 78 | @GetMapping("/findAttendByMap") 79 | public Object findAttendByMap(@RequestParam Map map){ 80 | return attendService.findAttendByMap(map); 81 | } 82 | 83 | @GetMapping("/findAttendByTime") 84 | public Object findAttendByTime(@RequestParam("courseId") Integer courseId,@RequestParam("time") String time){ 85 | return attendService.findAttendByTime(courseId,time); 86 | } 87 | 88 | @GetMapping("/findAttendByCourseId") 89 | public Object findAttendByCourseId(@RequestParam("courseId") Integer courseId){ 90 | return attendService.findAttendByCourseId(courseId); 91 | } 92 | 93 | @GetMapping("/findStudentAttend") 94 | public Object findStudentAttend(@RequestParam("courseId") Integer courseId,@RequestParam("joinTime") Timestamp joinTime){ 95 | return attendService.findStudentAttend(courseId,joinTime); 96 | } 97 | 98 | @GetMapping("/findStudentAttendByTime") 99 | public Object findStudentAttendByTime(@RequestParam("courseId") Integer courseId,@RequestParam("joinTime") Timestamp joinTime, 100 | @RequestParam("time") String time){ 101 | return attendService.findStudentAttendByTime(courseId,joinTime,time); 102 | } 103 | 104 | /** 105 | * 删除 106 | */ 107 | @GetMapping("/deleteAttend") 108 | public Object deleteAttend(@RequestParam("attendId") Integer attendId){ 109 | return attendService.deleteAttend(attendId); 110 | } 111 | 112 | } 113 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/controller/CourseController.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.controller; 2 | 3 | 4 | import com.jdk.projectinterface.bean.Course; 5 | import com.jdk.projectinterface.common.ServiceResponse; 6 | import com.jdk.projectinterface.service.AccountService; 7 | import com.jdk.projectinterface.service.CourseService; 8 | import com.jdk.projectinterface.service.CourseStudentService; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | import org.springframework.web.bind.annotation.GetMapping; 11 | import org.springframework.web.bind.annotation.RequestMapping; 12 | import org.springframework.web.bind.annotation.RequestParam; 13 | import org.springframework.web.bind.annotation.RestController; 14 | 15 | import java.util.HashMap; 16 | import java.util.List; 17 | import java.util.Map; 18 | 19 | @RestController 20 | @RequestMapping("/course") 21 | public class CourseController { 22 | 23 | @Autowired 24 | CourseService courseService; 25 | 26 | @Autowired 27 | AccountService accountService; 28 | 29 | @GetMapping("/addCourse") 30 | public Object addCourse( 31 | @RequestParam("teacherId") Integer teacherId, 32 | @RequestParam("name") String name, 33 | @RequestParam("avatar") String avatar, 34 | @RequestParam("introduce") String introduce 35 | ){ 36 | Course course = new Course(teacherId,name,avatar,introduce); 37 | Map map = new HashMap<>(); 38 | map.put("teacher_id",teacherId); 39 | map.put("course_name",name); 40 | if (courseService.findCourseByMap(map).getData().size() != 0){ 41 | return ServiceResponse.createEmptyResponse("创建课程已存在"); 42 | } 43 | return courseService.addCourse(course); 44 | } 45 | 46 | /** 47 | * 通过模糊查询课程表 48 | * @return 返回数组 49 | */ 50 | @GetMapping("/findCourseByColumn") 51 | public Object findCourseByColumn( 52 | @RequestParam("column") String column, 53 | @RequestParam("value") Object value 54 | ){ 55 | return courseService.findCourseByColumn(column,value); 56 | } 57 | 58 | /** 59 | * 通过模糊查询课程表 60 | * @return 返回数组 61 | */ 62 | @GetMapping("/findCourseByMap") 63 | public Object findCourseByMap(@RequestParam Map map){ 64 | return courseService.findCourseByMap(map); 65 | } 66 | 67 | @GetMapping("/findCourseByStudentId") 68 | public Object findCourseByStudentId(@RequestParam("studentId") Integer studentId){ 69 | return courseService.findCourseByStudentId(studentId); 70 | } 71 | 72 | @GetMapping("/findCourseByStudentIdWithName") 73 | public Object findCourseByStudentIdWithName(@RequestParam("studentId") Integer studentId, 74 | @RequestParam("name") String name){ 75 | return courseService.findCourseByStudentIdWithName(studentId,name); 76 | } 77 | 78 | @GetMapping("/findCourseByCode") 79 | public Object findCourseByCode(@RequestParam("code") String code){ 80 | return courseService.findCourseByCode(code); 81 | } 82 | 83 | @GetMapping("/findCourseByTeacherId") 84 | public Object findCourseByTeacherId(@RequestParam("teacherId") Integer teacherId){ 85 | return courseService.findCourseByTeacherId(teacherId); 86 | } 87 | 88 | @GetMapping("/findCourseByTeacherIdWithName") 89 | public Object findCourseByTeacherIdWithName(@RequestParam("teacherId") Integer teacherId, 90 | @RequestParam("name") String name){ 91 | return courseService.findCourseByTeacherIdWithName(teacherId,name); 92 | } 93 | 94 | @GetMapping("/findAllCourse") 95 | public Object findAllCourse(){ 96 | return courseService.findAllCourse(); 97 | } 98 | 99 | /** 100 | * 修改课程,如果修改后的名称在数据库重复,取消修改操作 101 | */ 102 | @GetMapping("/modifyCourse") 103 | public Object modifyCourse( 104 | @RequestParam("courseId") Integer courseId, 105 | @RequestParam(value = "courseName",required = false) String courseName, 106 | @RequestParam(value = "courseAvatar",required = false) String courseAvatar, 107 | @RequestParam(value = "courseIntroduce", required = false) String courseIntroduce 108 | ){ 109 | Map map = new HashMap<>(); 110 | map.put("course_id",courseId); 111 | Course courseOld = courseService.findCourseByMap(map).getData().get(0); 112 | map.clear(); 113 | if (courseName != null && !courseName.equals(courseOld.getCourseName())){ 114 | map.put("teacher_id",courseOld.getTeacherId()); 115 | map.put("course_name",courseName); 116 | if (courseService.findCourseByMap(map).getData().size() != 0){ 117 | return ServiceResponse.createEmptyResponse("修改课程内容重复"); 118 | } 119 | } 120 | Course course = new Course(courseOld.getTeacherId(), courseName, courseAvatar, courseIntroduce); 121 | course.setCourseId(courseId); 122 | return courseService.modifyCourse(course); 123 | } 124 | 125 | /** 126 | * 删除课程 127 | * @param courseId 课程的id 128 | */ 129 | @GetMapping("/deleteCourse") 130 | public Object deleteCourse( 131 | @RequestParam("id") Integer courseId 132 | ){ 133 | return courseService.deleteCourse(courseId); 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/controller/CourseStudentController.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.controller; 2 | 3 | import com.jdk.projectinterface.bean.CourseStudent; 4 | import com.jdk.projectinterface.service.CourseStudentService; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.web.bind.annotation.GetMapping; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestParam; 9 | import org.springframework.web.bind.annotation.RestController; 10 | 11 | import java.util.Map; 12 | 13 | @RestController 14 | @RequestMapping("/courseStudent") 15 | public class CourseStudentController { 16 | @Autowired 17 | CourseStudentService courseStudentService; 18 | 19 | /** 20 | *添加 21 | */ 22 | @GetMapping("/addCourseStudent") 23 | public Object addCourseStudent( 24 | @RequestParam("courseCode") String courseCode, 25 | @RequestParam("studentId") Integer studentId 26 | ){ 27 | return courseStudentService.addCourseStudent(courseCode,studentId); 28 | } 29 | 30 | /** 31 | *查询 32 | */ 33 | @GetMapping("/findCourseStudentByMap") 34 | public Object findCourseStudent(@RequestParam Map map){ 35 | return courseStudentService.findCourseStudentByMap(map); 36 | } 37 | 38 | @GetMapping("/findCourseStudentByColumn") 39 | public Object findCourseStudentByColumn( 40 | @RequestParam("column") String column, 41 | @RequestParam("value") Object value 42 | ){ 43 | return courseStudentService.findCourseStudentByColumn(column,value); 44 | } 45 | 46 | /** 47 | * 查找属于某个课程的所有学生 48 | */ 49 | @GetMapping("/findAllByCourseId") 50 | public Object findAll(@RequestParam("courseId") Integer courseId){ 51 | return courseStudentService.findAllByCourseId(courseId); 52 | } 53 | 54 | /** 55 | *修改 56 | */ 57 | @GetMapping("/modifyCourseStudent") 58 | public Object modifyCourseStudent( 59 | @RequestParam("courseId") Integer courseId, 60 | @RequestParam("studentId") Integer studentId 61 | ){ 62 | CourseStudent total = new CourseStudent(courseId,studentId); 63 | return courseStudentService.modifyCourseStudent(total); 64 | } 65 | 66 | /** 67 | *删除 68 | */ 69 | @GetMapping("/deleteCourseStudent") 70 | public Object deleteCourseStudent( 71 | @RequestParam("courseId") Integer courseId, 72 | @RequestParam("studentId") Integer studentId 73 | ){ 74 | return courseStudentService.deleteCourseStudent(courseId,studentId); 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/controller/ImageController.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.controller; 2 | 3 | import com.jdk.projectinterface.common.ServiceResponse; 4 | import com.jdk.projectinterface.utils.Utils; 5 | import org.springframework.stereotype.Controller; 6 | import org.springframework.web.bind.annotation.PostMapping; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestParam; 9 | import org.springframework.web.bind.annotation.ResponseBody; 10 | import org.springframework.web.multipart.MultipartFile; 11 | 12 | @Controller 13 | @RequestMapping("/document") 14 | public class ImageController { 15 | 16 | @PostMapping("/saveImage") 17 | @ResponseBody 18 | public Object test( 19 | @RequestParam("photo") MultipartFile photo, 20 | @RequestParam("type") String type, 21 | @RequestParam("id") String id 22 | ){ 23 | String s = Utils.saveImage(photo, type, id); 24 | if (s != null){ 25 | return ServiceResponse.createResponse(s); 26 | } 27 | return ServiceResponse.createResponse("false"); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/controller/IndexController.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.controller; 2 | 3 | import com.jdk.projectinterface.common.ServiceResponse; 4 | import com.jdk.projectinterface.utils.Utils; 5 | import org.springframework.stereotype.Controller; 6 | import org.springframework.web.bind.annotation.*; 7 | import org.springframework.web.multipart.MultipartFile; 8 | 9 | import javax.servlet.http.HttpServletRequest; 10 | 11 | @Controller 12 | public class IndexController { 13 | @GetMapping({"/","index"}) 14 | public String showIndex(){ 15 | return "index"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/controller/LeaveController.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.controller; 2 | 3 | import com.jdk.projectinterface.bean.Course; 4 | import com.jdk.projectinterface.bean.Leave; 5 | import com.jdk.projectinterface.common.ServiceResponse; 6 | import com.jdk.projectinterface.service.CourseService; 7 | import com.jdk.projectinterface.service.LeaveService; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Repository; 10 | import org.springframework.web.bind.annotation.GetMapping; 11 | import org.springframework.web.bind.annotation.RequestMapping; 12 | import org.springframework.web.bind.annotation.RequestParam; 13 | import org.springframework.web.bind.annotation.RestController; 14 | 15 | import java.sql.Timestamp; 16 | import java.util.HashMap; 17 | import java.util.Map; 18 | 19 | @RestController 20 | @RequestMapping("/leave") 21 | public class LeaveController { 22 | @Autowired 23 | LeaveService leaveService; 24 | 25 | @Autowired 26 | CourseService courseService; 27 | 28 | /** 29 | * 学生创建请假申请 30 | * result= 0正在审批,1拒绝请假,2批准请假 31 | */ 32 | @GetMapping("/addLeave") 33 | public Object addLeave( 34 | @RequestParam("studentId") Integer studentId, 35 | @RequestParam("courseId") Integer courseId, 36 | @RequestParam("leaveTime") String leaveTime, 37 | @RequestParam("backTime") String backTime, 38 | @RequestParam("leaveReason") String leaveReason 39 | ){ 40 | Leave leave = new Leave(studentId,courseId, Timestamp.valueOf(leaveTime),Timestamp.valueOf(backTime),leaveReason); 41 | leave.setApprovalResult(0); 42 | return leaveService.addLeave(leave); 43 | } 44 | 45 | /** 46 | * 查看课程中的请假申请 47 | */ 48 | @GetMapping("/findLeaveByMap") 49 | public Object findLeaveByMap(@RequestParam Map map){ 50 | return leaveService.findLeaveByMap(map); 51 | } 52 | 53 | /** 54 | * 查询所有该课程的请假申请 55 | */ 56 | @GetMapping("/findAllLeave") 57 | public Object findAllLeave(@RequestParam("courseId") Integer courseId){ 58 | return leaveService.findAllLeave(courseId); 59 | } 60 | 61 | @GetMapping("/findAllLeaveWithStudent") 62 | public Object findAllLeaveWithStudent(){ 63 | return leaveService.findAllLeaveWithStudent(); 64 | } 65 | 66 | @GetMapping("/findAllLeaveByStudentId") 67 | public Object findAllLeaveByStudentId(@RequestParam("courseId") Integer courseId, 68 | @RequestParam("studentId") Integer studentId){ 69 | return leaveService.findAllLeaveByStudentId(courseId,studentId); 70 | } 71 | 72 | @GetMapping("/findLeaveByColumn") 73 | public Object findLeaveByColumn( 74 | @RequestParam("column") String column, 75 | @RequestParam("value") String value 76 | ){ 77 | return leaveService.findLeaveByColumn(column,value); 78 | } 79 | 80 | /** 81 | * 教师审批课程中的请假申请 82 | */ 83 | @GetMapping("/modifyLeave") 84 | public Object modifyLeave( 85 | @RequestParam("leaveId") Integer leaveId, 86 | @RequestParam("time") String time, 87 | @RequestParam("result") Integer result, 88 | @RequestParam("remark") String remark 89 | ){ 90 | Map map = new HashMap<>(); 91 | map.put("leave_id",leaveId); 92 | Leave leave = leaveService.findLeaveByMap(map).getData().get(0); 93 | leave.setApprovalRemark(remark); 94 | leave.setApprovalResult(result); 95 | leave.setApprovalTime(Timestamp.valueOf(time)); 96 | return leaveService.modifyLeave(leave); 97 | } 98 | 99 | /** 100 | * 学生撤销申请 101 | */ 102 | @GetMapping("/deleteLeave") 103 | public Object deleteLeave(@RequestParam("leaveId") Integer leaveId){ 104 | Map map = new HashMap<>(); 105 | map.put("leave_id",leaveId); 106 | Integer approvalResult = leaveService.findLeaveByMap(map).getData().get(0).getApprovalResult(); 107 | if (approvalResult != 0){ 108 | return ServiceResponse.createFailResponse("已审批,无法撤销"); 109 | } 110 | return leaveService.deleteLeave(leaveId); 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/controller/RecordController.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.controller; 2 | 3 | import com.jdk.projectinterface.bean.Record; 4 | import com.jdk.projectinterface.common.ServiceResponse; 5 | import com.jdk.projectinterface.service.RecordService; 6 | import com.jdk.projectinterface.utils.Utils; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.web.bind.annotation.*; 9 | import org.springframework.web.multipart.MultipartFile; 10 | 11 | import javax.servlet.http.HttpServletRequest; 12 | import java.sql.Timestamp; 13 | import java.util.HashMap; 14 | import java.util.List; 15 | import java.util.Map; 16 | 17 | @RestController 18 | @RequestMapping("/record") 19 | public class RecordController { 20 | @Autowired 21 | RecordService recordService; 22 | 23 | /** 24 | * 进行签到操作,如果数据库没有该学生记录,则调用addRecord;若已经存在,则调用modifyRecord进行修改 25 | */ 26 | @GetMapping("/doRecord") 27 | public Object doRecord( 28 | @RequestParam("attendId") Integer attendId, 29 | @RequestParam("studentId") Integer studentId, 30 | @RequestParam(value = "time") String time, 31 | @RequestParam(value = "location") String location 32 | ){ 33 | /** 34 | * 从数据库查看当前学生的人脸信息位置,并与签到上传的图片进行比对识别,返回true或false 35 | * 先默认始终为真 36 | */ 37 | String path2 = "src/main/resources/static/check/" + studentId + "_" + attendId + ".png"; 38 | String path1 = "src/main/resources/static/face/" + studentId + ".png"; 39 | String path = "/image/check/" + studentId + "_" + attendId + ".png"; 40 | Integer result = Utils.doIdentify(path1, path2); 41 | System.out.println("confidence = " + result); 42 | Record record = new Record(attendId,studentId,Timestamp.valueOf(time),location,path); 43 | record.setRecordResult(result); 44 | 45 | return recordService.modifyRecord(record); 46 | } 47 | 48 | @GetMapping("/modifyRecord") 49 | public Object modifyRecord( 50 | @RequestParam("attendId") Integer attendId, 51 | @RequestParam("studentId") Integer studentId, 52 | @RequestParam("result") Integer result, 53 | @RequestParam(value = "time",required = false) Timestamp time, 54 | @RequestParam(value = "location",required = false) String location 55 | ){ 56 | Record record = new Record(); 57 | record.setAttendId(attendId); 58 | record.setStudentId(studentId); 59 | record.setRecordResult(result); 60 | record.setRecordTime(time); 61 | record.setRecordLocation(location); 62 | return recordService.modifyRecord(record); 63 | } 64 | 65 | /** 66 | * 删除 67 | */ 68 | @GetMapping("/deleteRecord") 69 | public Object deleteRecord( 70 | @RequestParam("attendId") Integer attendId, 71 | @RequestParam("studentId") Integer studentId 72 | ){ 73 | return recordService.deleteRecord(attendId,studentId); 74 | } 75 | 76 | /** 77 | * 查找 78 | */ 79 | @GetMapping("/findRecordByColumn") 80 | public Object findRecordByColumn(String column,Object value){ 81 | return recordService.findRecordByColumn(column,value); 82 | } 83 | 84 | @GetMapping("/findAllRecord") 85 | public Object findRecordByColumn(@RequestParam("attendId") Integer attendId){ 86 | return recordService.findAllRecord(attendId); 87 | } 88 | 89 | @GetMapping("/findRecordByMap") 90 | public Object findRecordByMap(@RequestParam Map map){ 91 | return recordService.findRecordByMap(map); 92 | } 93 | 94 | @GetMapping("/findRecordByTime") 95 | public Object findRecordByTime(@RequestParam("time") String time){ 96 | return recordService.findRecordByTime(time); 97 | } 98 | 99 | @GetMapping("/findAllStudentRecord") 100 | public Object findAllStudentRecord(@RequestParam("courseId") Integer courseId){ 101 | return recordService.findAllStudentRecord(courseId); 102 | } 103 | 104 | @GetMapping("/findAllRecordWithAttend") 105 | public Object findAllRecordWithAttend(){ 106 | return recordService.findAllRecordWithAttend(); 107 | } 108 | 109 | } 110 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/mapper/AdminMapper.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.jdk.projectinterface.bean.Admin; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface AdminMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/mapper/AttendMapper.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.jdk.projectinterface.bean.Attend; 5 | import org.springframework.stereotype.Repository; 6 | 7 | import java.sql.Timestamp; 8 | import java.util.List; 9 | 10 | @Repository 11 | public interface AttendMapper extends BaseMapper { 12 | 13 | List findNeedLeaveAttend(Integer courseId, Timestamp start, Timestamp end); 14 | 15 | List findStudentAttend(Integer courseId, Timestamp joinTime); 16 | 17 | List findStudentAttendByTime(Integer courseId, Timestamp joinTime, String time); 18 | 19 | List findAttendByTime(Integer courseId, String time); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/mapper/CourseMapper.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.jdk.projectinterface.bean.Course; 5 | import org.springframework.stereotype.Repository; 6 | 7 | import java.util.List; 8 | 9 | @Repository 10 | public interface CourseMapper extends BaseMapper { 11 | 12 | // 联表查询 13 | List findTeacherAllCourse(Integer teacherId); 14 | 15 | Course findCourseByCode(String code); 16 | 17 | List findAllCourse(); 18 | 19 | List findTeacherAllCourseWithName(Integer teacherId, String name); 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/mapper/CourseStudentMapper.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.jdk.projectinterface.bean.CourseStudent; 5 | import com.jdk.projectinterface.bean.Student; 6 | import org.springframework.stereotype.Repository; 7 | 8 | import java.util.List; 9 | 10 | @Repository 11 | public interface CourseStudentMapper extends BaseMapper { 12 | List findStudentByCourseId(Integer courseId); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/mapper/LeaveMapper.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.jdk.projectinterface.bean.Leave; 5 | import org.springframework.stereotype.Repository; 6 | 7 | import java.sql.Timestamp; 8 | import java.util.List; 9 | 10 | @Repository 11 | public interface LeaveMapper extends BaseMapper { 12 | 13 | List findLeavedStudent(Integer courseId, Timestamp startTime, Timestamp endTime); 14 | 15 | List findAllLeave(Integer courseId); 16 | 17 | List findAllLeaveWithStudent(); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/mapper/RecordMapper.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.jdk.projectinterface.bean.Record; 5 | import org.springframework.stereotype.Repository; 6 | 7 | import java.util.List; 8 | 9 | @Repository 10 | public interface RecordMapper extends BaseMapper { 11 | 12 | List findRecordByTime(String recordTime); 13 | 14 | // 查询某次考勤任务的所以签到记录 15 | List findAllRecord(Integer attendId); 16 | 17 | List findAllRecordWithAttend(); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/mapper/StudentMapper.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.jdk.projectinterface.bean.Student; 5 | import org.springframework.stereotype.Repository; 6 | 7 | import java.util.List; 8 | 9 | @Repository 10 | public interface StudentMapper extends BaseMapper { 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/mapper/TeacherMapper.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.jdk.projectinterface.bean.Teacher; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface TeacherMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/service/AccountService.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.jdk.projectinterface.bean.Admin; 5 | import com.jdk.projectinterface.bean.Student; 6 | import com.jdk.projectinterface.bean.Teacher; 7 | import com.jdk.projectinterface.common.ServiceResponse; 8 | import com.jdk.projectinterface.mapper.AdminMapper; 9 | import com.jdk.projectinterface.mapper.StudentMapper; 10 | import com.jdk.projectinterface.mapper.TeacherMapper; 11 | import com.jdk.projectinterface.utils.Utils; 12 | import org.springframework.beans.factory.annotation.Autowired; 13 | import org.springframework.stereotype.Service; 14 | 15 | import java.util.ArrayList; 16 | import java.util.List; 17 | 18 | @Service 19 | public class AccountService { 20 | @Autowired 21 | AdminMapper adminMapper; 22 | 23 | @Autowired 24 | TeacherMapper teacherMapper; 25 | 26 | @Autowired 27 | StudentMapper studentMapper; 28 | 29 | /** 30 | * 根据type指定的用户角色查询数据库,进行登录 31 | * @param type 用户角色 32 | * @param username 用户账号 33 | * @param password 用户密码 34 | * @return ServiceResponse 35 | */ 36 | public ServiceResponse accountLogin(Integer type, String username, String password){ 37 | switch (type){ 38 | case 0: 39 | QueryWrapper adminQuery = new QueryWrapper().eq("admin_account",username).eq("admin_password",password); 40 | Admin admin = adminMapper.selectOne(adminQuery); 41 | return ServiceResponse.backFailResponse("账号或密码错误","登陆成功",admin); 42 | case 1: 43 | QueryWrapper teacherQuery = new QueryWrapper().eq("teacher_account",username).eq("teacher_password",password); 44 | Teacher teacher = teacherMapper.selectOne(teacherQuery); 45 | return ServiceResponse.backFailResponse("账号或密码错误","登陆成功",teacher); 46 | case 2: 47 | QueryWrapper studentQuery = new QueryWrapper().eq("student_account",username).eq("student_password",password); 48 | Student student = studentMapper.selectOne(studentQuery); 49 | return ServiceResponse.backFailResponse("账号或密码错误","登陆成功",student); 50 | default: 51 | return ServiceResponse.createFailResponse("查询失败"); 52 | } 53 | } 54 | 55 | /** 56 | * 添加教师 57 | * @param teacher 要添加的教师对象 58 | * @return 执行操作返回的ServiceResponse对象 59 | */ 60 | public ServiceResponse addTeacher(Teacher teacher){ 61 | ServiceResponse response; 62 | QueryWrapper teacherQuery = new QueryWrapper().eq("teacher_account",teacher.getTeacherAccount()); 63 | Teacher queryResult = teacherMapper.selectOne(teacherQuery); 64 | if (!Utils.isEmpty(queryResult)){ 65 | response = ServiceResponse.createEmptyResponse("该账号已被注册"); 66 | } else { 67 | teacherMapper.insert(teacher); 68 | response = ServiceResponse.createResponse("账号注册成功"); 69 | } 70 | return response; 71 | } 72 | 73 | /** 74 | * 添加学生用户 75 | * @param student 要添加的学生对象 76 | * @return 执行操作返回的ServiceResponse对象 77 | */ 78 | public ServiceResponse addStudent(Student student){ 79 | ServiceResponse response; 80 | QueryWrapper studentQueryWrapper = new QueryWrapper().eq("student_account",student.getStudentAccount()); 81 | Student queryResult = studentMapper.selectOne(studentQueryWrapper); 82 | if (!Utils.isEmpty(queryResult)){ 83 | response = ServiceResponse.createEmptyResponse("该账号已被注册"); 84 | } else { 85 | studentMapper.insert(student); 86 | response = ServiceResponse.createResponse("账号注册成功"); 87 | } 88 | return response; 89 | } 90 | 91 | /** 92 | *通过id和password判断管理员身份 93 | */ 94 | public ServiceResponse findAdminById(Integer adminId, String adminPassword) { 95 | QueryWrapper queryWrapper = new QueryWrapper().eq("admin_id",adminId).eq("admin_password",adminPassword); 96 | Admin admin = adminMapper.selectOne(queryWrapper); 97 | return ServiceResponse.backFailResponse("账号或密码错误","登陆成功",admin); 98 | } 99 | 100 | /** 101 | *修改教师信息 102 | */ 103 | public ServiceResponse modifyTeacher(Teacher teacher) { 104 | teacherMapper.updateById(teacher); 105 | return ServiceResponse.createResponse("修改成功"); 106 | } 107 | 108 | /** 109 | *修改学生信息 110 | */ 111 | public ServiceResponse modifyStudent(Student student) { 112 | studentMapper.updateById(student); 113 | return ServiceResponse.createResponse("修改成功"); 114 | } 115 | 116 | /** 117 | *查找所有教师 118 | */ 119 | public ServiceResponse> findAllTeacher() { 120 | List teachers = teacherMapper.selectList(null); 121 | return ServiceResponse.createResponse("查询成功",teachers); 122 | } 123 | 124 | /** 125 | *查找所有学生 126 | */ 127 | public ServiceResponse> findAllStudent() { 128 | List students = studentMapper.selectList(null); 129 | return ServiceResponse.createResponse("查询成功",students); 130 | } 131 | 132 | /** 133 | *根据column属性的value值,模糊查询教师信息 134 | */ 135 | public ServiceResponse> findTeacher(String column,Object value) { 136 | List teachers = teacherMapper.selectList(new QueryWrapper().like(column, value)); 137 | return ServiceResponse.createResponse("查询成功",teachers); 138 | } 139 | 140 | /** 141 | *根据column属性的value值,模糊查询学生信息 142 | */ 143 | public ServiceResponse> findStudent(String column, Object value) { 144 | List students = studentMapper.selectList(new QueryWrapper().like(column, value)); 145 | return ServiceResponse.createResponse("查询成功",students); 146 | } 147 | 148 | /** 149 | *通过教师id删除教师 150 | */ 151 | public ServiceResponse deleteTeacher(Integer accountId) { 152 | teacherMapper.deleteById(accountId); 153 | return ServiceResponse.createResponse("删除成功"); 154 | } 155 | 156 | /** 157 | * 通过学生id删除学生 158 | */ 159 | public ServiceResponse deleteStudent(Integer accountId) { 160 | studentMapper.deleteById(accountId); 161 | return ServiceResponse.createResponse("删除成功"); 162 | } 163 | 164 | /** 165 | * 查询某账号是否存在 166 | * 存在code为200,不存在为204 167 | */ 168 | public Object confirmAccount(Integer type,String account) { 169 | Integer count; 170 | if (type == 1){ 171 | count = teacherMapper.selectCount(new QueryWrapper().eq("teacher_account", account)); 172 | } else { 173 | count = studentMapper.selectCount(new QueryWrapper().eq("student_account", account)); 174 | } 175 | if (count == 0) { 176 | return ServiceResponse.createEmptyResponse(String.valueOf(count)); 177 | } else { 178 | return ServiceResponse.createResponse(String.valueOf(count)); 179 | } 180 | } 181 | 182 | public Object confirmAccount(Integer type, String account, String phone) { 183 | List accountTeachers = new ArrayList<>(); 184 | List accountStudents = new ArrayList<>(); 185 | if (type == 1){ 186 | accountTeachers = teacherMapper.selectList(new QueryWrapper().eq("teacher_account", account).eq("teacher_phone",phone)); 187 | } else { 188 | accountStudents = studentMapper.selectList(new QueryWrapper().eq("student_account", account).eq("student_phone",phone)); 189 | } 190 | if (accountStudents.size() + accountTeachers.size() == 0 ) { 191 | return ServiceResponse.createEmptyResponse("0"); 192 | } else if (accountStudents.size() != 0){ 193 | return ServiceResponse.createResponse(String.valueOf(accountStudents.get(0).getStudentId())); 194 | } else { 195 | return ServiceResponse.createResponse(String.valueOf(accountTeachers.get(0).getTeacherId())); 196 | } 197 | } 198 | } 199 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/service/AttendService.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 5 | import com.jdk.projectinterface.bean.Attend; 6 | import com.jdk.projectinterface.bean.CourseStudent; 7 | import com.jdk.projectinterface.bean.Leave; 8 | import com.jdk.projectinterface.bean.Record; 9 | import com.jdk.projectinterface.common.ServiceResponse; 10 | import com.jdk.projectinterface.mapper.AttendMapper; 11 | import com.jdk.projectinterface.mapper.CourseStudentMapper; 12 | import com.jdk.projectinterface.mapper.LeaveMapper; 13 | import com.jdk.projectinterface.mapper.RecordMapper; 14 | import org.springframework.beans.factory.annotation.Autowired; 15 | import org.springframework.stereotype.Service; 16 | import org.springframework.transaction.annotation.Transactional; 17 | import org.springframework.transaction.interceptor.TransactionAspectSupport; 18 | 19 | import java.sql.Timestamp; 20 | import java.util.List; 21 | import java.util.Map; 22 | 23 | @Service 24 | public class AttendService { 25 | @Autowired 26 | AttendMapper attendMapper; 27 | 28 | @Autowired 29 | LeaveMapper leaveMapper; 30 | 31 | @Autowired 32 | RecordMapper recordMapper; 33 | 34 | @Autowired 35 | CourseStudentMapper courseStudentMapper; 36 | 37 | /** 38 | * 添加 39 | */ 40 | @Transactional(rollbackFor = Exception.class) 41 | public ServiceResponse addAttend(Attend attend) { 42 | try { 43 | attendMapper.insert(attend); 44 | 45 | List courseStudents = courseStudentMapper.selectList(new QueryWrapper().eq("course_id", attend.getCourseId())); 46 | Record record = new Record(); 47 | record.setAttendId(attend.getAttendId()); 48 | // 将所有参与考勤学生结果初始化为0 49 | for (CourseStudent courseStudent : courseStudents) { 50 | record.setStudentId(courseStudent.getStudentId()); 51 | record.setRecordResult(0); 52 | recordMapper.insert(record); 53 | } 54 | // 再去查看是否有请假学生,在申请请假表时也会查看考勤表 55 | List leavedStudent = leaveMapper.findLeavedStudent(attend.getCourseId(), attend.getAttendStart(), attend.getAttendEnd()); 56 | for (Leave leave : leavedStudent) { 57 | record.setStudentId(leave.getStudentId()); 58 | record.setRecordResult(3); 59 | recordMapper.update(record,new UpdateWrapper().eq("student_id",record.getStudentId()).eq("attend_id",record.getAttendId())); 60 | } 61 | 62 | return ServiceResponse.createResponse("创建成功"); 63 | } catch (Exception e){ 64 | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 65 | e.printStackTrace(); 66 | return ServiceResponse.createFailResponse("创建错误,请重试"); 67 | } 68 | } 69 | 70 | /** 71 | * 修改 72 | */ 73 | public ServiceResponse modifyAttend(Attend attend){ 74 | attendMapper.updateById(attend); 75 | return ServiceResponse.createResponse("修改成功"); 76 | } 77 | 78 | /** 79 | * 查询 80 | */ 81 | public ServiceResponse> findAttendByColumn(String column,Object value){ 82 | List attends = attendMapper.selectList(new QueryWrapper().like(column, value).orderByDesc("attend_start")); 83 | return ServiceResponse.backFailResponse("查询结果为空","查询成功", attends); 84 | } 85 | 86 | public ServiceResponse> findAttendByMap(Map map){ 87 | List attends = attendMapper.selectByMap(map); 88 | return ServiceResponse.backFailResponse("查询结果为空","查询成功", attends); 89 | } 90 | 91 | public ServiceResponse> findAttendByCourseId(Integer courseId){ 92 | List attends = attendMapper.selectList(new QueryWrapper().eq("course_id", courseId).orderByDesc("attend_start")); 93 | return ServiceResponse.createResponse("查询成功",attends); 94 | } 95 | 96 | /** 97 | * 删除 98 | */ 99 | public ServiceResponse deleteAttend(Integer attendId){ 100 | attendMapper.deleteById(attendId); 101 | return ServiceResponse.createResponse("删除成功"); 102 | } 103 | 104 | public ServiceResponse> findStudentAttend(Integer courseId, Timestamp joinTime) { 105 | List attends = attendMapper.findStudentAttend(courseId,joinTime); 106 | return ServiceResponse.createResponse("查询成功",attends); 107 | } 108 | 109 | public ServiceResponse> findStudentAttendByTime(Integer courseId, Timestamp joinTime, String time) { 110 | List attends = attendMapper.findStudentAttendByTime(courseId,joinTime,time); 111 | return ServiceResponse.createResponse("查询成功",attends); 112 | } 113 | 114 | public ServiceResponse> findAttendByTime(Integer courseId, String time) { 115 | List attends = attendMapper.findAttendByTime(courseId,time); 116 | return ServiceResponse.createResponse("查询成功",attends); 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/service/CourseService.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.jdk.projectinterface.bean.Course; 5 | import com.jdk.projectinterface.bean.CourseStudent; 6 | import com.jdk.projectinterface.common.ServiceResponse; 7 | import com.jdk.projectinterface.mapper.CourseMapper; 8 | import com.jdk.projectinterface.mapper.CourseStudentMapper; 9 | import com.jdk.projectinterface.mapper.TeacherMapper; 10 | import com.jdk.projectinterface.utils.Utils; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | import org.springframework.stereotype.Service; 13 | 14 | import java.util.ArrayList; 15 | import java.util.List; 16 | import java.util.Map; 17 | 18 | @Service 19 | public class CourseService { 20 | @Autowired 21 | CourseMapper courseMapper; 22 | 23 | @Autowired 24 | CourseStudentMapper courseStudentMapper; 25 | 26 | @Autowired 27 | TeacherMapper teacherMapper; 28 | 29 | public ServiceResponse addCourse(Course course) { 30 | String code; 31 | while (true){ 32 | code = String.valueOf((int) ((Math.random() * 9 + 1) * 100000)); 33 | Course result = courseMapper.selectOne(new QueryWrapper().eq("course_code", code)); 34 | if (Utils.isEmpty(result)) { 35 | break; 36 | } 37 | } 38 | course.setCourseCode(code); 39 | courseMapper.insert(course); 40 | if (course.getCourseId() != null) { 41 | // 修改课程头像名称并重写入数据库 42 | String s = Utils.renameImage(course.getCourseAvatar(), "c" + course.getCourseId()); 43 | course.setCourseAvatar(s); 44 | courseMapper.updateById(course); 45 | return ServiceResponse.createResponse("创建成功",code); 46 | } 47 | return ServiceResponse.createFailResponse("添加失败"); 48 | } 49 | 50 | /** 51 | * 模糊查询 52 | */ 53 | public ServiceResponse> findCourseByColumn(String column, Object value) { 54 | List courses = courseMapper.selectList(new QueryWrapper().like(column, value)); 55 | return ServiceResponse.createResponse("查询成功",courses); 56 | } 57 | 58 | /** 59 | * 根据map里的值进行准确查找 60 | */ 61 | public ServiceResponse> findCourseByMap(Map map){ 62 | List courses = courseMapper.selectByMap(map); 63 | return ServiceResponse.createResponse("查询成功",courses); 64 | } 65 | 66 | public ServiceResponse modifyCourse(Course course) { 67 | courseMapper.updateById(course); 68 | return ServiceResponse.createResponse("修改成功"); 69 | } 70 | 71 | 72 | public ServiceResponse deleteCourse(Integer courseId) { 73 | courseMapper.deleteById(courseId); 74 | return ServiceResponse.createResponse("删除成功"); 75 | } 76 | 77 | public ServiceResponse findCourseByCode(String code) { 78 | Course course = courseMapper.findCourseByCode(code); 79 | return ServiceResponse.createResponse("查询成功",course); 80 | } 81 | 82 | public ServiceResponse> findCourseByTeacherId(Integer teacherId){ 83 | List courses = courseMapper.findTeacherAllCourse(teacherId); 84 | return ServiceResponse.createResponse("查询成功",courses); 85 | } 86 | 87 | 88 | 89 | public ServiceResponse> findCourseByStudentId(Integer studentId) { 90 | List courseIdList = courseStudentMapper.selectList(new QueryWrapper().eq("student_id", studentId)); 91 | List courseList = new ArrayList<>(); 92 | for (CourseStudent courseStudent : courseIdList) { 93 | Course course = courseMapper.selectById(courseStudent.getCourseId()); 94 | course.setTeacher(teacherMapper.selectById(course.getTeacherId())); 95 | course.setJoinTime(courseStudent.getJoinTime()); 96 | courseList.add(course); 97 | } 98 | return ServiceResponse.createResponse("查询成功",courseList); 99 | } 100 | 101 | public ServiceResponse> findAllCourse(){ 102 | List courses = courseMapper.findAllCourse(); 103 | return ServiceResponse.createResponse("查询成功",courses); 104 | } 105 | 106 | public ServiceResponse> findCourseByTeacherIdWithName(Integer teacherId, String name) { 107 | List courses = courseMapper.findTeacherAllCourseWithName(teacherId,name); 108 | return ServiceResponse.createResponse("查询成功",courses); 109 | } 110 | 111 | public ServiceResponse> findCourseByStudentIdWithName(Integer studentId, String name) { 112 | List courseIdList = courseStudentMapper.selectList(new QueryWrapper().eq("student_id", studentId)); 113 | List courseList = new ArrayList<>(); 114 | for (CourseStudent courseStudent : courseIdList) { 115 | Course course = courseMapper.selectOne(new QueryWrapper().eq("course_id",courseStudent.getCourseId()).like("course_name",name)); 116 | if (Utils.isEmpty(course)){ 117 | continue; 118 | } 119 | course.setTeacher(teacherMapper.selectById(course.getTeacherId())); 120 | course.setJoinTime(courseStudent.getJoinTime()); 121 | courseList.add(course); 122 | } 123 | return ServiceResponse.createResponse("查询成功",courseList); 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/service/CourseStudentService.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.jdk.projectinterface.bean.Course; 5 | import com.jdk.projectinterface.bean.CourseStudent; 6 | import com.jdk.projectinterface.bean.Student; 7 | import com.jdk.projectinterface.common.ServiceResponse; 8 | import com.jdk.projectinterface.mapper.CourseStudentMapper; 9 | import com.jdk.projectinterface.mapper.StudentMapper; 10 | import org.springframework.beans.factory.annotation.Autowired; 11 | import org.springframework.stereotype.Service; 12 | 13 | import java.util.ArrayList; 14 | import java.util.List; 15 | import java.util.Map; 16 | 17 | @Service 18 | public class CourseStudentService { 19 | @Autowired 20 | CourseStudentMapper courseStudentMapper; 21 | 22 | @Autowired 23 | CourseService courseService; 24 | 25 | @Autowired 26 | StudentMapper studentMapper; 27 | 28 | /** 29 | *添加 30 | */ 31 | public ServiceResponse addCourseStudent(String courseCode, Integer studentId) { 32 | List response = courseService.findCourseByColumn("course_code", courseCode).getData(); 33 | if (response.size() == 0){ 34 | return ServiceResponse.createEmptyResponse("邀请码不存在"); 35 | } 36 | QueryWrapper query = new QueryWrapper().eq("course_id", response.get(0).getCourseId()).eq("student_id", studentId); 37 | Integer count = courseStudentMapper.selectCount(query); 38 | if (count != 0){ 39 | return ServiceResponse.createEmptyResponse("已加入该课程"); 40 | } 41 | 42 | courseStudentMapper.insert(new CourseStudent(response.get(0).getCourseId(),studentId)); 43 | CourseStudent courseStudent = courseStudentMapper.selectOne(query); 44 | return ServiceResponse.createResponse("加入课程成功",courseStudent); 45 | } 46 | 47 | /** 48 | *查询 49 | */ 50 | public ServiceResponse> findCourseStudentByMap(Map map){ 51 | List totals = courseStudentMapper.selectByMap(map); 52 | return ServiceResponse.createResponse("查询成功",totals); 53 | } 54 | 55 | public ServiceResponse> findCourseStudentByColumn(String column,Object value){ 56 | List totals = courseStudentMapper.selectList(new QueryWrapper().like(column,value)); 57 | return ServiceResponse.createResponse("查询成功",totals); 58 | } 59 | 60 | /** 61 | *修改 62 | */ 63 | public ServiceResponse modifyCourseStudent(CourseStudent total){ 64 | courseStudentMapper.update(total, new QueryWrapper().eq("course_id", total.getCourseId()).eq("student_id", total.getStudentId())); 65 | return ServiceResponse.createResponse("修改成功"); 66 | } 67 | 68 | /** 69 | *删除 70 | */ 71 | public ServiceResponse deleteCourseStudent(Integer courseId,Integer studentId){ 72 | courseStudentMapper.delete(new QueryWrapper().eq("course_id", courseId).eq("student_id", studentId)); 73 | return ServiceResponse.createResponse("删除成功"); 74 | } 75 | 76 | public ServiceResponse> findAllByCourseId(Integer courseId) { 77 | /*List courseStudents = courseStudentMapper.selectList(new QueryWrapper().eq("course_id", courseId)); 78 | List students = new ArrayList<>(); 79 | for (CourseStudent courseStudent : courseStudents) { 80 | students.add(studentMapper.selectById(courseStudent.getStudentId())); 81 | }*/ 82 | List students = courseStudentMapper.findStudentByCourseId(courseId); 83 | return ServiceResponse.createResponse("查询成功",students); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/service/LeaveService.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 5 | import com.jdk.projectinterface.bean.Attend; 6 | import com.jdk.projectinterface.bean.Leave; 7 | import com.jdk.projectinterface.bean.Record; 8 | import com.jdk.projectinterface.common.ServiceResponse; 9 | import com.jdk.projectinterface.mapper.AttendMapper; 10 | import com.jdk.projectinterface.mapper.LeaveMapper; 11 | import com.jdk.projectinterface.mapper.RecordMapper; 12 | import org.springframework.beans.factory.annotation.Autowired; 13 | import org.springframework.stereotype.Service; 14 | 15 | import java.util.List; 16 | import java.util.Map; 17 | 18 | @Service 19 | public class LeaveService { 20 | @Autowired 21 | LeaveMapper leaveMapper; 22 | 23 | @Autowired 24 | RecordMapper recordMapper; 25 | 26 | @Autowired 27 | AttendMapper attendMapper; 28 | 29 | 30 | public ServiceResponse addLeave(Leave leave) { 31 | leaveMapper.insert(leave); 32 | return ServiceResponse.createResponse("创建成功"); 33 | } 34 | 35 | public ServiceResponse> findLeaveByMap(Map map) { 36 | List leaves = leaveMapper.selectByMap(map); 37 | return ServiceResponse.createResponse("查询成功",leaves); 38 | } 39 | 40 | public ServiceResponse> findLeaveByColumn(String column,Object value) { 41 | List leaves = leaveMapper.selectList(new QueryWrapper().like(column,value)); 42 | return ServiceResponse.createResponse("查询成功",leaves); 43 | } 44 | 45 | public ServiceResponse modifyLeave(Leave leave) { 46 | if (leave.getApprovalResult() == 2){ 47 | Record record = new Record(); 48 | record.setStudentId(leave.getStudentId()); 49 | /** 50 | * 首先通过课程id找到该课程下的所有考勤任务 51 | * 再选择考勤时间在请假时间内的部分,获得他们的attendID 52 | * 将这些任务中该生的状态设为请假 53 | */ 54 | List needLeaveAttend = attendMapper.findNeedLeaveAttend(leave.getCourseId(), leave.getLeaveTime(), leave.getBackTime()); 55 | for (Attend attend : needLeaveAttend) { 56 | record.setAttendId(attend.getAttendId()); 57 | record.setRecordResult(3); 58 | recordMapper.update(record,new UpdateWrapper().eq("attend_id",record.getAttendId()).eq("student_id",record.getStudentId())); 59 | } 60 | } 61 | leaveMapper.updateById(leave); 62 | return ServiceResponse.createResponse("审批成功"); 63 | } 64 | 65 | public ServiceResponse deleteLeave(Integer leaveId) { 66 | leaveMapper.deleteById(leaveId); 67 | return ServiceResponse.createResponse("删除成功"); 68 | } 69 | 70 | public ServiceResponse> findAllLeave(Integer courseId) { 71 | List allLeave = leaveMapper.findAllLeave(courseId); 72 | return ServiceResponse.createResponse("查询成功",allLeave); 73 | 74 | } 75 | 76 | public ServiceResponse> findAllLeaveByStudentId(Integer courseId, Integer studentId) { 77 | List leaves = leaveMapper.selectList(new QueryWrapper().eq("course_id",courseId).eq("student_id", studentId).orderByDesc("leave_time")); 78 | return ServiceResponse.createResponse("查询成功",leaves); 79 | } 80 | 81 | public ServiceResponse> findAllLeaveWithStudent() { 82 | List allLeave = leaveMapper.findAllLeaveWithStudent(); 83 | return ServiceResponse.createResponse("查询成功",allLeave); 84 | 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/service/RecordService.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.service; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 4 | import com.jdk.projectinterface.bean.*; 5 | import com.jdk.projectinterface.common.ServiceResponse; 6 | import com.jdk.projectinterface.mapper.CourseStudentMapper; 7 | import com.jdk.projectinterface.mapper.RecordMapper; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Service; 10 | 11 | import java.util.ArrayList; 12 | import java.util.HashMap; 13 | import java.util.List; 14 | import java.util.Map; 15 | 16 | @Service 17 | public class RecordService { 18 | @Autowired 19 | RecordMapper recordMapper; 20 | 21 | @Autowired 22 | AttendService attendService; 23 | 24 | @Autowired 25 | CourseStudentService courseStudentService; 26 | 27 | public ServiceResponse modifyRecord(Record record){ 28 | /** 29 | * 在修改之前,先检查其 30 | */ 31 | recordMapper.update(record, new QueryWrapper().eq("attend_id", record.getAttendId()).eq("student_id", record.getStudentId())); 32 | String message = record.getRecordResult() == 1 ? "人脸识别未通过" : "签到成功"; 33 | return ServiceResponse.createResponse(message); 34 | } 35 | 36 | /** 37 | * 查找 38 | */ 39 | public ServiceResponse> findRecordByMap(Map map) { 40 | List records = recordMapper.selectByMap(map); 41 | return ServiceResponse.createResponse("查找成功",records); 42 | } 43 | 44 | // 通过考勤id查询到当前所有该考勤下的数据 45 | public ServiceResponse> findAllRecord(Integer attendId){ 46 | List records = recordMapper.findAllRecord(attendId); 47 | return ServiceResponse.createResponse("查找成功",records); 48 | } 49 | 50 | public ServiceResponse> findRecordByColumn(String column,Object value){ 51 | List records = recordMapper.selectList(new QueryWrapper().like(column, value)); 52 | return ServiceResponse.createResponse("查找成功",records); 53 | } 54 | 55 | /** 56 | * 通过时间戳类型模糊查询 57 | */ 58 | public ServiceResponse> findRecordByTime(String value){ 59 | List records = recordMapper.findRecordByTime(value); 60 | return ServiceResponse.createResponse("查询成功",records); 61 | } 62 | 63 | /** 64 | * 删除 65 | */ 66 | public ServiceResponse deleteRecord(Integer attendId,Integer studentId){ 67 | recordMapper.delete(new QueryWrapper().eq("attend_id", attendId).eq("student_id", studentId)); 68 | return ServiceResponse.createResponse("删除成功"); 69 | } 70 | 71 | /** 72 | * 统计所有学生的考勤记录 73 | */ 74 | public ServiceResponse> findAllStudentRecord(Integer courseId) { 75 | List allStudent = courseStudentService.findAllByCourseId(courseId).getData(); 76 | List attends = attendService.findAttendByCourseId(courseId).getData(); 77 | QueryWrapper wrapper = new QueryWrapper<>(); 78 | List list = new ArrayList<>(); 79 | for (CourseStudent courseStudent : allStudent) { 80 | Student student = courseStudent.getStudent(); 81 | Integer absentNum = 0; 82 | Integer failNum = 0; 83 | Integer successNum = 0; 84 | Integer leaveNum = 0; 85 | for (Attend attend : attends) { 86 | absentNum = absentNum + recordMapper.selectCount(wrapper.eq("attend_id",attend.getAttendId()).eq("student_id", student.getStudentId()).eq("record_result", 0)); 87 | wrapper.clear(); 88 | failNum = failNum + recordMapper.selectCount(wrapper.eq("attend_id",attend.getAttendId()).eq("student_id", student.getStudentId()).eq("record_result", 1)); 89 | wrapper.clear(); 90 | successNum = successNum + recordMapper.selectCount(wrapper.eq("attend_id",attend.getAttendId()).eq("student_id", student.getStudentId()).eq("record_result", 2)); 91 | wrapper.clear(); 92 | leaveNum = leaveNum + recordMapper.selectCount(wrapper.eq("attend_id",attend.getAttendId()).eq("student_id", student.getStudentId()).eq("record_result", 3)); 93 | wrapper.clear(); 94 | } 95 | list.add(new Statistics(student.getStudentName(),student.getStudentAccount(),absentNum,failNum,successNum,leaveNum)); 96 | } 97 | return ServiceResponse.createResponse("查询成功",list); 98 | } 99 | 100 | public ServiceResponse> findAllRecordWithAttend(){ 101 | List records = recordMapper.findAllRecordWithAttend(); 102 | return ServiceResponse.createResponse("查找成功",records); 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /src/main/java/com/jdk/projectinterface/utils/Utils.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface.utils; 2 | 3 | import org.springframework.web.multipart.MultipartFile; 4 | 5 | import javax.servlet.http.HttpServletRequest; 6 | import java.io.BufferedReader; 7 | import java.io.File; 8 | import java.io.IOException; 9 | import java.io.InputStreamReader; 10 | import java.util.*; 11 | import java.util.regex.Matcher; 12 | import java.util.regex.Pattern; 13 | 14 | public class Utils { 15 | 16 | /** 17 | * 调用人脸识别脚本并获取识别结果 18 | * @param path1 人脸图片地址 19 | * @param path2 考勤图片地址 20 | * @return 2:成功 1:失败 21 | */ 22 | public static Integer doIdentify(String path1,String path2){ 23 | StringBuffer sb = new StringBuffer(); 24 | try { 25 | String[] args = new String[]{"F:\\Anaconda\\envs\\face\\python.exe","F:/graduation_project/project_face/face.py" , path1 , path2}; 26 | Process process = Runtime.getRuntime().exec(args); 27 | process.waitFor(); 28 | BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); 29 | String line; 30 | while ((line = in.readLine()) != null) { 31 | sb.append(line); 32 | } 33 | in.close(); 34 | } catch (IOException | InterruptedException e) { 35 | e.printStackTrace(); 36 | } 37 | return Integer.valueOf(String.valueOf(sb)); 38 | } 39 | 40 | /** 41 | * 上传图像至服务器 42 | * @param file 上传的图片文件 43 | * @param type 1:老师头像,2:学生头像,3:课程头像,4:人脸信息,5:考勤时的人脸信息 44 | * @param id 编号 45 | * @return 存储的映射路径 46 | */ 47 | public static String saveImage(MultipartFile file,String type,String id){ 48 | if (file.isEmpty()){ 49 | return null; 50 | } 51 | String prefix = ""; 52 | String parentPath = ""; 53 | switch (type){ 54 | case "1": 55 | prefix = "t"; 56 | parentPath = "avatars"; 57 | break; 58 | case "2": 59 | prefix = "s"; 60 | parentPath = "avatars"; 61 | break; 62 | case "3": 63 | prefix = "c"; 64 | parentPath = "avatars"; 65 | break; 66 | case "4": 67 | prefix = ""; 68 | parentPath = "face"; 69 | break; 70 | case "5": 71 | prefix = ""; 72 | parentPath = "check"; 73 | break; 74 | default: 75 | break; 76 | } 77 | 78 | String path = "src/main/resources/static/"+ parentPath + "/"; 79 | File folder = new File(path); 80 | if (!folder.isDirectory()){ 81 | folder.mkdirs(); 82 | } 83 | String ext = ".png"; 84 | String photoName = prefix + id + ext; 85 | try { 86 | File newFile = new File(folder.getAbsolutePath() + File.separator + photoName); 87 | file.transferTo(newFile); 88 | return "/image/" + parentPath + "/" + photoName; 89 | } catch (IOException e) { 90 | e.printStackTrace(); 91 | } 92 | return null; 93 | } 94 | 95 | public static String renameImage(String path,String name){ 96 | String realPath = "src/main/resources/static/avatars/"; 97 | String virtualPath = path.substring(0,path.lastIndexOf("/") + 1); 98 | String oldName = path.substring(path.lastIndexOf("/") + 1); 99 | String ext = oldName.substring(oldName.lastIndexOf(".")); 100 | File file = new File(realPath + oldName); 101 | File file1 = new File(realPath + name + ext); 102 | boolean b = file.renameTo(file1); 103 | return b ? virtualPath + name + ext : null; 104 | } 105 | 106 | /** 107 | * 删除图片 108 | * @param path 图片的路径 109 | */ 110 | public static void deleteImage(String path , String parentPath){ 111 | String p = "src/main/resources/static/"+ parentPath + path.substring(path.lastIndexOf("/")); 112 | File file = new File(p); 113 | if (!path.isEmpty()){ 114 | file.delete(); 115 | } 116 | } 117 | 118 | /** 119 | * 判断对象是否为空 120 | * @param o 需要判断的对象 121 | * @return 为空返回true, 不为空返回false 122 | */ 123 | public static boolean isEmpty(Object o) { 124 | if (o == null || Objects.isNull(o)) { 125 | return true; 126 | } 127 | if (o instanceof String) { 128 | if ("".equals(o.toString().trim())) { 129 | return true; 130 | } 131 | return "undefined".equals(o.toString().trim()); 132 | } else if (o instanceof List) { 133 | return ((List) o).size() == 0; 134 | } else if (o instanceof Map) { 135 | return ((Map) o).size() == 0; 136 | } else if (o instanceof Set) { 137 | return ((Set) o).size() == 0; 138 | } else if (o instanceof Object[]) { 139 | return ((Object[]) o).length == 0; 140 | } else if (o instanceof int[]) { 141 | return ((int[]) o).length == 0; 142 | } else if (o instanceof long[]) { 143 | return ((long[]) o).length == 0; 144 | } 145 | return false; 146 | } 147 | 148 | /** 149 | * 验证手机号码 150 | * @param mobiles 151 | * @return 152 | */ 153 | public static boolean isPhone(String mobiles){ 154 | boolean flag = false; 155 | try{ 156 | String pattern = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"; 157 | Pattern p = Pattern.compile(pattern); 158 | Matcher m = p.matcher(mobiles); 159 | flag = m.matches(); 160 | }catch(Exception e){ 161 | e.printStackTrace(); 162 | } 163 | return flag; 164 | } 165 | 166 | /** 167 | * 验证邮箱地址是否正确 168 | * @param email 169 | * @return 170 | */ 171 | public static boolean IsEmail(String email){ 172 | boolean flag = false; 173 | try{ 174 | String check = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$"; 175 | Pattern regex = Pattern.compile(check); 176 | Matcher matcher = regex.matcher(email); 177 | flag = matcher.matches(); 178 | }catch(Exception e){ 179 | e.printStackTrace(); 180 | } 181 | return flag; 182 | } 183 | } 184 | -------------------------------------------------------------------------------- /src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | url: jdbc:mysql://localhost:3306/project_database?serverTimezone=GMT%2B8 4 | driver-class-name: com.mysql.cj.jdbc.Driver 5 | # 数据库用户名 6 | username: root 7 | # 数据库密码 8 | password: 9 | type: com.zaxxer.hikari.HikariDataSource 10 | thymeleaf: 11 | prefix: classpath:/templates/ 12 | suffix: .html 13 | cache: false 14 | 15 | servlet: 16 | multipart: 17 | max-file-size: 100MB 18 | mybatis-plus: 19 | config-location: classpath:mybatis/mybatis-config.xml 20 | mapper-locations: classpath:mapper/*.xml 21 | 22 | 23 | server: 24 | port: 8080 25 | 26 | logging: 27 | level: 28 | com.jdk.projectinterface.mapper.*: debug -------------------------------------------------------------------------------- /src/main/resources/mapper/AttendMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 13 | 18 | 24 | 28 | -------------------------------------------------------------------------------- /src/main/resources/mapper/CourseMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 35 | 41 | 46 | 53 | -------------------------------------------------------------------------------- /src/main/resources/mapper/LeaveMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 26 | 27 | 32 | 36 | 37 | -------------------------------------------------------------------------------- /src/main/resources/mapper/RecordMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 53 | 54 | 60 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /src/main/resources/mapper/StudentMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | -------------------------------------------------------------------------------- /src/main/resources/mybatis/mybatis-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 测试 7 | 8 | 9 |

接口测试


10 |

账户管理

11 | 测试 12 | 管理员登录 13 | 教师登录 14 | 学生登录
15 | 16 | 教师注册 17 | 学生注册
18 | 19 | 教师修改 20 | 学生修改
21 | 22 | 查看所有教师用户 23 | 查看所有学生用户 24 | 模糊查询用户(type为用户角色,column为要查询的列名,value为模糊查询的值)
25 | 26 | 删除教师
27 | 28 |

课程管理

29 | 创建课程 30 | 查询课程 31 | 修改课程 32 | 删除课程 33 | 34 |

课程学生管理

35 | 学生加入课程 36 | 修改课程学生信息 37 | 查看所有课程学生信息 38 | 查看课程学生信息(模糊查询) 39 | 查看课程学生信息(Map) 40 | 删除课程学生 41 | 42 |

考勤任务管理

43 | 创建考勤任务 44 | 修改考勤任务 45 | 查询考勤任务(map) 46 | 查询考勤任务(column模糊查找) 47 | 删除考勤任务 48 | 49 |

考勤记录管理(学生完成考勤任务)

50 | 执行签到 51 | 52 |
53 | type
54 | id
55 | 图片文件
56 | 57 |

58 | 59 | 修改考勤记录(允许教师修改,或者学生在规定时间重复提交) 60 | 查询考勤记录(column) 61 | 查询考勤记录(Map) 62 | 删除考勤记录 63 | 64 |

请假管理

65 | 学生提交申请 66 | 查看课程的所有申请 67 | 审批请假 68 | 撤销请假申请 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /src/python/face.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JinFengHua/project-interface/e619461b90d39744bf3dbfabaecc130028c5b6e7/src/python/face.exe -------------------------------------------------------------------------------- /src/test/java/com/jdk/projectinterface/ProjectInterfaceApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.jdk.projectinterface; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | 7 | @SpringBootTest 8 | class ProjectInterfaceApplicationTests { 9 | 10 | @Test 11 | public void test(){ 12 | service.doUpdateCourse(); 13 | } 14 | 15 | } 16 | --------------------------------------------------------------------------------